光照计算

光照计算
最新回答
跌跌撞撞找不到方向

2026-10-27 08:41:36

光照计算需要从光源数据、模型表面材质结构、观察方向三个核心方向进行设计,并结合渲染路径(RenderPath)处理灯光数据传递和计算效率。以下是具体分析:

一、光源数据

光源数据是光照计算的基础,其类型和传递方式直接影响最终效果:

  • 光源类型:决定数据内容,例如:

    方向光:仅需方向向量(LightDir)和颜色(LightColor),无衰减。

    点光源/聚光灯:需位置、衰减系数(Attenuation)、光锥范围等额外参数。

  • 衰减系数(Attenuation):通常表示为距离的函数,公式为:Attenuation = 1 / (Kc + Kl * d + Kq * d2)其中 Kc(常数项)、Kl(线性项)、Kq(二次项)控制衰减曲线,d为光源到表面的距离。
  • 灯光数据传递:由渲染路径决定:

    前向渲染(Forward Rendering):通过顶点数据或像素着色器参数传递,每个灯光独立计算。

    延迟渲染(Deferred Rendering):在光照阶段从G-Buffer读取表面属性,灯光数据以屏幕空间贴图或结构体传递。

图:Unity中灯光数量对渲染路径的影响(前向渲染默认最多支持4个点光源)二、模型表面材质结构

材质属性决定光与表面的交互方式,需结合PBR理论实现物理真实感:

  • 顶点法线与法线贴图:

    顶点法线用于基础光照计算(如漫反改族凳射)。

    法线贴图通过扰动法线方向增加表面细节,无需增加几何复杂度。

  • 光滑度(Smoothness)与粗糙度(Roughness):

    光滑度控制高光范围,粗糙度影响微表面反射的模糊程度,二者互为反比。

    在PBR中,粗糙度用于计算微表面分布函数(如GGX分布)。

  • PBR理论核心参数:

    金属度(Metallic):区分金属(高反射、低漫反射)与非金属(低反射、高漫反射)。

    环境光遮蔽(AO):模拟表面微小凹陷处的阴影效果。

    菲涅尔效应(Fresnel):表面反射率随观察角度变化,公式为:F = F0 + (1 - F0) * (1 - dot(N, V))^5其中 F0 为基础反射率,N 为法线,V 为观察方向。

三、观察方向

观察方向(ViewDir)影响反射计算,尤其在镜面反射和高光处理中:

  • 漫反射(Diffuse):与观察方向无关,仅依赖光源方向和法线,公式为:Diffuse = max(0, dot(N, L)) * LightColor其中 N 为法线,L 为光源方向。
  • 镜面反射(Specular):需结合观察方向计算反射向量,常见模型包括:

    Blinn-Phong:使用半角向量(H)简化计算:H = normalize(L + V)Specular = (max(0, dot(N, H)))^Gloss * LightColor

    Cook-Torrance:基于微表面理论,公式为:Specular = (D * F * G) / (4 * dot(N, L) * dot(N, V))其中 D(分布函数)、F(菲涅尔项)、G(几何函数)由粗糙度和法线决定。

四、渲染路径(RenderPath)的影响

渲染路径决定灯光数据的处理方式和计算效率:

  • 前向渲染穗橡(Forward Rendering):

    Pass类型:

    ForwardBase:处理主方向光和超出数量限制的灯光(作为顶点光),同时计算SH、LightMap等全局光照。

    ForwardAdd:为每个额外灯光调用一次,结果通过Blend one one叠加。

    适用场景:灯光数量较少(如移动端游戏),或需要深度定制光照的场景。核旅

  • 延迟渲染(Deferred Rendering):

    阶段划分:

    几何阶段(G-Buffer填充):存储法线、漫反射颜色、深度、材质属性(如金属度、粗糙度)到多个纹理缓冲区。

    光照阶段(Lighting Pass):在屏幕空间遍历每个像素,结合G-Buffer数据和灯光参数计算光照。

    优点:

    动态光源处理高效,每个像素光照仅计算一次。

    材质与光照解耦,支持复杂着色模型。

    缺点:

    显存占用高(需存储多个G-Buffer)。

    透明物体需单独处理(无法写入G-Buffer)。

    抗锯齿需依赖屏幕空间技术(如FXAA)。

五、G-Buffer内容与MRT结合

延迟渲染通过多渲染目标(MRT)实现G-Buffer的高效填充:

  • 典型G-Buffer布局:

    RT0:法线(RGB) + 深度(A)。

    RT1:漫反射颜色(RGB) + 金属度(A)。

    RT2:光照信息(如粗糙度、环境光遮蔽)。

  • MRT优势:物体仅需绘制一次,即可同时输出所有表面属性到对应缓冲区,避免多次渲染。
总结

光照计算需综合光源类型、材质属性和观察方向,并结合渲染路径优化性能:

  • 前向渲染适合简单场景,通过ForwardBase和ForwardAdd分步处理灯光。
  • 延迟渲染通过G-Buffer分离几何与光照,高效支持大量动态光源,但需权衡显存和抗锯齿问题。
  • PBR理论为材质提供物理基础,确保不同光照条件下的真实感。