法線マップの作成ツールメモ

法線マップ(ノーマルマップ)の作成ツールについて調べていたら、やたらと情報が溢れてしまったので整理しておく。

Photoshop

Photoshop の法線マップ作成プラグイン「NormalmapFilter」を使う。

これはアルファチャンネルやカラーチャンネルから高さ情報を生成し、法線マップ(ノーマルマップ)を作成するプラグイン。法線は隣接するテクセルを使用して作成される。

f:id:Ditty:20181126234151j:plain

以下にユーザーマニュアル等から調べたパネルの各項目について記す。

  • Dynamic Preview:プレビュー欄。
  • Add Height to Normal Map:法線マップに高さを追加。
  • Using Multiple Layers:レイヤーを使っていてアルファチャンネルを使えない場合に選択。
  • Swap RGB:RGB値を反転させる。
Height Generation (高さの生成)
  • Filter Type:その場所のベクトル値を計算するピクセル数を指定。例えば4なら上下左右の4ピクセルとなる。これで法線マップの凸凹のなだらかさを設定できる。
    • Du/Dv:EMBM (Environment-Mapped Bump Mapping; 環境マップバンプマッピング) というテクスチャマップを作成する。
  • Wrap:テクスチャの上下左右を繋げて処理する。シームレスなテクスチャから法線を作る場合はチェックする。
  • InvertX:X値(つまりR値)を反転。
  • InvartY:Y値(つまりG値)を反転。
  • InvartZ:Z値(つまりB値)を反転。
  • MinZ:「上」方向を強制的にこの最小値にする。
  • Scale:凹凸の高さの値。
3D View Options (3Dビューのオプション)
  • Decal Texture:デカールテクスチャ。
    • Use Decal Texture:デカールテクスチャを使用する。
    • Brighten Decal:デカールを輝かせる。
    • Animate Light:ライトを動かす。
    • Alpha Blending:アルファブレンディング(アルファ合成)。アルファ値を掛け合わせる。
    • Filter:フィルタ。
Height Source (高さ情報の参照先)
  • Alpha Channel:アルファチャンネル。
  • Average RGB:RGBカラーチャンネルの平均値。ほとんどの場合はこちらでよい。
Alternate conversions (別の変換方法)
  • Biased RGB:各テクセルからの画像の平均色を減算する。
  • Red:赤のチャンネルを高さに使用する。
  • Green:緑のチャンネルを高さに使用する。
  • Blue:青のチャンネルを高さに使用する。
  • Max:RGB各チャンネルの最大値を使用。
  • Colorspace:高さ = 1.0:[(1.0-r)*(1.0-g)*(1.0-b)]。ここではチャンネル値が0-1間の浮動小数点数として解釈される。
  • Normalize Only:すべてのベクトル値を1にするだけの法線マップにする。
  • Convert to Height:法線マップを高さフィールドに変換。[Invert X][Invert Y][Scale]を使って出力に影響を与える。
Alpha Field(アルファチャンネルのオプション)

法線マップ生成後のアルファチャンネルをどうするか選択する。

  • Unchanged:変更せず、元のアルファ値のまま。
  • Height:高さマップの値にする。
  • Set to 0.0:0にする。
  • Set to 1.0:1にする。

注意点として、このフィルタープラグインは現在選択されているものにしかアクセスできないため、必ずすべてのチャンネルを選択すること。また、画像にアルファチャンネルがない場合はそれに関する機能が無効となり、ポップアップウィンドウが表示される。「Alpha Field」から法線マップを作成したい場合は、「ウィンドウ」>「チャンネル」でアルファチャンネルを選択する。

なお、Photoshop CC 2015 からはこのプラグインをインストールしなくても、[フィルター]メニューに[法線マップを生成]する機能がついた。

オンラインジェネレータ

オンラインで画像を法線マップに変換してくれるWebサービス

専用ソフトウェア

法線マップ作成専用だけではなく、その他の様々なテクスチャマップ等も作成できるソフトがあるようで(総称を何と言うのか知らないが)、まったく詳しくないがとりあえず見かけたものを並べておく。

その他

テクスチャマップでレリーフを描画する

レリーフなどの細かい凹凸模様をモデリングするのは大変なので、LightWave でテクスチャマップを使って凹凸を描画する方法について調べたメモ。これによりモデリングせずとも、テクスチャだけで表面を盛り上げることができる。モノクロイラスト等へ使う観点から記した。ソフトウェアの使用バージョンは LightWave 2015.3 日本語版である。

図版を作成する

Catherine L. 氏の提供する以下の Photoshop ブラシ素材を使用して装飾模様を作成。

今回は正方形のキャンバスを作り、白い背景レイヤーの上に黒で模様を描いたレイヤーを重ねた画像(PSDファイル)を利用した。


バンプマップ(Bump Map)

まずは一番単純なバンプマップを試してみる。これはモノクロ(グレースケール)画像を使うが、50%グレーよりも暗い部分が引っ込んでいるように、それより明るい場合は出っ張って見えるように処理される。ポリゴン形状は変化せず、陰影を与えることで表面の形が変わったように見せかける技術。

Modeler を起動、今回はテストなので立方体を作成。ショートカット【F5】で[色・質感編集(Surface Editor)]パネルを出す。該当サーフェイスの[基本]タブ>[バンプ]の項目を100%にして、右にある[T]ボタンを押す。

[テクスチャ編集]パネルが出るので、[画像]欄で[(画像を開く)]から用意してあった画像を読み込む。

今回は[投影]を[立方体状]に。[Texture Amplitude (テクスチャ振幅)]は「100」にした。[自動サイズ合わせ]を押してスケールを変更し、ちょうどいい大きさに。描いた模様は黒色なのでそのままでは凹んでしまうので、これを凸状に盛り上げるため[レイヤー反転]にチェックを入れて有効化(または[画像編集]パネル>[編集]タブ>[反転]を有効化でもよい)。[ピクセルブレンド]も有効化しておく。なお、こうして設定したバンプマップの影響は[色・質感編集(Surface Editor)]パネルのプレビューに見えている球の質感が変化することで確認できるが、Modeler のビューで確認することはできない。

そこで Layout へと移る([色・質感編集(Surface Editor)]パネルの設定時点から Layout に移っていてもよい)。カメラ位置を決めたら背景色を白にし、ビューポートの表示モードを VPR に変更。すると、テクスチャの模様部分が盛り上がっているのが分かる。

F9】でレンダリングしてみる。輪郭線は設定していない。

盛り上がりはさほど大きくないものの、装飾模様の陰部分が黒く見えてそれなりに凹凸が入っているのが描画されている。しかし、いつもの線画を出すときと同じく色を白にして自己発光度を100%にすると、真っ白になって装飾模様など見えなくなる。形状が変化していないのだから当然なのだが、輪郭線を設定しても以下のように白くなるだけである。


陰を描画する

これではモノクロイラスト用途に使えない。そこで、白地に装飾模様の陰を描画するためプラグインunReal Xtreme2」を使う。

