Skip to content

Instantly share code, notes, and snippets.

@sugi-cho
Last active March 31, 2022 11:53
Show Gist options
  • Save sugi-cho/efd860f4c744d617f54a to your computer and use it in GitHub Desktop.
Save sugi-cho/efd860f4c744d617f54a to your computer and use it in GitHub Desktop.
頂点をいじるシェーダーで、法線もいじる

#今日のまとめ ##オブジェクト空間からワールド空間での各値を求める。

  • fixed3 worldNormal = UnityObjectToWorldNormal(v.normal);
  • fixed3 worldTangent = UnityObjectToWorldDir(v.tangent.xyz);
  • fixed3 worldBinormal = cross(worldNormal, worldTangent) * v.tangent.w;

##ノーマルマップを貼る NormalMapは、接線座標系内の法線方向なので、ノーマルマップをオブジェクトに適応する計算は、接線座標系で行う。

#include UnityStandardInput.cginchalf3 NormalInTangentSpace(float4 texcoords)

//in vert func
  o.tSpace0 = float4(worldTangent.x, worldBinormal.x, worldNormal.x, worldPos.x);
  o.tSpace1 = float4(worldTangent.y, worldBinormal.y, worldNormal.y, worldPos.y);
  o.tSpace2 = float4(worldTangent.z, worldBinormal.z, worldNormal.z, worldPos.z);
//in frag func
  fixed3 worldN;
  worldN.x = dot(IN.tSpace0.xyz, o.Normal);
  worldN.y = dot(IN.tSpace1.xyz, o.Normal);
  worldN.z = dot(IN.tSpace2.xyz, o.Normal);
  o.Normal = worldN;

タンジェント空間でのノーマル計算したんやから、tangentToWorldのmatrixとかで、変換すれば良いだけな気がするけど、なざ、こうやってるのかは、まだ理解できてない

##UnityCG.cginc

  • #define UNITY_PI 3.14159265359f
  • unpackScaleNormal(half4 packedNormal, half bumpScale)
  • UnpackNormal()とは何なのか?UnpackNormal

##Normal normal

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment