首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我的G缓冲器需要多少精度?

我的G缓冲器需要多少精度?
EN

Computer Graphics用户
提问于 2017-04-06 21:59:09
回答 1查看 2K关注 0票数 6

我正在研究如何将基于物理的延迟渲染器所需的所有信息打包到G-缓冲区中,而不使用大量的渲染目标。

到目前为止,我得到的是4个3部分的向量:

  • 反照率/扩散
  • 正常
  • 切线
  • 位置

和4个单组分

  • 金属
  • 粗糙度
  • 高度
  • 环境遮挡

一种天真的方法是将单个组件中的一个绑定到alpha (第四个)通道中,其中一个由3部分组成,这是我目前的研究方向。然而,考虑到四个4通道的全精度浮点渲染目标并不小,我理解使用一半精度甚至更小的表示来提高内存意识是很常见的。

我想问的是:我可以在不损失质量的情况下安全地降低精度,减少多少?

EN

回答 1

Computer Graphics用户

回答已采纳

发布于 2017-04-06 23:22:46

首先,您根本不需要在G-缓冲区中的位置。像素的位置可以是从深度缓冲区重建,知道相机的设置和像素的屏幕空间xy位置。这样你就可以摆脱整个缓冲区了。

另外,你通常也不需要G-缓冲区中的切线向量。它们仅用于从切线空间转换法线映射和视差映射;这将在G-缓冲区填充传递(当您从正在呈现的网格中有切线时)完成,而G-缓冲区将只存储世界或视图空间中的法线。

材料的性质,如颜色,粗糙度和金属通常只是8位值在G-缓冲器,因为它们是来源于8位纹理。AO也一样。

高度也不需要在G-缓冲区,除非你要做某种多通混合取决于它,但如果你确实需要它,8位可能是足够的。

法线可以从存储为16位值而不是8位值中受益。半浮子是可以的,但16位定点更好,因为它给你更均匀的精度跨越所有的方向(半浮动是更精确的轴线附近,失去一些精度远离它们)。此外,您可以使用八面体映射将它们从3个组件减少到2个。

因此,在一天结束时,最小的G缓冲区可能看起来是:

  • 材料颜色+金属: RGBA8
  • 八面体世界-空间法向+粗糙度+ AO: RGBA16

仅此而已!每像素只有12个字节。

或者,您可以为法线使用一个RG16缓冲区,并将粗糙度+ AO移动到一个单独的8位缓冲区中。如果你最终需要更多的8位或16位大小的G缓冲组件,这将给你一些增长的空间。

票数 4
EN
页面原文内容由Computer Graphics提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://computergraphics.stackexchange.com/questions/4969

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档