まず[色・質感編集(Surface Editor)]パネルの[色]のカラーボックスか、もしくはノード編集で[Color]ノードを使ってサーフェイス色を白にしておく。このとき自己発光度は0%のままでよい。

unReal Xtreme2」プラグインを追加したら、[色・質感編集(Surface Editor)]パネル>[シェーダ]タブ>[シェーダ追加]より新規に[unReal2::CelPainter]を選択して追加し、名称部分をダブルクリック(または右クリック>[プロパティ])して CelPainter メインパネルを出す。

陰のキーを選択し、[ベース]タブのカラーボックスをクリックして色を黒に変え、キーハンドルを一番左へ動かす。VPRを見ながら白色のキーハンドル位置を動かして、装飾模様の陰の表示具合を調整する。ここでは[位置]を50%にしたが、あまり大きくすると真っ黒になる。[スムージング]はどちらも[ステップ]に変更。白と黒だけあればいいので、不要なキーは削除する。サーフェイスが複数ある場合はこの設定を他のサーフェイスにも移植する。

F9】でレンダリングしてみる。輪郭線も設定した。

ついでにバンプの[レイヤー反転]のチェックを外して(つまり凹ませて)みた場合は以下のようになる。やはり形状が変化していないので、陰を出せても違和感が残る。

後述する法線マップの項でも解説しているが、元画像を加工して白黒の境界に中間色(グレー)部分で縁取りしたものを使用した場合の結果は以下。線が太めに出ている。

標準機能だけで白地にしても陰を消さない方法については調べていない。「Super Cel Shader」や「BESM」等の搭載シェーダを使えばできるかもしれない。また、イメージフィルタ「Composite Buffer Export」や「Photoshop PSD Export」を使えば黒く見える濃い陰部分だけの素材を出力できないかと思ったが、これは無理だった。

ノード編集でバンプマップ

画像からのバンプマップをノード編集で設定する手順を記す。[色・質感編集(Surface Editor)]パネル>[基本]タブの[ノード編集]ボタン横のボックスにチェックを入れて有効化し、[ノード編集]ボタンを押して[Node Editor]を出す。左に並んだノード欄から[2D Textures]>[Image]ノードを出してその[Bump]出力を[Surface]ノードの[Bump]入力へと繋ぐ。[Image]ノードの設定は以下のようにした。[Bump Amplitude (バンプ振幅)]はそのままだとささやかすぎたので思い切って1000%にした。

さきほどと同様に「unReal Xtreme2」を使用して線を出してみたが、なぜかいまいち薄い上に立体感がない。


変位マップ(ディスプレイスメントマップ;Displacement Map)

変位マップはバンプマップと違い、オブジェクトの形状を変化させる。モノクロ(グレースケール)画像の白い部分にあるオブジェクト頂点を動かし、グレー部分ではその明るさに比例した分だけ頂点が動く。

つまり変位マッピングを適用するオブジェクトは、ポリゴンを細分化して頂点数を増やしておく必要がある。また、オブジェクトの全ポリゴンを三角分割しておかねばならない。4頂点以上のポリゴンの頂点を動かすと非平面ポリゴンとなってしまい、レンダリング時にエラーが生じるためだ。また、凹凸部分を滑らかにするには、サブパッチの適用が必要となる。

ということで、まずは立方体に[マルチ加工]>[細分化]>[細分化]>[ファセット]を何度もかけて細かくし、最後に[マルチ加工]>[細分化]>[三角分割]。

これをそのまま Layout へ持ち込み、オブジェクトを選択したら[オブジェクトのアイテムプロパティ]を出し、[変形]タブ>[変位マッピング]の[T]ボタンを押す。

[テクスチャ編集]パネルが出るので、[画像]欄で[(画像を開く)]から用意してあった画像を読み込む。

[投影]を[立方体状]にしたらバンプの時と同様で全面に出るのかと思ったらなぜか出なかったので、[平面状]にした。[Texture Amplitude (テクスチャ振幅)]は正の値で盛り上がり負の値で凹むので、「0.02」にしてわずかに盛り上がるようにした。元画像は白地に黒の模様だが、変位マップは画像の白部分の頂点が動いて黒部分の頂点は動かないので、[レイヤー反転]を有効化し、黒地に白模様となるようにする(または[画像編集]パネル>[編集]タブ>[反転]を有効化でもよい)。テクスチャ軸は[Y]に。[自動サイズ合わせ]を押してスケールを変更し、ちょうどいい大きさに。すると以下のようになる。

確かに盛り上がってはいるが、三角ポリゴンがそのまま出っ張っていて全体としてやや角張っている。忘れていたのでここで[色・質感編集(Surface Editor)]パネル>[スムージング]を有効化。これで多少は滑らかになった。盛り上がりをもう少しなだらかにしたい場合は、元画像にぼかしをかけて模様の縁部分をなだらかにしたものを読み込めばよいと思う。

これに輪郭線設定を加え、サーフェイス色を白にして自己発光度を100%にし、試しにレンダリング

ちょっとガタついているので、Modeler に戻ってサブパッチをかけてさらに滑らかにする。かなり細分化しているので、サブパッチをかけてもエッジ部分の丸まり具合は小さいのが幸い(これが大きいと輪郭線に影響する)。

これに輪郭線設定をしたら、エッジが丸まったからか[鋭角の折り目]を設定しても線が出ない。Modeler に戻って、各面(実際は向かい合わせの2面ずつ)でサーフェイスを分ける。

サブパッチをかけて Layout に移り輪郭線を設定、[シルエットエッジ]と[サーフェイス境界]を有効化。サーフェイス色を白にして自己発光度を100%に。結果に少し不満だったので、変位マッピングの[Texture Amplitude (テクスチャ振幅)]を「0.01」にしてレンダリングしたものが以下。

盛り上がった模様部分は[シルエットエッジ]で線が出ているので、この項目を細くするとオブジェクト外形の輪郭線まで細くなってしまう。外形線のみを太くするには、変位マップなしで線を太くしてレンダリングした線画と後で合成するしかないように思う。

ついでに書き留めておくが、これに追加してバンプマップの際に利用した「unReal Xtreme2」プラグインのシェーダ[unReal2::CelPainter]をそのまま使ってみたものの、あまり大きく変わらなかった。

ノード編集で変位マップ

画像からの変位マップをノード編集で設定する場合を記す。

[オブジェクトのアイテムプロパティ]を出し、[変形]タブ>[変位マッピング]の[ノード編集]ボタン横のボックスにチェックを入れて有効化し、[ノード編集]ボタンを押して[Node Editor]を出す。[2D Textures]>[Image]ノードを出してその[Bump]出力を[Displacement]ノード(変位もしくは変形ノード)の[Input]入力へと繋ぐ。

[Image]ノードをクリックしてパネルを出し、[Image]欄で画像を読み込む。設定は以下のようにした。

