一、 渲染管线与模型基础
1.可编程渲染管线
● 蓝色背景的:可编程管线
● 顶点着色器:模型的顶点进行计算
● 片元着色器:将光栅化阶段插值的信息进行计算
2.uv
● 纹理映射:任何3D物体的表面都是2D的→纹理就是一张图→纹理映射:把这张图蒙在一个3D物体上
● uv,就是把这张图展开在一个坐标系中,坐标轴为u和v
● 每个顶点都能利用uv坐标后取到贴图所存储的信息
obj和fbx格式对比
二、材质基础
1.漫反射
● 光朝四面八方反射。
● 补充:
○ (GAMES101)入射的Radiance是均匀的 → 入射和出射的Irradiance相等,并且他俩的Radiance都均匀 → 入射的Radiance和出射的 相等
● 其中Lambert模型简单的认为各个方向是均匀的
2.镜面反射
光滑镜面反射
● 入射等于出射
● 入射光根据表面法线进行反射,并且只有在反射方向有能量,其他方向均为0
粗糙镜面反射
● 法线偏移比较小,所以反射集中在一个区域,有磨砂质感
3.折射
● 对于特殊的介质,除了反射外还会发生折射现象
● 其中,反射和折射的能量多少由Fresnel定律决定:
粗糙镜面折射
和粗糙镜面反射类似,也是集中在一个区域
4多层材质
● 除了物体本身的材质以外,表面还有东西(可以看到材质本身和表面的一层)
5.次表面散射/3S(BSSRDF)
6.改变材质表面
● 现实世界中不存在完美光滑的表面,模型顶点带的法线也有限,所以我们可以用法线贴图做效果
● 光照计算时,有法线的参与,所以我们可以对法线做出调整,来调整相应的光照计算
○ 比如《罪恶装备》卡渲中,手掰法线
● 补充:(GAMES101):渲染方程中,和材质有关的一项:BRDF CG中,Material==BRDF
三、模型数据解析(在渲染管线中的作用)
1.顶点动画
● 顶点着色器计算的是模型的每个顶点,每个顶点数据不同
○ 因此在同个计算公式下,不同的顶点会得出不同的结果
● 顶点动画就是在顶点shader中对模型的顶点进行操作,来产生动画效果。
● 需要一定数量的顶点,顶点动画的效果才会明显(必要时可以结合曲面细分)
● 一个顶点传入顶点shader,顶点shader控制顶点位置时,所有的顶点都会进行一样的算法。
● 在一些三维软件中,动画的K帧也是顶点动画
○ 意思类似:(GAMES101对于shader概念的完善:每个顶点/像素都会执行一次,是通用的,不用做循环)
2.纹理动画
● 渲染的过程中改变纹理坐标,使其采样时发生偏移,来达到动画的效果 (eg: UE4中的panner节点可以获取纹理坐标并进行位移)
● 一般uv偏移都放在顶点shader做,个人总结原因有二:
○ ①依赖纹理读取的存在,会影响性能(只要不是从顶点shader直接传到片元shader,就会产生依赖纹理读取)
○ ②一般情况下顶点数 < 片元数,执行次数少
● 例子原理分析:
○ 第一个部分:光照计算
■ 利用法线贴图,改变反射和折射的朝向
○ 第二个部分:对背部画面采样的部分
■ 改变uv采样点的位置,产生动画效果
3.顶点色
可以通过判断顶点色,来做一些操作
○ eg,顶点色达到一定的值,就做阴影。
○ eg2:庄懂老师的课后部分的案例里,使用模型的顶点色作为mask使用
● Maya中顶点色的绘制
○ (所有四边面转到游戏引擎中都会转换为三角形来计算)
4 插值:重心坐标。
● //详细笔记参考:《GAMES101》-L9-插值部分
● 总结:三角形所在平面任意点(x,y)都可用三顶点(α β γ)的线性组合表示。
● 补充:重心坐标不能保证投影后不变,所以三维情况下要先找到重心坐标再插值
● 任意一个点的表示公式
5.顶点法线、面法线
● 面法线本质上还是顶点法线,只是存储方式不同
● 原理:
○ 面法线:三个顶点共用一个法线,插值出来结果相同
○ 顶点法线:每个顶点都有一个发现,插值出来也就不同
扩展:NPR中的描边
● NPR渲染中,通常在顶点shader中,将顶点法线方向偏移,再在片元着色器中直接输出一个颜色,达到描边效果。
● BackFacing描边时,描边线条断开就是因为没有平滑顶点之间的法线导致的
2.模型光滑组对法线有什么影响
先搞清楚光滑组是什么
● 没有真正的光滑面,所有面都是三角形
● 光滑组的含义:下面图标出了面的亮度,纯属打比方,不是确切数字,两面之间的过渡就是两面亮度和的平均值,光滑组处理面之间的光照信息,提高它们的亮度、饱和度。
○ 如果两个面一个光滑组是1,另一个是2,就不进行计算
○ 如果他们的光滑组都是1,就会进行光照计算,产生光滑效果,影响最终渲染。
● 自动光滑:所有面的夹角小于45度的进行光滑
● 光滑组:通过处理面之间的光照信息来达到光滑效果,是用来设置边缘线的光滑显示的。
● 网格平滑和涡轮平滑:通过增加面,把面分的更细腻来表达曲度
● 我们平常说的布线合理,拓朴其实是保持两个三角面的一致性(构成一个四边面的俩三角面)
②光滑组对法线的影响
法线
● 烘焙法线的意义,就是把高模的法线方向,用一张图(RGB)来存储法线信息,存到低模的表面上。贴上法线贴图的低模,就会在视觉上产生凹凸不平、增加细节的渲染效果,从而看起来像高模一样。Normal Mapping 法线贴图本质上就是一种图片,只是这张图片的用途比较特殊而已。
● 没有光滑组的话,烘出来的法线贴图是一棱一棱的。一般情况下最少也要给一个光滑组
● 参考链接中的例子:渐变色的法线贴图在substancepainter会出现黑边情况(光滑组的问题)
光滑组(软硬边)和UV对法线的影响
●
● 光滑组相连的模型,法线贴图都存在大渐变色,导致模型的法线效果会很奇怪(平面上有发暗发亮的光影)。当你发现你的模型出现这种渐变时,一定是出现了光滑组的问题。
● 中间的两个模型出现了不同程度的接缝(第三个模型的接缝非常明显,第二个模型则弱一些)。光滑组和uv统一相连或断开,是不会出现明显接缝的,当遇到接缝问题,优先考虑模型的光滑组和uv是否统一。