将范围内的两个浮点数打包成一个浮点数

Mig*_*l P 0 encoding hlsl decoding

在 HLSL 中,我将如何以最佳精度将 0-1 范围内的两个浮点数打包成一个浮点数。这对于进一步压缩我的 GBuffer 非常有用。

Ada*_*les 5

//Packing
float a = 0.45;
float b = 0.55;
uint aScaled = a * 0xFFFF;
uint bScaled = b * 0xFFFF;
uint abPacked = (aScaled << 16) | (bScaled & 0xFFFF);
float finalFloat = asfloat(abPacked);

//Unpacking
float inputFloat = finalFloat;
uint uintInput = asuint(inputFloat);
float aUnpacked = (uintInput >> 16) / 65535.0f;
float bUnpacked = (uintInput & 0xFFFF) / 65535.0f;
Run Code Online (Sandbox Code Playgroud)

  • 是的,我认为它的意思是“不要浪费任何一点”而不是“做不可能的事”! (2认同)