LightWaveのサブパッチの簡単な応用

最終更新:2020/04/22

前の記事でエッジとポイントを増やすことでサブパッチの影響範囲を制限できることを書いた。立方体ではあまりにも簡単すぎてサブパッチを何に応用できるのか想像しにくいと思われるので、ここでは一歩進めて、次の画像のようなモデルを用意した。高さの異なる立方体と直方体をつなげたような形で、低いほうの直方体にはさらに立方体状の突起が出ている。このような立体モデルで完成であるとすれば、エッジが必要以上に多いのに気付くと思う。

SubPatch000

この立体モデルに対してTabキーを押し、サブパッチを適用すると次の画像のような形になる。高いほうの立方体部分は角を残していてまだ原型をとどめているけど、右に張り出した直方体のほうは外側の角がなくなり、半円形になっている。また、立方体状だった突起は上面を残して全体が丸くなり、円柱状になっている。プラスチックを形成して作った子供向けのブロックの接続部のようにも見える。元は3DCGの初心者が手習いで作ったような四角だけで構成されたモデルだったにも関わらず。

SubPatch001

このような結果になるのは、サブパッチはあるポイントがエッジでつながっているもっとも近いポイントとの距離で曲率を決めるため、直方体の外側の部分と突起部分についてはその幅いっぱいの距離でサブパッチがかかっているためだ。最初の画像をよく観察して欲しい。直方体の外側を縦に走るエッジにはそれに平行するようなエッジは追加されていない。突起部分の縦のエッジも同様だ。

このようなモデリングをするには少しコツがいる。まず、絶対に守らなければならない鉄則は、3ポイント又は4ポイントのポリゴン以外を使ってはいけないということだ。2ポイントのポリゴン、つまり線ポリゴンが混ざっていると赤いメッセージで警告が出てサブパッチは正常に処理されない。5角形以上のポリゴンがあってもサブパッチはかかるけど、どのポイントがどこのポイントにどのように作用しているのかわかりにくくなるため、極力4ポイントのポリゴンだけでモデリングしていくのが好ましい。3ポイントのポリゴンは4ポイントのポリゴンだけではどうしても苦しくなってしまった時の最後の手段に残しておく。5ポイント以上のポリゴンは意図してサブパッチの自動曲面化に「おまかせ」したい場合のみにする。

そうかと言って、3ポイントや4ポイントのポリゴンにするために分割ツール(Ctrl+L)を頻繁に使ってポリゴンの形成に手間取っていると効率が悪いし、サブパッチの有用性を台無しにしてしまう。ポイント追加ツールは一度にひとつのポリゴンしか処理できないため隣接しているエッジを分離してしまい、サブパッチに穴が開いてしまう現象を引き起こす元になるので基本的には使えない。

そこで、「マルチ加工」メニューグループにある拡張プラス(Extender)ツール(Eキー)を使う。拡張プラスは選択したポリゴンの位置や大きさや向きをまったく変えず、「ゼロ距離」でポリゴンとエッジを拡張する機能。見た目には何も変わっていないように見えるけど、選択を解除しないように注意してポリゴンを移動(Tキー)や拡大縮小(Shift+H)などさせると元のポリゴンの周囲に新しいエッジとポリゴンが追加されているのがわかる。見た目が変わっていないからといって何度もEキーを押さないこと。2回以上押すと長さや幅がゼロのエッジやポリゴンがたくさんできてしまい、収拾がつかなくなる。まったく同じ場所にあるポリゴンやエッジを分離して選択するのは困難だからだ。

選択されているポリゴンを動かすと元の位置にあったポリゴンはなくなっているので、ポリゴンで囲まれた空間は空洞のままに維持される。もし、元のポリゴンがそのまま残ってしまっているとやはりサブパッチはうまくかからない。そういった意味で元のポリゴンを残す押し出しツール(Shift+E)は使えない。サブパッチ・モデリングの鉄則の2つ目は、表面に見えていないポリゴンを作ってはいけないということだ。

また、複数のポリゴンを選択して拡張プラスを使用すると、選択したポリゴンの外周のエッジの数だけポリゴンが追加され、隣接した内側のエッジにはポリゴンは追加されない。機械工学的なモデリングの場合は拡張プラスを使う意義はほとんどないけど、こういった特性はサブパッチ・モデリングの場合には非常に都合がいい。大きさや位置も変わらないので、その後の操作でサブパッチのかかり具合を好きなように調整できる。ShiftキーもCtrlキーもAltキーも押さずにただ単にEキーを押せば実行できるように初期設定でショートカットキーが割り当てられているのはサブパッチ・モデリングで極めて頻繁に使うから。余談になるけど、なぜ日本語訳を「拡張プラス」にしたのか甚だ疑問。素直に「エクステンダー」にしておいたほうがわかりやすかったのに。

次の画像に「逆もまたしかり」という例をあげておく。突起を作れるなら、その突起を通す穴もサブパッチで作ることができる。試しに、可動範囲を確保するための遊びをまったく考慮せずにぴったりに作ったけど、思いの外自然にはまった。あえてサブパッチ前のワイヤーフレームは示さないでおく。どのようにエッジを切ったのか考えて、作れるかどうかぜひ挑戦してみてほしい。ヒントは3つ目のサブパッチ・モデリングの鉄則、すべてのエッジは結合(統合)されたポイントを経由して連続していなければならないということだ。この問題にはひとつトラップがあり、気が付かないとサブパッチがバラバラになって崩れてしまうけど、サブパッチ・モデリングでは普通はやらないことなので、できなくても悲観することはない。これをすんなり作ることができたならば、サブパッチの鉄則や特性を理解できていて、LightWaveの機能にも十分精通している。今すぐにでもサブパッチ・モデリングを始められる。もうすでに初心者の域は脱していると言えるだろう。人間でも、動物でも、おとぎ話の絵本に登場するようなファンシーな家でも城でもLightWaveで作るのも夢ではなくなる。

SubPatch002

まとめると、サブパッチモデリングの鉄則は3つ。

  • 3ポイント又は4ポイント以外のポイント数を持つポリゴンを使ってはいけない(ただし、仕様上明確にエラーが出るのは2ポイントの線ポリゴンのみ)
  • モデルの中身は必ず空洞を維持し、表面に見えていないポリゴンを作ってはいけない
  • すべてのエッジは結合されたポイントを経由して連続していなければならない

LightWaveと3DCGソフトウェアへの誤解

上の例のような機械部品のようなモデルをサブパッチ・モデリングで作る場合、サブパッチの特性をあらかじめ理解し、ある程度の計画性をもってモデリングを始めなければならない。これを取り上げ、「LightWaveは直感的あるいは感覚的なモデリングができない」と批判する人もいるけど、本来はこのような部品のモデリングはサブパッチの本領ではない。あくまでも「ポイント間の距離によって丸まり方が変わる」ということを示したやや極端な例に過ぎない。「すべての物は立方体からサブパッチで作ることができる」と言い切れるほど、望むならいくらでも直感的モデリングができる。曲率を緩くし表面をなだらかにしたければポイント間の距離を離し、曲率をきつくし表面に急な角度をつけたければポイント間の距離を縮めれば良いだけなのだ。

ノコギリやノミといった工具でザクザクとモデリングしていきたいのに、与えられるツールはカッターナイフと紙ヤスリだけといったような感覚に陥り、粘土をこねたり石材や木材を削るような地味なモデリングを強いられるという指摘もあるけど、これもまったくの失当と言える。極端なことを言えば、Adobe PhotoshopとIllustratorとでは絵を描く方法はまったく異なるけど、これらのソフトウェアの特性の相違を無視して「IllustratorではPhotoshopのようにザザーッとブラシで絵が描けない!」と文句を言っているようなものだ。機械製図や建築パースといった3DCADのようなモデリングを望む場合、使うべきツールがまったく異なるし、LightWaveにもノコギリやノミに相当するツールはある。

精巧なモデルを作りたい場合はまったく別の方策やドクトリンがあり、3DCGの制限を考慮に入れながら目的に適うように独自の方法を編み出していくしかない。これはLightWaveに限った話ではないので、LightWave限定で機械や建築物の立体モデルの作り方を詳細に記した書籍や記事がないのは当然のことと言える。また、LWCADという追加ソフトウェアもあり、別枠で3DCADもできるようになっていることから考えてもLightWaveはそもそもCADソフトウェアではないのだ。もっとも、CADをやりたくてミドルレンジのLightWaveを選択したのなら理解に苦しむ。それなら、ほとんどの要求には応じてくれる3ds MaxやMayaをはじめとするオートデスク社の製品を選択すれば業界標準の3DCGソフトウェアを数多く取り揃えている。予算の都合でミドルレンジを選択するより他になかったのなら、自分なりのメソッドを見出すまではそれなりの苦労をすることになるのを覚悟するべきだ。まさしく「時は金なり」だ。

