ngPlant 0.9.13覚え書き


これはパラメータを入力して3D樹木や草木を生成するソフトウェアです。オープンソースで開発されていて利用はフリーです。
1本の樹木や草をそれなりの手順を踏んで作成します。他の3Dソフトで加工するための樹木のひな形を作るのに向いていると思います。
3Dデータ形式はngPlant専用/ngPlantアーカイブ形式が対応しています。書き出しはobj,dae形式に対応しています。

配布元:ngPlant | Open Source plant modeling アプリケーション版は開発者のサイトから入手できます

Web版:WebPlant:デスクトップPCのブラウザ上で動作するDemo。ソースコードあり(BSDライセンス)。2016年12月に10周年記念でリリースされました。操作方法はアプリケーション版とぼぼ同じで.obj.ngaファイルが扱えます。 アプリケーション版との違いはg-meshブランチ、ビルボードによる葉、Luaプラグインには非対応。また、Web版独自の機能として"Example..."プルダウンメニューから50種類の植物をサンプルとして読み込むことができます。

アプリケーション版ngPlantの使い方


起動直後の画面
左に3Dビュー(3Dview)、右にパラメータパネル(Parameter Panel)と構造ツリー(Structure Tree)がある

操作方法。3Dビュー画面にて... 単に出来上がりを見る以外に、分かりにくいパラメータ変更の効果を視点を変える(例えば真上から見る)ことで初めて理解するといったこともあります。ぜひ活用してみましょう。


製作のコツ

まず何をしたらいい?

テクスチャのある場所を設定しておく(一度だけ設定すればOK)
もし樹木に自作のテクスチャ画像を貼りたいなら、初期設定ダイアログから、読み込ませたいテクスチャファイルのある場所を指定しておいてください。(後でもいいけど、ngPlantを再起動しないと場所を認識しません。)。
参考:テクスチャを貼る


とりあえず単純に針葉樹(枯れ木)からつくってみましょう。

まず、構造ツリーでBranch-1(幹)(上の画像で赤丸で囲ってる項目)を選択しておきます。
そしてその項目上で、右クリックメニューを出して "New Branch..."を実行してください。

↓こうなります


すると構造ツリーでは、Branch-1(幹)の下に、新しく子項目Branch-1-1(枝)が追加されます。
新しく追加したBranch-1-1(枝)が灰色の選択状態なっています。

このとき上のパラメータパネルではBranch-1-1(枝)に対応する設定項目(Stem/Material/Branch)が現れます
枝ぶりなどの特徴はそこで編集してください。3Dビューには編集結果がリアルタイム反映されます。
↓追加した直後は、枝がくし状に生えてます。この枝を曲げたり生える位置を編集する必要があります


枝Branch-1-1のそれぞれの枝から小枝を分岐させるには、同じようにして直下に入れ子項目を追加してください。
しかし今これを追加すると収拾がつかなくなるので、Branch-1-1(枝)を編集したあとで追加すると良いでしょう。
樹木構造ツリーの項目は名前変更できるのでわかりやすい名称に変えても良いでしょう。


樹木の特徴を決める。

パラメータパネルのタブ分類
Branch(枝)タブの設定項目の内容は、Plant直下ノードとそれ以外では違うので注意してください。

重要:パラメータパネルの編集可能な内容は、樹木構造ツリーで現在選択中の項目に対応しています。
(下のスクリーンショットではBranch1-1(枝)に対応する情報が表示されています)
思ったような編集結果にならないと思ったらツリーの選択項目が間違ってないか(枝のつもりで幹の項目を選んでいた等)、確認してみましょう。

ここで、パラメータパネルに存在する入力項目の操作を説明します。
すばやく入力操作ができれば試行錯誤サイクルの短縮にも繋がります。

これは値入力ボックスです

+ [ 数字 ]− - ←数字の上で

これはカーブエディタです


樹木のシルエット(樹型)、枝の太さ、枝の分布、葉の形などのパラメータを設定するのに用いられます。
使い方に慣れるとカーブの曲がり具合に従ってなめらかに設定することができます。

針葉樹をつくろう

針葉樹のように決まり切ったパターンで成長している樹木は作りやすいです。
今回の例は、デフォルト状態で、Branch1-1を追加した直後から始まります



StemとBranchタブの各パラメータを以下のように変えて、枝ぶりの変化をみてみましょう。
必要最低限のパラメータをいじってなるべく効果的な結果を得られるようにしています。




こんな感じになります。値を変えてアレンジしても良いでしょう。
互い違いに枝を伸ばしたり、ランダムな配置にしたり....


