# Pack depth into RGB

This topic is 2858 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

## Recommended Posts

I came up with this approach, which seems to fix problems with other approaches on the net, and reduces errors across the whole [0,1] range to 0
Furthermore this should exactly match the 24 bit fixed precision of a standard D24S8 depth buffer

 // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // Pack Unit Float [0,1] into RGB24 // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - float3 UnitToColor24New(in float depth) { // Constants const float3 scale = float3(1.0, 256.0, 65536.0); const float2 ogb = float2(65536.0, 256.0) / 16777215.0; const float normal = 256.0 / 255.0; // Avoid Precision Errors float3 unit = (float3)depth; unit.gb -= floor(unit.gb / ogb) * ogb; // Scale Up float3 color = unit * scale; // Use Fraction to emulate Modulo color = frac(color); // Normalize Range color *= normal; // Mask Noise color.rg -= color.gb / 256.0; return color; }//function // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // Unpack RGB24 into Unit Float [0,1] // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - float ColorToUnit24New(in float3 color) { const float3 scale = float3(65536.0, 256.0, 1.0) / 65793.0; return dot(color, scale); }//function 

##### Share on other sites
Nice work, thanks for sharing!

• ### Game Developer Survey

We are looking for qualified game developers to participate in a 10-minute online survey. Qualified participants will be offered a \$15 incentive for your time and insights. Click here to start!

• 15
• 21
• 23
• 11
• 25