主要观点:作者最初目标是细分 3D 网格以增加细节,实现程序化变形。介绍了朴素细分方法、变形与位移(包括位移映射)、法向量(平滑与平面着色)、链接网格数据结构、计算分离的着色和位移法向量、“按角度平滑”着色、程序化位移等内容,还提及一些处理网格的技巧和注意事项,最后得出 3D 图形中很多东西取决于渲染效果而非固定算法的结论。
关键信息:
- 朴素细分是将大三角形分割成小三角形,可通过多种方式实现。
- 变形是改变顶点位置从而改变网格结构,位移是沿法向量移动顶点。
- 法向量影响着色,平滑着色基于片段到顶点的法向量插值,平面着色为每个片段设置面的法向量。
- 链接网格数据结构方便处理网格,通过特殊索引存储。
- 要计算分离的着色和位移法向量需合并重合顶点,计算顶点法向量时要加权平均。
- “按角度平滑”着色是混合平滑和平面着色的模型。
- 程序化位移可在 CPU 上实现更复杂算法,可使用多种位移算法。
重要细节: - Blender 导出的模型由三角形组成,渲染时转为绘制调用。
- 位移映射通过位移图修改顶点位置增加细节,但需配合其他映射。
- Blender 中的不同类型法向量可视化方式。
- 实现链接网格数据结构时使用
slotmap
crate 避免借用检查问题。 - 计算位移法向量时要注意重合顶点合并及插值方法。
- 纹理使用三角平面映射可避免网格变形时的拉伸。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。