法線ベクトルの再計算2019.07.02UnityshaderAdvertisementシェーダで頂点を移動すると、元の法線ベクトルは使用できなくなります。再計算する必要があります。法線ベクトルは隣接する頂点もしくはハイトマップから計算することができます。法線ベクトルは、ある点とその近傍の二点の座標を用いることで求めることができます。接ベクトル方向へ少し移動した点\(P_{1}\)と従法線ベクトル方向へ少し移動した点\(P_{2}\)を求めます。)\)を計算すると法線ベクトルが求まります。上図の方向となっています(左手系において、外積によって得られるベクトルの方向は右手系の逆となる)。shaderパーリンノイズによって変形させたオブジェクトの法線ベクトルを再計算し、ランバート反射によるライティングを行っています。col;}ENDCG}}}tangent.wにDirectX(左手系)の場合は1、OpenGL(右手系)の場合は-1が入っています。外積によって得られる法線ベクトルが一致するように処理できます。上記シェーダの実行結果は以下の通りです。ノイズによって変形した球体にその形状に伴った陰影が得られていることがわかります。法線ベクトルを表示すると以下のようになります。Grayscaleにチェックを入れることでノーマプマップへ変換することができます。波紋のようにリアルタイムで変化する場合はシェーダでハイトマップから法線ベクトルを計算する必要があります。この法線ベクトルは下図に示すように、あるテクセルに隣接するテクセルの情報を利用することで計算できます。\(V\)及び\(V_{x2}\)の三点を結ぶ二次曲線を求め、Vにおける二次曲線の傾き\(du\)を求めるます。\(dv\)を求めます。\(y\)方向の接ベクトルがわかります。Unityではy軸が上方向ですが、法線マップではz軸が上となります。そのため、それぞれのベクトルは以下のようになります。$$これらの接ベクトルの外積を求めることで法線ベクトル\(N\)が求まります。shader波動方程式を用いた波紋の作成によって得られるハイトマップ(_HightMap)から法線ベクトルを計算し、平面の鏡面反射(_ReflectionTex)によって得られるテクスチャを法線ベクトルによって歪めることで、鏡面反射となっている平面が波紋によって波打つ様子を描画しています。BumpScaleによって歪む量を調節することができます。波紋によって求められた法線ベクトルによってReflectionTexが歪められていることがわかります。2021.02.11作成したEditorWindowへMaterialEditorを用いてマテリアルのプロパティを表示する方法です。コメントをキャンセルメールアドレスが公開されることはありません。WordPress.。