テレインテクスチャ
SpeedTree

Trees

Unity の Terrain (地形) を便利に使用できるように、 ハイトマップやテクスチャをペイントするのとほとんど同じ方法で Tree をペイントすることができます。ただし、Tree はサーフェスから生えるソリッドの 3D ゲームオブジェクトです。Unity は、遠方の樹木のビルボード化などのような最適化を使用し、良好なレンダリングパフォーマンスを維持します。つまり、数千もの Tree からなる密林を作っても、なおかつ許容できるフレームレートを維持することが可能です。

Tree のある Terrain
Tree のある Terrain

Tree のペイント

ツールバーの Paint Trees ボタンで Tree のペイントが可能です。

最初は、Terrain に Tree はありません。Terrain のペイントを始めるには、Tree を加える必要があります。Edit Trees ボタンをクリックして Add Tree を選択します。それから、Tree アセットをプロジェクトから選択し、Tree Prefab として加えブラシを使って使用します。

Add Tree ウィンドウ
Add Tree ウィンドウ

原型を作るのに役立つよう、Unity は Standard Assets パッケージに SpeedTree Tree ゲームオブジェクトのサンプルをいくつか提供しています。その他にも、独自の Tree を作成することもできます。

インポートする Tree ゲームオブジェクトが Bend Factor をサポートする場合は、Add Tree ウィンドウは風への反応を調整する Bend Factor プロパティーを表示します。SpeedTree Modeller によって作成された Tree には Bend Factor があります。詳しくは、風で木をしならせる を参照してください。

Tree プロパティー (後述) を設定すると、テクスチャやハイトマップをペイントするのと同じように Terrain 上に Tree をペイントすることができます。Shift キーを押しながらペイントすると、その領域から木を削除することができます。また、現在選択している Tree タイプのみを削除する場合は、Ctrl キーを押しながら行います。

Tree プロパティー

配置する Tree を選択したら、その配置と特徴を調整するために設定します。

Tree プロパティー
Tree プロパティー
プロパティー 機能
Mass Place Trees 風景全体を覆う大量の Tree を作成するためにペイントを使わず、ボタンを押すだけで風景全体を 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 デフォルトでは、高さと幅が常に同じ比率でスケーリングされるように、木の幅は高さに合わせて変化します。ただし、Lock Width to Height オプションを無効にすると、高さに関係なく幅を指定する事ができます。
Tree Width Tree の幅が高さに固定されていない場合は、スライダーを使って Tree の最低幅と最大幅を制御します。Tree を細くするにはスライダーを左に、Tree を太くするにはスライダーを右にドラッグします。Random のチェックを外すと、新しくペイントするすべての Tree の正確な幅のスケールを 0.01 から 2 の範囲内で指定できます。
Random Tree Rotation Random Tree Rotation は、全く同じ Tree からなる人造の植樹の様子ではなく、ランダムで自然な森の印象を作るためのバリエーションのオプションです。Tree を固定された、全く同じ回転で配置したい場合は、このチェックボックスを無効にします。
Lighting
Lightmap Static これを有効にすると、このゲームオブジェクトの位置が固定されていることが Unity に明示され、グローバルイルミネーションの計算に加えられます。Lightmap Static が無効の場合でも、ライトプローブ を使って照らすことができます。
Scale In Lightmap ライトマップ内のゲームオブジェクトの UV の相対的なサイズを指定します。値が 0 の場合、オブジェクトはライトマップに含まれませんが、シーン内の他のゲームオブジェクトのライティングには影響します。値を 1.0 より大きくすると、ゲームオブジェクトに使用されるピクセル数が増加します。1.0 未満の場合はピクセル数が減少します。このプロパティーを使用してライトマップを最適化し、重要で詳細に表現したい領域をより正確にライティングすることができます。例えば、平らで暗い壁を持つ孤立した建物では、ライトマップのスケールを低く (1.0 未満) しますが、カラフルなオートバイのコレクションが近くに集めて展示してある場面では、スケールを高くする必要があります。
Lightmap Parameters このゲームオブジェクトの ライトマップパラメーター を選択、または作成します。

Tree の作成

独自の Tree を作成したい場合は、SpeedTree Modeler、Unity の Tree エディター、任意の 3D モデリングアプリケーションを利用できます。その後、それらをプロジェクトにインポートします。

