Blinn-Phong Reflectance Model 光照模型 着色模型
着色(光照与基本着色模型)
着色和阴影无关
Shading:The process of applying a material to an object.
Blinn-Phong Reflectance Model 光照模型 着色模型
-
Diffuse
-
Lambertian (Diffuse) Shading
- 几个变量:k_d, r, n, l
- 光线的反射和我们的观察角度并没有任何关系。所以我们现在先考虑一种最简单的情况:入射光以及入射角度,那么入射角度与表面法线的夹角越小,就意味着反射越强:
-
和view的方向无关
-
-
Specular
- V close to mirror direction → half vector near normal
- 几个变量:k_s, r, l, v, n, p
- p一般100~200,控制高光大小
-
Ambient
- 是假的
- 提升亮度
- 真的:全局光照(GI)十分复杂
合起来:
- h是半程向量
Shading is Local:对某个点进行计算,局部,只看自己,不管其他物体的存在
光的能量密度的 平方反比定律
- 点离光源的radiance
点离观察点的距离无关
镜面反射
左图:指数p是为了进一步缩小高光范围所提供的的参数,通常取值大于100
右图:不同光照强度和p的取值对高光效果的影响
环境光照
叠加效果
着色频率
Flat Shading(平面着色)
以三角面为单位进行着色,对于光滑的几何体效果很差
Gouraud Shading(高洛德着色)
以顶点为单位进行着色,通过插值计算,实现点与点之间颜色的平滑过渡
Phone Shading(冯氏着色)
以片元为单位进行着色,对每个点计算一次光照,点的法向量是通过顶点法向量插值得到的,冯氏着色最接近现实,可以在减少三角面数的情况下达到相同的效果(插值后法向量会光滑变化),当然,性能开销也非常大
图形管线(实时渲染管线)
从MVP变换将几何空间的顶点变换到屏幕上(Vertex processing),然后连线出三角形(Triangle processing),再通过光栅化(Rasterization)找到被几何体包住的像素点,即把这个三角形离散成为一堆像素点,有了像素点之后我们再通过深度测试和抗锯齿,给像素点渲染好对应的颜色。
顶点处理 -> 三角形处理 -> 光栅化 -> 片元处理 -> 逐片元操作
其中,Vertex和Fragment阶段是可编程的
由于翻译问题,具体可以参考《unity shader入门精要》p9 内容
GPUs: 可并行的图形管线处理器
当下的图形实时处理技术可以实时的处理200-400万面的复杂场景数据,并以30-60的帧率动态处理(VR的帧率会更加夸张)