其他分享
首页 > 其他分享> > GAMES101笔记_Lec07~09_着色 Shading

GAMES101笔记_Lec07~09_着色 Shading

作者:互联网

0 我们已经学了什么 What We’ve Covered So Far

1 着色的定义 Shading:Definition

2 一种简单的模型:Blinn-Phong反射模型 A Simple Shading Model (Blinn-Phong Reflectance Model)

Blinn-Phong模型是经验模型,与现实相比仍有很多不足

2.1 感性观察 Perceptual Observations

在这里插入图片描述

2.2 着色具有局部性 Shading is Local

2.3 漫反射 Diffuse Reflection

在这里插入图片描述

2.4 镜面反射 Specular Term (Blinn-Phong)

在这里插入图片描述

2.5 环境光 Ambient Term

2.6 Blinn-Phong反射模型 Blinn-Phong Reflection Model

在这里插入图片描述

L = L a + L d + L s = k a I a + k d ( I / r 2 ) m a x ( 0 , n ⋅ l ) + k s ( I / r 2 ) m a x ( 0 , n ⋅ h ) p L =L_a+L_d+L_s =k_aI_a+k_d(I/r^2)max(0, n·l)+k_s(I/r^2)max(0, n·h)^p L=La​+Ld​+Ls​=ka​Ia​+kd​(I/r2)max(0,n⋅l)+ks​(I/r2)max(0,n⋅h)p

3 着色频率 Shading Frequencies

3.1 逐三角形着色 Shade each triangle (flat shading)

3.2 逐顶点着色 Shade each vertex (Gouraud shading)

3.3 逐像素着色 Shade each pixel (Phong shading)

3.4 几种着色频率的对比 Shading Frequenciesy: Face, Vertex or Pixel

3.5 定义逐顶点的法线 Defining Per-Vertex Normal Vectors

3.6 定义逐像素的法线 Defining Per-Pixel Normal Vectors

4 图形(实时渲染)管线 Graphics (Real-time Rendering) Pipeline

4.1 图形(实时渲染)管线 Graphics (Real-time Rendering) Pipeline

4.2 着色器程序 Shader Programs

uniform sampler2D myTexture;                   //全局变量 固定的纹理
uniform vec3 lightDir;                         //全局变量 固定的光照方向
varying vec2 uv;                               //每个片元插值得到的uv坐标
varying vec3 norm;                             //每个片元插值得到的法线方向

void diffuseShader()
{  
vec3 kd;                                       //Eigen库定义三维向量kd
kd = texture2d(myTexture, uv);                 //进行纹理查找以获取此时表面材质颜色
kd *= clamp(dot(–lightDir, norm), 0.0, 1.0);   //漫反射系数、光照都为常数的最简单的漫反射
gl_FragColor = vec4(kd, 1.0);                  //将得到的值返回到gl_GragColor
}

5 当下实时渲染的发展

5.1 目标:实时高度复杂的 3D 场景 Goal: Highly Complex 3D Scenes in Realtime

5.2 用于执行图形管线的硬件:GPU Graphics Pipeline Implementation: GPUs

6 纹理映射 Texture Mapping

6.1 纹理是二维的图像 Surfaces are 2D

6.2 纹理映射 Texture Applied to Surface

7 重心坐标插值 Interpolation Across Triangles: Barycentric Coordinates

7.1 为什么要进行插值 Why do we want to interpolate?

7.2 重心坐标 Barycentric Coordinates

7.2.1 什么是重心坐标 What’s the barycentric coordinate of A?

( x , y ) = α A + β B + γ C , α + β + γ = 1 (x,y)=\alpha A+\beta B+\gamma C,\quad\alpha+\beta+\gamma=1 (x,y)=αA+βB+γC,α+β+γ=1

7.2.2 利用面积确定系数 Geometric viewpoint — proportional areas

在这里插入图片描述

α = A A A A + A B + A C , β = A A A A + A B + A C , γ = A A A A + A B + A C \alpha = \frac { A _ { A } } { A _ { A } + A _ { B } + A _ { C } },\quad \beta = \frac { A _ { A } } { A _ { A } + A _ { B } + A _ { C } },\quad \gamma = \frac { A _ { A } } { A _ { A } + A _ { B } + A _ { C } } α=AA​+AB​+AC​AA​​,β=AA​+AB​+AC​AA​​,γ=AA​+AB​+AC​AA​​

7.2.3 重心坐标的计算公式 Barycentric Coordinates: Formulas

7.2.4 重心坐标的使用 Using Barycentric Coordinates

V = α V A + β V B + γ V C V=\alpha V_A+\beta V_B+\gamma V_C V=αVA​+βVB​+γVC​

8 纹理应用 Applying Textures

8.1 简单的纹理应用:定义漫反射系数 Simple Texture Mapping: Diffuse Color

for each rasterized screen sample (x,y):
	(u,v) = evaluate texture coordinate at (x,y)  //利用重心坐标算出每个采样点uv坐标
	texcolor = texture.sample(u,v);               //通过uv坐标查询纹理贴图
	set sample’s color to texcolor;               //通常定义的是漫反射系数Kd

9 纹理放大 Texture Magnification

9.1 问题

9.2 双线性插值 Bilinear Interpolation

在这里插入图片描述

9.3 双三次插值 Bicubic Interpolation

10 纹理过大的问题 Texture Magnification (hard case)

10.1 纹理过大的问题

在这里插入图片描述

10.2 解决方法:多级渐远纹理 Mipmap

10.2.1 Mipmap(L. Williams 83)

10.2.2 计算mipmap等级 Computing Mipmap Level D

D = log ⁡ 2 L , L = max ⁡ ( ( d u d x ) 2 + ( d v d x ) 2 ⋅ ( d u d y ) 2 + ( d v d y ) 2 ) D=\log_2L,\quad L = \max ( \sqrt { ( \frac { d u } { d x } ) ^ { 2 } + ( \frac { d v } { d x } ) ^ { 2 } } \cdot \sqrt { ( \frac { d u } { d y } ) ^ { 2 } + ( \frac { d v } { d y } ) ^ { 2 } } ) D=log2​L,L=max((dxdu​)2+(dxdv​)2 ​⋅(dydu​)2+(dydv​)2 ​)

10.2.3 三线性插值 Trilinear Interpolation

在这里插入图片描述

10.3 各向异性过滤 Anisotropic Filtering

10.3.1 Mipmap的问题

10.3.2 各向异性过滤 Anisotropic Filtering

10.4 EWA过滤 EWA filtering

11 纹理贴图的应用 Application of Texture

11.1 总述:有许多种类的贴图 Many, Many Uses for Texturing

11.2 环境光贴图 Environment Map

11.3 凹凸贴图 Bump Mapping

11.4 位移贴图 Displacement mapping

11.5 程序化纹理 3D Procedural Noise&Procedural textures

11.6 预计算着色 Precomputed Shading

11.7 三维纹理和体渲染 Solid modeling and Volume rendering

三维纹理广泛应用到体渲染之中,比如在医学领域使用核磁共振得到三维空间中的密度信息进行渲染
在这里插入图片描述

标签:环境光,Lec07,插值,09,法线,纹理,着色,Shading,像素
来源: https://blog.csdn.net/Ziiur/article/details/122782457