[3040] | 1 | struct vtxin
|
---|
[2957] | 2 | {
|
---|
| 3 | float4 position: POSITION;
|
---|
| 4 | float3 normal: NORMAL;
|
---|
| 5 | float3 color: COLOR;
|
---|
| 6 | float2 texcoord: TEXCOORD0;
|
---|
| 7 | };
|
---|
| 8 |
|
---|
| 9 |
|
---|
[2959] | 10 | // vtx output
|
---|
| 11 | struct vtxout
|
---|
| 12 | {
|
---|
| 13 | float4 color: COLOR0;
|
---|
[3041] | 14 | float4 position: POSITION;
|
---|
| 15 |
|
---|
| 16 | float4 texCoord: TEXCOORD0;
|
---|
| 17 | float3 normal: TEXCOORD1;
|
---|
| 18 | float4 hdrColor: TEXCOORD2;
|
---|
[2959] | 19 | };
|
---|
| 20 |
|
---|
| 21 |
|
---|
[2964] | 22 | // fragment input
|
---|
| 23 | struct fragin
|
---|
| 24 | {
|
---|
| 25 | float4 color: COLOR0;
|
---|
[3041] | 26 | //float4 projPos: WPOS;
|
---|
| 27 | //float4 position: POSITION;
|
---|
[2964] | 28 |
|
---|
[3041] | 29 | float4 texCoord: TEXCOORD0;
|
---|
| 30 | float3 normal: TEXCOORD1;
|
---|
| 31 | float4 hdrColor: TEXCOORD2;
|
---|
[2957] | 32 | };
|
---|
[3040] | 33 |
|
---|
| 34 |
|
---|
[3041] | 35 | struct pixel
|
---|
[3040] | 36 | {
|
---|
| 37 | float4 col: COLOR0;
|
---|
[3041] | 38 | float3 norm: COLOR1;
|
---|
[3110] | 39 | float3 id: COLOR2;
|
---|
[3040] | 40 | };
|
---|
| 41 |
|
---|
| 42 |
|
---|
| 43 |
|
---|
[2957] | 44 | //--------------------------------------------------------------------------------------
|
---|
| 45 | // Vertex Shaders
|
---|
| 46 | //--------------------------------------------------------------------------------------
|
---|
| 47 |
|
---|
| 48 |
|
---|
[3040] | 49 | vtxout default_vs(vtxin IN,
|
---|
[2958] | 50 | uniform float3 lightDir,
|
---|
| 51 | uniform float2 thetaSun,
|
---|
| 52 | uniform float3 zenithColor,
|
---|
| 53 | uniform float3 aColor,
|
---|
| 54 | uniform float3 bColor,
|
---|
| 55 | uniform float3 cColor,
|
---|
| 56 | uniform float3 dColor,
|
---|
| 57 | uniform float3 eColor,
|
---|
[2982] | 58 | uniform float multiplier)
|
---|
[2957] | 59 | {
|
---|
[2958] | 60 | vtxout OUT;
|
---|
| 61 |
|
---|
[2957] | 62 | OUT.position = mul(glstate.matrix.mvp, IN.position);
|
---|
| 63 |
|
---|
| 64 | const float dotLN = dot(lightDir, IN.normal);
|
---|
| 65 | const float cos2gamma = dotLN * dotLN;
|
---|
[2958] | 66 |
|
---|
[2957] | 67 | const float gamma = acos(dotLN);
|
---|
[3040] | 68 | const float theta = dot(float3(.0f, .0f, 1.0f), IN.normal);
|
---|
[2957] | 69 |
|
---|
[3040] | 70 | float3 num = (1.0f + aColor * exp(bColor / theta)) * (1.0f + cColor * exp(dColor * gamma) + eColor * cos2gamma);
|
---|
| 71 | float3 den = (1.0f + aColor * exp(bColor)) * (1.0f + cColor * exp(dColor * thetaSun.x) + eColor * thetaSun.y);
|
---|
[2957] | 72 | float3 xyY = (num / den) * zenithColor;
|
---|
| 73 |
|
---|
| 74 | float3 XYZ;
|
---|
| 75 |
|
---|
| 76 | XYZ.x = (xyY.x / xyY.y) * xyY.z;
|
---|
| 77 | XYZ.y = xyY.z;
|
---|
| 78 | XYZ.z = ((1.0f - xyY.x - xyY.y) / xyY.y) * xyY.z;
|
---|
| 79 |
|
---|
| 80 | const static float3x3 conv_Mat =
|
---|
[3040] | 81 | float3x3( 3.240479f, -1.537150f, -0.498535f,
|
---|
| 82 | -0.969256f, 1.875992f, 0.041556f,
|
---|
| 83 | 0.055648f, -0.204043f, 1.057311f);
|
---|
[2957] | 84 |
|
---|
[3110] | 85 | OUT.color = float4(mul(conv_Mat, XYZ), 1.0f);
|
---|
[2957] | 86 |
|
---|
[2982] | 87 | OUT.color.rgb *= multiplier;
|
---|
[3040] | 88 | /// put out color into different color channel to avoid clamping
|
---|
| 89 | OUT.hdrColor = OUT.color;
|
---|
[2957] | 90 |
|
---|
[2958] | 91 | OUT.normal = IN.normal;
|
---|
[3110] | 92 |
|
---|
[2957] | 93 | return OUT;
|
---|
| 94 | }
|
---|
| 95 |
|
---|
| 96 |
|
---|
[3041] | 97 | pixel frag_skydome(fragin IN)
|
---|
[2959] | 98 | {
|
---|
[3041] | 99 | pixel pix;
|
---|
[2959] | 100 |
|
---|
[3040] | 101 | pix.col = IN.hdrColor;
|
---|
[3193] | 102 | //pix.col.xyz = float3(0.3f, 0.6f, 1.0f);
|
---|
| 103 | // set depth to large value
|
---|
[3009] | 104 | pix.col.w = 1e20f;
|
---|
[3040] | 105 | pix.norm = IN.normal;
|
---|
[3110] | 106 | // the scene entity id
|
---|
| 107 | pix.id = glstate.fog.color.xyz;
|
---|
| 108 |
|
---|
[2959] | 109 | return pix;
|
---|
[2958] | 110 | } |
---|