Beispiel #1
0
        public override SWOutput Process(SWNodeBase _node)
        {
            node = _node;
            //CommentHead ();

            SWOutputSub sub = new SWOutputSub();

            sub.type      = SWDataType._UV;
            sub.processor = this;
            if (node.data.coordMode == SWCoordMode.Default)
            {
                sub.param = "i._uv_MainTex";
            }
            else if (node.data.coordMode == SWCoordMode.Sprite)
            {
                sub.param = "i._uv_STD";
            }
            sub.uvOp     = node.data.effectDataUV.op;
            sub.opFactor = string.Format("{0}*({1})", sub.opFactor, node.data.effectDataUV.param);

            SWOutput sw = new SWOutput();

            sw.outputs.Add(sub);
            return(sw);
        }
Beispiel #2
0
        public virtual SWOutput Process(SWNodeBase _node)
        {
            node = _node;
            Child_Process();
            if (!ProcessCondition())
            {
                return(result);
            }

            CommentHead();

            UVParamInit();
            GoOutput(SWNodeType.remap);

            TRS();

            GoOutput(SWNodeType.uv, "add");


            FinalUVStage();
            //iNormal
            TextureSample(string.Format("color{0}", node.data.iName), true, node.TextureShaderName(), uvParam, node.data.useNormal);
            GoOutput(SWNodeType.uv, "lerp");
            AfterAllTextureSample();


            GoOutput(SWNodeType.alpha);
            SWOutputSub sub = new SWOutputSub();

            ProcessSub(sub);
            return(result);
        }
Beispiel #3
0
 public override void ProcessOutputSingle(SWShaderProcessBase processor, SWOutputSub item, string keyword = "")
 {
     base.ProcessOutputSingle(processor, item, keyword);
     if (keyword == "add")
     {
         //UV加上去,一个影像
         if (item.type == SWDataType._UV && item.uvOp == SWUVop.add)
         {
             processor.StringAddLine(string.Format("\t\t\t\t{0} = {0} + {1}*{2};", processor.uvParam, item.param, item.opFactor));
         }
     }
     else if (keyword == "lerp")
     {
         //原影像和 UV后影像叠加
         if (item.type == SWDataType._UV && item.uvOp == SWUVop.lerp)
         {
             //iNormal
             processor.TextureSample(string.Format("color{0}_{1}", processor.node.data.iName, item.param),
                                     true, processor.node.TextureShaderName(), string.Format("{0}+{1}", processor.uvParam, item.param, processor.node.data.useNormal));
             processor.StringAddLine(string.Format("\t\t\t\tcolor{0} = lerp(color{0},color{0}_{1},clamp({2},0,1));    ", processor.node.data.iName, item.param, item.opFactor));
         }
     }
     else if (keyword == "replace")
     {
         //UV加上去,一个影像
         if (item.type == SWDataType._UV && item.uvOp == SWUVop.replace)
         {
             processor.StringAddLine(string.Format("\t\t\t\t{0} = lerp({0},{1},{2});", processor.uvParam, item.param, item.opFactor));
         }
     }
 }
Beispiel #4
0
 public virtual void ProcessSub(SWOutputSub sub)
 {
     sub.processor = this;
     result.outputs.Add(sub);
     sub.depth   = node.data.depth;
     sub.UVparam = string.Format("uv{0}", node.data.iName);
 }
        public override void ProcessSub(SWOutputSub sub)
        {
            base.ProcessSub(sub);
            string alphaParam = string.Format("aplha{0}", node.data.iName);

            StringAddLine(string.Format("\t\t\t\tfloat {0} = {1} +{2}*({3}) + color{4}.{5};",
                                        alphaParam,
                                        node.data.effectData.pop_startValue.ToStringEX(),
                                        node.data.effectData.pop_speed.ToStringEX(),
                                        node.data.effectData.pop_Param,
                                        node.data.iName,
                                        node.data.effectData.pop_channel.ToString()));

            sub.type     = SWDataType._Alpha;
            sub.param    = alphaParam;
            sub.op       = node.data.effectDataColor.op;
            sub.opFactor = string.Format("{0}*({1})", sub.opFactor, node.data.effectDataColor.param);
            foreach (var outp in childOutputs)
            {
                foreach (var item in outp.outputs)
                {
                    if (item.type == SWDataType._Remap)
                    {
                        StringAddLine(string.Format("\t\t\t\tcolor{0} = float4(color{0}.rgb,color{0}.a*{1});", node.data.iName, item.opFactor));
                    }
                }
            }
        }
        protected void ProcessOutpBlur(SWShaderProcessBase processor, SWOutputSub sub)
        {
            string uvParam = string.Format("uv{0}", processor.node.data.iName);

            string param = string.Format("retroFactor{0}{1}", processor.node.data.iName, sub.node.data.iName);

            processor.StringAddLine(string.Format("\t\t\t\t float {0} = {1}*max(rect{2}.z,rect{2}.w);", param, sub.opFactor, processor.node.data.iName));

            processor.StringAddLine(string.Format("\t\t\t\t{0} = float2({0}.x - {0}.x%{1} + {1}*0.5 ,{0}.y - {0}.y%{1} + {1}*0.5);", uvParam, param));
        }
        public override void ProcessOutputSingle(SWShaderProcessBase processor, SWOutputSub item, string keyword = "")
        {
            base.ProcessOutputSingle(processor, item, keyword);
            string uvParam = string.Format("uv{0}", processor.node.data.iName);

            string param = string.Format("retroFactor{0}{1}", processor.node.data.iName, item.node.data.iName);

            processor.StringAddLine(string.Format("\t\t\t\tfloat {0} = {1}*max(rect{2}.z,rect{2}.w);", param, item.opFactor, processor.node.data.iName));
            processor.StringAddLine(string.Format("\t\t\t\t{0} = Retro({0},{1});", uvParam, param));
        }
