ハイトマップやテクスチャをペイントするのと同じ方法で Tree (樹木) をペイントすることができます。ただし、Tree はサーフェスから生えるソリッドの 3D オブジェクトです。Unity は、遠方の樹木をビルボードにするなどの最適化を行ない、良好なレンダリングパフォーマンスを維持します。つまり、数千もの Tree からなる密林を作っても、なおかつ許容できるフレームレートを維持することが可能です。
ツールバーの Paint Trees ボタンで Tree のペイントが可能です。
To access the Paint Trees tool from an overlay:
最初は、Terrain (地形) に Tree のプロトタイプはありません。Terrain のペイントを始めるには、Tree のプロトタイプを加える必要があります。Edit Trees ボタンをクリックして Add Tree を選択します。それから、Tree のアセットをプロジェクトから選択し、Tree Prefab (Tree プレハブ) として加えブラシとともに使用します。
To help prototyping, SpeedTree provides six SpeedTree models in the free Unity Terrain - HDRP Demo Scene on the Asset Store. Alternatively, you can create your own Trees.
インポートする Tree プレハブが Bend Factor をサポートする場合は、Add Tree ウィンドウは風への反応を調整する Bend Factor プロパティを表示します。SpeedTree Modeler で作成された Tree には Bend Factor がありません。Tree エディターによって作成されたものにだけあります。詳しくは、後述の 風で Tree をしならせる を参照してください。
Settings (後述) を設定すると、テクスチャやハイトマップをペイントするのと同じように Terrain に Tree をペイントすることができます。Shift キーを押しながらペイントすると、その領域から木を削除することができます。また、現在選択中の Tree タイプのみを削除する場合は、Ctrl キーを押しながらペイント操作を行います。
配置する Tree を選択したら、その設定を調整して、配置と特徴をカスタマイズします。
プロパティ | 機能 |
---|---|
Mass Place Trees | ペイントを使わずに、ランドスケープ全体を覆う Tree を作成します。Tree を大量配置した後も、ペイントを使用して Tree を追加/削除し、密な部分や間隔の広い部分を作ることができます。 |
Brush Size | Tree を加える領域のサイズを制御します。 |
Tree Density | Brush Size で定義された領域にペイントする Tree の平均数を制御します。 |
Tree Height | スライダーを使って Tree の最低の高さと最大の高さを制御します。Tree を低くするにはスライダーを左に、Tree を高くするにはスライダーを右にドラッグします。Random のチェックを外すと、新しくペイントするすべての Tree の正確な高さのスケールを 0.01 から 2 の範囲内で指定できます。 |
Lock Width to Height | デフォルトでは、Tree に対し常に均一のスケールが行われるように、Tree の幅は高さに合わせて固定されています。ただし、Lock Width to Height オプションを無効にすると、幅を個別に指定する事ができます。 |
Tree Width | Tree の幅が高さに固定されていない場合は、スライダーを使って Tree の最低幅と最大幅を制御します。Tree を細くするにはスライダーを左に、Tree を太くするにはスライダーを右にドラッグします。Random のチェックを外すと、新しくペイントするすべての Tree の正確な幅のスケールを 0.01 から 2 の範囲内で指定できます。 |
Random Tree Rotation | Tree を LOD Group で制御する場合は、このオプションを使うと、全く同じ様相の Tree から成る人工の植樹ではなく、ランダムで自然な森のような印象になります。Tree を固定し、全く同じ向きで配置したい場合は、このオプションを無効にします。 |
Color Variation | Tree に適用されるランダムなシェーディングの量。これは、シェーダーが _TreeInstanceColor プロパティを読み取る場合にのみ機能します。例えば、Tree エディターで作成したすべての Tree のシェーダーは _TreeInstanceColor プロパティを読み取ります。 |
Tree Contribute Global Illumination | これを有効にすると、Tree をグローバルイルミネーションの計算に加えます。 |
新しい Tree モデルを作るには、2 通りの方法があります。IDV 社製の SpeedTree Modeler を使用して、滑らかな LOD 遷移、素早いビルボード化、自然な風の動きなど、より高度な視覚効果を伴う Tree の生成が可能です。詳細な情報は SpeedTree のサイト を参照してください。また、Tree エディター を使って Tree モデルを作成できます。
内部的には、Terrain エンジンは Tree プレハブのルートゲームオブジェクトに LOD Group があるか否かを判断することで、2 タイプのモデルを区別します。SpeedTree で作ったプレハブには LODGroup コンポーネントがありますが、Tree エディターのプレハブにはありません。
Tree を作成するとき、アンカーポイントを地面から生える Tree の底に配置します。パフォーマンスは Tree モデルのポリゴン数に依存します。そのため、プラットフォームでテストし、必要に応じて簡単な Tree を作成してください。Tree エディター作成の Tree の場合、各メッシュは常に正確に 2 つのマテリアルを持っています。1 つは Tree のボディのため、もう 1 つは葉のマテリアルです。
Tree エディターを使って Tree を作成する場合は、Nature/Soft Occlusion Leaves と Nature/Soft Occlusion Bark シェーダーを使用する必要があります。これらのシェーダーを使用するには、Ambient-Occlusion という特定のフォルダーに Tree を配置する必要があります。そうでないと、Tree は正しく描画されません。このフォルダーにモデルを置き、それを再インポートすると、Unity は Tree のために特別に設計された方法で、柔らかい アンビエントオクルージョン を計算します。
インポートした Tree アセットに異なる 3D モデリングアプリケーションで変更を加える場合は、エディターで Refresh ボタンをクリックして、Terrain に更新された Tree を表示します。
ノート: 3D モデリングプログラムに SpeedTree モデルをインポートして変更し、.fbx
または .obj
として再エクスポートすると、SpeedTree モデルが持つ自然な風のアニメーション機能が失われる場合があります。
Capsule Collider を Tree アセットに追加できます。まず、Tree アセットの横にある > をクリックしてプレハブを開きます。
次に、Add Component > Physics > Capsule Collider を選択してコライダーを加えます。シーンに戻るには、プレハブ名の横にある < をクリックします。
Terrain Collider コンポーネントの Enable Tree Colliders もチェックする必要があります。
Wind Zone は Tree を曲げて、風の直接的な効果のシミュレーションを行えます。この機能は、Terrain (地形) メニューから配置した Tree でのみ使用できます。これを行うには、Terrain (地形) を選択し、インスペクターの Paint Trees ボタンをクリックし、Edit Trees > Add Tree を選択し、Tree Prefab を選択します。Unity で Tree を作成なかった場合は、Bend Factor を 1 に設定します。Terrain (地形) をクリックして、選択した Tree を配置します。
Bend Factor を持つ Terrain (地形) ベースの Tree は、Wind Zone の Turbulence と Main プロパティの値に応じて、曲がったり揺れたりして Wind Zone に反応します。 Turbulence 設定は葉の揺れを制御します。この値を小さくすると、揺れの効果が柔らかになります。Main の値は風の主な力を制御します。Wind Zone を作成するには、GameObject > 3D Object > Wind Zone を選択します。
Wind Zone の Mode が Directional の場合、Tree に対する相対的な位置は関係ありません。Tree は Wind Zone の向きに沿って揺れます。ただし、Wind Zone の Mode が Spherical の場合、その Radius は Tree の半径と重なる必要があります。これによって、中心から端に向かって減衰する、複数方向の突風を発生させます。
デフォルト設定では、Broadleaf Prefab (Standard Assets Environment パックに含まれています) などの Tree が柔らかに現実的な様子で揺れ動きます。ただし、独自の Tree プレハブを使用する場合は、Wind Zone プロパティの値を調整する必要があります。Tree プレハブの幹が極端に片側に曲がる場合は、 Main の値を下げてみてください。あるいは、Tree プレハブの枝が過度に曲がったり伸びたりする場合は、 Turbulence 値を下げます。
Tree エディターで作成した Tree に対して、Unity の LOD システムは、2D から 3D への遷移ゾーンを使用して 2D のビルボードと 3D Tree モデルを継ぎ目なしにブレンドします。これにより、VR に頻繁に発生する 2D および 3D Tree が突然飛び出す現象を防ぎます。ビルボード の Tree は、ポイントライトやスポットライトなどのローカルのライティングを受けないことに注意してください。ビルボード の Tree はディレクショナルライトにはディレクショナルライトを利用できますが、ビルボードのライティングはカメラを回転させたときにのみ更新されます。
SpeedTree で作成した Tree の LOD コンポーネントの設定に関する詳細は、LOD と LOD Group を参照してください。
2020–02–19 修正されたページ
Tree エディターのビルボード制限を追加