12 Games101 - 笔记 - 几何(网格处理)、阴影图

12 几何(网格处理)、阴影图

曲面细分

曲面细分是指将一个模型的面合理的分成更多小的面,从而提升模型精度,使模型越来越光滑,提高渲染效果。

Loop细分

Loop细分是指Loop提出来的细分规则,只能针对于三角形。

步骤:

  1. 生成更多的顶点,组成新的三角形

    如图,一个三角形被分成四个小三角形。

  2. 调整这些顶点的位置

  3. 把顶点分为两类:新生成的顶点和老的顶点。

    1. 对新的顶点进行加权平均:

      其中白点是新的顶点
    2. 对老的顶点进行加权平均:

      可以看出,老的顶点受到自己和相邻顶点度数的影响。

Catmull-Clark细分

首先定义面和顶点类型:

  • quad face:四边形面
  • Non-quad face:非四边形面
  • Extraordinary vertex :奇异点(degree != 4,即度(点所连边数)不为4的点

细分步骤:

取每条边,每个面的中点并连起来。每个非四边形都引入了一个奇异点,非四边形面消失。

细分特点:

  • 有几个非四边形面,就会多出几个奇异点,所以现在一共有2+2 = 4个
  • 新多出来的奇异点的度数与原来所在面的边数相等,如这里就是3度
  • 第一次细分之后所有面都会变成四边形,且往后奇异点数目不再增加

计算方法:

曲面简化

曲面简化是指将一个模型的面合理的合成更少的面,从而降低模型精度,减小开销,如远处模型使用曲面简化。

边坍缩:将一条边的两个顶点合成为一个顶点。

确定进行边塌陷的边通过二次度量误差。

二次误差度量:希望把这个点放到一个位置上,使得这个点到原来的几个面的距离平方和最小。

即蓝色新顶点所在的位置与原来各个平面的垂直距离之和。如果能够使得这个误差最小那么对整个模型样貌修改一定程度上也会较小。

曲面简化算法流程:

  1. 为模型每条边赋值,其值为坍缩这条边之后,代替两个老顶点的新顶点所能得到的最小二次误差度量
  2. 选取权值最小的边做坍缩,新顶点位置为原来计算得出使得二次误差最小的位置
  3. 坍缩完之后,与之相连其他的边的位置会改动,更新这些边的权值
  4. 重复上述步骤,直到到达终止条件

这其实是一个标准的贪心算法,可能到不了全局最优解,但事实证明最终的结果依然相当不错

  • 优先队列/堆
  • 贪心算法,局部最优解而非全局最优解

shadow mapping

Shading Point没有考虑其他物体的影响,所以着色不能解决阴影。

Shadow mapping本质上是一种图像空间做法,生成shadow这一步不需要这个场景的几何信息,但也会走样。

Shadow mapping生成硬阴影,不生成软阴影。

shadow mapping具体操作:

key idea: 一个点,如果不在shadow里,你又能看到这个点,说明这个点可以从camera中看到,也可以从光源中看到。

  1. 从光源看向场景,记录看到的点的深度。

  2. 从摄像机看向场景,并投影回光源所在的成像上。

    • 深度一致:说明能看到
    • 深度不一致:摄像机能看到,但是光看不到阴影

shadow mapping最终效果:

可视化shadow maps:

shadow mapping问题:

  • 浮点数难以判断相等,所以一般会有一个tolerance
  • shadow maps查询时不采用双线性插值,只寻找最近的点,因为倘若插值发生在物体边缘时,与邻接点的深度差距很大,会导致插值结果会有很大的误差
  • 属于硬阴影,只适用于点光源

硬阴影vs软阴影

相关推荐
笑鸿的学习笔记6 小时前
虚幻引擎5-Unreal Engine笔记之Qt与UE中的Meta和Property
笔记·ue5·虚幻
笑鸿的学习笔记6 小时前
虚幻引擎5-Unreal Engine笔记之Default Pawn与GamMode、Camera的关系
笔记·ue5·虚幻
黄暄7 小时前
Docker项目部署深度解析:从基础命令到复杂项目部署
运维·笔记·docker·容器·持续部署
小葡萄20257 小时前
黑马程序员C++2024版笔记 第0章 C++入门
开发语言·c++·笔记
人类恶.8 小时前
C 语言学习笔记(函数2)
c语言·笔记·学习
Lester_11019 小时前
嵌入式学习笔记 - STM32独立看门狗IWDG与窗口看门狗WWDG的区别
笔记·stm32·学习·嵌入式
收费界的一股清流9 小时前
npm 安装时 SSL 证书过期问题笔记
笔记·npm·ssl
孤寂大仙v10 小时前
【Linux笔记】——Linux线程封装
linux·笔记·算法
不过普通话一乙不改名10 小时前
四:操作系统cpu调度之调度算法
笔记
笑鸿的学习笔记10 小时前
虚幻引擎5-Unreal Engine笔记之什么时候新建GameMode,什么时候新建关卡?
笔记·ue5·虚幻