百人计划 图形2.2 模型与材质基础

渲染流水线大致过程

        1、顶点数据输入到顶点着色器中进行相关的顶点计算,然后进行图元装配,通过点与点之间的关系将点进行连接。2、再到几何着色器(可选着色器)进行图元的增加,再到光栅化通过遍历像素点将一个图元覆盖的像素进行绘制。3、再通过片元着色器对片元进行着色或者添加效果,最后通过测试与混合输入到屏幕上。(其中顶点着色器、几何着色器、片元着色器都称为可编程着色器,都为可编程)

 UV

        形象地说,UV是物体表面的皮肤,将皮肤划开平铺到二维坐标系中就得到了UV。平铺出二维空间与三维空间中物体表面的点都是一一对应的。因此每个顶点都能用纹理坐标获取到贴图储存的信息。

模型UV

        再建模软件中进行UV展开,UV会被放在一个横向为U,纵向为V范围为(0,1)的二维坐标系中。展开后的UV在SP(Substance Paniter)中绘制贴图(漫反射贴图,法线贴图,高度贴图,金属度贴图,AO贴图)。*可以通过将一些通道不够占满RGBA的贴图进行整合,放在一张贴图的不同通道中达到一次采样获取多个信息的目的(可有效提高性能)。

一个模型包含的信息(.obj)

        Vertex(顶点)、VertexNormal(顶点法线)、VertexTexcord(顶点纹理坐标),导出.obj用VSCode打开得到下图:

        

         其中:V顶点坐标数据(模型中单个顶点D XYZ坐标)、VT贴图坐标(水平方向是U,垂直方向是V,范围在0~1之间)、VN顶i但法线。并不包括RGBA(顶点色)的通道的颜色信息。

.obj与.fbx格式

        

 漫反射

        漫反射是最容易模拟的模型。最简单得Lambertian简单粗暴的认为光线均匀的反射出去。

        数学公式:

        代码:

        

 

 镜面反射

         光滑镜面反射。镜面反射就是将入射光线根据表面法线进行反射,并且只有在反射方向有能量,其他地方能量均为0。

         经典的用例就是Phong和Blinn-Phong光照模型用来计算高光,此代码为实现Blinn-Phong光照模型。

 

折射

        对于玻璃这种电介质,除了反射之外还有根据物体的折射率一部分光线进入物体之中,反射和折射能量的多少是根据菲尼尔定律决定。

 粗糙镜面反射

        法线偏移较小,反射依然集中在一个区域,形成磨砂质感。

 粗糙镜面折射

        与粗糙镜面反射相似,不过相对粗糙镜面反射,粗糙镜面折射中有一部分可以用透过去发生折射。

 多层材质

        涂漆的地板上有木纹,油漆面的质感。

 此表面反射

        如皮肤、牛奶、玉石的制作在实践中以调子映射制作,皮肤则是使用Lut图。

 多层皮肤模型

        皮肤可以看成三层:油脂、表皮、真皮。油脂层直接把光反射出去,所以皮肤上才出现高光,未被反射的光通过折射进入子表面层。进入该层,部分被吸收和散射,再从皮肤中入射点附近出射点射出,从而形成此表面散射效果。

 改变材质表面

        现实中不存在完美平滑的表面,并且一个模型顶点携带的法线也有限。因此使用法线贴图能做到补充!

        漫反射、高光、折射的计算都与法线相关。因此对发现做出调整就能影响其对光照计算的结果。虽然材质特别重要,但是没有一个好的模型,依然不会有好的结果。有时候模型就能表现出它的金属感和布料感。材质在这基础上能够给更加直观的感受。

