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); }
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); }
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)); } } }
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)); }
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); } }
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); }
/// <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); }
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)); }
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); } } }
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)); }