图形学笔记 - 5. 光线追踪2 - 加速结构

目录

使用AABB加速光线追踪

Uniform Spatial Partitions (Grids) 均匀空间划分

空间划分

KD树预处理

KD-Tree数据结构

遍历kd树

对象划分 & Bounding Volume Hierarchy 层次包围盒 BVH

BVH遍历

空间划分与物体划分呢


GTC news: DLSS、RTXGI 实时光线追踪

使用AABB加速光线追踪

  • Uniform grids 均匀网格

  • Spatial partitions 空间划分

Uniform Spatial Partitions (Grids) 均匀空间划分

预处理-构建加速网格

1.找出边界盒 2.创建网格 3.将每个对象存储在重叠的单元格中

Ray-Scene相交 以射线遍历顺序步进网格 ray traversal order 对于每个网格单元 -使用存储在该单元格中的所有对象测试交叉 光栅化一条线

Grid Resolution网格解析度,栅格分辨率 单个单元:没有加速

太多单元:由于不必要的网格遍历而导致的效率低下

Heuristic启发式 #cell = C * #objs C = 27 in 3D

表现好的情况: 网格在大小和空间均匀分布的大型对象集合上工作得很好

“Teapot in a stadium”问题

空间划分

Oct-Tree:八叉树 KD-Tree: 每次分一块

KD树预处理

KD-Tree数据结构

中间节点存储

  • 划分轴:x-, y-, or z-

  • 划分位置:分割平面沿轴的坐标

  • children:指向子节点的指针

  • 内部节点中不存储任何对象 叶节点存储

  • 对象列表

遍历kd树

内部节点:分裂

缺点: KDtree 物体与包围盒相交难以判断 一个物体可能存在多个节点

对象划分 & Bounding Volume Hierarchy 层次包围盒 BVH

分成两堆三角形

  • 寻找边界盒

  • 递归地将一组对象分成两个子集

  • 重新计算子集的边界框

  • 必要时停止

  • 在每个叶节点中存储对象 确保一个物体只可能出现在一个格子

如何细分节点?

  • 选择要分割的维度

  • 启发#1:始终选择节点中最长的轴

  • 启发#2:在中值对象的位置分割节点 终止条件

  • 启发式:当节点包含少量元素时停止(如5个) BVHs的数据结构 内部(internal)节点存储

  • 包围盒

  • children指向子节点的指针 叶子节点

  • 包围盒

  • 物体的列表 节点表示场景中原语的子集

  • 子树中的所有对象

BVH遍历


Intersect(Ray ray, BVH node) {if(ray misses node.bbox) return;if(node is a leaf node){test intersection with all objs;return closest intersection;}
​hit1 = Intersect(ray, node.child1);hit2 = Intersect(ray, node.child2);
​return the closer of hit1, hit2;
}
空间划分与物体划分

空间划分

  • 将空间划分为不重叠的区域

  • 一个对象可以包含在多个区域中 物体划分

  • 将一组对象划分为不相交的子集

  • 每个集合的边界框可能在空间上重叠

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/493862.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机毕业设计原创定制(免费送源码):NodeJS+MVVM+MySQL 樱花在线视频网站

目 录 摘要 1 1 绪论 1 1.1研究背景 1 1.2系统设计思想 1 1.3B/S体系工作原理 1 1.4node.js主要功能 2 1.5论文结构与章节安排 3 2 樱花在线视频网站分析 4 2.1 可行性分析 4 2.2 系统流程分析 4 2.2.1数据增加流程 5 2.3.2数据修改流程 5 2.3.3数据删除流程 5 …

SpringBoot 启动类 SpringApplication 二 run方法

配置 在Program arguments配置2个参数:--server.port8081 --spring.profiles.activedev。 run方法 run方法执行结束代表SpringBoot启动完成,即完成加载bean。 // ConfigurableApplicationContext 是IOC容器 public ConfigurableApplicationContext ru…

如何调大unity软件的字体

