GAMES101笔记 Lecture10 Geometry1 (Introduction)

目录

      • Application for Texture(纹理的应用)
        • Environment Map(环境光贴图)
          • Spherical Environment Map(球形环境光贴图)
          • Cube Map(立方体贴图)
        • Texture can affect shading!(纹理可以作用于着色)
          • How to perturb the normal (in flatland)(如何计算法线如何变化呢?)
          • Displacement mapping(位移贴图)
        • Provide Precomputed Shading(提供预先计算好的阴影)
        • 3D Textures and Volume Rendering(三维纹理和体渲染)
      • Introduction to geometry(几何介绍)
        • Examples of Geometry(几何的例子)
        • Many Ways to Represent Geometry(许多方式来表示几何)
          • 隐式的几何
          • 显示的几何
          • "Implicit" Representations of Geometry(几何的隐式表示)
          • "Explicit" Representations of Geometry(几何的显式表示)
          • Many Implicit Representations in Graphics
            • 代数曲面
            • Constructive Solid Geometry(CSG)
            • Distance Functions(距离函数)
            • Level Set Methods(水平集)
            • Fractals(分形)
      • 参考资源

Application for Texture(纹理的应用)

继续上节课的内容,纹理的应用部分。

在现代GPU中,我们可以理解纹理就是内存加范围查询,可以做不同范围的查询。

Environment Map(环境光贴图)

我们可以用纹理去描述整个环境光的样子,用环境光去渲染其它物体。

GAMES101笔记 Lecture10 Geometry1 (Introduction)_第1张图片

Spherical Environment Map(球形环境光贴图)

我们可以把整个环境光记录在球上,然后把它展开:

但是会出现上下方扭曲的情况:这不是一个均匀的描述

Cube Map(立方体贴图)

为了解决上图中出现的扭曲的情况,使用立方体来记录环境光,然后将其展开:

GAMES101笔记 Lecture10 Geometry1 (Introduction)_第2张图片
因为立方体六个面都是均匀的,因此很少出现扭曲的情况。

二者的本质是相同的,都是为了描述来自不同方向的光照信息。

Texture can affect shading!(纹理可以作用于着色)

纹理并不只可以用来描述颜色:

我们可以在纹理贴图上定义一个相对高度,这就是凹凸贴图

如果纹理贴图存储的是法向量,这就是法线贴图

GAMES101笔记 Lecture10 Geometry1 (Introduction)_第3张图片
我们并不需要改变任何几何信息,三角形数量不会改变:

  • 对于每个像素,对平面的法向量进行扰动
  • 凹凸贴图通过改变高度来改变法线。
How to perturb the normal (in flatland)(如何计算法线如何变化呢?)

首先,考虑简单的情况,在一维版本中:

  • 假设原始平面的法向量是 n ( p ) = ( 0 , 1 ) n(p) = (0, 1) n(p)=(0,1)
  • 那么在凹凸贴图中,点 p p p的切线方向为: c × [ h ( p + 1 ) − h ( p ) ] c \times [h(p + 1) - h(p)] c×[h(p+1)h(p)],其中常数 c c c是我们自定义的关于凹凸贴图影响的常数。
  • 通过切线就可以计算出法线,逆时针旋转90度即可,: n ( p ) = ( − d p , 1 ) n(p) = (-dp, 1) n(p)=(dp,1),进行归一化即可。

GAMES101笔记 Lecture10 Geometry1 (Introduction)_第4张图片

现在,考虑复杂的情况,在三维版本中:

  • 假设 p p p点的原始法线为 n ( p ) = ( 0 , 0 , 1 ) n(p) = (0, 0, 1) n(p)=(0,0,1)
  • p p p点的切线:分别计算高度关于 u u u v v v的导数
    • d p / d u = c 1 ∗ [ h ( u + 1 ) − h ( u ) ] dp / du = c1 * [h(u + 1) - h(u)] dp/du=c1[h(u+1)h(u)]
    • d p / d v = c 2 ∗ [ h ( v + 1 ) − h ( v ) ] dp / dv = c2 * [h(v + 1) - h(v)] dp/dv=c2[h(v+1)h(v)]
  • 可以得出现在 p p p点的法线为: n ( p ) = ( − d p / d u , − d p / d v , 1 ) n(p) = (-dp / du, -dp / dv, 1) n(p)=(dp/du,dp/dv,1),记得做归一化处理。
  • 这是局部坐标系中,我们还需要变换回世界坐标系,在作业3中有体现。
