Tim Cooper
8 年前
当前提交
e6cc7289
共有 42 个文件被更改,包括 933 次插入 和 103 次删除
-
8MaterialGraphProject/Assets/GraphFramework/SerializableGraph/Editor/Testing/UnitTests/SerializedGraphTests.cs
-
30MaterialGraphProject/Assets/GraphFramework/SerializableGraph/Runtime/Implementation/NodeUtils.cs
-
1MaterialGraphProject/Assets/UnityShaderEditor/Editor/AssetCallbacks/CreateShaderSubGraph.cs
-
3MaterialGraphProject/Assets/UnityShaderEditor/Editor/Drawing/DrawData/MaterialGraphDataSource.cs
-
6MaterialGraphProject/Assets/UnityShaderEditor/Editor/Drawing/DrawData/NodePreviewDrawData.cs
-
36MaterialGraphProject/Assets/UnityShaderEditor/Editor/Templates/shader.template
-
2MaterialGraphProject/Assets/UnityShaderEditor/Editor/Testing/IntegrationTests/ShaderGenerationTest.cs
-
26MaterialGraphProject/Assets/UnityShaderEditor/Runtime/Graphs/MaterialGraphAsset.cs
-
4MaterialGraphProject/Assets/UnityShaderEditor/Runtime/Interfaces/IMasterNode.cs
-
8MaterialGraphProject/Assets/UnityShaderEditor/Runtime/Nodes/AbstractMasterNode.cs
-
10MaterialGraphProject/Assets/UnityShaderEditor/Runtime/Nodes/AbstractMaterialNode.cs
-
2MaterialGraphProject/Assets/UnityShaderEditor/Runtime/Nodes/PropertyNode.cs
-
13MaterialGraphProject/Assets/UnityShaderEditor/Runtime/SubGraph/SubGraph.cs
-
1MaterialGraphProject/Assets/UnityShaderEditor/Runtime/SubGraph/SubGraphNode.cs
-
65MaterialGraphProject/Assets/UnityShaderEditor/Runtime/SurfaceModel/AbstractSurfaceMasterNode.cs
-
5MaterialGraphProject/Assets/UnityShaderEditor/Runtime/SurfaceModel/SurfaceMaterialOptions.cs
-
18MaterialGraphProject/Assets/ShaderLOD.cs
-
12MaterialGraphProject/Assets/ShaderLOD.cs.meta
-
23MaterialGraphProject/Assets/UnityShaderEditor/Editor/AssetCallbacks/CreateRemapGraph.cs
-
12MaterialGraphProject/Assets/UnityShaderEditor/Editor/AssetCallbacks/CreateRemapGraph.cs.meta
-
43MaterialGraphProject/Assets/UnityShaderEditor/Editor/Drawing/DrawData/RemapInputNodeDrawData.cs
-
12MaterialGraphProject/Assets/UnityShaderEditor/Editor/Drawing/DrawData/RemapInputNodeDrawData.cs.meta
-
43MaterialGraphProject/Assets/UnityShaderEditor/Editor/Drawing/DrawData/RemapMasterNodeDrawData.cs
-
12MaterialGraphProject/Assets/UnityShaderEditor/Editor/Drawing/DrawData/RemapMasterNodeDrawData.cs.meta
-
39MaterialGraphProject/Assets/UnityShaderEditor/Editor/Drawing/DrawData/SurfaceMasterDrawData.cs
-
12MaterialGraphProject/Assets/UnityShaderEditor/Editor/Drawing/DrawData/SurfaceMasterDrawData.cs.meta
-
36MaterialGraphProject/Assets/UnityShaderEditor/Editor/Templates/subshader.template
-
8MaterialGraphProject/Assets/UnityShaderEditor/Editor/Templates/subshader.template.meta
-
9MaterialGraphProject/Assets/UnityShaderEditor/Runtime/Remapper.meta
-
97MaterialGraphProject/Assets/UnityShaderEditor/Runtime/SurfaceModel/ProjectSpecificMasterNode.cs
-
12MaterialGraphProject/Assets/UnityShaderEditor/Runtime/SurfaceModel/ProjectSpecificMasterNode.cs.meta
-
12MaterialGraphProject/Assets/UnityShaderEditor/Runtime/Remapper/MasterRemapGraph.cs.meta
-
12MaterialGraphProject/Assets/UnityShaderEditor/Runtime/Remapper/MasterRemapInputNode.cs.meta
-
12MaterialGraphProject/Assets/UnityShaderEditor/Runtime/Remapper/MaterialRemapAsset.cs.meta
-
12MaterialGraphProject/Assets/UnityShaderEditor/Runtime/Remapper/RemapMasterNode.cs.meta
-
100MaterialGraphProject/Assets/UnityShaderEditor/Runtime/Remapper/MasterRemapGraph.cs
-
103MaterialGraphProject/Assets/UnityShaderEditor/Runtime/Remapper/MasterRemapInputNode.cs
-
37MaterialGraphProject/Assets/UnityShaderEditor/Runtime/Remapper/MaterialRemapAsset.cs
-
140MaterialGraphProject/Assets/UnityShaderEditor/Runtime/Remapper/RemapMasterNode.cs
-
0/MaterialGraphProject/Assets/UnityShaderEditor/Runtime/SubGraph/MaterialSubGraphAsset.cs.meta
-
0/MaterialGraphProject/Assets/UnityShaderEditor/Runtime/SubGraph/MaterialSubGraphAsset.cs
|
|||
using System.Collections; |
|||
using System.Collections.Generic; |
|||
using UnityEngine; |
|||
|
|||
public class ShaderLOD : MonoBehaviour { |
|||
|
|||
void OnGUI() |
|||
{ |
|||
if (GUILayout.Button("200")) |
|||
{ |
|||
Shader.globalMaximumLOD = 200; |
|||
} |
|||
if (GUILayout.Button("400")) |
|||
{ |
|||
Shader.globalMaximumLOD = 400; |
|||
} |
|||
} |
|||
} |
|
|||
fileFormatVersion: 2 |
|||
guid: 4dae8f09bae183044ade8415d66232d2 |
|||
timeCreated: 1481294521 |
|||
licenseType: Pro |
|||
MonoImporter: |
|||
serializedVersion: 2 |
|||
defaultReferences: [] |
|||
executionOrder: 0 |
|||
icon: {instanceID: 0} |
|||
userData: |
|||
assetBundleName: |
|||
assetBundleVariant: |
|
|||
using System.IO; |
|||
using UnityEditor.ProjectWindowCallback; |
|||
using UnityEngine.MaterialGraph; |
|||
|
|||
namespace UnityEditor.MaterialGraph |
|||
{ |
|||
public class CreateRemapGraph : EndNameEditAction |
|||
{ |
|||
[MenuItem("Assets/Create/Remap Graph", false, 209)] |
|||
public static void CreateMaterialRemapGraph() |
|||
{ |
|||
ProjectWindowUtil.StartNameEditingIfProjectWindowExists(0, CreateInstance<CreateRemapGraph>(), |
|||
"New Remap-Graph.remapGraph", null, null); |
|||
} |
|||
|
|||
public override void Action(int instanceId, string pathName, string resourceFile) |
|||
{ |
|||
var graph = CreateInstance<MaterialRemapAsset>(); |
|||
graph.name = Path.GetFileName(pathName); |
|||
AssetDatabase.CreateAsset(graph, pathName); |
|||
} |
|||
} |
|||
} |
|
|||
fileFormatVersion: 2 |
|||
guid: 2870633e85d1cdd47b6b6d5e576187d1 |
|||
timeCreated: 1481188587 |
|||
licenseType: Pro |
|||
MonoImporter: |
|||
serializedVersion: 2 |
|||
defaultReferences: [] |
|||
executionOrder: 0 |
|||
icon: {instanceID: 0} |
|||
userData: |
|||
assetBundleName: |
|||
assetBundleVariant: |
|
|||
using System; |
|||
using System.Collections.Generic; |
|||
using RMGUI.GraphView; |
|||
using UnityEditor.Graphing.Drawing; |
|||
using UnityEngine; |
|||
using UnityEngine.MaterialGraph; |
|||
|
|||
namespace UnityEditor.MaterialGraph.Drawing |
|||
{ |
|||
[Serializable] |
|||
class RemapInputControlDrawData : ControlDrawData |
|||
{ |
|||
public override void OnGUIHandler() |
|||
{ |
|||
base.OnGUIHandler(); |
|||
|
|||
var remapNode = node as MasterRemapInputNode; |
|||
if (remapNode == null) |
|||
return; |
|||
|
|||
if (GUILayout.Button("Add Slot")) |
|||
remapNode.AddSlot(); |
|||
if (GUILayout.Button("Remove Slot")) |
|||
remapNode.RemoveSlot(); |
|||
} |
|||
|
|||
public override float GetHeight() |
|||
{ |
|||
return EditorGUIUtility.singleLineHeight * 2 + 3 * EditorGUIUtility.standardVerticalSpacing; |
|||
} |
|||
} |
|||
|
|||
[Serializable] |
|||
public class RemapInputNodeDrawData : MaterialNodeDrawData |
|||
{ |
|||
protected override IEnumerable<GraphElementData> GetControlData() |
|||
{ |
|||
var instance = CreateInstance<RemapInputControlDrawData>(); |
|||
instance.Initialize(node); |
|||
return new List<GraphElementData> { instance }; |
|||
} |
|||
} |
|||
} |
|
|||
fileFormatVersion: 2 |
|||
guid: 23e3fdefb76b26c428d70b010425e7af |
|||
timeCreated: 1481189699 |
|||
licenseType: Pro |
|||
MonoImporter: |
|||
serializedVersion: 2 |
|||
defaultReferences: [] |
|||
executionOrder: 0 |
|||
icon: {instanceID: 0} |
|||
userData: |
|||
assetBundleName: |
|||
assetBundleVariant: |
|
|||
using System; |
|||
using System.Collections.Generic; |
|||
using RMGUI.GraphView; |
|||
using UnityEditor.Graphing.Drawing; |
|||
using UnityEngine; |
|||
using UnityEngine.MaterialGraph; |
|||
|
|||
namespace UnityEditor.MaterialGraph.Drawing |
|||
{ |
|||
[Serializable] |
|||
class RemapMasterControlDrawData : ControlDrawData |
|||
{ |
|||
public override void OnGUIHandler() |
|||
{ |
|||
base.OnGUIHandler(); |
|||
|
|||
var remapNode = node as RemapMasterNode; |
|||
if (remapNode == null) |
|||
return; |
|||
|
|||
remapNode.remapAsset = (MaterialRemapAsset)EditorGUILayout.MiniThumbnailObjectField( |
|||
new GUIContent("Remap Asset"), |
|||
remapNode.remapAsset, |
|||
typeof(MaterialRemapAsset), null); |
|||
} |
|||
|
|||
public override float GetHeight() |
|||
{ |
|||
return EditorGUIUtility.singleLineHeight + 2 * EditorGUIUtility.standardVerticalSpacing; |
|||
} |
|||
} |
|||
|
|||
[Serializable] |
|||
public class RemapMasterNodeDrawData : MaterialNodeDrawData |
|||
{ |
|||
protected override IEnumerable<GraphElementData> GetControlData() |
|||
{ |
|||
var instance = CreateInstance<RemapMasterControlDrawData>(); |
|||
instance.Initialize(node); |
|||
return new List<GraphElementData> { instance }; |
|||
} |
|||
} |
|||
} |
|
|||
fileFormatVersion: 2 |
|||
guid: 4bd257f009292e44aa3616abf24d3327 |
|||
timeCreated: 1481188375 |
|||
licenseType: Pro |
|||
MonoImporter: |
|||
serializedVersion: 2 |
|||
defaultReferences: [] |
|||
executionOrder: 0 |
|||
icon: {instanceID: 0} |
|||
userData: |
|||
assetBundleName: |
|||
assetBundleVariant: |
|
|||
using System; |
|||
using System.Collections.Generic; |
|||
using RMGUI.GraphView; |
|||
using UnityEditor.Graphing.Drawing; |
|||
using UnityEngine.MaterialGraph; |
|||
|
|||
namespace UnityEditor.MaterialGraph.Drawing |
|||
{ |
|||
[Serializable] |
|||
class SurfaceMasterContolDrawData : ControlDrawData |
|||
{ |
|||
public override void OnGUIHandler() |
|||
{ |
|||
base.OnGUIHandler(); |
|||
|
|||
var cNode = node as AbstractSurfaceMasterNode; |
|||
if (cNode == null) |
|||
return; |
|||
|
|||
cNode.options.lod = EditorGUILayout.IntField("LOD", cNode.options.lod); |
|||
} |
|||
|
|||
public override float GetHeight() |
|||
{ |
|||
return EditorGUIUtility.singleLineHeight + 2 * EditorGUIUtility.standardVerticalSpacing; |
|||
} |
|||
} |
|||
|
|||
[Serializable] |
|||
public class SurfaceMasterDrawData : MaterialNodeDrawData |
|||
{ |
|||
protected override IEnumerable<GraphElementData> GetControlData() |
|||
{ |
|||
var instance = CreateInstance<SurfaceMasterContolDrawData>(); |
|||
instance.Initialize(node); |
|||
return new List<GraphElementData> { instance }; |
|||
} |
|||
} |
|||
} |
|
|||
fileFormatVersion: 2 |
|||
guid: 8a96d6b5dce22a748b50fa5a7629231e |
|||
timeCreated: 1481294173 |
|||
licenseType: Pro |
|||
MonoImporter: |
|||
serializedVersion: 2 |
|||
defaultReferences: [] |
|||
executionOrder: 0 |
|||
icon: {instanceID: 0} |
|||
userData: |
|||
assetBundleName: |
|||
assetBundleVariant: |
|
|||
SubShader |
|||
{ |
|||
${Tags} |
|||
${Blending} |
|||
${Culling} |
|||
${ZTest} |
|||
${ZWrite} |
|||
|
|||
LOD ${LOD} |
|||
|
|||
CGPROGRAM |
|||
#pragma target 3.0 |
|||
#pragma surface surf ${LightingFunctionName} ${VertexShaderDecl} |
|||
#pragma glsl |
|||
#pragma debug |
|||
|
|||
${ShaderFunctions} |
|||
${ShaderPropertyUsages} |
|||
|
|||
struct Input |
|||
{ |
|||
${ShaderInputs} |
|||
}; |
|||
|
|||
void vert (inout appdata_full v, out Input o) |
|||
{ |
|||
UNITY_INITIALIZE_OUTPUT(Input,o); |
|||
${VertexShaderBody} |
|||
} |
|||
|
|||
void surf (Input IN, inout ${SurfaceOutputStructureName} o) |
|||
{ |
|||
${PixelShaderBody} |
|||
} |
|||
ENDCG |
|||
} |
|
|||
fileFormatVersion: 2 |
|||
guid: 46fccd2bfdbe29d4d8743ad5e2454927 |
|||
timeCreated: 1481194716 |
|||
licenseType: Pro |
|||
DefaultImporter: |
|||
userData: |
|||
assetBundleName: |
|||
assetBundleVariant: |
|
|||
fileFormatVersion: 2 |
|||
guid: 5f3c6a912dd29fb459196f8efdda853f |
|||
folderAsset: yes |
|||
timeCreated: 1481188026 |
|||
licenseType: Pro |
|||
DefaultImporter: |
|||
userData: |
|||
assetBundleName: |
|||
assetBundleVariant: |
|
|||
/*using System; |
|||
using System.Collections.Generic; |
|||
using System.IO; |
|||
using System.Linq; |
|||
using System.Text.RegularExpressions; |
|||
using UnityEngine.Graphing; |
|||
|
|||
namespace UnityEngine.MaterialGraph |
|||
{ |
|||
[Serializable] |
|||
public abstract class ProjectSpecificMasterNode : AbstractMasterNode |
|||
{ |
|||
public override string GetSubShader(GenerationMode mode) |
|||
{ |
|||
|
|||
} |
|||
|
|||
public override string GetFullShader( |
|||
GenerationMode mode, |
|||
out List<PropertyGenerator.TextureInfo> configuredTextures) |
|||
{ |
|||
var shaderTemplateLocation = ShaderGenerator.GetTemplatePath("shader.template"); |
|||
|
|||
if (!File.Exists(shaderTemplateLocation)) |
|||
{ |
|||
configuredTextures = new List<PropertyGenerator.TextureInfo>(); |
|||
return string.Empty; |
|||
} |
|||
|
|||
var templateText = File.ReadAllText(shaderTemplateLocation); |
|||
|
|||
var shaderBodyVisitor = new ShaderGenerator(); |
|||
var shaderFunctionVisitor = new ShaderGenerator(); |
|||
var shaderPropertiesVisitor = new PropertyGenerator(); |
|||
var shaderPropertyUsagesVisitor = new ShaderGenerator(); |
|||
var shaderInputVisitor = new ShaderGenerator(); |
|||
var vertexShaderBlock = new ShaderGenerator(); |
|||
|
|||
GenerateSurfaceShaderInternal( |
|||
shaderBodyVisitor, |
|||
shaderFunctionVisitor, |
|||
shaderInputVisitor, |
|||
vertexShaderBlock, |
|||
shaderPropertiesVisitor, |
|||
shaderPropertyUsagesVisitor, |
|||
mode); |
|||
|
|||
var tagsVisitor = new ShaderGenerator(); |
|||
var blendingVisitor = new ShaderGenerator(); |
|||
var cullingVisitor = new ShaderGenerator(); |
|||
var zTestVisitor = new ShaderGenerator(); |
|||
var zWriteVisitor = new ShaderGenerator(); |
|||
|
|||
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)); |
|||
resultShader = resultShader.Replace("${ShaderPropertyUsages}", shaderPropertyUsagesVisitor.GetShaderString(2)); |
|||
resultShader = resultShader.Replace("${LightingFunctionName}", GetLightFunction()); |
|||
resultShader = resultShader.Replace("${SurfaceOutputStructureName}", GetSurfaceOutputName()); |
|||
resultShader = resultShader.Replace("${ShaderFunctions}", shaderFunctionVisitor.GetShaderString(2)); |
|||
resultShader = resultShader.Replace("${ShaderInputs}", shaderInputVisitor.GetShaderString(3)); |
|||
resultShader = resultShader.Replace("${PixelShaderBody}", shaderBodyVisitor.GetShaderString(3)); |
|||
resultShader = resultShader.Replace("${Tags}", tagsVisitor.GetShaderString(2)); |
|||
resultShader = resultShader.Replace("${Blending}", blendingVisitor.GetShaderString(2)); |
|||
resultShader = resultShader.Replace("${Culling}", cullingVisitor.GetShaderString(2)); |
|||
resultShader = resultShader.Replace("${ZTest}", zTestVisitor.GetShaderString(2)); |
|||
resultShader = resultShader.Replace("${ZWrite}", zWriteVisitor.GetShaderString(2)); |
|||
|
|||
resultShader = resultShader.Replace("${VertexShaderDecl}", "vertex:vert"); |
|||
resultShader = resultShader.Replace("${VertexShaderBody}", vertexShaderBlock.GetShaderString(3)); |
|||
|
|||
configuredTextures = shaderPropertiesVisitor.GetConfiguredTexutres(); |
|||
|
|||
return Regex.Replace(resultShader, @"\r\n|\n\r|\n|\r", Environment.NewLine); |
|||
|
|||
} |
|||
|
|||
private void GenerateSurfaceShaderInternal( |
|||
ShaderGenerator propertyUsages, |
|||
GenerationMode mode) |
|||
{ |
|||
var activeNodeList = new List<INode>(); |
|||
NodeUtils.DepthFirstCollectNodesFromNode(activeNodeList, this); |
|||
|
|||
foreach (var node in activeNodeList.OfType<AbstractMaterialNode>()) |
|||
{ |
|||
node.GeneratePropertyUsages(propertyUsages, mode); |
|||
} |
|||
|
|||
} |
|||
} |
|||
}*/ |
|
|||
fileFormatVersion: 2 |
|||
guid: c9237152ca800cd48a60f04edac61381 |
|||
timeCreated: 1481184633 |
|||
licenseType: Pro |
|||
MonoImporter: |
|||
serializedVersion: 2 |
|||
defaultReferences: [] |
|||
executionOrder: 0 |
|||
icon: {instanceID: 0} |
|||
userData: |
|||
assetBundleName: |
|||
assetBundleVariant: |
|
|||
fileFormatVersion: 2 |
|||
guid: bad823ee21f7ee944ab764cae72f9c7a |
|||
timeCreated: 1481188026 |
|||
licenseType: Pro |
|||
MonoImporter: |
|||
serializedVersion: 2 |
|||
defaultReferences: [] |
|||
executionOrder: 0 |
|||
icon: {instanceID: 0} |
|||
userData: |
|||
assetBundleName: |
|||
assetBundleVariant: |
|
|||
fileFormatVersion: 2 |
|||
guid: 39465109a68463a4b8a1a9c9dd20e46a |
|||
timeCreated: 1481188026 |
|||
licenseType: Pro |
|||
MonoImporter: |
|||
serializedVersion: 2 |
|||
defaultReferences: [] |
|||
executionOrder: 0 |
|||
icon: {instanceID: 0} |
|||
userData: |
|||
assetBundleName: |
|||
assetBundleVariant: |
|
|||
fileFormatVersion: 2 |
|||
guid: eda7796f65724624c9638828bd5fd956 |
|||
timeCreated: 1481188026 |
|||
licenseType: Pro |
|||
MonoImporter: |
|||
serializedVersion: 2 |
|||
defaultReferences: [] |
|||
executionOrder: 0 |
|||
icon: {instanceID: 0} |
|||
userData: |
|||
assetBundleName: |
|||
assetBundleVariant: |
|
|||
fileFormatVersion: 2 |
|||
guid: 8f94baf06fa91ad41bc0184e6d14cb0f |
|||
timeCreated: 1481188026 |
|||
licenseType: Pro |
|||
MonoImporter: |
|||
serializedVersion: 2 |
|||
defaultReferences: [] |
|||
executionOrder: 0 |
|||
icon: {instanceID: 0} |
|||
userData: |
|||
assetBundleName: |
|||
assetBundleVariant: |
|
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using UnityEngine.Graphing; |
|||
|
|||
namespace UnityEngine.MaterialGraph |
|||
{ |
|||
public interface INodeGroupRemapper |
|||
{ |
|||
void DepthFirstCollectNodesFromNodeSlotList(List<INode> nodeList, NodeUtils.IncludeSelf includeSelf); |
|||
bool IsValidSlotConnection(int id); |
|||
} |
|||
|
|||
[Serializable] |
|||
public class MasterRemapGraph : AbstractMaterialGraph |
|||
{ |
|||
[NonSerialized] |
|||
private MasterRemapInputNode m_InputNode; |
|||
|
|||
public MasterRemapInputNode inputNode |
|||
{ |
|||
get |
|||
{ |
|||
// find existing node
|
|||
if (m_InputNode == null) |
|||
m_InputNode = GetNodes<MasterRemapInputNode>().FirstOrDefault(); |
|||
|
|||
return m_InputNode; |
|||
} |
|||
} |
|||
|
|||
public override void OnAfterDeserialize() |
|||
{ |
|||
base.OnAfterDeserialize(); |
|||
m_InputNode = null; |
|||
} |
|||
|
|||
public override void AddNode(INode node) |
|||
{ |
|||
if (inputNode != null && node is MasterRemapInputNode) |
|||
{ |
|||
Debug.LogWarning("Attempting to add second SubGraphInputNode to SubGraph. This is not allowed."); |
|||
return; |
|||
} |
|||
|
|||
var materialNode = node as AbstractMaterialNode; |
|||
if (materialNode != null) |
|||
{ |
|||
var amn = materialNode; |
|||
if (!amn.allowedInRemapGraph) |
|||
{ |
|||
Debug.LogWarningFormat("Attempting to add {0} to Remap Graph. This is not allowed.", amn.GetType()); |
|||
return; |
|||
} |
|||
} |
|||
base.AddNode(node); |
|||
} |
|||
|
|||
struct DisposeMeh : IDisposable |
|||
{ |
|||
private readonly MasterRemapInputNode m_Graph; |
|||
|
|||
public DisposeMeh(MasterRemapInputNode graph, RemapMasterNode master) |
|||
{ |
|||
m_Graph = graph; |
|||
graph.m_RemapTarget = master; |
|||
} |
|||
|
|||
public void Dispose() |
|||
{ |
|||
m_Graph.m_RemapTarget = null; |
|||
} |
|||
} |
|||
|
|||
public List<string> GetSubShadersFor(RemapMasterNode rmn, GenerationMode mode, PropertyGenerator shaderPropertiesVisitor) |
|||
{ |
|||
var subShaders = new List<string>(); |
|||
try |
|||
{ |
|||
using (new DisposeMeh(inputNode, rmn)) |
|||
{ |
|||
foreach (var node in GetNodes<IMasterNode>()) |
|||
subShaders.Add(node.GetSubShader(mode, shaderPropertiesVisitor)); |
|||
} |
|||
} |
|||
catch (Exception e) |
|||
{ |
|||
Debug.LogException(e); |
|||
} |
|||
return subShaders; |
|||
} |
|||
|
|||
public void CollectPreviewMaterialProperties(List<PreviewProperty> properties) |
|||
{ |
|||
foreach (var node in GetNodes<AbstractMaterialNode>()) |
|||
node.CollectPreviewMaterialProperties(properties); |
|||
} |
|||
|
|||
} |
|||
} |
|
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using UnityEngine.Graphing; |
|||
|
|||
namespace UnityEngine.MaterialGraph |
|||
{ |
|||
[Title("Remapper/Remap Input Node")] |
|||
public class MasterRemapInputNode : AbstractSubGraphIONode |
|||
, INodeGroupRemapper |
|||
{ |
|||
[NonSerialized] |
|||
internal RemapMasterNode m_RemapTarget; |
|||
|
|||
public MasterRemapInputNode() |
|||
{ |
|||
name = "Inputs"; |
|||
} |
|||
|
|||
public override int AddSlot() |
|||
{ |
|||
var nextSlotId = GetOutputSlots<ISlot>().Count() + 1; |
|||
AddSlot(new MaterialSlot(-nextSlotId, "Input " + nextSlotId, "Input" + nextSlotId, SlotType.Output, SlotValueType.Vector4, Vector4.zero)); |
|||
|
|||
if (onModified != null) |
|||
{ |
|||
onModified(this, ModificationScope.Graph); |
|||
} |
|||
|
|||
return -nextSlotId; |
|||
} |
|||
|
|||
public override void RemoveSlot() |
|||
{ |
|||
var lastSlotId = GetOutputSlots<ISlot>().Count(); |
|||
if (lastSlotId == 0) |
|||
return; |
|||
|
|||
RemoveSlot(-lastSlotId); |
|||
|
|||
if (onModified != null) |
|||
{ |
|||
onModified(this, ModificationScope.Graph); |
|||
} |
|||
} |
|||
|
|||
public void DepthFirstCollectNodesFromNodeSlotList(List<INode> nodeList, NodeUtils.IncludeSelf includeSelf) |
|||
{ |
|||
NodeUtils.DepthFirstCollectNodesFromNode(nodeList, m_RemapTarget, NodeUtils.IncludeSelf.Exclude); |
|||
} |
|||
|
|||
public bool IsValidSlotConnection(int slotId) |
|||
{ |
|||
if (m_RemapTarget == null) |
|||
return false; |
|||
|
|||
var slot = m_RemapTarget.FindSlot<MaterialSlot>(slotId); |
|||
if (slot == null) |
|||
return false; |
|||
|
|||
var edge = m_RemapTarget.owner.GetEdges(slot.slotReference).FirstOrDefault(); |
|||
if (edge == null) |
|||
return false; |
|||
|
|||
var outputRef = edge.outputSlot; |
|||
var fromNode = m_RemapTarget.owner.GetNodeFromGuid<AbstractMaterialNode>(outputRef.nodeGuid); |
|||
if (fromNode == null) |
|||
return false; |
|||
|
|||
return true; |
|||
} |
|||
|
|||
public override string GetVariableNameForSlot(int slotId) |
|||
{ |
|||
if (m_RemapTarget == null) |
|||
{ |
|||
var defaultValueSlot = FindSlot<MaterialSlot>(slotId); |
|||
if (defaultValueSlot == null) |
|||
throw new ArgumentException(string.Format("Attempting to use MaterialSlot({0}) on node of type {1} where this slot can not be found", slotId, this), "slotId"); |
|||
|
|||
return defaultValueSlot.GetDefaultValue(GenerationMode.ForReals); |
|||
} |
|||
|
|||
var slot = m_RemapTarget.FindSlot<MaterialSlot>(slotId); |
|||
if (slot == null) |
|||
throw new ArgumentException(string.Format("Attempting to use MaterialSlot({0}) on node of type {1} where this slot can not be found", slotId, this), "slotId"); |
|||
|
|||
if (slot.isOutputSlot) |
|||
throw new Exception(string.Format("Attempting to use OutputSlot({0}) on remap node)", slotId)); |
|||
|
|||
var edge = m_RemapTarget.owner.GetEdges(slot.slotReference).FirstOrDefault(); |
|||
if (edge == null) |
|||
return slot.GetDefaultValue(GenerationMode.ForReals); |
|||
|
|||
var outputRef = edge.outputSlot; |
|||
var fromNode = m_RemapTarget.owner.GetNodeFromGuid<AbstractMaterialNode>(outputRef.nodeGuid); |
|||
if (fromNode == null) |
|||
return slot.GetDefaultValue(GenerationMode.ForReals); |
|||
|
|||
return fromNode.GetVariableNameForSlot(outputRef.slotId); |
|||
} |
|||
} |
|||
} |
|
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using UnityEngine.Graphing; |
|||
|
|||
namespace UnityEngine.MaterialGraph |
|||
{ |
|||
public class MaterialRemapAsset : ScriptableObject, IMaterialGraphAsset |
|||
{ |
|||
[SerializeField] |
|||
private MasterRemapGraph m_MasterRemapGraph = new MasterRemapGraph(); |
|||
|
|||
public IGraph graph |
|||
{ |
|||
get { return m_MasterRemapGraph; } |
|||
} |
|||
|
|||
public MasterRemapGraph masterRemapGraph |
|||
{ |
|||
get { return m_MasterRemapGraph; } |
|||
} |
|||
|
|||
public bool shouldRepaint |
|||
{ |
|||
get { return graph.GetNodes<AbstractMaterialNode>().OfType<IRequiresTime>().Any(); } |
|||
} |
|||
|
|||
public ScriptableObject GetScriptableObject() |
|||
{ |
|||
return this; |
|||
} |
|||
|
|||
public void OnEnable() |
|||
{ |
|||
graph.OnEnable(); |
|||
} |
|||
} |
|||
} |
|
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.IO; |
|||
using System.Linq; |
|||
using System.Text.RegularExpressions; |
|||
#if UNITY_EDITOR
|
|||
using UnityEditor; |
|||
#endif
|
|||
using UnityEngine.Graphing; |
|||
|
|||
namespace UnityEngine.MaterialGraph |
|||
{ |
|||
[Serializable] |
|||
[Title("Master/Remapper")] |
|||
public class RemapMasterNode : AbstractMasterNode |
|||
, IOnAssetEnabled |
|||
{ |
|||
[SerializeField] |
|||
private string m_SerialziedRemapGraph = string.Empty; |
|||
|
|||
[Serializable] |
|||
private class RemapGraphHelper |
|||
{ |
|||
public MaterialRemapAsset subGraph; |
|||
} |
|||
|
|||
public override bool allowedInRemapGraph |
|||
{ |
|||
get { return false; } |
|||
} |
|||
|
|||
public override string GetFullShader(GenerationMode mode, out List<PropertyGenerator.TextureInfo> configuredTextures) |
|||
{ |
|||
var shaderTemplateLocation = ShaderGenerator.GetTemplatePath("shader.template"); |
|||
|
|||
if (remapAsset == null || !File.Exists(shaderTemplateLocation)) |
|||
{ |
|||
configuredTextures = new List<PropertyGenerator.TextureInfo>(); |
|||
return string.Empty; |
|||
} |
|||
|
|||
var shaderPropertiesVisitor = new PropertyGenerator(); |
|||
|
|||
// Step 1: Set this node as the remap target
|
|||
// Pass in the shader properties visitor here as
|
|||
// high level properties are shared
|
|||
// this is only used for the header
|
|||
var subShaders = remapAsset.masterRemapGraph.GetSubShadersFor(this, mode, shaderPropertiesVisitor); |
|||
|
|||
var templateText = File.ReadAllText(shaderTemplateLocation); |
|||
var resultShader = templateText.Replace("${ShaderName}", GetType() + guid.ToString()); |
|||
resultShader = resultShader.Replace("${ShaderPropertiesHeader}", shaderPropertiesVisitor.GetShaderString(2)); |
|||
if (subShaders != null) |
|||
resultShader = resultShader.Replace("${SubShader}", subShaders.Aggregate(string.Empty, (i, j) => i + Environment.NewLine + j)); |
|||
else |
|||
resultShader = resultShader.Replace("${SubShader}", string.Empty); |
|||
|
|||
configuredTextures = shaderPropertiesVisitor.GetConfiguredTexutres(); |
|||
return Regex.Replace(resultShader, @"\r\n|\n\r|\n|\r", Environment.NewLine); |
|||
} |
|||
|
|||
public override string GetSubShader(GenerationMode mode, PropertyGenerator shaderPropertiesVisitor) |
|||
{ |
|||
throw new NotImplementedException(); |
|||
} |
|||
|
|||
public override void CollectPreviewMaterialProperties(List<PreviewProperty> properties) |
|||
{ |
|||
base.CollectPreviewMaterialProperties(properties); |
|||
if (remapAsset == null) |
|||
return; |
|||
|
|||
remapAsset.masterRemapGraph.CollectPreviewMaterialProperties(properties); |
|||
} |
|||
|
|||
#if UNITY_EDITOR
|
|||
public MaterialRemapAsset remapAsset |
|||
{ |
|||
get |
|||
{ |
|||
if (string.IsNullOrEmpty(m_SerialziedRemapGraph)) |
|||
return null; |
|||
|
|||
var helper = new RemapGraphHelper(); |
|||
EditorJsonUtility.FromJsonOverwrite(m_SerialziedRemapGraph, helper); |
|||
return helper.subGraph; |
|||
} |
|||
set |
|||
{ |
|||
if (remapAsset == value) |
|||
return; |
|||
|
|||
var helper = new RemapGraphHelper(); |
|||
helper.subGraph = value; |
|||
m_SerialziedRemapGraph = EditorJsonUtility.ToJson(helper, true); |
|||
OnEnable(); |
|||
|
|||
if (onModified != null) |
|||
onModified(this, ModificationScope.Graph); |
|||
} |
|||
} |
|||
#else
|
|||
public MaterialSubGraphAsset subGraphAsset {get; set; } |
|||
#endif
|
|||
|
|||
public override PreviewMode previewMode |
|||
{ |
|||
get |
|||
{ |
|||
if (remapAsset == null) |
|||
return PreviewMode.Preview2D; |
|||
|
|||
return PreviewMode.Preview3D; |
|||
} |
|||
} |
|||
|
|||
public RemapMasterNode() |
|||
{ |
|||
name = "Remapper"; |
|||
} |
|||
|
|||
public void OnEnable() |
|||
{ |
|||
var validNames = new List<int>(); |
|||
if (remapAsset == null) |
|||
{ |
|||
RemoveSlotsNameNotMatching(validNames); |
|||
return; |
|||
} |
|||
|
|||
var inputNode = remapAsset.masterRemapGraph.inputNode; |
|||
foreach (var slot in inputNode.GetOutputSlots<MaterialSlot>()) |
|||
{ |
|||
AddSlot(new MaterialSlot(slot.id, slot.displayName, slot.shaderOutputName, SlotType.Input, slot.valueType, slot.defaultValue)); |
|||
validNames.Add(slot.id); |
|||
} |
|||
RemoveSlotsNameNotMatching(validNames); |
|||
} |
|||
} |
|||
} |
撰写
预览
正在加载...
取消
保存
Reference in new issue