码迷,mamicode.com
首页 > 其他好文 > 详细

《Compress data for deferred shadering's G-Buffer》

时间:2017-06-25 21:25:52      阅读:225      评论:0      收藏:0      [点我收藏+]

标签:像素   logs   err   org   decode   深度   dir   ade   归一化   

对于Normal而言,因为是归一化后的,所以只需要存储x和y即可,有多种算法可以进行压缩和解压,这里介绍其中一种比较不错的:

float2 encode(float3 normal)
{
   return normalize(normal.xy) * sqrt(normal.z * 0.5 + 0.5);
}
float3 decode(float2 n)
{
   float3 normal;
   normal.z = dot(n, n) * 2 - 1;
   normal.xy = normalize(n) * sqrt(1 - normal.z * normal.z);
   return normal;
}

对于position的压缩,由于在PS中的像素所在位置已经提供了x和y,可以由x和y计算出z;在GBuffer中可以存储view space中的z除以far plane的值,而在lighting pass中PS拿到像素在view space的位置后计算:

p = view_dir * ((z * far_plane) / view_dir.z);

这样得到的P值的z分量就是真正的view space中的z深度值;其中view_dir是VS传到PS中的,在VS中计算过程是顶点乘上world*view矩阵的结果;

 

参考:http://www.klayge.org/2011/01/16/klayge%E4%B8%AD%E7%9A%84%E5%BB%B6%E8%BF%9F%E6%B8%B2%E6%9F%93%EF%BC%88%E4%BA%8C%EF%BC%89/

《Compress data for deferred shadering's G-Buffer》

标签:像素   logs   err   org   decode   深度   dir   ade   归一化   

原文地址:http://www.cnblogs.com/DeanWang/p/7077851.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!