- Timestamp:
- 10/07/08 03:02:30 (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
GTP/trunk/App/Demos/Vis/FriendlyCulling/src/shaders/tonemap.cg
r3008 r3010 20 20 21 21 22 float4 DownSample(frag IN,22 /*float4 DownSample(frag IN, 23 23 uniform sampler2D colors, 24 uniform float2 downSampleOffs[ 4]): COLOR24 uniform float2 downSampleOffs[9]): COLOR 25 25 { 26 26 float4 average = .0f; 27 27 28 for(int i = 0; i < 4; ++ i) 28 const float4 avgColor = tex2Dlod(colors, float4(IN.texCoord, 0, 0)); 29 30 float j = 0; 31 float4 color; 32 33 for (int i = 0; i < 9; ++ i) 29 34 { 30 average += tex2Dlod(colors, float4(IN.texCoord + downSampleOffs[i],0,0)); 35 color = tex2Dlod(colors, float4(IN.texCoord + downSampleOffs[i], 0, 0)); 36 if (abs(color.w - avgColor.w) < 1e-3f) 37 { 38 average += color; 39 ++ j; 40 } 31 41 } 32 42 33 average *= 1.0f / 4.0f; 43 //average *= 1.0f / 9.0f; 44 average *= 1.0f / j; 45 46 return average; 47 }*/ 48 49 float4 DownSample(frag IN, 50 uniform sampler2D colors, 51 uniform float2 downSampleOffs[NUM_DOWNSAMPLES]): COLOR 52 { 53 float4 average = .0f; 54 55 for (int i = 0; i < NUM_DOWNSAMPLES; ++ i) 56 { 57 average += tex2Dlod(colors, float4(IN.texCoord + downSampleOffs[i], 0, 0)); 58 } 59 60 average *= 1.0f / (float)NUM_DOWNSAMPLES; 34 61 35 62 return average; 36 63 } 37 64 65 66 /** Does the first downsampling step and on the same time calculates the 67 intensity. 68 */ 38 69 39 70 float4 GreyScaleDownSample(frag IN, 40 uniform sampler2D colors 71 uniform sampler2D colors, 72 uniform float2 downSampleOffs[4] 41 73 ): COLOR 42 74 { … … 50 82 //float3 w = float3(0.2125f, 0.7154f, 0.0721f); 51 83 52 float4 cols[4]; 53 54 cols[0] = tex2D(colors, IN.lt); 55 cols[1] = tex2D(colors, IN.lb); 56 cols[2] = tex2D(colors, IN.rt); 57 cols[3] = tex2D(colors, IN.rb); 84 float4 color; 58 85 59 86 for (int i = 0; i < 4; ++ i) 60 87 { 88 color = tex2D(colors, downSampleOffs[i]); 89 61 90 const float intensity = dot(cols[i].rgb, w); 62 91 … … 65 94 } 66 95 67 average = exp(average * 0.25f);96 average *= 0.25f; 68 97 69 float4 c = cols[0] + cols[1] + cols[2] + cols[3];70 71 return c * 0.25f;72 98 // Output the luminance to the render target 73 //return float4(average, maximum, 0.0f, 1.0f);99 return float4(average, maximum, 0.0f, 1.0f); 74 100 } 75 101 102 103 /** Used for downsampling the tone map parameters (average loglum, maximum) 104 to the next lower level. This has to be applied until there is only 105 a 1x1 texture which holds the required numbers. 106 */ 107 float4 DownSampleForToneMapping(frag IN, 108 uniform sampler2D colors, 109 uniform float2 downSampleOffs[4]): COLOR 110 { 111 float average = .0f; 112 float maximum = .0f; 113 114 float4 color; 115 116 for (int i = 0; i < 4; ++ i) 117 { 118 color = tex2D(colors, downSampleOffs[i]); 119 120 maximum = max(maximum, color.y); 121 average += color.x; 122 } 123 124 average *= 1.0f / (float)NUM_DOWNSAMPLES; 125 126 return float4(average, maximum, 0.0f, 1.0f); 127 } 128 129 76 130 77 131 pixel ToneMap(frag IN,
Note: See TracChangeset
for help on using the changeset viewer.