[OpenGL] Lambertian材质漫反射BRDF方程的解释与推导

news2025/7/15 15:01:21

一、简介

本文简单的介绍了 Physical Based Rendering, PBR 中的 Lambertian 材质漫反射BRDF公式 f r l a m b e r t i a n = c d i f f π fr_{lambertian}=\frac{c_{diff}}{\pi} frlambertian=πcdiff的推导。

二、漫反射项

根据 渲染方程:
L o ( v ) = ∫ Ω f r ( l , v ) L i ( l ) ∗ ( n ⋅ l ) d l (1) Lo(v) = \int_{\Omega}fr(l,v)Li(l)*(n\cdot l) dl \tag{1} Lo(v)=Ωfr(l,v)Li(l)(nl)dl(1)
其中的 BRDF 函数 f r ( l , v ) fr(l,v) fr(l,v) 定义如下:
f r ( l , v ) = k d ∗ f r l a m b e r t ( l , v ) + k s ∗ f r s p e c u l a r ( l , v ) (2) fr(l,v) = k_d * fr_{lambert}(l,v) + k_s*fr_{specular}(l,v)\tag{2} fr(l,v)=kdfrlambert(l,v)+ksfrspecular(l,v)(2)
其中 k d k_d kd 为漫反射的比例, f r l a m b e r t fr_{lambert} frlambert为漫反射中的 BRDF 函数定义如下:
f r l a m b e r t = c d i f f π (3) fr_{lambert} = \frac{c_{diff}}{\pi} \tag{3} frlambert=πcdiff(3)
其中 c d i f f c_{diff} cdiff 为描述材质属性的漫反射颜⾊(diffuse) c d i f f c_{diff} cdiff ,或者反照率(albedo) ρ \rho ρ。本文接下来介绍什么是 Lambertian 表面,为什么 Lambertian 材质的漫反射BRDF 公式如公式(3) 所示。

1. Lambert 表面

Lambertian 材质是指那种理想的完全漫反射表面,从任何观察方向看去,它反射的亮度都是一致的。即,不论外界的光照如何,Lambertian 材质满足以下公式:
L o ( v ) = ∫ Ω f r l a m b e r t i a n ( l , v ) ( n ⋅ l )   d l = L o c (4) Lo(v) = \int_{\Omega}fr_{lambertian}(l,v)(n\cdot l)\ dl = Lo_{c} \tag{4} Lo(v)=Ωfrlambertian(l,v)(nl) dl=Loc(4)
不管视线向量 v v v 如何变化(需要保证在材质的上半球内),其出射的 radiance L o ( v ) Lo(v) Lo(v) 恒等于定值 L o c Lo_{c} Loc

2. 漫反射公式解释

2.1 反照率 albedo

Lambertian BRDF 的恒定反射率通常被称为漫反射颜⾊(diffuse) c d i f f c_{diff} cdiff ,或者反照率(albedo) ρ \rho ρ。反照率 ρ \rho ρ描述了目标表面反射的辐射通量 Φ o u t \Phi_{out} Φout与入射的辐射通量 Φ i n \Phi_{in} Φin 之比。定义如下:
c d i f f = ρ = Φ o u t Φ i n (5) c_{diff} = \rho = \frac{\Phi_{out}}{\Phi_{in}} \tag{5} cdiff=ρ=ΦinΦout(5)

2.2 能量守恒定律

根据能量守恒定理定律,应该有:
c d i f f = ρ = Φ o u t Φ i n ≤ 1.0 (6) c_{diff} = \rho = \frac{\Phi_{out}}{\Phi_{in}} \le 1.0 \tag{6} cdiff=ρ=ΦinΦout1.0(6)

2.3 漫反射 BRDF 函数推导

接下来我们将基于以下假设和定义,推导得到 漫反射 BRDF 的渲染公式(3)。

2.3.1 已知信息
  1. 漫反射BRDF满足渲染方程: L o ( v ) = ∫ f r l a m b e r t i a n ( l , v ) ∗ L i ( l ) ∗ ( n ⋅ l )   d l Lo(v)=\int{fr_{lambertian}(l,v)*Li(l)*(n\cdot l)\ dl} Lo(v)=frlambertian(l,v)Li(l)(nl) dl
  2. 对于 Lambertian 材质, f r l a m b e r t i a n ( l , v ) fr_{lambertian}(l,v) frlambertian(l,v) v v v l l l 无关,即 f r l a m b e r t i a n ( l , v ) fr_{lambertian}(l,v) frlambertian(l,v) 是定值 f r c fr_{c} frc 。那么根据渲染方程,不管如何光照 L i ( l ) Li(l) Li(l) 如何分布,任意出射方向的 L o ( v ) Lo(v) Lo(v) 也都相等。
  3. 对于 Lambertian 材质,假设其没有自发光,满足能量守恒定理,即: c d i f f = ρ = Φ o u t Φ i n ≤ 1.0 c_{diff} = \rho = \frac{\Phi_{out}}{\Phi_{in}} \le 1.0 cdiff=ρ=ΦinΦout1.0
  4. 目标表面的入射/出射辐射通量/功率(Radiant flux/Power) Φ i n \Phi_{in} Φin Φ o u t \Phi_{out} Φout 的计算公式如下:
    Φ i n t = ∫ Ω L i ( l ) ∗ ( n ⋅ l ) d l   d A Φ o u t = ∫ Ω L o ( v ) ∗ ( n ⋅ v ) d v   d A \Phi_{int} = \int_{\Omega} Li(l)*(n\cdot l) dl\ dA \\ \Phi_{out} = \int_{\Omega} Lo(v)*(n\cdot v) dv\ dA Φint=ΩLi(l)(nl)dl dAΦout=ΩLo(v)(nv)dv dA
  5. 假设目标表面为 Lambertian 材质,即只有漫反射,没有镜面反射也没有自发光。
  6. 假设目标表面的面积为 A A A
  7. 假设目标表面的漫反射颜色(反照率)为 c d i f f c_{diff} cdiff,即 c d i f f = Φ o u t Φ i n c_{diff} = \frac{\Phi_{out}}{\Phi_{in}} cdiff=ΦinΦout

接下来本文将根据以上已知信息推导目标 BRDF 函数 f r l a m b e r t i a n ( l , v ) = f r c = ? fr_{lambertian}(l,v)=fr_{c}=? frlambertian(l,v)=frc=?

2.3.2 推导过程

