Version: 2017.1
Terrain Textures
SpeedTree

木 (Tree)

木の領域はハイトマップやテクスチャをペイントするのとほぼ同じ方法で地形にペイントすることができ、表面から生成される木は 3D オブジェクトになります。Unity は最適化(例:距離による木のビルボード化)により良好なレンダリングパフォーマンスを維持します。それにより、数千の樹木からなる密林を持ちつつも、充分なフレームレートを保つことができます。

Terrain with trees
Terrain with trees

Tree を有効にする

ツールバー上のツリーボタンでツリーペインティングが可能です。

初めは地形に tree はありません。Edit Trees をクリックして Add Tree を選択することでプロジェクトから tree アセットを選択するウィンドウがあらわれます。

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

Unity はプロトタイプ作成のため、Standard Assets パッケージの中に tree オブジェクトが備えられています。(メニュー: Assets > Import Package > Terrain Assets ) よりふさわしい木を作成するために、3D モデリングアプリケーションや Unity の Tree 作成ツールを使用することも可能です。

選択した tree オブジェクトが Tree Creator で生成される際には、風への反応を調整するためのベンド係数がウィンドウに表示されています。下段にある Making trees bend in the wind セクションを参照してください。

Tree のペイント

tree を選択することで、テクスチャやハイトマップをペイントするのと同じように景色をペイントすることができます。ペイント中に shift キーを押しっぱなしにすることでエリアから tree を削除することができます。現在選択されている tree タイプのみを削除する場合は、control キーを押しっぱなしにしてペイントします。tree ペインティングでは Brush Size オプションを使用することが可能です。Opacity プロパティーは Tree Density へと取って代わられ、それはエリア内の指定されたユニットにおける tree の平均数を制御するものです。

スライダーを使って tree の高さの最小値と最大値を制御できます。ランダムを無効にした場合、すべての tree の高さを決めうちすることもできます。標準では、常に均一なスケーリングができるように、tree の幅は高さにあわせてロックされています。しかし Lock Width to Height オプションを無効にすれば、幅を個別に決める事もできます。

また、Color Variation の制御も存在し、tree の高さと幅を細く指定することも可能です。バリエーションのオプションは同一の木による人工的な林ではなく、ランダムな印象の自然な感じの林を作成するのに役立ちます。

Mass Place Trees ボタンは景色すべてをペイントすることなく、全体を覆う tree を作成することができます。Mass Place Trees 使用後も、密集した、もしくはまばらなエリアを作成するために、ペイントを使用して tree の追加や削除をすることができます。

SpeedTree/LOD による木

Unity5からは IDV 社製の SpeedTree Modeler を使う事ができるようになりました。smooth LOD transition、fast billboarding、natural wind animation などのより高度なビジュアルエフェクトを伴う tree の生成が可能です。より詳細な情報はSpeedTree のサイトを参照してください。SpeedTree のアセットは、アセットストアのパッケージやサードパーティの配布先から、プロジェクトフォルダーへ自由にインポートできます。

詳細はこちらを参照してください。

Tree Creator による木

Unity には tree アセットを新たに作成することができる Tree エディターがあります。また、一般的な 3D モデリングアプリケーションを使用して作成することも可能です。tree メッシュは 2000 トライアングル以下に抑え(パフォーマンスのため)、アンカーポイントは tree の根元、地面から出てくる部分に設定してください。メッシュは常に、必ず 2 つのマテリアルで構成してください。一つは tree の幹の部分、もう一つは葉の部分に使用します。

Tree は Nature/Soft Occlusion LeavesNature/Soft Occlusion Bark shader を使用する必要があります。これらのシェーダーを使うために、Tree は“Ambient-Occlusion”の名前を含む、特別なフォルダーに配置しなければなりません。モデルをフォルダーに配置したり、再インポートしたりすると、Unity は Tree に特化された、Soft Ambient Occlusion を計算します。“Nature/Soft Occlusion”シェーダーには、この情報が必要です。もし、命名ルールに従わなければ、樹木は真っ黒な変なものに見えてしまうでしょう。

モデリングアプリケーションから tree アセットを保存するとき地形上で tree の最新版を見るために Refresh ボタン(tree ペインティングツール選択時にインスペクター内に表示される)をクリックする必要があります。

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

新しい木のアセットをシーン内でインスタンス化することでカプセルコライダーを追加することができます。変更された 木オブジェクトにコライダーを追加して(メニュー: Component > Physics > Capsule Collider ) 新しいプレハブを作成します。terrain に木を追加するときオリジナルのオブジェクトではなくコライダー付きのプレハブを選択しているか必ず確認してください。また、terrain の Terrain Collider コンポーネントインスペクターから Create Tree Colliders を有効にする必要があります。

風で動く木をつくる

最初に必要なのは wind zone の作成です。メニューから選択することで作成できます。 Game Object > Create General > Wind Zone

ここで、ツリーにベンドが設定されている事を確認してください。tree types を選択して、Edit Trees… -> Edit tree を選びます。まだ設定していないなら、ベンドさせるために bend value を1に設定してください。

ツリーが、かなり乱雑に動く事に気づくでしょう。これを直すために bend value を変更することもできますが、ツリーの bend value は1に設定したまま “Wind zone” の値を直接設定する方が、恐らく簡単です。ツリーが過剰に揺れ動くのはそのままにして、wind turbulence を0.1~0.3ぐらいに下げると、全体がよりなめらかになると思います。ツリーが常に一方向に揺れ動くのが気になる場合は、Wind Main value を turbulence と同じぐらいの値に下げてください。

Terrain Textures
SpeedTree