【Notes_5】现代图形学入门——着色(光照模型、着色频率、重心坐标)

跟着闫令琪老师的课程学习,总结自己学习到的知识点

课程网址GAMES101
B站课程地址GAMES101
课程资料百度网盘【提取码:0000】

光栅化

着色(Shading)

在图形学中,着色的定义可以为:对物体(模型)应用某种材质。
主要是通过光照以及着色点参数进行表现。
在我们感知观察中,光线可以分为:高光、漫反射、环境光。

下面介绍一种简单的模型,对各种光照模型进行研究。

Bling-Phong Reflection Model

Phong反射模型

下图是光线照射到着色点上的示意图,为了便于分析,我们假设光线是从着色点方向发出。

Diffuse Reflection(漫反射)

漫反射: 当Phong模型表面是粗糙材质时,光照射到着色点时,会发生均匀反射,并且反射的光线的光强都相同。

那么每个入射的光线实际上照射到着色点的光强该怎么算。看下面的模型,首先光线与法线 n n n的夹角 θ \theta θ有关, cos ⁡ ( θ ) = l ⃗ ⋅ n ⃗ \cos(\theta)=\vec{l}\cdot \vec{n} cos(θ)=l n ( l ⃗ 、 n ⃗ ) (\vec{l} 、\vec{n}) (l n )为单位向量。

其次,图中中心为一个点光源,光线均匀的向周围发射,可以想象光源发射出来的能量其实是一定的,那么在任意两个圈上接受到的能量一定相等。而离圆心越远,圆的面积越大,单位面积所接受能量也就越弱。半径 r r r上的一点接收的能量为 I r 2 \frac{I}{r^2} r2I.

所以Diffuse Reflection可以用下面的式子表示

可以看出光强 L d L_d Ld与着色点表面参数 k d k_d kd、入射角 m a x ( 0 , n ⃗ ⋅ l ⃗ ) max(0,\vec{n} \cdot \vec{l}) max(0,n l )、入射时的光强 I r 2 \frac{I}{r^2} r2I有关。

[Notes]: 入射角 m a x ( 0 , n ⃗ ⋅ l ⃗ ) max(0,\vec{n} \cdot \vec{l}) max(0,n l ) 最小为0。

下图反应了着色点的表面参数对Diffuse Reflection的影响。

Specular HighLight(高光)

高光发生的反射实际上是镜面反射,所以反射光线的范围很小。所以想要表示Specular Trem,需要表示反射光线与视点观测线之间的远近。

表示反射光线与视点观测线之间远近我们可以转化为求法线 n ⃗ \vec{n} n 与半程向量 h ⃗ \vec{h} h 之间的距离的远近。Specture Term也可以表示如下,仔细与Diffuse Term比较发现,Specture Term的相邻角是 m a x ( 0 , cos ⁡ α ) p max(0,\cos \alpha)^p max(0,cosα)p,多了个指数。原因【图2】,镜面反射的范围通常小,所以增加指数,这样,可以很好模拟镜面反射范围小。

由Specture Term可以知道镜面反射光强与镜面反射点参数$k_s$、入射时的光强$\frac{I}{r^2}$、视点与反射光线远近相关$max(0,\cos(\alpha))^p$有关。下图是$k_s、p$的对Specture HighLight的影响。
Ambient Term

环境光比较特殊、只有着色点表面因素的影响。

Blinn-Phong Reflection Model Term

基于以上三个式子,Bling-Phong模型的光照模型就可以表述出来了。

着色频率

前面我们知道了局部光照模型等式,但想要计算整个模型的光照模型,还需要知道每个模型上着色点的分布,引出了着色频率的概念。着色频率分为以下三种:Flat Shading、Gouraud Shading、Phong Shading,分别对应着三角形面着色、三角形顶点着色、每个点着色,以下是三种着色频率的效果。

Flat Shading(Shading each triangle)

在每个三角形的面上着色,对应着Flat Shading。每个三角形面的面法线只有一个,所以可以利用光照模型等式直接进行计算。这种着色效果是一个三角形面里的颜色一样,所以着色效果不平滑。

Gouraud Shading(Shading each vertex)

对每个三角形的顶点进行着色、对每个三角形面中间的颜色进性插值。Gouraud Shading着色有两个主要问题:
1 顶点着色时的法线怎么计算
2 怎样对三角形进行插值

顶点法线

1 最好的方法是对顶点的外接圆,然后找到对应点外接圆的法线即可。

2 平均每个顶点相接的面法线。

N v = ∑ i N i ∣ ∣ ∑ i N i ∣ ∣ N_v=\frac{\sum_i N_i}{||\sum_i N_i||} Nv=iNiiNi

插值

在讲插值之前首先要明白重心坐标。对三角形面内任意一点一定会有 α 、 β 、 γ \alpha、\beta、\gamma αβγ满足以下等式:
( x , y ) = α A + β B + γ C α + β + γ = 1 (x,y)=\alpha A+\beta B+\gamma C \\ \alpha+\beta+\gamma=1 xy=αA+βB+γCα+β+γ=1

在三角形内部, α 、 β 、 γ \alpha 、\beta、\gamma αβγ为非负数,这可以作为判断点是否在三角形的依据。求解 α 、 β 、 γ \alpha 、\beta、\gamma αβγ就简单多了,
1 把三角形坐标带入上述公式,求解。
2 通过以下公式进行求解

3 通过以下公式进行求解

对已经得到 α 、 β 、 γ \alpha 、\beta、\gamma αβγ的重心坐标,满足以下性质:每个重心坐标的某个属性,都可以通过以下公式求解出来。下图是对重心坐标的颜色进行插值。

Phong Shading(Shading each pixel)

对模型的每个点进行着色,然后对点包围的三角形进行颜色插值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值