AwesomeRunner/Assets/Shaders/CurvedSurfaceStandard.shader
VladimirPirozhenko 6889a11109 Added surface shaders for additive blending,emission and cutoff, also upgraded standard curved shader massively
Fixed shadows with shader, optimized few things for mobiles, added CulledCamera script to prevent meshes to dissapear in front of camera
WorldCurver now lives in GameSession, from which it will be controlled
2022-08-18 03:37:06 +03:00

96 lines
3.7 KiB
Plaintext

// Upgrade NOTE: replaced '_Object2World' with 'unity_ObjectToWorld'
Shader "Custom/CurvedSurfaceStandard"
{
Properties
{
_Color ("Color", Color) = (1,1,1,1)
_MainTex ("Albedo", 2D) = "white" {}
_BumpMap("Normal Map", 2D) = "bump" {}
_OcclusionMap("Occlusion Map", 2D) = "white" {}
_SmoothnessMap("Smoothness Map", 2D) = "black" {}
_EmissionMap("Emission Map", 2D) = "white" {}
[HDR] _EmissionColor("Emission Color", Color) = (0,0,0)
_Glossiness ("Smoothness", Range(0,1)) = 0.5
_Metallic ("Metallic", Range(0,1)) = 0.0
}
SubShader
{
Tags { "RenderType" = "Opaque" "DisableBatching" = "False" }//"Queue" = "Geometry" " "LightMode" = "ShadowCaster""DisableBatching" = "true" "DisableBatching" = "True" "LightMode" = "ShadowCaster"
LOD 200
CGPROGRAM
// Physically based Standard lighting model, and enable shadows on all light types
#pragma surface surf Standard vertex:vert fullforwardshadows addshadow
// Use shader model 3.5 target, to get nicer looking lighting and to get emission map to work
#pragma target 3.5
sampler2D MainTex;
sampler2D _BumpMap;
sampler2D _OcclusionMap;
sampler2D _SmoothnessMap;
sampler2D _EmissionMap;
fixed4 _EmissionColor;
float4 MainTex_ST;
float _CurveStrength_x;
float _CurveStrength_y;
struct Input
{
float2 uv_MainTex;
float2 uv_BumpMap;
float2 uv_SmoothnessMap;
float2 uv_OcclusionMap;
float2 uv_EmissionMap;
half3 debugColor;
};
void vert(inout appdata_full v, out Input o)
{
float4 pos;
float2 uv;
UNITY_INITIALIZE_OUTPUT(Input, o);
float4 modifiedPos = v.vertex;
float4 positionInCameraSpace = mul(unity_WorldToCamera, mul(unity_ObjectToWorld, v.vertex));
float dist = length(float2(positionInCameraSpace.x, positionInCameraSpace.z));
positionInCameraSpace.y -= _CurveStrength_y * dist * dist;
positionInCameraSpace.x -= _CurveStrength_x * dist * dist;
modifiedPos = mul(unity_WorldToObject, mul(unity_CameraToWorld, positionInCameraSpace));
v.vertex = modifiedPos;
}
sampler2D _MainTex;
half _Glossiness;
half _Metallic;
fixed4 _Color;
// 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)
{
fixed4 c = tex2D(_MainTex, IN.uv_MainTex) * _Color;
o.Albedo = c.rgb;
o.Normal = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap));
o.Occlusion = tex2D(_OcclusionMap, IN.uv_OcclusionMap).rgb;
o.Emission = tex2D(_EmissionMap, IN.uv_EmissionMap).rgb * _EmissionColor;
// Metallic and smoothness come from slider variables
o.Metallic = _Metallic;
o.Smoothness = tex2D(_SmoothnessMap, IN.uv_SmoothnessMap).rgb * _Glossiness;
o.Alpha = c.a;
}
ENDCG
}
FallBack "Diffuse"
}