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
113 lines
3.8 KiB
Text
113 lines
3.8 KiB
Text
// Upgrade NOTE: upgraded instancing buffer 'Props' to new syntax.
|
|
|
|
Shader "Aetheria/View Dependent Emissive Glow Fade" {
|
|
Properties {
|
|
_Color ("Color", Color) = (1,1,1,1)
|
|
_MainTex ("Albedo (RGB)", 2D) = "white" {}
|
|
_BumpMap ("Bumpmap", 2D) = "bump" {}
|
|
_BumpPower ("Bump Power", Range (0.01,5)) = 1
|
|
_Rotation ("Normal Rotation", Float) = 0
|
|
_Glossiness ("Smoothness", Range(0,1)) = 0.5
|
|
_MetallicGlossMap("Metallic", 2D) = "white" {}
|
|
_EmissionColor ("Emission Color", Color) = (1,1,1,1)
|
|
_Emission ("Emission Strength", Float) = 0
|
|
_EmissionFresnel ("Emission Fresnel", Float) = 1.0
|
|
_EmissionRoughnessFresnelPower("Emission Roughness Fresnel Power", Float) = 1.0
|
|
[MaterialToggle] _ReverseRim("ReverseRim", Float) = 0
|
|
|
|
_Fade ("Fade", Range(0.0, 1.0)) = 0.0
|
|
_FadeSharpness ("Fade Sharpness", Float) = 1.0
|
|
_FadeTex ("Fade Texture", 2D) = "white" {}
|
|
_FadeEdge ("Fade Edge", Range(0.0, 1.0)) = 1.0
|
|
[HDR] _EdgeColor ("Edge Color", Color) = (1,1,1,1)
|
|
}
|
|
SubShader {
|
|
Tags { "RenderType"="Opaque" }
|
|
LOD 200
|
|
|
|
CGPROGRAM
|
|
#include "Dither Functions.cginc"
|
|
// Physically based Standard lighting model, and enable shadows on all light types
|
|
#pragma surface surf Standard fullforwardshadows
|
|
//#pragma multi_compile REVERSE_RIM_ON REVERSE_RIM_OFF
|
|
|
|
// Use shader model 3.0 target, to get nicer looking lighting
|
|
#pragma target 3.0
|
|
|
|
sampler2D _MainTex;
|
|
sampler2D _BumpMap;
|
|
sampler2D _MetallicGlossMap;
|
|
sampler2D _FadeTex;
|
|
|
|
struct Input {
|
|
float2 uv_MainTex;
|
|
float2 uv_BumpMap;
|
|
float2 uv_FadeTex;
|
|
float3 viewDir;
|
|
float3 worldNormal;
|
|
float4 screenPos;
|
|
INTERNAL_DATA
|
|
};
|
|
|
|
half _Glossiness;
|
|
half _Metallic;
|
|
fixed4 _Color;
|
|
fixed4 _EmissionColor;
|
|
float _BumpPower;
|
|
float _Rotation;
|
|
float _Emission;
|
|
float _EmissionFresnel;
|
|
float _EmissionRoughnessFresnelPower;
|
|
half _ReverseRim;
|
|
|
|
half _Fade;
|
|
half _FadeSharpness;
|
|
half _FadeEdge;
|
|
half3 _EdgeColor;
|
|
|
|
// 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) {
|
|
// Albedo comes from a texture tinted by color
|
|
half f = tex2D (_FadeTex, IN.uv_FadeTex).r + (1-_Fade);
|
|
half3 e = _EdgeColor * smoothstep(1 - _FadeEdge, 1, f);
|
|
o.Emission = e;
|
|
// Apply screen space dithering
|
|
float2 screenUV = IN.screenPos.xy / IN.screenPos.w;
|
|
ditherClip(screenUV, _FadeSharpness - f * _FadeSharpness);
|
|
|
|
fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color;
|
|
o.Albedo = c.rgb;
|
|
|
|
float sinX = sin ( _Rotation );
|
|
float cosX = cos ( _Rotation );
|
|
float sinY = sin ( _Rotation );
|
|
float2x2 rotationMatrix = float2x2( cosX, -sinX, sinY, cosX);
|
|
|
|
fixed3 normal = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap));
|
|
normal.xy = mul ( normal.xy, rotationMatrix);
|
|
normal.z = normal.z / _BumpPower;
|
|
normal = normalize(normal);
|
|
o.Normal = normal;
|
|
|
|
// Metallic and smoothness come from a texture
|
|
float2 metalSmooth = tex2D (_MetallicGlossMap, IN.uv_MainTex).ra;
|
|
o.Metallic = metalSmooth.x;
|
|
o.Smoothness = metalSmooth.y * _Glossiness;
|
|
|
|
half rim = saturate(dot (normalize(IN.viewDir), o.Normal));
|
|
if(_ReverseRim > .5)
|
|
rim = 1 - rim;
|
|
o.Emission += _Emission * _EmissionColor * pow(rim,_EmissionFresnel / pow(metalSmooth.x, _EmissionRoughnessFresnelPower));
|
|
|
|
o.Alpha = c.a;
|
|
}
|
|
ENDCG
|
|
}
|
|
FallBack "Diffuse"
|
|
}
|