根据辐射通量/功率(Radiant flux/Power) Φ \Phi Φ 的计算公式
Φ = ∫ Ω L ( w ) ∗ ( n ⋅ w ) d w   d A \Phi = \int_{\Omega} L(w)*(n\cdot w) dw\ dA Φ=ΩL(w)(nw)dw dA
可以得到目标表面的总出射辐射通量 Φ o u t \Phi_{out} Φout
Φ o u t = ∫ Ω L o ( v ) ∗ ( n ⋅ v ) d v   d A = ∫ 0 2 π ∫ 0 π / 2 L o ( v ) ∗ c o s ( θ ) ∗ s i n ( θ ) d θ d ϕ   d A \Phi_{out} = \int_{\Omega} Lo(v)*(n\cdot v) dv\ dA \\ = \int_{0}^{2\pi} \int_{0}^{\pi/2} Lo(v)*cos(\theta)*sin(\theta) d{\theta}d{\phi}\ dA Φout=ΩLo(v)(nv)dv dA=02π0π/2Lo(v)cos(θ)sin(θ)dθdϕ dA
又因为对于 Lambertian 材质,任意出射方向的 L o ( v ) Lo(v) Lo(v) 都相等,并且目标表面的面积为 A A A,因此有:
Φ o u t = ∫ 0 2 π ∫ 0 π / 2 L o ( v ) ∗ c o s ( θ ) ∗ s i n ( θ )   d θ d ϕ   d A = ∫ 0 2 π ∫ 0 π / 2 L o c ∗ c o s ( θ ) ∗ s i n ( θ )   d θ   d ϕ   d A = L o c ∗ ∫ 0 2 π ∫ 0 π / 2 c o s ( θ ) ∗ s i n ( θ )   d θ   d ϕ   ∗ A = L o c ∗ π ∗ A (7) \Phi_{out} = \int_{0}^{2\pi} \int_{0}^{\pi/2} Lo(v)*cos(\theta)*sin(\theta)\ d{\theta}d{\phi}\ dA \\ = \int_{0}^{2\pi} \int_{0}^{\pi/2} Lo_{c}*cos(\theta)*sin(\theta)\ d{\theta}\ d{\phi}\ dA \\ = Lo_{c} * \int_{0}^{2\pi} \int_{0}^{\pi/2} cos(\theta)*sin(\theta)\ d{\theta}\ d{\phi}\ * A \\ = Lo_{c}*\pi*A \tag{7} Φout=02π0π/2Lo(v)cos(θ)sin(θ) dθdϕ dA=02π0π/2Loccos(θ)sin(θ) dθ dϕ dA=Loc02π0π/2cos(θ)sin(θ) dθ dϕ A=LocπA(7)
那么
L o c = Φ o u t π ∗ A (8) Lo_{c} = \frac{\Phi_{out}}{\pi*A} \tag{8} Loc=πAΦout(8)
同理可以得到目标表面的总入射辐射通量 Φ i n \Phi_{in} Φin为:
Φ i n = ∫ Ω L i ( l ) ∗ ( n ⋅ l )   d l   d A = ∫ Ω L i ( l ) ∗ ( n ⋅ l )   d l ∗ A (9) \Phi_{in} = \int_{\Omega} Li(l)*(n\cdot l)\ dl\ dA \\ = \int_{\Omega} Li(l)*(n\cdot l)\ dl * A \tag{9} Φin=ΩLi(l)(nl) dl dA=ΩLi(l)(nl) dlA(9)
那么就有:
Φ i n A = ∫ Ω L i ( l ) ∗ ( n ⋅ l )   d l (10) \frac{\Phi_{in}}{A} = \int_{\Omega} Li(l)*(n\cdot l)\ dl \tag{10} AΦin=ΩLi(l)(nl) dl(10)
根据渲染方程,我们可以得到:
L o c = L o ( v ) = ∫ Ω f r l a m b e r t i a n ( l , v ) ∗ L i ( l ) ∗ ( n ⋅ l )   d l Lo_{c} = Lo(v) = \int_{\Omega} fr_{lambertian}(l,v)*Li(l)*(n\cdot l)\ dl Loc=Lo(v)=Ωfrlambertian(l,v)Li(l)(nl) dl
因为 f r l a m b e r t i a n ( l , v ) fr_{lambertian}(l,v) frlambertian(l,v) 为定值 f r c fr_{c} frc ,那么就有:
L o c = L o ( v ) = ∫ Ω f r l a m b e r t i a n ( l , v ) ∗ L i ( l ) ∗ ( n ⋅ l )   d l = f r c ∗ ∫ Ω L i ( l ) ∗ ( n ⋅ l )   d l (11) Lo_{c} = Lo(v) = \int_{\Omega} fr_{lambertian}(l,v)*Li(l)*(n\cdot l)\ dl \\ = fr_c * \int_{\Omega} Li(l)*(n\cdot l)\ dl \tag{11} Loc=Lo(v)=Ωfrlambertian(l,v)Li(l)(nl) dl=frcΩLi(l)(nl) dl(11)
将公式(10)代入公式(11)可以得到:
L o c = L o ( v ) = f r c ∗ ∫ Ω L i ( l ) ∗ ( n ⋅ l )   d l = f r c ∗ Φ i n A (12) Lo_{c} = Lo(v) = fr_c * \int_{\Omega} Li(l)*(n\cdot l)\ dl \\ = fr_c * \frac{\Phi_{in}}{A} \tag{12} Loc=Lo(v)=frcΩLi(l)(nl) dl=frcAΦin(12)
又因为根据公式(8), L o c = Φ o u t / ( π ∗ A ) Lo_{c} = \Phi_{out}/{(\pi*A)} Loc=Φout/(πA),那么
L o c = f r c ∗ Φ i n A = Φ o u t π ∗ A (13) Lo_c = fr_c * \frac{\Phi_{in}}{A} = \frac{\Phi_{out}}{\pi*A} \tag{13} Loc=frcAΦin=πAΦout(13)
又因为 c d i f f = Φ o u t / Φ i n c_{diff} = \Phi_{out}/\Phi_{in} cdiff=Φout/Φin,那么可以得到:
f r c = Φ o u t π ∗ Φ i n = c d i f f π (14) fr_c = \frac{\Phi_{out}}{\pi*\Phi_{in}} = \frac{c_{diff}}{\pi} \tag{14} frc=πΦinΦout=πcdiff(14)
即:
f r L a m b e r t i a n ( l , v ) = f r c = Φ o u t π ∗ Φ i n = c d i f f π (14) fr_{Lambertian}(l,v) = fr_c = \frac{\Phi_{out}}{\pi*\Phi_{in}} = \frac{c_{diff}}{\pi} \tag{14} frLambertian(l,v)=frc=πΦinΦout=πcdiff(14)
至此,我们得到了 Lambertian 材质的 漫反射 BRDF 公式 f r l a m b e r t i a n ( l , v ) = c d i f f π fr_{lambertian}(l,v)=\frac{c_{diff}}{\pi} frlambertian(l,v)=πcdiff.

