凹凸小记

作者: 万里_aa3f | 来源:发表于2019-01-14 19:42 被阅读2次

1.高度贴图转法线贴图
2.多张法线贴图效果的叠加
3.法线从切线空间转世界空间

1.高度贴图转法线贴图

求出uv,u方向高度贴图数值的斜率:(u-0.5,v)的值-(u+0.5,v)的值,并将其转为切线空间的向量tu
v方向高度贴图数值的斜率:(u,v-0.5)的值-(u,v+0.5)的值,并将其转为切线空间的向量tv
因切线空间为左手坐标空间,所以cross(tv,tu),下面是我画的简图


    float2 du = float2(_HeightMap_TexelSize.x * 0.5, 0);
 
    float u1 = tex2D(_HeightMap, i.uv - du);
 
    float u2 = tex2D(_HeightMap, i.uv + du);
 
    float3 tu = float3(1, u2 - u1, 0);
 
  
    float2 dv = float2(0, _HeightMap_TexelSize.y * 0.5);
 
    float v1 = tex2D(_HeightMap, i.uv - dv);
 
    float v2 = tex2D(_HeightMap, i.uv + dv);
 
    float3 tv = float3(0, v2 - v1, 1);
 
    i.normal =normalize( cross(tv, tu));
 

2.多张法线贴图效果的叠加

此方法法线叠加,而不用 相加法线再归一化 的方法,可以保证凹凸度不会受另一张贴图的影响

half3 normal1 , normal2;
half3 BlendNormal = half3(normal1.xy+normal2.xy,normal1.z*normal2.z);

3.法线从切线空间转世界空间

之前一直用冯女神书中的方法,但那个写起来很麻烦,后来看到这种方法半天没看懂(代数好菜)
后来动手算一下结果是一样的 图片如下:


//求副切线
float3 binormal=cross(i.normal,i.tangent.xyz)*i.tangent.w*unity_WorldTransformParams.w;
//看到过的最简单的代码(从切线空间转世界空间)
i.normal= normalize(
      tangentNormal.x * i.tangent+
      tangentNormal.y * binormal+
      tangentNormal.z * i.normal );

相关文章

  • 凹凸小记

    1.高度贴图转法线贴图2.多张法线贴图效果的叠加3.法线从切线空间转世界空间 1.高度贴图转法线贴图 求出uv,u...

  • 凹凸曼满月啦

    package 2017/5/10 var 凹凸曼=0 for(凹凸曼++){ 拉屎 拉尿 吃奶 睡觉 if(凹凸...

  • 时光轴

    1.凹凸曼降生记 2.凹凸曼满月啦 3.凹凸曼第一次打疫苗 4.凹凸曼打卡介苗 5.凹凸曼两个月啦 6.凹凸曼过敏...

  • 凹凸

    《凹凸》 释义: 凹凸——指男人与女人 凹凸——指拼图,生活没有完整的面目,只是拼凑的点滴 凹凸——男主人公自制的...

  • 凹凸

  • 凹凸

    几年前第一次边听边哭的一首歌,当时晚上自己一个小女生走雪路回家,又黑又冷,即使到家,也是漆黑无灯火,当听到,可以笑...

  • 凹凸

    凹凸很热情,读书群里才聊了几天就要来看我。 说来就来,打个车,带着母亲和两个女儿,还有两大袋子的水果,这就上门来了...

  • 凹凸

    这世界是平地, 凹凸只是交替。 凸起的莫得意, 凹下的别失意。 这世界是平局, 凹凸只是游戏。 凸出不是胜利, 凹...

  • 凹凸

    这是大一军训时,同学们很喜欢唱的歌,其实那时候我不懂,为什么单纯开心如我们,要唱这么忧伤的歌。 那时候,我是真的不...

  • 凹凸

    好久没有动笔,故不知该如何开始自己的诉说。在这里的生活不知不觉已过三年的时间,轻轻问一句:你真的过的好吗?...

网友评论

    本文标题:凹凸小记

    本文链接:https://www.haomeiwen.com/subject/wzbjdqtx.html