D-Creationへいらっしゃいませ。
ここではLightWave3D用プラグインやら変態絵やら変態妄言やら死ぬまでの暇つぶし的人生の進捗状況やらを垂れ流してます。

ファイルの扱い、リンクについて
プラグイン等のファイル自体の無断転載はご遠慮願います。
このサイトへのリンクは自由ですが、プラグインはバージョンアップなどでファイル名が変わるため、それらファイルへの直接リンクをする場合は注意してください。

管理人 : DHM
メール : dhm◎d-creation.sakura.ne.jp
(@を文字に直してください)
バナー

2010年10月29日

unReal Xtreme2 1.50 サンプル2 解説



シーンファイルダウンロード

使用している外部プラグイン
・unReal Xtreme2 1.50 beta

チェックポイント
・CelPainterのキー位置のコントロール

サンプル2はサンプル1をベースとして塗りとラインに不規則性を与えています。
サンプル1とはサーフェイスノード、ToonTracerの設定のみ変わっています。
ToonTracerはブラシサイズにプロシージャルテクスチャを貼ってコントロールしているだけなので説明は省略します。


・CelPainterのキー位置のコントロール
旧バージョンではCelPainterシェーダーを使用し、キー位置にテクスチャを貼ることで同様のコントロールができていましたが、今回はノードで同様の処理を行います。
以下が各サーフェイスのノード設定です。


右端の列の4つのノードはsample1同様のCelPainter、EdgeTracer設定です。
変化があるのは"unReal2::CelPainterNode2"の入力"Key 2 Position"と"Key 3 Position"で、この二つは色の明るい部分と暗い部分の境目となっているキーです。
このキー位置をテクスチャを使用してKey2は30%から70%、Key3は60%から90%の範囲で動かすことで不規則さを出しています。

まず、"Turbulence"ノードで黒から白のプロシージャルテクスチャを生成します。
それを"Color Scalar"ノードで1要素だけ取り出します。
これはsample1のハイライトでも使っていた方法です。
それを"Gradient"ノードの入力とし、"Alpha"を使用してキー位置に変換しています。
posted by DHM at 17:24| Comment(0) | TrackBack(0) | Tips

unReal Xtreme2 1.50 サンプル1 解説



シーンファイルダウンロード

使用している外部プラグイン
・unReal Xtreme2 1.50 beta

チェックポイント
・ノードを使用したunRealの基本設定
・確実にラインを表示させる部分のセットアップ
・SearchGroupIDを使用した髪の毛のハイライト表現


サンプル1はunReal Xtreme 1.50の基本的な設定を行っています。
CelPainter、EdgeTracerはシェーダーとノードの2種類のプラグインが用意されていますが、サンプルではノードをメインに使用していきます。


・ノードを使用したunRealの基本設定
以下がノードでCelPainter、EdgeTracerを使用する最低限の設定となります。


EdgeTracerの出力"SP Material"はSurfacePiercingの処理結果を出力するものですが、SurfacePiercingを使用しなければ入力"Base Material"がそのままスルーして出力されるので全てのサーフェイスにこの設定が使用できます。
CelPainter2ノードを使用する場合、出力が色なので標準ノードの"Make Material"を使用してマテリアルに変換してからEdgeTracerに接続してください。
サンプル1ではすべてCelPainter2ノードを使用しています。

これらの設定はプラグインのZIPファイル内、"NodePreset"フォルダ内にプリセットファイルが同梱されていますのでそれを読み込み、コピーして使用もできます。
ノードのコピーを行う場合はCtrl+左クリックで複数のノードをまとめて選択、コピーできます。


・確実にラインを表示させる部分のセットアップ
ToonTracerで安定したラインを描画させるには、服と肌の境目や、閉じた手の指と指の間といった確実にラインが発生する部分の設定を丁寧に行う必要があります。
肌と服の境目であれば、通常は異なるサーフェイスを割り当てるので、サーフェイス境界を使用すれば問題ありません。
しかし、人間の指は多くの場合、同一のオブジェクト、同一のサーフェイスで作成するため、そのままでは以下のように指の間には線が発生しません。


こういった場所に線を発生させるために、旧バージョンでは"法線の折り目"を使用していましたが、これは確実な方法ではなく、特にアニメーションをさせた場合にラインのちらつきの原因となっていました。
今回のサンプルでは、確実なラインを発生させるために"クラスタ境界"を使用しています。
クラスタ境界は、任意のポリゴンに名前をつけ、その名前が異なる部分に線を発生させます。
クラスタの作成にはモデラープラグインの"unReal::MakeCluster"を使用しますが、新バージョンでは新たにポリゴンのスケッチ色をクラスタとして使用できるようになりました。
実際にサンプルデータをモデラーで読み込み、ビューポートをスケッチ表示に切り替えるとクラスタを視覚的に確認することができます。
以下が指のクラスタ設定です。


