Shader "SkyboxPlus/Cubemap"
|
|
{
|
|
Properties
|
|
{
|
|
[NoScaleOffset] _Tex("-", Cube) = "grey"{}
|
|
_Tint("-", Color) = (.5, .5, .5)
|
|
|
|
_Euler("-", Vector) = (0, 0, 0)
|
|
[HideInInspector] _Rotation1("-", Vector) = (1, 0, 0)
|
|
[HideInInspector] _Rotation2("-", Vector) = (0, 1, 0)
|
|
[HideInInspector] _Rotation3("-", Vector) = (0, 0, 1)
|
|
|
|
[Gamma] _Exposure("-", Range(0, 8)) = 1
|
|
_Saturation("-", Range(0, 2)) = 1
|
|
|
|
[Toggle] _Lod("-", Float) = 0
|
|
_LodLevel("-", Range(0, 10)) = 0
|
|
}
|
|
CGINCLUDE
|
|
|
|
#pragma shader_feature _LOD_ON
|
|
#include "UnityCG.cginc"
|
|
|
|
samplerCUBE _Tex;
|
|
half4 _Tex_HDR;
|
|
|
|
half4 _Tint;
|
|
half _Exposure;
|
|
half _Saturation;
|
|
float _LodLevel;
|
|
|
|
float4 _Rotation1;
|
|
float4 _Rotation2;
|
|
float4 _Rotation3;
|
|
|
|
struct appdata_t {
|
|
float4 vertex : POSITION;
|
|
};
|
|
|
|
struct v2f {
|
|
float4 vertex : SV_POSITION;
|
|
float3 texcoord : TEXCOORD0;
|
|
};
|
|
|
|
v2f vert(appdata_t v)
|
|
{
|
|
v2f o;
|
|
float3x3 m = float3x3(_Rotation1.xyz, _Rotation2.xyz, _Rotation3.xyz);
|
|
float4 vp = float4(mul(m, v.vertex.xyz), v.vertex.w);
|
|
o.vertex = UnityObjectToClipPos(vp);
|
|
o.texcoord = v.vertex.xyz;
|
|
return o;
|
|
}
|
|
|
|
fixed4 frag(v2f i) : SV_Target
|
|
{
|
|
#ifdef _LOD_ON
|
|
half4 tex = texCUBElod(_Tex, float4(i.texcoord, _LodLevel));
|
|
#else
|
|
half4 tex = texCUBE(_Tex, i.texcoord);
|
|
#endif
|
|
half3 c = DecodeHDR(tex, _Tex_HDR);
|
|
c *= _Tint.rgb * unity_ColorSpaceDouble.rgb * _Exposure;
|
|
c = lerp((half3)Luminance(c), c, _Saturation);
|
|
return half4(c, 1);
|
|
}
|
|
|
|
ENDCG
|
|
SubShader
|
|
{
|
|
Tags { "Queue"="Background" "RenderType"="Background" "PreviewType"="Skybox" }
|
|
Cull Off ZWrite Off
|
|
Pass
|
|
{
|
|
CGPROGRAM
|
|
#pragma vertex vert
|
|
#pragma fragment frag
|
|
ENDCG
|
|
}
|
|
}
|
|
Fallback Off
|
|
CustomEditor "SkyboxPlus.CubemapMaterialEditor"
|
|
}
|