public override void VisitFeature(MaterialGeneratorContext context) { if (MetalnessMap != null) { var computeColorSource = MetalnessMap.GenerateShaderSource(context, new MaterialComputeColorKeys(MaterialKeys.MetalnessMap, MaterialKeys.MetalnessValue)); var mixin = new ShaderMixinSource(); mixin.Mixins.Add(new ShaderClassSource("MaterialSurfaceMetalness")); mixin.AddComposition("metalnessMap", computeColorSource); context.UseStream(MaterialShaderStage.Pixel, "matSpecular"); context.AddShaderSource(MaterialShaderStage.Pixel, mixin); } }
public override void VisitFeature(MaterialGeneratorContext context) { if (DiffuseMap != null) { var computeColorSource = DiffuseMap.GenerateShaderSource(context, new MaterialComputeColorKeys(MaterialKeys.DiffuseMap, MaterialKeys.DiffuseValue, Color.White)); var mixin = new ShaderMixinSource(); mixin.Mixins.Add(new ShaderClassSource("MaterialSurfaceDiffuse")); mixin.AddComposition("diffuseMap", computeColorSource); context.UseStream(MaterialShaderStage.Pixel, DiffuseStream.Stream); context.UseStream(MaterialShaderStage.Pixel, ColorBaseStream.Stream); context.AddShaderSource(MaterialShaderStage.Pixel, mixin); } }
public override void GenerateShader(MaterialGeneratorContext context) { if (GlossinessMap != null) { GlossinessMap.ClampFloat(0, 1); context.UseStream(MaterialShaderStage.Pixel, GlossinessStream.Stream); var computeColorSource = GlossinessMap.GenerateShaderSource(context, new MaterialComputeColorKeys(MaterialKeys.GlossinessMap, MaterialKeys.GlossinessValue)); var mixin = new ShaderMixinSource(); mixin.Mixins.Add(new ShaderClassSource("MaterialSurfaceGlossinessMap", Invert)); mixin.AddComposition("glossinessMap", computeColorSource); context.AddShaderSource(MaterialShaderStage.Pixel, mixin); } }
public override void GenerateShader(MaterialGeneratorContext context) { if (NormalMap != null) { // Inform the context that we are using matNormal (from the MaterialSurfaceNormalMap shader) context.UseStreamWithCustomBlend(MaterialShaderStage.Pixel, NormalStream.Stream, new ShaderClassSource("MaterialStreamNormalBlend")); context.Parameters.Set(MaterialKeys.HasNormalMap, true); var normalMap = NormalMap; // Workaround to make sure that normal map are setup var computeTextureColor = normalMap as ComputeTextureColor; if (computeTextureColor != null) { if (computeTextureColor.FallbackValue.Value == Color.White) { computeTextureColor.FallbackValue.Value = DefaultNormalColor; } } else { var computeColor = normalMap as ComputeColor; if (computeColor != null) { if (computeColor.Value == Color.Black || computeColor.Value == Color.White) { computeColor.Value = DefaultNormalColor; } } else { var computeFloat4 = normalMap as ComputeFloat4; if (computeFloat4 != null) { if (computeFloat4.Value == Vector4.Zero) { computeFloat4.Value = DefaultNormalColor.ToVector4(); } } } } var computeColorSource = NormalMap.GenerateShaderSource(context, new MaterialComputeColorKeys(MaterialKeys.NormalMap, MaterialKeys.NormalValue, DefaultNormalColor, false)); var mixin = new ShaderMixinSource(); mixin.Mixins.Add(new ShaderClassSource("MaterialSurfaceNormalMap", IsXYNormal, ScaleAndBias)); mixin.AddComposition("normalMap", computeColorSource); context.AddShaderSource(MaterialShaderStage.Pixel, mixin); } }
private void AddClearCoatNormalMap(MaterialGeneratorContext context) { var computeColorKeys = new MaterialComputeColorKeys(MaterialKeys.NormalMap, MaterialKeys.NormalValue, MaterialNormalMapFeature.DefaultNormalColor, false); var computeColorSource = OrangePeelNormalMap.GenerateShaderSource(context, computeColorKeys); // Orange Peel Normal Map var mixinNormalMap = new ShaderMixinSource(); // Inform the context that we are using matNormal (from the MaterialSurfaceNormalMap shader) context.UseStreamWithCustomBlend(MaterialShaderStage.Pixel, "matNormal", new ShaderClassSource("MaterialStreamNormalBlend")); context.Parameters.Set(MaterialKeys.HasNormalMap, true); mixinNormalMap.Mixins.Add(new ShaderClassSource("MaterialSurfaceNormalMap", OrangePeelIsXYNormal, OrangePeelScaleAndBias)); mixinNormalMap.AddComposition("normalMap", computeColorSource); context.AddShaderSource(MaterialShaderStage.Pixel, mixinNormalMap); }
public override void GenerateShader(MaterialGeneratorContext context) { if (DiffuseMap != null) { Vector4 diffuseMin = Vector4.Zero; Vector4 diffuseMax = Vector4.One; DiffuseMap.ClampFloat4(ref diffuseMin, ref diffuseMax); var computeColorSource = DiffuseMap.GenerateShaderSource(context, new MaterialComputeColorKeys(MaterialKeys.DiffuseMap, MaterialKeys.DiffuseValue, Color.White)); var mixin = new ShaderMixinSource(); mixin.Mixins.Add(new ShaderClassSource("MaterialSurfaceDiffuse")); mixin.AddComposition("diffuseMap", computeColorSource); context.UseStream(MaterialShaderStage.Pixel, DiffuseStream.Stream); context.UseStream(MaterialShaderStage.Pixel, ColorBaseStream.Stream); context.AddShaderSource(MaterialShaderStage.Pixel, mixin); } }
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); }
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); }
private void AddDiffuseSpecularAlphaBlendColor(MaterialShaderStage stage, MaterialGeneratorContext context) { context.AddShaderSource(MaterialShaderStage.Pixel, new ShaderClassSource("MaterialSurfaceDiffuseSpecularAlphaBlendColor")); }
private void AddDiscardFromLuminance(MaterialShaderStage stage, MaterialGeneratorContext context) { context.AddShaderSource(MaterialShaderStage.Pixel, new ShaderClassSource("MaterialSurfaceTransparentAlphaDiscard")); }
private void AddMaterialSurfaceTransmittanceShading(MaterialShaderStage stage, MaterialGeneratorContext context) { context.AddShaderSource(stage, new ShaderClassSource("MaterialSurfaceTransmittanceShading")); }