指以外のグレーの部分はスケッチ色を"なし"に設定しています。
こうすることで指と指の境界線は描かれますが、指の付け根と手のひらの境目に余計なラインの発生を防ぐことができます。


同様にして髪の毛の房や、上唇と下唇、鎖骨の線もセットアップしています。



また、布の縫い目のような部分も、アニメ調のシンプルな表現であればクラスタ設定でモデリングを作りこまなくても表現できます。



・SearchGroupIDを使用した髪の毛のハイライト表現
髪の毛のハイライト、いわゆる"天使の輪"を表現するための方法として、専用のシェーダーやテクスチャの使用など様々な方法がありますが、今回はunRealの新ノード"SearchGroupID"を使用しました。
SearchGroupIDノードは、レイトレースを行って任意のグループIDを持つサーフェイスにヒットしたかを取得するものです。
事前の準備として、ハイライトの形状をモデルとして作成しておきます。


ウェイトマップはサーフェイス色に白から黒へのグラデーションをつけるための物です。
このサーフェイスにはEdgeTracerNodeで他のサーフェイスでは使用していないグループIDを割り当てます。
詳しいサーフェイス設定はサンプルモデルのサーフェイス"HairHilight"を参照してください。

このオブジェクトを髪の毛のすぐ外側を囲むように配置します。


また、見えてしまってはいけないのでオブジェクトプロパティでカメラから見えなくし、影もすべて無効にしておきます。


次に髪の毛側のサーフェイス設定です。


右端の列の4つのノードは他のサーフェイス同様のCelPainter、EdgeTracer設定です。
MakeMaterialノードの入力"Specular"に接続されている部分がハイライト用の設定です。
左から順に見ていきます。
まず、"Spot Info"はこの髪の毛ポリゴンのシェーディングを行っている現在の場所です。
"Item Info"は設定でカメラを指定しています。
この2つのノードからレイトレースの始点と方向を計算します。

"Subtract"ノードではカメラの座標からスポットの座標を引き算しています。
これでスポットからカメラに向かうベクトルが求められました。
"Normalize"ノードはベクトルの長さを1.0にするノードですが、とりあえずお約束として入れてください。
法線ベクトルなど、この長さ1.0のベクトル(単位ベクトル)は3Dの世界では頻繁に登場します。

レイトレースの開始位置はスポットの位置をそのまま使用します。

こうして完成した始点と方向を"unReal2::SearchGroupID"に入力します。
SearchGroupIDの設定パネルではサーチ対象のグループIDにサーフェイス"HairHilight"で設定したIDを指定しています。
また、"Base Color"には黒を指定します。
ここまでの設定を図にすると以下になります。


ポリゴンの法線ベクトルを使用せずにこのような計算を行ったのは、髪の毛がねじれている部分などに余計なハイライトが出ないようにレイの向きをある程度揃える必要があったためで、髪型によっては法線ベクトルをそのまま使用したり、ノーマルマップを使用したりと様々なアプローチがあります。

この計算とレイトレース処理が髪の毛の全てのポリゴン内で行われ、レイがハイライト用ポリゴンにヒットした場合はその色が、ヒットしなかった場合は"Base Color"に指定した黒が取得できます。
"Color Scaler"ノードではRGBと3つの要素をもつ色から1つの要素を取り出しています。
サーフェイス"HairHilight"は色がグレースケールになるように設定しているので適当にRの要素だけを取り出しています。
それを"Gradient"ノードの"Input"に入力、グラディエントの設定でハイライトの濃さや幅を調整して完成です。

ノードの接続で色が小数値に繋がったり、座標がベクトルに繋がったりしていますが、LWの内部ではそれぞれの単位が以下のように扱われています。
1.0 = 1m = 100%
また、色もUI設定ではRGBそれぞれ0から255で指定しますが内部では0.0から1.0となっています。
posted by DHM at 17:22| Comment(0) | TrackBack(0) | Tips

2006年11月17日

RC1変更点

・EdgeTracerのスプレッドシート対応
061117_001.jpg
やると言ってすっかり忘れてたんで今更対応。
LW7.5では使用できません。
独立ブラシ設定含むEdgeTracerの全パラメータをシーン編集のスプレッドシートで一括編集できます。
061117_002.jpg
ただ、色々あってエンベロープやテクスチャは編集できません。

・CelPainterのプリセット対応
061117_003.jpg
レイヤー編集パネルからプリセットシェルフにアクセスできるようになりました。
プラグインの全設定を保存するのではなく、レイヤーリストで選択されているグラディエントのみを登録できます。
プリセットから読み込んだ場合はそのグラディエントが選択位置に挿入されます。

・深度境界の「チェック境界」ポップアップにゼロ交差(Zero Crossing)追加
項目名自体も変わっちゃってますがポリゴンセットとかカスタムバッファで深度のチェック部分を制限してた項目です。
今回選択に追加されたゼロ交差は、本来の深度差検出の前にラプラシアンオペレータでゼロ交差をチェックして検出範囲の絞込みをかけるものです。
061117_004.jpg
深度変化の激しい部分のみに輪郭チェックが行われるようになるので、ポリゴンセットを使わなくても余計な線が出にくくなります。これをデフォルトで使って、どうしても対応しきれなかったらポリゴンセット作るのがいいかも。

・法線の折り目にも「ゼロ交差検出」追加
深度でいい結果が出たので調子に乗って法線にも追加しました。
が、こっちはイマイチでした。
とりあえず無いよりマシって程度です。
前のバージョンで追加された距離制限は忘れてください。気の迷いです。
posted by DHM at 00:36 | TrackBack(1) | Tips

2006年11月07日

beta21,5 変更点

・EdgeTracerに独立ブラシ設定を追加。
061107_001.jpg
これによってサーフェイス毎にブラシ設定を変更することができます。
ブラシ色やサイズなどそれぞれにチェックボックスがあり、そのチェックがついているパラメータのみ有効になって後はToonTracerのレイヤー設定がそのまま使われます。
また、ToonTracerのレイヤー設定には独立ブラシ無効チェックボックスが追加されており、レイヤー毎に独立ブラシの有無を設定できます。

ただし、この機能を使用する(独立ブラシパラメータの有効チェックがオンになっているサーフェイスが1つでもある)と、消費メモリが結構増えます。
ワーストケースで1.5倍くらいになるんですが、後述するバッファ分割設定で大抵の場合は軽減できます。

・ToonTracerのエッジレイヤー設定に深度チェック復活
紆余曲折喧々諤々の末に深度チェックが三度目の復活です。
殆どの場合は自動設定のままで問題ないと思いますが念のため。

んで、そもそも深度チェックってなんやねんって話ですが、例えば前述の独立ブラシを使用したとき、2つのサーフェイスの境界部分に線が発生したらどちらのサーフェイスに設定されたブラシを使えばいいのか?
というのを解決するためのもので、要は境界となる2つのピクセルの深度を比較し、手前にあるピクセルを優先するというチェックです。

深度チェックで選択できる値は4つ。
「自動判定」では独立ブラシと各ブラシパラメータのテクスチャの有無をチェックし、1つでもあったら深度チェックを行います。

「常にオフ」では深度チェックを一切行いません。
この設定のメリットは線のガタつき、ぶれが起きにくいこと。
これはポリゴンが交差している部分や非常に小さいポリゴンによる凹凸がある部分で深度チェックをオンにすると見られる現象で、線がガタガタになったり、細い線がぶれたりします。
デメリットは独立ブラシなどで意図した結果にならないことがあります。
これは深度チェックがオフの時は画面の左上から右下に向かってピクセルを走査して判定するためです。

「常にオン」では深度チェックを常に行います。
この設定のメリットは独立ブラシ等のパラメータが正しく取得できるのと線のズレが起きないこと。
線のズレというのはチェックオフの時は左上から右下に向かってチェックするので、特に斜めの線で最大1ピクセルの線のズレが発生します。
デメリットはオフで説明した線のガタつきが発生すること。
ただ、これは後述する制限距離の設定である程度軽減することができます。

「属性のみ使用」は、オンとオフの中間で、線を描画する位置はオフと同じで、独立ブラシ等のパラメータを取得するピクセルは深度チェックしたものを使用します。
メリットは独立ブラシ等のパラメータが正しく取得できるのと線のガタつき、ブレがでにくいこと。
デメリットは線のズレが出ることです。
061107_002.jpg

結局どの設定がいいかはシーンの状態やToonTracer設定によって変わってくるので、色々試すしかないです。
個人的には「属性のみ使用」をよく使います。
線のブレは線を太くすれば判りにくいので、2倍の太さのブラシで2倍の解像度でレンダリングして縮小とかして対処します。

