用于细分 + 变形任意 3D 网格的过程

主要观点:作者最初目标是细分 3D 网格以增加细节,实现程序化变形。介绍了朴素细分方法、变形与位移(包括位移映射)、法向量(平滑与平面着色)、链接网格数据结构、计算分离的着色和位移法向量、“按角度平滑”着色、程序化位移等内容,还提及一些处理网格的技巧和注意事项,最后得出 3D 图形中很多东西取决于渲染效果而非固定算法的结论。
关键信息

  • 朴素细分是将大三角形分割成小三角形,可通过多种方式实现。
  • 变形是改变顶点位置从而改变网格结构,位移是沿法向量移动顶点。
  • 法向量影响着色,平滑着色基于片段到顶点的法向量插值,平面着色为每个片段设置面的法向量。
  • 链接网格数据结构方便处理网格,通过特殊索引存储。
  • 要计算分离的着色和位移法向量需合并重合顶点,计算顶点法向量时要加权平均。
  • “按角度平滑”着色是混合平滑和平面着色的模型。
  • 程序化位移可在 CPU 上实现更复杂算法,可使用多种位移算法。
    重要细节
  • Blender 导出的模型由三角形组成,渲染时转为绘制调用。
  • 位移映射通过位移图修改顶点位置增加细节,但需配合其他映射。
  • Blender 中的不同类型法向量可视化方式。
  • 实现链接网格数据结构时使用slotmap crate 避免借用检查问题。
  • 计算位移法向量时要注意重合顶点合并及插值方法。
  • 纹理使用三角平面映射可避免网格变形时的拉伸。
阅读 15
0 条评论