RGBM编码

代码如下:


float MaxRange = 8;

float4 EncodeRGBM(float3 rgb)

{

  float maxRGB = max(rgb.r,max(rgb.g,rgb.b));

  float M = maxRGB / MaxRange;

  M = ceil(M * 255.0) / 255.0;

  maxRGB = M * MaxRange;

  return float4(rgb / maxRGB, M);

}

float3 DecodeRGBM(float4 rgbm)

{

    return rgbm.rgb * rgbm.a * MaxRange;

}

RGBM编码的核心思想就是进行归一化,把>1.0的数值转化到[0,1]区间内。

通过maxRGB把RGB值归一化,通过MaxRange把maxRGB归一化成M。输出的rgbm属于[0,1]区间。

你可能感兴趣的:(RGBM编码)