mirror of
https://github.com/cocos/cocos-engine.git
synced 2026-09-09 17:20:33 +08:00
* add surface shader * remove unused item * arrange main-functions * arrange main-functions * fix compatible lighting mode
155 lines
5.8 KiB
Plaintext
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
|
|
|