【问题标题】:Displacement mapping位移映射
【发布时间】:2011-01-17 15:08:01
【问题描述】:

置换贴图究竟有什么好处?他们真的加速了更高数量的多边形的渲染,还是只是艺术家和引擎内工具暂时降低多边形数量的一个绝妙技巧?我能看到它唯一真实的用途可能是细节级别的算法,但仅限于更远的距离。

【问题讨论】:

    标签: opengl directx rendering game-engine


    【解决方案1】:

    它可以为渲染高多边形模型提供更紧凑的结构。置换贴图每个像素可以包含少至 1 个字节。如果您将其细分为置换贴图,那么您将在 GPU 上节省大量内存带宽。

    图像是一个简单的顶点结构。

    struct Vert
    {
        float x, y, z;
        float nx, ny, nz;
        float u, v;
    };
    

    该结构的大小为 32 字节。因此,如果您想象可以将顶点数量减半(并且您应该能够做更多的地狱)并用 1 字节高度图替换所有其他顶点,那么您使用的内存量就可以了如下:

    100,000 poly object = 3,200,000 bytes using vertex struct alone.
    25,000 polys + 100,000 entry height map = 900,000 bytes.
    

    即位移映射在 28% 的内存中为您提供相同的数据。赢! :D

    如果您存储法线贴图并使用 w/a 组件作为高度,那么您将使用 400000 字节的纹理,现在您的大小为 1,200,000 字节,仍然是大小的 37.5%。另外,您现在可以删除 12 个字节用于正常存储,而您实际上已降至 900,000 字节的相同数字。

    您应该能够获得比这更高的几何压缩率。因此,总而言之,对于一小部分存储数据,您可以获得更好看的模型。

    作为额外的好处,使用法线贴图/高度贴图系统,您还可以轻松缩放,以便功能较弱的机器只需使用法线数据,您仍然可以获得相当好的结果。

    【讨论】:

    • 谢谢!之前我真的没有想到。此外,考虑到您正在从纹理中读取并在 gpu 上生成它而不是通过总线传输所有顶点数据,假设速度也可能会更快一些是否是错误的? O.o
    • @sringer:这完全取决于您的限制发生在哪里。如果您受 CPU 限制,那么显然 GPU 上的任何加速都不会产生任何影响。同样,如果您受着色器限制,那么置换贴图可能会使事情变得更糟。另一方面,如果您的内存带宽有限,那么它可能会产生很大的不同。与往常一样,配置文件以便您知道您的“优化”实际上会影响任何事情。
    猜你喜欢
    • 1970-01-01
    • 2018-07-26
    • 1970-01-01
    • 1970-01-01
    • 2021-08-05
    • 2016-12-07
    • 2018-05-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多