Skip to content
PostComputer Graphics / Lecture

01-CG-Shading

2025-06-02
Back to Blog

Computer Graphics-Shading

Types of lighting, materials and shading

Direct and Global Illumination

  • Direct illumination: A surface point receives light directly from all light sources in the scene

    • Computed by the local illumination model
    • Determine which light sources are visible
  • Global illumination: A surface point receives light after the light rays interact with other objects in the scene.

Lighting and Shading

  • Light sources properties

    • Emittance spectrum (color)
      • 光源的颜色(如 RGB 色彩)决定了其发出的光的光谱特性。
    • Geometry (position and direction)
      • 点光源、方向光、聚光灯等不同类型的光源需定义位置或方向(如方向光的平行光线方向)。
    • Directional attenuation (falloff)
      • 光的强度随距离的变化规律(如点光源的平方衰减、方向光无衰减)。
  • Surface properties

    • Reflectance spectrum (color)
      • 物体表面对不同颜色光的反射能力(如红色物体反射红光,吸收其他光)。
    • Geometry (position, orientation, and micro-structure)
      • 表面的宏观位置和朝向(由法线向量表示);
      • 微观结构(如粗糙度)影响光的散射方式(如漫反射或镜面反射)。
    • Absorption
      • 物体对光的吸收能力,未被反射的光会被吸收。
  • Shading: Ambient, Diffuse, Emissive, Specular

    • 环境光(Ambient):模拟间接光照(如房间内的漫反射光);
    • 漫反射(Diffuse):模拟粗糙表面的均匀反射(如纸张、布料);
    • 自发光(Emissive):物体自身发光(如灯泡、屏幕);
    • 镜面反射(Specular):模拟光滑表面的高光(如金属、玻璃)。
  • Some basic approximations to capture key effects in lighting and shading

Point Light Sources

点光源的物理特性

  • 光线发散规律 点光源的光线从某一点向四周 径向发散(如灯泡),其到达物体表面的光强与 距离的平方成反比(遵循物理中的 平方反比定律)。

    • 数学表达:光强 I1d2,其中 d 为光源到物体表面的距离。
  • 与线光源的对比

    • 点光源:三维空间中光线呈球形发散,衰减为 二次方关系d2)。
    • 线光源(如灯管):光线呈圆柱形发散,衰减为 线性关系d),因为能量分布在圆柱面上,面积与距离 d 成正比。

衰减模型(Attenuation Model) 通用衰减公式,用于模拟点光源的强度衰减:

A=1kc+kld+kqd2
  • 参数含义

    • d:光源到物体表面的距离。
    • kc(常数项):避免分母为零,确保近距离光强不会无限大(如 kc=1 时,距离 d=0 处衰减为 1)。
    • kl(线性项):模拟线性衰减成分(如环境光散射)。
    • kq(二次项):模拟平方反比衰减的主导物理规律。
  • 作用: 通过调整 kc,kl,kq 的值,可以灵活控制衰减速度。例如:

    • kl=kq=0,则无衰减(光强恒定);
    • kq0,则近距离衰减明显,远距离趋近于零。
  • 实际应用中的简化 计算机图形学中常 忽略衰减(假设 kc=1,kl=kq=0),尽管这不符合物理真实,但可简化计算(如实时渲染中提升性能)。

Material Properties

  • Need normals (to calculate how much diffuse, specular, find reflected direction and so on)

    • Usually specify at each vertex, interpolate
    • Can do manually for parametric surfaces
    • Average face normals for more complex shapes
  • Four terms: Ambient, Diffuse, Specular, Emissive

Emissive Term

IE=Emissionmaterial
  • We can look at a light source by giving a material an emissive component
    • Only relevant for light sources when looking directly at them
    • Gotcha: must create geometry to actually see light
    • This component is unaffected by any sources or transformations

Ambient Light

  • Ambient light is the result of multiple interactions between (large) light sources and the objects in the environment
    • It represents the reflection of all indirect illumination
IA=KaIa
  • 参数说明
    • IA:物体表面的环境光强度(最终颜色);
    • Ka​:材质的环境反射系数(Vector,RGB 各通道取值范围 [0, 1]),如 vec3(0.2, 0.2, 0.2) 表示反射 20% 的环境光;
    • Ia​:全局环境光强度(Vector,由光源定义),如 vec3(0.5, 0.5, 0.5) 表示中等强度的白色环境光。

Diffuse Reflectance Term

Ideal Diffuse Reflectance

