浏览代码

[mat graph]Move material options into the master node they exist for + add GUID support for selected master node.

/main
Tim Cooper 8 年前
当前提交
f62762b2
共有 44 个文件被更改,包括 251 次插入70 次删除
  1. 2
      MaterialGraphProject/Assets/UnityShaderEditor/Editor/Drawing/DrawData/NodePreviewDrawData.cs
  2. 2
      MaterialGraphProject/Assets/UnityShaderEditor/Editor/Drawing/MaterialGraphView.cs
  3. 2
      MaterialGraphProject/Assets/UnityShaderEditor/Editor/Testing/IntegrationTests/ShaderGenerationTest.cs
  4. 1
      MaterialGraphProject/Assets/UnityShaderEditor/Editor/Testing/UnitTests/MaterialGraphTests.cs
  5. 10
      MaterialGraphProject/Assets/UnityShaderEditor/Runtime/Graphs/MaterialGraph.cs
  6. 5
      MaterialGraphProject/Assets/UnityShaderEditor/Runtime/Graphs/MaterialGraphAsset.cs
  7. 39
      MaterialGraphProject/Assets/UnityShaderEditor/Runtime/Graphs/PixelGraph.cs
  8. 10
      MaterialGraphProject/Assets/UnityShaderEditor/Runtime/Nodes/AbstractMasterNode.cs
  9. 2
      MaterialGraphProject/Assets/UnityShaderEditor/Runtime/SurfaceModel/SurfaceMaterialOptions.cs
  10. 20
      MaterialGraphProject/Assets/UnityShaderEditor/Runtime/SurfaceModel/AbstractSurfaceMasterNode.cs
  11. 9
      MaterialGraphProject/Assets/NewUI/Editor/Demo/GraphElements.meta
  12. 9
      MaterialGraphProject/Assets/NewUI/Editor/Graph.meta
  13. 9
      MaterialGraphProject/Assets/NewUI/Editor/GraphElements.meta
  14. 9
      MaterialGraphProject/Assets/NewUI/Editor/GraphElementsData.meta
  15. 12
      MaterialGraphProject/Assets/UnityShaderEditor/Runtime/Interfaces/GenerationMode.cs
  16. 12
      MaterialGraphProject/Assets/UnityShaderEditor/Runtime/Interfaces/GenerationMode.cs.meta
  17. 8
      MaterialGraphProject/Assets/UnityShaderEditor/Runtime/Interfaces/IGenerateProperties.cs
  18. 12
      MaterialGraphProject/Assets/UnityShaderEditor/Runtime/Interfaces/IGenerateProperties.cs.meta
  19. 7
      MaterialGraphProject/Assets/UnityShaderEditor/Runtime/Interfaces/IGeneratesBodyCode.cs
  20. 12
      MaterialGraphProject/Assets/UnityShaderEditor/Runtime/Interfaces/IGeneratesBodyCode.cs.meta
  21. 7
      MaterialGraphProject/Assets/UnityShaderEditor/Runtime/Interfaces/IGeneratesFunction.cs
  22. 14
      MaterialGraphProject/Assets/UnityShaderEditor/Runtime/Interfaces/IMasterNode.cs
  23. 12
      MaterialGraphProject/Assets/UnityShaderEditor/Runtime/Interfaces/IMasterNode.cs.meta
  24. 6
      MaterialGraphProject/Assets/UnityShaderEditor/Runtime/Interfaces/IRequiresTime.cs
  25. 12
      MaterialGraphProject/Assets/UnityShaderEditor/Runtime/Interfaces/IRequiresTime.cs.meta
  26. 9
      MaterialGraphProject/Assets/UnityShaderEditor/Runtime/SurfaceModel.meta
  27. 9
      MaterialGraphProject/Assets/NewUI/Editor/Demo/GraphElements/Graph.meta
  28. 9
      MaterialGraphProject/Assets/NewUI/Editor/Demo/GraphElements/Nodes.meta
  29. 9
      MaterialGraphProject/Assets/NewUI/Editor/Graph/GraphElements.meta
  30. 9
      MaterialGraphProject/Assets/NewUI/Editor/GraphElements/Graph.meta
  31. 33
      MaterialGraphProject/Assets/UnityShaderEditor/Runtime/Interfaces/Interfaces.cs
  32. 0
      /MaterialGraphProject/Assets/UnityShaderEditor/Runtime/Interfaces/IGeneratesFunction.cs.meta
  33. 0
      /MaterialGraphProject/Assets/UnityShaderEditor/Runtime/SurfaceModel/SurfaceMaterialOptions.cs.meta
  34. 0
      /MaterialGraphProject/Assets/UnityShaderEditor/Runtime/SurfaceModel/SurfaceMaterialOptions.cs
  35. 0
      /MaterialGraphProject/Assets/UnityShaderEditor/Runtime/SurfaceModel/AbstractSurfaceMasterNode.cs.meta
  36. 0
      /MaterialGraphProject/Assets/UnityShaderEditor/Runtime/SurfaceModel/MetallicMasterNode.cs
  37. 0
      /MaterialGraphProject/Assets/UnityShaderEditor/Runtime/SurfaceModel/MetallicMasterNode.cs.meta
  38. 0
      /MaterialGraphProject/Assets/UnityShaderEditor/Runtime/SurfaceModel/SpecularMasterNode.cs
  39. 0
      /MaterialGraphProject/Assets/UnityShaderEditor/Runtime/SurfaceModel/SpecularMasterNode.cs.meta
  40. 0
      /MaterialGraphProject/Assets/UnityShaderEditor/Runtime/SurfaceModel/AbstractSurfaceMasterNode.cs

