Files
cocos-engine/editor/assets/chunks/surfaces/module-functions/debug-view.chunk
jk20012001 0ecaa8db51 add surface shader (#11048)
* add surface shader

* remove unused item

* arrange main-functions

* arrange main-functions

* fix compatible lighting mode
2022-05-13 21:18:22 +08:00

155 lines
5.8 KiB
Plaintext

// make divid-by-zero, non-rational pixel more obvious
void CCSurfacesDebugDisplayInvalidNumber(inout vec4 color)
{
vec4 error = vec4(1.0, 0.0, 0.2, 1.0);
color = (isnans(color.rgb) || isinfs(color.rgb)) ? error : color;
}
#if (CC_SURFACES_DEBUG_VIEW_MODE || CC_SURFACES_USE_DEBUG_VIEW == CC_SURFACES_DEBUG_VIEW_SINGLE) && !CC_FORWARD_ADD
void CCSurfacesDebugViewMeshData(out vec4 color)
{
vec4 white = vec4(1.0, 1.0, 1.0, 1.0);
vec4 black = vec4(0.0, 0.0, 0.0, 1.0);
// vertex input
#if CC_SURFACES_DEBUG_VIEW_MODE == CC_SURFACES_DEBUG_VIEW_VERTEX_COLOR
#if CC_SURFACES_USE_VERTEX_COLOR
color = FSInput_vertexColor;
#else
color = white;
#endif
#endif
#if CC_SURFACES_DEBUG_VIEW_MODE == CC_SURFACES_DEBUG_VIEW_VERTEX_NORMAL
color = vec4(FSInput_worldNormal * 0.5 + vec3(0.5), 1.0);
#endif
#if CC_SURFACES_DEBUG_VIEW_MODE == CC_SURFACES_DEBUG_VIEW_VERTEX_TANGENT
#if CC_SURFACES_USE_TANGENT_SPACE
color = vec4(FSInput_worldTangent * 0.5 + vec3(0.5), 1.0);
#else
color = black;
#endif
#endif
#if CC_SURFACES_DEBUG_VIEW_MODE == CC_SURFACES_DEBUG_VIEW_VERTEX_MIRROR
#if CC_SURFACES_USE_TANGENT_SPACE
float sign = FSInput_mirrorNormal * 0.5 + 0.5;
color = vec4(sign, sign, sign, 1.0);
#else
color = black;
#endif
#endif
#if CC_SURFACES_DEBUG_VIEW_MODE == CC_SURFACES_DEBUG_VIEW_FACE_SIDE
float scalar = clamp(FSInput_faceSideSign, 0.0, 1.0);
color = vec4(scalar, scalar, scalar, 1.0);
#endif
#if CC_SURFACES_DEBUG_VIEW_MODE == CC_SURFACES_DEBUG_VIEW_UV0
color = vec4(FSInput_texcoord.xy, 0.0, 1.0);
#endif
#if CC_SURFACES_DEBUG_VIEW_MODE == CC_SURFACES_DEBUG_VIEW_UV1
color = vec4(FSInput_texcoord1.xy, 0.0, 1.0);
#endif
#if CC_SURFACES_DEBUG_VIEW_MODE == CC_SURFACES_DEBUG_VIEW_UVLIGHTMAP
#if CC_SURFACES_USE_LIGHT_MAP && !CC_SURFACES_USE_BATCHING && !CC_FORWARD_ADD
color = vec4(FSInput_lightMapUV.xy, 0.0, 1.0);
#else
color = vec4(0.0, 0.0, 0.0, 1.0);
#endif
#endif
#if CC_SURFACES_DEBUG_VIEW_MODE == CC_SURFACES_DEBUG_VIEW_PROJ_DEPTH
vec4 clipPos = cc_matProj * cc_matView * vec4(FSInput_worldPos.xyz, 1.0);
float depth = clipPos.z / clipPos.w;
color = vec4(depth, depth, depth, 1.0);
#endif
#if CC_SURFACES_DEBUG_VIEW_MODE == CC_SURFACES_DEBUG_VIEW_LINEAR_DEPTH
vec4 viewPos = cc_matView * vec4(FSInput_worldPos.xyz, 1.0);
float depth = (-viewPos.z - cc_nearFar.x) / cc_nearFar.y;
color = vec4(depth, depth, depth, 1.0);
#endif
#if CC_SURFACES_DEBUG_VIEW_MODE == CC_SURFACES_DEBUG_VIEW_WORLD_POS
color = vec4(FSInput_worldPos.xyz, 1.0);
#endif
}
#endif
#if CC_SURFACES_DEBUG_VIEW_MODE || CC_SURFACES_USE_DEBUG_VIEW == CC_SURFACES_DEBUG_VIEW_SINGLE
// Lighting related
void CCSurfacesDebugViewLightingResult(out vec4 color, in LightingResult lightingResult)
{
#if CC_SURFACES_DEBUG_VIEW_MODE == CC_SURFACES_DEBUG_VIEW_DIRECT_DIFFUSE
color.rgb = lightingResult.directDiffuse * lightingResult.diffuseColorWithLighting;
#endif
#if CC_SURFACES_DEBUG_VIEW_MODE == CC_SURFACES_DEBUG_VIEW_DIRECT_SPECULAR
color.rgb = lightingResult.directSpecular * lightingResult.specularColorWithLighting;
#endif
#if CC_SURFACES_DEBUG_VIEW_MODE == CC_SURFACES_DEBUG_VIEW_DIRECT_ALL
color.rgb = lightingResult.directDiffuse * lightingResult.diffuseColorWithLighting + lightingResult.directSpecular * lightingResult.specularColorWithLighting;
#endif
#if CC_SURFACES_DEBUG_VIEW_MODE == CC_SURFACES_DEBUG_VIEW_ENV_DIFFUSE
color.rgb = lightingResult.environmentDiffuse * lightingResult.diffuseColorWithLighting;
#endif
#if CC_SURFACES_DEBUG_VIEW_MODE == CC_SURFACES_DEBUG_VIEW_ENV_SPECULAR
color.rgb = lightingResult.environmentSpecular * lightingResult.specularColorWithLighting;
#endif
#if CC_SURFACES_DEBUG_VIEW_MODE == CC_SURFACES_DEBUG_VIEW_ENV_ALL
color.rgb = lightingResult.environmentDiffuse * lightingResult.diffuseColorWithLighting + lightingResult.environmentSpecular * lightingResult.specularColorWithLighting;
#endif
#if CC_SURFACES_DEBUG_VIEW_MODE == CC_SURFACES_DEBUG_VIEW_LIGHT_MAP
color.rgb = lightingResult.lightmapColor;
#endif
#if CC_SURFACES_DEBUG_VIEW_MODE == CC_SURFACES_DEBUG_VIEW_EMISSIVE
color.rgb = lightingResult.emissive;
#endif
#if CC_SURFACES_DEBUG_VIEW_MODE == CC_SURFACES_DEBUG_VIEW_AO
color.rgb = vec3(lightingResult.ao);
#endif
#if CC_SURFACES_DEBUG_VIEW_MODE == CC_SURFACES_DEBUG_VIEW_SHADOW
color.rgb = vec3(lightingResult.shadow);
#endif
}
#endif
#if CC_SURFACES_DEBUG_VIEW_COMPOSITE_MODE || CC_SURFACES_USE_DEBUG_VIEW == CC_SURFACES_DEBUG_VIEW_COMPOSITE_AND_MISC
void CCSurfacesDebugViewCompositeLightingResult(inout LightingResult lightingResult)
{
#if !(CC_SURFACES_DEBUG_VIEW_COMPOSITE_MODE & CC_SURFACES_DEBUG_VIEW_COMPOSITE_DIRECT_DIFFUSE)
lightingResult.directDiffuse = vec3(0.0);
#endif
#if !(CC_SURFACES_DEBUG_VIEW_COMPOSITE_MODE & CC_SURFACES_DEBUG_VIEW_COMPOSITE_DIRECT_SPECULAR)
lightingResult.directSpecular = vec3(0.0);
#endif
#if !(CC_SURFACES_DEBUG_VIEW_COMPOSITE_MODE & CC_SURFACES_DEBUG_VIEW_COMPOSITE_ENV_DIFFUSE)
lightingResult.environmentDiffuse = vec3(0.0);
#endif
#if !(CC_SURFACES_DEBUG_VIEW_COMPOSITE_MODE & CC_SURFACES_DEBUG_VIEW_COMPOSITE_ENV_SPECULAR)
lightingResult.environmentSpecular = vec3(0.0);
#endif
#if !(CC_SURFACES_DEBUG_VIEW_COMPOSITE_MODE & CC_SURFACES_DEBUG_VIEW_COMPOSITE_EMISSIVE)
lightingResult.emissive = vec3(0.0);
#endif
#if !(CC_SURFACES_DEBUG_VIEW_COMPOSITE_MODE & CC_SURFACES_DEBUG_VIEW_COMPOSITE_LIGHT_MAP)
lightingResult.lightmapColor = vec3(0.0);
#endif
#if !(CC_SURFACES_DEBUG_VIEW_COMPOSITE_MODE & CC_SURFACES_DEBUG_VIEW_COMPOSITE_SHADOW)
lightingResult.shadow = 1.0;
#endif
#if !(CC_SURFACES_DEBUG_VIEW_COMPOSITE_MODE & CC_SURFACES_DEBUG_VIEW_COMPOSITE_AO)
lightingResult.ao = 1.0;
#endif
}
#endif