TA百人计划 图形 2.2 模型与材质基础
笔记
图形渲染管线
TA百人计划 图形 1.1 渲染流水线
顶点数据->顶点着色器->图元装配->几何着色器->光栅化->片段着色器->测试、混合
模型的实现原理
多个顶点连成线->多条线组成面->多个面组成模型
UV
将模型顶点映射到一个二维坐标中,在二维坐标系中顶点对应的位置就是顶点纹理的坐标。
片段着色器根据纹理坐标查找当前位置对应的纹理信息。
模型UV
在建模软件中进行UV展开,UV放在横向U纵向V,范围(0-1)的二维坐标系中
在展开后的UV中绘制各种贴图
模型包含的信息
- 顶点(顶点在模型空间下的x,y,z坐标)
- 顶点法线
- 顶点纹理坐标(水平方向U,垂直方向V,范围0-1)
- 顶点色(单个顶点得RGBA通道信息),Obj文件不包含顶点色
一个顶点包含了法线,纹理坐标,顶点色等信息
obj格式和fbx格式
# | obj格式 | fbx格式 | 备注 |
---|---|---|---|
多个object | 支持 | 支持 | 在文件中存放多个三维模型 |
单object拥有多个材质 | 支持 | 支持 | |
Polygons面 | 支持 | 支持 | 易于被3ds max等软件编辑加工 注:导入到ue4时,必须为三角形面 |
Normal | 支持 | 支持 | |
Material | 支持 | 支持 | |
光滑组(Smoothing Group) | 支持 | 支持 | 光滑组中的点或面使用平均法线来计算光照,使得整个mesh区域看起来更平滑 |
uv套数 | 1 | 多套 | |
顶点Color | 不支持 | 支持 | 导入ue4时,Vertex Color Import Option设置为Replace |
ue4 lod | 不支持 | 支持 | 导入ue4时,勾选Import Mesh LODs |
ue4 simple collision | 支持 | 支持 | 任意凸体碰撞命名规则:UCX_[RenderMeshName]、UCX_[RenderMeshName]_00 |
socket插槽 | 不支持 | 支持 | 命名规则:SOCKET_[RenderMeshName]、SOCKET_[RenderMeshName]_01 |
skeleton骨骼 | 不支持 | 支持 | |
skeletal mesh网格 | 不支持 | 支持 | |
animation sequence | 不支持 | 支持 | fbx可在文件中存放多个动作序列 |
材质
每种物体表面对光反射表现不同表现出不同的材质(光滑、粗糙等)
漫反射
最容易模拟的模型(水泥、砖块、石头...)。
兰伯特简单粗暴地认为光线均匀反射出去。
Diffuse = baseColor *LightColor * dot(LightDir , Normal);
光滑镜面反射
将入射光线根据表面法线进行反射,只有反射方向有能量,其他方向能量为0
Specular = pow(saturate(dot(ReflDir,ViewDir)),32) * LightColor;
折射
光从一种介质进入另一种介质,一部分反射一部分进入。反射、折射能量大小根据菲尼尔定律决定。
R = refract(View,Normal,ration);
ReflColor = tex2D(skybox,R);
粗糙镜面反射
法线偏移较小,反射集中在一个区域。磨砂质感。
粗糙镜面折射
毛玻璃效果 游戏引擎常用其他物体渲染结果传入折射shader,采样修改透明度实现。
多层材质
透过上层材质看到下层材质
次表面散射
光线在半透明物体内多次反射造成。玉石、皮肤...
SSS贴图实现
改变材质表面
顶点携带的法线数量有限,使用法线贴图补充漫反射。
光照计算有法线参与,对法线进行调整能够影响光照计算结果。
模型数据在渲染中的作用
纹理动画
- 利用法线贴图改变光反射、折射方向
- 在片段着色器修改uv值,使得纹理采样偏移实现贴图运动效果
顶点动画
顶点着色器中修改顶点位置实现动画
需要顶点数量够多效果才好
顶点色
控制颜色范围(不同顶点间的颜色插值)
顶点法线与面法线
顶点法线
每个位置的法线由不同顶点法线插值得到,比较平滑。
面法线
一个面上每个位置的法线位置相同(面上每个顶点共用同一个法线,插值结果相同)
模型存储格式(obj格式)
未使用平滑组。每个面一个顶点法线信息,一个面3个顶点共用
使用平滑组。每个顶点都有一个法线信息,用s 1
表示使用平滑组
扩展
NPR渲染把(模型背面)顶点往法线方向偏移,直接在片段着色器中给定颜色实现描边效果。
没做法线平滑时会出现描边断裂情况。
作业
顶点色还可以做什么
- 作为遮罩,对模型不同部分进行区别处理。
- 着色。顶点数量少的时候效果差
模型光滑组对法线有什么影响
平面上每一个位置的法线将会是平面上每个顶点法线信息插值得来,相邻平面的法线方向连续平滑。