// mcpro24fps mLog 80% to Rec.709 // ver. 2020-04-13 __CONSTANT__ float BLACK = 0.0784; __CONSTANT__ float BRIGHTNESS = 0.1; __DEVICE__ float3 transform(int p_Width, int p_Height, int p_X, int p_Y, float p_R, float p_G, float p_B) { float3 rgb; rgb.x = p_R; rgb.y = p_G; rgb.z = p_B; if(rgb.x < BLACK) rgb.x = 0.0; else { rgb.x = (rgb.x - BLACK)/(1.0 - BLACK); rgb.x = (-1.0 * _powf(_clampf((1.0 - rgb.x),0.0,1.0), (BRIGHTNESS + 0.5)) + 1.0); rgb.x = (2.0 * (BRIGHTNESS - 0.5)) * (0.25 - (rgb.x - 0.5)*(rgb.x - 0.5)) + rgb.x; } if(rgb.y < BLACK) rgb.y = 0.0; else { rgb.y = (rgb.y - BLACK)/(1.0 - BLACK); rgb.y = (-1.0 * _powf(_clampf((1.0 - rgb.y),0.0,1.0), (BRIGHTNESS + 0.5)) + 1.0); rgb.y = (2.0 * (BRIGHTNESS - 0.5)) * (0.25 - (rgb.y - 0.5)*(rgb.y - 0.5)) + rgb.y; } if(rgb.z < BLACK) rgb.z = 0.0; else { rgb.z = (rgb.z - BLACK)/(1.0 - BLACK); rgb.z = (-1.0 * _powf(_clampf((1.0 - rgb.z),0.0,1.0), (BRIGHTNESS + 0.5)) + 1.0); rgb.z = (2.0 * (BRIGHTNESS - 0.5)) * (0.25 - (rgb.z - 0.5)*(rgb.z - 0.5)) + rgb.z; } //Rec.709 rgb.x = rgb.x < 0.018 ? 4.5*rgb.x : 1.099*_powf(rgb.x, 0.45f) - 0.099; rgb.y = rgb.y < 0.018 ? 4.5*rgb.y : 1.099*_powf(rgb.y, 0.45f) - 0.099; rgb.z = rgb.z < 0.018 ? 4.5*rgb.z : 1.099*_powf(rgb.z, 0.45f) - 0.099; return rgb; }