首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >基于重要性抽样的BRDF集成

基于重要性抽样的BRDF集成
EN

Computer Graphics用户
提问于 2021-11-01 18:07:20
回答 1查看 309关注 0票数 1

我读了一些关于BRDF集成的文章,不管有没有重要的抽样,我都不理解公式中的一件事。

  • 如果我们用均匀的样本方向分布积分半球上的BRDF,则在所有生成的方向上对BRDF进行求值,并将所有值和,除以n(样本数),然后将结果乘以2π,因为我们需要将结果乘以积分区域,而2π是半球的立体角。
  • 如果我们用重要抽样法对半球上的BRDF进行积分,就可以由倒置的CDF (累积分布函数)生成样本方向,用相应样本的概率分布函数( PDF )除以每一个样本,然后用和值除以N,即第2位π乘法。

我证实了它的数值积分库克-托兰斯BRDF和简单兰伯余弦BRDF,但我不明白为什么2π乘法消失时,我们使用重要性抽样时,从数学角度?

下面是用余弦函数积分的例子。在重要意义上,采样余弦函数也被用作自己的PDF。另外,我对这两种情况的集成代码正确吗?

代码语言:javascript
运行
AI代码解释
复制
float f(Vec3f sampleDir) { return sampleDir.z; }
float pdf(Vec3f sampleDir) { return sampleDir.z; } // cosine function is also its PDF

void uniformIntegrationCos()
{
    double sum = 0.0;
    const int N = 1000;
    for (int i = 0; i < N; ++i)
    {
        Vec3f sampleDir = randomHemisphere(i, N); // fibonacci hemisphere spiral

        float value = f(sampleDir);
        float weight = sampleDir.z; // NdotL == pdf(sample)
        sum += value * weight / PI / N; // divide by PI to normalize cosine-weighted PDF

    }
    const float HEMISPHERE_SOLID_ANGLE = 2.f * PI; // integration area
    sum *= HEMISPHERE_SOLID_ANGLE;

    std::cout << "Sum = " << sum << std::endl;
}

void importanceIntegrationCos()
{
    double sum = 0.0;
    const int N = 1000;
    for (int i = 0; i < N; ++i)
    {
        // generate sample direction using inversed CDF of cosine BRDF
        Vec2f r = randomHammersley(i, N);
        float phi = 2.f * PI * r.x;
        float sinTheta = sqrt(r.y);
        float cosTheta = sqrtf(1.f - sinTheta * sinTheta);

        Vec3f sampleDir;
        sampleDir.x = cos(phi) * sinTheta;
        sampleDir.y = sin(phi) * sinTheta;
        sampleDir.z = cosTheta;

        float value = f(sampleDir);
        sum += value / N; // BRDF is divided by it's PDF, so no NdotL weight and no PDF normalization by dividing by PI
    }

    //const float HEMISPHERE_SOLID_ANGLE = 2.f * PI; // integration area
    //sum *= HEMISPHERE_SOLID_ANGLE; // Not needed, why ???

    std::cout << "Sum = " << sum << std::endl;
}

void main()
{
    uniformIntegrationCos();
    importanceIntegrationCos();
}
EN

回答 1

Computer Graphics用户

回答已采纳

发布于 2021-11-02 10:36:36

想一想:当在半球上均匀地整合时,你就好像是重要的--用一个恒定的1/2π的pdf进行抽样。

那么,2π在结尾处的乘法可以看作是pdf的除法,从和中扣除,因为它是常数。

常量pdf是1/2π (相对于其他一些数字),因为它需要标准化才能在半球上整合到1,这是因为半球的面积是2π

从我所看到的情况来看,您的代码看起来是合理的,但我将定义函数pdf,以包含余弦pdf的1/π归一化因子:

代码语言:javascript
运行
AI代码解释
复制
float cosinePDF(Vec3f sampleDir) { return sampleDir.z / PI; }
票数 2
EN
页面原文内容由Computer Graphics提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://computergraphics.stackexchange.com/questions/12309

