イラスト、モデリング、Unity、VR関連

unityとかblenderとかvr関連の作業メモ

Shader プロジェクション変換について

ShaderLab 定義済みの値と座標空間とその変換について - イラスト、モデリング、Unity、VR関連

の記事のプロジェクション変換についての追加情報を書く。

 

++w除算が行われるタイミング

Unityの場合、w除算はvertexシェーダ終了後に、返り値となる構造体の変数の内、SV_POSITIONのセマンティクスが与えられた変数に行われ、これはビューポートの座標となる。

(TEXCOORD0を付けた場合は、ラスタライザを経由し、[0,1]のスクリーン座標になる)

 

++w除算を明示的に行う場合

GrabPass等でテクスチャマッピングをする場合に使用

例えば、

【Unity】【シェーダ】GrabPassを使って屈折シェーダを作る - LIGHT11

では、

(samplingScreenPos.xy / samplingScreenPos.w) * 0.5 + 0.5;   

 という処理が行われている。w除算はビューポート座標(プロジェクション座標をw除算した後の空間をビューポートと呼ぶ)にするため、

*0.5+0.5は-1~1で表されるビューポート座標から0~1で表されるテクスチャ座標へと変換している

(屈折シェーダの場合は問題ないが、これだけでは上下が逆転するので注意)

☆PROJECT ASURA☆ [OpenGL] 『射影テクスチャリング』