主页 > 魔域sf >

现代游戏体绘制技术概述 - 第2部分

发布时间:2019-06-27 13:18 来源:http://www.menggou.cc

在这个博客系列中,我写了一些关于实时应用程序的现代体积渲染技术,以及为什么我相信它们的重要将来会增长。

如果您还没有阅读过本系列的第一部分,请查看它?这里是对主题渲染技术主题和概述的介绍。如果你还没有,请查看它,然后再继续。

在我们关于游戏体积渲染的多篇系列文章的第二篇文章中,我将解释大多数解决方案共享的技术基础知识。通过所有系列,我将专注于“现实主义”,平滑渲染,而不是像“我的世界”这样的游戏中你可以看到的“块”。

技术类型

体绘制技术可分为两大类:C直接和间接。

直接技术从场景的体积表示中生成2D图像。几乎所有现代算法都使用光线投射的一些变体并在GPU上进行计算。您可以在论文/技巧 EfficientSparseVoxelMontrees 和 Gigavoxels 中阅读有关该主题的更多信息。

虽然直接技术可以产生漂亮的图像,但它们有一些缺点会阻碍它们在游戏中的广泛使用:

1.相对较高的每帧成本。计算严重依赖于计算着色器,而现代GPU具有很好的能,它们仍然可以有效地绘制三角形。

2。难以与其他网格混合。对于虚拟世界的某些部分,我们可能仍然希望使用常规三角形网格。为编辑它们而开发的工具是艺术家所熟知的,将它们移动到体素表示可能会非常困难。

3。与其他系统互作很困难。例如,大多数物理系统都需要网格的三角形表示。

另一方面,间接技术生成网格的暂时表示。实际上,他们从卷中创建了一个三角形网格。转向更熟悉的三角形网格有很多好处。

在游戏/等级加载时,多边形化(从体素到三角形的转换)只能进行一次 C。之后,在每个帧上渲染三角形网格。 GPU设计为与三角形配合良好,因此我们期望更好的每帧能。我们也不需要对我们的引擎或第三方库进行根本的更改,因为它们可能无论如何都适用于三角形。

在本系列的所有帖子中,我将讨论间接体绘制技术 C多边形化过程以及我们可以有效使用创建的网格并快速渲染它的方式 C即使它很大。

什么是VOXEL?

体素是我们体积表面的构建块。名称 voxel 来自 体积元素 ,是更熟悉的像素的3D对应物。每个体素在3D空间中都有一个位置,并且附加了一些属。虽然我们可以拥有任何我们喜欢的属,但我们讨论的所有算法都需要至少一个描述表面的标量值。在游戏中,我们最感兴趣的是渲染对象的表面而不是它的内部结构 C这为我们提供了一些优化空间。从技术上讲,我们想从标量场(我们的体素)中提取等值面。

生成网格的体素集通常是平行六面体形状,称为“体素网格”。如果我们使用体素网格,则体素中的体素的位置是隐含的。

在每个体素中,我们设置的标量通常是体素所在空间点的距离函数的值。距离函数的形式为f(x,y,z)= dxyz,其中dxyz是从空间中的点x,y,z到表面的最短距离。如果体素是网格中的,in,则值为负。

如果你想象一个球作为我们体素网格中的网格物体,那么球体中的所有体素都将具有负值,球体外的所有体素都是正的,并且所有精确位于表面上的体素都将具有值0。

使用基于MC的算法对多边形进行多边形化 C注意边缘上的细节丢失

MARCHING CUBES

最简单和最广为人知的多边形算法称为“混合立方体”。有许多技术可以提供比它更好的效果,但它的简洁和优雅仍然值得一看。行进立方体也是许多更高级算法的基础,它将为我们提供一个框架,我们可以更容易地比较它们。

主要思想是一次拍摄8个体素,形成假想立方体的八个角。我们于所有其他立方体处理每个立方体并在其中生成三角形