三、参考引用

[1].Real-Time Rendering, 4th Edition-Chapter 9 Physically Based Shading
[2].Background: Physics and Math of Shading

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2343533.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

小火电视桌面TV版下载-小火桌面纯净版下载-官方历史版本安装包

别再费心地寻找小火桌面的官方历史版本安装包啦,试试乐看家桌面吧,它作为纯净版本的第三方桌面,具有诸多优点。 界面简洁纯净:乐看家桌面设计简洁流畅,页面简洁、纯净无广告,为用户打造了一个干净的电视操…

androidstudio安装配置

B站配置视频AndroidStudio安装配置教程(最新版本教程)3分钟搞定 快速安装使用_哔哩哔哩_bilibili 1、环境变量 D:\AndroidSdk ANDROID_HOME ANDROID_SDK_HOME 2、新建 3、配置 distributionUrlhttps://mirrors.cloud.tencent.com/gradle/gradle-8.11.1-…

《AI大模型趣味实战》基于RAG向量数据库的知识库AI问答助手设计与实现

基于RAG向量数据库的知识库AI问答助手设计与实现 引言 随着大语言模型(LLM)技术的快速发展,构建本地知识库AI问答助手已成为许多企业级应用的需求。本研究报告将详细介绍如何基于FLASK开发一个使用本地OLLAMA大模型底座的知识库AI问答助手&…

BeeWorks Meet:私有化部署视频会议的高效选择

在数字化时代,视频会议已成为企业沟通协作的重要工具。然而,对于金融、政务、医疗等对数据安全和隐私保护要求极高的行业来说,传统的公有云视频会议解决方案往往难以满足其严格的安全标准。此时,BeeWorks Meet 私有化部署视频会议…

IPv6 技术细节 | 源 IP 地址选择 / Anycast / 地址自动配置 / 地址聚类分配

注:本文为 “IPv6 技术细节” 相关文章合集。 部分文章中提到的其他文章,一并引入。 略作重排,未整理去重。 如有内容异常,请看原文。 闲谈 IPv6 - 典型特征的一些技术细节 iteye_21199 于 2012-11-10 20:54:00 发布 0. 巨大的…

【工具】使用 MCP Inspector 调试服务的完全指南

Model Context Protocol (MCP) Inspector 是一个交互式开发工具,专为测试和调试 MCP 服务器而设计。本文将详细介绍如何使用 Inspector 工具有效地调试和测试 MCP 服务。 1. MCP Inspector 简介 MCP Inspector 提供了直观的界面,让开发者能够&#xff…

【音视频】AVIO输入模式

