Graphics Pipeline
从真实世界场景中的物体到最终的一张图的整个过程,其中涉及不同的操作。
- Vertex Processing:其实就是MVP变换对应的过程;
- Triangle Processing:是将三维物体中的点全部完成投影后,根据存储的点之间的连接信息,形成三角形,这只是不同的处理方法而已,也可以在投影过程中直接连接。
具体过程
所有这些过程均已经在GPU硬件上实现,其中对于具体的shading方法可以通过对硬件编程实现,这个编程是判断如何对三角形的顶点和像素进行着色,可以通过代码实现不同的着色结果,这部分代码称之为shader。
Shader Programs
- Program vertex and fragment processing stages
- Describe operation on a single vertex (or fragment) 只需要针对一个顶点或者像素写shader即可;
例子
openGL中实现漫反射shader。
uniform sampler2D myTexture; // program parameter
uniform vec3 lightDir; // program parameter
varying vec2 uv; // per fragment value (interp. by rasterizer)
varying vec3 norm; // per fragment value (interp. by rasterizer)
void diffuseShader()
{
vec3 kd;
kd = texture2d(myTexture, uv); // material color from texture
kd *= clamp(dot(–lightDir, norm), 0.0, 1.0); // Lambertian shading model
gl_FragColor = vec4(kd, 1.0); // output fragment color
}
- Shader function executes once per fragment.
- Outputs color of surface at the current fragment’s screen sample position.
- This shader performs a texture lookup to obtain the surface’s material color at this point, then performs a diffuse lighting calculation.
Graphics Pipeline Implementation: GPUs
Specialized processors for executing graphics pipeline computations:
- Discrete GPU Card
- Integrated GPU (Part of Intel CPU die)