-
Notifications
You must be signed in to change notification settings - Fork 3
/
EnergyPromoDoubleSided.shader
103 lines (79 loc) · 2.84 KB
/
EnergyPromoDoubleSided.shader
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
// Upgrade NOTE: upgraded instancing buffer 'Props' to new syntax.
Shader "Custom/EnergyPromoDoubleSided" {
Properties {
[hdr]_Color ("Color", Color) = (1,1,1,1)
[hdr]_Color2 ("Color2", Color) = (1,1,1,1)
[NoScaleOffset]_noiseTex ("Noise tex (RGB)", 2D) = "white" {}
[NoScaleOffset]_Ramp ("Ramp (RGB)", 2D) = "white" {}
_Scale ("Scale1", Float) = 0.5
_speed ("Effect Speed", Float) = 1
_vertOffset ("Vertex Offset", Float) = 1
}
SubShader {
Tags { "RenderType"="Opaque" "DisableBatching" = "True"}
LOD 200
//Blend One One
Cull off
CGPROGRAM
// Physically based Standard lighting model, and enable shadows on all light types
#pragma surface surf Standard fullforwardshadows vertex:vert
#pragma multi_compile_instancing
#pragma instancing_options procedural:setup
// Use shader model 3.0 target, to get nicer looking lighting
#pragma target 3.0
sampler2D _Ramp, _noiseTex;
//sampler3D _3dTex;
fixed4 _Color;
fixed4 _Color2;
float _Scale, _speed;
half _vertOffset, _vertScale;
fixed4 _vertSpeed;
struct Input {
float2 uv_noiseTex;
float3 viewDir;
float3 worldPos;
INTERNAL_DATA
};
#ifdef UNITY_PROCEDURAL_INSTANCING_ENABLED
StructuredBuffer<float4x4> _ltwBuffer;
#endif
void setup()
{
#ifdef UNITY_PROCEDURAL_INSTANCING_ENABLED
unity_ObjectToWorld = _ltwBuffer[unity_InstanceID];
unity_WorldToObject = unity_ObjectToWorld;
unity_WorldToObject._14_24_34 *= -1;
unity_WorldToObject._11_22_33 = 1.0f / unity_WorldToObject._11_22_33;
#endif
}
void vert (inout appdata_full v, out Input o) {
UNITY_INITIALIZE_OUTPUT(Input,o);
float4 uvs1 = v.texcoord;
uvs1.y -= _Time*30*_speed;
uvs1.x -= _Time*5*_speed;
float4 tex = tex2Dlod(_noiseTex, uvs1 * _Scale);
v.vertex.xyz += lerp(-_vertOffset * v.normal, _vertOffset * v.normal, tex.x);
}
// Add instancing support for this shader. You need to check 'Enable Instancing' on materials that use the shader.
// See https://docs.unity3d.com/Manual/GPUInstancing.html for more information about instancing.
// #pragma instancing_options assumeuniformscaling
UNITY_INSTANCING_BUFFER_START(Props)
// put more per-instance properties here
UNITY_INSTANCING_BUFFER_END(Props)
void surf (Input IN, inout SurfaceOutputStandard o) {
half rim = 1.0 - saturate(dot(normalize(IN.viewDir), o.Normal));
float3 modelPos = mul (unity_ObjectToWorld, float4(0,0,0,1));
float2 uvs1 = IN.uv_noiseTex;
uvs1.y -= _Time*30*_speed;
uvs1.x -= _Time*5*_speed;
float distortion = tex2D(_noiseTex, uvs1*_Scale).x;
float2 uvs2 = float2(rim + (distortion*0.5) + ((distortion)*pow(rim,2)), 0);
float ramp = tex2D(_Ramp, uvs2).r;
float3 rim2 = pow(rim, 4) * _Color;
float3 col = lerp(_Color2, _Color*ramp, ramp);
o.Emission = col + rim2*0.05;
}
ENDCG
}
FallBack "Diffuse"
}