さらに,枝ぶりに変化をもたせるなら、BranchタブのDeclinationカーブをいじりましょう。
雪積もって風雪に耐えている、北方に生えてそうな針葉樹。


公園の並木道にありそうな木。


葉はどうするの?

MaterialタブのBaseColorで色分けすると、構造が見やすくなり作業がやりやすくなります。
また、葉のタイプはStem model typeを変更することで実現します。デフォルトはTube(先細り)。

残念ながらTubeは全方向または下方向にしか向かせることができません。
そのため樹木を作る場合、構造ツリーの入れ子をむやみに増やさず2〜3段階で抑えておきましょう。

作りたい作品の主役が樹木でない限り、ポリゴン数を減らしたほうが後々便利です。
内部までポリゴンをぎっしり詰めるのでなく、MinOffsetの値を工夫し、なるべく枝の先っぽへポリゴンを散らすといいかもしれません。




右クリックメニューの機能
重要:パラメータパネルの各タブ内にあるパラメータの数や種類はStem modelに応じて専用のものに変化します。混乱しないよう気をつけてください。
(例:Wingsタイプにすると、Branchタブ内の設定可能なパラメータはRotAngleのみになる。)




Stem type : Tubeの時の設定例

広葉樹や低木をつくろう

植物には、広葉樹のように大きく変則的に枝分かれした木、または草のように根元から株が分かれているものもあります。
このような植物を作るには、構造ツリーPlant直下の階層に新しくBranch(便宜上Branch-2と呼ぶ)を追加してください。
注意すべき点は。追加直後の2本目(Branch-2)は初期化状態にあり、長さも潰れており、根元の位置が1本目と重なってます。
3D画面で確認しやすくするために、ずらしておきましょう。
Materialタブ内にあるBaseColorを変えて見やすくするのもよいでしょう。
また、Stem model のタイプを変更することで、丈長い草や、短い葉をもつ雑草も作れそうです


位置や枝ぶりを編集して変えてみましょう。
まず、構造ツリーの、Branch-2(幹)を選択しておいてください。
パラメータパネルで編集します。編集項目は各タブに分類されています。


枝をコントロールするのがちょっと難しい。
構造ツリーが複雑になりがちなのでミスしないように気をつけよう。
本当はもう一本の枝に葉を生やしたかったのだけど、失敗。



イバラやおどろおどろしい枯れ木
Resolutionの値を上げると、Axsis variationの「のたうち具合」が激しくなります。
これを利用すると地中に広がる根を表現したりすることもできます。
工夫すれば大根やらモンスターやらタコの触手も作れるかも。

Setm タブの役立つパラメータ
Length(長さ): 全体の長さ
Variation(バリエーション):1本の場合機能しない。複数の枝が林立している場合にそれらをランダムな長さにする。
Resolution(解像度): モデル精度が高くなる。ポリゴン数増大。
Axis variation(湾曲): のたうち回りながら伸びる。Resolutionの値が高ければ綺麗に曲がる




草むらをつくろう

草むらは、構造ツリーのPlant直下にBranch項目を作り、
そのStem model のタイプをQuad またはG-mesh に設定することで実現します。
全体的な散布形状はShapeパラメータによって決定づけられます( CircleとSquare)。


それぞれ、下の図のような違いがあります。


Quad編



Gmesh編

構造ツリー項目上で右クリックメニューを出し、そこからサブメニューを辿って選べます。

Rhomb(ひし形),Triangle(三角形)を指定した場合は最初にダイアログが出るので、サイズを設定してください。)



Gmesh(Import.OBJ)編

OBJ(Wavefront)形式で保存された3Dデータファイルを読み込めます。
これを使えばngPlantで自動生成できないような複雑な葉を配置したり、
樹木に自作の花や木の実を追加することができます。
他にも面白い利用法があるかも?(階段やシャンデリアとか)

ngPlant対応モデル作成のコツ
うまく作らないとエラーがでて読み込めないことがあります。
ここに、今まで試行錯誤して判明したことを載せておきます。



重要:読み込んだ直後はひっくり返っています。
果実ノードのパラメータパネルBranchのStartRevAngleを180に設定してください


構造ツリーにおける幹(Trunk)、枝(Branch)、葉(Leaf)、果実(Fruits)ノードの親子関係はこのようになっています。
どの階層に何を配置したらいいか迷った時の参考に。



UVデータを正しく展開せずに保存したデータは読み込み時にエラーが出ます。
(gmesh_import_obj.lua:134: invalid attribute index count)


三角/四角ポリゴン以上のポリゴンはサポートしません。(例:五角形のポリゴンを検知したため失敗)
(gmesh_import_obj.lua:124: face with unsupported vertex count (5) found)

