Physical Based Rendering 第一章 简介

2024-03-09 20:04

本文主要是介绍Physical Based Rendering 第一章 简介,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Physical Based Rendering 第一章 简介

  • 前言
  • 光是什么
  • 相机和电影
  • 光线物体的交互
  • 光的分布
  • 可见性
  • 表面光的散射
  • 间接光照
  • 射线传播

前言

丢个连接

光是什么

如果说,我们想要让一张图片无法分辨是真是假,那么光的模拟肯定是首当其冲的。想要模拟光,我们自然而然会有一个疑问:光是什么?

根据物理学研究,我们认为光具有“波粒二象性”,即其即可以看作电磁波的形式进行传播,也具有光子的粒子性。

那么为了模拟光,我们需要怎么利用这种性质呢?好消息是,我们所需模拟的光,实际上只是所有波谱中非常小的一部分(可见光)。除此之外,我们知道光的波长很小,在实际过程中,我们所模拟的物体大多以厘米或米计,这实际上是一个好消息,因为这种情况使得我们没有必要去追踪光线的波层面的细节(如果需要追究这种细节,计算机图形学渲染早就不存在了)。在计算机图形学中,我们遵从16或17世纪的物理学模型,将光看作粒子,追踪其运动轨迹。

这一做法实际上后来也成为了知名的算法:光线追踪。

从原理而言,光追实际上模拟了光线与物体交互和脱离的过程。但是无论一个光追系统如何设计,其体系中总是包含如下元素:

  • 相机:决定了图像是从哪个角度观察的。
  • 光线与物体的互动
  • 光源
  • 可见性
  • 表面上光的散射
  • 间接的光路
  • 光线传播

相机和电影

在这里插入图片描述
在这里插入图片描述

光线物体的交互

每当相加生成一条光线,首先需要确认的是,这条光线是否与物体有碰撞,以及碰撞的位置在哪。对于一条光线 r r r
r ( t ) = o + t d r(t)=o + t\bold{d} r(t)=o+td
其中 o o o是光线的起始位置, d \bold{d} d为光线的方向。 t t t作为参数,范围为 [ 0 , + ∞ ] [0,+\infty] [0,+]

对于一个平面 F ( x , y , z ) = 0 F(x,y,z)=0 F(x,y,z)=0,光线碰撞满足以下方程:
x 2 + y 2 + z 2 − r 2 = 0 x^2 + y^2 + z^2 - r^2 = 0 x2+y2+z2r2=0

然而实际中,我们通常用一个含有t的方程来替代:
( o x + t b x ) 2 + ( o y + t b y ) 2 + ( o z + t b z ) 2 − r 2 = 0 (o_x + t\bold{b}_x)^2+(o_y + t\bold{b}_y)^2+(o_z + t\bold{b}_z)^2-r^2=0 (ox+tbx)2+(oy+tby)2+(oz+tbz)2r2=0
对这个方程求解,如果t没有实属根,则说明光线错过了这个球面,反之则说明相交。且最小的实根就是第一个交点。
在这里插入图片描述

光的分布

虽然点光源在现实中并不存在,且在实际算法中,使用面光源会更合理。但是本节为了方便期间,还是使用点光源模型进行描述。
在这里插入图片描述
我们假设点光源的对周围是均匀发光,则对单位球面,单位面积的照射强度为 Φ 4 π \frac{\Phi}{4\pi} 4πΦ,对于距离如下的两个球面,半径分别为 r 1 , r 2 r_1,r_2 r1,r2,我们很容易能看出,照射强度实际上与 1 r 2 \frac{1}{r^2} r21成正比。
在这里插入图片描述
同理,对于任何一个单位面积 d A dA dA,其与光线成 θ \theta θ角度,其微分形式的能量强度为(辐射度):
d E = Φ c o s θ 4 π r 2 dE=\frac{\Phi cos\theta}{4\pi r^2} dE=4πr2Φcosθ
上式实际上包含了两条基本定理:倾斜表面的光的余弦损失,以及距离平方衰减。

可见性

在这里插入图片描述

表面光的散射

在我们能够正确计算得到某个表面是否有入射光之后,我们下一步需要知道,该表面的入射光如何散射,我们需要了解散射的能量分布,尤其是那些进入相机的散射能量。
在这里插入图片描述

场景中每个物体都会具有一个材质,其效果为具有一个双向反射比分布函数(BRDF),这个方程向我们解释了从入射角度 ω i \omega_i ωi到任意出射角度 ω o \omega_o ωo的能量反射。在p点处的BRDF函数我们可以写作: f r ( p , ω i , ω o ) f_r(p, \omega_i, \omega_o) fr(p,ωi,ωo)

受到上述方式的启发,我们同样可以针对散射、透射定义相关的函数(BSDF、BTDF)。

间接光照

某个点的光照能量可以看作是直接入射到这一点的光照与其它散射光照的和。这一想法可以写作如下光线转移方程:
L o ( p , ω o ) = L e ( p , ω o ) + ∫ S 2 f ( p , ω o , ω i ) L ( p , ω i ) ∣ c o s θ i ∣ d ω i (1.1) L_o(p, \omega_o)=L_e(p,\omega_o) + \int_{S^2}{f(p,\omega_o,\omega_i)L(p,\omega_i)|cos\theta_i|d\omega_i}\tag{1.1} Lo(p,ωo)=Le(p,ωo)+S2f(p,ωo,ωi)L(p,ωi)cosθidωi(1.1)