Beispiel #8
0
 public override void ProcessSub(SWOutputSub sub)
 {
     base.ProcessSub(sub);
     StringAddLine(string.Format("\t\t\t\t{0} = -(color{1}.r*{2} + color{1}.g*{3} + color{1}.b*{4} +  color{1}.a*{5});    ",
                                 uvParam, node.data.iName,
                                 ToShader(node.data.effectDataUV.amountR), ToShader(node.data.effectDataUV.amountG), ToShader(node.data.effectDataUV.amountB), ToShader(node.data.effectDataUV.amountA)));
     sub.type     = SWDataType._UV;
     sub.param    = string.Format("uv{0}", node.data.iName);
     sub.opFactor = string.Format("{0}*({1})", sub.opFactor, node.data.effectDataUV.param);
     sub.uvOp     = node.data.effectDataUV.op;
 }
 public override void ProcessOutputSingle(SWShaderProcessBase processor, SWOutputSub item, string keyword = "")
 {
     base.ProcessOutputSingle(processor, item, keyword);
     if (keyword == "final")
     {
         ProcessFinal(processor, item);
     }
     else
     {
         Process(processor, item);
     }
 }
Beispiel #10
0
 public override void ProcessSub(SWOutputSub sub)
 {
     base.ProcessSub(sub);
     StringAddLine(string.Format("\t\t\t\tfloat4 rootTexColor = color{0};", node.data.iName));
     StringAddLine(string.Format("\t\t\t\tcolor{0} = color{0}*_Color{0};", node.data.iName));
     sub.depth    = 0;
     sub.type     = SWDataType._Color;
     sub.op       = SWOutputOP.blend;
     sub.param    = string.Format("color{0}", node.data.iName);
     sub.opFactor = "1";
     colors.Add(sub);
 }
        public override SWOutput Process(SWNodeBase _node)
        {
            node = _node;
            SWOutput    sw  = new SWOutput();
            SWOutputSub sub = new SWOutputSub();

            sub.type      = SWDataType._UV;
            sub.processor = this;
            sub.opFactor  = string.Format("({0}*({1})*0.2)", node.data.retro, node.data.retroParam);
            sw.outputs.Add(sub);
            return(sw);
        }
