debug-view.chunk 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298
  1. // make divid-by-zero, non-rational pixel more obvious
  2. vec4 CCSurfacesDebugDisplayInvalidNumber(vec4 color)
  3. {
  4. float index = mod(cc_time.x * 10.0, 2.0);
  5. vec4 error = index < 1.0 ? vec4(1.0, 0.0, 0.2, 1.0) : vec4(0.0, 1.0, 0.2, 1.0);
  6. return (isnans(color.rgb) || isinfs(color.rgb)) ? error : color;
  7. }
  8. vec4 CCSurfacesDebugDisplayInvalidInputData(vec4 color, vec3 data)
  9. {
  10. float index = mod(cc_time.x * 10.0, 2.0);
  11. vec4 error = index < 1.0 ? vec4(1.0, 0.0, 0.2, 1.0) : vec4(0.0, 1.0, 0.2, 1.0);
  12. return (isnans(data) || isinfs(data)) ? error : color;
  13. }
  14. #if CC_USE_DEBUG_VIEW == CC_SURFACES_DEBUG_VIEW_SINGLE && !CC_FORWARD_ADD
  15. void CCSurfacesDebugViewMeshData(inout vec4 color)
  16. {
  17. vec4 white = vec4(1.0, 1.0, 1.0, 1.0);
  18. vec4 black = vec4(0.0, 0.0, 0.0, 1.0);
  19. // vertex input
  20. if (IS_DEBUG_VIEW_SINGLE_MODE(CC_SURFACES_DEBUG_VIEW_VERTEX_COLOR))
  21. {
  22. #if CC_SURFACES_USE_VERTEX_COLOR
  23. color = FSInput_vertexColor;
  24. #else
  25. color = white;
  26. #endif
  27. }
  28. if (IS_DEBUG_VIEW_SINGLE_MODE(CC_SURFACES_DEBUG_VIEW_VERTEX_NORMAL))
  29. color = vec4(FSInput_worldNormal * 0.5 + vec3(0.5), 1.0);
  30. if (IS_DEBUG_VIEW_SINGLE_MODE(CC_SURFACES_DEBUG_VIEW_VERTEX_TANGENT))
  31. {
  32. #if CC_SURFACES_USE_TANGENT_SPACE
  33. color = vec4(FSInput_worldTangent * 0.5 + vec3(0.5), 1.0);
  34. #else
  35. color = black;
  36. #endif
  37. }
  38. if (IS_DEBUG_VIEW_SINGLE_MODE(CC_SURFACES_DEBUG_VIEW_VERTEX_MIRROR))
  39. {
  40. #if CC_SURFACES_USE_TANGENT_SPACE
  41. float sign = FSInput_mirrorNormal * 0.5 + 0.5;
  42. color = vec4(sign, sign, sign, 1.0);
  43. #else
  44. color = black;
  45. #endif
  46. }
  47. if (IS_DEBUG_VIEW_SINGLE_MODE(CC_SURFACES_DEBUG_VIEW_FACE_SIDE))
  48. {
  49. float scalar = clamp(FSInput_faceSideSign, 0.0, 1.0);
  50. color = vec4(scalar, scalar, scalar, 1.0);
  51. }
  52. if (IS_DEBUG_VIEW_SINGLE_MODE(CC_SURFACES_DEBUG_VIEW_UV0))
  53. color = vec4(FSInput_texcoord.xy, 0.0, 1.0);
  54. if (IS_DEBUG_VIEW_SINGLE_MODE(CC_SURFACES_DEBUG_VIEW_UV1))
  55. color = vec4(FSInput_texcoord1.xy, 0.0, 1.0);
  56. if (IS_DEBUG_VIEW_SINGLE_MODE(CC_SURFACES_DEBUG_VIEW_UVLIGHTMAP))
  57. {
  58. #if CC_USE_LIGHTMAP && !CC_FORWARD_ADD
  59. color = vec4(FSInput_lightMapUV.xy, 0.0, 1.0);
  60. #else
  61. color = vec4(0.0, 0.0, 0.0, 1.0);
  62. #endif
  63. }
  64. if (IS_DEBUG_VIEW_SINGLE_MODE(CC_SURFACES_DEBUG_VIEW_PROJ_DEPTH))
  65. {
  66. vec4 clipPos = cc_matProj * cc_matView * vec4(FSInput_worldPos.xyz, 1.0);
  67. float depth = clipPos.z / clipPos.w;
  68. color = vec4(depth, depth, depth, 1.0);
  69. }
  70. if (IS_DEBUG_VIEW_SINGLE_MODE(CC_SURFACES_DEBUG_VIEW_LINEAR_DEPTH))
  71. {
  72. vec4 viewPos = cc_matView * vec4(FSInput_worldPos.xyz, 1.0);
  73. float depth = (-viewPos.z - cc_nearFar.x) / cc_nearFar.y;
  74. color = vec4(depth, depth, depth, 1.0);
  75. }
  76. if (IS_DEBUG_VIEW_SINGLE_MODE(CC_SURFACES_DEBUG_VIEW_WORLD_POS))
  77. color = vec4(FSInput_worldPos.xyz, 1.0);
  78. }
  79. #endif
  80. // Lighting related
  81. #if CC_USE_DEBUG_VIEW == CC_SURFACES_DEBUG_VIEW_SINGLE
  82. bool CCSurfacesDebugViewLightingResult(inout vec4 color, in LightingResult lightingResult)
  83. {
  84. // whether need tone mapping & LinearToSRGB
  85. bool isSRGBColor = false;
  86. if (IS_DEBUG_VIEW_SINGLE_MODE(CC_SURFACES_DEBUG_VIEW_DIRECT_DIFFUSE))
  87. {
  88. color.rgb = lightingResult.directDiffuse * lightingResult.diffuseColorWithLighting;
  89. isSRGBColor = true;
  90. }
  91. if (IS_DEBUG_VIEW_SINGLE_MODE(CC_SURFACES_DEBUG_VIEW_DIRECT_SPECULAR))
  92. {
  93. color.rgb = lightingResult.directSpecular * lightingResult.specularColorWithLighting * lightingResult.directGF;
  94. isSRGBColor = true;
  95. }
  96. if (IS_DEBUG_VIEW_SINGLE_MODE(CC_SURFACES_DEBUG_VIEW_DIRECT_ALL))
  97. {
  98. color.rgb = lightingResult.directDiffuse * lightingResult.diffuseColorWithLighting + lightingResult.directSpecular * lightingResult.specularColorWithLighting * lightingResult.directGF;
  99. isSRGBColor = true;
  100. }
  101. if (IS_DEBUG_VIEW_SINGLE_MODE(CC_SURFACES_DEBUG_VIEW_ENV_DIFFUSE))
  102. {
  103. color.rgb = lightingResult.environmentDiffuse * lightingResult.diffuseColorWithLighting;
  104. isSRGBColor = true;
  105. }
  106. if (IS_DEBUG_VIEW_SINGLE_MODE(CC_SURFACES_DEBUG_VIEW_ENV_SPECULAR))
  107. {
  108. color.rgb = lightingResult.environmentSpecular * lightingResult.specularColorWithLighting * lightingResult.environmentGF;
  109. isSRGBColor = true;
  110. }
  111. if (IS_DEBUG_VIEW_SINGLE_MODE(CC_SURFACES_DEBUG_VIEW_ENV_ALL))
  112. {
  113. color.rgb = lightingResult.environmentDiffuse * lightingResult.diffuseColorWithLighting + lightingResult.environmentSpecular * lightingResult.specularColorWithLighting * lightingResult.environmentGF;
  114. isSRGBColor = true;
  115. }
  116. if (IS_DEBUG_VIEW_SINGLE_MODE(CC_SURFACES_DEBUG_VIEW_LIGHT_MAP))
  117. {
  118. color.rgb = lightingResult.lightmapColor;
  119. isSRGBColor = true;
  120. }
  121. if (IS_DEBUG_VIEW_SINGLE_MODE(CC_SURFACES_DEBUG_VIEW_EMISSIVE))
  122. {
  123. color.rgb = lightingResult.emissive;
  124. isSRGBColor = true;
  125. }
  126. if (IS_DEBUG_VIEW_SINGLE_MODE(CC_SURFACES_DEBUG_VIEW_AO))
  127. {
  128. color.rgb = vec3(lightingResult.ao);
  129. isSRGBColor = false;
  130. }
  131. if (IS_DEBUG_VIEW_SINGLE_MODE(CC_SURFACES_DEBUG_VIEW_SHADOW))
  132. {
  133. color.rgb = vec3(lightingResult.shadow);
  134. isSRGBColor = false;
  135. }
  136. vec3 fresnel = lightingResult.fresnel;
  137. vec3 directTransmitSpecular = vec3(0.0), environmentTransmitSpecular = vec3(0.0);
  138. vec3 directTransmitDiffuse = vec3(0.0), environmentTransmitDiffuse = vec3(0.0);
  139. vec3 diffuseColorWithLightingTT = vec3(0.0), specularColorWithLighting2ndSpecular = vec3(0.0);
  140. vec3 direct2ndSpecular = vec3(0.0), environment2ndSpecular = vec3(0.0);
  141. #if CC_SURFACES_LIGHTING_TRANSMIT_SPECULAR
  142. directTransmitSpecular = lightingResult.directTransmitSpecular;
  143. environmentTransmitSpecular = lightingResult.environmentTransmitSpecular;
  144. #endif
  145. #if CC_SURFACES_LIGHTING_TRANSMIT_DIFFUSE
  146. directTransmitDiffuse = lightingResult.directTransmitDiffuse;
  147. environmentTransmitDiffuse = lightingResult.environmentTransmitDiffuse;
  148. #endif
  149. #if CC_SURFACES_LIGHTING_2ND_LAYER_SPECULAR
  150. direct2ndSpecular = lightingResult.direct2ndSpecular * lightingResult.directGF2ndSpecular;
  151. environment2ndSpecular = lightingResult.environment2ndSpecular * lightingResult.environmentGF2ndSpecular;
  152. specularColorWithLighting2ndSpecular = lightingResult.specularColorWithLighting2ndSpecular;
  153. #if CC_SURFACES_LIGHTING_USE_MULTIPLE_LAYER_BLEND
  154. fresnel = lightingResult.environmentSubLayerF;
  155. #endif
  156. #endif
  157. #if CC_SURFACES_LIGHTING_USE_MULTIPLE_LAYER_BLEND
  158. direct2ndSpecular = lightingResult.directSpecularSubLayers;
  159. environment2ndSpecular = lightingResult.environmentSpecularSubLayers;
  160. #endif
  161. if (IS_DEBUG_VIEW_SINGLE_MODE(CC_SURFACES_DEBUG_VIEW_FRESNEL))
  162. {
  163. color.rgb = vec3(fresnel);
  164. isSRGBColor = false;
  165. }
  166. if (IS_DEBUG_VIEW_SINGLE_MODE(CC_SURFACES_DEBUG_VIEW_TRANSMIT_DIRECT_SPECULAR))
  167. {
  168. color.rgb = directTransmitSpecular;
  169. isSRGBColor = true;
  170. }
  171. if (IS_DEBUG_VIEW_SINGLE_MODE(CC_SURFACES_DEBUG_VIEW_TRANSMIT_ENV_SPECULAR))
  172. {
  173. color.rgb = environmentTransmitSpecular;
  174. isSRGBColor = true;
  175. }
  176. if (IS_DEBUG_VIEW_SINGLE_MODE(CC_SURFACES_DEBUG_VIEW_TRANSMIT_DIRECT_DIFFUSE))
  177. {
  178. color.rgb = directTransmitDiffuse;
  179. isSRGBColor = true;
  180. }
  181. if (IS_DEBUG_VIEW_SINGLE_MODE(CC_SURFACES_DEBUG_VIEW_TRANSMIT_ENV_DIFFUSE))
  182. {
  183. color.rgb = environmentTransmitDiffuse;
  184. isSRGBColor = true;
  185. }
  186. if (IS_DEBUG_VIEW_SINGLE_MODE(CC_SURFACES_DEBUG_VIEW_TRANSMIT_ALL))
  187. {
  188. color.rgb = directTransmitSpecular + environmentTransmitSpecular + directTransmitDiffuse + environmentTransmitDiffuse;
  189. isSRGBColor = true;
  190. }
  191. if (IS_DEBUG_VIEW_SINGLE_MODE(CC_SURFACES_DEBUG_VIEW_DIRECT_2ND_SPECULAR))
  192. {
  193. color.rgb = direct2ndSpecular * specularColorWithLighting2ndSpecular;
  194. isSRGBColor = true;
  195. }
  196. if (IS_DEBUG_VIEW_SINGLE_MODE(CC_SURFACES_DEBUG_VIEW_ENVIRONMENT_2ND_SPECULAR))
  197. {
  198. color.rgb = environment2ndSpecular * specularColorWithLighting2ndSpecular;
  199. isSRGBColor = true;
  200. }
  201. if (IS_DEBUG_VIEW_SINGLE_MODE(CC_SURFACES_DEBUG_VIEW_2ND_SPECULAR_ALL))
  202. {
  203. color.rgb = (direct2ndSpecular + environment2ndSpecular) * specularColorWithLighting2ndSpecular;
  204. isSRGBColor = true;
  205. }
  206. return isSRGBColor;
  207. }
  208. #endif
  209. #if CC_USE_DEBUG_VIEW == CC_SURFACES_DEBUG_VIEW_COMPOSITE_AND_MISC
  210. void CCSurfacesDebugViewCompositeLightingResult(inout LightingResult lightingResult)
  211. {
  212. if (!IS_DEBUG_VIEW_COMPOSITE_ENABLE_DIRECT_DIFFUSE)
  213. lightingResult.directDiffuse = vec3(0.0);
  214. if (!IS_DEBUG_VIEW_COMPOSITE_ENABLE_DIRECT_SPECULAR)
  215. lightingResult.directSpecular = vec3(0.0);
  216. if (!IS_DEBUG_VIEW_COMPOSITE_ENABLE_ENV_DIFFUSE)
  217. lightingResult.environmentDiffuse = vec3(0.0);
  218. if (!IS_DEBUG_VIEW_COMPOSITE_ENABLE_ENV_SPECULAR)
  219. lightingResult.environmentSpecular = vec3(0.0);
  220. #if CC_SURFACES_LIGHTING_TRANSMIT_DIFFUSE
  221. if (!IS_DEBUG_VIEW_COMPOSITE_ENABLE_TRANSMIT_DIFFUSE)
  222. lightingResult.directTransmitDiffuse = lightingResult.environmentTransmitDiffuse = vec3(0.0);
  223. #endif
  224. #if CC_SURFACES_LIGHTING_TRANSMIT_SPECULAR
  225. if (!IS_DEBUG_VIEW_COMPOSITE_ENABLE_TRANSMIT_SPECULAR)
  226. lightingResult.directTransmitSpecular = lightingResult.environmentTransmitSpecular = vec3(0.0);
  227. #endif
  228. #if CC_SURFACES_LIGHTING_2ND_LAYER_SPECULAR
  229. if (!IS_DEBUG_VIEW_COMPOSITE_ENABLE_2ND_SPECULAR)
  230. lightingResult.direct2ndSpecular = lightingResult.environment2ndSpecular = vec3(0.0);
  231. #endif
  232. #if CC_SURFACES_LIGHTING_TT
  233. if (!IS_DEBUG_VIEW_COMPOSITE_ENABLE_TT)
  234. lightingResult.directTT = vec3(0.0);
  235. #endif
  236. if (!IS_DEBUG_VIEW_COMPOSITE_ENABLE_EMISSIVE)
  237. lightingResult.emissive = vec3(0.0);
  238. if (!IS_DEBUG_VIEW_COMPOSITE_ENABLE_LIGHT_MAP)
  239. lightingResult.lightmapColor = vec3(0.0);
  240. if (!IS_DEBUG_VIEW_COMPOSITE_ENABLE_SHADOW)
  241. lightingResult.shadow = 1.0;
  242. if (!IS_DEBUG_VIEW_COMPOSITE_ENABLE_AO)
  243. lightingResult.ao = 1.0;
  244. if (!IS_DEBUG_VIEW_COMPOSITE_ENABLE_FRESNEL)
  245. lightingResult.fresnel = vec3(1.0);
  246. }
  247. #endif