山东大学计算机图形学期末复习8——CG11下
CG11下
多边形近似问题
-
用多边形近似平滑曲面时,颜色不连续,导致效果不佳。
-
Gouraud着色
对于多边形模型,Gouraud提出使用网格顶点周围法向量的平均值作为顶点法向量:
n = n 1 + n 2 + n 3 + n 4 ∣ n 1 + n 2 + n 3 + n 4 ∣ \mathbf{n}=\frac{\mathbf{n}_1+\mathbf{n}_2+\mathbf{n}_3+\mathbf{n}_4}{\left|\mathbf{n}_1+\mathbf{n}_2+\mathbf{n}_3+\mathbf{n}_4\right|} n=∣n1+n2+n3+n4∣n1+n2+n3+n4
- 在每个顶点使用Phong光照模型计算RGB颜色。
- 通过线性插值计算多边形内点的颜色。
- 插值公式:
- 对于点 P 1 P_1 P1(在边 AB 上):
s = ∥ P 1 − B ∥ ∥ A − B ∥ , ( R P 1 , G P 1 , B P 1 ) = s ( R A , G A , B A ) + ( 1 − s ) ( R B , G B , B B ) s=\frac{\left\|P_1-B\right\|}{\|A-B\|}, \quad\left(R_{P_1}, G_{P_1}, B_{P_1}\right)=s\left(R_A, G_A, B_A\right)+(1-s)\left(R_B, G_B, B_B\right) s=∥A−B∥∥P1−B∥,(RP1,GP1,BP1)=s(RA,GA,BA)+(1−s)(RB,GB,BB)
- 对于点 P P P(在P1P2之间):
s = ∥ P − P 2 ∥ ∥ P 1 − P 2 ∥ , ( R P , G P , B P ) = s ( R P 1 , G P 1 , B P 1 ) + ( 1 − s ) ( R P 2 , G P 2 , B P 2 ) s=\frac{\left\|P-P_2\right\|}{\left\|P_1-P_2\right\|}, \quad\left(R_P, G_P, B_P\right)=s\left(R_{P_1}, G_{P_1}, B_{P_1}\right)+(1-s)\left(R_{P_2}, G_{P_2}, B_{P_2}\right) s=∥P1−P2∥∥P−P2∥,(RP,GP,BP)=s(RP1,GP1,BP1)+(1−s)(RP2,GP2,BP2)
Gouraud着色与高光问题
-
Gouraud着色的原理:
-
顶点处的光照计算
- 顶点法线:Gouraud着色在顶点处进行光照计算。每个顶点都有一个法线向量,这个法线向量用于确定该顶点处的光照反射情况。顶点法线通常是通过对其相邻面的法线进行平均来得到的,这样可以近似模拟曲面的光照效果。
- 光照模型:在顶点处,使用光照模型(如Phong光照模型)计算光照强度。光照模型考虑了环境光、漫反射光和镜面反射光等因素,通过顶点法线和光源方向等参数来计算每个顶点的颜色值。
-
在Gouraud着色中,光照计算是在每个顶点处进行的。每个顶点的RGB颜色值是通过光照模型计算得出的。然后,这些颜色值在多边形的面上进行插值,以确定面上每个点的颜色。
-
-
高光缺失的原因:
- 当使用Gouraud着色时,如果高光应该出现在多边形面的中心(例如点P),但该面的顶点(如A、B、C)远离高光区域,那么顶点处的光照计算可能不会包含高光。这是因为顶点处的法线方向与高光反射所需的条件不匹配,导致顶点处没有高光。
- 由于Gouraud着色通过插值顶点颜色来确定面上的颜色,如果顶点处没有高光,那么整个面上的插值结果也不会包含高光。因此,面的内部区域(如点P)将无法正确显示高光。
Phong着色(Phong Shading)是一种用于计算机图形学中光照效果的技术,它与传统的Gouraud着色不同,Phong着色插值的是法向量而非颜色。这使得Phong着色能够精确模拟每个像素的光照,特别是高光和复杂的光照效果,从而提供更细致、真实的图像。
Phong着色算法流程
- 计算每个顶点的法向量:
- 每个顶点都有一个法向量。通常,这些法向量是通过计算与相邻多边形的法向量的平均值来得到的。通过这种方式,可以确保法向量在整个模型表面上是平滑过渡的。
- 边上插值:
- 对于每个边上的点(如 P 1 P_1 P1, P 2 P_2 P2),根据相邻顶点(例如 A A A, B B B)的法向量,通过线性插值得到这些点的法向量。这个插值过程基于相邻顶点的法向量进行,从而确保边缘的法向量也是平滑过渡的。
- 多边形内部插值:
- 对于多边形内部的点(例如点 P P P),法向量由相邻边上的法向量插值得到。具体来说,如果我们有两个边(例如边 P 1 P P_1P P1P 和边 P 2 P P_2P P2P),则点 P P P 的法向量由这两个边上的插值法向量得到。
- 计算光照:
- 使用Phong光照模型计算点 P P P 的RGB颜色。具体来说,Phong模型包括三个主要部分:漫反射光、镜面反射光和环境光。
- 漫反射光:与表面法向量和光源方向的关系有关,遵循Lambert’s Cosine Law。
- 镜面反射光:模拟高光,通常与观察者视角和反射光线之间的夹角有关。
- 环境光:提供一个基本的、均匀的照明,模拟从所有方向照射的光。
- 法向量的插值使得每个像素的光照计算更加精确,特别是在模拟表面高光和复杂的反射效果时。
- 使用Phong光照模型计算点 P P P 的RGB颜色。具体来说,Phong模型包括三个主要部分:漫反射光、镜面反射光和环境光。
发现没?gouraud插值的是光照颜色,而phone插值的是法向量值
过程总结
- 顶点法向量:首先计算每个顶点的法向量。
- 边法向量插值:在每条边的每个点上,基于顶点的法向量进行插值。
- 内部法向量插值:在多边形内部的每个点上,基于相邻边的法向量进行插值。
- 光照计算:利用插值后的法向量,使用Phong光照模型来计算每个点的颜色。
曲面细分(Subdivision Surface)是计算机图形学中的一种方法,用于将粗糙的多边形网格细化为平滑的曲面。细分算法通过递归地分割网格中的每个多边形,逐步使曲面变得光滑,最终形成一个极限曲面。
Catmull-Clark细分算法
Catmull-Clark细分算法是最著名和广泛应用的细分算法之一。它适用于四边形网格,旨在通过多次细分,将粗糙的网格转变为光滑的曲面。该算法是由Edwin Catmull和Jim Clark于1978年提出的。
Catmull-Clark细分基本概念
-
面点(Face Points):
面点是一个新点,它位于一个四边形面的中心,坐标为四个角点的平均值。即对于一个四边形面(由四个顶点组成),面点坐标 f f f 可以计算为:
f = 1 n ∑ i = 1 n p i f = \frac{1}{n} \sum_{i=1}^n p_i f=n1i=1∑npi
其中, n n n 是四边形的角点数, p i p_i pi 是这些角点的坐标。 -
边点(Edge Points):
边点是位于每个边的中点,坐标是两个端点和相邻面点的平均值。对于一条边(由两个顶点组成)和它相邻的两个面,边点的计算公式为:
e = p 1 + p 2 + f 1 + f 2 4 e = \frac{p_1 + p_2 + f_1 + f_2}{4} e=4p1+p2+f1+f2
其中, p 1 p_1 p1 和 p 2 p_2 p2 是边的两个端点, f 1 f_1 f1 和 f 2 f_2 f2 是相邻面的面点。 -
顶点(Vertex Points):
顶点的更新更复杂。它是原始顶点位置与相邻面点和边点的加权平均。公式为:
p ′ = n − 3 n p + 2 n 2 ∑ j e j + 1 n 2 ∑ j f j p' =\frac{n-3}{n} p+\frac{2}{n^2} \sum_j e_j+\frac{1}{n^2} \sum_j f_j p′=nn−3p+n22j∑ej+n21j∑fj
其中:- p p p 是原始顶点坐标。
- n n n 是顶点的度数(即顶点相邻的面数)。
此外,异常点(degree ≠ 4的顶点)需要特殊处理。
Catmull-Clark细分的几何更新规则
通过递归细分,新的网格逐渐平滑。每次细分后,网格的拓扑结构会发生变化,新顶点和边的生成使得曲面更加光滑。Catmull-Clark算法对于每个细分步骤都会根据上面列出的规则更新顶点、边和面。
Catmull-Clark细分公式
-
面点公式:
f = 1 n ∑ i = 1 n p i f = \frac{1}{n} \sum_{i=1}^n p_i f=n1i=1∑npi -
顶点更新公式:
p ′ = n − 3 n p + 2 n 2 ∑ j e j + 1 n 2 ∑ j f j p' =\frac{n-3}{n} p+\frac{2}{n^2} \sum_j e_j+\frac{1}{n^2} \sum_j f_j p′=nn−3p+n22j∑ej+n21j∑fj -
边点公式:
e = p 1 + p 2 + f 1 + f 2 4 e = \frac{p_1 + p_2 + f_1 + f_2}{4} e=4p1+p2+f1+f2
通过这些公式,Catmull-Clark算法在每次细分中更新网格,逐渐平滑曲面。
Catmull-Clark细分与其他细分算法的对比
- 线性细分(Linear Subdivision):
- 规则:简单的边中点细分,顶点坐标为简单的平均值。
- 效果:生成的网格平滑性较差,可能会保留棱角。
- 计算成本:低,适用于快速原型或简单场景。
- 适用场景:不适合复杂曲面,通常用于简单的几何体。
- Catmull-Clark细分:
- 规则:复杂的规则,面点、边点和顶点分别进行加权平均,考虑相邻面的影响。
- 效果:生成的曲面更加平滑,接近B样条曲面。能够处理异常点,生成高质量的光滑曲面。
- 计算成本:较高,但质量优异,适用于复杂场景。
- 适用场景:广泛应用于动画、建模软件(如Maya、Blender等),常用于复杂几何体的建模和细化。
Shading in OpenGL
暂时略