今回はトゥーンシェーダの細かい調整をしていました。
僕のプログラムでは、トゥーンは放物変換で求めたUVとトゥーン用の
テクスチャを用いて表現していて、この放物変換でUVを求めると
1次元でトゥーンUVを求めずに2次元でトゥーンUVを求めるので、
より綺麗に表現できるようになるんですが。実はこれには一つ
やっかいな問題があって。ライトの裏側がなっている部分は
UVの明るい部分をまたいでしまうため明るくなってしまう訳です。
これの解決方法がt-potさんのサイトにのっていたので、
さっそく試してみたのが画像の右半分のものです。
左半分の画像はキャラの左腕が不自然に明るくなっていますが
右半分の画像ではライトの裏面の部分でもきちんと暗くなってます。
画像だとあまり目立たないと思うかもしれませんが、動いていると
ちらちらして見えて結構気になるんです、これ。
それで一応t-potさんのサイトにのっている方法を試してみて
無事解決できたものの、実はこの方法もまた限定な解決方法
でしかないんです。。t-potさんのサイトに載っていたのは、
分かりやすくいえば、「裏面だから暗くすればいいじゃない」的な
アプローチなんですが、それだと例えばテクスチャの暗い部分を
明るい色に変更してリムライティングのような表現をしようとすると
おかしなことになるわけです。ただ、リムライティング的なトゥーンを
やりたい場合はリムライティングのシェーダとトゥーンを併用して
組めばいいので別に問題ないかもしれないですね苦笑。
あとはHSV変換を使って影の色表現をしていたのを、単純な
式で表現したりしてました。というか、これをやらなかったら、
命令レジスタがいっぱいで放物変換の修正処理が入れれませんでした笑。