当前位置:   article > 正文

[学习笔记]UnityShader入门精要_第7章_基础纹理_shader tangent

shader tangent

7.2.3.1 在切线空间下计算

determinant

transpose

UnityObjectToWorldDir(v.tangent.xyz);  

UnityObjectToWorldNormal(v.normal)

cross

UnpackNormal


7.2.3.1 在世界空间下计算


7.2.4 Unity中的法线纹理类型

TANGENT_SPACE_ROTATION

TANGENT_SPACE_ROTATION 宏 相当于嵌入如下两行代码:

float3 binormal = cross( v.normal, v.tangent.xyz ) * v.tangent.w;
float3x3 rotation = float3x3( v.tangent.xyz, binormal, v.normal );

也就是构造出 tangent space 的坐标系, 定义转换world space的向量到tangent space的rotation 矩阵。

TANGENT_SPACE_ROTATION这行代码之后,就可以用rotation这个代表从世界坐标到切线空间的矩阵了。不过要记得TANGENT_SPACE_ROTATION后面要加分号“;”的,比如:

  1. struct v2f
  2. {
  3. float4 pos:SV_POSITION;
  4. float2 uv:TEXCOORD0;
  5. float3 lightDir:TEXCOORD1;
  6. };
  7. v2f vert (appdata_full v)
  8. {
  9. v2f o;
  10. o.pos=UnityObjectToClipPos(v.vertex);
  11. o.uv=v.texcoord.xy;
  12. TANGENT_SPACE_ROTATION;
  13. o.lightDir= mul(unity_WorldToObject, _WorldSpaceLightPos0).xyz;//Direction Light
  14. o.lightDir=mul(rotation,o.lightDir);
  15. return o;
  16. }
  17. float4 frag(v2f i):COLOR
  18. {
  19. float3 N=UnpackNormal(tex2D(_BumpMap,i.uv));
  20. float diff=max(0,dot(N,i.lightDir));
  21. float4 c=_LightColor0diff;
  22. return c2;
  23. }

ObjSpaceLightDir

ObjSpaceViewDir

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/649800
推荐阅读
相关标签
  

闽ICP备14008679号