2021年02月12日

matcapを使用して疑似的にライティングするシェーダー

OSLでmatcapでライティングするシェーダーを作りました。
このシェーダーを書く際にはdskjalさんのサイト( https://dskjal.com/ )を参考にさせていただきました。

light面用のmatcap textureとshadow面用のmatcap textureを使用して疑似的にライティングをするノードです。
実際にライトを使用する訳ではなく指定したターゲットの位置にmatcapのライト面側が向くようになります。
matcap_front_001.jpg

matcap_back_001.jpg


matcap_target_001.jpg


blenderで作ってますがOSLが使えるレンダラーなら使用できると思います。
各ソフトによって調整は必要ですが。
例えばmayaだとincomingベクターがblenderと逆になるので-1を乗算する必要があります。

blenderでOSLを使用するにはRenderEngineをCyclesに設定してOpenShadingLanguageにチェックを入れます。
cycles_001.jpg

こちらからzipファイルをダウンロードして下さい。
blenderシーンと各種データが入っています。
matcap_using_target.zip

配布しているblenderファイルの説明です。

入っているオブジェクト類
blender_objects_001.jpg
matcap_sphere:matcapマテリアルが設定してある球体です。
Target:matcapの向くターゲットです。
Cube_for_cast_shadow:影を落とすテストの為のオブジェクトです。


matcapマテリアルの説明
matcap_node_description_001.jpg

普通のmatcap用ノード:所謂普通のmatcap用のノードです。使用する場合はResultをMaterialOutputに接続して下さい。
matcap_001.jpg

matcapノードパラメーター
matcap_node_001.jpg

本体はScriptノードでmatcap_blender.oslというoslファイルを読み込んでいます。
FileTex:matcapに使用する画像のパスを拡張子まで入力します。絶対パスでも相対パスでもどちらでも大丈夫です。
ImageTextureノードは使用できないので注意して下さい。
Gamma:画像のガンマ値です。sRGBは0.4545、Linearは1.0です。必要に応じて色の調整等に使用して下さい。

Textureパス設定用ノード:matcapに使用するテクスチャのパスを設定します。
filePathSelノードパラメーター
filePathSel_001.jpg

本体はScriptノードでfilePathSel.oslというoslファイルを読み込んでいます。
このノードはTextureのパスを6個までストアしておけるノードです。
Numberで選択されているTextureパスをoutputします。上から1〜6です。
正確にはstring型データをoutputするので文字列ならなんでもストアしておけます。expressionとかにも使えるかも。

ResultをmatcapのfileTexに接続します。
filePathSel_002.jpg

matcap_node_description_002.jpg
配布ファイルでは上側のfilePathSelにLight面用テクスチャ、下側にShadow面用テクスチャを設定しています。

Targetを使用したmapcap用ノード:指定したターゲットの方向にLight面側が向くmatcapです。
matcap_using_targetパラメーター
matcap_using_target_001.jpg

本体はScriptノードでmatcap_using_target.oslというoslファイルを読み込んでいます。
FileTexFront:Light面用のmatcapに使用する画像のパスを拡張子まで入力します。絶対パスでも相対パスでもどちらでも大丈夫です。
FileTexBack:Shadow面用のmatcapに使用する画像のパスを拡張子まで入力します。絶対パスでも相対パスでもどちらでも大丈夫です。
Gamma:画像のガンマ値です
AreaFront:Light面のmatcap画像を拡大します。疑似的にライトの強度が強くなるような表現が出来ます。画像の端が切れるので1.0未満には出来ません。1.0〜2.0が有効範囲です。
AreaBack:Shadow面のmatcap画像を拡大します。画像の端が切れるので小さくは出来ません。画像の端が切れるので1.0未満には出来ません。1.0〜2.0が有効範囲です。
Threshold:Light面とShadow面の境界位置を調整します。0.5が中央位置です。有効範囲は1.0〜0.0ですが、Smooth値が入っているとその差分は増えます。
Smooth:境界のボケ幅です。



FlattenNormal:1.0に近くなる程matcapの計算に使用する法線情報がflatになります。
1.0で完全なflat面になります。
主にToon系モデルで鼻や口周りに不要なシェーディングが出るのを防ぐ為に付けました。
マスクテクスチャを接続して部分的にをコントロールしたり、顔のマテリアルに少量数値を入れて不要なシェーディングを出にくくしたり出来ます。



LightLocation:matcapの向くターゲットの位置情報を接続します。
Targetの位置情報を取得するノード:指定したターゲットの位置を取得するノードです。
matcap_target_position_001.jpg
本体はVectorMathノードのmultiply使用しています。
Driverを追加してTargetのX,Y,ZのWorldSpaceLocationを取得しています。
これをmatcapのLightLocationに接続しています。

Shadowマスク用ノード:キャストシャドウ用のノードです。
matcap_target_shadow_mask_001.jpg

Scriptノードのshadow_mask.oslでキャストシャドウの情報を取得しています。
matcap_target_shadow_mask_002.jpg
light_location:シャドウを計算する光源の位置を接続します。基本的には他のLightLocationと同じ物でいいです。
ShadowThreshold:シャドウの境界位置です。OSLのTraceShadowの仕様上0.0にするとブロックノイズの様になってしまうので0.1〜0.2がお勧めです。(OSLのTraceShadowはポリゴンのスムースを計算できない)



AmbientOcclusinマスク用ノード:凹み部分を暗くしたい場合に使用するノードです。
matcap_target_AO_mask_001.jpg
使用する場合はMixノードのColor2にmatcap用ノードのOutColorを接続してこちらのMixノードのOutColorをMaterialOutputのSurfaceに接続して下さい。
matcap_target_AO_mask_002.jpg
タグ:Blender
posted by KAZZ at 01:21| Comment(0) | TrackBack(0) | Free Model Library

2015年09月23日

AEscript:Fringing_maker

パープルフリンジとかを作るスクリプトです。

fringing_maker_main.jpg

Fringing_maker_v01.zip

フリンジを作りたいレイヤーを選択してスクリプトを実行して下さい。

fringing_maker_01.jpg


スクリプトを実行するとこんな感じにレイヤーが出来ます。

fringing_maker_02.jpg

それと新しいコンポが4つできます。
こちらは素材として使っているのでいじらないで下さい。

fringing_maker_03.jpg


5つある調整レイヤーでコントロールします。

"G_Blur_control"
グリーンチャンネルのブラー量です。

"B_Blur_control"
ブルーチャンネルのブラー量です。

"R_Blur_control"
レッドチャンネルのブラー量です。

パープルフリンジを作るならBチャンネルとRチャンネルにブラーを入れます。

"Exposure_control"
このスクリプトは画像の明度の高い部分にRGBチャンネルのブラーをかけるスクリプトで、その明度の範囲を調節します。

"Gamma_control"
同じく明度の範囲の調整です。こちらの方がコントロールしやすいです。


元々パープルフリンジを作るためのスクリプトですがレッドフリンジやらグリ−ンフリンジなんかも作れます。

posted by KAZZ at 21:10| Comment(0) | TrackBack(0) | AEscript

2015年02月02日

スクリプトテスト

ブラーよりもディストーションの方が使いやすいかも。



posted by KAZZ at 04:10| Comment(0) | TrackBack(0) | AEscript

2015年02月01日

スクリプト作成中

blur_test_001.jpg

こういう虹色?になるブラーのAEscriptを作成中。
全自動化するとなるとかなり面倒・・・。
posted by KAZZ at 23:54| Comment(0) | TrackBack(0) | AEscript

2015年01月06日

AEscript:グローを作るスクリプトv03

以前作ったグローを作るスクリプトを手直ししました。

今回は使用するレイヤー数と減衰率を調整できるようにしました。
これで付けたかった機能は全部付けれたのでこのscriptの更新は終了。
なかなかいい勉強になりました。

使用方法はベースとなるレイヤーを選択してスクリプトを実行してください。

150106_001.jpg


すると使用するレイヤー数を聞かれるのでグローに使いたいレイヤー数を入れてください。

150106_002.jpg

6〜8枚ぐらいあれば十分と思います。

入力するとレイヤーがコピーされ、調整レイヤーが6枚出来ます。

150106_003.jpg

Blur_controlレイヤはブラーの量を調整します。
Brightness_controlレイヤは明るさを調整します。
Saturation_controlレイヤは彩度を調整します。

Blur_Attenuation_rateレイヤはブラーの減衰率を調整します。デフォルトは2.0です。
基本2.0でいいと思いますが、レイヤーの数を多く使いたい時は低くした方がいいです。

150106_004.jpg


Brightness_Attenuation_rateレイヤは明度の減衰率を調整します。デフォルトは0.8です。
これも基本0.8のままでいいと思います。
0にするとエラーを起こします。すいません・・・。1.0にすると減衰なしになります。

150106_005.jpg


Saturation_Attenuation_rateレイヤは彩度の減衰率を調整します。デフォルトは0.8です。
1.0にすると減衰なしになります。

150106_006.jpg

Attenuation_rateレイヤ類はスライダーではなくて数値入力していただいた方が調整しやすいです。


AEscript_150106.zip

posted by KAZZ at 01:43| Comment(0) | TrackBack(0) | AEscript

2014年12月30日

AEscript:デュレーション、アウトポイントの変更

・選択アイテムのデュレーション変更

選択したコンポジションのデュレーションを変更するスクリプトです。

141230_001.jpg

デュレーションを変更したいコンポジションを選択してスクリプトを実行してください。
複数選択して処理できます。


・選択しているレイヤーのアウトポイントをデュレーションに合わせる

選択したレイヤーのアウトポイントをコンポジションのデュレーションに合わせます。

141230_002.jpg

アウトポイントを変更したいレイヤーを選択してスクリプトを実行して下さい。
複数選択して処理できます。

141230_003.jpg


・選択アイテムのデュレーション変更+アウトポイント変更

選択したコンポジションのデュレーションを変更し、さらに中のレイヤーのアウトポイントを変更したデュレーションに合わせるスクリプトです。

デュレーションを変更したいコンポジションを選択してスクリプトを実行してください。
複数選択して処理できます。


AEscript_141230.zip

posted by KAZZ at 04:59| Comment(0) | TrackBack(0) | AEscript

2014年12月17日

AEscript:グローを作るスクリプトv02

以前作ったグローを作るスクリプトを手直ししました。

今回の物は彩度もコントロール出来るようになりました。

1412117_003.jpg

あと明度調整の挙動を修正しました。

使い方はベースとなるレイヤーを選択してスクリプトを実行してください。

1412117_001.jpg


実行するとレイヤーが7個と調整レイヤーが3個出来ます。

1412117_002.jpg


Blur_controlレイヤーのスライダーでブラーの量、Brightness_controlレイヤーのスライダーで明るさの調整、Saturationレイヤーのスライダーで彩度の調整が出来ます。
ブレンドモードは適当に調整してください。

一応実行前にはシーンを保存しておいてください。


glow_maker_v02.zip

posted by KAZZ at 01:27| Comment(0) | TrackBack(0) | AEscript

2014年12月09日

AEscript:フッテージのアルファモードを変換

選択フッテージのアルファモードを変換するスクリプトです。

簡単なスクリプトですが割りとよく使います。
launchPadなんかに登録してワンクリックで使える用にしておくと便利。

launchPad_1208.jpg

いちいちフッテージを選択→右クリック→フッテージを変換とかしてると面倒ですからね。

使い方は変換したいフッテージを選択して実行するだけです。
複数選択してもOKです。

images_1208.jpg

AEscript_141208.zip

launchPad用アイコン付き。
posted by KAZZ at 02:59| Comment(0) | TrackBack(0) | AEscript

2014年12月04日

AEscript:グローを作るスクリプト

コンポジター地獄行き!さんとSHIZLOGさんの記事を参考にグローを作るAEscriptを作ってみました。

glow_maker_v01.zip

グローをかけたいレイヤーを選択してスクリプトを実行して下さい。

glow_01.jpg

実行するとレイヤーが7個と調整レイヤーが2個出来ます。

glow_02.jpg

Blur_controlレイヤーのスライダーでブラーの量、Brightness_controlレイヤーのスライダーで明るさの調整が出来ます。
ブレンドモードは適当に調整してください。

スクリプト自体はあんまり綺麗な作り方していないですので、実行前にはシーンを保存しておいてください。

追記:このスクリプトを使う際は、新規コンポジションにグロー元素材を入れてこのスクリプトを実行し、グロー素材としてメインのコンポに乗せるみたいな使い方をしてください。いろいろレイヤーがあるコンポジションで実行すると不具合がおきると思います。
posted by KAZZ at 02:56| Comment(0) | TrackBack(0) | AEscript

2013年08月19日

VRay IrradianceMapの検証 11

今回はDMC samplerのNoiseThresholdの検証。

サンプル値の許容限界だそうで、値が小さくなるほど条件が厳しくなりサンプル数が増える。

ノイズが出そうなシーンを作って違いをチェックしてみた。







1.0だとレンダリング時間は12〜10秒。
かなり汚い。

0.1だとレンダリング時間は13〜11秒。
若干ノイズは減ってる。

0.01(デフォルト値)だとレンダリング時間は19〜16秒。
0.1に比べるとかなりノイズは減ってる。

0.005だとレンダリング時間は22〜19秒。
若干減ってるけど0.01の時とそこまで大きな差はない感じかなぁ。


0.001だとレンダリング時間は29〜25秒。
0.005と比べてもかなり滑らか。


NoiseThresholdは分かりやすくノイズが減るし、レンダリング時間も増えますね。
DMC samplerはVRayのぼかし系の計算全てに影響するので実際はもっと劇的にレンダリング時間が増えるはず・・・。

DMC samplerは全体に影響を及ぼすのでチェック用のプリセットとファイナル用のプリセットを用意しておくとかがいいのかも。
posted by KAZZ at 04:03| Comment(0) | TrackBack(0) | 実験