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 AddMetalFlakesGlossiness(MaterialGeneratorContext context) { var surfaceToEyeDistance = LODDistance.GenerateShaderSource(context, new MaterialComputeColorKeys(MaterialKeys.GlossinessMap, MaterialKeys.GlossinessValue, Color.White)); // Metal Flakes Glossiness Feature context.UseStream(MaterialShaderStage.Pixel, "matGlossiness"); var baseGlossinessComputeColorMap = BasePaintGlossinessMap.GenerateShaderSource(context, new MaterialComputeColorKeys(MaterialKeys.GlossinessMap, MaterialKeys.GlossinessValue)); var mixinGlossiness = new ShaderMixinSource(); // Computes glossiness factor for the metal flakes layer (based on the eye to surface distance and the base glossiness value) mixinGlossiness.Mixins.Add(new ShaderClassSource("MaterialSurfaceGlossinessMapMetalFlakes", BasePaintGlossinessInvert)); mixinGlossiness.AddComposition("glossinessMap", baseGlossinessComputeColorMap); mixinGlossiness.AddComposition("surfaceToEyeDistanceFactor", surfaceToEyeDistance); context.AddShaderSource(MaterialShaderStage.Pixel, mixinGlossiness); }