Skip to content

Commit

Permalink
Optimize scene culling code
Browse files Browse the repository at this point in the history
  • Loading branch information
GengineJS committed Sep 10, 2024
1 parent 3ecad78 commit 0d9fd02
Showing 1 changed file with 21 additions and 20 deletions.
41 changes: 21 additions & 20 deletions cocos/rendering/custom/scene-culling.ts
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,10 @@ function isModelVisible (model: Model, visibility: number): boolean {
return !!(visibility & model.visFlags);
}

function isVisible (model: Model, visibility: number): boolean {
return isNodeVisible(model.node, visibility) || isModelVisible(model, visibility);
}

function isReflectProbeMask (model: Model): boolean {
return bool((model.node.layer & REFLECTION_PROBE_DEFAULT_MASK) === model.node.layer || (REFLECTION_PROBE_DEFAULT_MASK & model.visFlags));
}
Expand Down Expand Up @@ -167,33 +171,30 @@ function sceneCulling (
if (scene.isCulledByLod(camera, model)) {
continue;
}
if (!probe || (probe && probe.probeType === ProbeType.CUBE)) {
if (isNodeVisible(model.node, visibility)
|| isModelVisible(model, visibility)) {
const wBounds = model.worldBounds;
// frustum culling
if (wBounds && ((!probe && isFrustumVisible(model, camOrLightFrustum, castShadow))
|| (probe && isIntersectAABB(wBounds, probe.boundingBox!)))) {
continue;
}

models.push(model);
const wBounds = model.worldBounds;
if (!probe) {
if (!isVisible(model, visibility)) {
continue;
}
// frustum culling
if (wBounds && isFrustumVisible(model, camOrLightFrustum, castShadow)) {
continue;
}
models.push(model);
} else if (probe.probeType === ProbeType.CUBE) {
if (!isVisible(model, visibility)) {
continue;
}
if (wBounds && isIntersectAABB(wBounds, probe.boundingBox!)) {
continue;
}
models.push(model);
} else if (isReflectProbeMask(model)) {
models.push(model);
}
}
}

function isBlend (pass: Pass): boolean {
let bBlend = false;
for (const target of pass.blendState.targets) {
if (target.blend) {
bBlend = true;
}
}
return bBlend;
}
const _tempVec3 = new Vec3();
function computeSortingDepth (camera: Camera, model: Model): number {
let depth = 0;
Expand Down

0 comments on commit 0d9fd02

Please sign in to comment.