[Invert Color]にチェックを入れて画像の階調を反転させ、[U Tiling]と[V Tiling]は[Reset]し、[Mapping]は[Cubic]にしてサイズも合わせる。変位マップを使うときはテクスチャ画像のミップマップ品質はオフにしておくことがマニュアルで推奨されているので[Mipmap Quality]は[Off]にしたが、どちらでもよいと思う。肝心の盛り上がり具合を示す[Bump Amplitude]はわずかでいいので、VPR で確認しながら調整して「0.5%」にした。

これは仕様なのか不明だが、[T]ボタンから[テクスチャ編集]パネルを使う設定方法であればビューポートの表示モードが[テクスチャソリッド]等でも変位の影響が表示されたのに、ノード編集で設定する場合は表示モードを VPR にしておかないとその影響が表示されないので、少しやりづらい。

輪郭線設定は[シルエットエッジ]と[サーフェイス境界]を有効化。いつものようにサーフェイス色を白にして自己発光度を100%にし、【F9】でレンダリング。なぜかこちらはとても線が出ている代わりに、立体感がなくなった。

[Bump Amplitude]を「1%」にしてみたらガタついた線になってしまった。滑らかにするには[オブジェクトのアイテムプロパティ]>[ジオメトリ]タブ>[レンダーサブパッチ(Render Subpatch)]の値をいじればいいのか?

なお、変位マップはオブジェクトファイルではなくシーンファイルに保存される。また、変位マップで変形した形状のオブジェクトを保存したければ、Layout で該当オブジェクトを選択し、[ファイル]>[保存]>[変形状態のオブジェクトを保存(Save As Transformed)]から可能。つまり画像さえあれば、モデリングせずとも複雑に凹凸のついたオブジェクトを作成できるわけである。

法線マップ(ノーマルマップ;Normal Map)

法線マップとは、ざっくり言うとバンプマップの上位版だと思えばよい。法線マップもバンプマップと同様にオブジェクトの形状は変化させない。

法線(ノーマル)とは、ポリゴンの表の面から垂直に伸びている仮想上の線のこと。この法線がどの方向を向いているかという情報が、法線マップを適用するとそれに含まれる方向セットの情報に置き換えられる。それによって、ポリゴン該当箇所の高さと方向を擬似的に変えることができる。対してバンプマップは法線方向を置き換えるのではなく、既存の方向に対する修正を加えるもので、凹凸の高さだけをグレースケール画像で設定するというもの。法線マップでは、法線の方向の3次元情報(法線ベクトルのx, y, z座標)はカラー情報(RGB値)に対応させて記録されている。

Photoshop で加工してから法線マップ画像を作成

後述する理由により、画像編集ソフトで元画像を加工してから法線マップ画像を作成する。ここでは Photoshop を使うので、あらかじめ NVIDIA の「NormalMapFilter」をインストールしておく。

装飾模様の描かれたレイヤーを選択して右クリック>[レイヤー効果]からレイヤースタイルダイアログボックスを出し、[光彩(内側)]をチェックする(もしくは[レイヤー]メニュー>[レイヤースタイル]>[レイヤー効果]>[光彩(内側)])。パラメータは任意にいじる。

画像を統合し、されていなければRGBカラーにしておく([イメージ]>[モード]>[RGB カラー])。

[フィルター]>[NVIDIA Tools]>[NormalMapFilter]を実行。出たパネルでは[Invert Y]にチェックを入れ、[Scale]の値(凹凸の深さ・高さ)を任意に入力したら、他はそのままで[OK]。画像が法線マップ画像に変換されるので、別名で保存する。

f:id:Ditty:20181126234151j:plain

「NormalMapFilter」のパネル各項目についてや、その他の法線マップ画像作成ツールについては以下参照。

法線マップは垂直に凹凸をつけることには向いていない。元画像が白と黒のはっきりした2値画像もしくはそれに近い場合なら、そこから生成した法線マップではほぼ垂直に凹凸が生じてくっきり映えるように思えるが、実は物足りない結果となってしまう。白黒の境界に中間色(グレー)部分を縁取りして、斜め(=なだらか)に凹凸が生じるようにすると良い効果が得られる。参考として、白黒のはっきりした元画像のまま法線マップ画像へ変換したものと、元画像を前述のように加工してから変換したものを示しておく。

左が元画像のまま変換、右が加工後に変換した法線マップ。

ノード編集で法線マップをサーフェイスに適用

以降は LightWave へ移る。Layout にて、[色・質感編集(Surface Editor)]パネル>[基本]タブの[ノード編集]ボタン横のボックスにチェックを入れて有効化し、[ノード編集]ボタンを押して[Node Editor]を出す。左に並んだノード欄から[2D Textures]>[NormalMap]ノードを出し、ダブルクリックしてパネルを開いたら、先に作成した法線マップ画像を[Image]より読み込んで設定する。最後に[NormalMap]ノードの[Normal]出力を[Surface]ノードの[Normal]入力へと繋ぐ。[NormalMap]ノードの設定は以下のようにした。

F9】でレンダリングした画像が以下。

バンプマップの時と同様に、装飾模様の陰部分が黒く見えて凹凸が描画されている。しかし、やはり同様に色を白にして自己発光度を100%にすると、真っ白になって模様は見えなくなる。形状が変化していないのでこれまた当然である。ということで、ここでもプラグインunReal Xtreme2」を使って陰を描画する。方法はバンプマップの時と同じ。そうして最後に輪郭線を[シルエットエッジ]と[鋭角の折り目]に設定して【F9】でレンダリングした画像が以下。


レリーフマップ(Relief Map)

バンプマップや法線マッピングの上位版のようなものとしてレリーフマップというものがある。深度マップを利用して立体的な画をレンダリングする方法で、これも実際のオブジェクト形状は変化しない。LightWave の標準機能だけでレリーフマップはできないが、外部の無償ノードプラグインセット「DP Kit」内の「Relief Map」ノードを使うとできるようになる。扱いとしてはデモ版ということになっているようだが十分使える。以下に手順を記す。

事前に外部プラグイン「DP Kit」をインストールしておく。そして背景色を白にしたら、ビューポートの表示モードを VPR に変更しておく。

Layout にて、[色・質感編集(Surface Editor)]パネル>[基本]タブの[ノード編集]ボタン横のボックスにチェックを入れて有効化し、[ノード編集]ボタンを押して[Node Editor]を出す。左に並んだノード欄から[2D Textures]>[Image]ノードと[Constant]>[Color]ノード、そして[DP Kit]>[Shaders]>[Relief Map]ノードを出す。

[Color]ノードをダブルクリックしてパネルを開き、色を白(255, 255, 255)にしたら、[Color]出力を[Relief Map]ノードの[Color]入力へと繋ぐ。

次に[Image]ノードをダブルクリックしてパネルを開いたら、装飾模様の画像を[Image]より読み込んで設定する。このとき、法線マップで使ったようなグレーでぼかして縁取りした画像ではなく、元の白黒がくっきり分かれた画像の方がよい。

読み込む模様は黒色なためにそのままだと凹んでしまうので、これを凸状に盛り上げるため[Invert Color]にチェックを入れて有効化する(または[Edit Image]ボタンから[画像編集]パネルを開き、[編集]タブ>[反転]を有効化でもよい)。[Mapping]は立方体なので[Cubic]にした。[Scale]タブでサイズを合わせる。