内存IO模式 AVIOContext *avio_alloc_context( unsigned char *buffer, int buffer_size, int write_flag, void *opaque, int (*read_packet)(void *opaque, uint8_t *buf, int buf_size), int (*write_packet)(void *opaque, uint8_t *buf, int buf_size), int64_t (*seek)(…

Uniapp:scroll-view(区域滑动视图)

目录 一、基本概述二、属性说明三、基本使用3.1 纵向滚动3.2 横向滚动一、基本概述 scroll-view,可滚动视图区域。用于区域滚动。 二、属性说明 属性名类型默认值说明平台差异说明scroll-xBooleanfalse允许横向滚动scroll-yBooleanfalse允许纵向滚动三、基本使用 3.1 纵向滚…

单精度浮点运算/定点运算下 MATLAB (VS) VIVADO

VIVADO中单精度浮点数IP核计算结果与MATLAB单精度浮点数计算结果的对比 MATLAB定点运算仿真,对比VIVADO计算的结果 目录 前言 一、VIVADO与MATLAB单精度浮点数运算结果对比 二、MATLAB定点运算仿真 总结 前言 本文介绍了怎么在MATLAB中使用单精度浮点数进行运算…

【AI插件开发】Notepad++ AI插件开发1.0发布和使用说明

一、产品简介 AiCoder是一款为Notepad设计的轻量级AI辅助插件,提供以下核心功能: 嵌入式提问:对选中的文本内容进行AI分析,通过侧边栏聊天界面与AI交互,实现多轮对话、问题解答或代码生成。对话式提问:独…

【MySQL数据库入门到精通-07 函数-字符串函数、数值函数、日期函数和流程函数】

文章目录 一、字符串函数1. MySQL中的函数主要分为以下四类: 字符串函数、数值函数、日期函数、流程函数。下面是字符串函数常见的函数,见下表。2.具体代码实现3.结果 二、数值函数1.知识点2.具体代码实现3.结果 三、日期函数1.知识点2.具体代码实现3.结…

Python图像处理——基于Retinex算法的低光照图像增强系统

1.项目内容 (1)算法介绍 ①MSRCR (Multi-Scale Retinex with Color Restoration) MSRCR 是多尺度 Retinex 算法(MSR)的扩展版,引入了色彩恢复机制以进一步提升图像增强质量。MSR 能有效地压缩图像动态范围&#xff…

如何在JDK17项目中改成1.8

1.调整 Spring Boot 版本 由于 Spring Boot 3.x 最低要求 JDK 17&#xff0c;所以如果要使用 JDK 8&#xff0c;需要把 spring-boot-starter-parent 的版本降低到 2.7.x 系列&#xff0c;这个系列是支持 JDK 8 的。示例如下&#xff1a; <parent><groupId>org.sp…

【不同名字的yolo的yaml文件名是什么意思】

以下是这些 YOLO 系列配置文件的详细解析&#xff0c;按版本和功能分类说明&#xff1a; 一、YOLOv3 系列 文件名核心特性适用场景yolov3.yaml原始 YOLOv3 结构&#xff0c;3 尺度预测&#xff08;13x13,26x26,52x52&#xff09;通用目标检测yolov3-spp.yaml增加 SPP&#xff…

Zephyr kernel Build System (CMake)介绍

目录 概述 1. 结构介绍 2 构建和配置阶段 2.1 配置阶段 2.2 Cmake编译 3 Zephy项目目录结构 3.1 文件架构 3.2 文件content 概述 本文主要介绍Zephyr kernel Build System CMake的功能&#xff0c;以及使用该工具构建项目&#xff0c;并详细介绍了每个目录以及目录下文…

相对论大师-记录型正负性质BFS/图论-链表/数据结构

看到这一题我的第一个思路就是双向bfs 起点是a&#xff0c;终点还是a&#xff0c;但是flag是相反的&#xff08;“越”的方向&#xff09; tip1.可以用字典vis来存储flag 刚开始初始化时vissta,visend一个对应0、1 要求两个队列相…

Jenkins流水线管理工具

文章目录 前言&#xff1a; DevOps时代的自动化核心 —Jenkins一、Jenkins是什么&#xff1f;二、Linux安装Jenkinswar包方式安装依赖环境下载 Jenkins WAR 包启动 Jenkins 服务启动日志验证配置插件镜像源 docker镜像方式安装依赖环境拉取 Jenkins 镜像运行 Jenkins 容器获取初…

嵌入式开发:基础知识介绍

一、嵌入式系统 1、介绍 以提高对象体系智能性、控制力和人机交互能力为目的&#xff0c;通过相互作用和内在指标评价的&#xff0c;嵌入到对象体系中的专用计算机系统。 2、分类 按其形态的差异&#xff0c;一般可将嵌入式系统分为&#xff1a;芯片级&#xff08;MCU、SoC&am…

el-table中el-input的autofocus无法自动聚焦的解决方案

需求 有一个表格展示了一些进度信息&#xff0c;进度信息可以修改&#xff0c;需要点击进度信息旁边的编辑按钮时&#xff0c;把进度变为输入框且自动聚焦&#xff0c;当鼠标失去焦点时自动请求更新接口。 注&#xff1a;本例以vue2 element UI为例 分析 这个需求看着挺简单…

一文了解智慧教育顶刊TLT的研究热点

本文聚焦于IEEE Transactions on Learning Technologies&#xff08;TLT&#xff09;期刊&#xff0c;通过图文结合的方式&#xff0c;梳理了2025年第18卷的研究热点&#xff0c;帮助读者把握教育技术与人工智能交叉领域的研究进展&#xff0c;深入了解智能学习系统、自适应学习…