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)
- 光的强度随距离的变化规律(如点光源的平方衰减、方向光无衰减)。
- Emittance spectrum (color)
Surface properties
- Reflectance spectrum (color)
- 物体表面对不同颜色光的反射能力(如红色物体反射红光,吸收其他光)。
- Geometry (position, orientation, and micro-structure)
- 表面的宏观位置和朝向(由法线向量表示);
- 微观结构(如粗糙度)影响光的散射方式(如漫反射或镜面反射)。
- Absorption
- 物体对光的吸收能力,未被反射的光会被吸收。
- Reflectance spectrum (color)
Shading: Ambient, Diffuse, Emissive, Specular
- 环境光(Ambient):模拟间接光照(如房间内的漫反射光);
- 漫反射(Diffuse):模拟粗糙表面的均匀反射(如纸张、布料);
- 自发光(Emissive):物体自身发光(如灯泡、屏幕);
- 镜面反射(Specular):模拟光滑表面的高光(如金属、玻璃)。
Some basic approximations to capture key effects in lighting and shading
Point Light Sources
点光源的物理特性
光线发散规律 点光源的光线从某一点向四周 径向发散(如灯泡),其到达物体表面的光强与 距离的平方成反比(遵循物理中的 平方反比定律)。
- 数学表达:光强
,其中 为光源到物体表面的距离。
- 数学表达:光强
与线光源的对比
- 点光源:三维空间中光线呈球形发散,衰减为 二次方关系(
)。 - 线光源(如灯管):光线呈圆柱形发散,衰减为 线性关系(
),因为能量分布在圆柱面上,面积与距离 成正比。
- 点光源:三维空间中光线呈球形发散,衰减为 二次方关系(
衰减模型(Attenuation Model) 通用衰减公式,用于模拟点光源的强度衰减:
参数含义:
:光源到物体表面的距离。 (常数项):避免分母为零,确保近距离光强不会无限大(如 时,距离 处衰减为 1)。 (线性项):模拟线性衰减成分(如环境光散射)。 (二次项):模拟平方反比衰减的主导物理规律。
作用: 通过调整
的值,可以灵活控制衰减速度。例如: - 若
,则无衰减(光强恒定); - 若
,则近距离衰减明显,远距离趋近于零。
- 若
实际应用中的简化 计算机图形学中常 忽略衰减(假设
),尽管这不符合物理真实,但可简化计算(如实时渲染中提升性能)。
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
- 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
- 参数说明:
:物体表面的环境光强度(最终颜色); :材质的环境反射系数(Vector,RGB 各通道取值范围 [0, 1]),如 vec3(0.2, 0.2, 0.2)表示反射 20% 的环境光;:全局环境光强度(Vector,由光源定义),如 vec3(0.5, 0.5, 0.5)表示中等强度的白色环境光。
Diffuse Reflectance Term
Ideal Diffuse Reflectance
- 参数解析:
:物体表面的漫反射光强(RGB 颜色值); :漫反射系数(Material Diffuse Coefficient),取值范围 ,表示材质对漫反射光的反射比例(如 表示反射 80% 红光、30% 绿光、20% 蓝光); :归一化后的法线与光线方向的点积,即 ; :光源的漫反射光强度(RGB 值,如白色光源为 ); :衰减系数(如点光源的距离衰减,见前面对点光源的讨论)。
- 颜色分量的独立性 漫反射系数
通常按 RGB 通道独立设置(如 ),分别控制红、绿、蓝三色光的反射比例,从而决定物体的颜色(如红色物体主要反射红光,吸收绿、蓝光)。
Ideal Specular Reflectance
The vector R can be computed from the incident ray direction L and the surface normal N
反射向量

前提条件:
(入射光方向)、 (法线)均为 单位向量; - 入射光方向
指向表面(即 与 的夹角 )。
推导思路:
- 将入射光向量
分解为 法向分量 和 切向分量: - 法向分量:
(投影到法线方向的分量); - 切向分量:
(垂直于法线的分量)。
- 法向分量:
- 反射向量
的切向分量与入射光切向分量方向相反,法向分量保持不变:
- 几何意义:反射向量是入射光向量关于法线的镜像(如图示中,
与 对称分布于法线两侧)。
- 将入射光向量
理想反射体的光强决定因素
理想反射体的可见光强度由两个角度共同决定:
- 入射角(
):入射光方向 与表面法线 的夹角(决定反射方向 ); - 观察角(
):视角方向 与反射方向 的夹角(决定是否能观察到反射光)。
关键逻辑 理想反射体遵循 几何光学的镜面反射定律:
- 只有当 视角方向
与反射方向 完全一致(即 )时,才能观察到反射光; - 若
偏离 ( ),则反射光强为零(理想情况)。
参数说明
:镜面反射光强(最终颜色值); : - 镜面反射系数(Specular Reflection Coefficient),取值范围
,表示材质对镜面反射光的反射比例(如 表示反射 90% 的入射光);
- 镜面反射系数(Specular Reflection Coefficient),取值范围
: - 视角向量
与反射向量 的点积,衡量两者方向的一致性: - 当
与 同向时, ,光强最大; - 当
与 垂直时, ,光强为零。
- 当
- 视角向量
:光源的镜面反射光强度(通常与光源颜色一致,如白色光源为 )。 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

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 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 a function only of , if: - the viewer is very far away and
does not change for all points on the object (e.g., orthographic projection) does not change for all points on the object (e.g., directional lights)
- the viewer is very far away and

- Single light source (with attenuation):
- Multiple light sources (with attenuation):
Normal to Plane
- Equation of plane:
- We know that plane is determined by three points
or normal and - Normal can be obtained by
- normalize
Normal to Sphere

Vertex Normal

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)
目标 为多边形的每个顶点生成一个平均法线向量,用于近似表面在该顶点处的朝向。
方法
- 基于相邻面的法线平均: 若顶点被多个多边形共享(如三角网格),则将这些多边形的法线取加权平均(权重通常为面面积或顶点贡献度),公式为:
其中 是第 个相邻面的单位法线。 - 作用:
- 顶点法线用于模拟曲面的连续性(如球体表面顶点法线指向外法线方向),而非多边形面的离散法线;
- 为后续顶点光照计算提供方向依据(如漫反射和镜面反射的方向判断)。
2. 第二步:在顶点处应用修改后的Phong模型(Apply modified Phong model at each vertex)
目标 在每个顶点处计算光照颜色,作为后续插值的基准。
关键细节
- “修改后的Phong模型”的含义: 通常指简化版的光照模型,可能包含以下调整:
- 仅计算环境光和漫反射(忽略镜面反射以提升性能);
- 使用 Blinn-Phong模型 替代传统Phong模型(用半程向量
简化镜面反射计算); - 简化参数(如固定高光指数
或光照强度 )。
- 计算流程: 对每个顶点
,计算其颜色 : :顶点法线(已归一化); :光照方向向量; :半程向量( , 为视角方向)。
与Phong着色的区别
- 计算位置:仅在顶点计算光照,而非每个片段;
- 计算粒度:顶点颜色是最终插值的起点,而非片段级动态计算。
3. 第三步:在多边形内插值顶点颜色(Interpolate vertex shades across each polygon)
目标 通过顶点颜色的线性插值,生成多边形内部的连续颜色分布,模拟表面光影变化。
实现方法
- 扫描线算法与双线性插值:
- 垂直方向插值:先在每条边上插值顶点颜色,得到扫描线与边交点的颜色(如左边界颜色
和右边界颜色 ); - 水平方向插值:在扫描线上,从左到右插值
和 ,得到每个像素的颜色 。
- 公式(以三角形为例,参考之前的扫描线插值公式):
- 垂直方向插值:先在每条边上插值顶点颜色,得到扫描线与边交点的颜色(如左边界颜色
- 几何假设: 假设颜色在屏幕空间中呈线性变化,忽略三维空间中的深度差异(可能导致透视失真,但计算高效)。
视觉效果
- 平滑过渡:通过插值模糊多边形边界,使低多边形模型看起来更平滑(如模拟球体时比Flat着色更自然);
- 高光缺陷:由于颜色插值而非法线插值,高光区域可能出现模糊或断层(如图1所示)。
| 特性 | Gouraud着色 | Phong着色 |
|---|---|---|
| 插值对象 | 颜色(已计算光照的结果) | 法线(未计算光照的向量) |
| 光照计算位置 | 顶点(仅计算一次/顶点) | 片段(每个像素级计算) |
| 高光真实性 | 可能模糊或丢失(因颜色插值) | 锐利准确(因片段级法线计算) |
| 计算成本 | 低(顶点计算+简单插值) | 高(片段计算+复杂插值) |
常见误区澄清
- “Gouraud着色不需要法线”: 错误。Gouraud需要顶点法线计算顶点颜色,只是无需插值法线,而是直接插值颜色。
- “修改后的Phong模型是Phong着色特有的”: 错误。Gouraud在顶点处也可使用Phong模型的简化版,两者的区别在于计算位置和插值对象,而非光照模型本身。
- “插值颜色等于插值法线”: 错误。颜色是光照计算的结果(非线性变换),法线是向量(线性变换),插值颜色无法准确模拟曲面的光照变化(如高光位置)。
总结 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)
目标 为多边形的每个顶点确定一个平均法线向量,用于近似表面在该点的朝向。
方法
- 基于相邻面法线的平均: 对于共享顶点的所有多边形(如三角网格),将各面的单位法线取加权平均(权重通常为面面积或顶点对各面的贡献度)。
- 公式:若顶点
连接面 ,各面法线为 ,则顶点法线为:
- 公式:若顶点
- 几何意义: 顶点法线用于模拟曲面的连续性(如球体表面顶点法线指向外法线方向),而非真实多边形面的离散法线。
与Gouraud的共同点 此步骤与Gouraud着色相同,均通过顶点法线近似表面曲率,但后续处理完全不同。
2. 步骤2:沿边插值顶点法线(Interpolate vertex normals across edges)
目标 在多边形的每条边上,通过顶点法线的线性插值计算边上各点的法线。
方法
- 扫描线算法中的边处理: 对于多边形的每条边(如顶点
和 构成的边),已知顶点法线 和 ,边上任意点 的法线 由以下公式插值得到: 其中 是点 沿边从 到 的归一化参数(如基于屏幕空间坐标的线性比例)。 - 插值空间:
- 屏幕空间 vs. 三维空间: 理论上应在三维空间中插值法线(考虑深度),但实际渲染中常基于屏幕空间坐标近似(硬件插值默认支持屏幕空间线性插值)。
3. 步骤3:在多边形内插值边法线(Interpolate edge normals across polygon)
目标 将边上插值得到的法线进一步传播到多边形内部每个片段(Fragment,即像素候选点),形成连续的法线场。
方法
- 双线性插值(Bilinear Interpolation): 以三角形为例,已知三条边上的插值法线,内部任意片段
的法线 通过以下步骤计算: - 确定片段
在三角形中的重心坐标(Barycentric Coordinates) ,满足 ; - 法线插值公式:
( 为三角形顶点法线)。
- 确定片段
- 硬件支持: 现代GPU的光栅化阶段可自动完成法线插值(通过顶点属性插值器),开发者无需手动实现。
4. 步骤4:在每个片段应用修改后的Phong模型(Apply modified Phong model at each fragment)
目标 利用插值得到的片段法线,计算该点的光照颜色,实现高精度光影效果。
关键细节
- 修改后的Phong模型: 通常指 Blinn-Phong模型,其镜面反射项使用半程向量
替代传统Phong模型的反射向量 ,公式为: - 优势:减少计算量(无需计算
),且高光效果更符合实际观察。
- 优势:减少计算量(无需计算
- 片段级计算: 每个片段独立计算光照,需完成以下步骤:
- 将法线
、光照方向 、视角方向 转换到同一坐标系(如世界坐标系或切线空间); - 归一化向量(确保点积计算正确);
- 计算环境光、漫反射、镜面反射分量并叠加。
- 将法线
| 特性 | Gouraud着色 | Phong着色 |
|---|---|---|
| 插值对象 | 颜色(已计算光照的结果) | 法线(未计算光照的向量) |
| 光照计算位置 | 顶点(仅在顶点计算一次) | 片段(每个像素级计算) |
| 视觉效果 | 平滑但高光可能失真 | 高光锐利,曲面过渡自然 |
| 计算复杂度 | 低(顶点计算+简单插值) | 高(片段计算+复杂插值) |
| 硬件依赖 | 仅需顶点着色器 | 需要像素着色器(Fragment Shader) |
优点
- 真实感强:准确模拟高光位置和形状,适合金属、玻璃等强反射材质;
- 曲面模拟优秀:法线插值可有效减少多边形化痕迹,即使低多边形模型也能呈现平滑曲面。
缺点
- 性能开销大:每个片段均需计算光照,比Gouraud着色慢2-5倍;
- 依赖高质量顶点法线:若顶点法线计算错误(如平均权重不合理),插值结果会失真。
总结 Phong着色通过“顶点法线计算→法线插值→片段光照”的流程,将光照计算的粒度从顶点级提升到像素级,显著提升了渲染真实感。其核心在于利用法线插值模拟曲面连续性,结合Blinn-Phong等光照模型实现精确的光影效果。尽管计算成本较高,但随着GPU算力的提升,已成为当前图形渲染的主流技术之一。理解其原理有助于深入掌握图形管线中的光栅化、插值和着色逻辑。