实时渲染 -- 体素化(Voxelization)

news2024/12/27 15:06:19

我们之前讨论的大部分问题都是关于面表示的。由于这些方法不需要显式地表示物体的内部空间,所以非常高效。

体建模方法表示的是实体而不是表面。使用体模型可以产生更丰富的仿真效果,如物体的运动学行为和半透明光照效果。

一、有限元模型

有限元模型是将实体模型刨分成多面体网格的一种通用分割方案。她广泛应用于工程仿真分析中,用于计算物体内部的力、热传导和压力传导、流体运动等。但是有限元模型很少应用于纯粹的绘制场合,因为与网格模型相比它在这方面并无优势。

将体内空间刨分成四面体或立方体等规则有限元网格对于建模和仿真而言还有另外的优点:

  • 进行随机空间访问的时间为常数
  • 可实现稳定的邻域检索

立方体刨分成规则网络,这是一种直观的表示,容易以此构建层次结构。这种表示称为体素模型。

二、体素

体素(voxel)是像素(pixel)、体积(volume)和元素(element)的组合词,相当于3D空间中的像素。我们的世界某种意义上也可以说是由类似体素的东西构成的,只不过构成物体的原子更小,所以理论上体素可以说是完美的建模技术。

过去

说到体素,有必要提一下它的起源。体素是一个古老的技术,当游戏步入3D时代的时候,有两种不同的建模技术在持续发展。一种是沿用至今的多边形(polygons)技术。而另一种就是体素,除了在游戏产业中有应用,也被用在医学,地质等领域。需要注意的是体素顾名思义重点在于体积的概念而不是它的形状。

游戏中最早关于体素技术的运用大概是高度图(height-map),如Comanche: Maximum Overkill。之后随着硬件的提升,使游戏可以使用更多的多边形,带来更加真实的体验,体素渐渐没落,大多数的软硬件也都只对多边形渲染提供优化。

现在

随着《我的世界》(Minecraft)的火爆把体素重新拉回了人们的视线,虽然游戏本身其实并没有使用体素技术而仍是多边形渲染。人们开始重新思考体素的应用,越来越复杂的多边形技术及难解决的问题也推动了这一倾向。

通过体素,可以对3D空间进行网格划分,并赋予每个网格特征。体素不一定得是方块,还可以是存储采样数据的体积点(volumetric points),存储包括材质、颜色、密度等。前文提到,当把体素缩小,也可以获得高级别的真实感,如游戏《Dreams》(可以参考他们的技术分享还有视频)。除了Dream,还有一些游戏展现了当把体素实现的物理和模拟加入游戏中带来的可能性,如《TearDown》.

几何实例化

在一些不需要精确表示的场景中常采用几何实例化来高效地表示许多相似的细节,例如,一个森林中可以用少量的不同树的模型和大量树的位置,参考坐标系来建模。森林中每一颗树之需要存储一个指向树模型的指针和一个坐标系而无需存储树的完整几何信息。这个在需要游戏引擎中均有应用比如Laya中的GPU Instance。

由较大尺度体素构成的场景可以利用类似的方案来呈现比体素分辨率更精细的细节,而不需要为每个体素显示地构建精细的几何。

光线追踪

在体素网格中进行光线追踪也是高效的,这是因为光线和网格表面的求交十分简单,而且在存储系统中网格结构具有很好的空间局部性。树形数据结构可对大片空区域实施高效编码。即使近距离观察,体素也不会呈现为块状。

三、粒子系统

液态或气态物体,如烟、云、火和水。常被建模为粒子系统。每个粒子都可以高效的表示为一个具有质量的点。粒子系统可能包含大量粒子,例如数千或数百万,他们扮演的角色类似于气体或液体中单个分子。不过仿真中所包含的粒子数远小于真实场景所包含的分子数(小多个数量级)。绘制时通常将每个粒子绘制成一个小的贴图板,以弥补粒子数目不足的问题。

贴图板交于场景中其他几何体时,就会露出贴图板的平面特性。软粒子是一种解决方案。软粒子在靠近场景中的几何体回变得更加透明。接近程度根据绘制时深度缓冲区保存的值决定。对于高密度且无明显可见结构的贴图板。如烟雾效果更佳。

