VertexShader 法線テスト+ダークカラー
物体に光を当てた反対側は、よくCGでは黒にしてしまいがちなのですが現実ではそういう事はほとんどないので、その色をダークカラーとして指定してみます。
「VertexShader 法線テスト」のVertexShaderをいろいろと編集してみます。
vsample01.vsh
//c0-c3 ビュー+透視変換マトリックス //c4 汎用固定値 //c5 平行光源向き //c6 光源色 //c7 ダークカラー // //v0 頂点の座標値 //v1 法線情報 vs_1_1 // バージョン命令 def c4, 0.0f, 0.5f, 1.0f, 2.0f // 汎用固定値 def c5, 0.707f, 0.707f, 0.0f, 0.0f // 平行光源向き def c6, 1.0f, 0.0f, 0.0f, 0.0f // 光源色 def c7, 0.0f, 0.0f, 1.0f, 0.0f // ダークカラー dcl_position v0 // 座標頂点宣言 dcl_normal v1 // 法線 m4x4 oPos, v0, c0 m3x3 r0, v1, c0 dp3 r0.w, r0, c5 // -1 < r0.w < 1 mad r0.x, r0.w, c4.y, c4.y // 0 < r0.x < 1 (r0.x = r0.w * 0.5f + 0.5f ) sub r0.y, c4.z, r0.x // r0.y = 1.0f - r0.x mul r1, r0.x, c6 // 光源色を設定 mad oD0, r0.y, c7, r1 // ダークカラー成分を加算
これを表示すると
今回は、光源の色を赤(1.0f、0.0f、0.0f)、ダークカラーを青(0.0f、.0.f、1.0f)にしてしています。
青は影なのでもっと暗い青の方がよいのですが、今回は解りやすいように明るめの青にしています。