Displacement mapping(位移贴图)

使用纹理来定义任何一点应该有的相对的高度。

和凹凸贴图不同的是,位移贴图真的会让顶点进行移动,顶点位置发生了变化。

GAMES101笔记 Lecture10 Geometry1 (Introduction)_第5张图片

Provide Precomputed Shading(提供预先计算好的阴影)

GAMES101笔记 Lecture10 Geometry1 (Introduction)_第6张图片

3D Textures and Volume Rendering(三维纹理和体渲染)

具体内容,后续会细致的讲解。
GAMES101笔记 Lecture10 Geometry1 (Introduction)_第7张图片

Introduction to geometry(几何介绍)

Examples of Geometry(几何的例子)

GAMES101笔记 Lecture10 Geometry1 (Introduction)_第8张图片
GAMES101笔记 Lecture10 Geometry1 (Introduction)_第9张图片

GAMES101笔记 Lecture10 Geometry1 (Introduction)_第10张图片

Many Ways to Represent Geometry(许多方式来表示几何)

隐式的几何
  • 代数曲面
  • 水平集,等值集
  • 符号距离函数
显示的几何
  • 点云
  • 多边形网格
  • subdivision, NURBS
“Implicit” Representations of Geometry(几何的隐式表示)

定义了空间中的点需要满足的关系:

例如,使用隐式的方法来定义一个球面:

x 2 + y 2 + z 2 = 1 x^2 + y^2 + z^2 = 1 x2+y2+z2=1

更普遍的表示方式: f ( x , y , z ) = 0 f(x, y, z) = 0 f(x,y,z)=0

存在的问题:

哪些点在曲线上呢?

有时会很难看出来:
GAMES101笔记 Lecture10 Geometry1 (Introduction)_第11张图片
优点:
很容易判断一个点是否在曲面上,或者在里面还是在外面?

只需要把坐标代入表达式,如果是正的就认为在物体外,负的就在物体内部。

“Explicit” Representations of Geometry(几何的显式表示)

所有的点都直接给出活通过参数映射的方式给出:

GAMES101笔记 Lecture10 Geometry1 (Introduction)_第12张图片
但是,显示的表面很难判断一个点是否在表面上,还是在表面里面或者外面。

根据需要来选择什么样的表示方法

Many Implicit Representations in Graphics
代数曲面

利用数学公式进行表示,缺点就是不直观,上面已经展示过了。

GAMES101笔记 Lecture10 Geometry1 (Introduction)_第13张图片

Constructive Solid Geometry(CSG)

通过一系列基本几何的基本布尔运算来定义新的几何:

GAMES101笔记 Lecture10 Geometry1 (Introduction)_第14张图片

Distance Functions(距离函数)

通过描述一个空间中的任意一个点到曲面的最小距离来定义曲面,这个距离可以是正的可以是负的。

通过使用距离函数来将曲面融合在一起:

GAMES101笔记 Lecture10 Geometry1 (Introduction)_第15张图片
GAMES101笔记 Lecture10 Geometry1 (Introduction)_第16张图片

Level Set Methods(水平集)

有时候 s d f sdf sdf并不太好通过一些表达式来表示出来,这时候就可以通过水平集的方式进行表示:

我们关注什么地方等于0:

GAMES101笔记 Lecture10 Geometry1 (Introduction)_第17张图片

Fractals(分形)

类似递归的思想。

参考资源

GAMES101 Lecture10

你可能感兴趣的:(笔记)