・法線の折り目設定に距離制限追加
境界判定に使用される2つのポリゴンのボーン、ディスプレース、モーフ変形前の形状での距離をチェックして、閾値より離れている場合のみ判定を行います。
0mmで設定OFFになります。
あんまり使い道はないかも。

・新エッジ種別追加
新たに追加されたノードエッジは、ノードを使用して線を出すかのフラグを立てることができます。
ノードの入力値Flagは整数で、0以下で線が出ず、1以上で線が出るようになります。
unRealBufferノードと組み合わせれば他のエッジ種は全て再現できるくらい自由度は高いです。
試してないけどレイトレ系のノードを使用した輪郭検出とかもできるかも。

実用性は無さげだけどSobelフィルタを再現してエッジ検出してみたり。
061107_003.jpg
061107_004.jpg
シーンファイル
ATIのNPRサンプルを真似て周囲8ピクセルの法線と中央の内積を取った値をSobelフィルタに入れてます。

・オプションにパフォーマンス設定タブ追加
ToonTracerのオプションがごちゃごちゃしてきたのでタブ分けて色々追加しました。
レンダリング設定にはVIPERやTGA出力等の設定が入っており、特に変更はありません。
パフォーマンス設定にはレンダリング結果には影響の無い消費メモリ、処理速度に関係する設定が入ってます。
「カスタムバッファ1〜4」は旧バージョンにもあったカスタムバッファのピクセルサイズです。

「バッファ分割」設定はunReal内部で作成されるエッジ検出のための情報、エッジ描画バッファの設定を行います。
Autoではレンダリング解像度に応じて自動設定されます。
レンダリング解像度が低い場合は特にこれで問題ないと思います。
レンダリング解像度が2048*2048を超えるくらいの大きさではCustomで手動で設定することで消費メモリが軽減できる場合があります。

このバージョンではデバッグ用のメモリブロック表示チェックが残してあるので、これをONにすることで実際にどのようにメモリが確保されているかを見ることができます。(緑になってるブロックがメモリを消費している部分)
061107_007.jpg

・オプションにボリューム前処理追加
ToonTracerの処理をボリューメトリックプラグインの前に行うことができます。
061107_005.jpg
前と後との違いは、前だとHyperVoxelで作成した煙等との重ねあわせが綺麗にできます。
後だと逆にボリューメトリックの手前にエッジが描かれます。
シーンに応じて使い分けてください。

・LayoutGenericプラグイン「ShaderManager」追加
061107_006.jpg
EdgeTracer、CelPainter等のunRealシェーダープラグインを複数サーフェイスに一括追加、コピーができます。
上部のタブから追加、除去、コピーを選択し、その処理を行いたいプラグインをポップアップから選択します。
また、コピーの場合はコピー元となるサーフェイスも選択します。
コピー元選択ポップアップには、コピーしたいプラグインが設定されているサーフェイスしか表示されません。
最後にリストから処理の対象となるサーフェイスを選択して「実行」ボタンを押せば完了です。
リストにはシーン内の全オブジェクトのサーフェイスが表示され、ポップアップで選択しているプラグインがセットされているサーフェイスには頭に○がつきます。
また、処理不可能なサーフェイス、例えばEdgeTracerの追加モードで既にそのプラグインがセットされているサーフェイスなどは薄く表示されて選択できません。
コピーの場合はプラグインがセットされていないサーフェイスでも自動的にセットしてからコピーされます。

ただ、現在のバージョンではプラグイン除去は動作しません。
これはLWのバグと思しき現象で、プラグイン除去はされるものの、正しい終了手続きが内部で行われないためそのままレイアウトの操作を続行するとデータが壊れる可能性があるためです。
現象についてはサポートに確認する予定で、本当にバグなら9.2とかで修正されると思いますが8.5でも同じ現象が出ており、こっちが直る確率はテクザーがPS3でリメイクされることくらい低いので諦めが肝心です。

コピーについてもLW標準ではできない事を変態的な方法で無理やりやってるので実行前にバックアップは取っといたほうがいいです。
posted by DHM at 01:02 | TrackBack(0) | Tips

2006年10月02日

テクスチャ設定色々

セルシェーディングをする上で問題になるのはカラーテクスチャの設定。
白の陰色は青、黄色の陰色はオレンジ……といった単純な輝度減算ではできないカラー演算設定をしている場合は、同じカラー演算がテクスチャにも掛けられてしまいおかしな色になることがあります。

なわけでCelPanter上でカラーテクスチャを扱う上で思いついた方法を三つほど。