テクスチャを貼る

事前にやること(初回のみ)

メニューバーから、ngPlant>Preference を選び、Preference(環境設定)ダイアログウインドウを開きます
「Tex.locations」 タブをクリックするとつぎのような画面になります。

重要:ngPlantはユーザーが登録した場所にある画像しか読み込めません。
重要:ngPlantを再起動しないと、登録した場所を認識しません。

HDDのどこかに、ngPlantで利用するためのテクスチャ置き場を決めておいてください。
  1. (1)「Browse...」 をクリックするとファイルセレクタウインドウが出るので、さっき決めたディレクトリのある場所を開き「Open」ボタンをおして確定。
  2. すると(2)の欄に先ほど指定したパスの場所が表示されます。そこで 「Append」ボタンを押してください。すると(4)の欄に追加されます。
  3. これでいいと思ったら、 (3)「OK」ボタンを押してPreferenceダイアログを閉じてください。
  4. ngPlantを終了して、もう一度ngPlantを起動してください。
これで、さっきの場所に画像ファイルがあれば、ngPlantから画像をテクスチャとして読み込むことができるようになります。
読み込む場所はいくつでも追加できます。
また、登録した場所を削除したい場合は(4)の項目をクリックしてから、(5)「Remove」を押せば削除できます。

テクスチャを読み込む


テクスチャ画像ファイルを用意し、ngPlantのPreference(環境設定)で登録した場所に入れておく。
また、今回は例としてこの画像を使います:

(256x256ピクセル, png形式,背景透過済み)
ngPlantの樹木構造ツリーから幹または葉のノードを選択、Materialタブに切り替えてください。

  1. Texture Layersの「Dif」ボタンがアクティブになっていることを確認。
    そしてTexture「?」部分をクリックしてください。
  2. ファイルセレクタが現れます。テクスチャとして読み込ませたい画像ファイルを指定してください。
    重要:環境設定で登録した場所以外から画像を読込ませることはできません
  3. うまく読込めた場合、次のような画面になっているはず。

    しかし透明部分が黒くなっているので、Transparentチェックボックスにチェックを入れてください。

  4. こうなります。


テクスチャを削除したい場合は、テクスチャプレビューの横の「x」をクリックしてください。