复制
相关文章
在Android上使用TarsosDSP探测声音频率
在Android上使用TarsosDSP探测声音频率 TarsosDSP是一个用于音频处理的Java库,这个库包含多个声音频率探测算法,同样包含Goertzel DTMF算法、时间拉伸算法、滤波器等等。 这篇文章通过一个简单的例子在Android上使用TarsosDSP来探测声音的频率。 首先新建一个Android项目,并且在布局上安置一个TextView来显示音高信息。 在开始项目前,需要先申请录音权限。 现在,新建一个AudioDispatcher对象,这个对象采用“默认麦克风”作为信息来源: Audi
mwangblog
2018/07/04
2.3K0
Macbook OBS 录制系统声音
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/140636.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/01
1.2K0
mac如何同时录制系统和麦克风声音或只录制系统声音
推荐直接appstore下载record it,然后打开软件根据软件提示安装blackhole插件。 之后就可以关掉该软件了,不用升级会员,以后我们录屏可以不再打开该软件了。 到录屏的时候先调整好扬声器或耳机的音量大小,因为之后是不能调的。
全栈程序员站长
2022/08/24
3.7K0
mac如何同时录制系统和麦克风声音或只录制系统声音
用Python播放和录制声音
Python语言已经无所不能了,今天就来分享一下,如何使用Python来录制和播放音频文件。
TalkPython
2019/05/24
7.2K0
python-声音录制和处理
用sounddevice包播放音乐直接调用play函数来播放声音,需要传入需要播放声音的波形,和采样率。
用户9925864
2022/07/27
1.1K0
python-声音录制和处理
MacBook 屏幕录制 soundflower 只录内屏声音 无外界声音
(博客诈尸,感觉要弃了,到时候开github主页) (搜到的一些soundflower教程都好旧, 自己写一个)
全栈程序员站长
2022/08/15
2.9K0
MacBook 屏幕录制 soundflower 只录内屏声音 无外界声音
iOS ARKit录制视频(AVAssetWriter & 有声音)
####思路 1.开启CADisplayLink 定时器来录制视频 CADisplayLink 刷新频率比- (void)session:(ARSession \*)session didUpdateFrame:(ARFrame \*)frame方法要快 而且更加符合需求 2.在录制视频的第一帧的时候开始录制音频 ####注意 在Info.plist文件里加入下面2个key NSMicrophoneUsageDescription NSPhotoLibraryAddUsageDescript
2018/05/04
2.5K5
iOS ARKit录制视频(AVAssetWriter & 有声音)
在 Ubuntu 上换用 OSS4 声音系统
自从上次升级了内核之后就没用过这个鸟系统,主要是linux下的qq太但疼了,不能输入中文,而我又不想用那个鸟webqq。于是也就没怎么折腾。直到这几天装了个wineqq。输入的问题解决了,但是却发现没有声音了。从网上搜索了下也没找到问题的关键。后来才发现升级内核的时候吧alsa的声卡驱动搞没了,而现在的驱动是oss的。就是上图看到的那样。
obaby
2023/02/24
6730
OFC上的腾讯声音
"鹅厂网事"由深圳市腾讯计算机系统有限公司技术工程事业群网络平台部运营,我们希望与业界各位志同道合的伙伴交流切磋最新的网络、服务器行业动态信息,同时分享腾讯在网络与服务器领域,规划、运营、研发、服务等层面的实战干货,期待与您的共同成长。 网络平台部以构建敏捷、弹性、低成本的业界领先海量互联网云计算服务平台,为支撑腾讯公司业务持续发展,为业务建立竞争优势、构建行业健康生态而持续贡献价值! The Optical Fiber Communication Conference and Exhibition(OFC
鹅厂网事
2018/04/27
1.3K0
Android多媒体录制--MediaRecorder视频录制
Android使用MediaRecorder类进行视频的录制。 需要注意,使用MediaRecorder 录音录像 的设置代码步骤一定要按照API指定的顺序来设置,否则报错 步骤为: 1、设置视频源,音频源,即输入源 2、设置输出格式 3、设置音视频的编码格式 一、首先看布局文件,这里有一个SurfaceView,这是一个绘制容器,可以直接从内存或者DMA等硬件接口取得图像数据, <LinearLayout xmlns:android="http://schemas.android.com/apk/res/
听着music睡
2018/05/18
2.8K0
AspectJ在android上的开发
Android上运用AOP的思想开发,可以快速的帮助我们简化在横向开发中的重复性工作,简单的说就是把涉及到众多模块的某一类问题进行统一管理比如:性能检测、日志打印手机等。 AspectJ实际上是对AOP编程思想的一个实践,当然,除了AspectJ以外,还有很多其它的AOP实现,例如ASMDex、javassist等,但目前最好、最方便的,依然是AspectJ。
包子388321
2020/06/16
1.4K0
如何在mac上录屏(并且录制到屏幕内部声音)完美解决方案
一直想找一款在mac录屏的软件,直到今天才有了完美的解决方案,总所周知,mac上有自带的录屏软件(quicktime player),这款软件简单,但是因为其不能录制屏幕内部的声音而不被新手使用。而其他录屏软件大部分需要付款,大部分开源的也不能录制屏幕内部的声音。
全栈程序员站长
2022/07/01
5.8K0
如何在mac上录屏(并且录制到屏幕内部声音)完美解决方案
OpenCV 在 Android 上的应用
在 Android Studio 中创建一个 Library,将官网下载的 OpenCV 导入后,就可以直接调用 OpenCV 中 Java 类的方法。
fengzhizi715
2020/05/04
2.2K0
eBPF在android上的使用
eBPF是extended BPF的缩写,而BPF是Berkeley Packet Filter的缩写。对linux网络比较熟悉的伙伴对BPF应该比较了解,它通过特定的语法规则使用基于寄存器的虚拟机来描述包过滤的行为。比较常用的功能是通过过滤来统计流量,tcpdump工具就是基于BPF实现的。而eBPF对它进行了扩展来实现更多的功能。
刘盼
2021/02/12
4.5K0
eBPF在android上的使用
视频 | OFC上的腾讯声音
The Optical Fiber Communication Conference and Exhibition(OFC)是全球最大的光通信和网络专业会议和展览会,是光通信学术界和产业界公认的最高水平,最具规模的盛会,代表了全球光通信学术研究和产业发展的风向标。 OFC 2018于3月11日至15日在加利福尼亚州圣地亚哥举行,展示了该领域的最新创新成果,来自65个国家的超过15,500名与会者,700多家参展商和超过850次同行评议的技术会议。 腾讯受邀作OFC数据中心峰会(Data Center Sum
腾讯技术工程官方号
2018/04/23
9570
mac使用obs进行斗鱼直播无法录制内置声音
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/144974.html原文链接:https://javaforall.cn
全栈程序员站长
2022/08/26
8460
mac使用obs进行斗鱼直播无法录制内置声音
教你如何解决双声道文件在Android设备上播放声音异常问题
最近收到用户反馈直播录制文件在Android手机上播放声音异常,几乎听不到声音,只有滋滋的电流声,但是在ios、pc端播放却是正常的,是Android手机的问题还是视频本身的问题呢?我们来一探究竟~~
何耀昌-pcyhe
2020/12/06
5.5K0
教你如何解决双声道文件在Android设备上播放声音异常问题
Mac用QuickTime录屏+soundflower录制屏内外声音
mac自带的quickTime录屏没有声音,可以安装soundflower录制屏内外声音。
全栈程序员站长
2022/09/05
1.5K0
Mac用QuickTime录屏+soundflower录制屏内外声音
Python+tkinter+PyAudio录制电脑扬声器声音
安装扩展库PyAudio,编写程序,录制电脑扬声器的声音,保存为wav波形音乐文件。
Python小屋屋主
2023/03/08
1.2K0
Python+tkinter+PyAudio录制电脑扬声器声音
Android Amr的录制与播放
Amr录制并获取声音大小 定义对象 private MediaRecorder mMediaRecorder; Handler handler = new Handler(); Runnable runnable = new Runnable() { @Override public void run() { //要做的事情 if (mMediaRecorder == null) return; double ratio = (double)
码客说
2019/10/22
2K0

相似问题

根据时间戳删除firestore中的项目

138

按带时间戳的数组删除对象

10

如何从UTC日期时间戳中删除时间戳

13

Python:从PriorityQueue中清除项目

11

如何从两个带时间戳的表中删除用户

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文