tahamajs's picture
download
raw
2.24 kB
/**
* core/lod.js
* ===========
* Adaptive Level of Detail (LOD) & Scalable Scene Complexity Manager.
* Dynamically modulates 3D mesh visibility, outline resolution, and sublayer
* particle streams based on camera distance to maintain 60 FPS across all devices.
*/
export const LOD_THRESHOLDS = {
FAR_DISTANCE: 55.0,
MEDIUM_DISTANCE: 22.0
};
/**
* Determines LOD level ('far', 'medium', 'near') based on camera Euclidean distance.
* @param {number} cameraDistance - Distance from camera to active target
* @param {number} [totalNodes=100] - Total active scene meshes
* @returns {'far'|'medium'|'near'} LOD mode
*/
export function getLODLevel(cameraDistance, totalNodes = 100) {
if (cameraDistance > LOD_THRESHOLDS.FAR_DISTANCE || totalNodes > 400) {
return 'far';
}
if (cameraDistance > LOD_THRESHOLDS.MEDIUM_DISTANCE || totalNodes > 200) {
return 'medium';
}
return 'near';
}
/**
* Applies LOD visibility rules to a list of visual scene objects.
* @param {Array<Object>} visualObjects - Array of Three.js objects or mock mesh items
* @param {'far'|'medium'|'near'} level - Target LOD level
* @returns {number} Count of visible objects
*/
export function applyLOD(visualObjects, level) {
if (!visualObjects || !Array.isArray(visualObjects)) return 0;
let visibleCount = 0;
visualObjects.forEach(obj => {
if (!obj) return;
const uData = obj.userData || {};
switch (level) {
case 'far':
// Only show macro layer block boundaries and stage platforms
obj.visible = Boolean(uData.isLayerBlock || uData.isStagePlatform || uData.type === 'macro');
break;
case 'medium':
// Show macro layer blocks and major component projections (hide fine head division lines)
obj.visible = !uData.isFineDetail && !uData.isHeadLine && !uData.isDimensionBadge;
break;
case 'near':
default:
// Show everything (all sublayers, head lines, dimension badges)
obj.visible = true;
break;
}
if (obj.visible) visibleCount++;
});
return visibleCount;
}

Xet Storage Details

Size:
2.24 kB
·
Xet hash:
2cda1ed3fa86d118367ea1bea092a5daea407cab7a348ad8b5dbbb8e505168c7

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.