Gbuffer的法向量的压缩

news/2024/11/30 9:00:27/

BTW: 自己看到了记录一下,大家随意。

原文链接:https://aras-p.info/texts/CompactNormalStorage.html

1.直接存在RGB通道上。

half4 encode(half3 n){return half4(n.xyz*0.5+0.5,0);}
half3 decode(half4 c){return c.rgb*2-1;}


2.存储法线的XY在颜色通道上,计算Z

half4 encode(half3 n){return half4(n.xy*0.5+0.5,0.0);}
half3 decode(half2 c)
{half3 n;n.xy = c*2-1;n.z = sqrt(1-dot(n.xy,n.xy));return n;
}

优点:容易实现

缺点:误差较大。


3.球面坐标(Spherical Coordinates)

#define kPI 3.1415926536f
half4 encode (half3 n)
{return half4((half2(atan2(n.y,n.x)/kPI, n.z)+1.0)*0.5,0,0);
}
half3 decode (half2 enc)
{half2 ang = enc*2-1;half2 scth;sincos(ang.x * kPI, scth.x, scth.y);half2 scphi = half2(sqrt(1.0 - ang.y*ang.y), ang.y);return half3(scth.y*scphi.x, scth.x*scphi.x, scphi.y);
}

优点:适合大部分法线,不一定需要view space

缺点:使用了三角函数,计算量比较大。


4.Spheremap Transform 

half2 encode (half3 n)
{half2 enc = normalize(n.xy) * (sqrt(-n.z*0.5+0.5));enc = enc*0.5+0.5;return enc;
}
half3 decode (half4 enc)
{half4 nn = enc*half4(2,2,0,0) + half4(-1,-1,1,-1);half l = dot(nn.xyz,-nn.xyw);nn.z = l;nn.xy *= sqrt(l);return nn.xyz * 2 + half3(0,0,-1);
}

优点:效果还不错,计算量小。CryEngine 3使用的方案。 presented by Martin Mittring in "A bit more Deferred" presentation


5.Lambert Azimuthal Equal-Area projection

half2 encode (half3 n)
{half f = sqrt(8*n.z+8);return n.xy / f + 0.5;
}
half3 decode (half4 enc)
{half2 fenc = enc*4-2;half f = dot(fenc,fenc);half g = sqrt(1-f/4);half3 n;n.xy = fenc*g;n.z = 1-f/2;return n;
}

优点:效果还不错,计算量小。 by Sean Barrett


6.Stereographic Projection 

half4 encode (half3 n)
{half scale = 1.7777;half2 enc = n.xy / (n.z+1);enc /= scale;enc = enc*0.5+0.5;return half4(enc,0,0);
}half3 decode (half4 enc)
{half scale = 1.7777;half3 nn =enc.xyz*half3(2*scale,2*scale,0) +half3(-scale,-scale,1);half g = 2.0 / dot(nn.xyz,nn.xyz);half3 n;n.xy = g*nn.xy;n.z = g-1;return n;
}

优点:效果还不错,计算量小。


8. Per-pixel View Space

float3x3 make_view_mat (float3 view)
{view = normalize(view);float3 x,y,z;z = -view;x = normalize (float3(z.z, 0, -z.x));y = cross (z,x);return float3x3 (x,y,z);
}half4 encode (half3 n, float3 view)
{return half4(mul (make_view_mat(view), n).xy*0.5+0.5,0,0);
}half3 decode (half4 enc, float3 view)
{half3 n;n.xy = enc*2-1;n.z = sqrt(1+dot(n.xy,-n.xy));n = mul(n, make_view_mat(view));return n;
}

优点:效果还不错,计算量小。

性能对比:

GPU performance comparison in a single table:

#1: X & Y#3: Spherical#4: Spheremap#7: Stereo#8: PPView
Encoding, GPU cycles
Radeon HD24001.0017.003.004.0011.00
Radeon HD58700.500.950.500.500.80
GeForce 62001.0012.004.002.0012.00
GeForce 88007.0043.0012.0012.0024.00
Decoding, GPU cycles
Radeon HD24001.0017.003.004.0011.00
Radeon HD58700.500.950.501.000.80
GeForce 62004.007.006.004.0012.00
GeForce 880015.0023.0015.0012.0029.00
Encoding, D3D ALU+TEX instruction slots
SM3.01264517
Decoding, D3D ALU+TEX instruction slots
SM3.08189822

质量对比

Quality comparison in a single table. PSNR based, higher numbers are better.

MethodPSNR, dB
#1: X & Y18.629
#3: Spherical42.042
#4: Spheremap48.071
#7: Stereographic44.147
#8: Per pixel view38.730


http://www.ppmy.cn/news/257284.html

相关文章

新老更替选本难 最新CPU显卡参数解析

处理器选购建议 如果您是一位初学者,还看不懂这些参数,我们就直接按四种用户类型给大家推荐一下。 1. 普通用户:以日常应用为主,比如上网下载、看电影听音乐、使用Office软件等等。 对这部分用户来说,奔腾双核系列就足…

您的密码不再是秘密,第1部分

当然,标题是一个把戏。 目前,您的密码仍然是秘密的。 为确保它保持不变,请尝试对自己回答以下问题: 您的密码强度如何 ? 为了防止其他人发现它们,它们应该有多强? 您的密码习惯真的足够吗&am…

git不再询问帐号密码_您的密码不再是秘密,第1部分

git不再询问帐号密码 当然,标题是一个把戏。 目前,您的密码仍然是秘密的。 为确保它保持不变,请尝试对自己回答以下问题: 您的密码强度如何 ? 为了防止其他人发现它们,它们应该有多强? 您的密…

关于Gbuffer中的normal存储

转自:http://aras-p.info/texts/CompactNormalStorage.html Compact Normal Storage for Small G-Buffers Intro Baseline: store X&Y&Z Method 1: X&Y Method 3: Spherical Coordinates Method 4: Spheremap Transform Method 7: Stereographic projec…

计算机集成声卡输出通道,1台电脑多人用!多屏输出另类功能详解

1台电脑多人用!多屏输出另类功能详解 2010年12月24日 00:19作者:李晓晟编辑:李晓晟文章出处:泡泡网原创 分享 泡泡网显卡频道12月24日 多显示器平台在很早之前就已经被金融、证券以及科研行业中广泛使用。不过当时实现起来较为麻烦,不仅需要两块昂贵的显卡,还需要非常复杂…

Compact Normal Storage for Small G-Buffers

转自:http://aras-p.info/texts/CompactNormalStorage.html Compact Normal Storage for Small G-Buffers Intro Baseline: store X&Y&Z Method 1: X&Y Method 3: Spherical Coordinates Method 4: Spheremap Transform Method 7: Stereographic projec…

显卡天梯图

GeForce 500及更早GeForce 600GeForce 700GeForce 900GeForce 10GeForce 20RX 5000RX 400/500/VegaRadeon R300Radeon R200Radeon HD 7000Radeon HD 6000及更早 Titan RTX RTX 2080 Ti Titan VRTX 2080 Super Titan XpRTX 2080 Radeon VII …

(转)DX11代表作!20款主流显卡决战[DiRT2]

泡泡网 显卡频道12月2日 转眼间,首款DX11 显卡Radeon HD5870已经发布两月有余,在此期间 AMD以 迅雷不及掩耳之势完成了对HD5000系列全线DX11 显卡的部署,旗舰级的双芯HD5970也与不久前上市,五款产品覆盖了中高端1000、2000、3000元…