3D エンジンにライティングを実装していますが、ライティングの計算方法に問題があることを発見しました。コンバイン シェーダーでは、ディフューズ カラーとライティングの計算を取得します。
return diffuseColor * (diffuseLight + ambient);
私が知る限り、これが標準的なやり方です。しかし、たとえば、色が 0,1,0 で、光が 1,0,0 の場合はどうでしょうか。(この例ではアンビエントを無視します) 結果は 0,0,0 になります。しかし実際には、純粋な緑色の紙切れに赤みを帯びた光を当てると、黄色に変わるはずです。または、少なくとも黒ではありません。
他のゲームはこの問題をどのように解決しますか?