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); }
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); }
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); }
/// <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; }
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); }