public static Material CreateDiffuseSpecular(ColorProbability diffuseProbabilities, ColorProbability specularProbabilities) { var drdgdb = diffuseProbabilities.SumComponents(); var srsgsb = specularProbabilities.SumComponents(); var pReflect = ColorProbability.MaxOfAdditions(diffuseProbabilities, specularProbabilities); var pDiffuse = pReflect * drdgdb / (drdgdb + srsgsb); return(new Material( diffuseProbabilities, specularProbabilities, ColorProbability.Zero, pDiffuse, pReflect - pDiffuse, Probability.Zero, PhongBRDF(diffuseProbabilities, specularProbabilities), Light.None, RefractiveIndex.Vacuum )); }
public static Material CreateRefractive( ColorProbability specularProbabilities, ColorProbability refractiveProbabilities, RefractiveIndex refractiveIndex ) { var sr = specularProbabilities.Red; var sg = specularProbabilities.Green; var sb = specularProbabilities.Blue; var rr = refractiveProbabilities.Red; var rg = refractiveProbabilities.Green; var rb = refractiveProbabilities.Blue; var pReflect = ColorProbability.MaxOfAdditions(specularProbabilities, refractiveProbabilities); var pRefract = ColorProbability.ProportionOfAdditions(specularProbabilities, refractiveProbabilities); return(new Material( ColorProbability.Zero, specularProbabilities, refractiveProbabilities, Probability.Zero, pReflect, pRefract, PhongBRDF(ColorProbability.Zero, specularProbabilities), Light.None, refractiveIndex )); }