四、雾

粒子和体素是无确定形状物体的离散表示形式。均质和半透明的物体可以采用连续的解析表示。一个典型的应用是大气透视效果的模拟,由于光穿越大气时存在小尺度的散射,使远处景物的色饱和度下降。一个更极端的例子是浓雾,他可能均匀分布于整个空间或者随高度不同在密度上有所变换。

真实的大气透视必然涉及以光的传输距离为参数的指数吸收过程,但是从画面效果考虑,常对吸收速率进行调控。一个例子是基于距离d,原始颜色c,雾的颜色f和密度参数k,计算最终颜色c'如下

c' = f + (c-f)\cdot e^{-dk}

同样的方法可以用于光在水下的散射和衰减。

局部雾气遵循与全局雾气相同的光衰减规律,但是其距离参数应取光线(沿视线方向)所穿过雾的长度,而不是从观察者到被观察景物的距离。这个距离可由光线和雾气的包围体求交获得。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

升级一下电脑,CPU换I5-14600K,主板换华硕B760M

刚给自己电脑升级了一下,CPU从 AMD R5 5600X 换成 Intel I5-14600K,主板换成了华硕的 TUF GAMING B760M-PLUS WIFI D4。 因为我现有的两根内存是DDR4的,所有我选了个支持DDR4内存的主板。 我发现用AMD处理器时将系统从Win10升级到Win11后变…

关于Linux系统中使用Kazam录制的视频在Win系统中无法播放的问题解决办法

今天在linux系统【ubuntu】中录制了一段视频,想要在win系统中进行剪辑,但是发现无法打开,使用的是Kazam录制的mp4格式视频。 Kazam录制安装与使用方式: 安装方式——linux终端输入: sudo apt-get install kazam使用…

04---webpack编写可维护的构建配置

01 构建配置抽离成npm包; 意义:通用性: 业务开发者无需关注构建配置 统一团队构建脚本可维护性:构建配置合理的拆分 质量:冒烟测试 单元测试 持续集成构建配置管理的可选方案:1 通过多个配置文件管理不同…

Android模拟器Android Emulator进行快照snapshot保存时问题

在用Android Emulator进行快照保存时出现问题,不能保存快照,并提示 current state is not support snapshot。 在网上查找了一圈,发现没有针对这个问题的方案,比较接近的方案都是eclipse年代的,说要进行enable snaps…

刷题之Leetcode27题(超级详细)

27. 移除元素 力扣题目链接(opens new window)https://leetcode.cn/problems/remove-element/ 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用…

可以写网易云的了!

你好,我是云桃桃。 一个希望帮助更多朋友快速入门 WEB 前端的程序媛。 1枚程序媛,大专生,2年时间从1800到月入过万,工作5年买房。 分享成长心得。 259篇原创内容-gzh 后台回复“前端工具”可获取开发工具,持续更新中…

苍穹外卖Day04套餐管理部分总结

写给像我一样完完全全的小白的。本人代码水平一塌糊涂,前几天就是机械地跟着视频敲代码。对于Day04的作业本来感觉代码抓瞎一点不会写,尽力去理解业务逻辑后发现好像也没那么难,整体代码可以仿照Day03新增菜品来进行实现! 一、功…

scratch寻找好朋友 2024年3月中国电子学会 图形化编程 scratch编程等级考试二级真题和答案解析

目录 scratch寻找好朋友 一、题目要求 1、准备工作 2、功能实现 二、案例分析 1、角色分析 2、背景分析 3、前期准备 三、解题思路 1、思路分析 2、详细过程 四、程序编写 五、考点分析 六、推荐资料 1、入门基础 2、蓝桥杯比赛 3、考级资料 4、视频课程 5、…

如何在Linux中安装软件

文章目录 一、Linux应用程序基础1.Linux软件安装包分类2.应用程序和系统命令的关系3.常见的软件包的封装类型 二、安装软件的方式1.RPM包管理工具2.yum安装3.编译 一、Linux应用程序基础 1.Linux软件安装包分类 Linux源码包: 实际上,源码包就是一大堆源…

