2009年1月9日金曜日

etc - ハイライト

ハイライトシェーダー
http://www.olm.co.jp/b/rd/research/notes/


最近、これをBlenderとリアルタイムで使えるようにしたいなーと思っていたのですが、

Pencil+
http://www.psoft.co.jp/jp/product/pencil/


こちらのPluginでは、ハイライトの形状を直接いじれるようです。

-------

理解した範囲で、適当な解説書いてみると・・

ハイライトシェーダ:(注意:結果の式から考えた直感的な解説に変えてます。違ってたらすまそ)
まず、普通にハイライトを出して、Unwrap済(出来るだけ正方パッチ)のテクスチャに投影したとします。そのテクスチャ座標をずらすと、ハイライトが良い感じに平行移動します。テクスチャ座標を回すとハイライトも回ります。というのが多分基本原理。で、実際実装するときはテクスチャ座標を直接いじるのではなく、接空間を使います。ついでにハイライトを特定の方向に引き伸ばしたり、頑張れば、分離させたり、四角くしたり出来ます。さらに、それらをキーフレームアニメーションできますと。

Pencil+:
特定方向に引き伸ばして、後はハイライトの形状を入力できるようにすれば、移動とか回転とかなくても、そこそこ良い感じになります、というアプローチ(多分。キーフレーム打つのは出来るのか不明だけど、説明書のUI見る限りでは出来そうに無し。

-------

という感じで、やはりハイライトシェーダのほうがおいしそう。

早速Blenderの標準機能で出来ないか検証中。マテリアルノードでは粘ってみたけど不可能っぽい。中間ベクトルいじれないので、出来たら奇跡だな・・。

→諦めた。orz


色々試したけど、なんのひねりも無くライトマップするくらいしか出来そうにないような気がする。
(真ん中のがもともとのハイライト、左のが動かして拡大したハイライト)

移動と拡大縮小にキー打ちくらいに、独自形状(荒さはテクスチャ解像度に依存)は出来るけど、コレだとライトの動きに追従してくれないからほとんど使えない。

せめてノードにキー打てれば、少しはマシになるかもしれないんだけど・・・。2.5でGUI上のパラメータは全てアニメーション可能になるらしいけど、ノードもいけるんだろうか?

ちなみにリアルタイム(自作プログラム)では、ノードにあたるシェーダのパラメータにキーを打てる上、シェーダ自体のON/OFFもキーを打てる。

4 件のコメント:

Gengo さんのコメント...

 ハイライトシェーダをテクスチャベースで理解しているところで、誤っているのでうまくいかないはずです。
 テクスチャでうまくいかないからというのがハイライトシェーダの出発点です。

 なので、テクスチャは使っていません。

 モデルのUV座標をベースにその場所の法線ベクトルを制御(加工)してハイライトの計算をするのが基本原理です。なので、どうモデルやライトが動いても破綻しません(基本的には、モデルの作り方によって手間が増えるとかはありますが)。

ではでは。

uimac さんのコメント...

どうも理解を間違っていたようです。ご指摘ありがとうございます。

ハイライト部分をテクスチャに投影(注:毎フレーム投影する)して、各頂点のテクスチャ座標をずらす方向を接空間(毎フレーム投影)から求めれば、何とかなるんではないかと思っていたんですが・・・

>モデルのUV座標をベースにその場所の法線ベクトルを制御(加工)してハイライトの計算をするのが基本原理

もちろん元の記事のほうは大変詳しく、記事の考え方に沿った理解はできたと思うのですが、これをそのままBlenderで実現するには、プログラムを書き換えるしかありません。

ノードで何とかするには、どうしてもこのような変形バージョンを考える必要があるし、中間ベクトルを用いた解説で分かるような人は、元記事を読んで理解するかと思います。

結局出来てなくて単なるライトマップで申し訳ないですが・・。

Gengo さんのコメント...

Blenderは詳しくないですが、法線マップを使うことができれば似たことができるような気がします。

uimac さんのコメント...

ありがとうございます。
コード書き換えも考えながら、もう少し粘ってみます。