ID=kd(NL)ILA
  • 参数解析
    • ID:物体表面的漫反射光强(RGB 颜色值);
    • kd:漫反射系数(Material Diffuse Coefficient),取值范围 [0,1],表示材质对漫反射光的反射比例(如 kd=(0.8,0.3,0.2) 表示反射 80% 红光、30% 绿光、20% 蓝光);
    • NL:归一化后的法线与光线方向的点积,即 cosθ
    • IL:光源的漫反射光强度(RGB 值,如白色光源为 (1.0,1.0,1.0));
    • A:衰减系数(如点光源的距离衰减,见前面对点光源的讨论)。
  • 颜色分量的独立性 漫反射系数 kd 通常按 RGB 通道独立设置(如 kdr,kdg,kdb),分别控制红、绿、蓝三色光的反射比例,从而决定物体的颜色(如红色物体主要反射红光,吸收绿、蓝光)。

Ideal Specular Reflectance

The vector R can be computed from the incident ray direction L and the surface normal N

反射向量 R 的计算

sWv049

R=L+2(LN)N
  • 前提条件

    • L(入射光方向)、N(法线)均为 单位向量
    • 入射光方向 L 指向表面(即 LN 的夹角 90)。
  • 推导思路

    1. 将入射光向量 L 分解为 法向分量切向分量
      • 法向分量:(LN)N(投影到法线方向的分量);
      • 切向分量:L=L(LN)N(垂直于法线的分量)。
    2. 反射向量 R 的切向分量与入射光切向分量方向相反,法向分量保持不变:R=L+(LN)N=L+2(LN)N
    • 几何意义:反射向量是入射光向量关于法线的镜像(如图示中,RL 对称分布于法线两侧)。

理想反射体的光强决定因素dhgpN6

