news 2026/9/4 18:04:41

渲染方程--光线追踪

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
渲染方程--光线追踪

0、前言

光线追踪的渲染方程

看起来复杂,其实意思很朴素:

朝眼睛方向出去的光
= 物体自己发出的光 + 从四面八方照过来、经过材质反射后出去的光。

各部分含义:

  • ​:朝摄像机方向离开的 Radiance
  • ​:物体自己发出的光,比如灯泡
  • ​:从某个方向射来的 Radiance
  • ​:材质如何反射光,也就是 BRDF,包含漫反射和镜面反射
  • cos⁡θ:斜着来的光贡献较少
  • 积分:把上方所有入射方向都考虑进去

1、光源的Radiance怎么求

1.1、Radiance 的定义

假设光源表面有一小块微元面积 dA,它朝某个立体角方向 dω,发射出去的功率

Radiance中文名辐射亮度,即表面微元的半球方向上,所有方向的亮度都是相同的

Radiance的微分方程为:

各符号的含义:

  • ​:光源发出的 Radiance
  • :光功率,单位是瓦特W
  • :光源上的一小块面积
  • :一小片方向范围,单位是立体角sr
  • θ:发光方向与光源表面法线的夹角
  • cos⁡θ dA:从该方向看过去的“有效面积”

单位是:

W/(⋅sr)

这里下标 e 表示 emitted,也就是“发射出去的”。

1.2、为什么有一个 cos⁡θ

想象一扇发光的窗户。

正对窗户看,能看到完整的一大块:

观察方向 ---> | 窗户 |

斜着看,窗户看起来变窄了:

观察方向 ---> / 窗户 /

它在这个方向上的有效面积是:

=Acos⁡θ

因此,一小块面积朝一小片方向发出的功率是:

=(x,ω) cos⁡θ dA dω

即:

发出的功率 = Radiance × 有效面积 × 方向。

这个公式比定义公式更适合直观理解。

1.3、最常见情况:均匀漫射面积光源怎么计算Radiance

现实中的柔光灯、发光面板,在简化模型中经常被当成Lambertian emitter(朗伯发光体)

它的特点是:

(x,ω) =

也就是:

只要方向在光源正面,Radiance 对所有方向都相同。

这里有一个很容易误解的地方:

“Radiance 相同”不代表朝所有角度发出的总功率相同。

因为实际功率里还有 cos⁡θ:

=cos⁡θ dA dω

所以:

  • 正前方:cos⁡0∘=1,发得最多
  • 60 度方向:cos⁡60∘=0.5
  • 接近平行:cos⁡90∘=0,几乎不发

1.3.1、单面光源,已知总功率,怎么计算 Radiance

假设有一块面积为 A的均匀面光源:

  • 只向正面半球发光
  • 总辐射功率为
  • 各处亮度相同
  • 是朗伯发光体

那么:

这就是渲染里非常常用的公式。

例:

一块面积为:

A=2

的发光面板,只向正面发出:

=100 W

那么它的 Radiance 是:

约等于:

≈ 15.9 W/()

因为它是朗伯光源,所以从正面、30 度或60 度方向查询,得到的都是 15.9。

但是它朝斜方向实际分配的功率会被减少。

1.3.2、为什么公式里是Pi,不是 2Pi

光源正面的所有方向组成半球,半球的立体角确实是:

但不能直接写成:

这是错误的。

因为不同方向的有效面积= cos⁡θdA,

把整个半球方向的积分后:,不再具体推导

所以 得到

1.3.3、双面光源怎么计算Radiance

如果一个面积光源正反两面都发光,而且总功率是两面加起来的,那么:

1.4、点光源怎么计算Radiance

1.4.1、无半径的点光源

理想点光源面积为零。如果把:

A=0

代入:

结果会变成无穷大。

距离点光源 r 的表面,接收到的 Irradiance 为:

这就是点光源常见的平方反比衰减。

还有一个公式挺重要,可以求无半径点光源到 物体表面的入射,:

E: Irradiance 单位面积上的功率,单位 W/()

当然这里其实还要加上为入射光线与 反射面法线的夹角)

那么距离点光源 r 的表面的反射,

1.4.2、有半径的点(球形)光源

只需要考略表面微元的半球方向)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/4 18:01:29

以太网PHY芯片RTL8211FS(I)-VS简介(一)

RTL8211系列芯片是高级程度的以太网收发器。兼容10Base-T,100Base-T,1000Base-T的IEEE802.3标准。它提供必需的物理层功能,实现发送和接收以太网数据包,物理层可以是五类非屏蔽双绞线。1.特点Rtl8211fs-VS为基于ieee1588和802.1as…

作者头像 李华
网站建设 2026/9/4 18:00:06

204、【Agent】【OpenCode】TUI 内部:SDK 客户端与事件流

【声明】本博客所有内容均为个人业余时间创作,所述技术案例均来自公开开源项目(如Github,Apache基金会),不涉及任何企业机密或未公开技术,如有侵权请联系删除 标题 204、【Agent】【OpenCode】TUI 内部&am…

作者头像 李华
网站建设 2026/9/4 17:53:53

知更鸟:从零构建可复用的信息提取流水线

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/4 17:48:55

geetest滑块(三)

h参数分析 先分析o参数 userresponse参数 passtime参数 aa参数 h9s9参数 rp参数 l参数 h参数 u参数分析 现在已经生成了两次w还差最后一个滑块的,滑块的js文件和前两次的不一样是slide.7.9.3.js,但是代码流程差不多,基本是一样的 a…

作者头像 李华
网站建设 2026/9/4 17:46:36

USCPA税务合规与规划核心术语解析:从AGI到穿透实体的备考指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华