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

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

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

一、有限元模型

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

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

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

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

二、体素

体素(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}

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

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

  • 8
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
CloudCompare是一款非常强大的开源点云处理软件,它可以处理大规模点云数据,并提供了许多高级的算法和功能。 体素Voxelization)是CloudCompare中的一项重要功能,它可以将点云数据转换为体素(Voxel)表示。体素是一个三维空间内的体元(Volumetric Element),可以看作是一个立方体的单元。通过将点云数据转换为体素表示,我们可以在三维空间内构建出一个离散的网格,每个网格单元表示一个体素体素的一个主要应用是将点云数据转换为体素网格,以便进行体积测量、体素分析和体素曲面提取等操作。通过将点云数据离散体素,我们可以更方便地对点云进行处理和分析。 在CloudCompare中,我们可以通过选择合适的体素大小,将点云数据转换为体素网格。体素大小决定了体素的分辨率,较小的体素大小可以提供更高的精度,但同时也增加了计算和存储的复杂性。选择合适的体素大小需要根据具体的应用需求和硬件限制进行权衡。 通过体素,我们可以实现许多有用的功能,例如: 1. 体积测量:通过计算体素的数量,可以估算出点云数据所覆盖的体积。 2. 体素分析:可以对体素的数据进行统计分析,例如计算每个体素内的点云密度、高程分布等。 3. 体素曲面提取:可以从体素网格中提取曲面模型,用于进一步的建模和可视分析。 总之,CloudCompare的体素功能为点云数据的处理和分析提供了便利。它通过将点云数据离散体素网格,使得我们可以更好地理解和利用点云数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

想做后端的前端

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值