请选择 进入手机版 | 继续访问电脑版

开源计算机图形学社区(Open Source Computer Graphics Community) |OpenGPU Forum (2007-2013)| OpenGPU Project

 找回密码
 注册
搜索
查看: 974|回复: 3

球谐光照的一个疑问,望大神解惑 [复制链接]

Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17

注册时间
2010-3-27
积分
5972
发表于 2017-5-2 11:49:52 |显示全部楼层
近期学习了下球谐光照,大致理解其思路,存在一个问题
1、球谐函数的第二个性质是旋转不变性(好象没有那篇文章介绍过,求大神给予提示),在运用上,我对其旋转不变性的理解为:光源围绕场景旋转时(就是环境立方体贴图旋转),PRT的计算数据依然可以使用,使用Shader依然可以正确计算结果。是否正确?
2、求谐函数应该译成球面调和函数更准确些(数学上已经有了此译法了,有些文献依然为球谐,虽然译成球谐更能反映此函数的功能),不然又将half life译成半条命(正确应为半衰期)。
这家伙什么也没有留下

Rank: 28Rank: 28Rank: 28Rank: 28Rank: 28Rank: 28Rank: 28

注册时间
2009-3-31
积分
14403
发表于 2017-5-4 11:28:01 |显示全部楼层
1. 旋转不变性在非常多文章里都介绍过啊。不是“依然可以使用”,而是可以直接旋转SH系数。

假设f(x)是把用一个cubemap转成SH系数的函数,那么如果f(x)有旋转不变性,就表示它符合
f(rot * x) = rot * f(x)
所以一旦旋转了,你直接把之前得到的SH系数拿去旋转就可以了,不必重新从cubemap分解。

wavelet就没有旋转不变性,所以每次旋转之后,都得重新分解成系数。这在很大程度上限制了wavelet在PRT里的的应用。

2. 我见过的很多都是直译成球面调和函数。不过既然有SH这么简单的说法,其实几乎所有时候都用SH。

使用道具 举报

Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17

注册时间
2010-3-27
积分
5972
发表于 2017-5-4 13:54:31 |显示全部楼层
感谢龚关注回复。看了些材料,就是说f(rot * x) = rot * f(x),没有太理解如何得到。

使用道具 举报

Rank: 9Rank: 9Rank: 9

注册时间
2009-10-21
积分
436
发表于 2017-6-10 21:36:48 |显示全部楼层
ljb 发表于 2017-5-4 13:54
感谢龚关注回复。看了些材料,就是说f(rot * x) = rot * f(x),没有太理解如何得到。 ...

就是说,比如你对一个球面上的信息进行编码(投影/投射),这样会生成一组系数。
然后呢,现在你双想对这个球面进行旋转,然后在将旋转后的信息编码,这样就能重新进行一次编码,生成旋转后的新的一组系数。因为对进行编码会对信息函数做球上的积分,这会很慢。
但是球谐波的编辑后得到的系数有一个旋转的特性,你不需对旋转后的信息重新编号,而只需要对系数进行旋转计算,这样得到的新的系数就和旋转后再编码得的系数是一样的。这样用转换计算数的系数所还原的函数也就是旋转后的函数。
f(rot * x) = rot * f(x)

旋转后编码得到的系数 = 球揩波系数旋转矩阵 * 旋转前编码的系数
SHProj( rot * f(x)) = rot * SHProj(f(x))
球揩波系数旋转矩阵很复杂,与SH的阶数有关,论文给出了绕x,y,z轴旋转的矩阵,然后任意旋转使用欧拉角来组合。

使用道具 举报

最近看过此主题的会员

您需要登录后才可以回帖 登录 | 注册

‹‹
我的工具栏

关于我们|手机版|Archiver|开源计算机图形学社区(Open Source Computer Graphics Community) | OpenGPU Project | OpenGPU Forum (2007-2013)

GMT+8, 2017-7-28 14:40 , Processed in 0.054830 second(s), 11 queries .

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部