Games101-课程12笔记

本文探讨了网格操作在几何图形处理中的重要性,包括MeshSubdivision(Loop细分曲面)用于增加光滑度,MeshSimplification通过边坍缩简化模型,以及MeshRegularization确保形状完整。此外,讲解了阴影技术如Shadowmap实现硬阴影和软阴影的方法。
摘要由CSDN通过智能技术生成

目录

几何:

网格操作 : 几何图形处理概述

网格细分(Mesh Subdivision)

Loop细分曲面

具体做法

更新坐标位置具体做法

细分方法

两种方法不同的应用

网格简化(Mesh Simplification)

一种网格简化方法: 边坍缩

引入一个新概念: 二次误差度量(Quadric Error Metrics)

坍缩实际做法?

阴影

Shadow map

实际步骤

硬阴影Hard shadows和 软阴影soft shadows


第十二节课 : 几何 与 阴影

几何:

网格操作 : 几何图形处理

① 网格细分(第三头牛)

② 网格简化(第四头牛)

③ 网格正规化(第五头牛)

 网格细分(Mesh Subdivision), 更多细节

 网格简化(Mesh Simplification), 减少三角形顶点, 降低计算量

 网格正规化 (Mesh Regularization), 方便着色相关的计算

在这里明显看到牛的耳朵丢失了部分(正规化不合格)

细分, 简化和正规化都是要保持原来的连接关系, 不能丢失原来的模型形状.

网格细分(Mesh Subdivision):

Loop细分曲面 :

① 创建更多的三角形

② 调整顶点位置, 使其更加光滑.

 具体做法: 

① 通过分裂(取中点), 变成四个三角形

② 根据权重分配新的顶点位置

③ 产生新的坐标要和旧的坐标区分开.

更新坐标位置具体做法:

① 新顶点(白点)更新:

离白点更近的AB, 权大*3/8, 而离白点更远的CD, 权小*1/8(这个系数3/8或者1/8, 是算法内部设定的)

加权平均算法, 使物体表面更平滑

② 旧顶点(白点)的更新 :

n :白点的度

u :和顶点的度有关的数

Update to(更新规则) : (1+n*u)*自身位置 + u *所连顶点位置和的平均

举个例子 :若n大,则说明更新点附近的三角形多,更多考虑附近三角形导致的更新; 若n小,则说明更新点附近的三角形少,更多考虑自身位置导致的更新.

细分方法:

① Loop 细分

先细分三角形, 后调整顶点位置

下图共做了两次细分

② Catmull-Clark 细分 :

一些定义 :

  1. Non-quad face :指非四边形面,如三角形.
  2. Extraordinary (奇异点) : 度不为4的点

细分步骤:

1.在每个面上添加顶点

2.在每个边上添加中点

3.中点连接所有新顶点

引入了两个度为3的新顶点, 得到经过一次细分的图,如下:

 

问题如下:

经过了一次细分后, 现在有多少个奇异点呢? 

答:4个

新顶点它们的度是多少?

答:3个 因为在三角形内创建顶点,而顶点要连接所在面的所有中点,在三角形中,自然连接了3条边.

还有多少个非四边形面?

答:没有 因为在三角形内新增了一个奇异点, 导致一个三角形被分成3个四边形面.

 总结 : 在经过一次Catmull-Clark 细分后, 所有的三角形都变成了一个奇异点, 没有三角形了.

再次做Catmull-Clark 细分, 没有新的顶点(奇异点)加入, 因为已经没有非四边形面了, 而是顶点的位置在改变.

 再次做细分:

Catmull-Clark 位置更新规则(四边形面) :

整体来说: 就是取周围点做加权平均操作.

两种方法不同的应用

Loop 曲面细分: 只用作三角形面

Catmull-Clark 曲面细分: 用作多种不同边的面

网格简化(Mesh Simplification):

离远了看模型, 对于模型的细节要求不高(面数可以较少)

离近了看模型, 对于模型的细节要求较高(面数要较多)

但是从远到近, 或者从近到远有个面数的变化, 不希望别人看的出来.

(从左往右, 面数逐渐减少)

一种网格简化方法: 边坍缩

将一条边的两个顶点, 移到中点.

如何找到哪些顶点应该被坍缩?

对验证来说, 进行局部加权平均并不是一个好主意

引入一个新概念: 二次误差度量(Quadric Error Metrics)

二次误差:新的顶点应该与其先前相关的三角形平面的平方距离之和达到最小 (类似机器学习的L2距离)

坍缩实际做法?

先算出每个点的二次误差度量, 然后取所有点的二次误差度量中的最小值, 对其坍缩操作.然后对剩余的其它顶点做优先队列或者堆的更新, 然后再取最小值, 再更新(更新边的二次误差度量, 因为一些边会共享一个顶点, 更新了便会有其它边的移动), 类似于贪心算法

 网格简化结果:

Shadows(阴影) :

Shadow map:

1.应用在点光源(方向光源)

2.主要思想: 判断点光源和摄像机是否能看见某个顶点, 如果点光源和摄像机能看见则说明无阴影, 只有摄像机看得见则有阴影.

3.只能渲染硬阴影hard shadows(非0即1的阴影),

实际步骤 :

1.记录从点光源看到场景的深度图.

2.将摄像机投影视线中的可见点放回光源

重新投影回光源后,来自光线和眼睛的深度是不一样的. 被阻挡了

以下面两个左边黑点为例, 两个都同时被摄像机和光源看见, 左边的黑点所记录的深度一致, 但是右边的记录深度不一致, 光源记录的是上面的灰点深度, 摄像机记录的是黑点深度.

相关词语翻译

light’s point-of-view : 从光源位置看向这个几何

eye’s point-of-view again : 再从摄像机位置看向几何

 记录从光源位置看向几何的深度图

可视化阴影映射 :

我们从灯光的角度渲染场景,从灯光的角度看到的一切都是被照亮的,而我们看不到的一切都必须在阴影中

为什么shadow map 图这么脏?因为距离一般是浮点数, 在判断深度图距离来决策是否有阴影时, 会有数值精度问题

至今还有很多shadow map的问题

阴影质量取决于shadow map的分辨率(基于图像的技术的一般问题)

涉及浮点深度值的相等比较,是指尺度、偏差、公差等问题

硬阴影Hard shadows(上图)和 软阴影soft shadows(下图)

出现软阴影, 一定是因为点光源有一定的大小

Umbra: 本影

Penumbra: 本影周围的半阴影

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值