問題タブ [procedural-generation]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - プラズマ スタイル フラクタルを使用した高さマップ生成中のアーティファクト
私は今日、ランダムな地形生成がどのように行われる傾向があるかを調査するために数時間を費やし、プラズマ フラクタル (中点変位とダイヤモンド スクエア アルゴリズム) について読んだ後、実装を試してみることにしました。私の結果は実際にはひどいものではありませんでしたが、これらの恐ろしい正方形/線/グリッドタイプのアーティファクトがあり、取り除くことができないようです!
グレー スケール イメージとしてレンダリングすると、高さマップは次のようになります。
明らかに、これにはかなりの量のコードが含まれていますが、関連するものだけを投稿しようとします。たとえば、テクスチャに変換するコードを投稿していませんが、高さの配列を滑らかなグラデーションで埋めようとしただけで、テクスチャが正常に表示されることを心配する必要はありません:)
まず、マップの 4 つのコーナーを 0 から 1 の間のランダムな値に設定してから、再帰的な変位アルゴリズムを開始します。
TerrainData は単純に float* の 2D 配列です。Vector2_I は、私自身の整数ベクトル クラスです。最後の 4 つの関数は、再帰関数である MidPointDisplace、2 つのデータ値を平均してノイズを追加する CalculateTerrainPointData、4 つのデータ値を平均してノイズを追加し、わずかに高いスケール値を持つ CalculateTerrainPointData2 (中心点にのみ使用されます) です。 atm は単なるランダム ノイズであり、パーリンなどの実際のノイズではありません。次のようになります。
時間を割いて見てくれてありがとう - 誰かがこのグリッドのようなパターンがどこから現れているか知っていることを願っています:)
*編集 - 間違って int を書きました。float に修正しました
java - 街路の手続き型生成?
私は L-Systems を読み、Parish & Muller と Kelly & McCabe を読み、これを実装しようとしましたが、実際にはまったく運がありません (私の通りはすべて一方向に進み、分岐することはありません、など) .)。だれかがソース コードを提供できますか、または City Streets のシステムを生成する何らかのリファレンス実装を提供できますか (できれば Parish & Muller の方針に沿ったものですが、この時点では何でも試してみます)。私はこれに何週間も取り組んできましたが、どこにも速くはありません。
c# - ノイズを使用してさまざまな地形バイオーム スタイルを生成する方法
私は現在、3D環境で地形を生成するためにフラクタルブラウン運動と組み合わせて呼び出されると思われるバリューノイズを使用しています。-1 から +1 の範囲の値で、ノイズから 2D 高さマップを生成します。私は通常、その戻り値に 10 程度を掛けて高さを設定し、なだらかな丘を生成します。
私がやりたいことは、アルゴリズムへの呼び出しを何らかの形で組み合わせて、非常に丘陵の多い地域、非常に平らな地域、ほとんど山岳地帯のある地域を作成することです。エリア間のエッジが非常に明白になることなく、どのようにしてそのようなことを行うのですか (突き出た崖がそれらを分離するなど)?
編集:これは、無限に近い環境で完全に手続き型である必要があります。
ananthonline の回答に基づいて、ノイズ ジェネレーターへの低周波呼び出しをマスクとして使用しています。2 つのバイオーム タイプを使用して、バイオームの「影響」を取り、マスク値の絶対値からマスクの「場所」を引いて、その値全体を「影響」値で再度割ります。
(Impact- abs(Mask - Location)) / Impact
これにより、正の場合、特定の周波数、振幅など (なだらかな丘、山、海など) の特定のノイズ コールの戻り値に向かって乗算できる値が得られます。
ここでの主な問題は、例としてマスクが 0 から 1 の値を返した場合、(2 つのバイオームのシナリオで) 1 つのバイオームの位置を .25 に、もう 1 つのバイオームの位置を .75 に、強度を .5 に設定する必要があることです。それぞれが適切にブレンドされるようにします。少なくとも、各バイオーム タイプを均等に分散させ、それらを適切にブレンドしたい場合は. たとえば、なだらかな丘の 2 倍の頻度で山を表示したい場合、かなり苦労するでしょう。
それが理にかなっていることを願っています。数学は素晴らしくうまくいきますが、限られた数学のバックグラウンドと知識ではうまく説明できていないと思います. GetNoise2d が 0 から 1 の間の値を返すことに注意してください。
上記のコードの問題を特定する必要がある場合、たとえば 10 の異なるバイオームでこれを行うには、正確な「場所」と「影響」の値に極端な考慮が必要になるため、ブレンドが完璧であることを確認してください。 . すでに処理されていることを確認するような方法でコーディングしたいと思います。
scala - BufferedImage でシンプレックス ノイズが正しく表示されない
多くの作業の末、シンプレックス ノイズのタイル対応バージョンが動作するようになりましたが、BufferedImage を使用すると正しく記録および表示されないようです。画像を作成しようとすると、期待どおりのスムーズな色合いの変化ではなく、白黒の帯または輪になってしまいます。私がやっていない単純なことがあると思いますが、私の人生では、それを見つけることができません.
これは私のコードです (かなりの部分は Stefan Gustavson のシンプレックス ノイズの実装からのものです):
使用しているノイズ関数の出力値を確認しましたが、これはまだ (-1, 1) 以外の値を返していません。また、1 オクターブの場合、イメージ ( total
) に指定する値も (0,1) 排他的範囲外にはなりません。
問題になることがわかる唯一のことは、BufferedImage タイプが正しく設定されていないかtotal
、画像に値を設定するときに間違った 16 進数値を掛けていることです。
私は BufferedImage の Javadocs を調べて、受け入れられる型と値について調べましたが、私のコードでは適切でないものは何も見つかりませんでした (ただし、一般的に BufferedImage を使用するのはかなり初めてです)。そして、16進値を変更しようとしましたが、どちらも何も変更していないようです。影響があることがわかった唯一のことは、(total * 0xffffff).toInt
値を 256 で除算した場合です。これにより、バンドが少し暗くなり、本来あるべき領域にわずかなグラデーションが表示されますが、除算を増やしすぎると、画像が黒くなるだけ。だから今のところ、私は何が問題なのかにこだわっています。
c++ - 湖周辺の土地の平滑化
タイトルがあまり説明的でない場合は申し訳ありません。とにかく、私はランダムに生成される風景を扱うことに取り組んでいます。湖を作成しましたが、その作成方法が原因で、望ましくないストレート エッジ/ドロップオフが発生することがよくあります。最大変動量を定義して(可能であれば、湖を作成した直後に)滑らかにしようとしています(したがって、土地の高さはそれ以上変動することはできません)。変動が大きすぎる場合は土地を修正し、そうであれば終了します大丈夫。
問題:
私の試みた修正:
ご覧のとおり...うまくいきませんでした。それは私にも起こります。下に移動しなければならない場合は壊れると思いますが、実際には発生しないはずです。なぜなら、湖は風景を沈めるだけだからです。とにかく、ここに私の試みのソースがあります:
右側のみですが、左側もほぼ同じであることに注意してください。どうすればこれを正しく行うことができますか?
あなたが助けることができればありがとう。
編集:
私はこの問題を決して解決しませんでした。代わりに、(特定の高さから)空気を測定し、(土地によって形成された)空気のポケットが十分にある場合は水で満たす再帰関数を作成しました。これには、変更されていないため、土地が滑らかに見えるという利点があります。
xna - 3D 幾何学的形状へのテクスチャの適用
何週間も悩んでいる質問があります!3D 世界での向きとは関係なく、3D 凸多角形にテクスチャを適用する方法はありますか? 関連する場合は、XNA 4.0 を使用しています。
私は簡単な方法を期待していません。現在の問題を解決するためのクリーンなソリューションです。誰かがそれに似たものを作ったのですか?
ご心配と時間を割いていただき、ありがとうございます。
c# - C# 手続き型生成 - ネイバーのチェック
手続き型生成コードの一部として、グリッド内のセルに隣接するセルがあるかどうかをチェックする関数があります。
グリッドは 2D 配列で、印刷すると次のようになります (# = セルと . = 空で、端の周りの # は境界線です)。
たとえば、私のコードはセル 5,5 をチェックすると true を返します。
隣接するセルをチェックするために私が書いたコードは機能しますが、チェックしているセルが「エッジ」(たとえば、0,0 または 0,1 または 10,10) にあるかどうかを考慮せず、エッジのセルをチェックする場合、境界エラー。これを考慮してコードを書く方法がわからないので、アドバイスをいただければ幸いです。
これまでの私のコードは次のとおりです。
また、私のコードのより効率的なバージョンはありますか?
ありがとう
image-processing - シンプレックス ノイズの理解を深める
言うまでもなく、私は最近シンプレックス ノイズを発見しました。テクスチャ、高さマップ、時間依存のグラフィックスを作成するのに最適な、絶対的に異なる量の可能性などのアルゴリズム。
私はすでにプログラムに関数を持っていて、それは驚異的に機能します.問題は、「数学者」として、関数がどのように機能するかを完全に理解していないことに耐えられないことです.
基本的に、私が本当に理解していない唯一のことは、「歪んだ」座標が単純または直交グリッドの座標であるかどうかです。また、入力がこれらのグリッドのどれを定義するか: 単純または直交。
残りを理解できると確信していますが、どのグリッドがどの座標に属しているかわかりません。また、少なくとも視覚的な段階的なプロセスを示すビデオ、本、リンクは非常に役立ちます.
ノート:
質問や疑問が生じた場合は、コメントを残してください。ありがとう!!!