球谐函数在环境光照中的使用原理

2023-11-11

在三维空间中如何对场景光照进行球谐函数展开

图形学论文解析与复现【Spherical Harmonic Lighting:The Gritty Details】
首先,对场景中某像素点的漫反射光照进行计算。
L ( p , w o ) = ∫ Ω L ( w i ) n ⋅ w i d w i L(p,w_o) = \int_{\Omega}L(w_i)n\cdot w_idw_i L(p,wo)=ΩL(wi)nwidwi

设:
L i = ∑ i = 0 L i Y i ( ω ) n ⋅ ω = t ( ω ) = ∑ i = 0 t i Y i ( ω ) L_i = \sum_{i=0}L_iY_i(\omega)\\ \quad\\ n\cdot \omega = t(\omega) = \sum_{i=0}t_iY_i(\omega) Li=i=0LiYi(ω)nω=t(ω)=i=0tiYi(ω)

L ( p , w o ) L(p,w_o) L(p,wo)球谐展开后得到
L ( p , w o ) = ∑ i = 0 n 2 L ( w i ) n ⋅ w i L(p,w_o) = \sum_{i=0}^{n^2}L(w_i)n\cdot w_i L(p,wo)=i=0n2L(wi)nwi

漫反射环境光

计算 L i L_i Li

L i = ∑ i = 0 n 2 L ( w i ) Y i ( w ) L_i = \sum_{i=0}^{n^2} L(w_i)Y_i(w) Li=i=0n2L(wi)Yi(w)

for(pixel &p : Cubemap)
    Li += p.color * Yi(normalise(p.position)) * dw;

计算 t i t_i ti

t i = ∑ i = 0 n 2 n ⋅ w Y i ( w ) d w t_i = \sum_{i=0}^{n^2} n\cdot w Y_i(w)dw ti=i=0n2nwYi(w)dw
可惜求 t i t_i ti是与具体着色点有关(需要知道法线信息n)。这也就意味着,我们如果需要预计算 t i t_i ti,也就需要对每一个方向的法线n 都要算一组 t i t_i ti。每个像素点需要生成 i i i个(球谐基函数个)系数。

for(normal &n: sphere)//对于每个法线方向
{
    for(pixel &p : Cubemap)//对Cubemap进行采样积分
        Ti[n] += dot(n,normalise(p.position)) * Yi(normalise(p.position)) * dw;
}

但这样不就没有解决IBL需要对像素采样,导致移动端速度下降的问题了吗!!!!

我们引入不需要预计算 t i t_i ti的方式

辐照度环境贴图的有效表示

【论文复现】An Efficient Representation for Irradiance Environment Maps
采用球谐函数旋转特性解决每一个法线都需要预计算球谐函数的问题

如果我们已知 Y l m ( u ) Y_l^m(\mathbf{u}) Ylm(u) u \mathbf u u 方向下的球谐函数项的计算结果。
那么如果我们想要知道 v \mathbf v v 方向下的球谐函数项的计算结果,就需要再计算一次。

但如果我们可以得到 u \mathbf u u v \mathbf v v下的矩阵 R α , β , γ ( u ) R^{\alpha,\beta,\gamma}(\mathbf{u}) Rα,β,γ(u)
则可以得到
Y l m ( R α , β , γ ( u ) ) = ∑ m ′ = − l l D m ′ , m l ( R α , β , γ ) Y l m ′ ( u ) D m ′ , m l ( R α , β , γ ) = e − i m ′ α d m ′ , m l ( β ) e − i m γ \begin{array}{c} Y_{l}^{m}\left(R^{\alpha, \beta, \gamma}(\mathbf{u})\right)=\sum_{m^{\prime}=-l}^{l} D_{m^{\prime}, m}^{l}\left(R^{\alpha, \beta, \gamma}\right) Y_{l}^{m^{\prime}}(\mathbf{u}) \\ D_{m^{\prime}, m}^{l}\left(R^{\alpha, \beta, \gamma}\right)=e^{-i m^{\prime} \alpha} d_{m^{\prime}, m}^{l}(\beta) e^{-i m \gamma} \end{array} Ylm(Rα,β,γ(u))=m=llDm,ml(Rα,β,γ)Ylm(u)Dm,ml(Rα,β,γ)=eimαdm,ml(β)eimγ