1.気にしない
陰色に変な色変換をかけていなければ普通にLWサーフェイスパラメータのカラーにテクスチャを貼って終了ってのが楽ですね。
ブロッサムの目はこの方法で、サーフェイスの自己発光が70%と高めで陰があまり出ないので気になりません。
061002_001.jpg
061002_002.jpg

2.キー毎にカラーテクスチャを設定
セルシェードはグラディエントのキー毎に色を設定してるのだから、テクスチャもキー毎の色を用意して貼ればいいって考え方。
061002_003.jpg
このPマークは明るい部分と暗い部分の2つのテクスチャを使用してます。
061002_004.jpg
また、今回のようにテクスチャをサーフェイスの一部分にデカールのように貼る場合はアルファ画像も別に用意します。

まず、下地の設定しているレイヤーを複製し、こいつのキーにテクスチャを設定します。
わざわざ複製しているのは、下地の色とレイヤーを分けることで調整を容易にするため。
複製しているのでキーの位置はそのままにして、それぞれのキーの色にテクスチャを貼ります。
続けて各キーのアルファ値を0%にし、テクスチャにはアルファ画像を貼ります。
こうすることでアルファが0%の部分は下地レイヤーの色が出てきます。
061002_005.jpg

今回のように一層だけの単純なテクスチャなら別レイヤーにしなくても下地レイヤーに直接テクスチャ貼ればいいんですが、一時的にテクスチャを無効にしたい場合なんかはレイヤー毎非表示にできるんで分けたほうが楽です。

この方法はキーの数だけテクスチャを用意しないといけないので面倒ですが、どんな複雑な色、模様のテクスチャでも対応できます。

3.アルファだけ使う方法
もし、貼りたいテクスチャが単色ならもっと楽な方法があります。
この方法ではアルファ画像だけ用意すればOKです。
061002_006.jpg

やはり下地レイヤーを複製し、キーの色をテクスチャとして使用したい色に設定します。
次に全てのキーのアルファに用意したアルファテクスチャを貼れば完成です。
061002_007.jpg

この模様はアルファテクスチャを合計3枚重ねています。
061002_008.jpg


2と3の方法を実際に使用したサンプルなんかを。
061002_009.jpg

シーンファイル061002_010.zip
posted by DHM at 00:00 | TrackBack(0) | Tips

2006年09月25日

たぶん玩具とかの発売はなさげなベルト

060925_001.jpg
こういうオブジェクトの場合は面取りされた部分を別サーフェイスにした方が楽です。

060925_002.jpg
こんな感じ
posted by DHM at 21:09 | TrackBack(0) | Tips

2006年09月24日

セルエッジ設定・基本編

ぶっちゃけプラグイン設定は実は簡単で、この場合だとエッジレイヤーは1つのみでオブジェクト境界、サーフェイス境界、法線の折り目、深度境界を有効にして法線の角度しきい値の調整と深度制限にポリゴンセットを使用しただけです。

肝心なのはサーフェイスの分割とポリゴンセットの分割。
まずサーフェイスはたとえ同じ質感の場所でも境界線を出したいところは別サーフェイスに分ける。
例えば頭のリボンは4つのブロックに分かれてますが、それぞれのブロックの境界線を確実に出すためにサーフェイスを分けています。
060924_001.jpg
わかりやすいように色分けしてます

同様に髪の毛も頭の部分とそこから伸びるモミアゲの毛、束ねた後ろ髪は別サーフェイスです。
前髪の部分は頭からポリゴンが繋がっているので分けていません。
もしガレージキットのように前髪別パーツな作りにしたならサーフェイスも分けておくと確実ですよ奥さん。

次にポリゴンセットの分割。
こちらは深度問題を解決するためのもので、深度境界判定をしなくてもいいポリゴンの塊をパーツとして登録していきます。
例えば頭のパーツは、頭の丸みのせいで外側の部分で深度問題が発生するのでポリゴンセットでまとめたいところ。
しかし、そのまま1つのポリゴンセットにすると前述した通り前髪が一体になっているため、本来は出てほしい前髪と頭の深度境界も出なくなってしまいます。
そこで頭と前髪を別のポリゴンセットにしています。
さらに前髪は7つの房に分かれているので、房同士の重なりにも対応するためそれぞれ別のポリゴンセットにしています。
060924_002.jpg
これも分かりやすいように色変えてます

サーフェイスを分けた場合と違い、ポリゴンセットを分けてもその境界にすぐ線が描かれるわけではなく深度判定が行われるので、深度しきい値を適切な値にしておけば余計な線が描かれることはありません。
北条鉄平を始末したときのレナさん並のやる気でバラしてください。
060924_003.jpg
指もこんな感じで分けてます