「LightWaveのサブパッチ・モデリングは時間がかかる」という指摘もあるけど、短時間で誰でも何でも簡単に思い通りにプロ級の立体モデルを作れるなんて、そんな魔法のような夢のソフトウェアが世の中に存在するはずがない。どんなに高価なソフトウェアを使用しても3DCGの制作には時間がかかる。美麗なイラストや絵画をワンタッチで描けないようなペインティング・ソフトウェアやドローイング・ソフトウェアには価値がないと言ったらおかしいことにはすぐに気付くだろう。それと同じこと。

もし、PhotoshopやIllustratorならとりあえずツールを選んでペンタブレットで線を引いてみれば子供でも何か描けるではないか、と反論する人がいるとしたら、その人は根本的に3DCGには向いていない。

誤解が多いようだけど、3DCGは大人でも理解しがたいような数学に基づく複雑な計算から導かれる出力であって、厳密には絵でも図面でもないし、その原型になる立体モデルを作る方法も数学的なアプローチになることも頻繁にあるため直感的でないのは当然ということになる。昔は3DCGといえば、電卓などで綿密に計算した三次元座標を特殊なスクリプトに直接書き込み、一発レンダリングで出力させるものだった。有名なレンダリング・エンジン「POV-Ray」は今でもテキスト・ベースのスクリプトで頂点の座標やマテリアルの設定を書き込むことができる。加工後のプレビューを見ながらGUIを使って操作できるだけでも十分直感的だと言える。

そもそも3DCGソフトウェアは、人間にとってはうんざりするような回数繰り返される浮動小数点演算を代わりに正確にやってくれるものであって、時間を惜しむユーザーに楽をさせるための道具ではない。ペンタブレットでなぞって立体モデルを作れるようでなければ直感的でないというのはあまりにも極論。映画でもアニメでもネット動画でも3DCGによるアニメーションが隆盛を極めているけど、それらの作品は気の遠くなるような地道な作業の結果であり、決して楽して作ったのではないと断言できる。その道のプロフェッショナルはそれを事もなげにやってみせるから、いかにも簡単そうに見えるだけに過ぎない。

もし、どうしてもペンタブレットで立体モデルを作りたければ、選択するソフトウェアを間違っている。そういう人はZBrushを選択するべきだ。価格も795ドルとLightWaveよりも安く、個人でも十分導入できる範囲。ZBrushはLightWaveのような古典的な3DCGソフトウェアとは異なり、「スカルプチャ・モデリング」という方法を採れるようになっている。「スカルプチャ」とは「彫刻」のことで、ペンタブレットでモデルの表面をなぞればなぞったようにモデルを盛り上げたり、溝を掘ったり、潰したり、削ったりできる極めて直感的なモデリング手法だ。しかし、実際に粘土をこねたり石材や木材を削ったりするのと決定的に異なるのは、モデルに直接触れることはできないためどのくらいの力を加えればどの程度モデルが変形するのかが最初は掴みづらいことだ。スカルプチャ・モデリングだけで自由自在にモデリングできるようになるにはそれなりの熟練を必要とし、「誰でも簡単にプロ級の腕前」とはいかないのは他のソフトウェアと同じ。もっとも、上で書いた反論のような「ペンタブレットでなぞれば子供でも何か作れる」というレベルでは十分達成できるので、3DCGソフトウェアはすべからく敷居が高いという時代ではなくなってきた。

なお、スカルプチャ・モデリングは感覚とセンスで勝負のモデリング手法なので、機械製図や建築パースなどの精密さを要求されるモデルには向いていない。ZBrushの直感的モデリングの根源であるデジタル・スカルプト機能の強化は映画『ロード・オブ・ザ・リング』で使われたクリーチャーのCGに端を発するけど、現在では日本でも二次元キャラクター物のフィギュアの原型制作に盛んに利用されている。プラ棒を芯にしてポリパテを盛ったり削ったりする従来の原型制作の手法と相通じるものがあるためのようで、デジタル原型ではなかば業界標準で使用されている。

ZBrushと同じPixologic社が無料配布しているSculptrisはスカルプチャ・モデリングを手軽に試せるソフトウェアだけど、LightWaveのオイラー座標系にすっかり慣れてしまった私には手加減がまったくわからず「かゆいところに手が届かない感」が強く、非常に面白いモデリング手法ではあるけど口で言うほど思い通りにモデリングするのは簡単ではない。オンライン・ドキュメントには緻密な作例がたくさん載っているけど、とてもではないけど真似できる気がしないほどだ。

誤解のないように付け加えておくと、ZBrushはスカルプチャ・モデリングに特化したソフトウェアではないので機械のモデリングもできるし、そういった作例もたくさんある。大抵は実在しそうにない機械ではあるけれど。

また、スカルプチャ・モデリングは自由度が高い反面、サブディビジョンを繰り返して精度を増していくため等比級数的にポリゴンの数が増えていくため、最終的には数百万クラスになる超ハイポリゴンのモデルを直接編集することになる。当然ながら、マシンのCPUもメモリもかなり高いスペックが要求される。低スペックのマシンではおそらくモデルを眺めるために回すのもひと苦労だろうし、メモリが足りないとHDDがページングで回ってしまって作業にならないと推測される。無料のSculptrisでさえジオメトリの演算に利用できるものはなんでも使うため、普段は静かなGPUのファンが高速回転し始めるくらいGPUの演算処理能力をフルに使う。よって、GPUも高スペックであればあるほど好ましいと言える。サブパッチを使い、できるだけ少ないポリゴンで曲線を管理しようとするLightWaveは比較的低スペックのマシンでも扱えるけど、直感的モデリングの追求のためにハードウェアに多額の費用をかけなければならないという点でZBrushも決して初心者向きの敷居の低いソフトウェアというわけではないという点には留意されたい。

サブパッチ・モデリング関連書籍の紹介

少し持論の披露に熱くなってしまったけど、上で挙げた例のようなサブパッチの影響範囲の制限方法を用いて、人間はおろか、尖ったところがなくてどこか愛らしい、「怪物」というよりは「憎めないお化け」のようなクリーチャー、本来は無機物のはずの機械まで空想的でファンシーに作ってしまう人もいる。下に紹介している『LightWave★Beginners』の著者・ウサギ王氏もその1人だ。

LightWave★Beginners[改訂第3版]
posted with AmaQuick at 2020.04.21
参考価格: ¥3,580 (2020-04-21)
ビー・エヌ・エヌ新社 (2012-03-23)

LightWaveの指南書は何冊か持っているけど、ほとんどの書籍は「とりあえずやってみればわかるよ」的な流れでサブパッチによるモデリングをなし崩しに始めてしまい、「サブパッチとはそもそもなんぞや」という点にはまったく触れていない。そのため、本に書いてある通りにやっているつもりなのに、いつの間にか「サブパッチによるモデリングで絶対にやってはいけないこと」をやってしまってうまくいかなくなり、LightWaveは敷居の高いソフトウェアだと思ってそこで挫折してしまうことがある。何を隠そう、私もその1人だった。「サブパッチでできる曲線の曲率はポイント間の距離で決まる」といった基本的なことを教えてくれたのはこの書籍だった。

初心者向けと銘打ってはいるけど、LightWaveのモデリングはサブパッチに始まりサブパッチに終わると言わんばかりに冒頭からひたすらサブパッチの解説が続き、むしろサブパッチ・モデリングの専門書と言ってもいいくらい。逆に、最近流行りのローポリゴン・モデルのモデリング手法などにはまったく触れていない。他の無償やロープライスに分類される3DCGソフトウェアでやるような、一見簡単そうで実はとても難しいローポリ・モデリングによるアプローチなんてサブパッチがあれば必要ないからだ。LightWaveのユーザーが美少女物やメカ物よりも人外の化け物のようなモデルを好んで作りたがるのにはそんな理由もある。人物モデルは備えているべき特徴が決まり切っていて、上手下手はともかく時間さえかければ誰でも作れてしまうので、独創性を問いたければ人間以外の物を作ったほうがいいのだ。また、そのような気を起こさせるだけの可能性をサブパッチは秘めている。

定価は4,000円ほどと決して安くはない書籍だけど、丸善など専門書を多く取り扱っている書店では置いていることがあるので、ネット通販などで中身も見ずにいきなり買うのには勇気がいる人は店頭でめくってみるといい。おそらく、最初の数ページで目から鱗が落ちるはずだ。私も書架の前で他の客の邪魔になることもお構いなしにしゃがみこんで読みふけってしまったことは今ではいい思い出。

関連記事

LightWaveによるエッジの丸め方と面取り

最終更新:2020/04/22

ある立方体の角や辺を丸めたいとする。転がりやすいように角をとってあるサイコロのようなものをイメージして欲しい。

ボックス

色々な方法があると思うけど、まずは「作成」メニューグループにあるボックスツール(Shift+X)で最初から丸めてしまう方法。ボックスツールを選択したらNキーを押して数値入力ウィンドウを有効にしてそこへカーソルを移す。「半径」を「100mm」に設定し、「局部の分割率」を「8」に設定する。ここでは簡単のために立方体の1辺の長さを1mに統一してある。

