今日、OpenGL-1.2の拡張機能を少し知った。その中に、
「Separate Specular Color」という項目があった。即ち
「テクスチャの張られたオブジェクト上にスペキュラーカラーを表示させることで,
よりリアルなハイライトを可能にする」という拡張である。
おおお、これが欲しかった。
3Dテクニックうんぬん
のテクスチャマッピングうんぬんで、
テクスチャマッピングと同時にハイライトをリアルに表現するためには、
テクスチャはディフューズ(拡散反射)のみのシェーディングを行い、
スペキュラー(鏡面反射)は別に計算したものを加える(アルファブレンディング)と書いた。
OpenGL-1.1までの、「シェーデイング後の頂点色に対してテクスチャが合成される」
という仕様では、こうするしかなかったのだ。
しかし、OpenGL-1.2ではどうやら、まずディフューズシェーディング後の頂点色に対して
テクスチャが合成され、それにスペキュラー要素のシェーディング結果を加えて
描画してくれるようだ。
つまり、こちらで分けて描く必要がなくるのである。
何も考えずに普通にマテリアルを設定してテクスチャマッピングすれば、
綺麗なハイライトを描画してくれるという訳だ。
この間の 3D Fellows Conference 98 の行き帰りに
かみやん氏といろいろ話していて初めて
知ったのだが、Direct3Dでは最初からこのような仕様になっているそうだ(今まで知らなかったなんて...)。
私に言わせれば、今までOpenGLでこれが出来なかった方が不思議である。
明らかに必要な機能だからだ。うーんこれだと、glclockの -s 2 と、-s 3 は、
差が無くなってしまうぜ。わーいわーい。-s 3 にしても、遅くなるだけ...(^^;;
という訳で、今日はちょっと感激!