AutoMetallicが2.0になったのでお知らせします!
カーグラP製作の日産 スカイライン GTRです!AutoMetallicを組み込んでいただきました! |
○AutoMetallicとは
去年の10月下旬くらいに配布した、自動車などのリアルな反射を実現するシェーダーエフェクトです。モデルに少し細工を
しておくことで、エフェクトを適用すると材質ごとに異なる反射強度を実現できます。
ちなみにその細工の手順について手短に説明すると
1. モデルの中心に「DP_Center」という名前のボーンを追加。
2. それぞれの反射強度の小数点以下の値で、反射の割合を指定。(30.25なら、反射は25%になる)
という感じです。
「反射の割合」という変な言葉を使っていますが、本当なら「反射強度」って言ってしまいたいところですが、モデルの反射強度(光源の光の反射の映りかたの大きさ)とごっちゃになるので、仕方なく言い換えています。
○前回からの変更点
さて、AutoMetallicが2.0になって何が変わったかというと・・・1. セルフシャドウOFFでも反射するように変更
これは今まで、遠くから見ると反射しなくなってしまっていたのを修正しました。入れないほうが軽いのかと思ってましたが、そんなことはなかったです。
2. 透明度0の面がフレネル反射で透明度が上がらないように変更
どういう意味かというと、このエフェクトではガラスなどの透明の面を斜めから見るとガラスの向こうが見えにくくなるのですが、これが悪さをしてモデルの見た目に支障をきたす場合があったので、修正しました。3. 色味の調整の設定を変更可能に
エフェクトファイルの先頭部分のパラメーターを変更することで、材質の色と、反射の色のコントラストを調整できるようになりました。これらの値を上げると、反射による映りこみで色が薄くなってしまうのを防ぐことができます。
デフォルトでは材質0.0、反射0.25に設定されています。
4. 面方向の検出をより正確に
要するに面の裏表の判断の仕方を変えたということです。難しいことを言えば、今までは視線と法線の内積から判断していましたが、VFACEという数値を使うことにしました。
今までの法線を使う方式だと、モデルによってはカーブしている部分でうまく裏表が判別できませんでした。
5. Plus版もちょっと変更
太陽光源が反射して映りこむようにしました。○ちょっと試してみたい人のために
わかってはいたんですが、やっぱり材質に設定するのって結構面倒です。モデルによっては100近い材質の種類がありますからね!(さすがにやりすぎだと思いますが)
そこで、とりあえずどんな感じに見えるのか試してみたい人のために、反射強度固定版を用意してみました。Metallic_10%、Metallic_20%、Metallic_90%がそれです。
これはセンターボーンを中心に反射マップを展開し、反射強度に関係なく反射します。
とりあえずミクさんとかに適用してみるとどんな感じか分かります。
あくまでお試しであるため、実用性はありません。
(実は最初からあったんですけどね・・・)
○ポストエフェクト版の使い方!!
さらに、今回はポストエフェクトを利用して反射を実現する「AutoMetallic_Post」を作りました!シェーダーエフェクト版と比べて、ちょっとだけ使い方が違うので、解説します。
1. AutoMetallic_Post.xまたはAutoMetallic_Post.pmxを読み込む
AutoMetallic対応モデルは白く反射して何も映っていない状態になります。そのため、次の手順で環境マップを指定する必要があります。
2. エフェクト割り当ての、「ReflectObjRT」タブから反射マップを指定する
ここで、各モデルに反射マップを設定します。反射マップを生成するには、生成するときの中心となるポイントを指定する必要があります。
先ほどまで何も映っていなかったのはこのためです。
デフォルトでは「指定なし.fx」となっていますが、反射させたいオブジェクトには「DP_Center中心.fx」または「センター中心.fx」「全ての親中心.fx」のいずれかを適用してください。
どれを適用するかはモデルのタイプによりますが、AutoMetallic対応モデルならば「DP_Center中心.fx」を、それ以外ならば最適なものを選んでください。基本的にはセンターか全ての親でも大丈夫です。(全ての親中心.fxは、厳密には全ての親ボーンより少し上が中心になります。)
これを適用した時点で、AutoMetallic対応モデルならば操作は完了です。
3. 「ReflectPowerRT」タブから反射の割合を指定する
ここで、各モデルの反射の割合を指定します。AutoMetallic非対応のモデルならばこの操作が必要になります。デフォルトでは「反射(Auto).fx」が適用されていますが、これは、AutoMetallicと同じ要領で反射の割合を指定する方法です。
これを、任意の「反射(X%).fx」に変更すると、それがその材質の反射強度となります。
サブセット展開でそれぞれの材質に適用すると、反射強度を材質ごとに変更することも出来ます。
必要な操作は以上です。
また、PMX形式ならモーフで、X形式ならばアクセサリの操作値で、反射の割合の増減や、反射の映り込みのコントラストなどの値をまとめて操作できます。詳しくはReadMeを読んでください。
またこのエフェクトは、シェーダーエフェクト版のAutoMetallicとは別での配布となります。
○ポストエフェクト版のメリット
ここまでの手順を見る限り、操作が余計にややこしくなっただけのように思った方もいらっしゃるかもしれません。しかし、以下のようなメリットがあります。1. 他のシェーダーエフェクトと重ねがけができる
おぼえている方もいらっしゃるかもしれませんが、前回公開したとき、「エフェクトの知識があれば、他のシェーダーエフェクトに組み込むことができる」と言いました。しかし実際に試してみたところそう簡単ではなく、特に最近のエフェクトにはサブエフェクト(?)的なものを利用しているものもあってうまくいかないものがほとんどでした。しかも、実は前述した「面方向の検出」に使ったVFACEが邪魔でこのままでは組み込めなかったわけです。
そこで、いっそポストエフェクトにして画面全体に上からかけてしまおうと考えたのがこのポストエフェクト版です。これによって、エフェクト割り当てのMainタブから好きなエフェクトをかけて、その上に反射させるということが出来るようになりました。
また、AutoMetallic_Plusのプラス部分に相当する「自動車シェーダー」を同梱しています。重ねがけを試してみてください。
2. AutoMetallic非対応のモデルに反射を適用しやすくなる
今まではシェーダーエフェクト版でも、一応サブセット展開してそれぞれの材質ごとに反射強度を指定することも出来たのですが、実はエフェクトの性質上、それをすると環境マップがエフェクトの数だけ余計に作られることになり、非効率で負荷が高かったわけです。先ほどのポストエフェクトの形式だと、環境マップはモデルに一つだけにしつつ、反射強度は材質ごとに分けられるので、負荷を低減することができます。
3. ポストエフェクトから反射の割合を調整できる。
これは前に言ったとおりでモーフまたはアクセサリの値から、反射の割合などのパラメーターを調節することができます。シーンに最適な反射表現を探ってみてください。
○ポストエフェクト版のデメリット
ここまではポストエフェクト版のいいところばかりを取り上げてきましたが、実はけっこう問題も多いです。1. ややこしい
自分で作ってる分には分かるからいいんですが、ここまでの説明を聞いてさっぱり分からなかった人もいると思います。こういう仕様になってしまうのもいろいろわけがあるのですが、説明するのも難しくて、どうしたものか迷っていますw
これほど複雑だと「Auto」ではないと感じる方もいらっしゃるかもしれませんが、この「Auto」って「自動車」の「Auto」の意味もあるので・・・。後付けではないですよ!あと、自動車以外に使用しても全然問題はありません。
2. シャギーが目立つ
目立つというほどでもないかもしれませんが、静止画にするとモデルの端辺りにシャギーが出ることがあります。これはアンチエイリアス関係の問題で、どうしても多少出てしまうのですが、まあ動画にするか大きなサイズで出力すればそれほど気になりません。
3. 透明の面にさえぎられると反射しなくなる
さほど目立ちませんが、ガラスの面などを通してみると反射がなくなってしまいます。車内からボンネットやサイドミラーを見ると問題が生じるかもしれません。どうしても必要な場合は、適宜シェーダーエフェクト版と使い分けてください。
4. 重ねがけの効果がさほど期待できない
「重ねがけができる」とは言ったものの、実は重ねがけの相性が良くないエフェクトが多数あります。例を挙げるならば「フィギュアシェーダー」「メカシェーダー」「G_Shader」「多機能シェーダー」など・・・どれも単体ではすばらしいエフェクトです。
これらに共通するのは「バックライト」を表現しているということです。じつはバックライトとはいっても、これは要するにやわらかい反射の表現であり、これにさらに反射を加えると、実に違和感のある絵になってしまいます。
そのため、重ねがけをして効果が得られるエフェクトは限られてしまいます。
5. パーティクル系のエフェクトとの相性が最悪
途中まで気づかなかったのですが、パーティクル系のエフェクトと重なってしまうと、反射だけパーティクル越しに見えてしまうという大きな問題が発覚しました・・・。白い煙などであればごまかしようはありますが、黒煙などとなるとかなり目立ってしまいます。
ポストエフェクトであるため、この性質は回避のしようがありません。
まあ、どうしても使用するのであれば、なんとかごまかして下さい・・・。
○ポスト映り込みエフェクト付き版!!!
その名の通り、ビームマンPの「ポスト映り込みエフェクト」をポストエフェクト版AutoMetallicに組み込んだものです。RLR(リアルタイムローカルレイトレーシング)という技術です。何が違うかというと、車の場合は、バックミラー等、反射している物体自身の一部がも映りこむようになります。
もともと、ポストエフェクト版は、シェーダーエフェクト版のAutoMetallicで、反射している本体が映りこまないのに違和感を感じた人がいたために作ったものです。
実際に使ってみると、かなり負荷が大きくなる割に、そこまでいい結果は得られない・・・という印象です。画面上の情報を使って擬似的にレイトレーシングによる反射を再現するものなので、どうしても実際のレイトレースとは違う部分が出てきてしまいます。
こちらも、ポストエフェクト版とは別に配布しています。
○ダウンロード
AutoMetallic ver2.0標準のシェーダーエフェクト版です。
AutoMetallic_Post ver1.0
ポストエフェクト版です。
AutoMetallic_Post+RLR ver1.0
さらに映りこみを追加したものです。とても重いです!
※今のところMMMには非対応です!!
※2015/04/29追記
旧バージョンを残しておいても混乱のもとになると思うので、非公開にしました。
RLR、ポストエフェクト版についても、やや利便性に難があるもので・・・。(特にパーティクルとの相性)
旧バージョンを引き続き使用していただくことは可能ですが、こちらから最新版をダウンロードすることをお勧めします。
○余談
今回のAutoMetallic、特にポストエフェクト版は、使い方がややこしかったりするところがあるため、後ほど動画も用いて説明しようと思っています。(↑の長い説明を隅々まで読む気はなかなか起こらないと思うので・・・)ポストエフェクトにも触れてみたことで、前よりもかなりエフェクトに関する知識も増え、HLSLのコードもどこがどんな働きをしているのか分かるようになって来ました。
今は、一括で2つのタイヤから発生する煙を調整することができるドリフト用のパーティクルエフェクトを作ろうと考えています。楽しみにしていてください!
また、以前AutoMetallicを公開してから、多くのAutoMetallic対応モデルが公開されていて、大変うれしい限りです!親作品登録の通知もたくさんありました。
元動画がニコニコ技術部のランキングでトップに出ていたこともあり、とても驚きました。(もっとも、タグが正しかったかどうかはわかりませんが・・・)
ただ一つだけ言っておくと、AutoMetallicはステージ向けではないのでその点は注意していただきたいです。ステージに使用する場合は、環境マップの生成中心と、ステージ内のモデルの配置に注意してください。(モデルがステージ全体に映ってしまうことがあります!)
さらに余談になりますが、来年は大学生として一人暮らしをします!。以前の動画のコメントで、説明文の白字に気づいて応援してくださった方、ありがとうございました!