75 lines
4.1 KiB
C#
75 lines
4.1 KiB
C#
|
#if AMPLIFY_SHADER_EDITOR
|
|||
|
using UnityEngine;
|
|||
|
using System;
|
|||
|
using System.Collections.Generic;
|
|||
|
using AmplifyShaderEditor;
|
|||
|
|
|||
|
namespace AmplifyShaderEditor
|
|||
|
{
|
|||
|
[Serializable]
|
|||
|
[NodeAttributes("Vegetation Studio - Touch React", "Vegetation Studio", "Add touch react to your vegetation shader")]
|
|||
|
public class TouchReactNode : ParentNode
|
|||
|
{
|
|||
|
public static readonly string TouchReactAdjustVertex = "TouchReactAdjustVertex( {0}3({1},{2},{3}) )";
|
|||
|
protected override void CommonInit(int uniqueId)
|
|||
|
{
|
|||
|
base.CommonInit(uniqueId);
|
|||
|
AddInputPort(WirePortDataType.FLOAT3, false, "Vertex Position");
|
|||
|
AddOutputPort(WirePortDataType.FLOAT3, "Local Vertex Offset");
|
|||
|
}
|
|||
|
|
|||
|
public override void OnInputPortConnected(int inputPortId, int otherNodeId, int otherPortId, bool activateNode = true)
|
|||
|
{
|
|||
|
base.OnInputPortConnected(inputPortId, otherNodeId, otherPortId, activateNode);
|
|||
|
UpdateConnection(inputPortId);
|
|||
|
}
|
|||
|
|
|||
|
void UpdateConnection(int portId)
|
|||
|
{
|
|||
|
m_inputPorts[portId].MatchPortToConnection();
|
|||
|
//WirePortDataType outputType = (UIUtils.GetPriority(m_inputPorts[0].DataType) > UIUtils.GetPriority(m_inputPorts[1].DataType)) ? m_inputPorts[0].DataType : m_inputPorts[1].DataType;
|
|||
|
WirePortDataType outputType = m_inputPorts[0].DataType;
|
|||
|
m_outputPorts[0].ChangeType(outputType, false);
|
|||
|
}
|
|||
|
|
|||
|
public override string GenerateShaderForOutput(int outputId, ref MasterNodeDataCollector dataCollector,
|
|||
|
bool ignoreLocalvar)
|
|||
|
{
|
|||
|
string valueInput1 = m_inputPorts[0].GenerateShaderForOutput(ref dataCollector, WirePortDataType.FLOAT4, ignoreLocalvar, true);
|
|||
|
//dataCollector.AddToPragmas(UniqueId, "multi_compile TOUCH_BEND_ON __");
|
|||
|
|
|||
|
List<string> touchReactAdjustVertexFunctionStringList = new List<string>();
|
|||
|
//touchReactAdjustVertexFunctionStringList.Add("#ifdef TOUCH_BEND_ON");
|
|||
|
touchReactAdjustVertexFunctionStringList.Add("sampler2D _TouchReact_Buffer;");
|
|||
|
touchReactAdjustVertexFunctionStringList.Add("float4 _TouchReact_Pos;");
|
|||
|
//touchReactAdjustVertexFunctionStringList.Add("#endif");
|
|||
|
touchReactAdjustVertexFunctionStringList.Add(" ");
|
|||
|
touchReactAdjustVertexFunctionStringList.Add("float3 TouchReactAdjustVertex(float3 pos)");
|
|||
|
touchReactAdjustVertexFunctionStringList.Add("{");
|
|||
|
//touchReactAdjustVertexFunctionStringList.Add("#ifdef TOUCH_BEND_ON");
|
|||
|
|
|||
|
touchReactAdjustVertexFunctionStringList.Add(" float3 worldPos = mul(unity_ObjectToWorld, float4(pos,1));");
|
|||
|
touchReactAdjustVertexFunctionStringList.Add(" float2 tbPos = saturate((float2(worldPos.x,-worldPos.z) - _TouchReact_Pos.xz)/_TouchReact_Pos.w);");
|
|||
|
touchReactAdjustVertexFunctionStringList.Add(" float2 touchBend = tex2Dlod(_TouchReact_Buffer, float4(tbPos,0,0));");
|
|||
|
touchReactAdjustVertexFunctionStringList.Add(" touchBend.y *= 1.0 - length(tbPos - 0.5) * 2;");
|
|||
|
touchReactAdjustVertexFunctionStringList.Add(" if(touchBend.y > 0.01)");
|
|||
|
touchReactAdjustVertexFunctionStringList.Add(" {");
|
|||
|
touchReactAdjustVertexFunctionStringList.Add(" worldPos.y = min(worldPos.y, touchBend.x * 10000);");
|
|||
|
touchReactAdjustVertexFunctionStringList.Add(" }");
|
|||
|
touchReactAdjustVertexFunctionStringList.Add("");
|
|||
|
touchReactAdjustVertexFunctionStringList.Add(" float3 changedLocalPos = mul(unity_WorldToObject, float4(worldPos,1)).xyz;");
|
|||
|
|
|||
|
touchReactAdjustVertexFunctionStringList.Add(" return changedLocalPos - pos;");
|
|||
|
//touchReactAdjustVertexFunctionStringList.Add("#else");
|
|||
|
//touchReactAdjustVertexFunctionStringList.Add(" return float3(0,0,0);");
|
|||
|
//touchReactAdjustVertexFunctionStringList.Add("#endif");
|
|||
|
touchReactAdjustVertexFunctionStringList.Add("}");
|
|||
|
|
|||
|
dataCollector.AddFunction(TouchReactAdjustVertex,touchReactAdjustVertexFunctionStringList.ToArray(),true);
|
|||
|
|
|||
|
return "TouchReactAdjustVertex(" + valueInput1 + ".xyz)";
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
#endif
|