Round000

数値入力ウィンドウの何もないところを左クリックするか、Enterキーを押して数値を確定し、さらにEnterキーを押すと次の画像のような角を丸めた立方体ができる。

Round001

ラウンダー

次に、ラウンダーを使う方法。ボックスツールで角を丸めていない普通の立方体を作り、エッジ選択モードにする。「選択」メニューグループから選択モードを選ぶ方法もあるけど、マウスを動かすのはモデリングのためだけにして、極力メニューを選ぶのには使いたくないところ。

ショートカットキーの初期設定を変えていなければ、スペースキーを何回か押すと「ポイント」→「エッジ」→「ポリゴン」→「ポイント」と循環するトグル選択ができるので、選択モードを変えたくなったらとにかくスペースキーを押す習慣をつけるといい。

次の画像のように12本あるすべてのエッジを選択する。

Round002

「マルチ加工」メニューグループにあるラウンダー(Rounder)を選択し、Nキーを押して数値入力ウィンドウを開く。

できれば、数値入力ウィンドウは常に表示しておくようにしておくと数値入力を要求されているのかどうかすぐにわかるので便利。マルチディスプレイ環境にしている人はサブディスプレイに表示させておくと邪魔にならなくていい。

次の画像のように「Rounding Polygons」を「8」に、「Inset distance」を「100mm」に設定する。他の設定は変更しなくていい。

Round003

このままでは何も起こらないので、選択したエッジか、そのエッジを構成するポイントの付近を左クリックすると、角が丸まる。そのままドラッグすると丸まりの半径を変更できるけど、自分の意図しない方向へ動いてしまった場合は数値入力ウィンドウの値を訂正してEnterキーを押す。次の画像のような角のとれた立方体ができる。ボックスツールから作った場合とでは、8つある隅の処理の仕方が異なるのがわかる。

Round004

ボックスツールでは、必ず12辺すべてを丸めてしまうけど、ラウンダーは選択したエッジの場所によって丸める箇所を指定できる。例えば、次の画像のように上面のエッジだけを選択したとする。

Round005

上と同じ設定でラウンダーを適用すると、次の画像のように上の辺だけ丸まる。

Round006

立方体は生成ツールに角を丸めることができる設定があるけど、他のツールにはないことが多い。例えば、円柱のようなモデルはディスクツールで作るけど、角を丸める設定はない。そこで、次の画像のような円柱の上面のエッジをぐるりと選択し、ラウンダーを使う。

Round007

複数のエッジを選択する際に投げ縄選択で選択してもいいけど、連続する2つ以上のエッジを大雑把に選択しておいて「選択」メニューグループにある「ループ選択(Select Loop)」をすると一周自動的に選択してくれるので覚えておくと便利。

また、上面のポリゴンを選択し、同じく「選択」メニューの「選択をエッジに(Sel Edges)」ツールを使うとそのポリゴンに属しているエッジがすべて選択されるので、これも覚えておくと便利。他にも「選択をポイントに(Sel Points)」「選択をポリゴンに(Sel Polys)」があり、選択モードを逐一切り替えて選択しなおさなくても同じ対象をそれぞれの選択モードに置き換える機能がある。いずれもループ選択がうまくいかない場合やポイントやエッジの距離が密になっていて選択しにくい場合などに重宝する。

上面だけに同じ設定でラウンダーを適用すると次の画像のようになる。

Round008

3DCGの世界では厳密な意味での「円」という概念はなく、多くのエッジ(すなわち直線)で構成される正X角形を擬似的に円として扱う。コンピュータが高性能化した現在でも、リアルタイム性を問われるゲームなどで描画処理を速くするために、細かくて比較的どうでもいいところは断面が四角形の棒状のモデルを45度斜めに傾けて「円筒」として扱ってしまうこともある。

話を戻す。滑らかな円にしようとすればするほど円のエッジの数は多くなり、ポリゴン数も増え、その後の加工にも手間がかかる傾向にあるが、ラウンダーはエッジの数が多くても1回で加工できるため、このような場合に特に威力を発揮する。

ラウンダーによる面取り

ラウンダーによる分割数を1にすることで、面取りを行うことができる。立方体の12辺を選択し、次の画像のように「Rounding Polygons」を「1」に設定する。

Round009

次の画像が適用した結果。8つある角も三角形に形成され、すべての辺が面取りされているのがわかる。ラウンダーの本来の意義からは外れているように思えるかもしれないけど、サーフェースのスムージングの設定次第によっては丸まって見えるため、これでもラウンダーの効果はあると言える。

Round010

特定のエッジにだけ選択式に面取りを行うことももちろんできる。次の画像は上面のポリゴンのエッジだけを選択した場合。

Round011

次の画像のような円柱も同様。

Round012

上の2つの例はいずれも水平なポリゴンに対してラウンダーを適用しているけど、この程度であれば、ベベル(Bevel)ツールを使ってもできる。「ベベル」という言葉には元々面取りの意味もある。ただ、ベベルによる面取りは元の形から体積が増えてしまう性質があるものなので、体積を増やしたくない場合は後で元の位置に戻す必要がある。ベベルを適用したポリゴンが様々な加工をしてきた結果で、中途半端な座標にあると正確に戻すのは困難なことが多い。むしろ、キリのいい座標にあること自体が珍しい。また、ポリゴンの法線方向に沿って押し出してくれるものの、シフト量とインセット量は厳密に計算しない限り目分量に頼らざるを得ず、精密なモデリングにはあまり向いていないことがある。更に、複数のポリゴンを選択してベベルを使用するとそれぞれのポリゴンごとに独立してベベルをかけてしまうので使い勝手が良くないこともある。

ラウンダーはエッジがどんなに斜めになっていようと、どんなに中途半端な座標にあろうと、元の体積を極力変えずに正確に丸めてくれるので追加的に面取りをしたくなった場合には重宝する。ただし、対象とするエッジのうちの1つのポイントが多数のポリゴンに属していたりすると意図しないところにもラウンダーがかかってしまうことがあり、必ずしも万能ではない。

ちなみに、以前の記事での取り上げた六角柱の面取りもラウンダーを使うと、いとも簡単に行うことができる。

Round013

以前の記事では側面の面取りだけだったけど、次の画像のようにすべてのエッジをまとめて面取りできる。

Round014

ここまででラウンダーは良いところばかりのように思えるかもしれないけど、一度ラウンダーを適用してしまうとアンドゥ(Ctrl+Z)以外の方法で元に戻すのは困難になるという点は覚えておいたほうがいい。適用する前にオブジェクトを保存しておくか、別のレイヤーにコピーしていつでもそこに戻れるようにしておくことをおすすめする。

サブパッチによる角の丸め方

ボックスツールによって角を丸めた場合でも、ラウンダーツールを使って丸めた場合でも、後でその丸まり具合の半径を変えたくなったなどの場合は非常に厄介なことになる。拡大縮小(Shift+H)を使うなり、ストレッチ(H)を使うなり、方法はないことはないけど、12辺すべてに修正をかけていくのはそれなりに手間がかかる。LightWaveに限ったことではないけど、すべてのポイントの座標は浮動小数点数で扱われているので、拡大縮小を繰り返すと誤差が蓄積していき、次第に丸まりに歪みが生じてくるようになる。

立方体のような単純なモデルの場合は最初から作り直してしまえばいいこともあるだろうけど、最悪の場合、ポリゴン同士の境目の角度に破綻が生じて奇妙な出っ張りや溝が出るようになったりもする。サーフェースのスムージングのしきい値を上げて解決すればいいけど、しきい値を上げたことによって、今度はきちっとエッジがきいていて欲しいところのポリゴンの境目が見えなくなってしまうといった事態も起こりうる。すると今度は、スムージングのしきい値の異なる別のサーフェースを用意してそこへ分割して…といった具合に泥沼にはまっていく。ラウンダーは便利だけど、適用した後のことを考えるとモデリングの初期段階で使うのはあまりおすすめできない。

そこで、サブパッチを使う方法を考える。次の画像のように、立方体の6つの面すべてにナイフツール(Shift+K)で端から200mmのところに格子状に切り込みを入れ、エッジとポリゴンを増やしてある。1辺の長さが1mなのは同様。一度に4つの面を輪切りにできるからナイフツールは6回使えばいいので、そんなに大した作業ではないはず。

Round015

どこも選択していない状態で、Tabキーを押す。すると、すべてのポリゴンを選択しているのと同じと解釈され、立方体全体にサブパッチがかかり、次の画像のような形になる。

Round016

次の画像のようにワイヤーフレームを非表示にするとサブパッチの効果がわかりやすい。ボックスツールやラウンダーツールを使った場合ほど幾何学的に正確な感じではないけれど、全体的に丸みをおびてサイコロというよりはバターかチーズのような生っぽい感じになる。角の丸みを変えたくなったら、ナイフツールで切って作ったポイント群をループ選択で選択してまとめて移動させていくだけでいい。立方体の端に近づくほど角は丸みを失っていき、離れるほど丸みが増していく。ナイフツールでエッジを増やすことが最初は面倒だと思うかもしれれないけど、「今は仮決めにしておいて後で不都合が出たらなんとでもしよう」という『行き当たりばったりモデリング』ができるのは3DCGの世界では実は驚異的なこと。

