Shader小常识之——模型法线和法线纹理是如何工作的

  • 写在前边:写这篇文章是因为我有一个爱学爱问的小学弟,他经常会问一些这样那样的问题,仔细想想,也许大多数人,包括我自己在内,在刚接触一门新的知识的时候,也会因不了解而产生各种“奇怪的”问题,也许过后觉得很是简单,但是隔行如隔山,不了解的时候感觉高大上的东西,其实并没有那么神秘,所以在这里纪录下来,帮助更多“后来者”,好让其早日“居上”。

  • 问题:为什么我们加了法线纹理后,模型就变得凹凸有致了,法线纹理和模型本身的法线信息是怎样一个关系?

    我们都知道,游戏中的模型都是由点连线,线练面构成的,对于一个平面来说,它的法线始终垂直于整个面的,如图所示,法线朝上。OK,这里我们做一个假设,假设太阳光从平面上方照射下来,那么此时这个面应该被照亮,接下来改变光线角度,让它从下方照射上来,结果整个平面就变暗。从这里我们可以看出,物体的法线跟光源之间的位置关系会直接影响到物体的明暗
    模型法线控制的光照效果
    这个自然规律如果用shader来实现,其实就是一句话:
    dot(normal, lightDir)
    其中normal是法线向量,lightDir是光源向量,两者做点乘,结果大于0,表示在面的同侧,小于0则表示在异侧。我们这里用的法线是模型本身的法线(始终朝上),那如果我想让这个平面有更多的明暗关系,那怎么办?站在模型师的角度上来说,增加点线是最直观的方法,但是通常游戏都会尽量避免不必要的顶点面数,这个时候我们就可以利用一张法线纹理来重新给normal进行赋值,在frag函数里添加以下代码:
    normal = UnpackNormal(tex2D(_BumpTex, i.uv

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值