当前位置: 首页 > news >正文

计算机图形学入门26:高级光线传播

1.有偏与无偏

        在做光线追踪很多方法都是用蒙特卡洛积分去估计,蒙特卡洛积分有些是无偏的(Unbiased),所谓无偏估计就是无论使用多少个样品,所估计的期望值都是正确的。那么,所有其他情况都是有偏的(Biased),就是估计的期望值与最后的结果不一样。在有偏估计里还有一种特性情况,如果样品足够多,那么得到的期望值会收敛到正确值。

2.无偏光线传播方法

2.1 双向路径跟踪(BDPT)

        回顾一下,一条路径连接相机和光源就是路径追踪,而双向路径跟踪(Bidirectional path tracing (BDPT))就是一个拓展,从光源和相机分别发射一条射线,称为半路径,然后把半路径的端点连接起来。如下图所示。

        双向路径跟踪计算非常缓慢,并且难以实现,但是适用于光线传输复杂的情况。如下图所示,左边图是单向路径追踪,而右图是双向路径追踪,都使用了每个像素32个样本,可以发现双向路径追踪效果好很多。为什么呢?

        如果在光线追踪中,如果想找一条带有大量能量的路径,对于这种场景来说不太容易。这种场景中光源往上打灯,整个场景其实是由间接光照亮的,在单向路径追踪中光线从相机出发第一个反射点是漫反射,可能很难达到光源(能量集中的区域)。

2.2 Metropolis light transport (MLT)

        MLT的思想是用统计学上的一个采样的工具,这种工具可以帮助采样,这种工具名称叫做马尔可夫链(Markov Chain)。马尔可夫链可以根据当前的样本,生成下一个样本。在样本周围生成新样本来估计函数的值。好处是给定足够的时间,这个马尔可夫链的蒙特卡洛方法(MCMC)可以生成一系列以任意函数为形状的PDF生成的样本,使得这些样本的分布就是和这些被积的函数形状一致。

        既然有个方法可以变成更多的样本来,那么反映到产生路径这个事情上,就是有一个路径的情况可以产生周围更多相似的路径。也就是说是个局部的方法,给定任意一条路径可以生成周围相似的路径。如下图所示,通过一条原本的路径(蓝色),生成一条相似新的路径(橙色)。

        优点:MLT方法特别适合复杂或者困难的光路的传播,如下图是与BDPT的对比图。为什么说以下场景比较复杂呢,可以发现左图的光线是从小门传播进来的,其余都是间接照亮。而右图是游泳池,光线聚焦到水底形成的特殊效果。

        缺点:收敛速度难以估计,并且不能保证每个像素的收敛速度相等。所以,通常会产生“脏”的结果,如下图所示。通常不用于渲染动画。

3.有偏光线传播方法

3.1 光子映射(Photon mapping)

        光子映射是一个有偏的估计方法,特别适合渲染产生的Caustics,所谓Caustics就是由于光线聚焦产生非常强烈的图案,如下图所示。

        还适合以Specular-Diffuse-Specular(SDS)这样的光线路径。

        光子映射主要分为两步做法,举例一种实现为例。(光子映射可以有很多种方法)

        阶段1:光子追踪(Photon tracing)

        从光源发射光子(光线),在周围反射,然后在漫反射表面上记录光子。

        阶段二:光子收集(Photon collection)

        从相机中发射路径,将它们四处弹射,直到它们击中漫反射表面。

        计算:局部密度估计

        思路是光子越多的地方越亮。对于每个着色点找到最近的N个光子,取它们覆盖的表面积,光子密度就等于光子数量N除以所覆盖的表面积。如下图所示。

        如果取得的光子数量N很少,那么得到很有噪声的图。如果得到N的数量太多,就会得到模糊的图。因为光子映射是个有偏的方法,在做密度估计的时候,想算的密度应该是一个点dN除以一个微小面积dA,得到里面有多少个光子。但是,这里是给定一定光子数N算覆盖的面积A。正确情况下,这俩不是一回事,如下。只有dA无限小才是正确的估计。

        那么什么情况下dA会无限小,就是当发射的光子数量非常多,无限多的时候。那么找附近N个光子数一定是覆盖更小的区域。区域更小,这个区域就更接近dA。所以,当有足够多的光子的时候,就可以得到一个正确的结果。虽然是有偏的,但是是一致(Consistent)的。一致的意思是当样品足够多的时候,结果会收敛到正确的值。

3.2 顶点连接和合并(VCM)

        顶点连接和合并(Vertex connection and merging (VCM))BDPT光子映射结合的方法。关键理念是如果BDPT中的子路径(sub-paths)的端点不能连接但可以合并,那么我们就不要浪费它们了。使用光子映射来处理附近“光子”的合并。如下图所示。

4.实时辐射度(VPL/许多光方法)        

        实时辐射度(Instant Radiosity)也被称为多光方法,关键理念是被照亮的表面可以被视为光源。通过发射光的子路径,并假设每个子路径的终点是一个虚拟点光(VPL),使用这些VPL发射光线去渲染场景。如下图所示。

        优点:速度快,通常在漫反射场景中效果很好,如下左图。

        缺点:当VPL靠近着色点时,尖峰会出现,如下右图。不能处理有光泽的材料。