Round017

8ポイントだけで構成された普通の立方体にただサブパッチをかけるだけだと球と言うにはあまりに不格好な球体になってしまうんだけど、それはポリゴンを構成しているポイントの間隔が広く、サブパッチの影響範囲が広いから。ナイフツールでエッジとポイントを増やしたことによってサブパッチの影響が及ぶ範囲を制限し、角を残しつつ丸くしている。

逆にサブパッチの場合、その特性上、直角や鋭角というのは難しく、「正確にきっちり100mm丸めたい」という要求にも応じられない。サブパッチの挙動はベジエ曲線によく似ているんだけど、サブパッチを適用したモデルの外形がモデルを構成するポイントのどれかを必ず通過するわけではなく、そのポイントが線を曲げる強度や角度を決めることもできない。だから、外形が実際にどのくらいの半径で丸まっているかを厳密に計測することはできない。もっと言えば、ポイント間の距離がまったく同じでも、それらを繋ぐ曲線が真円の一部になるような正確な円弧を描くという保証もまったくない。あくまでも、ポイント間の距離でサブパッチの強度が変わるという点がベジエ曲線との決定的な違い。ベジエ曲線を使いこなすのも熟練が必要なように(私はいまだにうまく使えない)、サブパッチもその感覚を掴むのに手間取るため、LightWave初心者がつまづきやすい点のひとつになっている。ただ、理解できてしまえば、これほど生物をはじめとする有機的なデザインに向いているモデラーもないと言ってしまえるくらい、LightWave最大の特徴のひとつにもなっている。

関連記事

BRDFシェーダ

最終更新:2016/09/06

BRDFは、Bidirectional Reflectance Distribution Functionの略で、日本語では双方向反射分布関数という。数学的なことはあまりよくわからないんだけど、LightWaveにおけるBRDFシェーダは簡単に言ってしまうと、特定の光源に対して反射する面のハイライトに変更を加えることができるもの。異方性反射に似たようなこともできる。

異方性反射に関する記事ではAnisotropicノードやAni-Reflectionsノードを使ってSpecular ShadingとReflection Shadingを実現し、Diffuse Shadingを使って金属表面のヘアライン加工の質感の再現を試みた。しかし、サーフェースや光源の色にレンダリング結果が影響を受けなくなるなどの制約もあることも書いた。BRDFシェーダは、厳密な意味での異方性反射を再現することはできないけど、ハイライトに色を着けることが可能で、光源に特殊な設定をすることなく比較的手軽な設定でハイライトの形状等を制御できる。

まず、次の画像のような球状のオブジェクトを用意する。もっとも単純な白色のスポットライトをひとつ配置しただけの簡単なシーンで、ハイライトは円形になる。これにBRDFシェーダを適用していく。

BRDF000

Regularモード

最初に、「Regular」モード。ハイライトの色(Color)、反射光(Specular)、光沢(Glossiness)を指定できるのみで、ハイライトの形状は通常と同様になる。

BRDF001

上の画像の設定でレンダリングすると次の画像のようになる。光源の色とは無関係に、ハイライトに黄色が適用され、光沢を弱めに設定したためぼんやりとした輪郭になる。ハイライトの位置が同じというところが重要で、BRDFシェーダは特定点における光の反射のみに適用されるものであることがわかる。

BRDF002

Anisotropicモード

次に、「Anisotropic」モード。ハイライトの色、反射光、光沢に加えて、「Anisotropy」と「Direction」を角度で指定できる。Anisotropyは異方性反射のことだけど、できることはかなり限定的で、放射状の異方性反射はある程度模擬できるものの、同心円状の異方性反射を模擬することまではできない。「Anisotropy」と「Direction」を設定するとハイライトの形状をずらすように互い違いに歪ませることができ、「Anisotropy」を「90°」、「Direction」を「0°」に設定するとハイライトの中心点で交差する扇状の反射になる。

BRDF003

上の画像の設定でレンダリングすると次の画像のようになる。ハイライトが緑色になり、異方性反射風の扇状の反射になっていることがわかる。「Anisotropic」モードでもハイライトの中心点は同じで、光を当てる方向やカメラの視点を変えなくてもBRDFシェーダの効果を得られる場所には変化がないことがわかる。

BRDF004

AnisotropicⅡモード

最後に、「AnisotropicⅡ」モード。「Anisotropic」モードの設定項目に加えて「Mapping」を指定できる。マッピングに「Cylindrical」を指定し、X、YまたはZのいずれかの軸を指定するとオブジェクトの軸に沿ったハイライトを生じる。「Anisotropy」と「Direction」の挙動は「Anisotropic」モードとは異なり、「Anisotropy」と「Direction」の両方を「90°」に設定するとハイライトの中心点で交差する扇状の反射になる。

BRDF005

上の画像の設定でレンダリングすると次の画像のようになる。ハイライトが赤色になり、異方性反射風の扇状になっているのは「Anisotropic」モードと同様だけど、ハイライトの中心点がオブジェクトのY軸に移動している。3つのモードのうち、動作としてはもっともAnisotropicノードに近いけど、同心円状の異方性反射の模擬が難しい(少なくとも、試した範囲では実現できなかった)上に、Anisotropicノードと異なり、異方性反射の中心点を任意の位置に移動させられないため制御が難しい。UVマップを指定することもできるけど、更に高度な設定になるので、そこまでする必要があるかどうかは判断の分かれるところ。

BRDF006

ティーポットで実験

それぞれのモード単体でできることはそれほど大したことはないけど、ひとつのBRDFシェーダに3つまでのレイヤーを設定できるので、自動車の塗装のように何層かの塗装面におけるハイライトを制御したい時に有効。

例えば、何の変哲もないティーポットのモデルを配置したシーン(左の画像)にBRDFシェーダの「Anisotropic」モードを二層にわたって適用することで、ハイライトにヒステリシス曲線のような歪みを生じさせ、表情を持たせることができる(右の画像)。

BRDF008

BRDFシェーダはその特性上、平面よりはハイライトが出やすい曲面のほうが効果がはっきりとわかるけど、光源の方向やモデルの角度などによって立体感が薄いと感じられる場合などに光源に依存しない反射を生じさせることで立体感を増すこともできる。

作品への応用

実験だけでは効果がわかりにくいと思うので、更に進めて実際の作品に反映したらどうなるか試してみた。次の画像はBRDFシェーダ適用前のもの。左右の白い斜線の入った青い部品は機首を中心にして山なりに角度がついているんだけど、光源の都合などで立体感がわかりにくい。

BRDF009

次の画像はBRDFシェーダ適用後。白色と青色のサーフェースに全体的に水色のハイライトを入れた。機首や主翼前縁部のような曲面のほうがシェーダの効果がはっきり見えるけど、平面にもレイトレースではわかりにくかった部分にハイライトが出て立体感はやや増した。ただ、本来の光源方向がわかりにくくなって嘘っぽく見えてしまうという欠点もあるので、度を超さない程度に使うのが良いように思う。

BRDF010

バグについて

最後に、BRDFシェーダにはLightWave3D 10.1の時点でバグがあり、サーフェースにBRDFシェーダを適用したままモデラーでオブジェクトのファイル間、レイヤー間のコピー&ペーストを行うとクラッシュする。モデラーではシェーダの効果を確認できないのでレイアウトで最後の仕上げに適用するようにしたほうがいい。この問題は、機能を一時的にオフにするだけでは解決できないため、シェーダ適用後にモデルを修正する必要が発生したら、シェーダをサーフェースから完全に除去する必要がある。その際に、パラメータが多いので設定を忘れてしまわないようにどこかにメモしておかなければならない。そういった意味では使い勝手が良くないシェーダではある。

関連記事

異方性反射(Anisotropicノード)

最終更新:2016/09/06

異方性(アニソトロピー、Anisotropy)というのは、物質の物理的性質が何かの方向により変わる特質のこと。宝石をはじめとする鉱物に光が入射する角度によって色が変わって見えたり、偏光性のある結晶のように角度によって光の透過率や屈折率が変わることなんかをひとまとめにして異方性という。異方性反射もそのひとつ。金属の表面に何らかの加工が施されていると、ピカピカに磨いたものとは異なる光の反射の仕方を見せることがある。

身近なところでは、CDやDVDの裏面なんかがそれにあたる。音楽や映像のデータを刻むために薄いアルミニウムの板に目に見えないほどの細かい同心円状の加工がしてあることで、光の当たり方によって虹色に光って見える。新旧を問わず、光ディスクは同様の特徴を持っている。