在这个博客系列中,我写了一些关于实时应用程序的现代体积渲染技术,以及为什么我相信它们的重要将来会增长。

如果您还没有阅读过本系列的第一部分,请查看它?这里是对主题渲染技术主题和概述的介绍。如果你还没有,请查看它,然后再继续。

在我们关于游戏体积渲染的多篇系列文章的第二篇文章中,我将解释大多数解决方案共享的技术基础知识。通过所有系列,我将专注于“现实主义”,平滑渲染,而不是像“我的世界”这样的游戏中你可以看到的“块”。

技术类型

体绘制技术可分为两大类:C直接和间接。

直接技术从场景的体积表示中生成2D图像。几乎所有现代算法都使用光线投射的一些变体并在GPU上进行计算。您可以在论文/技巧 EfficientSparseVoxelMontrees 和 Gigavoxels 中阅读有关该主题的更多信息。

虽然直接技术可以产生漂亮的图像,但它们有一些缺点会阻碍它们在游戏中的广泛使用:

1.相对较高的每帧成本。计算严重依赖于计算着色器,而现代GPU具有很好的能,它们仍然可以有效地绘制三角形。

2。难以与其他网格混合。对于虚拟世界的某些部分,我们可能仍然希望使用常规三角形网格。为编辑它们而开发的工具是艺术家所熟知的,将它们移动到体素表示可能会非常困难。

3。与其他系统互作很困难。例如,大多数物理系统都需要网格的三角形表示。

另一方面,间接技术生成网格的暂时表示。实际上,他们从卷中创建了一个三角形网格。转向更熟悉的三角形网格有很多好处。

在游戏/等级加载时,多边形化(从体素到三角形的转换)只能进行一次 C。之后,在每个帧上渲染三角形网格。 GPU设计为与三角形配合良好,因此我们期望更好的每帧能。我们也不需要对我们的引擎或第三方库进行根本的更改,因为它们可能无论如何都适用于三角形。

在本系列的所有帖子中,我将讨论间接体绘制技术 C多边形化过程以及我们可以有效使用创建的网格并快速渲染它的方式 C即使它很大。

什么是VOXEL?

体素是我们体积表面的构建块。名称 voxel 来自 体积元素 ,是更熟悉的像素的3D对应物。每个体素在3D空间中都有一个位置,并且附加了一些属。虽然我们可以拥有任何我们喜欢的属,但我们讨论的所有算法都需要至少一个描述表面的标量值。在游戏中,我们最感兴趣的是渲染对象的表面而不是它的内部结构 C这为我们提供了一些优化空间。从技术上讲,我们想从标量场(我们的体素)中提取等值面。

生成网格的体素集通常是平行六面体形状,称为“体素网格”。如果我们使用体素网格,则体素中的体素的位置是隐含的。

在每个体素中,我们设置的标量通常是体素所在空间点的距离函数的值。距离函数的形式为f(x,y,z)= dxyz,其中dxyz是从空间中的点x,y,z到表面的最短距离。如果体素是网格中的,in,则值为负。

如果你想象一个球作为我们体素网格中的网格物体,那么球体中的所有体素都将具有负值,球体外的所有体素都是正的,并且所有精确位于表面上的体素都将具有值0。

使用基于MC的算法对多边形进行多边形化 C注意边缘上的细节丢失

MARCHING CUBES

最简单和最广为人知的多边形算法称为“混合立方体”。有许多技术可以提供比它更好的效果,但它的简洁和优雅仍然值得一看。行进立方体也是许多更高级算法的基础,它将为我们提供一个框架,我们可以更容易地比较它们。

主要思想是一次拍摄8个体素,形成假想立方体的八个角。我们于所有其他立方体处理每个立方体并在其中生成三角形

上一篇:2018年税制改革将如何改变开发者的利益
下一篇:这个周末你在玩什么-_339

相关内容