[Image]ノードの[Luma]出力を[Relief Map]ノードの[Height]入力へと繋ぎ、[Bump]出力を同じく[Relief Map]ノードの[Bump]入力へと繋ぐ。おしまいに[Relief Map]ノードの[Diffuse]出力を[Surface]ノードの[Diffuse Shading]入力へと繋ぐ。

この時点での結果は以下のようになる。

確かに陰が入ってかなりよい具合に凹凸を表現できているが、物体表面がグレーになってしまっている。これを白くしようといつものように[自己発光度]を100%にしても変化がなかった。そこで色々といじってみたところ、[Relief Map]ノードのパネルにある[Diffuse]を160%にしたらグレーが消え、きちんと白色(255, 255, 255)になった。なお[Relief Map]ノードの[Max Depth]値では凹凸の深さ(高さ)を、[Self-Shadows]値では陰のレベルを調整できる。

最後に輪郭線を[シルエットエッジ]と[鋭角の折り目]に設定して【F9】でレンダリングした画像が以下。

この記事ではバンプマップ、変位マップ、法線マップと試してきたが、このレリーフマップがもっとも「レリーフっぽい画」を出力できたように感じる。形状が変化しないのに凹凸の陰を描画してくれることに加え、変位マップのようにポリゴンを細分化してサブパッチをかける必要もなく、法線マップのように専用の画像を用意する必要もないので、使いやすい点も大きく評価できる。他に比べてレリーフマップはレンダリング時間がかかるという指摘を見かけたが、白黒の静止画像を出力してみた実感としてはほとんど変わらなかった(上記の画像レンダリング時間は6.5秒)。この点については場合によるのかもしれない。個人的には、中景~遠景にあるビルの窓なども使えるのではないかと思っている。

参考

法線マップ
その他

テクスチャ編集の[ブレンドモード(Blending Mode)]にある「テクスチャ変位(Texture Displacement)」について。マニュアル(p.1712)によると「レイヤーを上に押し上げ、バンプ(Bump)マップのような効果」になるというが、この機能で変位するのはオブジェクトではなくテクスチャ。下にテクスチャ変位レイヤーを置くと上のレイヤーが変位する。

LightWave で植栽

LightWave で木・草・花など植物を作成・描画する際に使えそうなものをまとめた。

標準機能で作成

以下は[マジックベベル(Magic Bevel)]ツールで枝を作成。なお、この記事に出てくる草を生やすプラグイン「FOR_GrowsGrass」は配布終了しており、現在では入手不可能。

以下は[FiberFX]を利用して枝に葉を作成している動画。

以下はカートゥーン調の木をローポリゴンで作成。

以下は木ではないが鉢植えの植物。

こちらは下草と花。

以下は[FiberFX]で草を作成し、動かす。

以下は v5.0 というかなり古いバージョンのチュートリアルだが、基本的なことは共通している。

以下は葉の作成チュートリアル(v5.6)。

LightWave プラグイン

普通の木であれば標準機能でちまちま作成するよりもプラグインを使う方が効率的である。ということで以下に並べる。

DP Verdure

プラグイン4つをまとめたパック。「DP Tree」は樹木(幹と枝)を生成、「DP Foliage」は葉を生成、「DP Grass」は草を生成する。最後の「DP Growth」は「DP Tree」や「TreeCage」で生成した樹木が成長していくアニメーションを作成できる。

Germinator

L-system による樹木生成スクリプト。パラメータでフラクタルな形状を作成できる。ウェイトマップも生成するが、これは後述するプラグイン「Fertilizer2」などで利用できるようにとのことらしい。

以下ではこのプラグインで生成した樹木にエンドモーフを利用して成長するアニメーションを作成している。

ローポリゴンで木を大量複製

フォーラムのこのスレッドでは、テクスチャを貼った板ポリゴンを何枚か交差させているだけのものを使って大量に木を複製している。UVマッピングされたアルファチャンネルをクリップマップとして使用している、らしい。オブジェクトファイルがダウンロードできる。


インスタンスで茂らせる、植える

以下はインスタンスで地面に草を茂らせる。

以下はインスタンスで枝に葉を茂らせる。

以下のチュートリアルでは「DP Verdure」を使って樹木のオブジェクトを作成し、最後はインスタンス機能で大量に複製している。

揺らす・動かす

下草を揺らすチュートリアル

以下にあるのはつるが成長するアニメーション。スケルゴンにオブジェクトディゾルブ、エンドモーフを利用。

以下はスプラインコントロールを使って、つるの成長アニメーションを作成。

以下は変位マップとウェイトマップを使用して、木の葉が風で揺れるシーンを作成している。

以下では標準搭載機能だけで、地中から一気に立ち上がる木の映像を作成。

以下ではハイパーボクセルを使って、茂みが地中から噴出するように出てくるシーンを作成。

Fertilizer2

成長をウェイトマップで制御して、ウェイト値0から100へ向かってオブジェクトをにょろにょろ伸ばすプラグイン。ウェイト無しは固定。リボンや巻物、配管、植物の成長などのアニメーションに利用できる。

フリーソフトウェア

プラグインではないので LightWave とは関係なくなるが、単独で動作するソフトウェアも並べておく。

tree[d]

OBJ出力にバグがあり、値の一部がNAN(Not A Number)として出てくるという報告を見つけた(後に修正されたかは不明)。その場合はテキストエディタで開いて値をすべて「0.0」に変更すればよいらしい。また、モニタ解像度が高すぎるとダメという話もあった。

PlantStudio

樹木ではなく草花などの草本植物を生成するソフト。LWOで出力できるらしい。

Ivy Generator

蔦を生成するフリーソフトウェア。有志による改良版もあり、以下よりダウンロードできる。

なお、Blender にも樹木を作成できる機能(アドオン)があるらしく、調べると色々な解説ページがある。

有料ソフトウェア

SpeedTree

一番有名なソフトらしい。

PlantFactory

景観ソフト「VUE」を出している会社の製品。

Xfrog

樹木や花などの植物や有機的な形状をプロシージャルでモデリングできるソフトウェア。この Xfrog はLWOでも出力できるらしいが、生成したオブジェクト(アニメーションも?)を LightWave へ読み込むために使えるプラグインもある模様。

OnyxTREE

広葉樹(broadleaf)、針葉樹(conifer)、ヤシの木(palm)、竹(bamboo)、花(flower)、草(grass)をプロシージャルでモデリングできるソフトウェアを販売している。植物学的に正確らしい。LWO形式で出力可能。

TreeGenerator

過去バージョンがフリーで使えるらしい。

Flora3D

LightWave で NPR:筆描き表現を目指して その3

上の記事に続いて、以前紹介したことのある LightWave のシェーダープラグインunReal Xtreme2」を使ったモノクロ筆描き表現を試みた。ソフトウェアの使用バージョンは LightWave 2015.3 日本語版である。

事前準備

