private void ClampInputs() { // Clamp color inputs var diffuseMin = Vector4.Zero; var diffuseMax = Vector4.One; BasePaintDiffuseMap.ClampFloat4(ref diffuseMin, ref diffuseMax); MetalFlakesDiffuseMap.ClampFloat4(ref diffuseMin, ref diffuseMax); // Clamp scalar inputs BasePaintGlossinessMap.ClampFloat(0, 1); MetalFlakesGlossinessMap.ClampFloat(0, 1); ClearCoatGlossinessMap.ClampFloat(0, 1); MetalFlakesMetalnessMap.ClampFloat(0, 1); ClearCoatMetalnessMap.ClampFloat(0, 1); }
private void AddMetalFlakesDiffuse(MaterialGeneratorContext context) { var surfaceToEyeDistance = LODDistance.GenerateShaderSource(context, new MaterialComputeColorKeys(MaterialKeys.GlossinessMap, MaterialKeys.GlossinessValue, Color.White)); // Diffuse Feature (interpolated by the 'regular' diffuse map) var metalFlakesComputeColorSource = MetalFlakesDiffuseMap.GenerateShaderSource(context, new MaterialComputeColorKeys(MaterialKeys.DiffuseMap, MaterialKeys.DiffuseValue, Color.White)); var mixinDiffuse = new ShaderMixinSource(); // Diffuse uses a custom shader (to perform the interpolation) mixinDiffuse.Mixins.Add(new ShaderClassSource("MaterialSurfaceDiffuseMetalFlakes")); mixinDiffuse.AddComposition("diffuseMap", metalFlakesComputeColorSource); mixinDiffuse.AddComposition("surfaceToEyeDistanceFactor", surfaceToEyeDistance); context.UseStream(MaterialShaderStage.Pixel, MaterialDiffuseMapFeature.DiffuseStream.Stream); context.UseStream(MaterialShaderStage.Pixel, MaterialDiffuseMapFeature.ColorBaseStream.Stream); context.AddShaderSource(MaterialShaderStage.Pixel, mixinDiffuse); }