ここらへんをキッチリやっとけば8割方完成です。
グループIDは3つしか使ってなくて、それぞれ
0...目、まつげといった線を描きたくないグループ(強制排除グループ)
1...普通に線を描きたいグループ
2...眉毛のSurfacePiercingで描画したいグループ
としています。

実際のレイヤー設定はこんな感じ。
060924_004.jpg

前回の絵で肘のところの線がおかしいんだけどこれはどっちかってーとモデリングの問題で、二重間接で動かすように作った体を使いまわしてるのにボーンはモーションビルダーの標準的な構造にしちゃったんで綺麗に曲がってくれてない。
ウェイトとポリゴン分割見直さないと……
posted by DHM at 22:09 | TrackBack(0) | Tips

2006年08月30日

サンプル

たまにはサンプルなんかを。
060830_001.jpg
シーンデータ(LW9用だけどもしかしたら8でも開けるかも)
060830_002.zip

060830_003.jpg
ポットの色は一応3レイヤー使ってて、グラデレイヤーのキー位置にプロシージャルでノイズを加えることでなんか手塗りっぽい雰囲気にしてたり。
さらに2つに分けた青系レイヤーの間に紫の単純グラデーションを隠し味ではさんでみたけど隠しすぎで効果がイマイチ分かりませんでス。

線は単に太さにプロシージャル貼ってるだけ。

あとは床に落ちる影がシャープすぎて違和感あるけどこれは床のCelPainterいじるかイメージフィルタでどうにかすべきだったかもと今更気づいた。
posted by DHM at 00:00 | TrackBack(0) | Tips

2006年05月09日

ヴァーチャル窓際族

風邪ひいたり仕事に忙殺されたり色々あって今はやっと一段落。
待機任務で余裕ができたのでHairBladeにSasquatch向けのラインポリゴン化を追加したりしてます。

なんとなく実験でハッチングのサンプルなんかを
060509_001.jpg

シェーダーにラインのテクスチャを張ったレイヤーを複数作り、それぞれ角度を変えながら乗算で重ねてます。
060509_002.jpg

データはこちら
060509_003.zip

別のアプローチとしてはシェーディング情報をカスタムバッファ経由で取り出してToonTracerのペイントレイヤー使ってもいけますね。
posted by DHM at 20:06 | TrackBack(0) | Tips

2006年04月09日

深度境界の新機能

遅ればせながらbeta10で追加された深度判定制限の使い方について。

そもそも、ハイポリなモデルを使っているときに、線の太さを小さくしても線が細くならずに太くなったり汚くなるってことがありました。
その原因の一つが深度境界で、PixelFilter化で線のそのもののクオリティは上がったものの、線の描画判定については以前とさほど変わっていないもんで問題が残ってます。

深度境界は隣接するピクセルの深度の差からエッジの発生を判定しています。
もし、ポリゴン法線が視線に対して90度に近い状態になった場合、下図のようにポリゴンが完全に平面であっても深度の差は大きくなってしまうためエッジが発生してしまうのです。
060409_001.jpg
それを防ぐために現在の深度境界には判定を異なるポリゴンの境界部分でのみ行うといった制限を入れてあります。

しかし、ハイポリなモデルで視線に対して法線が90度近くを向く部分、例えば球や腕のような筒状の部分の外側なんかでは、ポリゴンが細かすぎて1ピクセル1ポリゴンとなってしまい、上記のようなポリゴン境界による制限が無意味なものとなってしまいます。
060409_002.jpg

これを防ぐには深度差のしきい値を上げるしかないけれど、そうすると出て欲しいところの線まで出なくなる……
そのために追加したのが判定制限で、ポリゴンセット又はカスタムバッファを使用して深度判定を行いたい部分を制限することが可能です。

具体的な使い方としては、カスタムバッファを使用する場合、ウェイトマップを使用するのが便利です。
モデラーでウェイトマップを1つ作成し、胴体は10%、上腕20%、下腕30%とウェイトをつけていきます。
別に10%刻みでなくても構いませんが変化量は統一しておくと楽です。
060409_003.jpg

ウェイトの設定が終わったら、EdgeTracerのカスタムバッファにグラディエントレイヤーを使ってウェイトマップをセットします。
この辺はたくさんサーフェイスがあると面倒ですがとりあえずコピペでがんばってください。
060409_004.jpg

最後にToonTracerでウェイトを設定したカスタムバッファを選択、しきい値を10%にすればOKです。

未使用時
060409_005.jpg

