takeyohのおぼえがき

気になったこと、試したことの記録です。

木のオブジェクトの作り方

ターンパイクに2Dの木を植える作業をやりましたが、その覚書です。

trackに設置されている、木の作成にはちょっとしたコツがあるようです。
普通に木を植えて、ksEditor上でマテリアルにksTreeを設定してkn5を作るとこうなります。

これをこういう感じの木にするための方法です。

最終的にパーティクルの機能を使って木を大量に増やすわけですが、そのもとになる木のオブジェクトを少し加工します。
まず木の画が張り付いたオブジェクトを用意します。

編集モードに切り替え、オブジェクトの原点(オレンジの点)がオブジェクトの一番下に接するようにオブジェクトを上にずらします。

そしてこのオブジェクトを縦に細分化します。今回は2等分しました。
(縦に黄色い線が入っていますが、これは分割してません。映りこんでしまっただけです。)

この細分化はどれくらいやればよいのか明確にわかりませんが、後程マテリアルでksTreeの設定をした際、木としての表現がより細かくなるようです。

木の画が張り付いた1枚板のオブジェクトを複製し90度回転させて結合することで、十字の木が出来ます。

水色の線が法線。2方向だけに向いています。

さらにそれを複製して、法線の向きを逆にして、結合すると360度どこから見ても見える木が出来ます。

水色の法線が4方向を向いています。

こうして作られた木のオブジェクトを山ののり面に大量に生成します。
やりかたはこちら。
modelinghappy.com

生成した木は、オブジェクトに変換できます。
モディファイアプロパティを選択し、パーティクルシステムの枠内にある「インスタンスを実体化」をポチると、木一つ一つがオブジェクトに変換されていきます。
大量(10万個とか)でこれをポチると、blenderは当分応答しなくなると思いますので、ご注意ください。

個別に木が出来上がりますが、これを結合してはいけません。
木は一本ずつ別のオブジェクトにするべし、と書かれていました。(結合できれば、PCの負荷が下げられるんですが、ここは我慢)

続いて、木のオブジェクトの名前を変えます。木のオブジェクトには命名規則があり、

KSTREE_GROUP_

という文字で始まる名前が必要です。このまま、KSTREE_GROUP_1, KSTREE_GROUP_2,とつけても良いですし、
KSTREE_GROUP_OAK1_1, KSTREE_GROUP_OAK1_2,のように名前を追加して連番にするのも可能です。
今回は超大量に木を作っているため、一つずつ名前を変更していく作業は不可能です。
blenderで一気に名前変換を行います。
たとえば、今回の例ですと、ある木のグループはOak1.001, Oak1.002...となっていますので、
blenderの編集メニューから「名前を一括変更」を選択し、対象はすべて(オブジェクト)、検索がOak. 、変換がKSTREE_GROUP_OAK1_ として、OKを押します。
するとOak1で始まるオブジェクト名がすべてKSTREE_GROUP_OAK1_で始まるオブジェクト名に変わります。
他にも木の種類がある場合は、同様に名前を一括変換します。

これ、blender上では木1本ずつ、別々のオブジェクトになっているのですが、この命名規則に基づいてオブジェクト名を設定すると、ksEditorで読み込んだ時、同じグループ名のものは一つのオブジェクト(シェダー)にまとめられるようです。10万本をそのままゲームで読み込んだらカクカクで全く動かなくなってしまいますが、ksEditorがグループごとにまとめてくれることで、ゲームにも負荷がかからずに済みます。

できたらFBXでエクスポートして、ksEditorで読み込みます。
マテリアルでFBX_MATERIALが出てきて困る~というときは、一つ前の記事をご覧ください。

木のマテリアルにksTreeを設定し、パラメータを設定します。(この辺はお好みで)
最後に、kn5(track)を作成します。
これで完成です。

情報元はこちらです。
SHADER - setting-up trees | Assetto Corsa Mods

/* -----codeの行番号----- */