また、アルミニウムやステンレスなどの金属製品の表面を一定方向にわざと荒らして独特の風合いを出すヘアライン加工(ヘアライン仕上げ)が有名。同心円状にヘアライン加工をすると円の中心で交わる扇状の異方性反射を生じ、放射状に加工を施すと同心円状の異方性反射を生じる。加工と反射がちょうど直交するのが特徴。特に、ヘアライン加工による異方性反射というと同心円状の加工をイメージする人も多いはず。

一応、どんな3DCGソフトウェアでも、オブジェクトの表面に加工がされているように凹凸をつけてやれば異方性反射と似たようなことはできる。ただ、ヘアライン加工くらいの微細なレベルになるとポリゴンの数が膨大になるうえ、手間もレンダリング時間もかかるので、おのずと限界がある。そこで、LightWaveでは異方性反射を模擬するAnisotropicノードというものが備えられているのでそれを利用する。この記事を書いている時点で利用しているLightWaveのバージョンは10.1。

サーフェースの設定関連ではノードの編集はあまり得意ではないんだけど、勉強もかねて同心円状のヘアライン加工を施した金属表現に挑戦してみた。次の画像がレンダリングしたもの。

Anisotropy007

色々試行錯誤してみた結果、ノードの構成は次の画像のような感じになった。

Anisotropy000

この画像だけだと設定がわからないと思うので、順に説明していく。まず、Anisotropic (1) ノード。

「Anisotropy U」と「Anisotropy V」がもっとも大事なところで、VをUよりも十分小さい値にすると、放射状の異方性反射になる。つまり、ヘアライン加工は同心円状ということ。逆に、VがUよりも大きいと同心円状の異方性反射になる。次に大事なのは「Specularity」だけど、ここでは「100%」にしている。「Mapping」を「Cylindrical(円柱状)」にしておかないと同心円状のヘアライン加工にならないので注意。

Anisotropy001

次にAnisotropic (2) ノード。Anisotropic (1) よりも「Specularity」を若干控えめの「70%」にして、Vの値を少し大きめにする。Anisotropic (1) ノードとAnisotropic (2) ノードの「Color」出力をMathグループにあるScalarのAddノードで足してやってSurfaceの「Specular Shading」に接続する。

Anisotropy002

Anisotropic (1) ノードとAnisotropic (2) ノードのColorは白(RGB = (255,255,255))になっているけど、実はなんでもいい。「Specular Shading」に接続した時点で色の情報は無視される。光源の色を変えても異方性反射の色が変わることはない。どうしても異方性反射に色を着けたければ、Surfaceの「Color」に直接接続することになるんだけど、実物感はかなり薄れる。

次に、異方性反射と同じ理屈で鏡面反射を模擬するAni-Reflectionsノードを設定する。ここでも重要なのは「Anisotropy U」と「Anisotropy V」で、U > V にすることで放射状の鏡面反射を生じさせることができる。また、通常の鏡面反射の設定と同様に「Dispersion」を設定することで反射をぼかすこともできるし、球状反射マップを指定することもできる。ノードの設定が優先されるので、サーフェースの環境タブで鏡面反射マップを指定していても無視される。

Anisotropy005

Ani-Reflectionsノードの「Color」出力をSurfaceの「Reflection Shading」に接続する。これだけでも異方性反射らしい感じにはなるのだけれど、肝心のヘアライン加工が見えない。

そこで、LightWave付属のコンテント・ディスクに入っている画像を利用する。画像は Content\Images\Surface\Anisotropic フォルダにある brushed_03.bmp を指定する。なお、この画像はLightWaveを購入した人にのみ使用権が与えられる契約になっているものなので、フリー素材ではなく、ここでは配布できない。

Image (1) ノードは次の画像のような設定になっている。「Mapping」に「Spherical(球状)」を指定しておかないと円柱の上面に同心円状のヘアラインが出ないので注意。

Anisotropy003

Image (1) ノードの「Color」出力をAnisotropic (1) ノードとAnisotropic (2) ノードの「Color」入力に接続することで、異方性反射にヘアライン加工のような同心円状の筋が入るようになる。しかし、異方性反射以外の部分にはヘアラインが見えないのでさらにひと工夫。

Adobe Photoshopで先ほどの brushed_03.bmp を加工してノーマルマップ用の法線マップを用意する。ノーマルマップはメニューバーから「フィルター」-「3D」-「法線マップ」を選択すると設定ウィンドウが表示されて生成できる。あまり大きな凹凸をつけるつもりはないので、「ディテールスケール」を「10%」、「ぼかし」を「0」に設定して生成する。「コントラストのディテール」は特に変更しなかったが、「弱」「中」「強」ともに「20%」。

Anisotropy008

法線マップの機能はPhotoshop CC 2015で追加されたものだそうなので、古いバージョンには実装されていない。法線マップを自力で描くのはほぼ不可能と言ってもいいくらいなので、Photoshopを持っていない場合などは、ネットで画像をアップロードするとノーマルマップを生成してくれるウェブサイトがあるので、そちらを利用してもいいかもしれない。

保存した法線マップをNormalMapノードに読み込む。「Mapping」や軸などは Image (1) ノードと同様の設定にしておく。「Amplitude」はごく小さく、「5%」にしておく。今回は微細な加工を意図しているため、あまり大きくしてしまうと表面にモアレのようなノイズを生じやすくなる。バンプ・マッピングでも似たようなことはできるけど、ノイズを生じやすく、ヘアライン加工のような場面ではあまり使い勝手が良くなかった。

Anisotropy006

NormalMap (1) ノードの「Normal」出力をサーフェースの「Normal」入力に接続する。これで微細な凹凸が表面に追加され、異方性反射にも若干の分散のようなものが生じてそれらしくなる。

ただ、光が当たっていない部分のヘアラインがまったく見えないので、Diffuse Shadingを使用する。Diffuse(拡散レベル)用のテクスチャを同じく brushed_03.bmp からPhotoshopで加工する。レベル補正をかけて、明るいところはそのまま、暗いところを更に暗くするように設定。(他のMathノードなどを使って補正することができるのかもしれないけど、思いつかなかったのでPhotoshopで無精した)

Anisotropy009

保存したDiffuse用のテクスチャをImage (2) ノードに読み込む。これでも明るすぎたようなので、「Luma」出力をMathグループのDivideノードで10分の1に輝度を縮小させてSurfaceの「Diffuse Shading」に接続する。ちなみに、LumaはLuminanceの略語というか、コンピュータ用語における造語だそうで、輝度を表す。「Luma」出力の代わりに「Color」出力を使っても結果は同じ。

Anisotropy004

Diffuse Shadingを使用することによって、同じ表面の中でも明るいところと暗いところができ、同心円状のヘアライン加工らしい筋が見えるようになる。

ただ、これにはひとつ問題がある。勉強不足で理屈はよくわからないんだけど、Diffuse Shadingを使用するとサーフェースの色の情報がまったく受け付けられなくなる。Make ColorノードやColor Toolノードを追加してSurfaceの「Color」に接続しても同様。

塗装もしていない金属の地金ように色のないオブジェクトの場合はこれでもいいんだけど、塗装された表面を表現しようとするとヘアラインを諦めるか、クリアコーティングのように半透明のサーフェースで覆うといった別の工夫が必要になる。鏡面反射を設定している場合、背景色を変更すればその色を映し出させることはできるけど、他のオブジェクトにも影響を与えてしまうので根本的な解決にはならない。光源の色に影響を受けないのはSpecular ShadingやReflection Shadingと同様で、Shading系の機能を使用すればするほど実物感は増すものの、サーフェースの表現には制約を受けるようになる。

以上のように、ノードの設定は結構大変。大変ではあるんだけど、ノーマルマップのようにノードを使わないと実現できない表現もあるのですべてを避けて通るのも難しい。

最初は、順を追って各ノードの効果をレンダリング画像とともに例示していこうと思っていたんだけど、とてもではないけどひとつの記事としては長くなりすぎてしまうので、最終結果の説明のみに留めた。

関連記事

アンチエイリアス部分にアルファチャンネルを適用する

最終更新:2016/09/06

3DCGモデルのエッジ・ラインの抽出について書いた2013年5月14日の記事では、エッジ・ラインだけを残してそれ以外を透明にするためにGIMPの「色域を選択」機能で一括選択してざっくり削除していたけど、アンチエイリアシングで生じた暗い色のピクセルもそのまま残ってしまい、あまり綺麗にはできていなかった。

そこで、8ビット256階調のアルファ・チャンネルを利用してピクセルが暗くなるほど透明度が増すように設定し、背景に溶け込ませることができないだろうかと考えた。画像処理を得意とするソフトウェアを開発する企業の中には当然同様のことを考える人はいて、誰もが知っているAdobe Photoshopはもちろん、フリーライセンスのGIMPでも「レイヤーマスク」という機能で実現されている。モノクロ256階調のレイヤーマスクが黒に近いほどレイヤーの表示は透明に近づき、白に近いほど不透明度が増していく。

