private static string GetLUTInput(PICALUTInput Input, PICALUTScale Scale, int LUT) { //TODO: CosLightSpot and CosPhi string InputStr; switch (Input) { default: case PICALUTInput.CosNormalHalf: InputStr = "CosNormalHalf"; break; case PICALUTInput.CosViewHalf: InputStr = "CosViewHalf"; break; case PICALUTInput.CosNormalView: InputStr = "CosNormalView"; break; case PICALUTInput.CosLightNormal: InputStr = "CosLightNormal"; break; case PICALUTInput.CosLightSpot: InputStr = "CosLightSpot"; break; case PICALUTInput.CosPhi: InputStr = "CosPhi"; break; } string Output = $"texture(LUTs[{LUT}], vec2(({InputStr} + 1) * 0.5, 0)).r"; if (Scale != PICALUTScale.One) { string ScaleStr = Scale.ToSingle().ToString(CultureInfo.InvariantCulture); Output = $"min({Output} * {ScaleStr}, 1)"; } return(Output); }
public PICALUTInScale(uint Param) { Dist0 = (PICALUTScale)((Param >> 0) & 7); Dist1 = (PICALUTScale)((Param >> 4) & 7); Specular = (PICALUTScale)((Param >> 8) & 7); Fresnel = (PICALUTScale)((Param >> 12) & 7); ReflecR = (PICALUTScale)((Param >> 16) & 7); ReflecG = (PICALUTScale)((Param >> 20) & 7); ReflecB = (PICALUTScale)((Param >> 24) & 7); }
public static float ToSingle(this PICALUTScale Scale) { switch (Scale) { case PICALUTScale.One: return(1); case PICALUTScale.Two: return(2); case PICALUTScale.Four: return(4); case PICALUTScale.Eight: return(8); case PICALUTScale.Quarter: return(0.25f); case PICALUTScale.Half: return(0.5f); default: throw new ArgumentException("Invalid Scale value!"); } }