プラグインをインストールしておく。Layout でビューはVPRにしておく。背景を白にしておく(これは ToonTracer のオプションで設定してもよい)。

オブジェクトごとに線を違う太さにしたい場合はサーフェイスを分けるといったように、出したい輪郭線の設定によって任意にサーフェイスを調整しておくとよい。今回も前回同様に『終りなき戦い』のコンバットシェル(改変版)を利用しているが、コンバットシェルとその他のオブジェクトでサーフェイスを別にしている。

そして以下のようなMatCap用画像を用意する。作成方法は前回参照のこと。パーツ(サーフェイス)ごとに質感を分けたいなら、その分だけ別の画像も用意する。

今回は輪郭線を描画するブラシに画像テクスチャを設定する(つまりテクスチャで輪郭線を描く)ので、そのために以下のような少し濃い目の画像も用意した。

また、今回も平面対策として変形(Displacement)ノードを使いオブジェクトに微小な凹凸をつけている。これも設定方法は前回参照のこと。

サーフェイスにMatCapを設定する

Layout(Modeler でも可能)にて、左上メニュー[色・質感編集](ショートカット【F5】)で[Surface Editor]を開く。サーフェイスを選択して[基本]タブの[ノード編集]ボタン右隣のチェックボックスをオンにしたら、[ノード編集]ボタンを押して[Node Editor]を開く。

プラグインがインストールされていれば左のノード欄に[unReal]という項目が出来ているので、[unReal]>[unReal2::PaintmapCoordinate]から[PaintmapCoordinate]ノードを出す。そして[2D Textures]>[Image]で[Image]ノードを出す。

[PaintmapCoordinate]ノードの[U Offset]出力を[Image]ノードの[U Offset]入力へ、[V Offset]出力を同じく[V Offset]入力へ、[Position]出力を[Position]入力へとそれぞれ繋ぐ。最後に[Image]ノードの[Color]出力を[Surface]ノードの[Diffuse Shading]に繋ぐ。

[Image]ノードをクリックして編集パネルを出し、[Image]>[(load image)]から質感を適用するMatCap用画像を読み込む。すぐVPRのビューに反映されるだろう。これを適用したいサーフェイスすべてでおこなう。


EdgeTracer をセットする

そのまま[Surface Editor]にて、[シェーダ]タブの[シェーダ追加]プルダウンメニューで[unReal2::EdgeTracer]を選択する。

追加されたその名称部分をダブルクリック(または右クリック>[プロパティ])して出てきた[グループID]欄に番号を振る。今回は2種類のサーフェイスにそれぞれ「0」と「1」を割り当てた。この「グループID」を割り振ることで、IDごとに太さを変えたりといった輪郭線設定の調整ができる。


ToonTracer を設定する

Layout 左上メニュー[ウィンドウ]>[イメージプロセッシング]で[特殊効果]ウィンドウを開く(ショートカット【Ctrl+F8】)。[プロセシング]タブ>[ピクセルフィルタ追加]から[unReal2::ToonTracer]を選択して追加。

追加されたその名称部分をダブルクリック(または右クリック>[プロパティ])して[unReal Xtreme2 - ToonTracer]設定パネルを出す。このパネルで線の描画設定をおこなう。

まず[タイプ]を[画像]にして、右の[(Load Image)]からあらかじめ用意したブラシ用画像を読み込む。ブラシAAは[高]にした。

次に[ブラシ設定]タブの各パラメータを設定する。[サイズ]は30、[柔らかさ]は100%、[圧縮率]は20%、[角度]は10°、[不透明度]80%、[中心点X]と[Y]は共に20%にしてみた。

ここのブラシ設定でノイズ系のプロシージャルテクスチャを利用することで、手描き風の効果を出すことができる。まず[サイズ]の右にある[T]ボタンを押して[テクスチャ編集]パネルを開き、[レイヤー種]を[プロシージャル]にして、[プロシージャル種]でノイズ系のプロシージャルテクスチャを選択する。ここでは[Turbulent Noise]にしている。

このノイズによってブラシサイズが均一ではなく、線の太さが不規則に変化するようになる。[柔らかさ][圧縮率][角度]でも同様にプロシージャルテクスチャを適用する。ちなみに[T]ボタンは【Shift】を押しながらクリックすると解除できる。なお、[優先順位チェック]は[深度]にした。

[境界設定1]タブでは[オブジェクト境界][サーフェイス境界][グループ境界][深度境界]にチェック、[境界設定2]タブでは[法線の折り目][アウトライン]にチェックした。

ToonTracer ではブラシ設定と描画設定を1つのレイヤーとして扱う。先ほどサーフェイスに設定したグループIDごとに太さを変えたいので、ここでレイヤーを分けたい。左の[レイヤー]リストで現在のレイヤーを選択し、上の[レイヤー複製]ボタンを押して複製する。パネル上部の[レイヤー名]で分かりやすいようにレイヤー名を変更する。今回は「NewLayer0」と「NewLayer1」にした。

各レイヤーを選択してから左下[グループ]リスト一番左の欄で、それぞれ描画を適用するグループIDを決めてチェックする。ここでは「NewLayer0」にグループ「0」、「NewLayer1」にグループ「1」をそれぞれ適用させている。左から2番目の欄では描画から除外するグループIDにチェックする。

ここではコンバットシェルのサーフェイスに割り当てたグループ「0」を「NewLayer0」へ適用させ、それ以外のサーフェイスに割り当てたグループ「1」を「NewLayer1」に適用させた。そしてコンバットシェルつまり「NewLayer0」の輪郭線を20pxにして、30pxとしていた他のサーフェイス(レイヤー)よりも細く設定した。その他の設定は一緒。

すべてのサーフェイスに設定し終えたら、ショートカット【F9】でレンダリングして画像に出力。作成したサーフェイス設定を保存するならオブジェクトの保存を忘れずに。

静止画ではそれなりだが、動画だと輪郭線の途切れなどが目立つ。まだ設定が甘いのかもしれない。静止画でレタッチ前提なら使えるかも。動画のレンダリング時間は前回の手法よりも圧倒的に早かった。

筆書き風の画像を出力する手法として前回と比較すると、スフィアマッピング機能があり、テクスチャで線を描け、レンダリングが早いという3点くらいしか「unReal Xtreme2」を使う利点がない気がする。

ライセンス

本記事に使用したオブジェクトの元データは、作成者の rogerharkavy 氏によりクリエイティブコモンズ・ライセンスの「Attribution-NonCommercial-ShareAlike(表示-非営利-継承)」で配布されているため、その派生物である本記事内の出力画像にも同じライセンスを適用する。

クリエイティブ・コモンズ・ライセンス
rogerharkavy, Ditty を著作者とするこの 記事内の画像クリエイティブ・コモンズの 表示 - 非営利 - 継承 4.0 国際 ライセンスで提供されています。
http://www.thingiverse.com/thing:21308にある作品に基づいています。

LightWave で NPR:筆描き表現を目指して その2

上の記事に続いて、以下のページで扱われている水墨画風の表現方法に LightWave で挑戦してみる。

スフィア環境マッピング