2
MaterialGraphProject/Assets/UnityShaderEditor/Editor/Drawing/DrawData/NodePreviewDrawData.cs


var shaderName = "Hidden/PreviewShader/" + localNode.GetVariableNameForNode();
List<PropertyGenerator.TextureInfo> defaultTextures;
//TODO: Need to get the real options somehow
var resultShader = ((AbstractMasterNode) m_Node).GetShader(new MaterialOptions(), GenerationMode.Preview, out defaultTextures);
var resultShader = ((AbstractMasterNode) m_Node).GetShader(GenerationMode.Preview, out defaultTextures);
m_GeneratedShaderMode = PreviewMode.Preview3D;
return resultShader;
}

2
MaterialGraphProject/Assets/UnityShaderEditor/Editor/Drawing/MaterialGraphView.cs


return null;
List<PropertyGenerator.TextureInfo> configuredTextures;
var shaderString = materialGraph.masterNode.GetShader(new MaterialOptions(), GenerationMode.ForReals, out configuredTextures);
var shaderString = materialGraph.masterNode.GetShader(GenerationMode.ForReals, out configuredTextures);
File.WriteAllText(path, shaderString);
AssetDatabase.Refresh(); // Investigate if this is optimal

2
MaterialGraphProject/Assets/UnityShaderEditor/Editor/Testing/IntegrationTests/ShaderGenerationTest.cs


// Generate the shader
List<PropertyGenerator.TextureInfo> configuredTextures;
var shaderString = materialGraph.masterNode.GetShader(graphAsset.options, GenerationMode.ForReals, out configuredTextures);
var shaderString = materialGraph.masterNode.GetShader(GenerationMode.ForReals, out configuredTextures);
m_Shader = ShaderUtil.CreateShaderAsset(shaderString);
m_Shader.hideFlags = HideFlags.HideAndDontSave;
Assert.IsNotNull(m_Shader, "Shader Generation Failed");

1
MaterialGraphProject/Assets/UnityShaderEditor/Editor/Testing/UnitTests/MaterialGraphTests.cs


var graph = new UnityEngine.MaterialGraph.MaterialGraph();
Assert.IsNotNull(graph.currentGraph);
Assert.IsNotNull(graph.materialOptions);
graph.PostCreate();

10
MaterialGraphProject/Assets/UnityShaderEditor/Runtime/Graphs/MaterialGraph.cs


