实时模拟照片般逼真的草地

我在创建3D渲染时看到了很多关于如何创建好看的草的教程,但却无法想象如何在游戏的风景中对其进行实时/使用建模。

确实简单的阿尔法剪裁模型可以用来创建植物和树木在真正的风景,但草坪呢?

有没有什么好的技巧来达到这个效果? 我尝试了一个简单的4面框和一个小的纹理和一个体面的外观所需的对象的数量使最大爬行停下来。

(我认为这可能是一个着色器,但这是一个整体的其他领域,所以我想问一下在这里建模的任何人的经验)

谢谢!

我不知道什么被认为是最好的方法,但一个select是使用实例化几何 – 你提供了一个3D模型和一个你想要它绘制的地方/方向列表的GPU(最好的forms一个连接的matrix),GPU将通过自定义的顶点着色器来处理其余部分。

基本上,你创建了两个顶点缓冲区:一个包含你的3D模型(例如一片草地或一片草地),另一个包含一个变换matrix列表,每个matrix包含你想要的scale + rotation + translation渲染你的模型的一个实例。 (你需要一个自定义顶点结构来保存matrix – 这只是一个名义上的顶点缓冲区,只是用来传递matrix到GPU。)

然后,您将需要一个自定义着色器。 顶点着色器将为每个stream中的每个顶点调用,因此每次调用都会得到两个input参数:刀片模型中的一个顶点和一个变换matrix。 着色器然后用matrix转换模型顶点,并返回更新后的位置。

如果你想要像风等效果,你可以调整每个实例的matrix,并更新matrixstream。

使用一个草地而不是单个刀片的模型是更容易剔除。 如果您使用八叉树或BSP进行碰撞和可视性确定,则可以通过处理较大的草块而不是较小的叶片来减less树的深度。 此外,如果您发现性能问题,则可以轻松地为草地提供较简单/较不详细的模型。

还有一种叫做“几何着色器”的东西,可能适用于这里,但除了相对比较新,显然(?)在Xbox上不支持,我什么都不知道。

这是一个XNA实例化样本的链接。

更新

其他方法:尽管通过实例渲染大量的草比其他基于几何的方法快得多,但它仍然非常昂贵。 GPUgem包含一个有趣的替代使用相交的广告牌群集 。

而且,当然还有shell渲染 ,它是由渲染纹理多边形的堆栈组成的,每个透明背景上都有一个“点”图。 每个纹理都有一片草地的横断面图像 – 在透明背景上思考点。 当您将它们贴近时,纹理的实体部分似乎被挤压并连接在层之间。 不知道这performance如何。

更新2

我没有注意到,XNA广告牌样本是草地模拟 。

最好的参考草地: Boulanger 。

此外,由于提到了几何着色器:与K·布朗热的技术相比,此技术的质量稍差,但是由于它吸引了大量的草叶,并且通过几何着色器和变换反馈来进行剔除,一个非常酷的想法。

我会喜欢建议纯几何着色器的解决scheme,但你甚至不知道基本的顶点片段着色器。 所以不,让我们留在地上:)。 我只会引导到这个网站:

Loopix项目

这是抓住简单的植被模型的好地方。 他们非常低调,总是只有一个纹理,非常聪明的纹理重复。

确实使用实例化渲染。