2022-07-19 18:55:17 +01:00
|
|
|
Shader "Aetheria/Asteroid"
|
|
|
|
|
{
|
|
|
|
|
Properties
|
|
|
|
|
{
|
|
|
|
|
[NoScaleOffset] _MainTex ("Texture", 2D) = "white" {}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CGINCLUDE
|
|
|
|
|
|
|
|
|
|
#pragma multi_compile_instancing
|
|
|
|
|
#pragma vertex vert
|
|
|
|
|
#pragma fragment frag
|
|
|
|
|
#include "UnityCG.cginc" // for UnityObjectToWorldNormal
|
2022-07-21 21:40:44 +01:00
|
|
|
#include_with_pragmas "Assets/Shaders/Volumetric.cginc"
|
2022-07-19 18:55:17 +01:00
|
|
|
uniform float _AsteroidVerticalOffset;
|
|
|
|
|
|
|
|
|
|
struct v2f
|
|
|
|
|
{
|
|
|
|
|
float2 uv : TEXCOORD0;
|
|
|
|
|
half3 ambient : COLOR0;
|
|
|
|
|
float4 vertex : SV_POSITION;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
v2f vert (appdata_base v)
|
|
|
|
|
{
|
|
|
|
|
v2f o;
|
|
|
|
|
UNITY_SETUP_INSTANCE_ID(v);
|
|
|
|
|
float3 worldOrigin = mul(unity_ObjectToWorld, float4(0, 0, 0, 1.0)).xyz;
|
|
|
|
|
float3 worldPos = mul(unity_ObjectToWorld, float4(v.vertex.xyz, 1.0)).xyz;
|
|
|
|
|
const float2 uv = getUV(worldOrigin.xz);
|
|
|
|
|
const float surfaceDisp = tex2Dlod(_NebulaSurfaceHeight, half4(uv, 0, 0)).r;
|
|
|
|
|
worldPos.y += _AsteroidVerticalOffset - surfaceDisp;
|
|
|
|
|
o.vertex = mul(UNITY_MATRIX_VP, float4(worldPos, 1.0));
|
|
|
|
|
o.uv = v.texcoord;
|
|
|
|
|
// get vertex normal in world space
|
|
|
|
|
half3 worldNormal = UnityObjectToWorldNormal(v.normal);
|
|
|
|
|
|
|
|
|
|
o.ambient = VolumeSampleColorSimple(worldPos, worldNormal).rgb * 10;
|
|
|
|
|
return o;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
sampler2D _MainTex;
|
|
|
|
|
|
|
|
|
|
fixed4 frag (v2f i) : SV_Target
|
|
|
|
|
{
|
|
|
|
|
// sample texture
|
|
|
|
|
fixed4 col = tex2D(_MainTex, i.uv);
|
|
|
|
|
// multiply by lighting
|
|
|
|
|
col.rgb *= i.ambient;
|
|
|
|
|
return col;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
float4 frag_shadow(v2f i) : COLOR
|
|
|
|
|
{
|
|
|
|
|
SHADOW_CASTER_FRAGMENT(i)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ENDCG
|
|
|
|
|
|
|
|
|
|
SubShader
|
|
|
|
|
{
|
|
|
|
|
Pass
|
|
|
|
|
{
|
|
|
|
|
Tags {"LightMode"="ForwardBase"}
|
|
|
|
|
CGPROGRAM
|
|
|
|
|
#pragma vertex vert
|
|
|
|
|
#pragma fragment frag
|
|
|
|
|
ENDCG
|
|
|
|
|
}
|
|
|
|
|
Pass
|
|
|
|
|
{
|
|
|
|
|
Name "ShadowCaster"
|
|
|
|
|
Tags { "LightMode" = "ShadowCaster" }
|
|
|
|
|
CGPROGRAM
|
|
|
|
|
#pragma vertex vert
|
|
|
|
|
#pragma fragment frag_shadow
|
|
|
|
|
ENDCG
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|