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

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

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

关于unity的brdf实现GGX的疑问 [复制链接]

Rank: 8Rank: 8

注册时间
2016-12-4
积分
129
发表于 2017-8-11 18:31:14 |显示全部楼层
本帖最后由 迪迦天女 于 2017-8-11 20:32 编辑

unity brdf实现GGX的G(l,v,h)项代码如下

我查到的GGX中G(l,v,h)公式是这个

----------------
在我的计算中:
原始公式中lambda_l=(-1 + sqrt(a2 * (1 - NdotL2) / NdotL2 + 1)) * 0.5f;
根据G1的公式,分子分母同时除以2NdotL可以的整理得:
(1 + sqrt(a2 * (1 - NdotL2) / NdotL2 + 1)) * 0.5f;
首项一个是1一个是-1
再者,G拆分成两个G1子函数,最后G的结果应该是两个子函数的积,即G=G1(l)G1(v),但是代码中似乎是用的加法而不是乘法假设(1 + sqrt(a2 * (1 - NdotL2) / NdotL2 + 1)) * 0.5f拆成 sqrt(a2 * (1 - NdotL2) / NdotL2 + 1) * 0.5f+0.5f;
即a+0.5,同理(1 + sqrt(a2 * (1 - NdotV2) / NdotV2 + 1)) * 0.5f为b+0.5
对应的是代码公式中的a-0.5,b-0.5
根据代码公式计算的结果为1/(a+b)
而根据G=G1(l)G1(v),结果是1/(ab+0.5a+0.5b+0.25)
结果根本不一致

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

注册时间
2007-6-11
积分
30012
发表于 2017-8-14 08:39:05 |显示全部楼层
如果有Unity客服建议去直接问开发,或者去Unity论坛。

使用道具 举报

Rank: 24Rank: 24Rank: 24Rank: 24Rank: 24Rank: 24

注册时间
2010-10-8
积分
18193
发表于 2017-8-17 07:44:09 |显示全部楼层
关注一下,有点坑爹的样子

使用道具 举报

Rank: 8Rank: 8

注册时间
2016-12-4
积分
129
发表于 2017-8-18 14:18:02 |显示全部楼层
kamui 发表于 2017-8-17 07:44
关注一下,有点坑爹的样子

哈哈,是我的问题。Unity这里实现GGX用的另外一个公式
https://hal.inria.fr/hal-00942452v1/document
Page 26 (21)

使用道具 举报

最近看过此主题的会员

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

‹‹
我的工具栏

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

GMT+8, 2017-12-15 04:54 , Processed in 1.080631 second(s), 12 queries .

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部