4 using System.Threading.Tasks;
6 using SiliconStudio.Assets;
7 using SiliconStudio.Assets.Compiler;
8 using SiliconStudio.BuildEngine;
9 using SiliconStudio.Core;
10 using SiliconStudio.Core.IO;
11 using SiliconStudio.Core.Mathematics;
12 using SiliconStudio.Core.Serialization;
13 using SiliconStudio.Core.Serialization.Assets;
14 using SiliconStudio.Paradox.Assets.Materials.Nodes;
15 using SiliconStudio.Paradox.Assets.Materials.Processor.Visitors;
16 using SiliconStudio.Paradox.Effects.Data;
19 namespace SiliconStudio.
Paradox.Assets.Materials
21 internal class MaterialAssetCompiler : AssetCompilerBase<MaterialAsset>
25 result.ShouldWaitForPreviousBuilds =
true;
26 result.BuildSteps =
new ListBuildStep {
new MaterialCompileCommand(urlInStorage,
AssetItem, asset, context) };
29 private class MaterialCompileCommand :
AssetCommand<MaterialAsset>
35 private UFile assetUrl;
40 this.assetItem = assetItem;
41 this.context = context;
42 assetUrl =
new UFile(url);
47 return assetItem.Package.Session.FindAsset(node.TextureReference.Location) != null;
50 public override System.Collections.Generic.IEnumerable<
ObjectUrl> GetInputFiles()
53 foreach (var textureLocation
in materialTextureVisitor.GetAllTextureValues().Where(IsTextureReferenceValid).
Select(x => x.TextureReference.Location).Distinct())
56 foreach (var inputFile
in base.GetInputFiles())
57 yield
return inputFile;
62 base.ComputeParameterHash(writer);
63 writer.Serialize(ref assetUrl, ArchiveMode.Serialize);
68 var material = asset.Material.Clone();
72 foreach (var emptyTextureNodeKey
in emptyTextureNodeKeys)
74 commandContext.Logger.Warning(
"Texture node '{0}' of material '{1}' is not pointing to a valid texture reference. " +
75 "This node will be replaced by black color Node.", emptyTextureNodeKey, assetItem.Location);
81 materialReducer.ReduceTrees();
83 foreach (var reducedTree
in materialReducer.ReducedTrees)
85 material.Nodes[reducedTree.Key] = reducedTree.Value;
109 var alphaComponentSplitter =
new TextureAlphaComponentSplitter(assetItem.Package.Session);
110 material = alphaComponentSplitter.Run(material,
new UDirectory(assetUrl.GetDirectory()));
115 if (materialParameterCreator.CreateParameterCollectionData(commandContext.
Logger))
118 var materialData =
new MaterialData { Parameters = materialParameterCreator.Parameters };
121 assetManager.Save(assetUrl, materialData);
123 return Task.FromResult(ResultStatus.Successful);
126 public override string ToString()
128 return (assetUrl ??
"[File]") +
" (Material) > " + (assetUrl ??
"[Location]");
Result of a compilation of assets when using IAssetCompiler.Compile
PlatformType
Describes the platform operating system.
Data type for SiliconStudio.Paradox.Effects.Material.
A command processing an Asset.
An asset item part of a Package accessible through SiliconStudio.Assets.Package.Assets.
Implements SerializationStream as a binary writer.
ResultStatus
Status of a command.
The context used when compiling an asset in a Package.
Represents a color in the form of rgba.
Defines a normalized directory path. See UPath for details. This class cannot be inherited.
Defines a normalized file path. See UPath for details. This class cannot be inherited.