2025-03-07 16:56:41 +01:00

186 lines
4.2 KiB
Plaintext

Shader "2Ginge/Potion/Legacy_Liquid_Potion"
{
Properties
{
//_MainTex("Albedo (RGB)", 2D) = "white" {}
[HDR]_SEmissionColor("Surface Emission Color", Color) = (1, 1, 1, 1)
[HDR]_EmissionColor("Volume Emission Color", Color) = (1,1, 1, 1)
_EmissionScalar("Emission Intensity", Float) = 1
// for later implementation
// _StencilMask ("Mask Layer", Range(0, 255)) = 1
}
SubShader
{
Pass
{
Tags{ "RenderType" = "Opaque" "Queue" = "AlphaTest+100" }
LOD 200
Cull Front
// Stencil {
// Ref 255
// WriteMask [_StencilMask]
// Comp always
// Pass replace
// }
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
// make fog work
#pragma multi_compile_fog
#include "UnityCG.cginc"
#pragma target 2.0
float _localHeight;
float _EmissionScalar;
float4 _SEmissionColor;
//in local space;
float4 _anchor;
//in local space
float4 _point;
float _level;
struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
float3 normal : NORMAL;
};
struct v2f
{
float2 uv : TEXCOORD0;
UNITY_FOG_COORDS(1)
float4 vertex : SV_POSITION;
//float dif; // now stored in localPos.w;
float4 localPos : TEXCOORD5;
float4 screenPos : TEXCOORD2;
float3 myC : TEXCOORD3;
float3 nrm : TEXCOORD4;
};
//sampler2D _MainTex;
float4 _MainTex_ST;
v2f vert(appdata v)
{
v2f o;
UNITY_INITIALIZE_OUTPUT(v2f,o);
float3 worldP = mul((float4x4)unity_ObjectToWorld, v.vertex) - mul((float4x4)unity_ObjectToWorld, float4(0, 0, 0,0));
o.localPos.w = worldP.y;
o.localPos.xyz = v.vertex.xyz;
float3 worldNormal = mul((float4x4)unity_ObjectToWorld, float4(v.normal,0));
if (dot(normalize(UNITY_MATRIX_IT_MV[2].xyz), worldNormal.xyz) < 0.0)
{
o.myC = float3(1, 0, 0);
}
else
{
o.myC = float3(0, 1, 0);
}
v.normal = normalize(_point - _anchor);
o.screenPos = ComputeScreenPos(UnityObjectToClipPos(v.vertex.xyz));
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = TRANSFORM_TEX(v.uv, _MainTex);
UNITY_TRANSFER_FOG(o, o.vertex);
return o;
}
fixed4 frag(v2f i) : SV_Target
{
if (dot(normalize(i.localPos.xyz - _point), normalize(_point - _anchor)) > 0)
{
discard;
}
// sample the texture
fixed4 col = _SEmissionColor * _EmissionScalar;
// apply fog
UNITY_APPLY_FOG(i.fogCoord, col);
return col;
}
ENDCG
}
Pass
{
Tags{ "RenderType" = "Opaque" "Queue" = "AlphaTest+100" }
LOD 200
Cull Back
// Stencil {
// Ref 0
// Comp always
// Pass replace
// }
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
// make fog work
#pragma multi_compile_fog
#include "UnityCG.cginc"
#pragma target 2.0
float _localHeight;
float _EmissionScalar;
float4 _EmissionColor;
//in local space;
float4 _anchor;
//in local space
float4 _point;
float _level;
struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
float3 normal : NORMAL;
};
struct v2f
{
float2 uv : TEXCOORD0;
UNITY_FOG_COORDS(1)
float4 vertex : SV_POSITION;
//float dif; // now stored in localPos.w;
float4 localPos : TEXCOORD5;
float4 screenPos : TEXCOORD2;
float3 myC : TEXCOORD3;
float3 nrm : TEXCOORD4;
};
//sampler2D _MainTex;
float4 _MainTex_ST;
v2f vert(appdata v)
{
v2f o;
UNITY_INITIALIZE_OUTPUT(v2f,o);
float3 worldP = mul((float4x4)unity_ObjectToWorld, v.vertex) - mul((float4x4)unity_ObjectToWorld, float4(0, 0, 0,0));
o.localPos.w = worldP.y;
o.localPos.xyz = v.vertex.xyz;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = TRANSFORM_TEX(v.uv, _MainTex);
UNITY_TRANSFER_FOG(o, o.vertex);
return o;
}
fixed4 frag(v2f i) : SV_Target
{
if (dot(normalize(i.localPos.xyz - _point), normalize(_point - _anchor)) > 0)
{
discard;
}
// sample the texture
fixed4 col = _EmissionColor * _EmissionScalar;
// apply fog
UNITY_APPLY_FOG(i.fogCoord, col);
return col;
}
ENDCG
}
}
}