DirectX11地形平滑技术

时间:2014-08-13 19:55:26

标签: c++ directx hlsl terrain resampling

我有一个地形系统设置,它利用四叉树和灰度高度图来绘制地形。我创建了一个64x64平面三角网格,然后根据四叉树节点选择以各种比例绘制。在顶点着色器中,我对2048 x 2048高度的地图纹理进行采样,以获得网格网格的y坐标。以下是用于对灰度纹理进行采样的代码:

float3 CDLODSample(Texture2D hmText, Texture2D gDetTexture, float3 inPos){
    inPos.y = hmText.SampleLevel(gTriLinearSampler,    
(inPos.xz*gsamplerWorldToTextureScale.xy)+gquadOffset._m00_m01,0.5f).x; 
    return inPos;
}

然后,我将该样本的结果按常量缩放,以确定地形的高度变化。问题是随着地形的大小增加(将地形扩大到16,384 x 16,384),地形看起来呈锯齿状,质量低。虽然仍然有很多顶点,但顶点只是形成较大的可见多边形。我已经阅读过有关贝塞尔曲面和重新采样算法的信息,但这些算法在性能方面看起来非常昂贵。是否有一种很好的方法可以动态地重新采样地形以获得更平滑的输出而不会过多地损害性能?如果是这样,Direct X有一个采样器会做这样的事吗? Battlefield 4和Just Cause等游戏如何支持具有巨大高度变化的大而平滑的地形?他们只是简单地传输非常大的高度图,还是根据需要动态重新采样较低分辨率的高度图?任何和所有信息和提示非常感谢。

0 个答案:

没有答案