マスクを使うとなれば、グレースケールとしても使える画像のほうが何かと都合がいいので、前の記事では、背景色やサーフェース色を暗い青 RGB=(0,0,32) に指定していたけど、これを黒 RGB=(0,0,0) に設定しなおす。エッジ・ラインの色は白 RGB=(255,255,255) で同じ。前回はLightWaveの出力をアルファ・チャンネルとともに32ビットPNG形式で保存していたけど、あえてアルファ・チャンネル情報を破棄して24ビットPNG形式で保存する。

今回用意したのは次の画像(モデルは前回のものとは若干異なる)。

Alpha005

Adobe Photoshopによる方法(Photoshop CC 2015)

Photoshopで対象となる画像を開き、レイヤーパネルの下に並んでいるアイコンの中の左から3つめの「レイヤーマスクを追加」ボタンをクリックする。メニューからでは、「レイヤー」-「レイヤーマスク」-「すべての領域を表示」を順に選択する。すると真っ白なレイヤーマスクのサムネイルが当該レイヤーの隣に追加される。

Alpha000

次に、対象画像のレイヤー(カンバス)を全選択(Ctrl+A)し、コピー(Ctrl+C)しておく。レイヤーマスクのサムネイルをクリックして選択状態にして、更にAltキーを押しながらクリックすると、レイヤーマスクの編集画面になる(この辺はちょっとわかりにくかった)。コピーしておいたレイヤーをペースト(Ctrl+V)する。選択状態になっていてペーストできない場合は、いったんカンバスの外をクリックするなどして選択を解除しておく。

LightWaveでの画像保存でアルファ・チャンネルを破棄したのは、コピーしたレイヤーの余白に透明部分があると普通にペーストするだけでは同じ位置に貼り付けられないことがあるのと、透明だった部分のマスクは真っ白のままで変わらないので、あらかじめ黒で塗りつぶしておかなければならないから。位置については「編集」メニューから「特殊ペースト」、「同じ位置にペースト(Shift+Ctrl+V)」を順に選べばいいんだけど、1ピクセルでもズレると結果が大幅に変わってしまうので、余計な手間はないに越したことはない。

なお、今回は白い実線部分を残しておきたいので、「階調の反転」は行わない。

Alpha003

再びレイヤーのサムネイルをクリックすると、元は黒かった部分が透明になっている。わかりにくければ、背面に何か色のついたレイヤーを一時的に差し入れてみる。エッジ・ラインに隣接するアンチエイリアスのピクセルもレイヤーマスクの階調に従って半透明状になっているので、これを「ファイル」メニューから「別名で保存」を選択してPNG形式で保存する。

GIMPによる方法

GIMPの場合はPhotoshopよりもシンプル。レイヤーなどが表示されているパネルで対象画像のレイヤーを右クリックすると、「レイヤーマスクの追加」というメニューがある。メニューからでも「レイヤー」-「レイヤーマスク」-「レイヤーマスクの追加」で実行できるけど、右クリックのほうが操作は直感的。

Alpha001

クリックすると、どのようにレイヤーマスクを生成するのか「レイヤーマスク追加」ウィンドウで聞いてくるので、「レイヤーのグレースケールのコピー」を選択して「追加」ボタンをクリックする。これだけでいい。GIMPのインターフェースに慣れてさえいれば、レイヤーマスクの編集の手間がない分、Photoshopよりも手軽ではある。

Alpha002

対象画像を「可視部分」と「不可視部分」に分けて重ねているだけで、特殊なアルゴリズムを用いているわけではないのでソフトウェア間の性能差は生じにくく、Photoshopでやっても、GIMPでやっても基本的に結果は変わらない(はず)。

レイヤーマスクを利用して加工したものが次の画像。白い実線以外の部分は透明になっているのがわかりやすいように、ウェブサイトの背景画像の上に表示されているもののスクリーンショットをとった。元の画像よりもエッジが細くなった印象はあるけど、従前の方法よりシャープさが増し、不自然な段差も少ない。エッジの太さについてはLightWave側でなんとでもできる。全体的には綺麗にできていると思うけどいかがだろうか。

Alpha004

関連記事

参考記事

エッジ・ラインの抽出

最終更新:2016/09/06

ウェブサイトの画像を作るのに必要になったので、オブジェクト(モデル)輪郭のエッジ・ラインを抽出してみた。LightWave Super Cel Shaderを使う方法と、自己発光を使う方法のふたつを紹介する。

レイアウトのレンダーオプションで「ワイヤーフレーム」を指定するだけでは、ポリゴンの表面が全部透明になってしまい、モデリング中のワイヤーフレームのような画像が出力されてしまう(ポイントは目立たないので大昔のワイヤーフレームのゲームのような感じ)。「ラインレンダー」を有効にしてもエッジ・ラインだけが出力されるわけではない。そこで、

『裏側が見えない、余計な線も見えないソリッドなワイヤーフレーム』

を目指してみた。

最初に、「リアリスティック」モードでいつものようにレンダリングした画像。ところどころ文字やマーキングなどのテクスチャが貼られているのがわかると思う。

Dragoon-Realistic_640

これを、次の画像のように出力させるのが目標。オブジェクト・モデルはまったく同じもの。

Dragoon-Wire_640

共通手順・サーフェースの統一

まず、モデラーにある「色・質感編集」の設定で、テクスチャ・マップなどを設定してあるサーフェースをすべて主要な色に統一する。今回の場合、テクスチャ・マップを指定してあるのは主に白色の部分と青色の部分なので、基本色の設定を見ながらその2色に振り分ける。

このとき、「ポリゴン選択モード(Ctrl+H)」で「ポリゴン状態(w)」ウィンドウから「Surf:」をクリックしてサーフェース単位で選択をすると楽にできる。

3DCGは、要は数学の世界なので出力はいつも同じ結果になる。ということは、出力に影響しない作業をいかに効率化するかで時間を稼ぐ。ひとつひとつポリゴンをマウスで選択してたり、なげなわ選択で大雑把に選択してからジリジリ選択ポリゴンを減らしているようではイカンのです。

そもそも、なんでサーフェースを振り分けるなんて面倒くさいことをするかというと、レイアウトにあるオブジェクトのアイテムプロパティの「輪郭」タブで指定するラインレンダーで「サーフェイス境界」を指定すると、テクスチャが設定してあるサーフェースと設定していないサーフェースの境界を、LightWaveは「色の境界」と判断してしまうから。このため、本来カラーリングの境界線も鋭角のエッジのないところに意図しないエッジがたくさん出力されてしまう。

私の場合はだいたい、テクスチャを割り当てるポリゴンの指定には色の境を意図していない。複数のテクスチャも画像編集ツールではなく、LightWaveサーフェース上のレイヤーでブレンドしたり位置を調整したりする。UVマップはサーフェースとは関連付けられるけど独立した概念なので、オブジェクト全体をくるむようなマッピングもメカの場合はあまりしない。

全部のポリゴンをひとつのサーフェースに統一してしまうのがもっとも簡単なんだけど、隣り合うふたつのポリゴンが、例えば平面のように続いていてエッジを共有している場合は、LightWaveのレンダーはそのエッジを省略してしまう。このため、カラーリングの境界に適切なエッジ・ラインが引かれず、ただ輪郭外形(シルエット)をなぞるだけの扁平な出力になってしまう。

主要な色に振り分け終わったら、必要なサーフェースをすべて同じ色に統一する。言うまでもないけど、サーフェースは非常にパラメータが多いので、サーフェース名を右クリックしてコピー & ペーストすると楽チン。今回は暗い青(RGB = 0,0,32)にした。

LightWave Super Cel Shaderを使う方法

Super Cel Shaderはほとんどの一般的なサーフェースの設定を無視するけど、念のため「反射光」や「光沢」、「鏡面反射率」、「透明度」の設定は「0%」にしておく。なお、「拡散レベル」を「100%」にしておかないとサーフェースが真っ黒になってしまうので注意。

Edge_Cel_000

主要な色のサーフェースの「シェーダ」タブにある「シェーダ追加」プルダウンメニューから「Super Cel Shader」を選択する。シェーダを右クリックすると出る「プロパティ」で4段階の明るさの階調の境界値を0~100%の範囲で指定するわけだけど、これをすべて「100%」に指定する。すると、まったくハイライトも影もない扁平な出力が得られる。

Edge_Cel_001

シェーダもプロパティごとコピー & ペーストできるので、ひとつのサーフェースを設定したら、あとはコピーして済ませておきたい。ただし、最低ひとつはシェーダを設定していないと右クリックできないので、シェーダを設定していない場合、「編集」ボタンをクリックして「貼付け」を選択して貼り付ける。このへんはちょっとインターフェースがいまいち。シェーダの設定とまとめてサーフェース全体をコピーしてしまうのも手だと思う。

最後に、別名で保存する。綺麗に色分けしたオブジェクトを壊しては何にもならないので、上書きに注意!

下記「共通手順・レイアウト」に進む。

自己発光を使う方法

