我正在努力压缩我的延迟渲染G-缓冲区。所以我有一些关于获得2分量屏幕空间法线的问题。我知道Frostbite和Killzone (我能找到的唯一两家AAA公司的G-缓冲器)使用它们。
如何创建屏幕空间法线,在使用普通映射或凸点映射之前还是之后?如果它是在使用法线映射之前完成的,法线映射将如何受到法线的屏幕空间性的影响?如果之后,如何在所有片段上而不是顶点上使用模型视图矩阵?这不是更多的计算吗?
最后,它们是如何打开的?我知道你可以用毕达哥拉斯得到蓝色的组件,但是它们是如何返回世界空间的呢?
发布于 2016-09-03 02:56:55
如何创建屏幕空间法线,在使用普通映射或凸点映射之前还是之后?
它们是在使用普通地图之后创建的。在延迟渲染中,您可以写入各种缓冲区(扩散、正常、深度等)。碎片着色器里。到那时,正常的地图已经看过了。
如果它是在使用法线映射之前完成的,法线映射将如何受到法线的屏幕空间的影响,
如果你指的是模型上的法线映射,法线映射可以保持不变。如果需要,也可以压缩普通映射,但这与写入普通缓冲区的操作无关。
...and,如果之后,如何在所有片段(而不是顶点上)上使用模型视图矩阵?这不是更多的计算吗?
你的模型的法线是每个顶点计算出来的,并通过栅格化插值到每一个片段。法线映射是每个片段处理的,但这些只是纹理查找,这些映射可以应用于从前面的管道步骤生成的相机空间法线。因此,不再需要视图矩阵。
最后,它们是如何打开的?我知道你可以用毕达哥拉斯得到蓝色的组件,但是它们是如何返回世界空间的呢?
二分量法线与三分量法线的概念是向量震级通常不考虑法线。另外,远离摄像机的法线通常是没有用的。有两个组件,您可以使用模型的半球面对相机。你把它们拆开就像打包一样。
把法线看作是位置。当转换从世界空间(x,y,z)到屏幕空间(x,y,深度),但深度不影响屏幕上的网格被显示。根据屏幕空间将三维向量转换为矢量(通过视图矩阵乘法)。
然后,只要法线是单位向量(因为您可以从其他两个向量导出z),就可以丢弃z分量(与摄像机对齐)。
https://computergraphics.stackexchange.com/questions/3942
复制相似问题