理想反射体的可见光强度由两个角度共同决定:

  • 入射角(θ:入射光方向 L 与表面法线 N 的夹角(决定反射方向 R);
  • 观察角(α:视角方向 V 与反射方向 R 的夹角(决定是否能观察到反射光)。

关键逻辑 理想反射体遵循 几何光学的镜面反射定律

  • 只有当 视角方向 V 与反射方向 R 完全一致(即 α=0)时,才能观察到反射光;
  • V 偏离 Rα>0),则反射光强为零(理想情况)。
IS=ks(VR)IL

参数说明

  • IS:镜面反射光强(最终颜色值);

  • ks

    • 镜面反射系数(Specular Reflection Coefficient),取值范围 [0,1],表示材质对镜面反射光的反射比例(如 ks=0.9 表示反射 90% 的入射光);
  • VR

    • 视角向量 V 与反射向量 R 的点积,衡量两者方向的一致性:
      • VR 同向时,VR=1,光强最大;
      • VR 垂直时,VR=0,光强为零。
  • IL:光源的镜面反射光强度(通常与光源颜色一致,如白色光源为 (1.0,1.0,1.0))。

  • Specular or glossy materials: highlights

    • Polished floors, glossy paint, whiteboards
    • For plastics highlight is color of light source (not object)
    • For metals, highlight depends on surface color
  • Really, (blurred) reflections of light source

dN7D1p

IS=ks(VR)nIL
  • n is the shininess coefficient
    • Values of a between 100 and 200 correspond to metals
    • Values between 5 and 10 give surface that look like plastic

Phong Illumination Model

Sum of three components:

  • diffuse reflection + specular reflection + ambient

  • Uses four vectors

    • To source: I
    • To viewer: v
    • Normal: n
    • Perfect reflector: r

Blinn & Torrance Variation

  • Modified Phong model
    • The specular term in the Phong model is problematic because it requires the calculation of R and V for each vertex
    • Blinn suggested an more efficient approximation using the halfway vector halfway vector H between L and V
H=L+V2Is=Ks(NH)nILA

4eI3SK

H is the normal to the (imaginary) surface that maximally reflects light in the V direction

  • No need to compute reflection vector R at every point
  • Is is a function only of N, if:
    • the viewer is very far away and V does not change for all points on the object (e.g., orthographic projection)
    • L does not change for all points on the object (e.g., directional lights)

EMjuAH

  • Single light source (with attenuation):
I=kaIa+kd(NL)IL+ks(NH)nIL
  • Multiple light sources (with attenuation):
I=kaIa+i(kd(NLi)Ii+ks(NHi)nIi)

Normal to Plane

  • Equation of plane: ax+by+cz+d=0
  • We know that plane is determined by three points p0,p1,p2 or normal n and p0
  • Normal can be obtained by
    • n=(p1p0)×(p2p0)
    • normalize nn|n|

Normal to Sphere

mVcyjK

Vertex Normal

wCF1Wj

N=1NFi

Phong shading and Gouraud shading

Gouraud shading

顶点法线计算→顶点光照→颜色插值

  • Gouraud Shading
    • Find vertex normals
    • Apply modified Phong model at each vertex
    • Interpolate vertex shades across each polygon

1. 第一步:计算顶点法线(Find vertex normals)

目标 为多边形的每个顶点生成一个平均法线向量,用于近似表面在该顶点处的朝向。

方法

  • 基于相邻面的法线平均: 若顶点被多个多边形共享(如三角网格),则将这些多边形的法线取加权平均(权重通常为面面积或顶点贡献度),公式为:nv=i=1nnii=1nni其中 ni 是第 i 个相邻面的单位法线。
  • 作用
    • 顶点法线用于模拟曲面的连续性(如球体表面顶点法线指向外法线方向),而非多边形面的离散法线;
    • 为后续顶点光照计算提供方向依据(如漫反射和镜面反射的方向判断)。

2. 第二步:在顶点处应用修改后的Phong模型(Apply modified Phong model at each vertex)

目标 在每个顶点处计算光照颜色,作为后续插值的基准。

关键细节

  • “修改后的Phong模型”的含义: 通常指简化版的光照模型,可能包含以下调整:
    • 仅计算环境光漫反射(忽略镜面反射以提升性能);
    • 使用 Blinn-Phong模型 替代传统Phong模型(用半程向量 H 简化镜面反射计算);
    • 简化参数(如固定高光指数 n 或光照强度 IL)。
  • 计算流程: 对每个顶点 v,计算其颜色 CvCv=Iambient+kd(nvL)Idiffuse+ks(nvH)nIspecular
    • nv:顶点法线(已归一化);
    • L:光照方向向量;
    • H:半程向量(H=normalize(L+V)V 为视角方向)。

与Phong着色的区别

  • 计算位置:仅在顶点计算光照,而非每个片段;
  • 计算粒度:顶点颜色是最终插值的起点,而非片段级动态计算。

3. 第三步:在多边形内插值顶点颜色(Interpolate vertex shades across each polygon)

目标 通过顶点颜色的线性插值,生成多边形内部的连续颜色分布,模拟表面光影变化。

实现方法

  • 扫描线算法与双线性插值
    1. 垂直方向插值:先在每条边上插值顶点颜色,得到扫描线与边交点的颜色(如左边界颜色 Ia 和右边界颜色 Ib);
    2. 水平方向插值:在扫描线上,从左到右插值 IaIb,得到每个像素的颜色 Ip
    • 公式(以三角形为例,参考之前的扫描线插值公式):Ip=Ia(xbxp)+Ib(xpxa)xbxa
  • 几何假设: 假设颜色在屏幕空间中呈线性变化,忽略三维空间中的深度差异(可能导致透视失真,但计算高效)。

视觉效果

  • 平滑过渡:通过插值模糊多边形边界,使低多边形模型看起来更平滑(如模拟球体时比Flat着色更自然);
  • 高光缺陷:由于颜色插值而非法线插值,高光区域可能出现模糊或断层(如图1所示)。
特性Gouraud着色Phong着色
插值对象颜色(已计算光照的结果)法线(未计算光照的向量)
光照计算位置顶点(仅计算一次/顶点)片段(每个像素级计算)
高光真实性可能模糊或丢失(因颜色插值)锐利准确(因片段级法线计算)
计算成本低(顶点计算+简单插值)高(片段计算+复杂插值)

常见误区澄清

  1. “Gouraud着色不需要法线”: 错误。Gouraud需要顶点法线计算顶点颜色,只是无需插值法线,而是直接插值颜色。
  2. “修改后的Phong模型是Phong着色特有的”: 错误。Gouraud在顶点处也可使用Phong模型的简化版,两者的区别在于计算位置和插值对象,而非光照模型本身。
  3. “插值颜色等于插值法线”: 错误。颜色是光照计算的结果(非线性变换),法线是向量(线性变换),插值颜色无法准确模拟曲面的光照变化(如高光位置)。

总结 Gouraud着色通过“顶点法线计算→顶点光照→颜色插值”的流程,以较低的计算成本实现了多边形模型的平滑光影效果。其核心优势是高效性,适合实时渲染和低多边形模型,但代价是牺牲高光细节和曲面真实性。理解这三个步骤有助于掌握图形渲染中“顶点处理→光栅化→片段处理”的基础管线逻辑,以及效率与真实感的权衡策略。

Phong shading

顶点法线计算→法线插值→片段光照

  • Phong Shading
    • Find vertex normals
    • Interpolate vertex normals across edges
    • Interpolate edge normals across polygon
    • Apply modified Phong model at each fragment

1. 步骤1:计算顶点法线(Find vertex normals)

目标 为多边形的每个顶点确定一个平均法线向量,用于近似表面在该点的朝向。

方法

  • 基于相邻面法线的平均: 对于共享顶点的所有多边形(如三角网格),将各面的单位法线取加权平均(权重通常为面面积或顶点对各面的贡献度)。
    • 公式:若顶点 v 连接面 f1,f2,,fn,各面法线为 n1,n2,,nn,则顶点法线为:nv=i=1nnii=1nni
  • 几何意义: 顶点法线用于模拟曲面的连续性(如球体表面顶点法线指向外法线方向),而非真实多边形面的离散法线。

与Gouraud的共同点 此步骤与Gouraud着色相同,均通过顶点法线近似表面曲率,但后续处理完全不同。

2. 步骤2:沿边插值顶点法线(Interpolate vertex normals across edges)

目标 在多边形的每条边上,通过顶点法线的线性插值计算边上各点的法线。

方法

  • 扫描线算法中的边处理: 对于多边形的每条边(如顶点 AB 构成的边),已知顶点法线 nAnB,边上任意点 P 的法线 nP 由以下公式插值得到:nP=nA+t(nBnA),t[0,1]其中 t 是点 P 沿边从 AB 的归一化参数(如基于屏幕空间坐标的线性比例)。
  • 插值空间
    • 屏幕空间 vs. 三维空间: 理论上应在三维空间中插值法线(考虑深度),但实际渲染中常基于屏幕空间坐标近似(硬件插值默认支持屏幕空间线性插值)。

3. 步骤3:在多边形内插值边法线(Interpolate edge normals across polygon)

目标 将边上插值得到的法线进一步传播到多边形内部每个片段(Fragment,即像素候选点),形成连续的法线场。

方法

  • 双线性插值(Bilinear Interpolation): 以三角形为例,已知三条边上的插值法线,内部任意片段 P 的法线 nP 通过以下步骤计算:
    1. 确定片段 P 在三角形中的重心坐标(Barycentric Coordinates) (α,β,γ),满足 α+β+γ=1
    2. 法线插值公式:nP=αnA+βnB+γnCnA,nB,nC 为三角形顶点法线)。
  • 硬件支持: 现代GPU的光栅化阶段可自动完成法线插值(通过顶点属性插值器),开发者无需手动实现。

