
虚幻渲染编程[1]
这是一段心酸的往事,UE4.24的时候我花了一年时间研究体积云渲染,然后4.25的时候UE推出了官方的体渲染方案,不过之前我的研究并没有完全白费,还是能勉强跟上Epic官方的脚步,然后很久不搞体积云了,想着可能也不可能有啥大的突破,无非就是在Marching步长等算法的基础上做改进,地平线最近推出了多层体积云渲染从巴洛克到浪漫的你:《地平线:西之绝境》中的体积云渲染[2] 感觉也还是在原来的那套体积云的基础上做的一些深入,当我看到UE5.3的SparseVolumeTexture[3]的时候,它的高精度让我挺惊讶的,于是我仔细研究了一下。

我先是查看了下UE的文档
UE 5.3 引入了一种新的资源类型:稀疏体积纹理 (SVT)。SVT 存储烘焙后的模拟数据,用于表示体积介质,例如烟雾、火焰和水。SVT 可以通过导入其他 3D 应用程序中创建的OpenVDB[4] (.vdb) 文件来创建——支持单个文件和动画序列。此外,Niagara 流体现在已缓存到 SVT 内部,从而显著提升了性能并减少了内存占用
密集)体纹理不同,SVT 只需在包含“有用”数据的体素区域上占用内存,因此可以处理比密集体纹理更大的体素——或者,也可以处理相同范围但占用更少内存的体素。
诸如异构体[5]、体积云[6]和体积雾[7]等延迟渲染技术可以通过在其体积域材质中集成稀疏体积纹理(SVT)材质节点套件来利用SVT。使用异构体渲染的资源必须使用新的异构体组件。延迟渲染功能仍然仅限于现有的实时体积功能集。路径追踪器[8]中现已提供更完整的体积渲染支持(实验性功能),可以精确模拟散射、阴影和全局光照。此外,还有一个非常简单的稀疏体积纹理查看器组件,主要用于调试,并可与延迟渲染器配合使用。
然后我抓了一下RenderDoc[9]
SparseVolumeTexture在UE里主要用到了两张图

一张是PhysicalTileData

一张是PagTableTexture

原理类似于:
先把一个体渲染场切割成若干份,例如切成32X32X32份

然后每份是64X64X64,并且只会存储有数据的分块

这样就可以把精度全部用于存储有数据的部分,没有数据的部分是不需要存储的。这样就完美解决了体渲染中的精度问题,在体渲染中其实空白的空间占了很大的部分,如果是以前的做法用一个巨大的Texture3D存储就非常浪费。
SparseVolumeTexture是由VDB数据导入生成,我们可以使用Houdini生产VDB数据

导入设置也很简单

SparseVolumeTexture数据可以被Volume材质的SparseVolumeTextureSampler采样,虚幻给我们定义好了这部分的接口



好好享受。

链接[10]


2023年12月9日
[1] 虚幻5渲染编程专栏概述及目录:https://zhuanlan.zhihu.com/p/203631693[2]从巴洛克到浪漫的你:《地平线:西之绝境》中的体积云渲染:https://zhuanlan.zhihu.com/p/638496071[3]SparseVolumeTexture:https://zhida.zhihu.com/search?content_id=237318360&content_type=Article&match_order=1&q=SparseVolumeTexture&zhida_source=entity[4]OpenVDB:https://zhida.zhihu.com/search?content_id=237318360&content_type=Article&match_order=1&q=OpenVDB&zhida_source=entity[5]异构体:https://zhida.zhihu.com/search?content_id=237318360&content_type=Article&match_order=1&q=Heterogeneous+Volumes&zhida_source=entity[6]体积云:https://zhida.zhihu.com/search?content_id=237318360&content_type=Article&match_order=1&q=Volumetric+Cloud&zhida_source=entity[7]体积雾:https://zhida.zhihu.com/search?content_id=237318360&content_type=Article&match_order=1&q=Volumetric+Fog&zhida_source=entity[8]路径追踪器:https://zhida.zhihu.com/search?content_id=237318360&content_type=Article&match_order=1&q=Path+Tracer&zhida_source=entity[9]RenderDoc:https://zhida.zhihu.com/search?content_id=237318360&content_type=Article&match_order=1&q=RenderDoc&zhida_source=entity[10]链接:https://zhuanlan.zhihu.com/p/693440024[11]https://portal.productboard.com/epicgames/1-unreal-engine-public-roadmap/c/1171-sparse-volume-textures-experimental:https://portal.productboard.com/epicgames/1-unreal-engine-public-roadmap/c/1171-sparse-volume-textures-experimental[12]从巴洛克到浪漫的你:稀疏体积插件分析:https://zhuanlan.zhihu.com/p/659952146[13]从巴洛克到浪漫的你:UE5 Sparse Volume Texture 尝鲜:https://zhuanlan.zhihu.com/p/643961497
鸣谢:感谢作者的授权转载,欢迎大家投稿,一起分享交流游戏开发技术。
作者:李义文
原文:https://zhuanlan.zhihu.com/p/671348210
关注【游戏开发技术教程】
游戏开发技术、技巧、教程和资源,答疑解惑,内推面试
