summaryrefslogtreecommitdiff
path: root/VRCSDK3Worlds/Assets/Bakery/ftSkybox.shader
blob: fbf2dbeb29e64e675249725e7a724bfc898070fb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'

Shader "Bakery/Skybox" {
Properties {
    _Tint ("Tint Color", Color) = (.5, .5, .5, .5)
    _Exposure ("Exposure", Float) = 1.0
    _MatrixRight ("Right", Vector) = (1, 0, 0, 0)
    _MatrixUp ("Up", Vector) = (0, 1, 0, 0)
    _MatrixForward ("Forward", Vector) = (0, 0, 1, 0)
    [NoScaleOffset] _Tex ("Cubemap   (HDR)", Cube) = "white" {}
    _NoTexture ("No texture", Float) = 0.0
    _Hemispherical ("Hemispherical", Float) = 0.0
}

SubShader {
    Tags { "Queue"="Background" "RenderType"="Background" "PreviewType"="Skybox" }
    Cull Off ZWrite Off

    Pass {

        CGPROGRAM
        #pragma vertex vert
        #pragma fragment frag

        #include "UnityCG.cginc"

        samplerCUBE _Tex;
        half4 _Tex_HDR;
        half4 _Tint;
        half _Exposure;
        float3 _MatrixRight, _MatrixUp, _MatrixForward;
        float4x4 reflection2World;
        float _NoTexture, _Hemispherical;

        struct appdata_t {
            float4 vertex : POSITION;
            UNITY_VERTEX_INPUT_INSTANCE_ID
        };

        struct v2f {
            float4 vertex : SV_POSITION;
            float3 texcoord : TEXCOORD0;
            UNITY_VERTEX_OUTPUT_STEREO
        };

        v2f vert (appdata_t v)
        {
            v2f o;
            UNITY_SETUP_INSTANCE_ID(v);
            UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
            float3x3 tform = float3x3(_MatrixRight, _MatrixUp, _MatrixForward);
            float3 pos = mul(tform, v.vertex.xyz);
            o.vertex = UnityObjectToClipPos(pos);
            o.texcoord = mul((float3x3)reflection2World, v.vertex.xyz);
            return o;
        }

        fixed4 frag (v2f i) : SV_Target
        {
            half4 tex = _NoTexture < 0.5 ? texCUBE (_Tex, i.texcoord) : half4(1,1,1,1);
            half3 c = DecodeHDR (tex, _Tex_HDR);
            if (unity_ColorSpaceDouble.x < 3) c = pow(c, 2.2f);
            c = c * _Tint.rgb;
            c *= _Exposure;

            if (_Hemispherical > 0.0f) c *= i.texcoord.y < 0 ? 0 : 1;
            if (unity_ColorSpaceDouble.x < 3) c = pow(c, 1/2.2f);

            return half4(c, 1);
        }
        ENDCG
    }
}


Fallback Off

}