Unityで非常に大きな地形を作成するにはどうすればよいですか?幅と長さを大きな値に設定できるようです。ただし、ハイトマップの解像度は4097までしか上がりません。詳細の解像度は4048までしか上がりません。
何か案は?
Unityで非常に大きな地形を作成するにはどうすればよいですか?幅と長さを大きな値に設定できるようです。ただし、ハイトマップの解像度は4097までしか上がりません。詳細の解像度は4048までしか上がりません。
何か案は?
回答:
地形を正方形の「チャンク」に分割し、気になるもの(主に現在アクティブなカメラの近くのもの)をUpdate()でロードします-スペースに縛られている場合(おそらくそうなります)、不要なものを遠くにアンロードします。
遠景の距離を気にしない限り、遠く離れた地形のLoDには、事前に計算された低ポリゴンモデルを使用します。また、NPCの動きやその他のシミュレーションなど、遠くの地形の地形の高さマップが必要な場合は、メモリに保持するために地形の低解像度または可変解像度のバリアントを作成します。完全な地形データを使用しないでください。これはゲームのロード時に自動的に実行できますが、一般的には、ビルドまたはパッケージ中にこの事前生成データを作成するツールを作成することをお勧めします。
最後に:浮動小数点の精度の問題を回避するには、メインカメラが(0.0f、0.0f、0.0f)から遠く離れるたびにシーン全体を再配置する必要があります。
Unity Answersに関連する可能性のある質問http://answers.unity3d.com/questions/17225/dynamic-terrain-loading.html
地形をチャンクに分割する必要があります。いくつかの小さな地形。(スクリプトを使用して)それらを再び「シーム」する必要があるので、それらの間に「穴」はありませんが、そうでなければすぐにそれらを行うことができます。
Unity3D〜3.0以降では、アイテム(地形やアイテムを読む)を遠くに移動できない(+/- 100000ステップIIRCなど)ことで、これが世界の最大サイズに影響することも知っておくとよいでしょう。
とにかくこれをオンラインRPGゲームで使用しています(ただし、実際のゲームではなく、レベルデザインにのみUnity3Dを使用しています)。
好奇心が強いからといって、あなたのゲームに関する情報(進歩、タイプ、グラフィックス、スタイルなど)を共有しませんか?
Unity5では、地球全体のSRTMデータTerrainData
をさまざまな詳細レベルのオブジェクトの高さマップに処理することで、巨大な地形を実装しました[1]。考慮すべきことがいくつかあります。
高さマップのエッジは、少なくとも1つのサンプルでオーバーラップする必要があり、それに応じて地形を配置する必要があります。Terrain.SetNeighbors
メッシュを接続せず、Unityによって行われるさまざまな詳細レベルのみを考慮します。
必然的に、TerrainData
オブジェクトごとに2 ^ n + 1の高さのサンプルが必要です。そうしないと、Unityは未設定の部分に0の高さを割り当てます。
のサイズが2GB未満の場合TerrainData
、リソースフォルダー内のアセットとしてResource.Load
、また実行時にそれらを保持することで問題を回避できます。2GBを超える場合、Unityビルドでは2GBを超えるリソースを使用できないため、このアプローチは機能しません。この場合、AssetBundlesを構築し、WWW
オブジェクトで非同期に読み込む必要があります。これには、Shader.Parse
約500ミリ秒のオーバーヘッドでそれぞれを呼び出すという好ましくない副作用があります。私はこれをフォーラム[2]で報告しましたが、まだ返事を待っています。私は最終的にバグレポートを提出します。
の使用については考えAssetDatabase.LoadAssetAtPath
ないでください。Unityビルドではなく、エディターでのみ使用できます。
[1] https://www.youtube.com/watch?v=2UsyVuWoFbQ
[2] http://forum.unity3d.com/threads/shader-parse-delays-loading-of-assetbundle-taining-no-shader .358235 /
サードパーティのソリューションがあります。
このコードは、幅99,999メートルの地形を作成でき、山は任意のノイズ式ですが、必要に応じて100個のノイズ式を1つのマップに混在させることができます。たとえば、この地形では、マップで使用可能な三角形の総数は、6600万、低解像度、2億の中解像度です。これは、カメラの周りに0.7mnの三角形が更新された66百万の三角形マップです。 ユニティプレイヤージャイアントテレイン、WASD、およびスペース
地形をまとめて読み込むことをお勧めします。より小さな地形を使用することで、おそらくスクリプトは、transform.position-terrain.transform.positionを使用して、地形に特定の近接があるかどうかを確認できます。実際にゲーム全体を最適化する方法についてのブログ投稿を書いて、チャンクの読み込みについて話しました。お役に立てれば。