Skip to content

Commit

Permalink
Optimize the logic processing of adding objects in scene culling.
Browse files Browse the repository at this point in the history
  • Loading branch information
GengineJS committed Sep 10, 2024
1 parent 483b99f commit 212fc28
Showing 1 changed file with 10 additions and 15 deletions.
25 changes: 10 additions & 15 deletions cocos/rendering/custom/scene-culling.ts
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,7 @@ function sceneCulling (
if (!model.enabled || !model.node || (castShadow && !model.castShadow)) {
continue;
}
if (scene && scene.isCulledByLod(camera, model)) {
if (scene.isCulledByLod(camera, model)) {
continue;
}
if (!probe || (probe && probe.probeType === ProbeType.CUBE)) {
Expand Down Expand Up @@ -197,15 +197,12 @@ function isBlend (pass: Pass): boolean {
}
return bBlend;
}

const _tempVec3 = new Vec3();
function computeSortingDepth (camera: Camera, model: Model): number {
let depth = 0;
if (model.node) {
const node = model.transform;
const tempVec3 = vec3Pool.acquire();
const position = Vec3.subtract(tempVec3, node.worldPosition, camera.position);
depth = position.dot(camera.forward);
vec3Pool.release(tempVec3);
Vec3.subtract(_tempVec3, model.worldBounds ? model.worldBounds.center : model.node.worldPosition, camera.position);
depth = Vec3.dot(_tempVec3, camera.forward);
}
return depth;
}
Expand All @@ -226,6 +223,7 @@ function addRenderObject (
const subModels = model.subModels;
const subModelCount = subModels.length;
const skyboxModel = pSceneData.skybox.model;
const depth = computeSortingDepth(camera, model);
for (let subModelIdx = 0; subModelIdx < subModelCount; ++subModelIdx) {
const subModel = subModels[subModelIdx];
const passes = subModel.passes;
Expand All @@ -234,7 +232,7 @@ function addRenderObject (
if (probePhase) phaseLayoutId = probeQueue.defaultId;
for (let passIdx = 0; passIdx < passCount; ++passIdx) {
if (model === skyboxModel && !subModelIdx && !passIdx && isDrawOpaqueOrMask) {
queue.opaqueQueue.add(model, computeSortingDepth(camera, model), subModelIdx, passIdx);
queue.opaqueQueue.add(model, depth, subModelIdx, passIdx);
continue;
}
const pass = passes[passIdx];
Expand All @@ -244,7 +242,7 @@ function addRenderObject (
continue;
}
// check scene flags
const is_blend = isBlend(pass);
const is_blend = pass.blendState.targets[0].blend;
const isOpaqueOrMask = !is_blend;
if (!isDrawBlend && is_blend) {
// skip transparent object
Expand All @@ -262,13 +260,10 @@ function addRenderObject (
} else {
queue.opaqueInstancingQueue.add(pass, subModel, passIdx);
}
} else if (is_blend) {
queue.transparentQueue.add(model, depth, subModelIdx, passIdx);
} else {
const depth = computeSortingDepth(camera, model);
if (is_blend) {
queue.transparentQueue.add(model, depth, subModelIdx, passIdx);
} else {
queue.opaqueQueue.add(model, depth, subModelIdx, passIdx);
}
queue.opaqueQueue.add(model, depth, subModelIdx, passIdx);
}
}
}
Expand Down

0 comments on commit 212fc28

Please sign in to comment.