この質感が墨で筆描きしたような塗りになっているのは、MMDのスフィアマップ機能というもので実現されているらしい。正式には「スフィア環境マッピング」といい、球体の画像からその色や陰影をオブジェクトのサーフェイスに適用する技術である。これに使われる画像素材を MatCap (Material Capture) と呼ぶ。ある質感をもった球体の画像(2次元なので円になるが)を用意すると、その画像をオブジェクトの形状(正しくはカメラに対する法線の向き)に合わせて質感として適用してくれる。

ただし、色だけでなく陰影や反射なども元画像に描かれたものが適用されるため、別にライトや陰影を設定しているとレンダリング画像に違和感が生じることも多いので注意。そして技術の原理からいって、カメラに対する法線の角度変化が多いような、つまりは曲面の多い形状には向いているが、逆にのっぺりした広い面が多い形状にはあまり向いていない気がする。

LightWave にはスフィア環境マッピングのメニューが標準搭載されていない(多分)ので、外部プラグインで実現させる。現時点では以下の2つのプラグインのどちらかを使えばできる。ここでは「AS MatCap Node」を使った手順を紹介する。

結論としては、以下の画像を出力できた。


事前準備

まず、以下のような画像を用意する。最初に紹介したページと同じくパーツ(サーフェイス)ごとに質感を分けたいなら、その分だけ別の画像も用意する。

これは、Photoshop で正方形キャンバスを新規に作り、それに内接するような円の範囲(以下参考)内に画像を描いている。なお、あまり厳密に内接していなくてもよい。

本来は反射とか陰影のついた球体の画像を描くのだが、今回は水墨画調を目指すので白いキャンバスに黒色で墨がにじんだようなタッチを描いた。

ペイントソフトに筆のようなブラシがなければ、それを探すか作ることから始めよう。自作するなら以下の記事が参考になる。もしくは Photoshop なら普通のブラシで描いたのち、水彩画フィルターや墨絵フィルターをかける方法も使えるかもしれない。

市販の Photoshop ブラシセットであれば、中国産のこれが最も優秀だと感じた。

こちらも紹介しておく。

画像作成時、円の面積いっぱいまで塗るとサーフェイスの端まで塗りつぶされて墨絵っぽくならないので、外側はある程度空けておくのがよい。画像サイズは大きいほうが何かとよいだろう。今回は1200×1200ピクセルで解像度400ppi。描いたらPSDかPNGあたりの任意形式で保存しておく。

LightWave における手順

前述のプラグインをインストールしておく。今回も前回と同様、簡単な直方体(モノリス)と球、歯車、そして以前に紹介し再配布している『終りなき戦い』のコンバットシェル(改変版)を利用している。ソフトウェアの使用バージョンは LightWave 2015.3 日本語版である。

Layout にオブジェクトを置いて背景は白に設定する。左上の[ウィンドウ]>[背景オプション](【Ctrl+F5】)>[特殊効果]ウィンドウ>[背景]タブ>[背景色]で設定。

[オブジェクトのアイテムプロパティ]>[輪郭]タブで、アイテムごとに出したい輪郭線を有効にしてそれぞれ太さを決める。

輪郭線のノード編集で[Edge]ノードの[~Taper]と[~Opacity]にプロシージャルテクスチャを入力する。ここでは[Scalar Layer]ノードでプロシージャルのレイヤーを作成して設定している。今回は光による線の強弱は設定していない。詳しくは前回記事を参照のこと。

【F5】キーで[色・質感編集]パネルを開き、サーフェイスを選択して[基本]タブの[ノード編集]ボタン右隣のチェックボックスをオンにしたら、[ノード編集]ボタンを押して[Node Editor]を開く。

プラグインがインストールしてあれば左のノード欄に[ASTool]という項目が出来ているので、[ASTool]>[Shader]>[Diffuse]>[MatCap]で[MatCap]ノードを出す。[MatCap]ノードの[Color]出力を[Surface]ノードの[Diffuse Shading]に繋ぐ。[MatCap]ノードをクリックして編集パネルを出し、[Image]をクリックして[load image]から質感を適用するMatCap画像を読み込む。すぐにVPRのビューに反映されるだろう。なお、アンビエントオクルージョンなどは設定していない。

すべてのサーフェイスに設定し終えたら、ショートカット【F9】でレンダリングして画像に出力。作成したサーフェイス設定を保存するならオブジェクトの保存を忘れずに。

見て分かるように、曲面の多い形状のものにはかなり有効だが、広い平面が多い形状にはあまり向いていない。動画にもしてみたが、平面では陰影のちらつきが目立つ。


変形ノードを使った修正

この平面部分にムラを付けてのっぺりさせたくないのだが、原理的に1枚ポリゴンでは無理なので、ポリゴンを細分化してから微小な凹凸をつける必要があるだろう。フラクタル化([マルチ加工]タブ>[細分化]>[フラクタル化])やジッター([変形]タブ>[変換]>[ジッター])で処理しても構わないが、それだと元のオブジェクト形状も変化してしまう。そこで、Displacement(変形、変位、ディスプレースメント)ノードを使う方法を記しておく。

まず Modeler で、ムラを付けたいオブジェクト(アイテム)を細分化する。もし5頂点以上のポリゴンを三角分割で細分化するなら、その後に外部プラグインの「EdgeRelax」を使うと綺麗な分割になる。当然だが細分化前のオブジェクトを残しておきたい場合は別途保存しておくこと。

また、今回はいつものように[グローブ]で作成した球を使ったのだが、変形させてみたら両極付近がひきつって不要な線が出てしまったので、極部分のない球に作り直した。球体で変形ノードを使う場合は、プリミティブのボール作成時に数値入力パネルで[グローブ]ではなく[モザイク]にしておくとよいだろう。

左が[グローブ]で作成した球。右が[モザイク]で作成した球。

後で知ったが、こういう場合には[詳細(Detail)]タブ>[ポリゴン(Polygons)]>[極部修正(Fix Poles)]機能を使うという方法もある。これを使えば三角ポリゴンが密集した部分を分割して四角ポリゴンにしてくれる。マニュアルによれば、球状のジオメトリの極部にはこのツールを2回適用するのがよいとのこと。

Layout に移り、[オブジェクトのアイテムプロパティ]パネルで[現在のオブジェクト]から該当のオブジェクトを選択し、[変形]タブの[ノード編集]ボタン右隣のチェックボックスをオンにしたら、[ノード編集]ボタンを押して[Node Editor]を開く。

左のノード欄から[Spot]>[Spot Info]ノード、[Layers]>[Scalar Layer]ノード、[Math]>[Vector]>[Scale]ノードを出す。[Spot Info]ノードの[Smoothed Normal]出力を[Scale]ノードの[Vector]入力へ、[Scalar Layer]ノードの[Scalar]出力を[Scale]ノードの[Scale]入力へ繋ぎ、[Scale]ノードの[Result]出力を[Displacement]ノードの[Input]入力へと繋ぐ。