Beispiel #12
0
        /// <summary>
        /// Add:Keep alpha,only add rgb
        /// Mul:Simple multiple color
        /// Lerp:
        /// </summary>
        public override void ProcessOutputSingle(SWShaderProcessBase processor, SWOutputSub item, string keyword = "")
        {
            base.ProcessOutputSingle(processor, item, keyword);
            if (keyword == "first")
            {
                //processor.StringAddLine (string.Format ("\t\t\t\tresult = {0}*{1};", item.param, item.opFactor));
                processor.StringAddLine(string.Format("\t\t\t\tresult = float4({0}.rgb,{0}.a*{1});", item.param, item.opFactor));
                return;
            }

            if (item.op == SWOutputOP.blend)
            {
                processor.StringAddLine(string.Format("\t\t\t\tresult = lerp(result,float4({0}.rgb,1),clamp({0}.a*{1},0,1));    ",
                                                      item.param, item.opFactor));
            }
            else if (item.op == SWOutputOP.blendInner)
            {
                processor.StringAddLine(string.Format("\t\t\t\tresult = lerp(result,float4({0}.rgb,rootTexColor.a),clamp({0}.a*{1},0,1));    ",
                                                      item.param, item.opFactor));
            }
            else if (item.op == SWOutputOP.add)
            {
                processor.StringAddLine(string.Format("\t\t\t\tresult = result+float4({0}.rgb*{0}.a*{1},{0}.a*{1});", item.param, item.opFactor));
            }
            else if (item.op == SWOutputOP.addInner)
            {
                processor.StringAddLine(string.Format("\t\t\t\tresult = result+float4({0}.rgb*{0}.a*{1},{0}.a*{1}*(rootTexColor.a - result.a));", item.param, item.opFactor));
            }
            else if (item.op == SWOutputOP.mul)
            {
                processor.StringAddLine(string.Format("result = result *lerp(float4(1,1,1,1),{0},{0}.a*{1});", item.param, item.opFactor));
            }
            else if (item.op == SWOutputOP.mulIntersect)
            {
                processor.StringAddLine(string.Format("\t\t\t\tresult = result*{0}*{1};", item.param, item.opFactor));
            }
            else if (item.op == SWOutputOP.mulRGB)
            {
                processor.StringAddLine(string.Format("\t\t\t\tresult = float4(result.rgb*lerp(float3(1,1,1),{0}.rgb,{1}),result.a);", item.param, item.opFactor));
            }
            else
            {
                string func = string.Format("Blend{0}", item.op.ToString());
                processor.StringAddLine(string.Format("\t\t\t\tresult3 = {2}({0}.rgb,{1}.rgb);", "result", item.param, func));
                processor.StringAddLine(string.Format("\t\t\t\tminA = min(result.a,{0}.a);", item.param));
                processor.StringAddLine(string.Format("\t\t\t\tresult3 = result.rgb*(result.a-minA)+{0}.rgb*({0}.a-minA)+minA*result3;", item.param));
                processor.StringAddLine(string.Format("\t\t\t\tresult2 = float4(result3,result.a+{0}.a*(1-result.a));", item.param));
                processor.StringAddLine(string.Format("\t\t\t\tresult = lerp(result,result2,{0});", item.opFactor));
            }
        }
        /// <summary>
        /// Add:Keep alpha,only add rgb
        /// Mul:Simple multiple color
        /// Lerp:
        /// </summary>
        public override void ProcessOutputSingle(SWShaderProcessBase processor, SWOutputSub item, bool first)
        {
            base.ProcessOutputSingle(processor, item, first);
            if (first)
            {
                processor.StringAddLine(string.Format("\t\t\t\tresult = {0};", item.param, item.opFactor));
                return;
            }

            if (item.op == SWOutputOP.blend)
            {
                processor.StringAddLine(string.Format("\t\t\t\tresult = lerp(result,float4({0}.rgb,1),clamp({0}.a*{1},0,1));    ",
                                                      item.param, item.opFactor));
            }
            if (item.op == SWOutputOP.blendInner)
            {
                processor.StringAddLine(string.Format("\t\t\t\tresult = lerp(result,float4({0}.rgb,rootTexColor.a),clamp({0}.a*{1},0,1));    ",
                                                      item.param, item.opFactor));
//				processor.StringAddLine( string.Format ("\t\t\t\tresult = lerp(result,float4({0}.rgb,result.a),clamp({0}.a*{1},0,1));    ",
//					item.param, item.opFactor));
            }


            if (item.op == SWOutputOP.add)
            {
                processor.StringAddLine(string.Format("\t\t\t\tresult = result+float4({0}.rgb*{0}.a*{1},{0}.a*{1});", item.param, item.opFactor));
            }
            if (item.op == SWOutputOP.addInner)
            {
                processor.StringAddLine(string.Format("\t\t\t\tresult = result+float4({0}.rgb*{0}.a*{1},{0}.a*{1}*(rootTexColor.a - result.a));", item.param, item.opFactor));
                //processor.StringAddLine( string.Format("\t\t\t\tresult = result+float4({0}.rgb*{0}.a*{1},0);",item.param,item.opFactor));
            }



            if (item.op == SWOutputOP.mul)
            {
                processor.StringAddLine(string.Format("result = result *lerp(float4(1,1,1,1),{0},{0}.a*{1});", item.param, item.opFactor));
            }
            if (item.op == SWOutputOP.mulIntersect)
            {
                processor.StringAddLine(string.Format("\t\t\t\tresult = result*{0}*{1};", item.param, item.opFactor));
            }
        }
 public override void ProcessSub(SWOutputSub sub)
 {
     base.ProcessSub(sub);
     StringAddLine(string.Format("\t\t\t\tcolor{0} = color{0}*_Color{0};", node.data.iName));
     sub.type     = SWDataType._Color;
     sub.param    = string.Format("color{0}", node.data.iName);
     sub.op       = node.data.effectDataColor.op;
     sub.opFactor = string.Format("{0}*({1})", sub.opFactor, node.data.effectDataColor.param);
     foreach (var outp in childOutputs)
     {
         foreach (var item in outp.outputs)
         {
             if (item.type == SWDataType._Remap)
             {
                 StringAddLine(string.Format("\t\t\t\tcolor{0} = float4(color{0}.rgb,color{0}.a*{1});", node.data.iName, item.opFactor));
             }
         }
     }
 }
        public override SWOutput Process(SWNodeBase _node)
        {
            node = _node;
            CommentHead();
            Child_Process();

            StringAddLine(string.Format("\t\t\t\tfloat4 color{0} = _Color{0};", node.data.iName));
            GoOutput(SWNodeType.alpha);



            SWOutputSub sub = new SWOutputSub();

            sub.processor = this;
            sub.depth     = node.data.depth;
            sub.param     = string.Format("color{0}", node.data.iName);
            sub.op        = node.data.effectDataColor.op;
            sub.opFactor  = string.Format("{0}*({1})", sub.opFactor, node.data.effectDataColor.param);
            result.outputs.Add(sub);
            return(result);
        }