一、解决的问题: unity软件的字体太小,怎么调大点?二、解决方法: 1.操作步骤: 打开Unity编辑器> Edit>preferences> UI Scaling>Use custom scaling value(取消勾选“使用默认桌面设置”&…

SYD881X RTC定时器事件在调用timeAppClockSet后会出现比较大的延迟

RTC定时器事件在调用timeAppClockSet后会出现比较大的延迟 这里RTC做了两个定时器一个是12秒,一个是185秒: #define RTCEVT_NUM ((uint8_t) 0x02)//当前定时器事件数#define RTCEVT_12S ((uint32_t) 0x0000002)//定时器1s事件 /*整分钟定时器事件,因为其余的…

内置函数.

日期函数 current_date/time() 日期/时间 获得年月日: 获得时分秒: 获得时间戳:日期时间 now()函数 体会date(datetime)的用法:只显示日期 在日期的基础上加日期:按照日历自动计算 关键字为 intervalinterval 后的数值…

PHP 微信棋牌开发全解析:高级教程

PHP - 多维数组详解 多维数组是 PHP 中一种强大的数据结构,指的是一个数组的元素中可以包含一个或多个数组。它常用于存储复杂的嵌套数据,如表格数据或多层次关系的数据结构。 注释: 数组的维度表示您需要指定索引的层级数,以访问…

【Java】递归算法

递归的本质: 方法调用自身。 案例1. 斐波那契数列 1 1 2 3 5 8 13 21 .. f(n)f(n-1)f(n-2) 方法的返回值: 只要涉及到加减乘除,就是int,其他的就是void。 案例2. 青蛙跳台 青蛙一次可以跳一级台阶,也可以跳两级台阶&#xff…

JVM简介—1.Java内存区域

大纲 1.运行时数据区的介绍 2.运行时数据区各区域的作用 3.各个版本内存区域的变化 4.直接内存的使用和作用 5.站在线程的角度看Java内存区域 6.深入分析堆和栈的区别 7.方法的出入栈和栈上分配、逃逸分析及TLAB 8.虚拟机中的对象创建步骤 9.对象的内存布局 10.对象的…

大腾智能CAD:国产云原生三维设计新选择

在快速发展的工业设计领域,CAD软件已成为不可或缺的核心工具。它通过强大的建模、分析、优化等功能,不仅显著提升了设计效率与精度,还促进了设计思维的创新与拓展,为产品从概念构想到实体制造的全过程提供了强有力的技术支持。然而…

设计模式の享元模板代理模式

文章目录 前言一、享元模式二、模板方法模式三、代理模式3.1、静态代理3.2、JDK动态代理3.3、Cglib动态代理3.4、小结 前言 本篇是关于设计模式中享元模式、模板模式、以及代理模式的学习笔记。 一、享元模式 享元模式是一种结构型设计模式,目的是为了相似对象的复用…

Linux网络功能 - 服务和客户端程序CS架构和简单web服务示例

By: fulinux E-mail: fulinux@sina.com Blog: https://blog.csdn.net/fulinus 喜欢的盆友欢迎点赞和订阅! 你的喜欢就是我写作的动力! 目录 概述准备工作扫描服务端有那些开放端口创建客户端-服务器设置启动服务器和客户端进程双向发送数据保持服务器进程处于活动状态设置最小…

用人话讲计算机:Python篇!(十五)迭代器、生成器、装饰器

一、迭代器 (1)定义 标准解释:迭代器是 Python 中实现了迭代协议的对象,即提供__iter__()和 __next__()方法,任何实现了这两个方法的对象都可以被称为迭代器。 所谓__iter__(),即返回迭代器自身 所谓__…

小程序快速实现大模型聊天机器人

需求分析: 基于大模型,打造一个聊天机器人;使用开放API快速搭建,例如:讯飞星火;先实现UI展示,在接入API。 最终实现效果如下: 一.聊天机器人UI部分 1. 创建微信小程序&#xff0c…

【Android】unzip aar删除冲突classes再zip

# 解压JAR文件 jar xf your-library.jar # 解压AAR文件(AAR实际上是ZIP格式) unzip your-library.aar # 删除不需要的类 rm -rf path/to/com/example/unwanted/ # 对于JAR打包 jar cf your-library-modified.jar -C path/to/unzipped/ . # 对于AAR打包…

使用C语言编写UDP循环接收并打印消息的程序

使用C语言编写UDP循环接收并打印消息的程序 前提条件程序概述伪代码C语言实现编译和运行C改进之自由设定端口注意事项在本文中,我们将展示如何使用C语言编写一个简单的UDP服务器程序,该程序将循环接收来自指定端口的UDP消息,并将接收到的消息打印到控制台。我们将使用POSIX套…

你的第一个博客-第一弹

使用 Flask 开发博客 Flask 是一个轻量级的 Web 框架,适合小型应用和学习项目。我们将通过 Flask 开发一个简单的博客系统,支持用户注册、登录、发布文章等功能。 步骤: 安装 Flask 和其他必要库: 在开发博客之前,首…

Vue(二)

1.Vue生命周期 Vue生命周期就是一个Vue实例从 创建 到 销毁 的整个过程。生命周期四个阶段: 创建阶段:创建响应式数据。 挂载阶段:渲染模板。 更新阶段:修改数据,更新视图。 销毁阶段:销毁Vue实例。 …

macOS 配置 vscode 命令行启动

打开 vscode 使用 cmd shift p 组合快捷键,输入 install 点击 Install ‘code’ command in PATH Ref https://code.visualstudio.com/docs/setup/mac

python coding(二) Pandas 、PIL、cv2

Pandas 一个分析结构化数据的工具集。Pandas 以 NumPy 为基础(实现数据存储和运算),提供了专门用于数据分析的类型、方法和函数,对数据分析和数据挖掘提供了很好的支持;同时 pandas 还可以跟数据可视化工具 matplotli…

期权VIX指数构建与择时应用

芝加哥期权交易 所CBOE的波动率指数VIX 是反映 S&P 500 指数未来 30 天预测期波动率的指标,由于预期波动率多用于表征市场情绪,因此 VIX 也被称为“ 恐慌指数”。 VIX指数计算 VIX 反映了市场情绪和投资者的风险偏好, 对于欧美市场而言…