相关文章:

计算机图形学入门26:高级光线传播

1.有偏与无偏 在做光线追踪很多方法都是用蒙特卡洛积分去估计,蒙特卡洛积分有些是无偏的(Unbiased),所谓无偏估计就是无论使用多少个样品,所估计的期望值都是正确的。那么,所有其他情况都是有偏的(Biased),就是估计的期…...

STM32蓝牙HID实战:打造低功耗、高性能的客制化键盘

一、项目概述 本项目旨在使用STM32单片机打造一款功能强大的蓝牙客制化键盘,它拥有以下特点: 九键布局,小巧便携: 满足日常使用需求,方便携带。全键可编程: 所有按键和旋钮均可通过电脑软件自定义快捷键,实现个性化功…...

C++ STL容器:序列式容器-队queue,deque

摘要: CC STL(Standard Template Library,标准模板库)在C编程中的重要性不容忽视,STL提供了一系列容器、迭代器、算法和函数对象,这些组件极大地提高了C程序的开发效率和代码质量。 STL 容器 分为 2 大类 …...

简谈设计模式之单例模式

上一篇博客已经介绍了设计模式及其设计原则, 在这篇博客中笔者会介绍一下单例模式, 也是最简单的一种设计模式 单例模式 单例模式属于创建型模式. 它涉及到一个单一的类, 该类负责创建自己的对象, 同时确保只有单个对象被创建, 这个类提供了一种访问其唯一对象的方式, 可以直…...

在Spring Boot中实现多线程任务调度

在Spring Boot中实现多线程任务调度 大家好,我是微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 1. Spring Boot中的任务调度 Spring Boot通过集成Spring框架的Task Execution和Scheduling支持,提供…...

dify/api/models/account.py文件中的数据表

源码位置:dify\api\models\account.py accounts 表结构 字段英文名数据类型字段中文名字备注idStringUUIDIDnameString名称emailString邮箱passwordString密码password_saltString密码盐avatarString头像interface_languageString界面语言interface_themeString界…...

SQLAlchemy迁移数据库

SQLAlchemy迁移数据库 目录 SQLAlchemy迁移数据库安装Alembic配置Alembic编辑 alembic.ini编辑env.py生成迁移文件建表语句示例修改迁移文件命名格式 安装Alembic pip install alembic配置Alembic 执行初始化后会创建一个 alembic 目录,包含Alembic的配置文件 ale…...

Django文档简化版——Django快速入门——创建一个基本的投票应用程序

Django快速入门——创建一个基本的投票应用程序 准备工作1、创建虚拟环境2、安装django 1、请求和响应(1)创建项目(2)用于开发的简易服务器(3)创建投票应用(4)编写第一个视图1、编写…...

安全防御第三天(笔记持续更新)

1.接口类型以及作用 接口 --- 物理接口 三层口 --- 可以配置IP地址的接口 二层口 普通二层口 接口对 --- “透明网线” --- 可以将一个或者两个接口配置成为接口对,则 数据从一个接口进,将不需要查看MAC地址表,直接从另一个接口出&#xff1b…...

【12321骚扰电话举报受理中心-短信验证安全分析报告】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…...

杂项——循迹模块调节方法

1-4 路灰度传感器的调节方法: 调节时探头应对着颜色较浅的上方(如果是黑白线赛道则应该将探头 对着白色上方调),轻轻的将全部可调电阻顺时针拧到底,再逆时针 慢慢回旋,直到对应探头的信号指示灯亮起后&…...

揭秘:源代码防泄密的终极秘籍

在当今信息科技高度发达的时代,源代码作为企业最核心的资产之一,其安全性不言而喻。源代码的泄露可能导致企业技术机密被竞争对手获取,进而威胁到企业的市场竞争力和长远发展。因此,源代码防泄密成为了企业信息安全工作的重中之重…...

avcodec_send_packet函数阻塞

用ffmpeg4.1.4开发一个播放器,解码过程如下,在每个函数前设置标志,测试发现程序阻塞在avcodec_send_packet函数。 while(true){av_read_frameavcodec_send_packetavcodec_receive_frameav_packet_unref } 解释如下: avcodec_se…...

一个parquet-go例子

