【计算机图形学】着色简介
作者:互联网
文章目录
前言
这里简单记录下。
我不知道这个理解对不对。着色(shading)可以分为两部分:光照模型+纹理映射。即:输入三维点,这些点有它们原有的颜色,它们它们撑起一个模型;这些点使用相同的光照模型,从而有亮暗之间的区别;但是不同位置,光照模型的系数应当有所区别,所以引入纹理,在保持亮暗的情况下,调整不同位置的漫反射情况。
那么在什么位置进行着色,如何着色呢?我暂时不知道,可以参考:opengl 三角形中顶点着色器,几何着色器,片段着色器的位置。
光照模型
光照模型包含三部分:镜面反射+漫反射+环境光照。它们的计算公式如下。
(1)环境光照: L a = k a ∗ I a L_a = k_a * I_a La=ka∗Ia。
其中, k a k_a ka为物体表面对环境光的反射率,则 I a I_a Ia为环境光的强度。反射率越高,最终人眼接收到的环境光强度 L a L_a La就会越大。
如果只有环境光模型,那么最终物体表面的颜色只是个统一的值,没有深度的变化。
(2)漫反射: k d ∗ ( I / r 2 ) ∗ m a x ( 0 , n ⋅ l ) k_d * (I/r^2) * max(0,\boldsymbol{n \cdot l}) kd∗(I/r2)∗max(0,n⋅l) 。
其中, ( I / r 2 ) (I/r^2) (I/r2) 中 r r r 表示光源与点之间的距离。距离越远,光越弱; n ⋅ l \boldsymbol{n \cdot l} n⋅l 表示光线与当前点法线值的余弦值,角度越大,光越弱;
(3)镜面反射: k s ∗ ( I / r 2 ) ∗ m a x ( 0 , n ⋅ h ) p k_s * (I/r^2) * max(0,\boldsymbol{n \cdot h})^p ks∗(I/r2)∗max(0,n⋅h)p 。
根据入射光线和法线向量,可以得到反射光想的方向,根据反射光线的方向与视角方向的夹角计算人眼接收到光线的强度,这种高光模型称为phong模型。blinn对该模型进行了改进,根据光线方向和视角方向引入了半程向量,如下图所示,半程向量与法线向量的夹角的cos就间接表示了视角和反射光线的夹角的余弦值。加上一个指数p,就是让角度稍大,光线强度急速下降。
(4)上面三步是在一个点上应用光照模型。如何将光照模型应用到整个物体上呢?Flat、Gouraud、Phong Shading 着色方法对比 |[计算机图形学基础] 三种光照着色技术 Flat / Gouraud / Phong
Flat shading 是最简单的着色模型,每个多边形只会呈现一个颜色,这个颜色由面法向量和光照计算得来。在该模型中,每个多边形中只有多边形的面存在法向量,而其各个顶点没有。
Phong shading 是三者之中最复杂的着色方法。它的特点是结合了多边形物体表面反射光的亮度,并以特定位置的表面法线作为像素参考值,以插值方式来估计其他位置像素的色值。在这种情况下,多边形中每个顶点都有一个法向量,通过这些法向量与光照计算,来得到每个点的颜色。在使用有限数量的多边形时,对定点法向量进行插值可以给出近似平滑的曲面效果,但是这样一来的计算量肯定是非常大的。
Gouraud shading 是三者中比较折衷的方法。类似 Phong shading,其多边形的每个顶点都有一个法向量,但它在着色时不是对向量进行插值。实际使用时,通常先计算多边形每个顶点的光照,再通过双线性插值计算三角形区域中其它像素的颜色。
纹理
把纹理信息作为漫反射系数 k d k_d kd。
难点在于,如何建立图形和纹理之间的映射关系。
可参考:GAMES101-现代计算机图形学入门-闫令琪-p9 、8、计算机图形学——纹理的相关问题及解决办法
标签:多边形,简介,模型,图形学,着色,光照,向量 来源: https://blog.csdn.net/sinat_38816924/article/details/123209161