コード例 #1
0
        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);
            }
        }
コード例 #5
0
        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);
            }
        }
コード例 #6
0
        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);
        }
コード例 #7
0
        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);
            }
        }
コード例 #9
0
        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);
 }
コード例 #12
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");
                }
            }
        }
コード例 #14
0
 public override void CreateConnections(MaterialExpressionStaticSwitchParameter unrealNode, Material unrealMaterial, ShaderGraphBuilder builder)
 {
     builder.Connect(unrealNode.A, unrealNode.Name, 1);
     builder.Connect(unrealNode.B, unrealNode.Name, 2);
 }
コード例 #15
0
 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);
 }