使用時
060409_006.jpg

また、ポリゴンセットを使用する場合はもっと簡単で、モデラーで胴体、腕、足など部分単位でポリゴンセットを分け、ToonTracerでポリゴンセットを選択するだけでOKです。

もちろん判定制限を使用した場合も深度しきい値は有効なのでこちらも適切な値に調整しておいてください。
posted by DHM at 23:20 | TrackBack(0) | Tips

2006年03月21日

CelPainterTips追加

以前のTipsでは他のシェーダーのスペキュラをベースのレイヤーとして合成してましたが、beta6の修正に伴ってスペキュラを使用して合成する方法をオススメします。

旧バージョンのCelPainterと組み合わせた具体例としては、最初に旧バージョンのCelPainterを置いて、ベースは置き換えモードで真っ黒に、スペキュラは異方性反射でグレースケールになるように設定。

んで、新CelPainterをセットしたらスペキュラレイヤーにSurface:Colorを追加、モードは通常のままでOKです。
スペキュラレイヤーを使用するとサーフェイスが透明でもスペキュラが正しく出るようになります。
なるはずです。
なったらイイナ……

060321_2_001.jpg
オブジェクトファイルはこちら

というかまだあんまり複雑な使い方してないから細かい検証までできてません……
つかってて出力が何か違うんでない?とか感じたら教えてもらえると助かります。
仕様で押し切る場合もありますが……
posted by DHM at 22:35 | TrackBack(0) | Tips

2006年03月17日

レイヤー編

続いて使えるレイヤー種について。
グラディエントは標準のセルシェードでおなじみですが、ベース設定については入力値が拡張されてます。
それがメインパネル上にある"ネガティブシェード"であります。
通常のシェーディングではライトのベクトルと法線の角度が90度以上の場合はライトの光が届いていないのでシェーディング値は0.0になってしまう所を、ネガティブシェードを使用すると180度までの値を取るようになります。

通常の場合
060317_001.jpg
060317_002.jpg
真横からライトを当てると当然中央から反対側はライトの効果が0、グラディエント0%の位置になります。

ネガティブシェードを使用すると
060317_003.jpg
060317_004.jpg
ライトの当たっていない側も0〜-100%の位置を取ることができます。

ただ、当然普通じゃない計算なので複数のライトを当てたときなどは意図しない結果になったりするので注意。

サーフェイスレイヤーはサーフェイスパラメータを取得するレイヤーで、今のところRawColorとColorが選択可能。
RawColorは普通にサーフェイスパラメータの色が取れます。
たとえば一番下にRawColorレイヤーを置いてその上にグレースケールのグラディエントを乗算で置けば
060317_005.jpg
060317_006.jpg
こんな感じで普通のセルシェーダーっぽくなります。

もうひとつのColorはCelPainter直前にセットされているシェーダーまでの計算結果の色が取れます。
ポットのサンプルにもあるようにBRDFシェーダーでスペキュラを計算させてグレースケールで出力。
060317_007.jpg
これを加算や覆い焼きで重ねればBRDFのスペキュラを使用できます。
060317_008.jpg
なもんで今回のCelPainterは機能控えめ、異方性反射だろうがアンビエントオクルージョンだろうが全部他人のフンドシで相撲取りまくれ!

説明の手抜きが加速してまいりました。
ライトレイヤーはColor、NormalizeColor、Radiosityの3つ。
Colorは通常のシェーディング計算されたライト色で、NormalizeColorはセルシェーディングのライト色計算になります。

さっきのサーフェイスのRawColorと組み合わせて
060317_009.jpg
こんな感じでライト色も乗算すると旧バージョンのセルシェーダーと同一の処理になるはず。
そこまでするなら普通に前のCelPainter使えばいいだけの話なんだけど。

最後にRadiosityはそのままラジオシティなんだけどシェーディングノイズ除去がきかないんで使い物になりませんでしたー

つづく!
posted by DHM at 01:14 | TrackBack(0) | Tips

2006年03月15日

説明とか言い訳とか逆ギレとか

マニュアルはだいぶ後回しになりそうなんでこのTipsカテゴリに説明とかバグの言い訳なんかをまとめていきます。

まずはCelPainterのレイヤーパネル
060315_001.jpg
PhotoShop等のレイヤーパネルに近いので独自の機能を説明すると

・キー制限
今回はキーの位置をエンベロープやテクスチャで変化させることができます。
そこで、キーが移動して隣のキーと位置が入れ替わった場合にどう処理するかを選択できます。
サンプルは赤から白、青へ変化するグラデーション。
060315_002.jpg
060315_003.jpg