[Scalar Layer]ノードをクリックして開き、[レイヤー種]を[プロシージャル]にして、[プロシージャル種]でノイズ系テクスチャを選択する。ここでは[Crumple]にした。ビューをVPRにしながらパネルの各数値をいじって変形具合を調整。これをオブジェクトごとにおこなう。ここでは4つのオブジェクトを全て変形ノードでわずかにデコボコさせている。最後に【F9】でレンダリング。のっぺりしていた面に少しだけムラができているのがわかる。

動画にもしてみたが、やはり動かすと輪郭線の途切れやムラの入り具合などに違和感がある。もう少し設定を詰めるべきか。静止画ではそこそこのレベルになったとは思う。今回はすべてひとつの画像をベースにしているが、数種類の画像を用意してパーツ(サーフェイス)ごとに割り当て、それぞれ質感を変えるのもいいだろう。

(追記)この記事を書いた後にアダプティブピクセル・サブディビジョン(APS)という機能があることを知ったので、平面部分に微小な凹凸をつけるにはこれを使う方法でもいいかもしれない。[オブジェクトのプロパティ]>[ジオメトリ(Geometry)]タブ>[表示サブパッチレベル(Display Subpatch Level)]と[レンダーサブパッチ(Render SubPatch)]で調整できるらしい。サブパッチをかけたオブジェクトでなければいけないようなので、カクついた形状を維持するには縁付近にエッジを追加するといった工夫が必要になりそう。

続きとして、以下で「unReal Xtreme2」を使う方法についても書いた。

ライセンス

本記事に使用したオブジェクトの元データは、作成者の rogerharkavy 氏によりクリエイティブコモンズ・ライセンスの「Attribution-NonCommercial-ShareAlike(表示-非営利-継承)」で配布されているため、その派生物である本記事内の出力画像にも同じライセンスを適用する。

クリエイティブ・コモンズ・ライセンス
rogerharkavy, Ditty を著作者とするこの 記事内の画像クリエイティブ・コモンズの 表示 - 非営利 - 継承 4.0 国際 ライセンスで提供されています。
http://www.thingiverse.com/thing:21308にある作品に基づいています。

LightWave でフローリングや床模様を描く

LightWave で床のタイルやフローリングパターンを、標準機能のプロシージャルテクスチャ(計算で自動生成されるテクスチャ)からモノクロ画として描画する方法。壁面などのパターンにも応用できる。ソフトウェアの使用バージョンは LightWave 2015.3 日本語版である。

事前準備

モノクロ画像用なので、ここではあらかじめサーフェイス色を白く、さらに自己発光度を100%にしておく。今回は検証用なので背景は黒のままにしてある。適用したいサーフェイスを選択し、[色・質感編集]>[基本]タブの[ノード編集]脇のチェックボックスを有効化してからボタンをクリックして[Node Editor]を出す。なお、今回は10m×10mの地面オブジェクトを使用している。

方形タイル

左のノード欄から[2D Textures]>[Grid2D]ノードを出し、[Color]から[Surface]ノードの[Color]へ繋ぐ。数値を適宜いじれば、いわゆる一般的な方形タイルパターンを作成できる。


フローリング

左のノード欄から[2D Textures]>[Planks2D]ノードを出し、[Color]から[Surface]ノードの[Color]へ繋ぐ。数値を適宜いじれば、いわゆる一般的なフローリングパターンを作成できる。

モザイクパーケット

左のノード欄から[2D Textures]>[Parquet2D]ノードを出し、[Color]から[Surface]ノードの[Color]へ繋ぐ。数値を適宜いじれば、これでモザイクパーケット(寄木張りフローリング)を作成できる。少し古い学校の教室によく使われている床パターンである。

頑張ればヘリンボーン模様などもできそうだが、そこまでは検証していない。

[Color Layer]ノードでプロシージャルテクスチャを使う

[Layers]>[Color Layer]で、[レイヤー種]を[プロシージャル]にして調整すれば各種プロシージャルテクスチャが使えるので、こちらを使うのもよい。しかし、[2D Textures]ノードにあるものがこちらになかったり、またその逆もあるので注意。

以下はレンガやハニカムを設定した例。


遠くをかすませる

距離に応じてパターンをかすませ、遠くへいくほど白飛びして消えていくようにしたい。

ノードを使う(その1)

左のノード欄から[Math]>[Vector]>[Distance]ノードを出す。最初から出ている[Input]ノード(もしくは[Spot]>[Spot Info]ノード)の[Object Spot]出力を[Distance]ノードの[To]に繋ぐ。[Item Info]>[Item Info]ノードを出したらクリックしてカメラに設定し、[World Position]出力を[Distance]ノードの[From]に繋ぐ。これでカメラからオブジェクト(の各点)までの距離が得られる。

そして、段々と消えていくようにするというのは要するに勾配(グラディエント)をつけることなので、[Gradient]>[Gradient]ノードを出したら、[Distance]ノードの[Result]出力を[Gradient]ノードの[Input]へと繋ぎ、[Color]出力を上の項で出してある[2D Textures]ノードの[Bg Color]へと繋ぐ。

[Gradient]ノードをクリックしてグレーのグラディエントを設定する。キーを1つ作成し、グラディエントバーの上が黒、下が白となるようにする。消したい距離に合わせて下のキーの[Position]値を入力する。[Position]値に合わせて[End]欄の値も調整すると分かりやすい。


ノードを使う(その2)

[Color Layer]ノードを使うやり方もある。[Layers]>[Color Layer]で出し、クリックして設定。[レイヤー種]を[グラディエント]にして、[ブレンドモード]は[アルファ]、[入力パラメータ]は[Distance to Camera(カメラからの距離)]に設定したら、キーを1つ作成し、グラディエントバーの上が黒、下が白となるようにする。消したい距離に合わせて下のキーの[パラメータ]値を入力する。それに合わせて[終了]欄の値も調整すると分かりやすい。

上の項で出してある[2D Textures]ノードの[Color]出力を[Color Layer]ノードの[Color]入力へと繋ぐ。このとき[Color Layer]ノードの[Color]出力をそのまま[Surface]ノードの[Color]へ繋ぐと、以下のようになってしまう。

この奥に向かって黒くなる闇を反転して白くすればよいので、[Math]>[Scalar]>[Invert]ノードを出す。これは入力値を反転させて出力するノードなので、[Surface]ノードの手前に繋ぐ。

今度はテクスチャが反転してしまうので、[2D Textures]の該当ノードをクリックして開き、[Invert]欄にチェックを入れて反転させればよい。

また、すでに[Color Layer]ノードにてプロシージャルテクスチャもしくは画像のテクスチャを使っている場合は、その上に[グラディエント]のレイヤーを追加して上記を参考に設定し、[Invert]ノードを噛ませればよい。白黒の階調が反転していたら、各レイヤーの[レイヤー反転]欄をチェックして調整する。


手前をくっきり

これまでのレンダリング画像を見れば分かるが、カメラから近い箇所でもうっすらと消えてしまっている。手前はもっとくっきりさせて奥だけを抜きたければ、グラディエントバーにキーをもうひとつ作成する。その[Position]値([Color Layer]ノードなら[パラメータ]値)を半分程度にしたら、その位置における色を黒(最初のキーと同じ)にすればよい。


