source: GTP/trunk/App/Demos/Vis/FriendlyCulling/src/shaders/depthOfField.cg @ 3364

Revision 3364, 1.9 KB checked in by mattausch, 15 years ago (diff)

debug version visualizing the depth diff

Line 
1#include "../shaderenv.h"
2
3struct fragment
4{
5        float2 texCoords:  TEXCOORD0;
6};
7
8
9float2 ComputeBlurFactors(float4 color, float sceneRange, float zFocus)
10{
11        float2 result;
12
13        const float m = 1.0f;
14        const float focalLen = 1.0f;
15
16        const float scale = 5e4f;
17
18        // Compute blur factor based on the CoC size scaled and normalized to 0..1 range
19        //float blur = abs(dLens * focalLen * (zFocus - color.w)) / (1e-6f + abs(zFocus * (color.w - focalLen)));
20
21        const float dist = abs(zFocus - color.w);
22        const float blur = scale * m * focalLen *
23                dist / (sceneRange * (1e-6f + abs(color.w + dist * step(0, zFocus - color.w))));
24       
25        //float blur = saturate(blur * scale / maxCoC);
26       
27        // Depth/blurriness value scaled to 0..1 range
28        result = float2(color.w / sceneRange, blur);
29
30        return result;
31}
32
33
34float4 Blur(float4 color,
35                        float2 texCoords,
36                        float2 blurFactors,
37                        sampler2D colorsTex,
38                        float2 filterOffs[NUM_DOF_TABS]
39                        )
40{
41        float4 avgCol = float4(.0f);
42        float total_w = .0f;
43
44        for (int i = 0; i < NUM_DOF_TABS; ++ i)
45        {
46                float2 sampleTexCoord = texCoords + filterOffs[i] * blurFactors.y;
47                float4 sampleCol = tex2Dlod(colorsTex, float4(sampleTexCoord, 0, 0));
48               
49                // combine the weights
50                float w = 1;
51               
52                avgCol += sampleCol * w;
53                total_w += w;
54        }
55
56        avgCol /= max(total_w, 1e-6f);
57
58        return avgCol;
59}
60
61
62float4 DepthOfField(fragment IN,
63                                        uniform sampler2D colorsTex,
64                                        uniform float2 filterOffs[NUM_DOF_TABS],
65                                        uniform float sceneRange,
66                                        uniform float zFocus
67                                         ): COLOR
68{
69        // center color
70        const float4 color = tex2Dlod(colorsTex, float4(IN.texCoords, 0, 0));
71       
72        zFocus = min(zFocus, sceneRange * 0.5f);
73        float2 blurFactors = ComputeBlurFactors(color, sceneRange, zFocus);
74
75        //float4 outCol = float4(color.x, color.y, blurFactors.y, color.w);
76        float4 outCol = Blur(color, IN.texCoords, blurFactors, colorsTex, filterOffs);
77       
78        return outCol;
79}
Note: See TracBrowser for help on using the repository browser.