Tag: ToonInk 初音ミク レンダリング RenderPass 出力パステンプレート OpenEXR トゥーンシェーダ XSI日記
1280x720でレンダリング
- マシンスペック
AMD Athlon64x2 5600+
メモリ4GB
WindowsXP sp2 professinonal
ポリゴン数63302
サブディビジョンレベル2でレンダリングするので
101万ポリゴン
XSIINKシェーダ
XSIはインク重いとか各所で聞きますが
別にそんなことは無い、はず。
タイトルが (´Д`)<正しい使い方
という表現が少しきな臭い感じですが
許してください。
正確には
兎に角軽くしよう!という意図です。
インクが重い謎
旧ミクのレンダリング画像。
多分これ一枚で10分はかかってるというすさまじい重さでした。
他のマテリアルとの相性がめちゃくちゃ悪いようです。
ソレは、ライティング、
レンダリング設定、各モデルに刺さっているノード
インクには直接関係無い部分にまでソレは及びます。
間違ってもエリアライトなどと
一緒に使うと途方も無い時間待つことに。
予想なんですが、
マテリアルがあるとわざわざインク計算する必要があるのか
丁寧に見に行ってる感じです。
仕様上、いろんな設定ができる
XSIINKならではの特性なので
きな臭いこと言わないようにがんばって・・
それを理解して上手く付き合えばいいのです。
一体どんな仕組みになってるのかはさておき
兎に角INK描画の邪魔になるものは一切削除!
というのが趣旨になるというのが
現状の解にしてます。
レンダリングなので、
コンポジット前提にします。
レンダーパスを新規で取り出して
パスの中にあるカメラオーヴァーライドに
ToonInkLens
を設置します。
兎に角軽くするためには余計なものをすべて切る
TonnPaintandHost
は複合シェーダです。
カラー情報などの無駄な計算が入るので
使いません
インクが出現する角度は、ToonInkLens
で大まかの設定をしておいて
最小限のToonHost
で個別に調整という方法をとります。
。
カラーと一緒にレンダリングしたい場合は
パスで分けたりオーヴァーライドして
実験用として割り切るとかするのがよさそうです。
パス、マテリアル設定
パーティションでマテリアルグループを作ります。
- Background_Objects_Partition
黒つぶしのみ、所謂ToonLens
のグローバル設定依存です。 - Chnge_Spred
エッジの太さ、エッジが出現する閾値を変更したToonHost
マテリアルグループ - Face
顔専用パーティション。バーテクスカラーで閾値制御 - Hair
髪専用、ディレクション閾値を1,5にして無闇にエッジが出ないように制限。
つなぎ目をグループ3にして、髪の毛同士ではあまりエッジが出ないように調整。
ミクは髪の毛多いのでアウトラインやらにちょっと出るだけで十分と判断です。 - Skirt
ヒダ部分にある程度エッジが出てほしいので閾値を個別調整です。
差し込むのはSurfaceのみ
Background_Objects_Partitionの詳細説明
エッジ発生角度、
閾値20で問題ない箇所は
ColorShare
ノードで
ブラック+アルファで塗りつぶします。
コンスタントは駄目です、
こっちのほうがシンプルで
レンダリングが軽いです。
色のみを扱うという超シンプルノード。
インクは白だから黒で塗りつぶし。
背景も黒です。
インクの設定に背景を設定する項目がありますが
レンダリングが重くなるだけなので使いません。
コンポジットするとき反転させてやればいいのです。
インクを黒は駄目です。
透過が対応して無い
画像ビューワーで、
素材確認時泣きを見る羽目に。
そうでなくてもデフォルトで
透過表示してくれる気前の良いツールは・・
Faceパーティションの詳細説明
顔などは微調整が必要。
インク発生の閾値を変更してやるために
ディレクションなどを変更しますが
鼻周りとか、あご周りはもっと丁寧にエッジを操作したいものです。
なので、
VertexColor
で無理やり発生をおさえてやりました。
コレで、鼻のラインに嫌な線画でないようにしたり
あごに出てほしいラインが出やすくなります。
ただ、塗りで調整すると
弊害として汚いエッジが出やすいです。
が、この方法は比較的楽なので採用。
レンダリングオプション
何も弄って無い状態で
24s56
- 2次レイ-深度を切る
深度、反射、屈折、結合・・今回のINK描画に関係ないので切ります。
21s76
軽くなった。 - タイルサイズ128x128に。
20s93
同じシェーダつかってる場合一気に計算したほうが速いという理屈。
影パスなどもタイルサイズは128.
その理由はJunki The Junkie's JunkyardさんのToon_Ink_Lens は重い参照
コメント欄にて、肉団子さんとジュンキさんとのやり取り参照です。
- 影も切る
20s7
ライトあるだけで重いのでパーティション分けて撲滅、
またはオーヴァーライドでプロパティからライトOFF
ひとまずレイヤー分けしてレンダリングオフにしてみた。
シャドウタブでレイトレース切ったりシャドウマップもすべてOFFにしてみたり。
- エイリアシングも、ディティール問わなければ 最小最大をレベル-1〜2にすると劇的に軽い。
15s7
「0〜2」→ 「-1〜2」
劇的に軽い・・
エッジが少しちらつくので
ガウスを3→3.2とかでちょいとぼかしいれて調整してみる。
まとめ
一番効果があるのは、
やはりサンプルではあります。
でもちりも積もると山になります。
不要なものはすべて切ってやる必要があります。
大きい解像度でレンダリングして
コンポジット時、縮小したほうが
荒も無いし綺麗な気がします。
そうすることで無くなるディティールやら
不利な点はまだ未解明ですが・・
まあ当然ケースバイケースです。
インクの線(スプレッド)を太くしたりして対応、かな・・
ToonInkLens
以外の方法でインクを出す。
- カメラインシデンスを0.98.
ぼかしを0.95まで絞ったやつをインク代わりにもしたり・・
(角ばったものには効果ないですし角度によっては使い物にならない)
- リアルタイムシェーダー/トゥーン・シェーダーの使い方
これでエッジを出せば0秒レンダリングだったりしますね。
大神などで利用されてる手法
ポリゴンメッシュを複製し、法線を反転させる等。
ゲームモーションブログさんで紹介されていたりします。
メタセコイアでモデリングされてる人は
この手法をたまにみかけるでしょう。
かにひらさんの日記もどきにおいてあるモデルなど参考になります。
色々工夫して目指せ1枚10秒以内。
今回私が想定してる
コンポジットでのインク素材は、
40%くらいの濃さでラメラメのカラーに乗算するので
特別ディティールが綺麗じゃなくても良いのです。
でも、
完全トゥーンレンダリングするのであれば
インクの線は可能な限り綺麗にしたいところです。
でも、重いと話にならない時もあるので
こういった調整方法は頭に叩き込んでおくのは悪くなさそうです。
突き詰めると、
あんだけレンダリングに時間かかってたのは
なんだったんだろうと思い直すくらい軽くなります。
兎に角ポイントは、
インクがでる場所以外は
「全部撲滅」すること。
余談、出力パステンプレートについて
レンダリングするたびに連番画像が上書きされるので
チャンネル出力は
[Scene]_[Pass]\[Pass]_[Date]_[Time]\[Scene]_[Pass]_[Framebuffer] 直訳@シーンネーム_Passネーム/パスネーム_何年何月何日_レンダリングはじめた時間¥シーンネーム_パス名_フレームバッファ
こんな感じに設定してみました。
Framebufferが余計なきがしますが〜
今後の汎用性考えてこれで統一。
突然素材切り分けたくなっても安心。
今日日HDD容量は腐るほどあるので
レンダリングするたびに時間ごとにファイルが生成されたほうがいいよ!
さて、これで間違えてファイル上書きしちゃうことが無くなる。
出力パステンプレート知らず、
フルパス入力してしまってると
勝手にユーザーフォルダつくって
其処にRenderPass作られるのが切ないんです。
ちゃんと設定を・・!
シーン名規則としては
MIKU02_PVTITLE_CUT00
こんな感じに保存します。
フォーマットはpng。
SoftImagePic
とはさよならです。
素材人に渡すときXSIユーザー同士なら良いんですが・・
Picの利点は黒部分だけ圧縮率高いそうです。
聞いただけで検証してません。
容量に関して、今のご時世HDDは十分容量あるですし、
Adobeからは迫害されるわで
コレだけ扱いが悪いと
・・pngなら透過もできるし
WindowsXP標準のビューワでも見れるので便利。
でも最近
OpenEXRに注目してます。
HDRIだと明度補正が綺麗にできるのと、
各フレームバッファ?レンダチャンネルを
保存できるなんてすごく便利じゃないですか。
でもFxTreeみてると、
OpenEXRの画像解体できないんですが・・
ちゅうかXSIはどうやってそれらのレンダリング素材をコンポジットする設定があるのか分からん。
単なるHDRIとして使えと?うーむ・・・
調べたのですがやり方がわからないです。
コンポジットするとき、1枚にさまざまなレンダチャンネル保存できたら
一元管理しやすそうなのにな。
・・蛇足すぎましたね。
添付ファイル:





