Guest User

Untitled

a guest
Jul 7th, 2013
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.94 KB | None | 0 0
  1. Angle between tangents exceeds tolerance for vertex 990.
  2. Angle between tangents exceeds tolerance for vertex 991.
  3. Loaded material definition: Post Shadow
  4. New materail provider registered for: Materials/Utility/matcap_blueprint.j3m
  5. Child (previewSphere) attached to this node (Preview Node)
  6. Bad compile of:
  7. 1 #version 150 core
  8. 2 #extension GL_ARB_texture_multisample : enable
  9. 3
  10. 4 uniform int m_NumSamples;
  11. 5 uniform int m_NumSamplesDepth;
  12. 6
  13. 7 #ifdef RESOLVE_MS
  14. 8 #define COLORTEXTURE sampler2DMS
  15. 9 #else
  16. 10 #define COLORTEXTURE sampler2D
  17. 11 #endif
  18. 12
  19. 13 #ifdef RESOLVE_DEPTH_MS
  20. 14 #define DEPTHTEXTURE sampler2DMS
  21. 15 #else
  22. 16 #define DEPTHTEXTURE sampler2D
  23. 17 #endif
  24. 18
  25. 19 // NOTE: Only define multisample functions if multisample is available and is being used!
  26. 20 #if defined(GL_ARB_texture_multisample) && (defined(RESOLVE_MS) || defined(RESOLVE_DEPTH_MS))
  27. 21 vec4 textureFetch(in sampler2DMS tex,in vec2 texC, in int numSamples){
  28. 22 ivec2 iTexC = ivec2(texC * textureSize(tex));
  29. 23 vec4 color = vec4(0.0);
  30. 24 for (int i = 0; i < numSamples; i++){
  31. 25 color += texelFetch(tex, iTexC, i);
  32. 26 }
  33. 27 return color / numSamples;
  34. 28 }
  35. 29
  36. 30 vec4 fetchTextureSample(in sampler2DMS tex,in vec2 texC,in int sample){
  37. 31 ivec2 iTexC = ivec2(texC * textureSize(tex));
  38. 32 return texelFetch(tex, iTexC, sample);
  39. 33 }
  40. 34
  41. 35 vec4 getColor(in sampler2DMS tex, in vec2 texC){
  42. 36 return textureFetch(tex, texC, m_NumSamples);
  43. 37 }
  44. 38
  45. 39 vec4 getColorSingle(in sampler2DMS tex, in vec2 texC){
  46. 40 ivec2 iTexC = ivec2(texC * textureSize(tex));
  47. 41 return texelFetch(tex, iTexC, 0);
  48. 42 }
  49. 43
  50. 44 vec4 getDepth(in sampler2DMS tex,in vec2 texC){
  51. 45 return textureFetch(tex,texC,m_NumSamplesDepth);
  52. 46 }
  53. 47 #endif
  54. 48
  55. 49 vec4 fetchTextureSample(in sampler2D tex,in vec2 texC,in int sample){
  56. 50 return texture2D(tex,texC);
  57. 51 }
  58. 52
  59. 53 vec4 getColor(in sampler2D tex, in vec2 texC){
  60. 54 return texture2D(tex,texC);
  61. 55 }
  62. 56
  63. 57 vec4 getColorSingle(in sampler2D tex, in vec2 texC){
  64. 58 return texture2D(tex, texC);
  65. 59 }
  66. 60
  67. 61 vec4 getDepth(in sampler2D tex,in vec2 texC){
  68. 62 return texture2D(tex,texC);
  69. 63 }
  70. 64 // Because gpu_shader5 is actually where those
  71. 65 // gather functions are declared to work on shadowmaps
  72. 66 #extension GL_ARB_gpu_shader5 : enable
  73. 67
  74. 68 #ifdef HARDWARE_SHADOWS
  75. 69 #define SHADOWMAP sampler2DShadow
  76. 70 #define SHADOWCOMPAREOFFSET(tex,coord,offset) textureProjOffset(tex, coord, offset)
  77. 71 #define SHADOWCOMPARE(tex,coord) textureProj(tex, coord)
  78. 72 #define SHADOWGATHER(tex,coord) textureGather(tex, coord.xy, coord.z)
  79. 73 #else
  80. 74 #define SHADOWMAP sampler2D
  81. 75 #define SHADOWCOMPAREOFFSET(tex,coord,offset) step(coord.z, textureProjOffset(tex, coord, offset).r)
  82. 76 #define SHADOWCOMPARE(tex,coord) step(coord.z, textureProj(tex, coord).r)
  83. 77 #define SHADOWGATHER(tex,coord) step(coord.z, textureGather(tex, coord.xy))
  84. 78 #endif
  85. 79
  86. 80
  87. 81 #if FILTER_MODE == 0
  88. 82 #define GETSHADOW SHADOWCOMPARE
  89. 83 #define KERNEL 1
  90. 84 #elif FILTER_MODE == 1
  91. 85 #ifdef HARDWARE_SHADOWS
  92. 86 #define GETSHADOW SHADOWCOMPARE
  93. 87 #else
  94. 88 #define GETSHADOW Shadow_DoBilinear_2x2
  95. 89 #endif
  96. 90 #define KERNEL 1
  97. 91 #elif FILTER_MODE == 2
  98. 92 #define GETSHADOW Shadow_DoDither_2x2
  99. 93 #define KERNEL 1
  100. 94 #elif FILTER_MODE == 3
  101. 95 #define GETSHADOW Shadow_DoPCF
  102. 96 #define KERNEL 4
  103. 97 #elif FILTER_MODE == 4
  104. 98 #define GETSHADOW Shadow_DoPCFPoisson
  105. 99 #define KERNEL 4
  106. 100 #elif FILTER_MODE == 5
  107. 101 #define GETSHADOW Shadow_DoPCF
  108. 102 #define KERNEL 8
  109. 103 #endif
  110. 104
  111. 105
  112. 106
  113. 107 uniform SHADOWMAP m_ShadowMap0;
  114. 108 uniform SHADOWMAP m_ShadowMap1;
  115. 109 uniform SHADOWMAP m_ShadowMap2;
  116. 110 uniform SHADOWMAP m_ShadowMap3;
  117. 111
  118. 112 uniform vec4 m_Splits;
  119. 113 uniform float m_ShadowIntensity;
  120. 114
  121. 115 const vec2 pixSize2 = vec2(1.0 / SHADOWMAP_SIZE);
  122. 116 float shadowBorderScale = 1.0;
  123. 117
  124. 118 float Shadow_BorderCheck(in vec2 coord){
  125. 119 // Fastest, "hack" method (uses 4-5 instructions)
  126. 120 vec4 t = vec4(coord.xy, 0.0, 1.0);
  127. 121 t = step(t.wwxy, t.xyzz);
  128. 122 return dot(t,t);
  129. 123 }
  130. 124
  131. 125 float Shadow_DoDither_2x2(in SHADOWMAP tex, in vec4 projCoord){
  132. 126 float border = Shadow_BorderCheck(projCoord.xy);
  133. 127 if (border > 0.0)
  134. 128 return 1.0;
  135. 129
  136. 130 vec2 pixSize = pixSize2 * shadowBorderScale;
  137. 131
  138. 132 float shadow = 0.0;
  139. 133 ivec2 o = ivec2(mod(floor(gl_FragCoord.xy), 2.0));
  140. 134 shadow += SHADOWCOMPARE(tex, vec4(projCoord.xy+pixSize*(vec2(-1.5, 1.5)+o), projCoord.zw));
  141. 135 shadow += SHADOWCOMPARE(tex, vec4(projCoord.xy+pixSize*(vec2( 0.5, 1.5)+o), projCoord.zw));
  142. 136 shadow += SHADOWCOMPARE(tex, vec4(projCoord.xy+pixSize*(vec2(-1.5, -0.5)+o), projCoord.zw));
  143. 137 shadow += SHADOWCOMPARE(tex, vec4(projCoord.xy+pixSize*(vec2( 0.5, -0.5)+o), projCoord.zw));
  144. 138 shadow *= 0.25;
  145. 139 return shadow;
  146. 140 }
  147. 141
  148. 142 float Shadow_DoBilinear_2x2(in SHADOWMAP tex, in vec4 projCoord){
  149. 143 float border = Shadow_BorderCheck(projCoord.xy);
  150. 144 if (border > 0.0)
  151. 145 return 1.0;
  152. 146
  153. 147 #ifdef GL_ARB_gpu_shader5
  154. 148 vec4 coord = vec4(projCoord.xyz / projCoord.www,0.0);
  155. 149 vec4 gather = SHADOWGATHER(tex, coord);
  156. 150 #else
  157. 151 vec4 gather = vec4(0.0);
  158. 152 gather.x = SHADOWCOMPAREOFFSET(tex, projCoord, ivec2(0, 0));
  159. 153 gather.y = SHADOWCOMPAREOFFSET(tex, projCoord, ivec2(1, 0));
  160. 154 gather.z = SHADOWCOMPAREOFFSET(tex, projCoord, ivec2(0, 1));
  161. 155 gather.w = SHADOWCOMPAREOFFSET(tex, projCoord, ivec2(1, 1));
  162. 156 #endif
  163. 157
  164. 158 vec2 f = fract( projCoord.xy * SHADOWMAP_SIZE );
  165. 159 vec2 mx = mix( gather.xz, gather.yw, f.x );
  166. 160 return mix( mx.x, mx.y, f.y );
  167. 161 }
  168. 162
  169. 163 float Shadow_DoPCF(in SHADOWMAP tex, in vec4 projCoord){
  170. 164
  171. 165 vec2 pixSize = pixSize2 * shadowBorderScale;
  172. 166 float shadow = 0.0;
  173. 167 float border = Shadow_BorderCheck(projCoord.xy);
  174. 168 if (border > 0.0)
  175. 169 return 1.0;
  176. 170
  177. 171 float bound = KERNEL * 0.5 - 0.5;
  178. 172 bound *= PCFEDGE;
  179. 173 for (float y = -bound; y <= bound; y += PCFEDGE){
  180. 174 for (float x = -bound; x <= bound; x += PCFEDGE){
  181. 175 vec4 coord = vec4(projCoord.xy + vec2(x,y) * pixSize, projCoord.zw);
  182. 176 shadow += SHADOWCOMPARE(tex, coord);
  183. 177 }
  184. 178 }
  185. 179
  186. 180 shadow = shadow / (KERNEL * KERNEL);
  187. 181 return shadow;
  188. 182 }
  189. 183
  190. 184
  191. 185 //12 tap poisson disk
  192. 186 const vec2 poissonDisk0 = vec2(-0.1711046, -0.425016);
  193. 187 const vec2 poissonDisk1 = vec2(-0.7829809, 0.2162201);
  194. 188 const vec2 poissonDisk2 = vec2(-0.2380269, -0.8835521);
  195. 189 const vec2 poissonDisk3 = vec2(0.4198045, 0.1687819);
  196. 190 const vec2 poissonDisk4 = vec2(-0.684418, -0.3186957);
  197. 191 const vec2 poissonDisk5 = vec2(0.6026866, -0.2587841);
  198. 192 const vec2 poissonDisk6 = vec2(-0.2412762, 0.3913516);
  199. 193 const vec2 poissonDisk7 = vec2(0.4720655, -0.7664126);
  200. 194 const vec2 poissonDisk8 = vec2(0.9571564, 0.2680693);
  201. 195 const vec2 poissonDisk9 = vec2(-0.5238616, 0.802707);
  202. 196 const vec2 poissonDisk10 = vec2(0.5653144, 0.60262);
  203. 197 const vec2 poissonDisk11 = vec2(0.0123658, 0.8627419);
  204. 198
  205. 199
  206. 200 float Shadow_DoPCFPoisson(in SHADOWMAP tex, in vec4 projCoord){
  207. 201
  208. 202 float shadow = 0.0;
  209. 203 float border = Shadow_BorderCheck(projCoord.xy);
  210. 204 if (border > 0.0){
  211. 205 return 1.0;
  212. 206 }
  213. 207
  214. 208 vec2 texelSize = pixSize2 * 4.0 * PCFEDGE * shadowBorderScale;
  215. 209
  216. 210 shadow += SHADOWCOMPARE(tex, vec4(projCoord.xy + poissonDisk0 * texelSize, projCoord.zw));
  217. 211 shadow += SHADOWCOMPARE(tex, vec4(projCoord.xy + poissonDisk1 * texelSize, projCoord.zw));
  218. 212 shadow += SHADOWCOMPARE(tex, vec4(projCoord.xy + poissonDisk2 * texelSize, projCoord.zw));
  219. 213 shadow += SHADOWCOMPARE(tex, vec4(projCoord.xy + poissonDisk3 * texelSize, projCoord.zw));
  220. 214 shadow += SHADOWCOMPARE(tex, vec4(projCoord.xy + poissonDisk4 * texelSize, projCoord.zw));
  221. 215 shadow += SHADOWCOMPARE(tex, vec4(projCoord.xy + poissonDisk5 * texelSize, projCoord.zw));
  222. 216 shadow += SHADOWCOMPARE(tex, vec4(projCoord.xy + poissonDisk6 * texelSize, projCoord.zw));
  223. 217 shadow += SHADOWCOMPARE(tex, vec4(projCoord.xy + poissonDisk7 * texelSize, projCoord.zw));
  224. 218 shadow += SHADOWCOMPARE(tex, vec4(projCoord.xy + poissonDisk8 * texelSize, projCoord.zw));
  225. 219 shadow += SHADOWCOMPARE(tex, vec4(projCoord.xy + poissonDisk9 * texelSize, projCoord.zw));
  226. 220 shadow += SHADOWCOMPARE(tex, vec4(projCoord.xy + poissonDisk10 * texelSize, projCoord.zw));
  227. 221 shadow += SHADOWCOMPARE(tex, vec4(projCoord.xy + poissonDisk11 * texelSize, projCoord.zw));
  228. 222
  229. 223 //this is divided by 12
  230. 224 return shadow * 0.08333333333;
  231. 225 }
  232. 226
  233. 227
  234. 228
  235. 229
  236. 230 uniform COLORTEXTURE m_Texture;
  237. 231 uniform DEPTHTEXTURE m_DepthTexture;
  238. 232 uniform mat4 m_ViewProjectionMatrixInverse;
  239. 233 uniform vec4 m_ViewProjectionMatrixRow2;
  240. 234
  241. 235 in vec2 texCoord;
  242. 236 out vec4 outFragColor;
  243. 237
  244. 238 const mat4 biasMat = mat4(0.5, 0.0, 0.0, 0.0,
  245. 239 0.0, 0.5, 0.0, 0.0,
  246. 240 0.0, 0.0, 0.5, 0.0,
  247. 241 0.5, 0.5, 0.5, 1.0);
  248. 242
  249. 243 uniform mat4 m_LightViewProjectionMatrix0;
  250. 244 uniform mat4 m_LightViewProjectionMatrix1;
  251. 245 uniform mat4 m_LightViewProjectionMatrix2;
  252. 246 uniform mat4 m_LightViewProjectionMatrix3;
  253. 247
  254. 248
  255. 249 vec3 getPosition(in float depth, in vec2 uv){
  256. 250 vec4 pos = vec4(uv, depth, 1.0) * 2.0 - 1.0;
  257. 251 pos = m_ViewProjectionMatrixInverse * pos;
  258. 252 return pos.xyz / pos.w;
  259. 253 }
  260. 254
  261. 255 vec4 main_multiSample(in int numSample){
  262. 256 float depth = fetchTextureSample(m_DepthTexture,texCoord,numSample).r;//getDepth(m_DepthTexture,texCoord).r;
  263. 257 vec4 color = fetchTextureSample(m_Texture,texCoord,numSample);
  264. 258
  265. 259 //Discard shadow computation on the sky
  266. 260 if(depth == 1.0){
  267. 261 return color;
  268. 262 }
  269. 263
  270. 264 // get the vertex in world space
  271. 265 vec4 worldPos = vec4(getPosition(depth,texCoord),1.0);
  272. 266
  273. 267 // populate the light view matrices array and convert vertex to light viewProj space
  274. 268 vec4 projCoord0 = biasMat * m_LightViewProjectionMatrix0 * worldPos;
  275. 269 vec4 projCoord1 = biasMat * m_LightViewProjectionMatrix1 * worldPos;
  276. 270 vec4 projCoord2 = biasMat * m_LightViewProjectionMatrix2 * worldPos;
  277. 271 vec4 projCoord3 = biasMat * m_LightViewProjectionMatrix3 * worldPos;
  278. 272
  279. 273 float shadowPosition = m_ViewProjectionMatrixRow2.x * worldPos.x + m_ViewProjectionMatrixRow2.y * worldPos.y + m_ViewProjectionMatrixRow2.z * worldPos.z + m_ViewProjectionMatrixRow2.w;
  280. 274
  281. 275 float shadow = 0.0;
  282. 276 if(shadowPosition < m_Splits.x){
  283. 277 shadow = GETSHADOW(m_ShadowMap0, projCoord0);
  284. 278 }else if( shadowPosition < m_Splits.y){
  285. 279 shadowBorderScale = 0.5;
  286. 280 shadow = GETSHADOW(m_ShadowMap1, projCoord1);
  287. 281 }else if( shadowPosition < m_Splits.z){
  288. 282 shadowBorderScale = 0.25;
  289. 283 shadow = GETSHADOW(m_ShadowMap2, projCoord2);
  290. 284 }else if( shadowPosition < m_Splits.w){
  291. 285 shadowBorderScale = 0.125;
  292. 286 shadow = GETSHADOW(m_ShadowMap3, projCoord3);
  293. 287 }
  294. 288
  295. 289 shadow= shadow * m_ShadowIntensity + (1.0 - m_ShadowIntensity);
  296. 290
  297. 291 return color * vec4(shadow, shadow, shadow, 1.0);
  298. 292 }
  299. 293
  300. 294 void main(){
  301. 295
  302. 296 #ifdef RESOLVE_MS
  303. 297 vec4 color = vec4(0.0);
  304. 298 for (int i = 0; i < m_NumSamples; i++){
  305. 299 color += main_multiSample(i);
  306. 300 }
  307. 301 outFragColor = color / m_NumSamples;
  308. 302 #else
  309. 303 outFragColor = main_multiSample(0);
  310. 304 #endif
  311. 305
  312. 306 }
Advertisement
Add Comment
Please, Sign In to add comment