テクスチャとして利用できる画像形式は png/jpg/tga。RGBA,8bit
Dif : Diffuse(通常のテクスチャ画像)
Nor:Normal (ノーマル(法線)マップ画像
Aux0〜1はシェーダやプログラムで利用するらしい。

ネタ編

※これらはngPlant本来の使い方ではないので思った通りにいかないこともあります、予めご了承ください。

螺旋階段をつくろう(Gmesh-import.OBJの応用)

↑踏み板の3Dオブジェクト(objファイル)
(今回は幹に配置するので、木の実の時とは違う位置にモデルを配置して保存しておきます(横倒し)。
今回は踏み板の回転角度が22.5だったのでメモしておきました)

★柱-Pillar-の設定と、踏み板-Stair tread-の設定
踏み板のStem model は import.OBJタイプにしてあります。
踏み板オブジェクトをPillarに対して直角に配置させるため、踏み板のRotAngleの値を90度にしてあります。
また階段に隙間が生じないように、踏み板のRevAngleの値を22に設定(パラメータが小数点以下に対応してなかったので少数切り捨て。)


手すりとか支柱など、まだまだ研究余地はあります。

集落を自動生成してみた。(草むらの応用)




スキーリフト(樹木の応用)




お洗濯日和(樹木の応用)







その他:虫(樹木、葉、根、草の応用)

虫です。
ムカデなどの節足動物も作れそうです。しかし頭胸胴に別れた昆虫は少し難しいです。

この例では胴-胸-頭のラインで作って、そこで胴から一対、胸から2対づつ脚を生やしました。
足の先や体は、Declinationや、Max Min.offsetを調節することで、先端に1つづつ枝を乗せてうまくつなげてください。
左右対称に生やすには、親ノード BranchタブでMultiplicity:2,Min.Number:1にすることがポイントです
また羽は葉の応用でいろいろな生やし方ができそうです。

ただし脚は横にまっすぐにしか生やすことができませんでした。
(※枝を水平の鋭角範囲に2本だけ作成する機能が無いためです。
自由な角度で追加したいなら、それぞれ独立した脚として作成する必要があります。)
髪の毛(樹木、葉、根、草の応用)
3Dで髪の毛のモデリングをするのはとても大変です。
ところで、髪の毛と葉って似てますよね。なんとか髪の毛を作れないか試してみました。

右が作成中の画面、左は完成予想図として顔を書き加えたものです(イメージです)。
この子の前髪はStem:Tubeポリゴンの散布で表現、後ろ髪は二段階構造になってて、
↓Stem:Quadで短冊ポリゴンを1枚だけ生やしたものをMultplyパラメータを使い円状に配置しています。

ngPlantで作った髪は上から見て360度すべてに髪の毛が広がってしまう点に注意してください。
また、ポリゴンには髪の毛用テクスチャが貼ってあります。
ngPlantでベースカラーが設定してある場合、テクスチャに色が乗ります。

前髪、ポニーテールなど、髪の毛にボリュームや先細り感を与えたい場合Stem:Tubeタイプにしておくと作りやすいです。



その他:マンドラゴラ, 人形(樹木、葉、根、草の応用)
応用するとngplantでマンドラゴラを作ることも可能。
Branchのmin/max offsetを調節して、枝の生える場所をコントロールするのがコツです。
さらに作り込めば人物っぽいものを作れたりはします.....。
(腕や足を曲げてポーズを変えれるものの、パラメータが複雑であまり実用的ではありません)


従って、ngPlantは髪の毛といった部品を作るために利用し、
完成は(使い慣れた)別の3Dソフトでやるのが良いです。

髪の毛以外の使い道として、ホウキ、絵筆、動物の尻尾などに利用できるかもしれません。

データを保存しよう

メニューから File>Saveすると ngPlant専用形式(.ngp)で保存できます。
メニューから File>Export to ...で ngPlant専用アーカイブ形式(.nga)を選択することができます。


他の3Dデータ形式で保存するには?
メニューから File>Export to ...で dae 形式と obj形式で出力することができます。


トラブルシューティング

★樹木に実を成らせたいが、Gmesh Import.OBJで読み込んだ実の位置がおかしい。
OBJ形式で保存した時のオブジェクトの位置を変えてみましょう(地平面下へさげる)。
また、枝から実をうまく垂れ下がるようにするには、原点(0,0,0)に 花梗(かこう)または果柄(かへい)の先っぽがくるようにしてください。
果柄とは?果柄 - Google 検索

★Gmesh Import.OBJの「Generate Tangent Space info?」ダイアログでYESにしたら読み込み失敗した。
NOを選ぶと読み込みが成功する場合があります。

★Gmesh Import.OBJで実のオブジェクトを読み込んだが、実が逆さまになっている。
構造ツリーで果実ノードを指定し、パラメータパネルのBranchタブにある、StartRevAngleの値を180に設定

★G-meshでObj形式のファイルが読み込めない
Gmesh(Import.OBJ)編の、「読み込むコツ」を参照ください。

★樹木作成中にG-Meshのサブメニューが選べない(G-mesh,Rombus,Triangleが選べない)。
★またはFile>Export to ... を選んでもメニューにdaeやobj形式で保存する項目が見当たらない。
これはngPlantのプラグインディレクトリの場所が間違ってるか、プラグインディレクトリの場所に出力用luaスクリプトがないことが原因です。

ngPlant>Preferences でngPlant環境設定ウインドウを出し、Misc.タブのプラグインディレクトリを正しく指定してください。
例えばOSXのApplications フォルダにngPlant をインストールしている場合、
/Applications/ngplant.app/Contents/Resources/plugins がそれです。

(ディレクトリパスが正しければメニューが追加されます。)

スペシャルサンクス

機能を理解したり、記事を書くのに参考にしたサイト。ありがとうございます。
更新履歴
ver0.9 , 2016/01/10 ダミー枝に関する情報を追加。
ver0.8 , 2015/12/25 その他 を追加。
ver0.7 , 2015/12/11 ngPlantで髪の毛(樹木、葉、根、草の応用)、を追加。
ver0.6 , 2015/12/08 テクスチャパスの登録方法、テクスチャ画像の読込み方法を追加。
ver0.5 , 2015/12/05 イバラ、螺旋階段の作成法を追加。ほか文章をいくつか補足。
ver0.4 , 2015/12/02 G-meshで上手に果実を成らせる方法を解説。その際のトラブルシューティングを追加。
ver0.3 , 2015/12/01 草原を作成するための情報を大幅追加。トラブルシューティングを追加。一部のメニューが表示されない原因と解決法。(Import/Exportなど) ;;
ver0.2 , 2015/11/30 ベースカラー変更及びStem_type に関する情報を追加。カーブエディタで制御点を個別に削除可能なことが判明、該当箇所を訂正しました。
ver0.1 , 2015/11/28 書き始め

<arolf_infoseek_jp> Tsukubado