public class MaterialGraph
{
[SerializeField]
private MaterialOptions m_MaterialOptions = new MaterialOptions();
[SerializeField]
private PixelGraph m_PixelGraph;
[SerializeField]

{
m_PixelGraph = new PixelGraph();
}
public MaterialOptions materialOptions
{
get { return m_MaterialOptions; }
}
public AbstractMaterialGraph currentGraph
{
get { return m_PixelGraph; }

5
MaterialGraphProject/Assets/UnityShaderEditor/Runtime/Graphs/MaterialGraphAsset.cs


get { return m_MaterialGraph.currentGraph; }
}
public MaterialOptions options
{
get { return m_MaterialGraph.materialOptions; }
}
public bool shouldRepaint
{
get { return graph.GetNodes<AbstractMaterialNode>().OfType<IRequiresTime>().Any(); }

39
MaterialGraphProject/Assets/UnityShaderEditor/Runtime/Graphs/PixelGraph.cs


using System;
using System.Linq;
using UnityEngine.Graphing;
namespace UnityEngine.MaterialGraph
{

public AbstractMasterNode masterNode
[NonSerialized]
private Guid m_ActiveMasterNodeGUID;
[SerializeField]
private string m_ActiveMasterNodeGUIDSerialized;
public PixelGraph()
get { return GetNodes<AbstractMasterNode>().FirstOrDefault(); }
m_ActiveMasterNodeGUID = Guid.NewGuid();
}
public IMasterNode masterNode
{
get
{
var found = GetNodeFromGuid(m_ActiveMasterNodeGUID) as IMasterNode;
if (found != null)
return found;
return GetNodes<IMasterNode>().FirstOrDefault();
}
}
public override void OnBeforeSerialize()
{
base.OnBeforeSerialize();
m_ActiveMasterNodeGUIDSerialized = m_ActiveMasterNodeGUID.ToString();
}
public override void OnAfterDeserialize()
{
base.OnAfterDeserialize();
if (!string.IsNullOrEmpty(m_ActiveMasterNodeGUIDSerialized))
m_ActiveMasterNodeGUID = new Guid(m_ActiveMasterNodeGUIDSerialized);
else
m_ActiveMasterNodeGUID = Guid.NewGuid();
}
}
}

10
MaterialGraphProject/Assets/UnityShaderEditor/Runtime/Nodes/AbstractMasterNode.cs


namespace UnityEngine.MaterialGraph
{
interface IMasterNode
{
string GetShader(
MaterialOptions options,
GenerationMode mode,
out List<PropertyGenerator.TextureInfo> configuredTextures);
}
[Serializable]
public abstract class AbstractMasterNode : AbstractMaterialNode, IMasterNode
{

get { return true; }
}
public abstract string GetShader(MaterialOptions options, GenerationMode mode, out List<PropertyGenerator.TextureInfo> configuredTextures);
public abstract string GetShader(GenerationMode mode, out List<PropertyGenerator.TextureInfo> configuredTextures);
}
}

2
MaterialGraphProject/Assets/UnityShaderEditor/Runtime/SurfaceModel/SurfaceMaterialOptions.cs


