延迟渲染的G-Buffer压缩

最近渲染器终于稳定下来了, 效果也做得差不多了, 于是做一下总结

当初为了追求进度和效果, 直接就是采用最暴力的A16R16G16B16F x 3的G-Buffer:

COLOR0

Normal.x

Normal.y

Normal.z

Depth

COLOR1

Diffuse.r

Diffuse.g

Diffuse.b

COLOR2

Specular.r

Specular.g

Specularb

Specular  Glossy

可以说没有什么特殊的, 效果是出来了, 性能很是问题

所以想投入实际使用还是要优化一下性能, 对G-Buffer减肥

最苦逼的是渲染风格改了, 材质信息又增加了Emissive(4分量)和Half-Lambert(3个参数)

RTT的格式当然还是选择最快的A8R8G8B8, 但是8bit的通道只能保存[0, 1]范围的值, 精度只有256级

Normal可以只保存两个分量, 参考http://aras-p.info/texts/CompactNormalStorage.html, 用的method#1

虽然理论上有偏差, 但效果可以接受, 我要的是效率

Depth 8bit肯定不行, 之前想过用两个8bit通道保存, 实败了, 解出的值不是连续的, 所以把其中一个RTT的格式改成了R16G16F(又少了一个通道的说...)

MRT并不强制格式一样, 只要位数一样就好了(当然还有Hardware的INTZ什么, 考虑到兼容性还没试http://aras-p.info/texts/D3D9GPUHacks.html#depth)

其中用了一个技巧做position的重建:http://blog.csdn.net/xoyojank/article/details/5294575

为这个把光照计算全部转移到ViewSpace去计算, 节省了几条GPU指令

Diffuse没法省

Specular牺牲掉了颜色, 只保留强度和范围, 需要两个参数, 缩放到[0,1]的范围写入两个8bit通道

Half-Lambert光照的结果就是一个寻址1D纹理的UV.x(float), 是不是有这个效果需要一个bool(写入符号, 如+代表有, -代表没有)

Emissive牺牲掉颜色, 采用Diffuse的颜色, 强度也压缩一下写一个8bit通道

Rimlight计算在写入G-Buffer之前并入Diffuse, 这样理论上既有错误也有损失, 但是效果也是可以接受的, 毕竟是个辅助效果

最后G-Buffer被我搞成了这个样子:

COLOR0

Depth

[+/-][Lambert.u]

COLOR1

Diffuse.r

Diffuse.g

Diffuse.b

Emissive

COLOR2

Normal.x

Normal.z

Specular

Specular Glossy

嗯, 要是再加材质信息, 那我就哭了, 实在没地方存了.....

另外, 最后合成的输出范围最好是HDR(A16R16G16B16F)的, 要不然PostProcess效果出不来

或者使用RGBM(A8R8G8B8)进行压缩, 然后半透明的元素只能单独再用一个BlendBuffer(1/4大小)画完了进行合成, 这样又可以省掉很多带宽和填充率

再就是折射可以直接从G-Buffer里取Diffuse, 不需要再做一个折射用的Pass, 根据Depth进行剪裁

Fog/ShadowMap/SSAO/SoftParticle也可以直接使用G-Buffer中的Depth信息重建position进行计算

题外话: 延迟渲染的材质灵活性还是差啊, 但是对于程序来说还是挺省事的

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏小白课代表

有需求+小白课代表的软件目录(5.9)

28630
来自专栏AI研习社

一周 Github Trending 热门项目,最全中华古诗词数据库 | Github 项目推荐

Chinese-poetry 是本周 Github Trending 热门项目,截至 2 月 7 日,该项目已经获得了 2.5k 个「star」以及 199 个...

52460
来自专栏区块链源码分析

用零知识证明解决投票安全

我们经常会遇到需要给别人投票的情况,比如有些公司会组织员工给领导做反向打分,但是往往员工都不敢“真心实意”的打分,为什么呢?归根结底是害怕所谓的匿名不是真匿名...

495180
来自专栏华章科技

Python爬虫新手进阶版:怎样读取非结构化网页、图像、视频、语音数据

导读:常见的数据来源和获取方式,你或许已经了解很多。本文将拓展数据来源方式和格式的获取,主要集中在非结构化的网页、图像、视频和语音。

21630
来自专栏量子位

你值得收藏:这个免费AI可以神奇拯救低分辨率照片

允中 发自 LZYY 量子位 出品 | 公众号 QbitAI 有些事PS也做不好。 比如让分辨率很低的老照片变清晰就很难。还有没办法拯救?当然有,这是毫无疑问的...

39170
来自专栏小白课代表

有需求+小白课代表的软件目录(5.2)

16940
来自专栏数据小魔方

excel模拟运算功能

今天要跟大家分享的是excel的模拟运算功能! 在金融、财务领域中需要处理很多敏感性分析以及不同方案的收益风险对比等风险问题,这些问题都可以通过excel中的模...

32470
来自专栏数据小魔方

Xcelsius(水晶易表)系列9——动态选择器应用(过滤器)

今天继续跟大家分享关于水晶易表的动态选择器高级用法——过滤器。 这个部件可以将多层帅选筛选自动化,比如我们前两篇所讲解的多重筛选案例中, 需要为每一个筛选字段单...

35360
来自专栏数据小魔方

R语言可视化——ggplot携手plotly,让你的图表灵动起来!

这段时间一直在研究ggplot2这个神奇的可视化利器,可是ggplot2纵然所向披靡,唯独无法呈现动态效果! 最近发现R语言的官方CRAN中有一款名叫plotl...

59960
来自专栏数据小魔方

创意彩虹图表!

今天跟大家分享一款当前非常流行的创意彩虹图表! ▽ 这种图表其实制作起来没有任何难度,主要是使用特殊的数据展现形式以及协调匀称的配色,使得整个图表看起来非常的新...

32190

扫码关注云+社区

领取腾讯云代金券