ARTICLE三次ベジェ曲線の最接近点(近似二次ベジェ曲線を利用)HOMEUnity法線マップをオブジェクト空間へ変換しシェーディング法線マップをオブジェクト空間へ変換しシェーディング2018.11.14UnityshaderAdvertisement視差マッピングシェーダを作成する際に、反射光等の計算を行いました。Shaderで法線マップと変換したライトベクトル等で反射を計算しました。ここでふと、全てのベクトルをオブジェクト空間に変換して計算しても当然同じ結果が得られるはず、と考え新たにシェーダを作成しました。shader内でライトベクトルと視線ベクトルを接空間へ変換し、それらをもとにハーフベクトルを求めています。shader内で使用し、陰影や反射光を計算しています。col;}ENDCG}}}実行結果ランバート反射とBlinng-Phongの反射が合わさった結果となっています。shader内で法線マップをオブジェクト空間へ変換するために必要な接ベクトル及び従法線ベクトルを取得しています。ライトベクトルと視線ベクトルをオブジェクト空間へ変換しています。shader内でこれらのベクトルから法線マップより得られる法線ベクトルを接空間からオブジェクト空間へ変換し、計算を行っています。接空間で計算した場合と逆の結果となってしまいました。左手座標系の違いによるものでした。この座標系の違いにより従法線ベクトルの向きが反対方向となるようです。この座標系の違いを処理するにはどうしたらよいかというと、接ベクトルの四番目の要素(tangent.w)に右手座標系か左手座標系か(1か-1)が入っています。これを、従法線ベクトルに乗算すれば正しいベクトルが得られるようです。計算した場合と同様の結果が得られました。2020.02.18前回の記事(海洋シェーダ(反射と屈折))では、海面に反射して映るオブジェクトや海中の屈折して見えるオブジェクトを追加しました。コメントをキャンセルメールアドレスが公開されることはありません。WordPress.。