Spring/SpringBoot/SpringCloud Mybatis 执行流程

在后续分析Mybatis 流程中代码的可能会用到IDEA debug 技巧: 条件断点 代码断点,右键 勾选弹窗 Condition : 写入表达式 回到上一步: Java动态代理实现 InvocationHandler接口: package com.lvyuanj.core.test;…

MAX7219驱动数码管学习记录(有源码)

一、7219datasheet阅读 1.引脚定义: 重点介绍5个引脚 1.DIN: 串行数据总线输入引脚,每个时钟的上升沿将数据移入至芯片内部的移位寄存器中 2.DIG0-DIG7: 共阴极管的GND连接的便是DIG0-7,该引脚起作用时,便输出低电平&#xff0c…

SSM学习——Spring JDBC

Spring JDBC 概念 Spring的JDBC模块负责数据库资源管理和错误处理,简化了开发人员对数据库的操作。 Spring JDBC通过配置数据源和JDBC模板来配置。 针对数据库操作,Spring框架提供了JdbcTemplate类,它是Spring框架数据抽象层的基础&#…

【学习】渗透测试有哪些重要性

随着信息技术的迅猛发展,网络安全问题日益凸显。渗透测试作为网络安全防御的重要手段之一,旨在模拟黑客攻击,发现并修复潜在的安全漏洞,提高网络系统的安全性。本文将介绍渗透测试的概念、重要性、实施步骤及实践案例,…

echarts快速入门

文章目录 一、echarts下载1.1、下载说明1.2、使用说明 二、绘制一个简单图表 一、echarts下载 echarts是百度研发团队开发的一款报表视图JS插件,功能十分强大,可在echart官网下载源码(一个echarts.min.js文件)进行使用。 1.1、…

Star GAN论文解析

论文地址:https://arxiv.org/pdf/1912.01865v1.pdf https://openaccess.thecvf.com/content_cvpr_2018/papers/Choi_StarGAN_Unified_Generative_CVPR_2018_paper.pdf 源码:stargan项目实战及源码解读-CSDN博客 1. 概述 在传统方法中&#x…

R语言技能 | 不同数据类型的转换

原文链接:R语言技能 | 不同数据类型的转换 本期教程 写在前面 今天是4月份的第一天,再过2天后再一次迎来清明小假期。木鸡大家是否正常放假呢? 我们在使用R语言做数据分析时,会一直对数据进行不同类型的转换,有时候…

揭秘视觉Transformer之谜,TokenTM新法,全面提升模型解释性能

引言:揭示视觉Transformer的解释挑战 在计算机视觉应用中,Transformer模型的流行度迅速上升,但对其内部机制的后置解释仍然是一个未探索的领域。视觉Transformers通过将图像区域表示为转换后的tokens,并通过注意力权重将它们整合起…

一篇文章带你掌握二叉树(附带二叉树基本操作完整代码演示,和两种思路)

【本长内容】 1. 掌握树的基本概念 2. 掌握二叉树概念及特性 3. 掌握二叉树的基本操作 4. 完成二叉树相关的面试题练习 1. 树形结构 1.1 概念 树是一种非线性的数据结构,它是由n(n>0)个有限结点组成一个具有层次关系的集合。把它叫做树是…

RK3568平台 Uart驱动框架

一.TTY子系统 在Linux kernel中,tty驱动不像于spi,iic等那么架构简单,它是一个庞大的系统,它的框架大体如下图一。我们作为普通的驱动开发移植人员,不会从零写tty驱动,一般都是厂家根据现有的tty驱动和自家…

SpringBoot整合MyBatis四种常用的分页方式

目录 方式1 一、准备工作 1. 创建表结构 2. 导入表数据 3. 导入pom.xml依赖 4. 配置application.yml文件 5. 创建公用的实体类 项目结构 2. 创建controller层 3. 创建service层 4. 创建mapper层 5. 创建xml文件 6. 使用postman进行测试,测试结果如下…