Example #1
0
        private Material CreateColoredTextureMaterial(Texture texture, float textureScale)
        {
            var gridComputeTexture = new ComputeTextureColor
            {
                Key     = TexturingKeys.Texture0,
                Texture = texture,
                Scale   = new Vector2(textureScale)
            };

            return(Material.New(GraphicsDevice, new MaterialDescriptor
            {
                Attributes =
                {
                    Emissive     = new MaterialEmissiveMapFeature(new ComputeBinaryColor(new ComputeColor()
                    {
                        Key      = GridColorKey
                    }, gridComputeTexture, BinaryOperator.Multiply))
                    {
                        UseAlpha = true
                    },
                    Transparency = new MaterialTransparencyBlendFeature(),
                    CullMode     = CullMode.None
                }
            }));
        }
        public static ComputeTextureColor GenerateMaterialTextureNode(string vfsOutputPath, string sourceTextureFile, uint textureUVSetIndex, Vector2 textureUVscaling, TextureAddressMode addressModeU, TextureAddressMode addressModeV, Logger logger)
        {
            var textureFileName = Path.GetFileNameWithoutExtension(sourceTextureFile);
            var url             = vfsOutputPath + "_" + textureFileName;

            if (File.Exists(sourceTextureFile))
            {
                if (logger != null)
                {
                    logger.Warning($"The texture '{sourceTextureFile}' referenced in the mesh material can not be found on the system. Loading will probably fail at run time.", CallerInfo.Get());
                }
            }

            var uvScaling   = textureUVscaling;
            var textureName = textureFileName;

            var texture = AttachedReferenceManager.CreateProxyObject <Texture>(AssetId.Empty, textureName);

            var currentTexture = new ComputeTextureColor(texture, (TextureCoordinate)textureUVSetIndex, uvScaling, Vector2.Zero);

            currentTexture.AddressModeU = addressModeU;
            currentTexture.AddressModeV = addressModeV;

            return(currentTexture);
        }
Example #3
0
        public static List <Material> LoadMaterials(SharpGLTF.Schema2.ModelRoot root, GraphicsDevice device)
        {
            var result = new List <Material>();

            foreach (var mat in root.LogicalMaterials)
            {
                var material = new MaterialDescriptor
                {
                    Attributes = new MaterialAttributes()
                };
                foreach (var chan in mat.Channels)
                {
                    if (chan.Texture != null)
                    {
                        var imgBuf = chan.Texture.PrimaryImage.Content.Content.ToArray();
                        var imgPtr = new DataPointer(GCHandle.Alloc(imgBuf, GCHandleType.Pinned).AddrOfPinnedObject(), imgBuf.Length);

                        var image   = Stride.Graphics.Image.Load(imgPtr);
                        var texture = Texture.New(device, image, TextureFlags.None);


                        switch (chan.Key)
                        {
                        case "BaseColor":
                            var vt = new ComputeTextureColor(texture)
                            {
                                AddressModeU  = TextureAddressMode.Wrap,
                                AddressModeV  = TextureAddressMode.Wrap,
                                TexcoordIndex = TextureCoordinate.Texcoord0
                            };

                            material.Attributes.Diffuse = new MaterialDiffuseMapFeature(vt);

                            material.Attributes.DiffuseModel = new MaterialDiffuseLambertModelFeature();
                            break;

                        case "MetallicRoughness":
                            material.Attributes.MicroSurface = new MaterialGlossinessMapFeature(new ComputeTextureScalar(texture, TextureCoordinate.Texcoord0, Vector2.One, Vector2.Zero));
                            break;

                        case "Normal":
                            material.Attributes.Surface = new MaterialNormalMapFeature(new ComputeTextureColor(texture));
                            break;

                        case "Occlusion":
                            material.Attributes.Occlusion = new MaterialOcclusionMapFeature();
                            break;

                        case "Emissive":
                            material.Attributes.Emissive = new MaterialEmissiveMapFeature(new ComputeTextureColor(texture));
                            break;
                        }
                    }
                }
                material.Attributes.CullMode = CullMode.Back;
                result.Add(Material.New(device, material));
            }
            return(result);
        }