自己発光を使うほうが実はLightWave Super Cel Shaderを使うより簡単なことに後で気付いた。

具体的には、モデラーの「色・質感編集」で、「自己発光度」を「100%」に設定し、「拡散レベル」を「0%」に設定する。Super Cel Shaderの場合とは逆に、「拡散レベル」が「100%」になっていると、自己発光していてもサーフェースに微妙な陰影が出てしまうのでソリッドなレンダリング結果を得られない。

Edge_Luminosity000

「高度な設定」タブを選択し、「グロウの明るさ」を「0%」に設定する。レイアウトの設定で無効にすることもできるけど、グロウエフェクトが効いてしまうとエッジ付近にぼんやりした輪郭が出力されてしまう。

Edge_Luminosity001

サーフェースの設定が終わったオブジェクトを別名で保存してレイアウトに配置するか、既存のシーンのオブジェクトを置き換える。元のオブジェクトを上書きしないように注意!

あとは、下記「共通手順・レイアウト」の手順で同じ設定をしていけば同様の結果を得られる。基本的な設定だけでシェーダをいちいち設定しなくて済むので、こちらのほうがオススメ。

共通手順・レイアウト

レイアウトのオブジェクト選択モードにしてから、「アイテムプロパティ」を選択する。「オブジェクトのアイテムプロパティ」ウィンドウが開いたら「輪郭」タブを選択。

「点/線の太さ」を2.0px(ミディアム)、「鋭角の折り目」、「共有しないエッジ」、「サーフェイス境界」をそれぞれ1.0px(スモール)に設定する。「シルエットエッジ」を2.0px(ミディアム)にしておくとオブジェクトの外縁がはっきりしてメリハリがつき、機械出力っぽさが少し減っていい感じになる。もっとカメラとの距離が近ければ「距離でエッジを縮小」オプションがうまく効くかもしれない。

Edge000

エッジの太さは用途と必要に応じて変更する。なお、「その他エッジ」は設定しない。

エッジ色はお好みで。今回はオーソドックスに白(RGB = 255,255,255)にした。

ちなみに、「その他エッジ」をオンにするとこうなる。極端な鈍角のある多角形を三角分割したポリゴンのエッジがそのまま出てしまう。これはちょっとカッコ悪い。

Dragoon-Wire_worth

「ウィンドウ」メニューから「背景オプション」を選択して「特殊効果ウィンドウ」を開く。背景色をオブジェクトの主要色と同じ(RGB = 0,0,32)にする。

Edge001

「プロセシング」タブにある「グロウ有効」はオフにしておく。

Edge002

レイトレースは今回の場合はむしろ問題になるので、ライトは平行光源などフォールオフしないものに変えておく。レンダリング時間も短くなる。

レンダリング時間を長くしてもいいことはないので、ラジオシティを指定していたら、「レンダーオプション」にある「大域照明」タブの「ラジオシティ有効」もオフにしておく。

Edge003

レイアウトのレンダーオプションでレンダーモードを「リアリスティック」に設定し、「ラインレンダー」のみを有効にしておく。

Edge004

他にオブジェクトを配置していなければ、レンダリングをかけると、背景部分にアルファ・チャンネルができる。有効に使いたいので、BMP形式よりはPNG形式や、使用できる環境であればPSD形式(Adobe Photoshop形式)にしておきたい。まだ加工するのであれば、少なくともJPG形式などの不可逆圧縮フォーマットは避けたい。

画像の加工

ここではレンダリング画像をいったんPNG形式で保存して他のソフトウェアに移す。今回は透過機能が使いやすいGIMP 2.6を使用した。主要な色に適当なしきい値(大きくすればするほどエッジ・ラインは細くなる)の色域で一括選択をかけてやるとエッジ・ラインの内側の部分もすべて選択できる。選択部分をDeleteキーで削除してやれば、エッジ・ライン以外はすべて透明になるので、透過GIF画像や透過PNG画像として使える。

色数が少ないので、PNGよりはGIFのほうがファイルサイズも小さくなって取り回しはいいかもしれないけど、用途に応じてお好みで。

ウェブページなどで使うときに背景色や背景画像から浮いて見えてしまうハロー現象を防ぐために二値化するのもいいけど、エッジが途切れてしまったり、アンチエイリアスがかからずジャギー(ピクセルドットの段差によるギザギザ)がくっきり出てしまったりするので「古臭いコンピュータっぽさ」を演出したい時でもない限り注意が必要。拡大縮小にも弱くなるので、画像サイズの調整は減色する前にやっておいたほうがいいと思う。

関連記事

LightWave Super Cel Shader 2.15

最終更新:2016/09/06

NightBlade002f

Super Cel Shaderの使い方をド忘れして無駄な時間を食ってしまったので、備忘録。

「色・質感編集」から「シェーダ」タブを選択。「シェーダ追加」プルダウンメニューから「Super Cel Shader」を選択。必要なサーフェースすべてに関して同様の手順。

シェーダの設定はモデラーでもできるけど、出力結果がOpenGLでは確認しにくいので、レイアウトのVPRで出力具合を確認しながら設定して、後でシーンをオブジェクトごと保存してしまったほうが手軽。Super Cel Shaderを一時的に使うだけの場合は、サーフェースの設定を保存しておくか、専用のオブジェクトを用意する。

オブジェクト選択モードにしてから、「アイテムプロパティ」を選択。「オブジェクトのアイテムプロパティ」ウィンドウが開いたら「輪郭」タブを選択。「点/線の太さ」を2.0px(ミディアム)、「シルエットエッジ」、「鋭角の折り目」、「サーフェイス境界」をそれぞれ1.0px(スモール)に設定する。「共有しないエッジ」は必要に応じて。「その他エッジ」は設定しない(ワイヤーフレーム風にしたければ設定する)。

「レンダー」タブを選択して、「レンダーオプション」をクリック。「レンダーオプション」ウィンドウが開いたらさらに「レンダー」タブを選択。「ラインレンダー」オプションを設定。通常のシェーダを使っている時にラインレンダーを選択してしまうとサーフェースが透明になってポリゴンのエッジだけ色がつく透過ワイヤーフレームが出力されてしまうけど、セルシェードをする場合にラインレンダーを指定しておかないとエッジのラインが出ないので注意。

機首はサーフェース境界なのでやむを得ないけど、カナード翼後ろの部分のエッジはモデリングの手間を減らす都合上生じてしまったもの。真面目に消そうと思えば消せる。主翼端にちょこっと出てる不規則エッジも原因はわかってるけど、今回は実験なのでひとまず放置。

ブリリアント・カット

最終更新:2016/09/06

成り行きで58面ブリリアント・カットを作ってみた。

三角ポリゴン以外では完全平面を作るのって結構難儀なんだけど、あえて完全平面を目指してみた(LightWaveで言うところの平面率0.0%)。精度が悪くてもよければ簡単に作れるんだけどねー。

石の幅を100%とすると、頂点の座標は0.000006%くらいの誤差があるけど、モデラーの精度の限界なのである程度は仕方ない。要はレイトレースの精度を確認するためなので平面がうまくできていればいいことにする。

brilliant000
brilliant001

本当にブリリアント・カットなのかちょっとわかりにくいので、直上からの構図で透過ワイヤーフレーム。各部の比率はBrilliant Cut Diamonds(英語)を参考にした。特に、『Eulitz Calculated Brilliant 1972』という比較的新しく算出されたものを用いている。

brilliant002

案の定、LightWaveのレンダーに屈折率2.417の再現は荷が重すぎた(聞くところによると、宝石商の屈折率計でも測れないらしい)。白のライトを虹色に分解してくれるとはさすがに思えなかったので、念のため赤・青・緑のライトを配置してみたけど、可視光の波長によって屈折率が微妙に変わる現象はさすがに演算してくれなかった。ダイヤモンド特有の虹色の輝きは再現できず、真っ黒くろすけになってしまいました。

直上からの構図も試してみたけど、ほとんど真っ黒でもはや宝石かどうかすらわからないという……。

たまには「デザインが決まりきっていてターゲットが明確なモデリング」もやってみると刺激になる。

昔にもブリリアントカットには挑戦したことあるんだけど、「58面体」を「58角形」と勘違いしていて、まったく別物になっていたのに長らく気がつかなかったのは若気の至り。

LightWave用MMDモデルPMD形式ファイル・インポーター

最終更新:2016/09/06

MikuMikuDnace用モデルデータのPMD形式ファイルをLightWaveで読み込む方法。

まず、『Microsoft Visual C++ 2005 Service Pack 1 再頒布可能パッケージ』(Microsoft Visual C++ 2005 Service Pack 1 Redistributable Package)が必要なので、マイクロソフトの次のページからダウンロードする。

パッケージの詳細についてはこちらを参照。