Beispiel #16
0
 public virtual void ProcessOutputSingle(SWShaderProcessBase processor, SWOutputSub item, string keyword = "")
 {
 }
        public override SWOutput Process(SWNodeBase _node)
        {
            //1: init
            node = _node;
            Child_Process();
            CommentHead();

            //2: port belong
            PortBelong();
            SWOutputSub[] subs = new SWOutputSub[node.data.childPortNumber];
            foreach (var op in childOutputs)
            {
                foreach (var item in op.outputs)
                {
                    int port = portBelongs [item.node.data.id];
                    subs [port] = item;
                }
            }

            //3: param
            var dataCode = SWWindowMain.Instance.dataCode.CodeOfName(node.data.code);

            string param = string.Format("v{0}", node.data.iName);

            if (dataCode.output.GetType() == SWDataType._Color)
            {
                StringAddLine(string.Format("\t\t\t\tfloat4 {0} = float4(0,0,0,0);", param));
            }
            else if (dataCode.output.GetType() == SWDataType._UV)
            {
                StringAddLine(string.Format("\t\t\t\tfloat2 {0} = float2(0,0);", param));
            }
            else if (dataCode.output.GetType() == SWDataType._Alpha)
            {
                StringAddLine(string.Format("\t\t\t\tfloat {0} = 0;", param));
            }

            List <string> list      = new List <string> ();
            int           portIndex = 0;

            for (int i = 0; i < dataCode.inputs.Count; i++)
            {
                var    item = dataCode.inputs [i];
                string str  = "";
                if (item.IsParam())
                {
                    var paramUse = node.data.GetCodeParamUse(item.name);
                    if (item.type == CodeParamType.CustomParam)
                    {
                        str = paramUse.v;
                    }
                    else
                    {
                        str = string.Format("{0}_{1}", node.data.iName, paramUse.n);
                    }
                }
                else
                {
                    str = subs[portIndex].param + "*" + subs[portIndex].opFactor;
                    portIndex++;
                }
                list.Add(str);
            }

            if (dataCode.IsFunction())
            {
                string func = dataCode.name + "(";
                for (int i = 0; i < dataCode.inputs.Count; i++)
                {
                    if (i != 0)
                    {
                        func += ",";
                    }
                    func += list[i];
                }
                func += ")";

                StringAddLine(string.Format("\t\t\t\t{0} = {1};", param, func));
            }
            else
            {
                string content = "\t\t\t\t" + dataCode.code;
                content = content.Replace("\n", "\n\t\t\t\t");
                for (int i = 0; i < dataCode.inputs.Count; i++)
                {
                    content = SWRegex.ReplaceWord(content, dataCode.inputs[i].name, list[i]);
                }
                content = SWRegex.ReplaceWord(content, dataCode.output.name, param);
                StringAddLine(content);
            }



            SWOutputSub sub = new SWOutputSub();

            sub.processor = this;

            sub.type = node.data.GetCodeType();
            //sub.type = window.data.CodeOfName(node.data.code).output.type;
            sub.param = param;

            if (sub.type == SWDataType._Color)
            {
                sub.data     = new SWDataNode(SWNodeType.color);
                sub.depth    = node.data.depth;
                sub.op       = node.data.effectDataColor.op;
                sub.opFactor = string.Format("{0}*({1})", sub.opFactor, node.data.effectDataColor.param);
            }
            else if (sub.type == SWDataType._UV)
            {
                sub.data     = new SWDataNode(SWNodeType.uv);
                sub.opFactor = string.Format("{0}*({1})", sub.opFactor, node.data.effectDataUV.param);
                sub.uvOp     = node.data.effectDataUV.op;
            }
            else if (sub.type == SWDataType._Alpha)
            {
                sub.data     = new SWDataNode(SWNodeType.alpha);
                sub.op       = node.data.effectDataColor.op;
                sub.opFactor = string.Format("{0}*({1})", sub.opFactor, node.data.effectDataColor.param);
                sub.data.effectData.pop_final = node.data.effectData.pop_final;
            }
            sub.data.id = node.data.id;

            SWOutput result = new SWOutput();

            result.outputs.Add(sub);
            return(result);
        }
        protected void ProcessOutpBlur(SWShaderProcessBase processor, SWOutputSub sub)
        {
            string uvParam = string.Format("uv{0}", processor.node.data.iName);

            processor.StringAddLine(string.Format("\t\t\t\t\tcolor{0} = Blur(_{1},{2},{3});", processor.node.data.iName, processor.node.TextureShaderName(), uvParam, sub.opFactor));
        }
