と1命令で書けるのだ。 もちろん、GPUの命令セットにこの修飾子があるかどうかは別の話だけど、基本的にDirectXに対応したGPUならこの仕様にのっかってると考えてよいと思う。なので僕は基本的にはsaturateを使っていたのだけど、Unityのビルトインシェーダーのソースコードを見るとライティングの計算でsaturateではなくmaxを使っていたのである。 確かに、saturate修飾子がなければmaxの方が処理が軽いのはまちがいない。モバイルのGPUなんかはDirectXに対応する必要もないし、ひょっとしたらsaturate修飾子なんかないのかも知れない。 と言うわけで実験してみた。調べたのは、saturate(x) と max(0, x) と x を使った場合のパフォーマンスの違い。以下長くなるので、まず先に結論を。 結論: 基本的にsaturate(x)を使って問題ない。ほとんど