Shading(1)Shading model / Graphics Pipeline

Shading

定义:The darkening or coloring of an illustration or diagram with parallel lines or a block of color.
在这里的定义是应用material到object的过程。

A Simple Shading Model —— Blinn-Phong Reflectance Model

Compute light reflected toward camera at a specific shading point.
这个模型讲述的是针对一个shading point怎么计算光线在这点的反射,也就是说这个时候并不考虑物体间的作用只是想光线和这一点的作用,【所以没有shadow】。

\[\begin{aligned}L&=L_a+L_d+L_s=k_aI_a+k_d(I/r^2)\max(0,\mathbf{n}\cdot\mathbf{l})+k_s(I/r^2)\max(0,\mathbf{n}\cdot\mathbf{h})^p\end{aligned} \]

Ambinet,环境光

Ambinet,环境光:是一个常数,\(L_a=k_aI_a\)

Diffuse,漫反射

Diffuse,漫反射:与光的位置和shading point的位置【或参数】相关。
这里有一个遗留问题是,入射到眼睛时就算与观察的角度无关是否与观察的位置远近有关?

其中,光的亮度衰减:

Specular,镜面反射(高光)

Specular highlight,镜面高光:与光、shading point、观察方向相关
当反射光线和观察方向相近的时候,会观察到高光

在Blinn - Phong模型中,等价为半程向量和法线相近时可以观察到高光:

注意到,这里的cosine是指数,原因是为了更好的模拟【相近】这一过程,一般会采用100-200.

Shading Frequencies


一般包括Flat shading(基于三角面)、Gouraud Shading(基于顶点)、Phong shading(基于像素)

Flat shading

Triangle face is flat — one normal vector 。这里其实感觉有个问题,shading是针对point去shading的话,具体的三角形位置选择哪里?

Gouraud Shading

Interpolate colors from vertices across triangle

这里有一个问题就是,顶点的法线怎么计算?
目前常用的方法是取相邻n个面的法线的平均值:

\[N_v=\frac{\sum_iN_i}{\|\sum_iN_i\|} \]

Phong shading

Interpolate normal vectors across each triangle
Compute full shading model at each pixel

Pixel Normal Vectors
通过顶点法线的插值:

Graphics (Real-time Rendering) Pipeline

整个渲染管线集成在GPU(Graphics processing unit)中,在整个渲染管线中有一些可编程的部分,比如我们可以在Vertex Processing的过程中写Vertex Shader,也就是在顶点上着色。在Fragment Processing中写Fragment Shader,也就是在Fragment上着色(这里对Fragment的理解感觉是三角面片覆盖的一些部分)。然后和GLSL的关系就是,可编程的这部分可以用OpenGL或DirectX这部分API帮助。

Texture Mapping

定义了顶点和纹理的坐标的转换
【纹理贴图和着色的区别?感觉纹理是一种底色的感觉?可以作为Blinn-Phong模型中的\(k_d\)
这个转换只定义了顶点的贴图,顶点和顶点之间可以通过插值进行计算。

posted @ 2024-03-21 10:35  小帆敲代码  阅读(3)  评论(0编辑  收藏  举报