最近渲染器终于稳定下来了, 效果也做得差不多了, 于是做一下总结
当初为了追求进度和效果, 直接就是采用最暴力的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(又少了一个通道的说..