一、渲染管线与模型基础
 1. 渲染管线

 可编程阶段(蓝色区域):
 1顶点着色器
 2几何着色器
 3片元着色器
 2. 模型的实现原理
 UV:在建模软件中,进行UV展开,UV会放在一个横向为U纵向为V,范围(0~1)的二维坐标系中。
 展开后的UV在SP中绘制贴图(漫反射贴图、法线贴图、高度贴图、金属度贴图、AO贴图)

 一个模型包含的信息(OBJ文件)

 Vertex顶点

 Vertex Normal顶点法线

 Vertex Texcoord顶点纹理坐标
 1V:顶点坐标数据(模型空间中单个顶点的XYZ坐标)
 2VT:贴图坐标(水平方向是U,垂直方向是V,范围0~1之间)
 3VN:顶点法线
 4顶点色(FBX格式才有):单个顶点的RGB颜色信息。一个顶点包含了法线,纹理坐标,顶点色等信息。
 OBJ和FBX格式对比

 总结下,FBX相较于OBJ多支持了骨骼动画相关的东西,同时也可以存储顶点色和LOD。
 二、材质基础
 1.漫反射

 最容易模拟的模型。比如现实中的石头,水泥,砖块等。
 光线均匀的反射出去。
 Diffuse = baseColor * LightColor * dot(LightDir, Normal);
 2.(光滑)镜面反射

 镜面反射就是将入射光线根据表面发现进行反射,入射角等于出射角。
 Specular = Pow(saturate(dot(RefDir,ViewDir,32)))* LightColor;
 3.粗糙镜面反射

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


 对于玻璃这种介质,除了反射之外还有根据物体的折射率折射一部分光线进入物体中,反射和折射能量的多少是根据菲尼尔定律决定的。
 R = refract(View,Normal,ration);
 ReflColor = tex2D(skybox,R);
 5.粗糙镜面折射

 毛玻璃会有这种现象。
 6.多层材质

 涂了透明油漆的木地板,上层是油漆,下层是地板,同时油漆还会反射上部的物体。
 7.次表面散射

 半透明的物体,例如玉石、蜡烛、牛奶、皮肤等。
 以皮肤为例:光进入皮肤后照亮了毛细血管,因此在明暗分界的位置,反射出的红光就更容易被看到。
 8.改变材质表面
 现实世界中不存在完美平滑的表面,因此需要对模型表面的发现进行扰动。其中一个方法是使用法线贴图。
 漫反射,高光,折射都与法线有关,因此改变法线,就能改变其光照结果。
 三、模型数据在渲染中的作用
 1.顶点动画
 在顶点着色器中,修改模型的顶点位置,进而达到模型运动的效果。
 ○顶点着色器计算的是模型的每一个顶点,每一个顶点的数据是不同的,因此同一个计算公式在不同的顶点上计算出来的结果也是不同的。
 ○需要一定数量的顶点,顶点动画的效果才会明显。
 ○在一些三维建模软件中,动画的k帧也是一种顶点动画
 2.纹理动画
 在片段着色器中,修改模型的UV信息,使得采样贴图时发生位置而产生的运动效果。
 效果:

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

 对背部画面采样的部分
 原理2:
 ○改变UV采样点的位置,产生动画效果

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

 因为四边面本质上还是三角面组合而成,所以在绘制时会出现三角形的分界。
 FragColor = FinalColor * VertexColor;
 ●可以通过判断顶点色,来做一些操作
 ○例如,顶点色到达一定的值,就可以做阴影
 ●Maya中顶点色的绘制

 4.重心坐标


 ●具体可以参考下GAMES101—L9部分
 5.顶点与面法线


 原理:
 面法线
 ○未使用平滑时,三角形三个顶点公用一个法线,那么插值时,因为三个顶点的法线相同,所以插值的结果相同。

 顶点法线
 ○使用平滑后,一个顶点一个法线。三角形三个顶点的法线就不相同,插值结果也就不同。

 平滑/未使用平滑,在模型文件内部存储方式

 扩展
 在NPR渲染中
 ○通常在顶点着色器中,将顶点往法线方向偏移。然后再在片段着色器中直接输出一个颜色,达到描边的效果。
 ○BackFacing描边时,描边线条断开就是因为没有平滑顶点之间的法线导致的。


 作业
 1.顶点色的其他作用
 1.作为一种存储的mask使用(这样可以少使用一张图)
 ●不想让连上有菲尼尔效应,就把脸涂黑,乘上顶点色
 ●不想让某些地方有描边,同上
 ●拿到顶点色后可以做一些其他操作,塞入顶点色的信息必须是线性变化的,如果不是,就要做好精度打折的准备
 ●可用于预先指定光照、阻光和其他视觉效果
 ●可以把颜色信息存在顶点里,但是在低模的情况下效果很差。
 简单说顶点色相当于一个数据存储的地方,你可以将任何数据塞到此处,然后利用这些数据进行操作,考虑优化时更应注重顶点色的应用。
 2.模型光滑组对法线有什么影响
 在模型上没有真正的光滑面,也没有真正的四边形面,所有面都是三角形组成的。
 平常说的布线合理,拓扑其实是保持两个三角形面的一致性(构成一个四边面的两个三角形面)


 ①光滑组的含义
 下图标出了面的亮度,纯打比方不是确切数字。
 光滑组处理面之间的光照信息,提高它们的亮度、饱和度,两面之间的过渡就是两面亮度和平均值。

 ②光滑组如何计算?
 如果一个面的光滑组是1,一个是2,那么他们之间不存在计算。

 如果它们光滑组都是1,就会进行光照计算,并且影响最终渲染,也就是说他们光滑组一样的话,就会进行光照计算,产生光滑效果。
 下图为不同数值下的光滑效果,数值一致就会有平滑效果。

 网格平滑和涡轮平滑:通过增加面,把面分的更细腻来表达曲度。
 自动平滑默认所有面的夹角小于45°的进行光滑,默认创建的球面的夹角都小于45°所以都平滑了,下图为数值为10的时候。

 ③光滑组对法线的影响
 法线
 ●烘焙发现的意义,就是把高模的法线方向,用一张图(RGB)来存储法线信息,存到低模的表面上。贴上法线贴图的低模,就会在视觉上产生凹凸不平、增加细节的渲染效果,从而看起来像高模一样。Normal Mapping法线贴图本质上就是一种图片,只是这样图片的用途比较特殊而已。
 ●没有光滑组的话,烘出来的法线贴图是一棱一棱的。一般情况华至少也要给一个光滑组。
 光滑组(软硬边)和UV对法线的影响
 ●光滑组相连接的模型,法线贴图都存在打渐变色,导致魔性的法线效果会很奇怪(平面上有法案发凉的光影)。当你发现模型出现这种渐变时,一定是出现了光滑组的问题。
 ●中间的两个模型出现了不同程度的接缝(第三个模型的接缝非常明显,第二个模型则弱一些)。光滑组和UV统一相连或断开,是不会出现明显接缝的,当遇到解封问题,优先考虑模型的光滑组和UV是否统一。





















