209 lines
7.2 KiB
GLSL
209 lines
7.2 KiB
GLSL
Shader "Carmen/Map/Marker Lamp"
|
|
{
|
|
Properties
|
|
{
|
|
_MainTex("Albedo(RGB)", 2D) = "white" {}
|
|
_Color("Color", Color) = (1,1,1,1)
|
|
|
|
[NoScaleOffset] _MetallicGlossMap("Metallic(R) Smoothness(A) Map", 2D) = "white" {}
|
|
[Gamma] _Metallic("Metallic", Range(0.0, 1.0)) = 1.0
|
|
_Glossiness("Smoothness", Range(0.0, 1.0)) = 1.0
|
|
|
|
_BumpScale("Scale", Float) = 1.0
|
|
[NoScaleOffset] _BumpMap("Normal Map", 2D) = "bump" {}
|
|
|
|
[NoScaleOffset] _OcclusionMap("Occlusion(G)", 2D) = "white" {}
|
|
_OcclusionStrength("Strength", Range(0.0, 1.0)) = 1.0
|
|
|
|
[NoScaleOffset] _EmissionMap("Emission(RGB)", 2D) = "white" {}
|
|
_EmissionColor("Emission Color", Color) = (0, 0, 0)
|
|
|
|
[Enum(UV0,0,UV1,1)] _UVSec ("UV Set for secondary textures", Float) = 0
|
|
[NoScaleOffset] _DetailMask("Detail Mask(A)", 2D) = "white" {}
|
|
|
|
_DetailAlbedoMap("Detail Albedo x2(RGB)", 2D) = "grey" {}
|
|
_DetailNormalMapScale("Scale", Float) = 1.0
|
|
[NoScaleOffset] _DetailNormalMap("Detail Normal Map", 2D) = "bump" {}
|
|
|
|
[ToggleOff] _SpecularHighlights("Specular Highlights", Float) = 0
|
|
[ToggleOff] _GlossyReflections("Glossy Reflections", Float) = 0
|
|
|
|
[Toggle(_ENABLE_GEOMETRIC_SPECULAR_AA)] _EnableGeometricSpecularAA("EnableGeometricSpecularAA", Float) = 1.0
|
|
_SpecularAAScreenSpaceVariance("SpecularAAScreenSpaceVariance", Range(0.0, 1.0)) = 0.1
|
|
_SpecularAAThreshold("SpecularAAThreshold", Range(0.0, 1.0)) = 0.2
|
|
|
|
[Enum(Default,0,MonoSH,1,MonoSH (no highlights),2)] _LightmapType ("Lightmap Type", Float) = 0
|
|
|
|
// TODO: This has questionable performance impact on Mobile but very little discernable impact on PC. Should
|
|
// make a toggle once we have properly branched compilation between those platforms, that's PC-only
|
|
[Toggle(_BICUBIC)] _Bicubic ("Enable Bicubic Sampling", Float) = 0
|
|
}
|
|
|
|
SubShader
|
|
{
|
|
Tags { "RenderType"="Opaque" }
|
|
LOD 200
|
|
|
|
CGPROGRAM
|
|
|
|
//#define _DEBUG_VRC
|
|
#ifdef _DEBUG_VRC
|
|
#define DEBUG_COL(rgb) debugCol = half4(rgb, 1)
|
|
#define DEBUG_VAL(val) debugCol = half4(val, val, val, 1)
|
|
half4 debugCol = half4(0,0,0,1);
|
|
#else
|
|
#define DEBUG_COL(rgb)
|
|
#define DEBUG_VAL(val)
|
|
#endif
|
|
|
|
#pragma target 3.0
|
|
#pragma multi_compile_fragment _ _EMISSION
|
|
#pragma multi_compile _ _DETAIL
|
|
#pragma multi_compile_fragment _ _SPECULARHIGHLIGHTS_OFF
|
|
#pragma multi_compile_fragment _ _GLOSSYREFLECTIONS_OFF
|
|
#pragma multi_compile_fragment _ _MONOSH_SPECULAR _MONOSH_NOSPECULAR
|
|
#pragma multi_compile_fragment _ _ENABLE_GEOMETRIC_SPECULAR_AA
|
|
#pragma dynamic_branch_local_fragment _ DISABLE_VERTEX_COLORING
|
|
//SDK-SYNC-IGNORE-LINE - unused variants in SDK projects - #pragma multi_compile_fragment _ FORCE_UNITY_DLDR_LIGHTMAP_ENCODING FORCE_UNITY_RGBM_LIGHTMAP_ENCODING FORCE_UNITY_LIGHTMAP_FULL_HDR_ENCODING UNITY_LIGHTMAP_NONE
|
|
//#pragma multi_compile _ _BICUBIC
|
|
|
|
#if defined(LIGHTMAP_ON)
|
|
#if defined(_MONOSH_SPECULAR) || defined(_MONOSH_NOSPECULAR)
|
|
#define _MONOSH
|
|
#if defined(_MONOSH_SPECULAR)
|
|
#define _LMSPEC
|
|
#endif
|
|
#endif
|
|
#endif
|
|
|
|
#include "/Packages/com.vrchat.base/Runtime/VRCSDK/Sample Assets/Shaders/Mobile/VRChat.cginc"
|
|
|
|
#pragma surface surf StandardVRC vertex:vert exclude_path:prepass exclude_path:deferred noforwardadd noshadow nodynlightmap nolppv noshadowmask
|
|
#pragma skip_variants LIGHTMAP_SHADOW_MIXING
|
|
|
|
// -------------------------------------
|
|
|
|
struct Input
|
|
{
|
|
float2 texcoord0;
|
|
#ifdef _DETAIL
|
|
float2 texcoord1;
|
|
#endif
|
|
fixed4 color : COLOR;
|
|
};
|
|
|
|
UNITY_DECLARE_TEX2D(_MainTex);
|
|
float4 _MainTex_ST;
|
|
half4 _Color;
|
|
|
|
UNITY_DECLARE_TEX2D(_MetallicGlossMap);
|
|
uniform half _Glossiness;
|
|
uniform half _Metallic;
|
|
|
|
UNITY_DECLARE_TEX2D(_BumpMap);
|
|
uniform half _BumpScale;
|
|
|
|
UNITY_DECLARE_TEX2D(_OcclusionMap);
|
|
uniform half _OcclusionStrength;
|
|
|
|
uniform half _SpecularAAScreenSpaceVariance;
|
|
uniform half _SpecularAAThreshold;
|
|
|
|
#ifdef _EMISSION
|
|
UNITY_DECLARE_TEX2D(_EmissionMap);
|
|
half4 _EmissionColor;
|
|
#endif
|
|
|
|
#ifdef _DETAIL
|
|
uniform half _UVSec;
|
|
float4 _DetailAlbedoMap_ST;
|
|
UNITY_DECLARE_TEX2D(_DetailMask);
|
|
UNITY_DECLARE_TEX2D(_DetailAlbedoMap);
|
|
UNITY_DECLARE_TEX2D(_DetailNormalMap);
|
|
uniform half _DetailNormalMapScale;
|
|
#endif
|
|
|
|
// 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 vert(inout appdata_full v, out Input o)
|
|
{
|
|
UNITY_INITIALIZE_OUTPUT(Input,o);
|
|
o.texcoord0 = TRANSFORM_TEX(v.texcoord.xy, _MainTex); // Always source from uv0
|
|
#ifdef _DETAIL
|
|
o.texcoord1 = TRANSFORM_TEX(((_UVSec == 0) ? v.texcoord.xy : v.texcoord1.xy), _DetailAlbedoMap);
|
|
#endif
|
|
}
|
|
|
|
void surf(Input IN, inout SurfaceOutputStandardVRC o)
|
|
{
|
|
// Albedo comes from a texture tinted by color
|
|
half4 albedoMap = UNITY_SAMPLE_TEX2D(_MainTex, IN.texcoord0) * _Color;
|
|
if(!DISABLE_VERTEX_COLORING)
|
|
albedoMap *= IN.color;
|
|
o.Albedo = albedoMap.rgb;
|
|
|
|
// Metallic and smoothness come from slider variables
|
|
half4 metallicGlossMap = UNITY_SAMPLE_TEX2D(_MetallicGlossMap, IN.texcoord0);
|
|
o.Metallic = metallicGlossMap.r * _Metallic;
|
|
o.Smoothness = metallicGlossMap.a * _Glossiness;
|
|
|
|
// Occlusion is sampled from the Green channel to match up with Standard. Can be packed to Metallic if you insert it into multiple slots.
|
|
o.Occlusion = LerpOneTo(UNITY_SAMPLE_TEX2D(_OcclusionMap, IN.texcoord0).g, _OcclusionStrength);
|
|
|
|
// only takes into account directional lights, so only use if using noforwardadd!
|
|
float dx0 = ddx(IN.texcoord0);
|
|
float dy0 = ddy(IN.texcoord0);
|
|
#if defined(LIGHTMAP_ON) && !defined(_MONOSH) && !defined(DIRLIGHTMAP_COMBINED) && defined(_GLOSSYREFLECTIONS_OFF)
|
|
UNITY_BRANCH if (any(_LightColor0.xyz))
|
|
#else
|
|
if (true)
|
|
#endif
|
|
{
|
|
o.Normal = UnpackScaleNormal(SAMPLE_TEXTURE2D_GRAD(_BumpMap, sampler_BumpMap, IN.texcoord0, dx0, dy0), _BumpScale);
|
|
} else {
|
|
o.Normal = half3(0, 0, 1);
|
|
}
|
|
|
|
#ifdef _ENABLE_GEOMETRIC_SPECULAR_AA
|
|
o.SpecularAAVariance = _SpecularAAScreenSpaceVariance;
|
|
o.SpecularAAThreshold = _SpecularAAThreshold;
|
|
#endif
|
|
|
|
#ifdef _DETAIL
|
|
half4 detailMask = UNITY_SAMPLE_TEX2D(_DetailMask, IN.texcoord0);
|
|
float dx1 = ddx(IN.texcoord1);
|
|
float dy1 = ddy(IN.texcoord1);
|
|
UNITY_BRANCH
|
|
if (detailMask.a > 0)
|
|
{
|
|
half4 detailAlbedoMap = SAMPLE_TEXTURE2D_GRAD(_DetailAlbedoMap, sampler_DetailAlbedoMap, IN.texcoord1, dx1, dy1);
|
|
o.Albedo *= LerpWhiteTo(detailAlbedoMap.rgb * unity_ColorSpaceDouble.rgb, detailMask.a);
|
|
|
|
#if defined(LIGHTMAP_ON) && !defined(_MONOSH) && !defined(DIRLIGHTMAP_COMBINED) && defined(_GLOSSYREFLECTIONS_OFF)
|
|
UNITY_BRANCH if (any(_LightColor0.xyz))
|
|
#else
|
|
if (true)
|
|
#endif
|
|
{
|
|
half3 detailNormalTangent = UnpackScaleNormal(SAMPLE_TEXTURE2D_GRAD(_DetailNormalMap, sampler_DetailNormalMap, IN.texcoord1, dx1, dy1), _DetailNormalMapScale);
|
|
o.Normal = lerp(o.Normal, BlendNormals(o.Normal, detailNormalTangent), detailMask.a);
|
|
}
|
|
}
|
|
#endif
|
|
|
|
#ifdef _EMISSION
|
|
o.Emission = _EmissionColor * frac(sin(_Time * 150.0) / 2.0 + 1.5);
|
|
#endif
|
|
}
|
|
ENDCG
|
|
}
|
|
|
|
FallBack "VRChat/Mobile/Diffuse"
|
|
CustomEditor "StandardLiteShaderGUI"
|
|
} |