4. 步骤4:在每个片段应用修改后的Phong模型(Apply modified Phong model at each fragment)

目标 利用插值得到的片段法线,计算该点的光照颜色,实现高精度光影效果。

关键细节

  • 修改后的Phong模型: 通常指 Blinn-Phong模型,其镜面反射项使用半程向量 H 替代传统Phong模型的反射向量 R,公式为:IS=ks(NH)nIL,H=normalize(L+V)
    • 优势:减少计算量(无需计算 R),且高光效果更符合实际观察。
  • 片段级计算: 每个片段独立计算光照,需完成以下步骤:
    1. 将法线 N、光照方向 L、视角方向 V 转换到同一坐标系(如世界坐标系或切线空间);
    2. 归一化向量(确保点积计算正确);
    3. 计算环境光、漫反射、镜面反射分量并叠加。
特性Gouraud着色Phong着色
插值对象颜色(已计算光照的结果)法线(未计算光照的向量)
光照计算位置顶点(仅在顶点计算一次)片段(每个像素级计算)
视觉效果平滑但高光可能失真高光锐利,曲面过渡自然
计算复杂度低(顶点计算+简单插值)高(片段计算+复杂插值)
硬件依赖仅需顶点着色器需要像素着色器(Fragment Shader)

优点

  • 真实感强:准确模拟高光位置和形状,适合金属、玻璃等强反射材质;
  • 曲面模拟优秀:法线插值可有效减少多边形化痕迹,即使低多边形模型也能呈现平滑曲面。

缺点

  • 性能开销大:每个片段均需计算光照,比Gouraud着色慢2-5倍;
  • 依赖高质量顶点法线:若顶点法线计算错误(如平均权重不合理),插值结果会失真。

总结 Phong着色通过“顶点法线计算→法线插值→片段光照”的流程,将光照计算的粒度从顶点级提升到像素级,显著提升了渲染真实感。其核心在于利用法线插值模拟曲面连续性,结合Blinn-Phong等光照模型实现精确的光影效果。尽管计算成本较高,但随着GPU算力的提升,已成为当前图形渲染的主流技术之一。理解其原理有助于深入掌握图形管线中的光栅化、插值和着色逻辑。