Opengl 位移映射

Opengl 位移映射,opengl,directx,rendering,game-engine,Opengl,Directx,Rendering,Game Engine,置换贴图到底有什么好处?它们是否真的加快了高计数多边形的渲染速度,或者只是艺术家和引擎工具临时降低多边形计数的一个妙计?我所能看到的唯一真正的用途可能是细节层次算法,但只能在更远的距离上使用。它可以为渲染高多边形模型提供更紧凑的结构。置换贴图每像素最多可以包含1个字节。如果将其细分为置换贴图,则会在GPU上节省大量内存带宽 第二个图像是一个简单的顶点结构 struct Vert { float x, y, z; float nx, ny, nz; float u, v;

置换贴图到底有什么好处?它们是否真的加快了高计数多边形的渲染速度,或者只是艺术家和引擎工具临时降低多边形计数的一个妙计?我所能看到的唯一真正的用途可能是细节层次算法,但只能在更远的距离上使用。

它可以为渲染高多边形模型提供更紧凑的结构。置换贴图每像素最多可以包含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.
ie显示映射在28%的内存中为您提供相同的数据。赢!:D

如果存储法线贴图并将w/a组件用于高度,则纹理将使用400000字节,现在的大小为1200000字节,仍然是大小的37.5%。另外,您现在可以删除12个字节用于正常存储,而实际上,您的存储量也降到了900000字节

您应该能够获得比这更高的几何体压缩率。总之,对于一小部分存储数据,您可以得到一个外观更好的模型


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

谢谢!我以前真的没想过。此外,考虑到您正在从纹理读取并在gpu上生成纹理,而不是通过总线传输所有顶点数据,假设速度可能也会快一点,这是错误的吗?O。o@sringer:这完全取决于您的限制发生在哪里。如果你是CPU受限的,那么显然GPU上的任何加速都不会产生任何影响。同样,如果着色器有限,则置换贴图可能会使情况变得更糟。另一方面,如果内存带宽有限,则可能会产生很大的影响。和往常一样,你要了解你的“优化”实际上会影响到任何事情。