1

私は多くの人が質問を投稿してきましたが、あなたが与えるすべての回答はいくつかのチュートリアルに従いました.Google検索のすべてのリンクが「すでにアクセス済み」としてマークされているため、プライドを脇に置いて質問を投稿することにしました.あなたのために。

これは私の最初の投稿なので、私がそれを正しく行っているかどうかはわかりません。そうでない場合は申し訳ありませんが、とにかく問題は次のとおりです。

Unity 5 で C# 惑星探査ゲームに取り組んでいます。ここで言及されているいくつかのチュートリアルに従って八角形から球体を作成済みであり、それらを使用してパーリン テクスチャと高さマップを作成することもできます。問題は適用時に発生します。それらを球に変換し、メッシュ上に地形を生成します。これを行うには球の頂点と UV をマップする必要があることはわかっていますが、問題は、私が数学のことを本当に苦手としており、手順を見つけることができなかったことです。テッセレーション シェーダー、LOD、ボロノイ ノイズ、パーリン ノイズについて聞いたことがありますが、プロセスに迷いました。単純化するには:

私が持っているもの:

  1. 私は球状のメッシュを持っています

  2. 私はハイトマップを持っています

  3. それらを適切な法線マップとともにマテリアルに割り当てました

私が思うこと (正直なところ、これが正しいパスであるかどうかはわかりません)次の支援が必要です:

  1. ハイトマップに基づいて球状メッシュ変形を生成するコード

  2. これらのテッセレーション LOD ベースのシェーダーなどを使用して、実際のサイズの手続き型惑星を作成する方法

ご清聴ありがとうございました。私が失礼なことをしたり、要求が多すぎたりした場合は申し訳ありません。

4

1 に答える 1

1

コード固有の情報を提供できるとは思いませんが、チェックリストにいくつかの追加/提案があります。

  • LOD メッシュとテクスチャ システムをセットアップしたい場合、その方法を私が知っている唯一の方法は、メッシュとテクスチャの低ポリゴン バージョンを物理的に作成し、Unity でスクリプトを作成することです。距離の配列であり、プレーヤーがオブジェクトから離れた、またはオブジェクトに向かって特定の距離に到達したら、その距離に適したメッシュとテクスチャに切り替えます。同じことを行うシェーダーを作成することで同じことができると思いますが、基本的な考え方は同じままです。例としていくつかの疑似コードを次に示します (Unity ライブラリについてはよくわかりません)。

    int distances[] = {10,100,1000}
    Mesh mesh[] = {hi_res_mesh, mid_res_mesh, low_res_mesh}
    Texture texture[] = {hi_res_texture, mid_res_texture, low_res_texture}
    
    void Update()
    {
         if(player.distance < distances[0])
         {
             gameobject.Mesh = mesh[0]
             gameobject.Texture = texture[0]
         else
         {
             for(int i = 1; i < distances.length(); i++)
             {
                 if (player.distance <= distances[i] && player.distance >= distances[i-1]):
                 {
                     gameobject.Texture = texture[i]
                     gameobject.Mesh = mesh[i]
                 }
             }
         }
     }
    

コード化がより困難な実際のテッセレーション ベースの LOD が必要な場合: ここにいくつかのリンクがあります:

https://developer.nvidia.com/content/opengl-sdk-simple-tessellation-shader

http://docs.unity3d.com/Manual/SL-SurfaceShaderTessellation.html

基本的に同じ概念が適用されます。ただし、使用しているメッシュとテクスチャを物理的に変更する代わりに、シェーダー コード内のメッシュとテクスチャの解像度を変更する距離を設定するという同じ考え方を使用して、メッシュとテクスチャを手続き的に変更します。

  • 球状メッシュの変形に関する問題について。3dsMax、Maya、または Blender などの 3D 編集ソフトウェアで、メッシュをインポートしてメッシュ変形モディファイアを適用し、テクスチャを変形テクスチャとして使用してから、好みに合わせて変形レベルを変更することで、これを行うことができます。しかし、リアルタイムでより手続き的なことをしたい場合は、頂点配列を使用してメッシュの頂点を物理的に変更し、メッシュを再三角形化するか、そのようなことを行う必要があります。申し訳ありませんが、私はこのトピックについてあまり詳しくないため、このトピックについてあまり役に立ちません。あなたの問題に関連して私が見つけることができるリンクは次のとおりです。

http://answers.unity3d.com/questions/274269/mesh-deformation.html

http://forum.unity3d.com/threads/deform-ground-mesh-terrain-with-dynamically-modified-displacement-map.284612/

http://blog.almostlogical.com/2010/06/10/real-time-terrain-deformation-in-unity3d/

とにかく、頑張ってください。私が何かについて不明な点がある場合、またはさらに説明が必要な場合はお知らせください。

于 2015-03-09T02:59:55.830 に答える