LightWave で NPR:光に影響された線の強弱

LightWave において、光源の方向や位置をもとにして線に強弱をつける方法について。ソフトウェアの使用バージョンは LightWave 2015.3 日本語版である。

事前準備

あらかじめ、Layout のビュー表示をVPRにしておく。そしてオブジェクトとカメラの位置を決める。さらに、背景を標準の黒から白にしておく。Layout 画面左上の[ウィンドウ]>[背景オプション](ショートカット【Ctrl+F5】)>[特殊効果]ウィンドウ>[背景]タブ>[背景色]で、カラーボックスをクリックして白 (RGB: 255, 255, 255) に設定。済んだら[特殊効果]ウィンドウは閉じてよい。

さらに、出す輪郭線の種類を決めておく。左下で[オブジェクト]を選択して右の[プロパティ]から[オブジェクトのアイテムプロパティ]ウィンドウを出し(ショートカット【p】)、[輪郭(Edges)]タブの欲しい輪郭線項目にチェックを入れて有効化する。線の太さは任意だが、太めの方が分かりやすい。ウィンドウの上部にある[現在のオブジェクト]から続けて選択して、すべてのオブジェクトごとに欲しい輪郭線項目を設定する。しかし、このままだと均一な線になってしまうので、この線に手を加えていく。

[輪郭(Edges)]タブの[ノード編集]ボタン右隣のチェックボックスをオンにし、[ノード編集]ボタンを押して[Node Editor]を開く。

方法その1

[Node Editor]の左に並んだ中から[Layers]>[Scalar Layer]を選択して、[Scalar Layer]ノードを出す。

[Scalar Layer]ノードの右にある[Alpha]から矢印をドラッグし、[Edge]ノードに並んでいる[Silhouette Edges Taper]や[Sharp Creases Taper]など、手を加えたい線の項の[~Taper]に矢印をそれぞれ接続していく。

[Scalar Layer]ノードをクリックして編集パネルを開く。[レイヤー種(Layer Type)]を[グラディエント(Gradient)]にする。[入力パラメータ(Input Parameter)]を[Light Incidence](ライトの入射)にして、[ライト(Light)]で適用するライトを選択。

グラディエントバー(左にある縦長の帯)をクリックしてグラディエントのキーを1つ作成する。キーの[値(Value)]は「0.01」、[パラメータ(Parameter)]は「90.0」にして、白から黒へのグラデーションを設定する。これで明るい部分の線が細くなる。

F9】でレンダリング

方法その2

[Node Editor]の左に並んだ中から[Shaders]>[Diffuse]>[Lambert]を選択し、作業領域に[Lambert]ノードを追加する。Lambert というのはランバート反射のことで、面から光源を指すベクトルと法線ベクトルとの内積ドット積)を使って計算される。要するに、光の当たり具合を0-1の階調で表現できる。

なお、[Lambert]ノードは LightWave 2018 で消えてしまったらしいが、配布プラグイン「Single Light Lambert」で代替できる。

この[Lambert]ノードの[Color]出力を[Edge]ノードの[~Taper]に繋いでみると分かるが、光が当たっている方が太く、当たっていない方が細い線になる。これは光の当たり度合いがそのまま線の太さに入力されるためだ。これを逆にして、光が当たっている方を細く、当たっていない方を太くしたい。そこで使うのが、入力値を反転させる[Invert]ノードである。[Math]>[Scalar]>[Invert]で[Invert]ノードを出す。

[Lambert]ノードの[Color]出力を[Invert]ノードの[In]に繋ぎ、[Invert]ノードの[Out]から、[Edge]ノードの任意の[~Taper]へと繋いでいく。これで光が当たっている方を細くすることができる。なお、[~Opacity]へ繋げば光が当たっている方の輪郭線の不透明度も下がるので、光の影響を受けた濃淡を線につけられる。

F9】でレンダリング

直方体の輪郭線で妙に太くなっている箇所があるが、おそらくこれは影のせいだろうと思い、[オブジェクトのアイテムプロパティ]>[レンダリング]タブ>[影を落とす]と[影を受ける]のチェックを外して再レンダリングすると消えた。

ちなみに、[Shaders]>[Diffuse]>[OrenNayer]で出る[OrenNayer]ノードがオーレン・ネイヤー反射というランバート反射の改良版らしく、こちらを使っても同じようなことができる。

方法その3

[Node Editor]の左に並んだ中から[Item Info]>[Light Info]ノードを出す。ライトの設定を出力するノード。

[Light Info]ノードをクリックして編集パネルを開き、[Light]で適用するライトを選択して閉じる。

[Gradient]>[Tools]>[Incidence]ノードを出す。このノードにベクトルを入力すると、そのベクトルと現在のヒットポイント(光線が当たった位置)間の角度が出力される。

[Light Info]ノードの[Direction]から、[Incidence]ノードの[Vector]へと繋ぐ。この[Direction(方向)]というのは、ライトの方向を表すベクトルを出力する。

[Gradient]>[Gradient]ノードを出す。

クリックして編集パネルを開く。グラディエントバー(左にある縦長の帯)をクリックして下方にキーを1つ作成する。色は黒のままで、[Position]はとりあえず「1.0」に。そして上のキーを選択したら[Color]のカラーボックスから色を白にして、グラディエントバーの上を白、下を黒にする。

[Incidence]ノードの[Result]から、[Gradient]ノードの[Input]へ繋ぎ、[Gradient]ノードの[Color]を[Edge]ノードにある任意の[~Taper]へと繋ぐ。

F9】でレンダリング

この方法の場合、[Gradient]ノードを開いてキー位置をずらしたり、任意の位置に新たなキーを追加することで、線の抜き具合を調整できる。

例えば上のような位置にキーを追加した場合、このような画になる。

線に粗さを入れる

また、線に粗さを入れたくば、[Turbulent Noise]ノード([3D Textures]>[Turbulent Noise])などのノイズ系テクスチャのノードを利用すればよい。

このとき使うのが[Multiply]ノード([Math]>[Scalar]>[Multiply])。これを使えば、ひとつのスカラー値を他の値で乗算できる。要するにノードの出力結果を掛け合わせられる。

方法その1なら[Scalar Layer]ノードの[Alpha]から、方法その2なら[Invert]ノードの[Out]から、方法その3なら[Gradient]ノードの[Color]から[Multiply]ノードの入力へ繋ぎ、ノイズ系テクスチャのノードをもうひとつの入力に繋ぐ。そして[Multiply]ノードの[Result]を[Edge]ノードにある任意の[~Taper]へと繋げばよい。


以上、調べた限りの方法を紹介したが、これ以外にもあるかもしれない。どれも球体や曲面の場合はよさそうだが、それ以外では線を太くすると角部分にはみ出してしまうのが難点。以下の記事のように、ノイズ系テクスチャのノードを利用した手描き風の粗い表現でなら使えるかもしれない。