IDV 社製の SpeedTree Modeler を使用して、滑らかな LOD 遷移、素早いビルボード化、自然な風の動きなど、より高度な視覚効果を伴う Tree の生成が可能です。詳細な情報は SpeedTree のサイト を参照してください。SpeedTree のアセットは、アセットストアのパッケージやサードパーティの配布先から、Project フォルダーへ自由にインポートできます。

Unity には、新規の Tree アセットの作成に利用できる独自の Tree エディター が搭載されています。また、3D モデリングアプリケーションも使用できます。

Tree を作成する場合は、地面から生える Tree の根元にアンカーポイントを置きます。パフォーマンス上の理由から、Tree のメッシュは三角形を 2000 未満に抑えます。メッシュは常に、必ず 2 つのマテリアルで構成してください。1 つは木の幹の部分、もう 1 つは葉の部分です。

Tree には Nature/Soft Occlusion LeavesNature/Soft Occlusion Bark シェーダーを使用する必要があります。これらのシェーダーを使うためには、Ambient-Occlusion という名の特定のフォルダーに Tree を配置しなければなりません。そうでないと、 Tree は正しくレンダリングされません。モデルをそのようなフォルダーに配置し再インポートすると、Unity は Tree に特化された方法で、ソフトなアンビエントオクルージョンを計算します。

3D モデリングアプリケーションで Tree のアセットを変更する場合は、エディターの Refresh ボタンをクリックして Terrain 上で更新した Tree を表示します。 Refresh ボタン

注意 3D モデリングプログラムで SpeedTree をインポートし変更する場合、それをエクスポートするときに (.fbx か .obj として)、SpeedTree モデルに備わる自然な風の動きを加える機能が失われることがあります。

Tree にコライダーを使用する

Tree のプレハブを Assets フォルダーからシーンにドラッグして Tree をインスタンス化し、その新しい Tree アセットに Capsule Collider を加えることができます。新しい Tree アセットを作成したら、メニューから Component > Physics > Capsule Collider の順に選択し、コライダーを加えます。その後、以下の いずれか を行います。

  • Inspector ウィンドウの Tree ゲームオブジェクトの Apply ボタンをクリックして、元となるプレハブをオーバーライドします。:

  • または、Assets フォルダーに Tree ゲームオブジェクトをドラッグして新しいプレハブを作成します。

ペイントするために Terrain に Tree を加える場合、元のゲームオブジェクトではなく、コライダーを設定した正しいプレハブを選んで新しいプレハブを作成するように注意してください。また、Terrain の Terrain Collider コンポーネントインスペクターで Create Tree Colliders を有効にする必要があります。

風で木をしならせる

まず、Tree を風に反応させる Wind Zone を作成する必要があります。 これを行うには、 GameObject > 3D Object > Wind Zone を選択します。

ここで、Tree がしなるように設定されているかを確認します。 Terrain オブジェクトを選択して、InspectorPaint Trees ボタンを選び、 Edit Trees > Edit Tree の順に選びます。 Bend Factor がまだ設定されていない場合は、しならせるために値を 1 に設定します。

デフォルト設定では、 Tree はかなり激しく動いてしまいます。 これを修正するには、個々の Tree タイプごとに Bend Value を変更します。 これは、いくつかの Tree タイプを他のタイプよりも大きくしならせたい場合に便利です。 Wind Zone 全体のしならせる度合いを変更するには、 Wind Zone コンポーネントの値を直接設定します。葉がざわざわと揺れる効果を減らすには、風の Turbulence を 0.1〜0.3 程度に調整すると、すべてがより滑らかになります。Tree が一方向だけに吹かれずに変化を持たせたい場合は、 Wind Main の値を Turbulence と同じ値に設定します。

Tree の LOD 遷移ゾーン

Unity の LOD システムは、2D から 3D への遷移ゾーンを使用して 2D のビルボードと 3D Tree モデルをシームレスに融合します。 これにより、VR で重大な問題である 2D と 3D の Tree が突然飛び出す現象が避けられます。LOD コンポーネントの設定については、LOD および LOD グループ を参照してください。


  • 2018–09–20 編集レビュー を行って修正されたページ

  • GameObject メニューは Unity 4.6 で変更

  • 2D から 3D への遷移ゾーンはUnity 2017.3 で LOD システムに追加NewIn20173

テレインテクスチャ
SpeedTree