【資料】ミニガン ノーマル解説
ミーシャ用のミニガン、【GAT-2020M】を用いて、
ノーマルマップ作成までの流れをまとめてみました。
(モデル名はお気になさらず…)
最後までお付き合い頂けますと幸いです。
(長いので、右側に表示されている目次もご利用下さい。)
参考用データ
・データの著作権は柳々(yanagi*2)が有しております。流用、改変はご遠慮ください。
・データの再配布に関して、DLされた当人の友人・知人間で共有して頂く分には構いません。
良識の範囲内にて良しなにお願い致します。
・このデータにより発生した各種損害等に関して柳々は一切の責任を負いませんのでご了承ください。
データの内訳(全体で約20MB)
◆FBX
├◇GAT-2020M_LOW.fbx
│└─→実際に実機へ持ち込むためのローモデルデータです。
│ (実機用…と言いつつも、作業中データにつきパーツは全てセパレートされた状態です。)
└◇GAT-2020M_Target_n_Source.fbx
└─→焼き付け先のローモデル、焼き付け元のハイモデルデータです。
キーを打ってますので、対応するソフトであればどのパーツがどこへ焼き付けられるのか見れるはずです。
◆OBJ
├◇GAT-2020M_Low.obj
└◇GAT-2020M_High.obj
└─→FBXが読み込めない方はOBJをご利用下さい。
◆Photoshop
└◇NormalMap_Sample.psd
※GAT-2020Mに関連したデータのみをまとめております。
(記事本文にてランチャーも登場しますが、そちらは同封しておりません。)
作業環境
・Maya LT 2016 ※通常版のMayaと区別するため、以下"LT"と表記します。
・xNormal 3.19
・Photoshop CC
◆参考程度に環境を挙げましたが、
Maya、3dsmax、Blenderならば、モデル作成~ベイクまで一貫して出来ますので、
xNormalは要らないかもしれません。
◆以下の内容は、モデリングが可能で、
なおかつOBJ(もしくはFBX)での出力が可能な3Dソフトであれば再現可能かと思います。
高価格・ハイエンドな物 :Autodesk製品(Maya、3dsmax)、Modo、Cinema4D…など
安価な国産ソフトウェアの物 :Metasequoia、Clip Studio Modeler…など
無料・またはオープンソースの物:Blender、Xismo…など
また、今回は数万、数十万ポリゴンの実機モデルかつスカルプトで高精細…
という言わばPS4を代表するハイエンド機に登場するモデルを作る事は想定していません。
◆2DCG用のソフトはPhotoshop、Clip Studio Paint、SAIでも問題無いと思います(そういえばGIMPとかもありましたねぇ…)。
手描き感を重視する会社さんだと、Photoshop以外を採用する例もあるようですので、
縛りが無ければ手触り感で選んで大丈夫だと思います。
(ゲーム系の仕事に携わる身としてはPhotoshopを強く推奨しますが)
実機用モデル(ローモデル)をつくる
実物やゲーム等に登場するミニガンを参考にローモデルを組み上げます。
実銃はコードや、ギア、バネ、その他素敵な物盛り沢山、
要所要所で細かな機構が組み込まれてますね。
今回は精巧なミニガンを作成する事が目的でないのと、
1~2日程度でモデル~テクスチャまで仕上げるので、
適当に、なおかつ容赦なくオミットしていきます。
アレコレ調整して1000ポリゴンに収めました。
(バレルが6角形ですが、6角形のものとしてデザインに組み込む事にしました。)
…が、操作時の都合上、トリガー、グリップ周りをオミットしたので更に減りました。
今回は1からモデリングの仕方までは解説しませんし、
自分より他にも上手い方が沢山いるので、このページはサクサク次へ進みましょう。
UVを展開する
先にハイモデルを作っても良いですが、
UV展開を先に行いどれぐらいの解像度感で作れるかを先に計っておきます。
またこの時点で、どことどこを共有して使うかも考慮しておきます。
(ミニガンの場合はバレル部分が真っ先にその対象になりそうですね。)
表現したいディティールに合わせてUVを配置していきましょう。
と言うことで、↓一通り展開しました。
(ついでで、別で作成していたランチャーユニットも展開してます。)
ミニガンは正方形(1024x1024px)内に、ランチャーは長方形(512x1024px)に収めました。
控えめに言ってもリッチな構成です…
隙間がありますが、武器ごとの解像度感を合わせるのを優先しているので気にしません。
ノーマルを作る場合だからといって特異なUVの開き方はしなくていいと思います。
通常通り、手で配置しても、ツールによる自動展開を使用して問題ないです。
ただし、UVとUVの間の間隔には気をつけましょう。
後でxNormalで焼き付ける際に悲惨な結果を招きます。
(UE4やUnity等のゲームエンジンに出力する場合でもUVの間隔で泣きを見る場合もあります。
今回は特に解説しませんが、私は迷うぐらいだったら余裕を持たせます。)
各UVアイランド(画像で青い箇所)同士が、
8px 以下で隣り合わないように配置していきます。
後ほどベイクをする際、xNormalがこのアイランドから、
4px はみ出してノーマルを作成するためです。
(私の場合は8px以上空けてますが、
それ以上になったとしても問題は無いはずです。
お好みの幅で配置していきましょう。)
自動配置ツールの場合、設定項目があるので、
お好みの数値を入力しておきましょう。
ハイモデルを作成する
便宜上、ノーマルマップを抽出する為のモデルをハイモデルとしますが、
サブディバイドやスムース等を用いてモデリングはしません。
基本的に、カットツール、押し出し、面の複製等をコンボで使いモデリングをします。
経験則的にこの程度のポリゴン数だと、元形状と咬み合わない箇所が増え結果があまりよろしくないです。
モデルとして立体をおこした箇所に関して、一部抜粋してみましたので下記をご参照下さい。
・ブーリアンを使用しない
バレル部分の穴(フラッシュサプレッサー)や、
を表現するためにハイモデル上に何かしらの手段で
穴を……空けません。
代わりと言っては難ですが、
ノーマル生成用の円錐状のオブジェを置きます。
実弾の通り道も同様に処理します。
画像は凹形状を表現してますが、
凸形状でも同様の事ができます。
・ローモデルとハイモデルの形状差
画像で、チェッカー画像が見えるポリゴンと、
そうでない箇所がありますが、
前者の部分はローもハイも全く同じ形状です。
必要ディティールさえ抽出できれば良いので、
それ以外には何も加えません。
・モールドの表現
モールドも同様に上乗せで表現してしまいます。
理由はベースとなるハイモデルを切り刻んで
後戻りが面倒になるのと、不必要になったら
即座に消せるからです。
ノーマルが一切でないモデル
ノーマルが出力できるモデル
ところで…
ノーマルマップが生成される原理に詳しい方は、
ここは飛ばして頂いて問題ありません。
左の図はとあるボックスの一面から、
面ごとに垂直に押し下げた簡単なオブジェクトです。
結果から先に申し上げると、
左のモデルではノーマルが出力できないのですが…
違いはどこにあるでしょうか?
すでにお気づきかと思いますが、右のモデルには”ナナメ”の面が存在しています。
上記のハイモデルを作る上で常に意識しているのは、意図的にナナメの面を作り出す、という事です。
いくら、彫りor盛り上げを深く、強くしたいと思っても、奥に押しこむor引き出すだけではほとんど結果が変わらないことにご注意下さい。
(逆に、そこまで押し込んだり、引き出す場合はノーマルじゃなくてローモデルでそういう形状にするべきです。)
ちなみに私はノーマルの勉強を始めた際、上記の原理でつまづきました。
最早いい思い出です。
ベイク用に準備する
ベイクを行うために、予めLT上でモデル同士の位置を動かします。
移動前、移動後でキーを打っていつでも戻せるようにしておきました。
ちなみに引き剥がさないでベイクすると、結果は以下の通りです。
ノーマルのエラーも含めてアートとするならば止めはしませんが、
宜しくない事に変わりはないので、予めパーツ同士の干渉を頭に入れ焼き付けの準備をしましょう。
xNormal でベイクする
通常版のMayaであればマップの転写(Transfer Maps)でほぼ事足りますが、
MayaのレンダラとMentalrayに付随する機能なので
LTではごっそり機能が省かれています。
LTだとTurtleテクスチャベイクも選択肢の内に入りますが、
今回は使いません。
ここからはxNormalを用いてノーマルマップをベイクしていきます。
LTからローモデル、ハイモデルを別々にOBJ形式で出力しておき、
xNormal上で、ロー、ハイモデルをそれぞれ読み込ませます。
適当な行の上で右クリック→"Add meshes"で対象のOBJを読み込みます。
※xNormalは多角形ポリゴン(5角形以上のポリゴン)を読み込めないので、
ローモデル、ハイモデル共に多角形ポリゴンが無いかクリーンアップ等で確認しましょう。
(もしくは出力時に一括で三角ポリゴンにしてしまうのもアリです。)
GIFだとFBXを読み込んでますが、気にしないでください。
…設定項目は沢山ありますが、右側の"Baking options"に移り、
簡単な設定だけ済ませたらさっそくベイクします。
さて、先ほどUV同士の間隔は(4+4pxで)8px空けておりました。
なので、上のエッジパディングは8px…と言いたいところですが、
ちょっとだけ違います。
今回実機で使うテクスチャサイズは1024px四方ですが、
実際の所、倍のサイズ2048px四方で制作しています。
1024の時に各アイランド同士が8px離れるようにしたいので、
倍のサイズで焼く際、パディングの幅も相対的に変動する事に
ご注意下さい。
例)2048px エッジパディングが8px
↓
1024px エッジパディングが4px相当に縮む
意図せずにこの様な画像が出てきたら
どこかに問題があるかもしれません。
パッと見た感じ、綺麗に焼けているようです!
さて、毎回綺麗に焼ければ万々歳ですが、
そうとは限らない場合もあります。
綺麗に焼けない場合、大抵プログラム側ではなく、ユーザー側に問題があるので、
以下の点も確認してみてください。
・ローモデルとハイモデルに形状・位置の差がありすぎる。
→モデル同士の位置が違う、モデル同士が近すぎる場合などは、
ローとハイモデルを並べた上で、形状、位置の調整を行います。
・ハイモデル(もしくはローモデルの)法線・面の向きが反転している。
→仮にローモデルが表を向いているのに、ハイモデルが裏を向いている場合、
大抵変なノーマルが出力されるか、何も出力されません。
ミラー等を利用した際、法線方向にも気をつけましょう。
・それでも解決策が分からない。
→一旦、コーヒーブレイクか外食へ行きモデルの事は忘れましょう。
大丈夫です、時期に解決策は出てきます。
ハイトマップを使う
ノーマルはハイモデルを作成せずとも、2Dベースでの作成も可能です。
(ミニガンやランチャーではほとんど使用しませんでしたが…)
上の画像はミーシャ、イリーナのボディースーツ部分ですが、
胸回りは勾配がある(無い娘もい…)上に、有機的な形状なのでハイモデルを作成するのが若干面倒です。
特段複雑なノーマルを作る訳でもないのでサクッと2Dベースで作成してしまいます。
(カーボン、革の質感もハイトマップを変換して乗せています)
※もしくは、Photoshopの有料プラグインである、"Quixel"内の"NDO"で済ませるのもありですね。
2Dベースでガリガリノーマルを盛るぜ!という場合は導入すると楽しそうです。
下記、ハイトマップの使い方ぐらい知ってるよ!という方は飛ばしてしまってください。
雑な画像ですみませんが、
基本的には50%グレーの地の上に、「へこみ(黒)」と「でっぱり(白)」を描いていきます。
上段の様に、描いたままを変換しても良いのですが、
それだと厚みをコントロール出来ない、シャープ過ぎるノーマルになる、という問題があるので、
レイヤー効果(光彩等)やぼかし等を使用しちょっとだけ工夫をしておきます。
効果の程に関してはおおむね↓の通りかと思います。
ところで、ハイトマップ変換時に使うプラグイン(フィルター)ですが以下の2つがメジャーでしょうか。
・NVIDIA Texture Tools (Normal Map filter) プラグイン配布先はこちら
※私のCC2015では、ツールを起動した途端Photoshopがクラッシュしてしまい使えませんでした。
CC2014だと一応動かせるようです。
・xNormal (Height 2 Normal)
どちらを選んでも結果はあまり変わりませんのでお好きな方をどうぞ(ただし、NVIDIA製の方が無駄に細かく設定できます)
余談ですが、CC2015から「フィルター」→「3D」→「法線マップ」が標準搭載されてました。
…が、イマイチコントロールに難があるので、上記の様なハイトマップ変換に使う、というよりは、
写真から即座にノーマルを作成するのに向いていそうです(Crazybumpの低機能版という印象です。)
ノーマルを生成したら、ハイモデルで作成したノーマルの上に別レイヤーとして乗せて合成します。
描画モードはオーバーレイにしておきましょう。
関わった仕事では慣例的に以下の画像の様にブルーチャンネルを無効にするのをよく見ますが、
利用用途に応じて適切な状態にしておきましょう。
※大抵ノーマルはレッドとグリーンの情報が重要ですのであまり意味は無いです、おまじないです。
※余談ですが、ハイモデルから焼き付けた場合、ブルーチャンネルには奥行き情報が格納されています。
レンダラーやゲームエンジンによっては重要視するかも、というレベルで私は考えてます。
(たとえばUE4に"ノーマルマップとして"読み込む場合、ブルーにアレコレ情報を付与してもエンジン側で圧縮の為に切り捨てられるようです。
設定を変更してBチャンネルを基に視差マッピングとかディスプレイスメント等として使うことも考えられそうですが…)
ツール上で確認する
ノーマルを作成し終わった、またはとりあえず確認しよう、という事でLTに戻って見映えを確認します。
(LTのPhongシェーダはノーマル表示に不具合があるので、DirectX11 Shaderを使っています。)
粗探しをする前に今のうちにライトを設置し、グリグリ回して「おー良いんじゃない?」という感じにテンションだけ上げておきましょう。
大抵孔明の罠ばりに不具合を見つけてテンションが下がりますので。
ハイモデルを調整→焼き付け→貼り付けて確認を納得が行くまで繰り返します。
特に不具合も無いよ!という運の良い方はそのままカラーやラフネス等のテクスチャ作成に移ってしまいましょう。
完成
ノーマルのみの解説なので、残るテクスチャ作成までは触れません。
(基本的にノーマルを調理して作るだけなので…)
PBRマテリアル用に、カラー(アルベド)、ラフネス、メタルネスを作成、
加えて、アンビエントオクルージョン、エミッシブの2点も作成してます。
(Sketchfabにも都度アップして具合を探ったりしてました。)
以上となります。
縦に長くてすみませんが、ここまで読んで頂きありがとうございました!
もし、ここが分からん、そうじゃねえよアホ!など、
感想、意見がございましたら、TwitterでもGmailでも柳々宛てにお知らせ下さい。
柳々 (yanagi*2)
[Gmail] yanagiya1@gmail.com