跳转到主要内容
games101 2 tags

L07~09 Shading

着色定义、着色模型、着色频率、图形渲染管线、纹理

cover

1 Shading: Definition 着色定义

引入明暗与不同颜色的过程称为着色。在本课中定义是给物体应用材质的过程

着色定义

2 Blinn-Phong Reflectance Model

一种简单的着色模型,包含漫反射、镜面反射和环境光三个部分。

3 Shading Frequencies 着色频率

着色频率对比

3.1 平面着色 (Flat Shading)

平面着色

3.2 顶点着色 (Gouraud Shading)

每个顶点做一次Shading,对颜色值插值。

顶点着色

3.3 像素着色 (Phong Shading)

这里的Phong Shading指的是一种着色频率,之前说的Blinn-Phong是一种着色模型。三角形三个顶点求出法线,在三角形内部的像素,对法线值做插值,对每个像素做Shading。

像素着色

3.4 对比

几何形体足够复杂的情况下,用简单的Shading方法也可以达到好的效果。

着色频率对比

3.5 顶点法线求法

一个顶点肯定被多个三角形共用,就用相邻的三角形面法线相加再求平均,通过判断面积比例加权平均的话效果会更好。

顶点法线

内部平滑过渡的法线做法——Barycentric interpolation 重心插值,法线记得归一化。

重心插值

4 Graphics Pipeline 实时渲染管线

当下的实时渲染 渲染管线

5 Texture Mapping 纹理映射

纹理本身设计可以无缝衔接:tilable,一种设计无缝衔接纹理的方法:Wang Tiling。

我们知道三角形顶点对应的UV,那么三角形内部的UV怎么确定呢?这就需要插值方法了。

6 Barycentric Coordinates 重心坐标插值

重心坐标 重心坐标公式

💡 三维空间中的变换要在三维空间做插值然后再投影到二维去,不能先投影再插值。

插值应用

7 Applying Textures 纹理应用

点上计算得到插值出来的UV坐标,然后在纹理上查询,之后根据需要应用。

纹理应用

8 Texture Magnification 纹理过小

纹理分辨率太小,多个pixel(像素)映射到了同一个texel(纹理像素)。解决方法→插值。

纹理过小

8.1 Bilinear Interpolation 双线性插值

双线性插值:水平插值+竖直插值。lerp为linear Interpolation的缩写。

双线性插值1 双线性插值2

8.2 Bicubic Interpolation 双三次插值

取周围16个点也是做竖直和水平的插值,每次用4个,做三次的插值,不是用线性的差值。双向三次插值运算量大,但是效果好。

9 纹理过大的问题

纹理过大时,一个pixel对应了多个texel → 采样频率不足导致 摩尔纹+锯齿(走样)。

纹理过大问题1 纹理过大问题2 超采样解决

9.1 Mipmap 多级渐远纹理

Mipmap可以进行快速的范围查询,但是是近似的,并且只有方形。

三线性插值

9.2 Anisotropic Filtering 各向异性过滤

Mipmap会把远处的细节都模糊掉,因为它只能查询方块的区域内。解决三线性插值的方法就是各向异性过滤。

各向异性过滤 各向异性过滤对比

10 Application of Texture 各种纹理贴图

10.1 Environment Map 环境光贴图

把来自各个方向的光照记录下来,假设环境光来自无限远,只记录方向。

10.2 Bump Mapping 凹凸贴图

Bump Mapping的Texture记录了高度移动,不改变几何信息。贴图作出人为的假的法线,由此得到假的着色效果,产生凹凸效果。

10.3 Displacement mapping 位移贴图

与凹凸贴图的输入相同,但是位移贴图真正改变几何信息,对顶点做位移;相比上更逼真,因为凹凸贴图在边界上会露馅。

位移贴图

10.4 Procedural textures 程序纹理

三维的纹理,定义了空间中任意一点的值。对于这种纹理,并没有真正生成这个纹理的图,它们定义了三维空间的噪声函数。

程序纹理

10.5 Precomputed Shading 预计算着色

用空间换时间,先计算好环境光遮蔽贴图,然后再把纹理贴上。

预计算着色

10.6 Solid modeling & Volume rendering

三维纹理广泛应用到体渲染之中,比如核磁共振等扫描后,得到体积的信息,通过这些信息进行渲染,得到结果。

体渲染

Related Articles

继续阅读