リストから「Microsoft Visual C++ 2005 Service Pack 1 再頒布可能パッケージ」を選択するとダウンロードページに移動するので、システムによってダウンロードするファイルを選ぶ。Windows XPやVistaなどの32ビットシステムの場合はx86ベース(vcredist_x86.EXE)、Windows 7や8のような64ビットシステムの場合はx64ベース(vcredist_x64.EXE)を選択する。両方ともダウンロードしても特に問題なかった。EXEファイルを実行するとパッケージが自己解凍してインストールされる。

LightWaveのプラグインを多数作成しているfault0d氏のウェブサイト『Poly to Poly』からAS PMD Helperをダウンロードする。私はLightWave10を使っているのでバージョン0.121を選択。アーカイブファイルにはx64用のプラグインも同梱されている。

zipファイルを解凍して、AS_PMD_Helper.pファイルをLightWave用のプラグインが格納されているフォルダにコピーする。バージョンによってフォルダ構成は異なるのでLightWave 2015でも同じかどうかはわからないけど、LightWave 10では次のフォルダ。

C:\Program Files\NewTek\LightWave_10\support\plugins

モデラーを起動し、「ユーティリティ」タブを選択して「プラグイン追加」をクリック。

AS_PMD_Helper.pファイルを指定するとPMDインポーター/エクスポーターといくつかのPMDファイル作成補助プラグインが追加される。

AS_PMD_Helperに同梱されているドキュメントに従ってモデラー設定ファイル(lwm*.cfg ※「*」はLightWaveのバージョンごとに異なる)を更新しておくとPMD形式ファイルをLWOオブジェクトと同列に扱ってくれるようになる。設定ファイルはシステムドライブ(普通はCドライブ)の「ユーザー(Users)」フォルダの各ユーザーフォルダ以下「.NewTek」フォルダ内にあるので注意。

公開されているPMDファイルをダウンロードして試してみた。今回はシナモソさん作成のボーイング767-200をベースにdiagraph01さんが改造したE-767(diagraph01さんのページ)。テクスチャの再現性などなかなか優秀。個人的にはこれで充分満足。

ただ、細かいことを言えば、可動部分など分割されているパーツは一旦ひとつのレイヤーにまとめられてしまって名前がついてるだけで空っぽのレイヤーが大量にできる。また、スケルゴン(ボーン)もロードされるけどあくまでもMMD用に作られたデータなので、インポートした直後はLightWaveでのアニメーションの実用には堪えない(座標や必要なボーンの目安にはなる)。

MMDは日本発のソフトウェアなのでボーンやウェイトマップの名称にかな・漢字を使っていることが多く、改名しないと文字化けしてしまってスケルゴン・エディタなどの一部の機能で使いづらい。もっとも、LightWaveで2バイト文字や3バイト文字を使うのは昔から御法度なので、どっちかと言うとLightWave側の問題なんだけど。(そのへんAdobeの製品はローカライズが完璧なのでビックリする)

PMD形式ファイルを他のソフトウェアで変換することなくLightWaveで直接ロードできるだけでもありがたいと思ったほうが良さそう。

思っていたよりも調整するところがなかったので、単純にLWO形式で保存した後レイアウトに移してレンダリングしてみたのが次の画像。

E-767

関連記事

三角関数とブーリアン

最終更新:2020/04/22

さて、三角関数とブーリアンの話をしましょう。特にこの二者に直接の関係はないんですが、正確なモデリングをしようとすると、結構避けて通れないものなんです。

今回は完成したものを先に出しましょう。目標はこれです。これを見ただけでどうモデリングすればいいかひらめく人はこの記事を読む必要はないです。私の使っている方法が絶対正しいなんてことはないですから。

bool000

まず最初に例によって「ディスク」ツールで六角形の板を切り出してやります。厚さは50ミリメートルにしてあります。半径はこの後のモデリングに影響するので、簡単のために1メートルにしてあります。

bool001

六角形の板をコピー(Ctrl+C)でして別のレイヤーに移動して貼り付け(Ctrl+V)ます。Windowsユーザーにはおなじみの「コピー・アンド・ペースト」ですね。別レイヤーに移した六角形の板を正三角形に加工しなおします。方法はなんでもいいですんですが、多少面倒でも精度の良い方法を選択します。

bool002

六角形の右下にある頂点をふたつとも選択して、モデラーウィンドウの下にある「情報」ボタンを押すか、キーボードの「I」を押します。上に示したような新しいダイアログが出てきたら、「全編集」ボタンを押します。X軸とZ軸の値を0に変更してダイアログを閉じます。

すると、次の画像のような形に変形するはずです。

bool003

次の画像で黄色い色で選択されている3つのポリゴンは必要ないので「Delete」キーを押して消してください。

bool004

同様に、不要な頂点を消します。

bool005

次に、三角形の板に形成するために頂点の統合を行います。「詳細」タブ、「ポイント」グループの「統合」ツール(Ctrl+W)を使用します。よく使う機能なので、この際ショートカットを覚えてしまいましょう。図ではスペースの都合で上からの絵しか示していませんが、板状なので上面と底面のふたつずつ頂点があることに気をつけてください。

bool006

無事に加工が終わると、次の画像のような形になっているはずです。ここで重要なのは、正三角形の頂点のひとつが原点に位置しているということです。原点を頂点に持っているということは、先に作成した正六角形の中心を得たのと同じということです。

bool007

六角形の板を作ったレイヤーのボタンを「Shift」キーを押しながら選択すると、同時表示されて次のような感じで表示されます。三角形の板の上面と底面を「移動」ツールで500ミリメートルずつ上下に移動させてあります。ついでにわかりやすくするために赤く色をつけておきました。

bool008

さて、準備はここまでで、ここからが本番です。要するに、赤い三角柱で六角形の板に穴をあけたいわけですが、今のままでブーリアンをやっても、穴ではなく、三角の切り欠きのあるいびつな七角形の板ができるだけです。

そこで、穴になるべく用意した赤い三角柱を縮小します。縮小の中心位置をマウスで指定してもいいんですが、正確な位置に穴をあけることは困難でしょう。アクションの中心に「選択範囲」モードを指定しても単純に最大幅の半分になるだけで、正三角形のそれぞれの頂点からの距離が等しい中心点を得ることはできません。

ここで登場するのが皆さんの嫌いな三角関数です。中心位置を次の図のように求めます。

六角形の半径を最初に1メートルに指定しましたから、中心位置のX成分は500ミリメートルで自明です。

正三角形の頂点から底辺に向かって垂線を引いた場合、\angle Aは、正三角形の頂点の角度をちょうど二等分するので、30度です。\angle xyは90度なので、\angle Bは60度です。



X成分が自明なので、Y成分は次の式で求めます。

     \begin{align*} y=500\times\tan 30^{\circ}=288.67513459481288225457439025098\dots\textrm{ [mm]} \end{align*}

これを「拡大縮小」ツールの「中心」に入力します。

倍率はお好みで。とりあえず85%にしてあります。上の図ではついうっかり「y」にしてしまいましたが、入力先は「中心Z」ですのでお間違いのないよう。

bool009

こんな感じに縮小されたらバッチリです。

bool010

そうしたら、今度は「複製」ツールを使って、穴になる三角柱を一度に作成します。「複製数」を5に設定して、ヘディング「H」を60度に設定します。あとは変更しなくていいです。

bool011

「OK」ボタンを押して複製した結果が次の画像のようになっていれば成功です。

bool012

なんでわざわざ面倒くさい計算をしてまで中心位置を小数点以下数桁にわたって求めたか。ひとえにこの「原点を中心に回転させながら複製する」をやりたかったからなのです。一見面倒そうでも、このほうが結果的にミスが少なく、戻り作業が発生しにくく、正確かつ楽なのです。

6つある赤い三角柱のうち、左の4つを選択して、さらに「複製」します。今度は「複製数」を2にして、「オフセット X」を-1メートルに設定します。ヘディング「H」は0度に戻しておいてください。

最初の正六角形の半径を入力するだけで穴が正確に複製されていくなんて、なんて素晴らしいんでしょう!

bool013

次に、六角形の板のほうの左方3つの頂点を上面、底面ともに選択して、-2メートル「移動」させます。

bool014

次の画像のようになっていれば完璧です。

bool015

そして、いよいよブーリアンです。六角形の板のあるレイヤーをアクティブにして、赤い三角柱群のあるレイヤーの下半分をクリックします。イメージがわかない人は次の画像の右上を見てください。こんな感じです。

bool016

「構造」タブの「複合」グループにある「ブーリアン」を選択します。
「減算」ボタンをクリックして「OK」を押します。すると…

bool017

このようになります。成功です。OpenGLの表示崩れも起きていないようですね。もし、表示崩れが起きていたら「三角分割」を試してみましょう。

お気づきかと思いますが、穴を開けられた場所の面は、赤い三角柱の色になっています。これをうまく利用すれば、細かいポリゴン選択をせずとも複合的な配色が可能になります。

bool018

以上です。細かいことを言うとまだありますけど、とにかく実用上はこれで十分なはずです。
ブーリアンの真骨頂の一部と三角関数の重要さを垣間見てもらえたのなら幸いです。

bool019