91 lines
2.9 KiB
Text
91 lines
2.9 KiB
Text
|
|
// Upgrade NOTE: upgraded instancing buffer 'Props' to new syntax.
|
||
|
|
|
||
|
|
Shader "Aetheria/View Dependent Emissive" {
|
||
|
|
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
|
||
|
|
}
|
||
|
|
SubShader {
|
||
|
|
Tags { "RenderType"="Opaque" }
|
||
|
|
LOD 200
|
||
|
|
|
||
|
|
CGPROGRAM
|
||
|
|
// 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;
|
||
|
|
|
||
|
|
struct Input {
|
||
|
|
float2 uv_MainTex;
|
||
|
|
float2 uv_BumpMap;
|
||
|
|
float3 viewDir;
|
||
|
|
float3 worldNormal;
|
||
|
|
INTERNAL_DATA
|
||
|
|
};
|
||
|
|
|
||
|
|
half _Glossiness;
|
||
|
|
half _Metallic;
|
||
|
|
fixed4 _Color;
|
||
|
|
fixed4 _EmissionColor;
|
||
|
|
float _BumpPower;
|
||
|
|
float _Rotation;
|
||
|
|
float _Emission;
|
||
|
|
float _EmissionFresnel;
|
||
|
|
float _EmissionRoughnessFresnelPower;
|
||
|
|
half _ReverseRim;
|
||
|
|
|
||
|
|
// 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
|
||
|
|
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"
|
||
|
|
}
|