Example #4
0
        public MaterialDescriptor GetMaterial(int primitiveID)
        {
            var material = new MaterialDescriptor
            {
                Attributes = new MaterialAttributes()
            };

            foreach (var chan in CurrentMesh.Primitives[primitiveID].Material.Channels)
            {
                if (chan.Texture != null)
                {
                    using var fs = new FileStream(chan.Texture.PrimaryImage.Content.SourcePath, FileMode.Open);
                    var image   = Stride.Graphics.Image.Load(fs, true);
                    var texture = Texture.New(Device, image, TextureFlags.None);


                    switch (chan.Key)
                    {
                    case "BaseColor":
                        var vt = new ComputeTextureColor(texture)
                        {
                            AddressModeU  = TextureAddressMode.Wrap,
                            AddressModeV  = TextureAddressMode.Wrap,
                            TexcoordIndex = TextureCoordinate.Texcoord0
                        };

                        material.Attributes.Diffuse = new MaterialDiffuseMapFeature(vt);

                        material.Attributes.DiffuseModel = new MaterialDiffuseLambertModelFeature();
                        //material.Attributes.DiffuseModel = new MaterialDiffuseCelShadingModelFeature();
                        //Logger.Info("Added diffuse material");
                        break;

                    case "MetallicRoughness":
                        material.Attributes.MicroSurface = new MaterialGlossinessMapFeature(new ComputeTextureScalar(texture, TextureCoordinate.Texcoord0, Vector2.One, Vector2.Zero));
                        break;

                    case "Normal":
                        material.Attributes.Surface = new MaterialNormalMapFeature(new ComputeTextureColor(texture));
                        break;

                    case "Occlusion":
                        material.Attributes.Occlusion = new MaterialOcclusionMapFeature();
                        break;

                    case "Emissive":
                        material.Attributes.Emissive = new MaterialEmissiveMapFeature(new ComputeTextureColor(texture));
                        break;
                    }
                }
            }
            material.Attributes.CullMode = CullMode.Back;
            return(material);
        }
Example #5
0
 /// <summary>
 /// Initializes a new instance of the <see cref="MaterialDiffuseMapFeature"/> class.
 /// </summary>
 public MaterialDiffuseMapFeature()
 {
     DiffuseMap = new ComputeTextureColor();
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="MaterialSpecularMapFeature"/> class.
 /// </summary>
 public MaterialSpecularMapFeature()
 {
     SpecularMap          = new ComputeTextureColor();
     Intensity            = new ComputeFloat(1.0f);
     IsEnergyConservative = true;
 }
Example #7
0
        public static MaterialAsset Create()
        {
            // Load default texture assets
            var clearCoatLayerNormalMap = new ComputeTextureColor
            {
                Texture = AttachedReferenceManager.CreateProxyObject <Texture>(new AssetId("2f76bcba-ae9f-4954-b98d-f94c2102ff86"), "StrideCarPaintOrangePeelNM"),
                Scale   = new Vector2(8, 8)
            };

            var metalFlakesNormalMap = new ComputeTextureColor
            {
                Texture = AttachedReferenceManager.CreateProxyObject <Texture>(new AssetId("7e2761d1-ef86-420a-b7a7-a0ed1c16f9bb"), "StrideCarPaintMetalFlakesNM"),
                Scale   = new Vector2(128, 128),
                UseRandomTextureCoordinates = true
            };

            var metalFlakesMask = new ComputeTextureScalar
            {
                Texture = AttachedReferenceManager.CreateProxyObject <Texture>(new AssetId("7e2761d1-ef86-420a-b7a7-a0ed1c16f9bb"), "StrideCarPaintMetalFlakesNM"),
                Scale   = new Vector2(128, 128),
                UseRandomTextureCoordinates = true
            };

            // Red Paint
            // Color4 defaultCarPaintColor = new Color4(0.274509817f, 0.003921569f, 0.0470588244f, 1.0f);
            // Color4 defaultMetalFlakesColor = new Color4(defaultCarPaintColor.R * 2.0f, defaultCarPaintColor.G * 2.0f, defaultCarPaintColor.B * 2.0f, 1.0f);

            // Blue Paint
            Color4 defaultPaintColor       = new Color4(0, 0.09411765f, 0.329411775f, 1.0f);
            Color4 defaultMetalFlakesColor = new Color4(0, 0.180392161f, 0.6313726f, 1.0f);

            var material = new MaterialAsset
            {
                Attributes =
                {
                    Diffuse  = new MaterialDiffuseMapFeature(new ComputeColor(Color4.Black)),
                    Specular = new MaterialMetalnessMapFeature(new ComputeFloat(0.0f)),

                    DiffuseModel  = new MaterialDiffuseLambertModelFeature(),
                    SpecularModel = new MaterialSpecularMicrofacetModelFeature(),

                    ClearCoat                    = new MaterialClearCoatFeature
                    {
                        // Base Layer
                        BasePaintDiffuseMap    = new ComputeColor(defaultPaintColor),
                        BasePaintGlossinessMap = new ComputeBinaryScalar(new ComputeFloat(0.50f),              metalFlakesMask,  BinaryOperator.Multiply),

                        // Metal Flakes Layer
                        MetalFlakesDiffuseMap    = new ComputeColor(defaultMetalFlakesColor),
                        MetalFlakesGlossinessMap = new ComputeBinaryScalar(new ComputeFloat(1.00f),              metalFlakesMask,  BinaryOperator.Multiply),
                        MetalFlakesMetalnessMap  = new ComputeFloat(1.00f),

                        MetalFlakesNormalMap    = metalFlakesNormalMap,
                        MetalFlakesScaleAndBias = true,

                        // Clear coat layer
                        ClearCoatGlossinessMap = new ComputeFloat(1.00f),
                        ClearCoatMetalnessMap  = new ComputeFloat(0.50f),

                        OrangePeelNormalMap    = clearCoatLayerNormalMap,
                        OrangePeelScaleAndBias = true,
                    }
                }
            };

            return(material);
        }