一个parquet-go例子 使用go读写parquet,使用到了框架github.com/xitongsys/parquet-go 代码: package mainimport ("log""time""github.com/xitongsys/parquet-go-source/local""github.com/xitongsys/parquet-go/parquet&qu…...

扩散模型笔记

长参数“T”决定了生成全噪声图像所需的步长。在本文中,该参数被设置为1000,这可能显得很大。我们真的需要为数据集中的每个原始图像创建1000个噪声图像吗?马尔可夫链方面被证明有助于解决这个问题。由于我们只需要上一步的图像来预测下一步&#xff0c…...

上海-LM科技(面经)

上海-LM科技 hr电话面 个人简介 个人信息的询问 是否知道芋道框架 技术面 算法题 14. 最长公共前缀(写出来即可) 聊一下Docker Docker核心概念总结Docker实战 聊一下AOP Spring AOP详解 聊一下JWT JWT 基础概念详解JWT 身份认证优缺点分析 Spring…...

用 Echarts 画折线图

https://andi.cn/page/621503.html...

C++的map / multimap容器

一、介绍 在C的map / multimap容器中,所有的元素均是pair类型(有关pair类型可以参考我之前写的 《C的set / multiset容器》的3.2中有介绍到)。 每对pair的第一个元素被称为关键字key,第二个元素被称为值value。因此,ma…...

双向链表 -- 详细理解和实现

欢迎光顾我的homepage 前言 双向链表是一种带头双向循环的链表。在双向链表中,首先存在着一个头结点;其次每个节点有指向下一个节点的指针next 和指向上一个节点的指针prev &#xff1b…...

WebGIS面试题

文章目录 1. 前端1.1. 选择器的优先级1.2. CSS 中它的布局有哪些?1.3. CSS3 的新特性1.4. CSS 的两种盒子模型1.5. CSS 的伪元素选择器和伪类选择器有哪些?1.6. ES6 的新特性1.7. 谈谈你对 promise 的理解1.8. 简单说一下原型链1.9. 简单说一下深浅拷贝1…...

代码随想录算法训练营:21/60

非科班学习算法day21 | LeetCode669:修剪二叉搜索树 ,Leetcode108:将有序数组转换为二叉搜索树 ,Leetcode538:把二叉搜索树转换为累加树 介绍 包含LC的两道题目,还有相应概念的补充。 相关图解和更多版本: 代码随想录 (progra…...

数据结构——二叉树之c语言实现堆与堆排序

目录 前言: 1.二叉树的概念及结构 1.1 特殊的二叉树 1.2 二叉树的存储结构 1.顺序存储 2.链式存储 2. 二叉树的顺序结构及实现 2.1 堆的概念 ​编辑 2.2 堆的创建 3.堆的实现 3.1 堆的初始化和销毁 初始化: 销毁: 插入&…...

#数据结构 链表

单向链表 1. 概念 单向链表 单向循环链表 双向链表 双向循环链表 解决:长度固定的问题,插入和删除麻烦的问题 1、逻辑结构: 线性结构 2、存储结构: 链式存储 链表就是将 结点 用链串起来的线性表,链就是 结点 中的…...

单片机软件架构连载(4)-结构体

枚举、指针、结构体,我愿称为C语言"三板斧"。 用人话来讲,几乎所有c语言高阶编程,都离不开这这3个知识点的应用。 今天站在实际产品常用的角度,给大家讲一下结构体。 1.结构体概念 结构体可以用来构建更复杂的数据结…...

工厂方法模式在金融业务中的应用及其框架实现

引言 工厂方法模式(Factory Method Pattern)是一种创建型设计模式,它定义了一个创建对象的接口,但由子类决定实例化哪一个类。工厂方法模式使得类的实例化延迟到子类。在金融业务中,工厂方法模式可以用于创建不同类型…...

python库(6):Pygments库

1 Pygments介绍 在软件开发和文档编写中,代码的可读性是至关重要的一环。无论是在博客文章、技术文档还是教程中,通过代码高亮可以使程序代码更加清晰和易于理解。而在Python世界中,Pygments库就是这样一个强大的工具,它能够将各…...

金斗云 HKMP智慧商业软件 任意用户创建漏洞复现

0x01 产品简介 金斗云智慧商业软件是一款功能强大、易于使用的智慧管理系统,通过智能化的管理工具,帮助企业实现高效经营、优化流程、降低成本,并提升客户体验。无论是珠宝门店、4S店还是其他零售、服务行业,金斗云都能提供量身定制的解决方案,助力企业实现数字化转型和智…...

前端JS特效第24集:jquery css3实现瀑布流照片墙特效

jquery css3实现瀑布流照片墙特效&#xff0c;先来看看效果&#xff1a; 部分核心的代码如下(全部代码在文章末尾)&#xff1a; <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8" /> <title>jquerycss3实现瀑…...

区块链论文速读A会-ISSTA 2023(2/2)如何检测DeFi协议中的价格操纵漏洞

Conference&#xff1a;ACM SIGSOFT International Symposium on Software Testing and Analysis (ISSTA) CCF level&#xff1a;CCF A Categories&#xff1a;Software Engineering/System Software/Programming Languages Year&#xff1a;2023 第1~5篇区块链文章 请点击此…...

权力之望怎么下载客户端 权力之望一键下载

《权力之望》是一款由NX3 Games开发、Smilegate发行的多人在线动作MMORPG游戏。这款游戏最大的特点是高度的自由度和丰富的角色定制选项。我们在游戏中不仅可以自由更换武器&#xff0c;而且游戏还提供了54种能力和60多种职业选择&#xff0c;让我们可以根据自己的游戏风格和喜…...