模型数据在渲染中的作用

        纹理动画

                在片元着色器中,修改模型的UV的信息。使得采样贴图时发生位移儿产生运动的效果。UV坐标动画或UV平移的含义是:水平(U)和/或 垂直(V)移动纹理的UV坐标,以产生复杂动画的错觉。

        原理1:利用法线贴图改变反射或折射的朝向。修改前,使用1这个法线,反射出去的就是1;修改后,使用2这个法线,反射出去的就是2(修改的是法线信息,因此其他数据还是保持修改前的样子)。

        原理2:改变UV采样的位置,产生动画效果。

        顶点动画

        在顶点着色器中,修改模型的顶点位置进而达到模拟运动的效果。顶点动画就是在顶点着色器中对模型的顶点进行操作而产生动画效果。顶点着色器计算的是模型的每一个顶点,计算出来的结果也是不同的。在一些三维模型软件中,动画k帧也是一种顶点动画。

        原理:顶点动画需要一定数量的顶点,效果才会比较明显。一个顶点传入一个顶点着色器,顶点着色器控制顶点位置时所有的顶点都会进行也一样的算法。获取顶点UV坐标,控制移动数值的大小(UV范围0~1)

        顶点色

                在渲染时影响输出结果,控制颜色范围。

                

                 在绘制顶点色的时候,我们可以明显看到三角面,因为模型的渲染是从三角面开始,然后在引擎或渲染中四边面会被转成三角形计算。三角形内像素点的色彩会在光栅化时进行插值混合。插值原理:根据重心坐标计算。

 

 顶点法线与面法线

        从本质上来说,面法线也是顶点法线,只是储存方式有所差异。

         当前像素点的法线是通过周围顶点法线插值获得,儿从下图中可以明显看到法线与顶点法线因为反向不同,插值结果也不同。其中面法线三个顶点共用一个法线。

         原理:面法线有多少面储存多少法线,顶点法线则是有多少顶点存多少法线。在卡通渲染中做描边效果时:通常使用Backfacing外扩边描边法(也就是在顶点着色器中将法线方向偏移)该方法在处理硬表面时会出现断裂情况,折射因为没有对法线进行平滑导致法线不连续进而描边不连续。也就是说将模型的法线偏移,整体让模型大一圈,通过剔除与模型混合实现描边效果。

作业

        1、顶点色还可以做什么?

        作为一种储存mask使用(可以少使用一张贴图):把脸涂黑乘上顶点色(消除菲尼尔现象)、同样方式可以消除描边、把信息塞入顶点色(*塞入顶点色的信息必须是线性变化的,若不是则需要做好精度打折的准备);可用于预先指定照明、阻光和其他视觉效果;把颜色信息放在顶点里,但是在低模情况下效果很差;3dsmax中所有对象都具有贴图通道,其中保存关于纹理贴图以及顶点颜色、照明和Alpha的信息。网格对象同样具有几何体和顶点选择通道(主通道为顶点颜色,这可以使对象中的每个顶点都有其自己的颜色,并且在顶点之前自动渐变。此着色默认情况下不可见,但您可以通过“对象属性”设置切换其显示。哈可以通过“顶点绘制”修改器等各种功能查看和编辑顶点着色。他可用于预先指定照明、阻光和其他视觉效果。贴图通道数据也可由如游戏引擎等外部应用程序使用)。

        2、模型光滑组对法线有什么影响?

        光滑组是什么?没有真正的光滑,所有面都是三角形。光滑组的含义:光滑组处理面之间的光照信息,提高他们的亮度、饱和度(光滑组:通过处理面之间的光照信息来达到光滑效果,是用来设置边缘线的光滑显示的;网格平滑和涡轮平滑:通过增加面,把面分得更细腻来表达曲度)。

        法线:法线烘焙的意义是把高模的法线方向用一张图(RGB)来储存法线信息,存到低模的表面。贴上法线贴图的低模就会在视觉上产生凹凸不平、增加细节的渲染效果,从而看起来像高模一样。(没有光滑组的话,烘焙出来的贴图是一棱一棱的,一般情况下最少要给一个光滑组)

        使用光滑组平滑之后,可使模型着色不那么僵硬、断裂、可以更平滑、更自然的表现材质的颜色。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值