Beispiel #19
0
        public override void ProcessSub(SWOutputSub sub)
        {
            int    MaxCount   = SWNodeMixer.Gradient_MaxFrameCount();
            string alphaParam = string.Format("mixer{0}", node.data.iName);

            StringAddLine(string.Format("\t\t\t\tfloat {0} = {1} +{2}*({3}) + color{4}.{5};",
                                        alphaParam,
                                        node.data.effectData.pop_startValue,
                                        node.data.effectData.pop_speed,
                                        node.data.effectData.pop_Param,
                                        node.data.iName,
                                        node.data.effectData.pop_channel.ToString()));
            StringAddLine(string.Format("\t\t\t\t{0} = clamp({0},{1},{2});", alphaParam, node.data.effectData.pop_min, node.data.effectData.pop_max));



            for (int i = 0; i < node.data.gradients.Count; i++)
            {
                string graParam = string.Format("gra{0}_{1}", node.data.iName, i);
                var    frames   = node.data.gradients [i].frames;
                if (frames.Count == 0)
                {
                    StringAddLine(string.Format("\t\t\t\tfloat {0} = 0;", graParam));
                }
                else
                {
                    string strList = (string.Format("\t\t\t\tfloat {0}ListTime[{1}] = {{", graParam, MaxCount));
                    for (int j = 0; j < MaxCount; j++)
                    {
                        if (j < frames.Count)
                        {
                            strList += ("" + node.data.gradients [i].frames [j].time);
                        }
                        else
                        {
                            strList += ("-1");
                        }
                        if (j != MaxCount - 1)
                        {
                            strList += (",");
                        }
                    }
                    strList += ("};");
                    StringAddLine(strList);


                    strList = (string.Format("\t\t\t\tfloat {0}ListValue[{1}] = {{", graParam, MaxCount));
                    for (int j = 0; j < MaxCount; j++)
                    {
                        if (j < frames.Count)
                        {
                            strList += ("" + node.data.gradients [i].frames [j].value);
                        }
                        else
                        {
                            strList += ("-1");
                        }
                        if (j != MaxCount - 1)
                        {
                            strList += (",");
                        }
                    }
                    strList += ("};");
                    StringAddLine(strList);

                    StringAddLine(string.Format("\t\t\t\tfloat {0} = GradientEvaluate({0}ListTime,{0}ListValue,{1},{2});", graParam, frames.Count, alphaParam));
                }
            }

            PortBelong();

            foreach (var op in childOutputs)
            {
                foreach (var item in op.outputs)
                {
                    int    index    = portBelongs [item.node.data.id];
                    string graParam = string.Format("gra{0}_{1}", node.data.iName, index);
                    item.opFactor = string.Format("{0}*{1}", item.opFactor, graParam);
                    result.outputs.Add(item);
                }
            }
        }
Beispiel #20
0
 public virtual void ProcessOutputSingle(SWShaderProcessBase processor, SWOutputSub item, bool b)
 {
 }
 public override void ProcessSub(SWOutputSub sub)
 {
     base.ProcessSub(sub);
 }
 public void Blur(SWShaderProcessBase processor, SWOutputSub sub, string colorName, string texName, string uv)
 {
     processor.StringAddLine(string.Format("\t\t\t\t{1} = Blur(_{2},{3},{4}*rect{0}.zw);",
                                           processor.node.data.iName, colorName, texName, uv, sub.opFactor));
 }