代码如下:
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]区间。
网友评论