namespace UnityEngine.MaterialGraph
{
[Serializable]
public class MaterialOptions
public class SurfaceMaterialOptions
{
public enum BlendMode
{

20
MaterialGraphProject/Assets/UnityShaderEditor/Runtime/SurfaceModel/AbstractSurfaceMasterNode.cs


namespace UnityEngine.MaterialGraph
{
[Serializable]
[Title("Math/Add Node")]
public abstract class AbstractSurfaceMasterNode : AbstractMasterNode
{
public const string AlbedoSlotName = "Albedo";

public const int OcclusionSlotId = 5;
public const int AlphaSlotId = 6;
[SerializeField]
private SurfaceMaterialOptions m_MaterialOptions = new SurfaceMaterialOptions();
public SurfaceMaterialOptions options
{
get { return m_MaterialOptions; }
}
MaterialOptions options,
GenerationMode mode,
out List<PropertyGenerator.TextureInfo> configuredTextures)
{

var zTestVisitor = new ShaderGenerator();
var zWriteVisitor = new ShaderGenerator();
options.GetTags(tagsVisitor);
options.GetBlend(blendingVisitor);
options.GetCull(cullingVisitor);
options.GetDepthTest(zTestVisitor);
options.GetDepthWrite(zWriteVisitor);
m_MaterialOptions.GetTags(tagsVisitor);
m_MaterialOptions.GetBlend(blendingVisitor);
m_MaterialOptions.GetCull(cullingVisitor);
m_MaterialOptions.GetDepthTest(zTestVisitor);
m_MaterialOptions.GetDepthWrite(zWriteVisitor);
var resultShader = templateText.Replace("${ShaderName}", GetType() + guid.ToString());
resultShader = resultShader.Replace("${ShaderPropertiesHeader}", shaderPropertiesVisitor.GetShaderString(2));

9
MaterialGraphProject/Assets/NewUI/Editor/Demo/GraphElements.meta


fileFormatVersion: 2
guid: 0cabc6d3555773b46ac210aaf8eefae6
folderAsset: yes
timeCreated: 1475167728
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

9
MaterialGraphProject/Assets/NewUI/Editor/Graph.meta


fileFormatVersion: 2
guid: b72798efa4aa8574ca0cbdfa63df0b7a
folderAsset: yes
timeCreated: 1475177616
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

9
MaterialGraphProject/Assets/NewUI/Editor/GraphElements.meta


fileFormatVersion: 2
guid: ebb7c69d632722145a1f9d838e7fe6ef
folderAsset: yes
timeCreated: 1475161005
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

9
MaterialGraphProject/Assets/NewUI/Editor/GraphElementsData.meta


fileFormatVersion: 2
guid: 3b224150c99d250429c73b1eefe3dd83
folderAsset: yes
timeCreated: 1475161005
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

12
MaterialGraphProject/Assets/UnityShaderEditor/Runtime/Interfaces/GenerationMode.cs


namespace UnityEngine.MaterialGraph
{
public enum GenerationMode
{
Preview,
ForReals
}
public static class GenerationModeExtensions
{
public static bool IsPreview(this GenerationMode mode) { return mode == GenerationMode.Preview; }
}
}

12
MaterialGraphProject/Assets/UnityShaderEditor/Runtime/Interfaces/GenerationMode.cs.meta


fileFormatVersion: 2
guid: 588ff2dc785e37f408eb9e48a18127d0
timeCreated: 1480587334
licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

8
MaterialGraphProject/Assets/UnityShaderEditor/Runtime/Interfaces/IGenerateProperties.cs


namespace UnityEngine.MaterialGraph
{
public interface IGenerateProperties
{
void GeneratePropertyBlock(PropertyGenerator visitor, GenerationMode generationMode);
void GeneratePropertyUsages(ShaderGenerator visitor, GenerationMode generationMode);
}
}

12
MaterialGraphProject/Assets/UnityShaderEditor/Runtime/Interfaces/IGenerateProperties.cs.meta


fileFormatVersion: 2
guid: bfce8626f6421204988af1303b24dcea
timeCreated: 1480587334
licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

7
MaterialGraphProject/Assets/UnityShaderEditor/Runtime/Interfaces/IGeneratesBodyCode.cs


namespace UnityEngine.MaterialGraph
{
public interface IGeneratesBodyCode
{
void GenerateNodeCode(ShaderGenerator visitor, GenerationMode generationMode);
}
}

12
MaterialGraphProject/Assets/UnityShaderEditor/Runtime/Interfaces/IGeneratesBodyCode.cs.meta


fileFormatVersion: 2
guid: 86155a20c88c9104cac95b7d74ae60dc
timeCreated: 1480587334
licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

7
MaterialGraphProject/Assets/UnityShaderEditor/Runtime/Interfaces/IGeneratesFunction.cs


namespace UnityEngine.MaterialGraph
{
public interface IGeneratesFunction
{
void GenerateNodeFunction(ShaderGenerator visitor, GenerationMode generationMode);
}
}

14
MaterialGraphProject/Assets/UnityShaderEditor/Runtime/Interfaces/IMasterNode.cs


using System.Collections.Generic;
using UnityEngine.Graphing;
namespace UnityEngine.MaterialGraph
{
public interface IMasterNode : INode
{
string GetShader(
GenerationMode mode,
out List<PropertyGenerator.TextureInfo> configuredTextures);
string GetVariableNameForNode();
}
}

12
MaterialGraphProject/Assets/UnityShaderEditor/Runtime/Interfaces/IMasterNode.cs.meta


fileFormatVersion: 2
guid: 01e757836230d8644aa3bf9bf23c714b
timeCreated: 1480587334
licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

6
MaterialGraphProject/Assets/UnityShaderEditor/Runtime/Interfaces/IRequiresTime.cs


namespace UnityEngine.MaterialGraph
{
public interface IRequiresTime
{
}
}

12
MaterialGraphProject/Assets/UnityShaderEditor/Runtime/Interfaces/IRequiresTime.cs.meta


fileFormatVersion: 2
guid: 275b56f32a48a0f4ab244ca9aa3884c9
timeCreated: 1480587334
licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

9
MaterialGraphProject/Assets/UnityShaderEditor/Runtime/SurfaceModel.meta


fileFormatVersion: 2
guid: 5b85f45ad1b4d8d4f8c69ebfbc08c3a1
folderAsset: yes
timeCreated: 1480587334
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

9
MaterialGraphProject/Assets/NewUI/Editor/Demo/GraphElements/Graph.meta


fileFormatVersion: 2
guid: f22bdd0720b76fb49a1a7d2461de982b
folderAsset: yes
timeCreated: 1475171334
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

9
MaterialGraphProject/Assets/NewUI/Editor/Demo/GraphElements/Nodes.meta


fileFormatVersion: 2
guid: 6f374239aa4eb8e46a84b48479605054
folderAsset: yes
timeCreated: 1475168121
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

9
MaterialGraphProject/Assets/NewUI/Editor/Graph/GraphElements.meta


fileFormatVersion: 2
guid: ea648af0e8d33db40905fd11df263507
folderAsset: yes
timeCreated: 1475177616
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

9
MaterialGraphProject/Assets/NewUI/Editor/GraphElements/Graph.meta


fileFormatVersion: 2
guid: 0fc31b1e188fa674d9c15b26b2598692
folderAsset: yes
timeCreated: 1475161005
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

33
MaterialGraphProject/Assets/UnityShaderEditor/Runtime/Interfaces/Interfaces.cs


namespace UnityEngine.MaterialGraph
{
public interface IRequiresTime
{
}
public enum GenerationMode
{
Preview,
ForReals
}
public static class GenerationModeExtensions
{
public static bool IsPreview(this GenerationMode mode) { return mode == GenerationMode.Preview; }
}
public interface IGeneratesBodyCode
{
void GenerateNodeCode(ShaderGenerator visitor, GenerationMode generationMode);
}
public interface IGeneratesFunction
{
void GenerateNodeFunction(ShaderGenerator visitor, GenerationMode generationMode);
}
public interface IGenerateProperties
{
void GeneratePropertyBlock(PropertyGenerator visitor, GenerationMode generationMode);
void GeneratePropertyUsages(ShaderGenerator visitor, GenerationMode generationMode);
}
}

/MaterialGraphProject/Assets/UnityShaderEditor/Runtime/Interfaces/Interfaces.cs.meta → /MaterialGraphProject/Assets/UnityShaderEditor/Runtime/Interfaces/IGeneratesFunction.cs.meta

/MaterialGraphProject/Assets/UnityShaderEditor/Runtime/Graphs/MaterialOptions.cs.meta → /MaterialGraphProject/Assets/UnityShaderEditor/Runtime/SurfaceModel/SurfaceMaterialOptions.cs.meta

/MaterialGraphProject/Assets/UnityShaderEditor/Runtime/Graphs/MaterialOptions.cs → /MaterialGraphProject/Assets/UnityShaderEditor/Runtime/SurfaceModel/SurfaceMaterialOptions.cs

/MaterialGraphProject/Assets/UnityShaderEditor/Runtime/Nodes/AbstractSurfaceMasterNode.cs.meta → /MaterialGraphProject/Assets/UnityShaderEditor/Runtime/SurfaceModel/AbstractSurfaceMasterNode.cs.meta

/MaterialGraphProject/Assets/UnityShaderEditor/Runtime/Nodes/MetallicMasterNode.cs → /MaterialGraphProject/Assets/UnityShaderEditor/Runtime/SurfaceModel/MetallicMasterNode.cs

/MaterialGraphProject/Assets/UnityShaderEditor/Runtime/Nodes/MetallicMasterNode.cs.meta → /MaterialGraphProject/Assets/UnityShaderEditor/Runtime/SurfaceModel/MetallicMasterNode.cs.meta

/MaterialGraphProject/Assets/UnityShaderEditor/Runtime/Nodes/SpecularMasterNode.cs → /MaterialGraphProject/Assets/UnityShaderEditor/Runtime/SurfaceModel/SpecularMasterNode.cs

/MaterialGraphProject/Assets/UnityShaderEditor/Runtime/Nodes/SpecularMasterNode.cs.meta → /MaterialGraphProject/Assets/UnityShaderEditor/Runtime/SurfaceModel/SpecularMasterNode.cs.meta

/MaterialGraphProject/Assets/UnityShaderEditor/Runtime/Nodes/AbstractSurfaceMasterNode.cs → /MaterialGraphProject/Assets/UnityShaderEditor/Runtime/SurfaceModel/AbstractSurfaceMasterNode.cs

正在加载...
取消
保存