其描述了在p点处沿 ω o \omega_o ωo角度的辐射度 L o ( p , ω o ) L_o(p, \omega_o) Lo(p,ωo)为,该点本身发光发出的辐射度 L e ( p , ω o ) L_e(p,\omega_o) Le(p,ωo)加上由环境其它地方沿 ω i \omega_i ωi散射到p点的散射光 L ( p , ω i ) L(p,\omega_i) L(p,ωi)再利用光线转移方程得到的光线,其中积分区域 S 2 S^2 S2为p点附近极小的一个球面,其 θ i \theta_i θi即为入射的散射光线与球面的散射角。

射线传播

在这里插入图片描述
前文的描述实际上有一个默认的假设,即光线全部再真空中传播。例如当我们讨论光在在球面的出射,实际上我们并未考虑光在传播过程中的衰减。烟雾、尘埃、雾气都会让这些假设失效。

这篇关于Physical Based Rendering 第一章 简介的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

轻量级在线服装3D定制引擎Myway简介

我写的面向web元宇宙轻量级系列引擎中的另外一个,在线3D定制引擎Myway 3D。 用于在线商品定制,比如个性化服装的定制、日常用品(如杯子)、家装(被套)等物品的在线定制。 特性列表: 可更换衣服款式,按需定制更换模型可实时更改材质颜色可实时添加文本,并可实时修改大小、颜色和角度,支持自定义字体可实时添加艺术图标,并可实时修改大小、颜色和角度,支持翻转、各种对齐可更改衣服图案,按需求定制

shader language学习(1)——shader language简介背景

shader language,称为着色语言,shade在英语是阴影、颜色深浅的意思。shader language基于物体本身属性和光照条件,计算美格橡塑的颜色值。 实际上这种解释具有明显的时代局限性,在GPU编程发展的早期,shader language的提出目标是加强对图形处理算法的控制,所以对该语言的定义也针对于此。但随着技术的进步,目前的shader language早已经用于通用计算

算法13—Bit Map算法简介

1. Bit Map算法简介          来自于《编程珠玑》。所谓的Bit-map就是用一个bit位来标记某个元素对应的Value, 而Key即是该元素。由于采用了Bit为单位来存储数据,因此在存储空间方面,可以大大节省。 2、 Bit Map的基本思想         我们先来看一个具体的例子,假设我们要对0-7内的5个元素(4,7,2,5,3)排

Zustand 状态管理库简介

1. Zustand 简介 Zustand(德语中意为“状态”)是一个使用简单 API 的 React 状态管理库。它的核心思想是以状态切片(slices)的方式组织应用状态,从而实现高效的状态管理。Zustand 提供了比 Redux 更加简洁和直接的用法,同时支持异步操作和中间件。 在React开发中,状态管理是一个非常重要的概念。虽然 React 提供了 useState 和 useRe

SpringCloud Config简介

简介 Spring Cloud Config为分布式系统的外部配置提供服务端(server)和客户端(client)的支持。Config服务端提供了一个集中的地方来管理所有环境下各个应用的配置,Config客户端即普通的Spring应用,但不局限于Spring应用,理论上任意应用都可以作为Config的客户端。Config服务端和客户端的概念都源自于Spring的Environment和Prop

常用加密算法之 RSA 简介及应用

引言 相关博文: Spring Boot 开发 – 常用加密算法简介(一)常用加密算法之 SM4 简介及应用 一、RSA算法简介 RSA (Rivest-Shamir-Adleman) 算法是一种非对称加密技术,由Ron Rivest、Adi Shamir和Leonard Adleman在1977年发明。它基于大数质因数分解的困难性,提供了一种安全的数据加密和解密方法。 1. 密钥生成

▶《强化学习的数学原理》(2024春)_西湖大学赵世钰 Ch5 蒙特卡洛方法【model-based ——> model-free】

PPT 截取必要信息。 课程网站做习题。总体 MOOC 过一遍 1、视频 + 学堂在线 习题 2、 过 电子书 是否遗漏 【下载:本章 PDF GitHub 页面链接 】 【第二轮 才整理的,忘光了。。。又看了一遍视频】 3、 过 MOOC 习题 看 PDF 迷迷糊糊, 恍恍惚惚。 学堂在线 课程页面链接 中国大学MOOC 课程页面链接 B 站 视频链接 PPT和书籍下载网址: 【Gi

WHAT - NextJS 系列之 Rendering - Server Rendering Strategies

目录 1. Static Rendering(静态渲染)特点:实现方式: 2. Dynamic Rendering(动态渲染)特点:实现方式: 3. Streaming Rendering(流式渲染)特点:实现方式: 总结 相关官方文档:https://nextjs.org/docs/app/building-your-application/rendering/server-co

opencascade AIS_InteractiveContext源码学习5 immediate mode rendering 即时模式渲染

AIS_InteractiveContext 前言 交互上下文(Interactive Context)允许您在一个或多个视图器中管理交互对象的图形行为和选择。类方法使这一操作非常透明。需要记住的是,对于已经被交互上下文识别的交互对象,必须使用上下文方法进行修改。如果交互对象尚未加载到交互上下文中,您才能直接调用交互对象的方法。 每个可选择的对象必须指定负责整体选择对象的选择模式(全局选

WHAT - NextJS 系列之 Rendering - Server Components

目录 一、Server Components1.1 Server Components特点使用 1.2 Client Components特点使用 1.3 综合使用示例1.4 小结 二、Server Components 优势三、Streaming 特性3.1 基本介绍和使用Streaming的理解工作原理使用示例服务器端组件客户端组件页面流程解释 3.2 HTTP/1.1和HTTP/2中