public override void CreateConnections(MaterialExpressionTextureSample unrealNode, Material unrealMaterial, ShaderGraphBuilder builder) { if (unrealNode.TextureObject != null) { builder.Connect(unrealNode.TextureObject, unrealNode.Name, SampleTexture2DNode.TextureInputId); } builder.Connect(unrealNode.Coordinates, unrealNode.Name, SampleTexture2DNode.UVInput); }
public override void CreateConnections(MaterialExpressionPower unrealNode, Material unrealMaterial, ShaderGraphBuilder builder) { builder.Connect(unrealNode.Value, unrealNode.Name, 0); if (unrealNode.Exponent != null) { builder.Connect(unrealNode.Exponent, unrealNode.Name, 1); } }
public override void CreateConnections(Material unrealNode, Material unrealMaterial, ShaderGraphBuilder builder) { builder.Connect(unrealNode.EmissiveColor, unrealNode.Name, UnlitMasterNode.ColorSlotId); builder.Connect(unrealNode.OpacityMask, unrealNode.Name, UnlitMasterNode.AlphaSlotId); if (unrealNode.Specular != null) { // FIXME: support specular or at least raise a warning? // builder.Connect(unrealNode.Specular?.NodeName, unrealNode.Name, PBRMasterNode.SpecularSlotId, unrealNode.Specular); } }
public override void CreateConnections(MaterialExpressionDivide unrealNode, Material unrealMaterial, ShaderGraphBuilder builder) { if (unrealNode.A != null) { builder.Connect(unrealNode.A, unrealNode.Name, 0); } if (unrealNode.B != null) { builder.Connect(unrealNode.B, unrealNode.Name, 1); } }
public override void CreateConnections(MaterialExpressionClamp unrealNode, Material unrealMaterial, ShaderGraphBuilder builder) { builder.Connect(unrealNode.Input, unrealNode.Name, 0); if (unrealNode.Min != null) { builder.Connect(unrealNode.Min, unrealNode.Name, 1); } if (unrealNode.Max != null) { builder.Connect(unrealNode.Max, unrealNode.Name, 2); } }
protected override AbstractMaterialNode CreateNodeForShaderInput(ShaderInput shaderInput, ShaderGraphBuilder builder, MaterialExpressionStaticSwitchParameter unrealNode) { var propertyNode = base.CreateNodeForShaderInput(shaderInput, builder, unrealNode); var branchNode = builder.CreateNode <BranchNode>(); builder.PositionNodeOnGraph(propertyNode, unrealNode); builder.Connect(propertyNode.GetSlotReference(0), branchNode.GetSlotReference(0)); return(branchNode); }
protected override AbstractMaterialNode CreateNodeForShaderInput(ShaderInput shaderInput, ShaderGraphBuilder builder, MaterialExpressionTextureSampleParameter2D unrealNode) { var propertyNode = base.CreateNodeForShaderInput(shaderInput, builder, unrealNode); var sampleNode = builder.CreateNode <SampleTexture2DNode>(); sampleNode.textureType = TextureType.Default; builder.PositionNodeOnGraph(propertyNode, unrealNode); builder.Connect(propertyNode.GetSlotReference(PropertyNode.OutputSlotId), sampleNode.GetSlotReference(SampleTexture2DNode.TextureInputId)); return(sampleNode); }
public override void CreateConnections(MaterialExpressionFresnel unrealNode, Material unrealMaterial, ShaderGraphBuilder builder) { if (unrealNode.Normal != null) { builder.Connect(unrealNode.Normal, unrealNode.Name, 0); } if (unrealNode.BaseReflectFractionIn != null) { Debug.Log("FIXME: unhandled fresnel baseReflectFractionIn/baseReflectFraction"); } if (unrealNode.ExponentIn != null) { Debug.Log("FIXME: unhandled fresnel exponentIn/exponent"); } if (unrealNode.Power != null) { builder.Connect(unrealNode.Power, unrealNode.Name, 2); } }
public override void CreateConnections(MaterialExpressionMaterialFunctionCall unrealNode, Material unrealMaterial, ShaderGraphBuilder builder) { foreach (var functionInput in unrealNode.FunctionInputs) { var inputPropertyBag = ValueUtil.ParseAttributeList(functionInput.FindPropertyValue("Input")); var expressionValue = ValueUtil.ParseExpressionReference(inputPropertyBag.FindPropertyValue("Expression")); var resolvedFunctionInput = unrealMaterial.ResolveExpressionReference(expressionValue); if (resolvedFunctionInput != null) { var slotId = GetConnectionIdSlotForFunctionInput(inputPropertyBag.FindPropertyValue("InputName"), resolvedFunctionInput); var inputSlot = builder.FindSlot <MaterialSlot>(resolvedFunctionInput?.Name, unrealNode.Name, slotId, inputPropertyBag); builder.Connect(resolvedFunctionInput?.Name, unrealNode.Name, slotId, inputPropertyBag); } } }
public override void CreateConnections(Material unrealNode, Material unrealMaterial, ShaderGraphBuilder builder) { builder.Connect(unrealNode.BaseColor, unrealNode.Name, PBRMasterNode.AlbedoSlotId); builder.Connect(unrealNode.Metallic, unrealNode.Name, PBRMasterNode.MetallicSlotId); builder.Connect(unrealNode.Normal, unrealNode.Name, PBRMasterNode.NormalSlotId); builder.Connect(unrealNode.OpacityMask, unrealNode.Name, PBRMasterNode.AlphaSlotId); builder.Connect(unrealNode.Roughness, unrealNode.Name, PBRMasterNode.SmoothnessSlotId); builder.Connect(unrealNode.EmissiveColor, unrealNode.Name, PBRMasterNode.EmissionSlotId); if (unrealMaterial.Metallic != null && unrealMaterial.Specular != null) { Debug.Log("FIXME: material supports both metallic and specular but we don't"); } if (unrealMaterial.Metallic == null && unrealNode.Specular != null) { builder.Connect(unrealNode.Specular, unrealNode.Name, PBRMasterNode.SpecularSlotId); } }
public override void CreateConnections(MaterialExpressionSine unrealNode, Material unrealMaterial, ShaderGraphBuilder builder) { builder.Connect(unrealNode.Input, unrealNode.Name, 0); }
public override void CreateConnections(MaterialExpressionDesaturation unrealNode, Material unrealMaterial, ShaderGraphBuilder builder) { builder.Connect(unrealNode.Input, unrealNode.Name, 0); builder.Connect(unrealNode.Fraction, unrealNode.Name, 1); }
public override void CreateConnections(MaterialExpressionAppendVector unrealNode, Material unrealMaterial, ShaderGraphBuilder builder) { if (unrealNode.A != null) { var a = unrealMaterial.ResolveExpressionReference( ValueUtil.ParseExpressionReference(unrealNode.A.FindPropertyValue("Expression")) ); var aSlot = builder.FindSlot <MaterialSlot>(a?.Name, unrealNode.Name, 0, unrealNode.A); if (aSlot.concreteValueType == ConcreteSlotValueType.Vector4 || aSlot.concreteValueType == ConcreteSlotValueType.Vector3) { builder.Connect(a?.Name, unrealNode.Name, 0, unrealNode.A); builder.Connect(a?.Name, unrealNode.Name, 1, unrealNode.A); builder.Connect(a?.Name, unrealNode.Name, 2, unrealNode.A); } else if (aSlot.concreteValueType == ConcreteSlotValueType.Vector2) { builder.Connect(a?.Name, unrealNode.Name, 0, unrealNode.A); builder.Connect(a?.Name, unrealNode.Name, 1, unrealNode.A); } else if (aSlot.concreteValueType == ConcreteSlotValueType.Vector1) { builder.Connect(a?.Name, unrealNode.Name, 0, unrealNode.A); } else { throw new System.Exception("FIXME: unhandled vector type"); } } if (unrealNode.B != null) { var b = unrealMaterial.ResolveExpressionReference( ValueUtil.ParseExpressionReference(unrealNode.B.FindPropertyValue("Expression")) ); var bSlot = builder.FindSlot <MaterialSlot>(b?.Name, unrealNode.Name, 0, unrealNode.B); if (bSlot.concreteValueType == ConcreteSlotValueType.Vector4 || bSlot.concreteValueType == ConcreteSlotValueType.Vector3) { builder.Connect(b?.Name, unrealNode.Name, 0, unrealNode.B); builder.Connect(b?.Name, unrealNode.Name, 1, unrealNode.B); builder.Connect(b?.Name, unrealNode.Name, 2, unrealNode.B); } else if (bSlot.concreteValueType == ConcreteSlotValueType.Vector2) { builder.Connect(b?.Name, unrealNode.Name, 1, unrealNode.B); builder.Connect(b?.Name, unrealNode.Name, 2, unrealNode.B); } else if (bSlot.concreteValueType == ConcreteSlotValueType.Vector1) { builder.Connect(b?.Name, unrealNode.Name, 1, unrealNode.B); } else { throw new System.Exception("FIXME: unhandled vector type"); } } }
public override void CreateConnections(MaterialExpressionStaticSwitchParameter unrealNode, Material unrealMaterial, ShaderGraphBuilder builder) { builder.Connect(unrealNode.A, unrealNode.Name, 1); builder.Connect(unrealNode.B, unrealNode.Name, 2); }
public override void CreateConnections(MaterialExpressionTextureSampleParameter2D unrealNode, Material unrealMaterial, ShaderGraphBuilder builder) { builder.Connect(unrealNode.Coordinates, unrealNode.Name, SampleTexture2DNode.UVInput); }
public override void CreateConnections(MaterialExpressionLinearInterpolate unrealNode, Material unrealMaterial, ShaderGraphBuilder builder) { builder.Connect(unrealNode.A, unrealNode.Name, 0); builder.Connect(unrealNode.B, unrealNode.Name, 1); builder.Connect(unrealNode.Alpha, unrealNode.Name, 2); }