基于BRDF的光照模型

2024-03-17 14:40
文章标签 模型 光照 brdf

本文主要是介绍基于BRDF的光照模型,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

知识预备


光亮度是物体表面某方向单位投影区域单位立体角的光流量
沿着某条光线的光亮度是常数,但光通量随距离增大而衰减(实际是二次衰减,但在计算机图形学中采用线性衰减效果比较好)

光强度是单位立体角的辐射能量
辐射度是单位面积流出的光通量
辐照度是单位面积流入的光通量

它们的关系:
光强度=光亮度*单位面积*入射角余弦
辐照度=光亮度*入射角余弦*单位立体角
辐射度=光亮度*入射角余弦*单位立体角(但方向不同)


BRDF(Bi-directional Reflection Distribution Function)的含义


光和物体相交,会产生三种情况产生,反射,被吸收,折射, 即是

light incident at surface = light reflected + light absorbed + light transmitted

对于理想固体来说,折射不会产生,就只剩下前两项。

BRDF就是用于描述光与物体相交,光是如何反射的。

BRDF通常用一个数学表达式来表示,来看下它和哪些变量有关。

首先是光的波长 λ ,不同的光产生的反射不同。

其次对于物体的材质,如果不是均一分布的话,BRDF也不同,记材质坐标为u,v。

最后,还和入射光线与出射光线的角度有关。这里角度用球坐标来表示,分别记为


则有:


已知上面的变量,就可以求出BRDF了


在实际计算中, λ ,u,v通常省略,这样参数就只剩下四个,最后计算的结果是一个三维向量,表示颜色的RGB。



笛卡尔坐标和球坐标的转换



假设向量是经过单位化的



Differential Solid Angles

对于描述光的出射和入射,通常并不是简单的一个光想来表示,比较适合的是用"光量"来表示。

对于一个单位圆,Differential Solid Angles的计算如下


在一个单位圆中,球坐标为θ和Φ,dw为Differential Solid Angles



最后求出的值的单位是弧度的平方,也称为steradians。


BRDF的定义

BRDF规定的是辐照度和光亮度的关系:
对于入射Differential Solid Angles 和出射的Differential Solid Angles ,BRDF就是上的光量比上上的射出的光子总量。



BRDF = 出射辐照度 / 入射光亮度



入射光亮度转换成辐照度,得到


BRDF值只和材质有关,与入射光线无关。


两种类型两个性质

有两种类型的BRDF,isotropic和anisotropic。左边是isotropic,右边是anisotropic。



在真实世界中,大部分的材质都是偏向于各向同性加上一点点的各向异性。


基于物理的BRDF的需要遵循两个性质:reciprocity 和 conservation of energy

reciprocity 指的是交换性,出射角和入射角互换,BRDF不变,即:



conservation of energy指所有出射光的量的总和小于入射光的总和。数学表达式如下

用半球面积分如下



光照方程

在有多个光源的情况下,光照方程如下


在只有一个光源的情况下,光照方程如下


连续的描述如下



获取BRDF

有三种方法,一种是基于经验公式来获得,比如Lambert和Phong,另一种是基于物理的数值分析模型,它们的形式就是一个数值函数,另一种是Data-Driven的方式,通过实验的方式获取,通过一些光照采集设备。这种方式得到的结果通常是一张表示BRDF的图片。实验的方式如下图。





常用的BRDF特征如下



参考

An Introduction to BRDF-Based Lighting 

Bidirectional reflectance distribution function Wiki

Physically Based Shading in Theory and Practice
知乎 - 如何正确理解 BRDF (双向反射分布函数)


这篇关于基于BRDF的光照模型的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/819247

相关文章

C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)

《C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)》本文主要介绍了C#集成DeepSeek模型实现AI私有化的方法,包括搭建基础环境,如安装Ollama和下载DeepS... 目录前言搭建基础环境1、安装 Ollama2、下载 DeepSeek R1 模型客户端 ChatBo

SpringBoot快速接入OpenAI大模型的方法(JDK8)

《SpringBoot快速接入OpenAI大模型的方法(JDK8)》本文介绍了如何使用AI4J快速接入OpenAI大模型,并展示了如何实现流式与非流式的输出,以及对函数调用的使用,AI4J支持JDK8... 目录使用AI4J快速接入OpenAI大模型介绍AI4J-github快速使用创建SpringBoot

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

Spring AI Alibaba接入大模型时的依赖问题小结

《SpringAIAlibaba接入大模型时的依赖问题小结》文章介绍了如何在pom.xml文件中配置SpringAIAlibaba依赖,并提供了一个示例pom.xml文件,同时,建议将Maven仓... 目录(一)pom.XML文件:(二)application.yml配置文件(一)pom.xml文件:首

如何在本地部署 DeepSeek Janus Pro 文生图大模型

《如何在本地部署DeepSeekJanusPro文生图大模型》DeepSeekJanusPro模型在本地成功部署,支持图片理解和文生图功能,通过Gradio界面进行交互,展示了其强大的多模态处... 目录什么是 Janus Pro1. 安装 conda2. 创建 python 虚拟环境3. 克隆 janus

本地私有化部署DeepSeek模型的详细教程

《本地私有化部署DeepSeek模型的详细教程》DeepSeek模型是一种强大的语言模型,本地私有化部署可以让用户在自己的环境中安全、高效地使用该模型,避免数据传输到外部带来的安全风险,同时也能根据自... 目录一、引言二、环境准备(一)硬件要求(二)软件要求(三)创建虚拟环境三、安装依赖库四、获取 Dee

DeepSeek模型本地部署的详细教程

《DeepSeek模型本地部署的详细教程》DeepSeek作为一款开源且性能强大的大语言模型,提供了灵活的本地部署方案,让用户能够在本地环境中高效运行模型,同时保护数据隐私,在本地成功部署DeepSe... 目录一、环境准备(一)硬件需求(二)软件依赖二、安装Ollama三、下载并部署DeepSeek模型选

Golang的CSP模型简介(最新推荐)

《Golang的CSP模型简介(最新推荐)》Golang采用了CSP(CommunicatingSequentialProcesses,通信顺序进程)并发模型,通过goroutine和channe... 目录前言一、介绍1. 什么是 CSP 模型2. Goroutine3. Channel4. Channe

Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)

《Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)》:本文主要介绍Python基于火山引擎豆包大模型搭建QQ机器人详细的相关资料,包括开通模型、配置APIKEY鉴权和SD... 目录豆包大模型概述开通模型付费安装 SDK 环境配置 API KEY 鉴权Ark 模型接口Prompt