ハイトマップやテクスチャをペイントするのと同じ方法で Tree (樹木) をペイントすることができます。ただし、Tree はサーフェスから生えるソリッドの 3D オブジェクトです。Unity は、遠方の樹木をビルボードにするなどの最適化を行ない、良好なレンダリングパフォーマンスを維持します。つまり、数千もの Tree からなる密林を作っても、なおかつ許容できるフレームレートを維持することが可能です。
ツールバーの Paint Trees ボタンで Tree のペイントが可能です。
最初は、Terrain に Tree のプロトタイプはありません。Terrain のペイントを始めるには、Tree のプロトタイプを加える必要があります。Edit Trees ボタンをクリックして Add Tree を選択します。それから、Tree のアセットをプロジェクトから選択し、Tree Prefab (Tree プレハブ) として加えブラシとともに使用します。
プロトタイプの作成を支援するために、SpeedTree は 4 つの SpeedTree モデルを Asset Store の Free SpeedTrees Package で提供しています。また、独自の Tree を作成することもできます。
インポートする 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 Lightmap Static | これを有効にすると、このゲームオブジェクトの位置が固定されていることが Unity に明示され、グローバルイルミネーションの計算に加えられます。このオプションが無効の場合でも、ライトプローブ を使って照らすことができます。 |
新しい Tree モデルを作るには、2 通りの方法があります。IDV 社製の SpeedTree Modeler を使用して、滑らかな LOD 遷移、素早いビルボード化、自然な風の動きなど、より高度な視覚効果を伴う Tree の生成が可能です。詳細な情報は SpeedTree のサイト を参照してください。また、Unity の Tree エディター を使って Tree モデルを作成できます。
内部的には、Terrain エンジンは Tree プレハブのルートゲームオブジェクトに LOD Group があるか否かを判断することで、2 タイプのモデルを区別します。SpeedTree で作ったプレハブには LODGroup コンポーネントがありますが、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 を加えることができます。最初に、プレハブを Assets フォルダーからシーンにドラッグしてシーンの Tree をインスタンス化します。次に、メニューを使用してコライダーを追加します (Component > Physics > Capsule Collider)。次に、以下のいずれかを行います。
元のプレハブをオーバーライドします。Tree ゲームオブジェクトの Inspector ウインドウで Apply ボタンをクリックします。
新しいプレハブを作成します。Tree ゲームオブジェクトを Assets フォルダーにドラッグします。
新しいプレハブを作成する場合は、元のゲームオブジェクトではなく、コライダーを設定した Tree を Terrain に加えてください。また、Terrain の Terrain Collider コンポーネントで Create Tree Colliders を有効にする必要があります。
ここでの説明は、Unity の Tree エディターで作成され、Bend Factor を持つ Tree にのみ当てはまります。
Tree を風に反応させるには、最初に GameObject > 3D Object > Wind Zone を選択し、Wind Zone を作成します。
ここで、Tree がしなるように設定されているかを確認します。 Terrain オブジェクトを選択して、Inspector の Paint Trees ボタンを選び、 Edit Trees… > Edit Tree の順に選びます。 Bend Factor がまだ設定されていない場合は、値を 1 に設定します。
デフォルト設定では、Tree はかなり激しく動いてしまいます。これを修正するには、個々の Tree タイプごとに Bend Factor を変更します。 これは、いくつかの Tree タイプを他のタイプよりも大きくしならせたい場合に便利です。 Wind Zone 全体の湾曲度合いを変更するには、Wind Zone コンポーネントの値を直接設定します。葉が揺れる効果を減らすには、風の Turbulence を 0.1–0.3 程度に調整すると、すべてがより滑らかになります。Tree の動きが一方向だけにならないように変化を持たせたい場合は、Main の値を Turbulence と同じ値に設定します。
Tree エディターで作成した Tree に対して、Unity の LOD システムは、2D から 3D への遷移ゾーンを使用して 2D のビルボードと 3D Tree モデルを継ぎ目なしにブレンドします。 これにより、VR に頻繁に発生する 2D および 3D Tree が突然飛び出す現象を防ぎます。
SpeedTree で作成した Tree の LOD コンポーネントの設定に関する詳細は、LOD と LOD Group を参照してください。
2019–01–29 編集レビュー を行って修正されたページ
新しい設定と SpeedTree 機能は 2018.3 で追加