其中 d m ′ , m l d^l_{m',m} dm,ml 为维格纳D矩阵。

将上式代入球谐函数
f ( u ) = ∑ l ∞ c l m Y l m ( u ) f(u) = \sum_l^\infin{c_l^mY_l^m(u)} f(u)=lclmYlm(u)
得到
f ( R α , β , γ ( u ) ) = ∑ l ∞ ∑ m = − l l c l m Y l m ( R α , β , γ ( u ) ) = ∑ l ∞ ∑ m ′ = − l l g l m ′ Y l m ′ ( u ) g l m ′ = ∑ m = − l l c l m D m ′ , m l ( R α , β , γ ) \begin{array}{c} f\left(R^{\alpha, \beta, \gamma}(\mathbf{u})\right)=\sum_{l}^{\infty} \sum_{m=-l}^{l} c_{l}^{m} Y_{l}^{m}\left(R^{\alpha, \beta, \gamma}(\mathbf{u})\right) =\sum_{l}^{\infty} \sum_{m^{\prime}=-l}^{l} g_{l}^{m^{\prime}} Y_{l}^{m^{\prime}}(\mathbf{u}) \\ \quad\\ g_{l}^{m^{\prime}}=\sum_{m=-l}^{l} c_{l}^{m} D_{m^{\prime}, m}^{l}\left(R^{\alpha, \beta, \gamma}\right) \end{array} f(Rα,β,γ(u))=lm=llclmYlm(Rα,β,γ(u))=lm=llglmYlm(u)glm=m=llclmDm,ml(Rα,β,γ)

根据上式,我们可以得出,如果要计算一个旋转之后的球谐函数,只需要对原来球谐函数的球谐系数处理就好。
处理方程即是:
g l m ′ = ∑ m = − l l c l m D m ′ , m l ( R α , β , γ ) g_{l}^{m^{\prime}}=\sum_{m=-l}^{l} c_{l}^{m} D_{m^{\prime}, m}^{l}\left(R^{\alpha, \beta, \gamma}\right) glm=m=llclmDm,ml(Rα,β,γ)

漫反射环境光 L ( w i ′ ) L(w'_i) L(wi)

  • 只关心光线和法线的夹角,不考虑其他角度
  • 只考虑m’=0的情况

得到
在这里插入图片描述
结合下式
在这里插入图片描述
得到
在这里插入图片描述

漫反射环境光 t ( θ ′ ) t(\theta') t(θ)

这里为什么只关心局部坐标下的 n ⋅ w n\cdot w nw?????

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

最终结果

在这里插入图片描述

  • 对于 L l m L_l^m Llm而言,仍需要预计算(与上一节相同)
  • 对于 t l t_l tl,与上一篇不同的是:已经变成了如下几个常数(只与l有关)与 Y l m ( n ) Y_l^m(n) Ylm(n)的乘积
    在这里插入图片描述
  • 对于 Y l m ( n ) Y_l^m(n) Ylm(n)项,他的参数是具体着色点的法线n。
    该Y通过如下转换,得到法线n下的基坐标函数。再与外部预计算好的 L l m L_l^m Llm t l t_l tl进行简单乘积得到最终的漫反射环境光!
    在这里插入图片描述

光泽(镜面)反射环境光

首先将光照方程列出
在这里插入图片描述
对光照方程进行分解
在这里插入图片描述
注意这里与IBL 文章中的分解方式不一样, n ⋅ w i n\cdot w_i nwi被分到前面一部分了(IBL是分到后面一部分的)

但是球谐函数处理低频信息更好(意思是更适合处理漫反射或者是粗糙度比较大的光泽反射),因为对于纯镜面反射而言,我们需要非常高阶的球谐函数才能进行逼近,那计算量实在是太大了。

因此一般使用IBL处理高光环境光反射。

球谐函数也不是仅仅只能用于求环境光,这种将函数展开的思想还普遍用于解决顺序无关的透明度等问题。

参考

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

球谐函数在环境光照中的使用原理 的相关文章

  • 中秋闲鱼卖货,月入过万的新玩法?

    中秋节越来越近了 都开始忙着走亲串友 人情社会关系要多走动 虽然大家都在忙着搞钱 但是逢年过节要停下脚步享受美好生活 月圆中秋思念满满每逢佳节倍思亲 在异国他乡的朋友因疫情不能回家团聚 但现在移动互联网给人们生活带来太多便捷 打电话语音视频
  • 获得用户输入的一个字符串,输出其中字符a的出现次数

    task19 获得用户输入的一个字符串 输出其中字符a的出现次数 name wangzilu date 2020 2 19 task 获得用户输入的一个字符串 输出其中字符a的出现次数 first way x str input pleas
  • shell 重定向到文件

    首先明确基本 gt dev null 输出到空设备 表示丢掉输出信息 2 gt 1 将输出到标准错误的信息输出到标准输出设备 通常是屏幕 有3个默认的i o 0 是标准输入 一般是键盘 1 是标准输出 一般是屏幕了 2 是标准错误 有时候屏
  • 编程笔记:Windows Forms in C#

    1 画线时遇到的奇怪问题 以下摘取部分代码 Graphics g null g CreateGraphics private void Form1 MouseMove object sender MouseEventArgs e 下面三行代
  • 第七章、并发编程实战项目

    一 并发任务执行框架 架构师是什么 在一个软件项目开发过程中 将客户的需求转换为规范的开发计划及文本 并制定这个项目的总体架构 指导整个开发团队完成这个计划的那个人 就是 架构师 一般是一个项目里的最资深的专业技术人员 可以说架构师首先一定
  • 【SDOI2016】数字配对【建立二分图+费用流求方案数】

    题目链接 首先 我们可以看一下这个推导过程 如果 那么 对于 就一定不是质数 一定是它的一个因子 于是可以看出 这一定是一幅二分图 于是 可以根据二分图的性质来确定了每个点的属于S边还是T边了 include
  • 《深入理解mybatis原理》 MyBatis事务管理机制

    版权声明 本文为博主原创文章 未经博主允许不得转载 https blog csdn net u010349169 article details 37992171 MyBatis作为Java语言的数据库框架 对数据库的事务管理是其非常重要的
  • 在手机端点击input框不弹出输入法的方法

    1 使用CSS样式 input pointer events none 2 使用事件阻止 input onmousedown function e e preventDefault 这样不仅会阻止键盘 同时 input 会失去光标跟随 如果
  • 通俗易懂的LSTM

    目录 一 LSTM的基础知识 1 长依赖的问题 2 LSTM的核心 3 LSTM的门结构 4 LSTM门结构的作用 5 LSTM的变体 GRU 二 LSTM的补充知识 1 LSTM缓解梯度消失的原因 一 LSTM的基础知识 1 长依赖的问题
  • Python OpenCV 解决人脸识别报错cascade.detectMultiScale error

    Authored by Monana Contact me via serena9636 163 com 环境 Python2 7 OpenCV3 1 0 Win 64bit 我想在OpenCV中实现一段如下的很简单的人脸识别代码 这也是在
  • vsCode返回上一步

    vsCode返回上一步 windows Alt 上下左右的左箭头 Linux Ctrl Alt 减号
  • 图像信噪比的理解

    图像的信噪比和图像的清晰度一样 都是衡量图像质量高低的重要指标 图像的信噪比是指视频信号的大小与噪波信号大小的比值 其公式为 S N 信噪比 20 log 信号 噪声 dB 信噪比大 图像画面就干净 看不到什么噪波干扰 表现为 颗粒 和 雪

随机推荐

  • 使用VMware完成KVM虚拟化实验并运行Centos

    本次实验在VMware中的Ubuntu18内安装KVM并运行centos 首先 在VMware下开启虚拟化 更新软件索引 apt get update 安装依赖 apt get install qemu kvm qemu virt mana
  • js验证姓名,包括少数民族名字中的·,后你哦·就两节课了

    姓名验证 u4E00 u9FA5 uf900 ufa2d s 2 20 亲测
  • Outlook VBA自动处理邮件

    需求描述 公司里面每天都会有很多邮件 三分之一都是不需要看的 Outlook的过滤功能不错 都可以处理掉 还有些邮件 根据正文或者附件做一下处理自动转发出去就行了 于是上网搜集了一些资料 写个了小程序 共享一下 以后可以参考 也希望对大家有
  • Linux系列一 VMware 中 Fedora系统的安装与网络配置

    之前一篇文章 简单地总结了自己的Linux假期培训课程 因为自己也打算开始学习Linux 所以就在这里写点东西 记录自己的学习历程 如果也能给大家带去一点帮助的话 甚是欣慰 能力时间有限 难免有疏漏的地方 还希望大家多多批评指正 本篇文章的
  • C++——set 和 multiset

    文章目录 结构 构造 非更易型操作 查找操作 赋值操作 迭代器相关操作 插入和移除操作 自定义排序准则 Set 和 multiset 会根据特定的排序准则 自动将元素排序 两者不同之处在于 multiset 允许元素重复而 set 不允许
  • [bzoj1359][Baltic2009]Candy

    给定N个数对 T i S i 表示时刻 S i 时在位置 T i 处出现一粒糖果 有一些机器人可供使用 每个机器人可花费一单位时间向相邻位置移动 要求用最少的机器人接到全部糖果 时刻0时机器人位置可自行安排 1 leq N leq10000
  • centos断电重启卡在登录前界面的问题解决

    出现这个情况的原因猜测是断电 启动后就卡在登录前界面 只有网络是通的 其他服务貌似都没正常启动 ssh远程终端也连不上 ctrl alt 1 切换到详细信息模式下看到这样的错误 就是文件系统xfs有损坏 查资料都说是需要通过xfs repa
  • c语言编程3*3矩阵的转置

    include
  • 【FreeRTOS】任务通知的使用

    作者主页 凉开水白菜 作者简介 共同学习 互相监督 热于分享 多加讨论 一起进步 专栏资料 https pan baidu com s 1nc1rfyLiMyw6ZhxiZ1Cumg pwd free 点赞 收藏 再看 养成习惯 订阅的粉丝
  • Java比较两个对象是否相同并获取值不同的属性

    最近项目中要加操作日志 同时要把用户修改了那些字段记录下来 在更新的时候就需要比较之前的数据和现在的数据有哪些不同 这么多类一个一个的比较就太麻烦了 所以打算写一个工具类 主要思想还是通过反射获取类的属性的getter方法 调用getter
  • 【Mo 人工智能技术博客】基于耦合网络的推荐系统

    基于耦合网络的推荐系统 作者 陈东瑞 1 复杂网络基础知识 当我们拿起手机给家人 朋友或者同事拨打电话时 就不知不觉中参与到了社交网络形成的过程中 当我们登上高铁或者飞机时 就可以享受交通网络给我们带来的方便 即使当我们躺在床上什么也不干时
  • 【Java小实验】【Java并发】使用线程池按行并发取二维数组最大值

    使用线程池按行并发取二维数组最大值 生成二维数组 使用Callable实现线程 使用Runnable获取线程 快手后端二面问题 由于网上直接搜竟然没有搜出来 自己写了一下 生成二维数组 生成二维数组的公共类 class RandomArra
  • Mybatis中@MapKey注解简介说明

    转自 Mybatis中 MapKey注解简介说明 下文笔者讲述Mybatis中 MapKey注解的简介说明 Mybatis中 MapKey注解的功能 MapKey注解 1 用于返回map的key值 通常情况下使用唯一键作为key 2 此注解
  • 网络原理(四):传输层协议 TCP/UDP

    目录 应用层 传输层 udp 协议 端口号 报文长度 udp 长度 校验和 TCP 协议 确认应答 超时重传 链接管理 滑动窗口 流量控制 拥塞控制 延时应答 捎带应答 总结 我们第一章让我们对网络有了一个初步认识 第二章和第三章我们通过代
  • NSI45025AT1G 25mA 45V LED驱动器,恒流调节器 工业指示灯、背光灯解决方案

    NSI45025AT1G是一款线性恒流调节器是一种简单 经济和稳健的装置 旨在为LED 类似于恒流二极管 CCD 中的电流调节提供一种成本有效的解决方案 恒流调节器基于自偏置晶体管 SBT 技术 在宽电压范围内调节电流 具有负温度系数 以保
  • 第一章 红绿灯数据采集

    第一章 红绿灯数据采集 华为hilens主控 AI实现自主导航和红绿灯控制 总章目录 第一章 Hilens红绿灯数据采集 第二章 ModelArts数据处理 第三章 ModelArts模型训练 第四章 ModelArts模型转换 第五章 H
  • 国内各大互联网公司技术团队站点

    利用闲暇时间整理了一份国内各大互联网公司的相关技术站点 希望能够对大家有所帮助 也欢迎各位帮忙补充 1 腾讯系列 名称 地址 财付通设计中心TID 地址 fitdesign tencent com QQ邮箱博客 地址 blog mail q
  • 使用linux服务器相关命令

    最近需要在云GPU服务器上跑模型 初次接触这样的形式 因此记录一下比较常用的命令 一 ssh登陆指令 1 常见登陆方式 ssh 用户名 服务器ip 2 有端口号和用户名的登陆方式 ssh l 用户名 服务器ip p 端口号 二 scp指令
  • git push遇到503错误的解决方案:The requested URL returned error: 503

    git remote set url origin https your user name github com your user name your project name git 参考了这个blog https www shuiz
  • 球谐函数在环境光照中的使用原理

    在三维空间中如何对场景光照进行球谐函数展开 图形学论文解析与复现 Spherical Harmonic Lighting The Gritty Details 首先 对场景中某像素点的漫反射光照进行计算 L p w