タグ付けされた質問 「procedural-generation」

手続き型の生成とは、手動ではなくアルゴリズムと計算に基づいてコンテンツを構築することです。

1
滑らかなボクセル地形
個人的なプロジェクトとして、私はCastle Storyの滑らかな地形のような地形を作成する地形ジェネレーターを作成しようとしています。 あなたがそれを見たことがないなら、ここに: ご覧のとおり、ブロックと「スムーズ」ブロックの組み合わせです。 この外観をエミュレートするために私が試みたのは、各サーフェスブロックにミニハイトマップを与えることです。これは通常は機能しますが、いくつかの問題があり、次のような地形が生じます。 問題は、各ブロックが1x1x1であるが、特定の場所の高さがマイナスまたは> 1である場合があることです。その場合、クリップして、高さを0または1に設定します。 私が意味することをよりよく説明するために、図を示します。 高さを生成するために、基本的に次のことを行います。 genColumn(int x, int z) { int highestBlockY = (int)noise2d(x, z); bool is_surface = true; for(int y = max_height - 1; y >= 0; y--) { Block b; if(is_surface) { b = Block.Grass; b.HasHeightMap = true; // generate heightmap for(int ix = …

1
Substanceのランタイムテクスチャキャッシングを停止するにはどうすればよいですか?
サブスタンスエンジンを使用したプロシージャルテクスチャは、キャッシュをオフにし、公開された変数を一度に1つずつ変更し、頻繁に変更し、さらに2、3回変更を試みた後でさえ、非常に迅速に更新されるようです。 ただし、基本的には反対です。たとえば、ユニットには、ダメージを受けたときに異なる方法で血液を生成する「血液」変数と、傷やへこみを生成するが治癒しても元に戻らない「戦闘服」変数があります。 そのため、変数がキャッシュされないようにするには、変数をダミー値に設定し、通常に戻してからを呼び出す必要がありますRebuildTexturesImmediately。 実行時にSubstanceに変数をキャッシュしないように指示するにはどうすればよいですか?一度変更すると、テクスチャをすばやく再生成できますか?

3
地形ジェネレーターの進化
私は最近この質問をしましたが、結論は、手続き型ゲームコンテンツの作成に遺伝的プログラミング(GP)を使用することは実際には行われていないということです。それを変えたいです。 新しい地形ジェネレーターを見つけるのに役立つGPを展開できると確信しています。私が得ようとしている質問は、これをどのように達成できるかということです。 すべてのGPには、すべてのGPに一般化できるいくつかの基本的な部分があります(親選択、組換え、突然変異、生存)。私はそれらを自分で理解することができます。問題は、問題固有の部分で発生します。これらは、コードで問題を表現する方法(これは通常ツリーを使用します)、およびジェネレーターがどれほど優れているかを評価する方法です(これは1つ以上の値です)。 簡単に言うと質問: ツリーに解析できる方法で地形ジェネレータをどのように表現しますか? これはどのような地形を生成する必要がありますか?(高さマップ、頂点グラフ、...) これは、hightmapに基づいているものが少ないほど良いです。 ソリューションの適合性を評価するために何が使用されますか? 例:興味深い地形が必要なため、値の1つを、地形上の各頂点の法線の平均変化とすることができます。

3
Scorched Earthのような地形を生成するにはどうすればよいですか?
私はウェブ開発者であり、自分のゲームを書き始めたいと思っています。 慣れ親しむために、ここではJavaScriptとcanvas要素を選択しました。 Scorched Earthでそのような地形を生成したいです。 私の最初の試みは、y値をランダム化するだけではいけないことに気づきました。山と谷にはある程度の正気がなければなりませんでした。 私は少しグーグルで検索しましたが、私にとって十分なシンプルなものが見つからないか、間違ったキーワードを使用しています。 ゲームプログラミングはまったく新しい(2003年にVisual Basicを使用してBreakoutを作成したため)ことを念頭に置いて、この例で何かを生成するために使用するアルゴリズムの種類を教えてください。

2
Axis Aligned Spatial Division:スペースをランダムな長方形に分割しますか?
3Dスペースをランダムな軸で整列したボックスの形状に分割する方法が必要です。とりあえず、テストのために2Dスペースを分割しています。私が思いついた最も直接的なアプローチは、サイズ(1、1)の長方形を定義し、既存のすべての長方形をX軸とY軸が交互に並ぶ2つの不均一な長方形に再帰的に分割することでした。 ここでの問題は明白です。このアプローチでは、長いストレッチ線(赤でマーク)が発生します。 私が望むのは、もっと有機的な見た目です(私は例を含めました) 見てください、上から下へ、または左から右への長い直線はありません。 唯一の制約は、サイズの粒度に影響を与えずに、長方形の最小サイズを制限したい場合があることです。つまり、最小の四角形が秒より1平方センチメートル小さい場合、最小の部屋は2平方単位であってはなりません。 したがって、理想的には、アルゴリズムは次の3つの制約すべてを満たす必要があります。 長方形は無限に小さくはありません。 四角形のサイズは、最小の四角形のサイズの離散的な乗算ではありません。つまり、最小の長方形が3平方単位である場合、大きい長方形は6、9、12などの正方形単位に制限されず、代わりに3.2または4.7になります。 アルゴリズムは多項式時間で実行されます(高速で計算する必要があります)。

2
2Dタイルベースの横スクロールテレインをランダムに生成するにはどうすればよいですか?
次のタイルセットを使用して、2Dサイドスクローラーゲームのマップをランダムに生成したいと思います。 たとえば、ビットマスキングプロセスに関するいくつかの優れた記事を見つけました:http ://www.angryfishstudios.com/2011/04/adventures-in-bitmasking/ http://www.saltgames.com/2010/a-bitwise -適用するタイルマップの方法/ 巨大なif句やswitchステートメントを実行する代わりに、ビットマスク/タイルマスクを使用するアイデアが好きです。 ただし、プロセス全体の視覚化に問題があり、これらの記事のいずれもランダム化について述べていません。 私のタイルは、リンクした例のタイルのように、1つの方法だけでなく、複数の異なる方法で組み合わされます。 たとえば、以下はほんの数例です。 私のタイルはさまざまな方法で組み合わされているため、8ビットマスクは機能しないと思います。そのため、より大きなビットマスクを使用することを考えていました。char [8]やchar 4のようなもの。 誰かが、一般的なアルゴリズムがどのように見えるかの疑似コード/例を見せていただければ、私はそれを大いに感謝します。

2
ダイヤモンドスクエア地形生成問題
この記事に従って、ダイヤモンドスクエアアルゴリズムを実装しました:http : //www.lighthouse3d.com/opengl/terrain/index.php?mpd2 問題は、これらの急な断崖がマップ全体に表示されることです。テレインが再帰的に細分割されると、エッジで発生します。 ここにソースがあります: void DiamondSquare(unsigned x1,unsigned y1,unsigned x2,unsigned y2,float range) { int c1 = (int)x2 - (int)x1; int c2 = (int)y2 - (int)y1; unsigned hx = (x2 - x1)/2; unsigned hy = (y2 - y1)/2; if((c1 <= 1) || (c2 <= 1)) return; // Diamond stage float a …

4
RTSの手続きレベルが公平であることをどのように確認できますか?
この投稿を改善してみませんか?この質問に対する詳細な回答を提供します。これには、引用と、回答が正しい理由の説明が含まれます。詳細が不十分な回答は編集または削除される場合があります。 RTSレベルの設計では対称性と一貫性が重要であることを見てきましたが、私は怠惰であり、手続き的に生成されたレベルを実行したいと考えています。 RTSのレベルを手続き的に作成するときに、公平な競争の場を確保するにはどうすればよいですか?

4
手続き型の生成、ゲームの更新、バタフライ効果
注:数日前にStack Overflowでこれを尋ねましたが、ビューが非常に少なく応答がありませんでした。代わりにgamdev.stackexchangeで尋ねるべきだと考えました。 これは、以前に生成されたコンテンツを壊すことなく、複数のリリース後更新を通じて手続き型生成システムを維持することに関する一般的な質問/アドバイスです。 ゲームの手続き型コンテンツを作成するときに、「バタフライ効果」の問題を回避するための情報と手法を見つけようとしています。シードされた乱数ジェネレータを使用する場合、乱数の繰り返しシーケンスを使用して、再現可能な世界を作成できます。一部のゲームは、生成された世界を生成後にディスクに保存するだけですが、手続き型生成の強力な機能の1つは、同じ方法で領域を再作成するために数列の再現性に複数回頼ることができるということです。持続。私の特定の状況の制約のため、永続性を最小限に抑える必要があり、純粋にシードされた濃度にできるだけ依存する必要があります。 このアプローチの主な危険性は、手続き型生成システムのわずかな変更でさえ、世界全体を変更する蝶の影響を引き起こす可能性があることです。これにより、プレイヤーが探索している世界を破壊することなくゲームを更新するのは非常に難しくなります。 この問題を回避するために私が使用してきた主な手法は、複数のフェーズで手続き型生成を設計することです。各フェーズには、独自のシード乱数ジェネレーターがあります。つまり、各サブシステムは自己完結型であり、何かが壊れても、世界のすべてに影響を与えることはありません。ただし、これはゲームの孤立した部分であっても、依然として「破損」の可能性が多いようです。 この問題に対処するもう1つの方法は、コード内でジェネレーターの完全なバージョンを維持し、特定のワールドインスタンスに適切なジェネレーターを使い続けることです。これは私にとってはメンテナンスの悪夢のように思えますが、誰かが実際にこれを行っているかどうか知りたいです。 したがって、私の質問は、特にバタフライ効果のこの問題に対処するための、特にリリース後のゲームアップデートのコンテキストでの一般的なアドバイス、テクニック、およびデザインパターンの要求です。(うまくいけば、それは広すぎる質問ではありません。) 現在Unity3D / C#で作業していますが、これは言語にとらわれない質問です。 更新: 返信ありがとうございます。 ますます静的データが最良かつ最も安全なアプローチであるように見えます。また、大量の静的データを保存することはオプションではない場合、生成された世界で長いキャンペーンを行うには、使用されるジェネレーターの厳密なバージョン管理が必要になります。私の場合の制限の理由は、モバイルベースのクラウドの保存/同期の必要性です。私の解決策は、重要な事柄に関する少量のコンパクトデータを格納する方法を見つけることかもしれません。 ストームウィンドの「ケージ」の概念は、物事を考える上で特に有用な方法だと思います。ケージは基本的には再シードポイントであり、小さな変更、つまりバタフライのケージの実行に伴う影響を防ぎます。

3
テラス山の特徴
数日前にポートフォリオ/ブログサイトで見つけた手続き型地形効果を再現したいと思っています。 このサイトを引用すると、「[最終的な高さ]に特定の高さの範囲内の減衰値を掛けて、美しい峡谷の特徴を作成する」ことによって、テラスが生成されました。 誰かがこれについてより技術的な例や手順を提供できると思いましたか?過去1週間にわたって、私は手続き型の地形/テクスチャの方法と実践について多くのことを研究および学習してきましたが、「クランプ」とは何かを詳細に説明するものにまだ出くわしておらず、イライラし始めています。

3
名前の生成
私はゲームを作っている(または少なくとも計画している)ために、NPCの「ボス」の名前を自動的に生成する方法が必要です(詳細な説明とここでは関係ありません)。このようなものは私が何を意味するかの良い例です。 国籍、おそらく最初/最後のペアで名前のデータベースを構築し、それらをランダムに割り当て、名前リストを無視して、Homer Simpsonのようなものを取得したり、訴えられたりしないようにすることができると考えています。 それに関する問題は、それが機能するために名前の大規模なデータベースを構築する必要があるということです。だれかがすでに無料で利用できる名前のリストを持っているのでなければ、それは永遠にかかるかお金がかかるでしょう。 母音と子音のランダムなペアを作成し、いくつかを反転させ、それらを一緒に追加するという別のアイデアがありますが、次のような名前を生成する簡単なプログラム: Seermeecpa シメ Ofmiahwumafi ゴジディ 有効な (コードに興味がある人は、ここで確認できます) これらは...一口のようなものです。まあ、「ゴジディ」を除いて-それは働くことができました。それでも、成功率は明らかにあまり良くありません。 名前の見栄えを良くするために何かできることはありますか(以下を参照)、またはそのリストを作成する必要がありますか?名前がまともであるかどうかを人間が判断する方法を、少なくともある程度正確に、どうにかして模倣できますか?大きなリストでのルックアップよりも、このようなものを使用したいと思います。 「ナイス」とは、文字のランダムな組み合わせ(つまり、公平である)ではなく、実際の名前のように聞こえるものです。私のようなステレオタイプのばかげた、単一言語のアメリカ人があまり問題なくそれらを言うことができる限り、彼らはどんな文化(または彼らがそうであるかのように聞こえる)、現実または想像上の何かからのものでありえます。 追加の説明が必要な場合は、先に進んで質問してください。ここに何を入れればいいのかよくわかりません。 補遺:私の知る限りでは、この質問に完全に当てはまるタグは実際にはありません。ここに長く滞在している人が推薦できる人がいれば、それは素晴らしいことです。

2
Lシステムを使用して手続き的に都市を生成する
私は現在、手続き的に生成されたコンテンツに重点を置いたアプリを作成しています。これまでのところ、シンプレックスノイズを使用して、地形の手順による生成とマップの形状の実装に成功しています。私はそれがどのように見えるかに本当に満足しています。今、私は都市にも同じことをしようとしています。通りと建物の2Dレイアウトを生成するだけです。私はそれを調査しました、そして、ほとんどの人がL-Systemsを使うことを提案するようです。しかし、私はそれらの周りに頭を包むようには見えません。コンセプトはわかりますが、コードへの実装はわかりません。誰かが手続き的に生成された都市のためのLシステムのコード例、または都市を処理する他の方法に関する提案を持っていますか?

2
libgdxで手続き的に生成されたタイルを実装するにはどうすればよいですか?
私はlibgdxでシンプルなトップダウンのゼルダ風ゲームを作成しています。これと同様に、手続き的に生成されるタイルベースのダンジョンを実装したいと思います。 LibgdxにはTiledMapと呼ばれるクラスがありますが、これは私のニーズに合うようですが、公式ドキュメント以外のドキュメントでは、TiledMapsは.tmxファイル、つまり事前に設計されたマップと組み合わせてのみ使用できることを示唆しています。私はかなりの量のグーグルを実行して無駄に終わったので、動的に生成されたタイルマップにlibgdxを使用した経験がある人がいることを願って、最後の手段としてここに尋ねます。 編集:上記にリンクしたチュートリアルと組み合わせてStaticTiledMapTilesを使用して目標を達成できますか? ありがとう!

2
3Dパーリンノイズで生成されたときにフローティングテレインを削除する方法
私は現在3Dパーリンノイズを使用して、マーチングキューブと組み合わせてランダ​​ムな地形を生成しています。 私の問題は、地形の適度な高さを得るためにノイズ関数をスケーリングすることにあるようです。1オクターブのみを使用する場合、ノイズに関連するすべてのポイントが明らかに補間され、その結果、かなり滑らかなデータになります。ただし、オーバーハング/キャビティ/ギザギザの地形を取得するには、さまざまな振幅を持つ複数のオクターブを使用するか、結果の値をマップに必要な「最大」の高さにスケーリングする必要があります。 何かが足りないかもしれませんが、3Dパーリンノイズのあるマーチングキューブを使用することで、定期的にテレインのフローティングビットを取得します。 これをどのように修正できるか、または説明しているような結果を得るために使用できる他のノイズ関数があるかどうかについてのアイデアはありますか?丘、谷、山、湖などが欲しいのですが。マップの他の部分から分離された浮動ビットは必要ありません。これは、Minecraftが生成時に時折空に浮かぶだけの地形がある場合と同じ問題であると思います。 助けてくれてありがとう、神話

3
ランダムマップの生成-ランダムノードの分散/クラスタリングの戦略
私は、単純な4Xストラテジーゲームを空間で実行しています。各ノードは、目的点(惑星、小惑星など)です。 マップをランダムに生成するには、以下の手順に従います マップが持つ各ノードのタイプの数を決定します(たとえば、5つの地球のような惑星、10の不毛の惑星など)。 各タイプのノードをマップに配置します。 ステップ2では、各ノードタイプを均等に分散させたいと思います。したがって、たとえば、私はすべての地球のような惑星を配置することから始めます。単純にrand(map.width、map.height)を実行して位置を決定すると、すべての地球に似た惑星が一緒にクラスター化し、その領域から開始するプレーヤーにメリットをもたらす可能性があります。 さまざまなグラフ関数やノイズ関数を使用するなど、相互に広がる一連の(x、y)座標を生成できる方法はありますか?同様に、互いに近い座標を生成する方法はありますか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.