Converted entity materials to new fade shader Implemented visibility system Refactored per-instance entity code to run inside monobehavior on entity instances Created state machine AI for enemy ships with basic patrol and combat routines Removed legacy AI code (controller item behaviors) Added automatic trigger group assignment for matched weapons Created ship collision system Created shield VFX and colliders
133 lines
4.1 KiB
GLSL
133 lines
4.1 KiB
GLSL
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
|
|
Shader "Aetheria/Shield"
|
|
{
|
|
Properties
|
|
{
|
|
[HDR]_Color ("Color", Color) = (1,1,1,1)
|
|
_Offset ("Offset", CUBE) = "gray" {}
|
|
_Albedo ("Albedo", CUBE) = "black" {}
|
|
_MainTex ("Albedo (RGB)", 2D) = "white" {}
|
|
_TextureGamma ("Texture Gamma", Float) = 2
|
|
_AlbedoGamma ("Albedo Gamma", Float) = 2
|
|
_Gradient ("Gradient", 2D) = "white" {}
|
|
_GradientMul ("Gradient Multiplier", Float) = 1
|
|
_Impact ("Impact Direction", Vector) = (0,0,1)
|
|
_Radius ("Impact Radius", Float) = .1
|
|
_Blend ("Impact Blend", Float) = 2
|
|
_NoiseSpeed ("Noise Speed", Float) = 2
|
|
_NoiseScale ("Noise Scale", Float) = .1
|
|
_NoiseAmplitude ("Noise Amplitude", Float) = .1
|
|
_OffsetSize ("Offset Scale", Float) = .1
|
|
_Alpha ("Alpha", Float) = 1
|
|
_DitherSampleOffset ("Dither Offset", Float) = 0
|
|
}
|
|
SubShader
|
|
{
|
|
Tags { "RenderType"="Opaque" }
|
|
LOD 200
|
|
Cull Off
|
|
|
|
CGPROGRAM
|
|
#include "Dither Functions.cginc"
|
|
// Physically based Standard lighting model, and enable shadows on all light types
|
|
#pragma surface surf Standard vertex:vert
|
|
|
|
// Use shader model 3.0 target, to get nicer looking lighting
|
|
#pragma target 3.0
|
|
|
|
sampler2D _MainTex;
|
|
sampler2D _Gradient;
|
|
samplerCUBE _Offset;
|
|
samplerCUBE _Albedo;
|
|
|
|
struct appdata_particles {
|
|
float4 vertex : POSITION;
|
|
float3 normal : NORMAL;
|
|
float2 texcoord : TEXCOORD0;
|
|
};
|
|
|
|
struct Input {
|
|
float2 uv_MainTex;
|
|
float4 screenPos;
|
|
float3 objectPos;
|
|
};
|
|
|
|
float tri(in float x){return abs(frac(x)-.5);}
|
|
float3 tri3(in float3 p){return float3( tri(p.z+tri(p.y*1.)), tri(p.z+tri(p.x*1.)), tri(p.y+tri(p.x*1.)));}
|
|
|
|
float triNoise3d(in float3 p, in float spd)
|
|
{
|
|
float z=1.4;
|
|
float rz = 0.;
|
|
float3 bp = p;
|
|
for (float i=0.; i<=2.; i++ )
|
|
{
|
|
float3 dg = tri3(bp*2.);
|
|
p += (dg+_Time.y*spd);
|
|
|
|
bp *= 1.8;
|
|
z *= 1.5;
|
|
p *= 1.2;
|
|
|
|
rz+= (tri(p.z+tri(p.x+tri(p.y))))/z;
|
|
bp += 0.14;
|
|
}
|
|
return rz;
|
|
}
|
|
|
|
void vert(inout appdata_particles v, out Input o)
|
|
{
|
|
UNITY_INITIALIZE_OUTPUT(Input,o);
|
|
o.uv_MainTex = v.texcoord.xy;
|
|
o.objectPos = v.vertex.xyz;
|
|
}
|
|
|
|
fixed4 _Color;
|
|
float3 _Impact;
|
|
float _Radius;
|
|
float _Blend;
|
|
float _NoiseSpeed;
|
|
float _NoiseScale;
|
|
float _NoiseAmplitude;
|
|
float _OffsetSize;
|
|
float _TextureGamma;
|
|
float _AlbedoGamma;
|
|
float _Alpha;
|
|
float _DitherSampleOffset;
|
|
float _GradientMul;
|
|
|
|
void surf (Input IN, inout SurfaceOutputStandard o)
|
|
{
|
|
// Albedo comes from a texture tinted by color
|
|
float a = pow(tex2D (_MainTex, IN.uv_MainTex).a, _TextureGamma);// * _Color * IN.color;
|
|
|
|
float3 pos = normalize(IN.objectPos);
|
|
float noise = triNoise3d(pos*_NoiseScale, _NoiseSpeed) * _NoiseAmplitude;
|
|
float3 offset = normalize(texCUBElod(_Offset, float4(pos + noise, 0)).rgb - float3(.5,.5,.5));
|
|
float albedo = pow(texCUBElod (_Albedo, float4(pos + offset * _OffsetSize, 0)).x, _AlbedoGamma);
|
|
|
|
float dist = dot(pos,normalize(_Impact));
|
|
a *= albedo;
|
|
float cl = a;
|
|
a *= _Alpha * smoothstep(1 - _Radius, 1 - _Radius * _Blend, dist);
|
|
|
|
// Apply screen space dithering
|
|
float2 screenUV = IN.screenPos.xy / IN.screenPos.w;
|
|
ditherClip(screenUV + _DitherSampleOffset, a);
|
|
|
|
fixed3 c = tex2D (_Gradient, cl*_GradientMul) * _Color;
|
|
|
|
o.Emission = c.rgb;
|
|
|
|
// Metallic and smoothness come from slider variables
|
|
o.Metallic = 0;
|
|
o.Smoothness = 0;
|
|
o.Alpha = 1;
|
|
}
|
|
ENDCG
|
|
}
|
|
FallBack "Diffuse"
|
|
}
|