で、こいつの赤のキー位置を下のようなプロージャルテクスチャで-100%から100%の範囲で変化させます。
060315_004.jpg

こいつのキー制限によるレンダリング結果の違いは以下のとおり。
060315_005.jpg
"None"だとなにも処理しないためキー位置が赤が全体に広がってます。
"Lower"だと下位のキーを超えることができないように制限されるため、白のキーのところで止まってます。
"Upper"だと青のキーの位置、100%までまで突き進むので真っ赤になってます。

ちなみにキー位置の変化はCelPainterパネル上での設定位置に対する相対値ではなくテクスチャの出力値がそのままキー位置になってしまうので、任意の範囲に制限したい場合は0%から100%の出力にしたテクスチャレイヤーの上にグラディエントレイヤーを追加して"Previous Layer"で任意の範囲に制限かけると楽です。
060315_006.jpg


お次は"テクスチャ"ポップアップで、これはそのレイヤーのテクスチャ処理を設定します。
ポットのキーカラーにプロシージャルの"Grid"を適用し、テクスチャ設定を変えてレンダリングしたのが以下になります。
060315_007.jpg
"3D"は普通のテクスチャ処理をします。
"2D"ではジオメトリ形状に関係なく平坦に貼られます。
ToonTracerのペンパラメータテクスチャと同じです。
"PaintMap"は旧バージョンのペイントマップ処理が行われます。

これらテクスチャ処理はマイクロポリゴンを書き換えて処理しているため、"3D"以外はグラディエントテクスチャの出力がおかしくなる場合があります。

次回は各レイヤーの説明の予定。
posted by DHM at 23:06 | TrackBack(0) | Tips

2005年07月09日

謎は全て解けた

ある程度対処できたと思ってたのにオブジェクトによっては未だにレイの貫通現象が頻発することが判明。
色々調べたら非平面ポリゴンの所はバリバリ貫通するみたい。
050709_001.jpg
四角ポリゴン使ってるとレイトレースシャドウに隙間が発生してたのも同じ原因だろうか……

という訳でアンチエイリアス使うときは三角ポリゴンにするかサブパッチ使いましょうということで。
050709_002.jpg

posted by DHM at 00:00 | TrackBack(0) | Tips

2005年05月30日

線の強弱

今回試した線の強弱のやり方なんかを。

基本はstrokeFXを使用して入力ソースに応じて太さを変えてます。
その入力ソースは何を使うかとなると、法線やジオメトリ値では運任せな結果になってしまって自由にコントロールできない。
そこでオブジェクトにウェイトマップを作ってやり、そのウェイト値を入力ソースにすれば任意に太さをコントロールできるはず。
というわけでまずはモデルにウェイトマップを設定。
アゴやヒジ、ヒザのように比較的急角度になる部分は線が細くなるようにウェイトを100%に、逆にまっすぐな部分は太くなるように-100%を入れたりしてますが結構いいかげんです。
050530_001.jpg

作成したモデルをレイアウトに持っていき、まずはサーフェイスの設定。
strokeFXの入力ソースにはウェイトマップは無いので、ウェイト値を別のサーフェイスパラメータに出力してやる必要があります。
今回選んだのはサーフェイス色。
サーフェイス色のテクスチャを開き、ウェイトマップのグラディエントを作成。
-100%で黒、100%で白になるように設定します。
050530_002.jpg

この状態で試しにレンダリングするとこんな感じに。
050530_003.jpg
また、線を出すためにEdgeTracerをセットするのも忘れずに。

あとはToonTracerの設定パネルを開き、ペン太さのstrokeFXを設定。
グラディエントの入力ソースに「レンダイメージの輝度」を選択し、キーを設定。
今回は0.0の部分で2.5px、0.5で1.5px、1.0で0.5pxに設定。
050530_004.jpg

あとはオプションで出力をアルファに設定、アンチエイリアスをx4にしてレンダリングすればウェイトに応じて強弱のついた線が出来上がり。
050530_005.jpg

ただ、この方法だとレンダリングイメージを入力ソースにしてしまっているので、このあとCelPainterをセットして再度イメージだけレンダリングしないといけないのが面倒。
スペシャルバッファが使えれば一番いいんだけど、今のLWではスペシャルバッファにテクスチャやエンベロープが無いのでなんとも……
シェーダーから書き込みもできないし、数も4つ固定だったりとなぜかここだけ5.6の頃の仕様を引きずってるようで使いにくい。
このへんは何とかできないかと思案中……
posted by DHM at 00:00 | TrackBack(0) | Tips