一、 渲染管线与模型基础
1.渲染管线
-
蓝色:可编程管线
-
顶点着色器:模型的顶点进行计算
-
片元着色器:将光栅化阶段插值的信息进行计算
2.uv
-
纹理映射:任何3D物体的表面都是2D的→纹理就是一张图→纹理映射:把这张图蒙在一个3D物体上
-
uv,就是把这张图展开在一个坐标系中,坐标轴为u和v
-
每个顶点都能利用uv坐标后去到贴图所存储的信息
3.一个模型包含的信息
以obj文件为例:
-
-
v:顶点坐标数据(模型空间中单个顶点的xyz坐标)
-
vt(texcoord):贴图坐标(uv坐标)
-
-
-
vn(normal):顶点法线
-
顶点色
-
obj和fbx格式对
-
二、材质基础
1.漫反射
-
光朝各方向均匀反射。
-
补充:(GAMES101)入射的Radiance是均匀的 → 入射和出射的Irradiance相等,并且他俩的Radiance都均匀 → 入射的Radiance和出射的相等
-
(其中Lambert模型认为各个方向是均匀的)
2.镜面反射
-
入射光根据表面法线进行反射
3.折射
-
对于特殊的介质,光会反射和折射。
4.粗糙镜面反射
5.粗糙镜面折射
6.多层材质
-
除了物体本身的材质以外,表面还有东西(可以看到材质本身和表面的一层)
-
7.次表面散射(GAMES101---半透明材质--BSSRDF)
-
把皮肤看做三层:油脂层(高光)、表皮层(颜色)、真皮层
-
8.改变材质表面
-
现实世界中不存在完美光滑的表面,模型顶点带的法线也有限(用法线贴图做效果)
-
补充:(GAMES101):渲染方程中,和材质有关的一项:BRDF CG中,Material==BRDF
三、模型数据解析(在渲染管线中的作用
1.纹理动画
-
渲染的过程中改变纹理坐标,使其采样时发生偏移,来达到动画的效果 (eg: UE4中的panner节点可以获取纹理坐标并进行位移)
第二个部分:对背部画面采样的部分
- 改变uv采样点的位置,产生动画效果
2.顶点动画
-
顶点着色器计算的是模型的每个顶点,每个顶点数据不同
-
-
因此同个计算公式,不同的顶点会得出不同的结果
-
-
顶点动画就是在顶点shader中对模型的顶点进行操作,来产生动画效果。
-
需要一定数量的顶点,顶点动画的效果才会明显
-
一个顶点传入顶点shader,顶点shader控制顶点位置时,所有的顶点都会进行一样的算法。
获取顶点uv坐标,控制移动数值大小
3.顶点色
-
可以通过判断顶点色,来做一些操作
-
-
eg,顶点色达到一定的值,就做阴影。
-
eg2:庄懂老师的课后部分的案例里,使用模型的顶点色作为mask使用
-
-
Maya中顶点色的绘制
4.插值:重心坐标。
-
//详细笔记参考:《GAMES101》-L9-插值部分
-
总结:三角形所在平面任意点(x,y)都可用三顶点(α β γ)的线性组合表示。
-
补充:重心坐标不能保证投影后不变,所以三维情况下要先找到重心坐标再插值
-
任意一个点的表示公式
-
5.顶点法线、面法线
-
面法线本质上还是顶点法线,只是存储方式不同
-
原理:
-
面法线:三个顶点共用一个法线,插值出来结果相同
-
顶点法线:每个顶点都有一个发现,插值出来也就不同
-
扩展:NPR中的描边
-
NPR渲染中,通常在顶点shader中,将顶点法线方向偏移,再在片元着色器中直接输出一个颜色,达到描边效果。
-
BackFacing描边时,描边线条断开就是因为没有平滑顶点之间的法线导致的
1.顶点色的其他作用
作为一种存储的mask使用(这样可以少使用一张图)
不想让脸上有菲涅尔效应,就把脸涂黑,乘上顶点色
不想让某些地方有描边,可以如法炮制
准则:塞入顶点色的信息必须是线性变化的,如果不是,就要做好精度打折的准备。
可用于预先指定照明、阻光和其他视觉效果。
就是把颜色信息存在顶点里,但是在低模的情况下效果很差。
2.模型光滑组对法线有什么影
mesh网格模型没有真正的光滑面,所有面都是三角形,nurbs曲面才是真正光滑的面
光滑组合并了相邻网格的共用边和顶点,使法线的插值均匀平滑