From 18ca45b865d1281bcb8bdfff11b15ac20955f7b7 Mon Sep 17 00:00:00 2001 From: Hamada - Mimar Cyber Office PC <30869499+themodmin@users.noreply.github.com> Date: Mon, 18 Nov 2024 16:24:20 +0800 Subject: [PATCH] Use RawShaderMaterial for transparent objects to improve culling --- .../fragments/IfcStreamer/src/geometry-culler-renderer.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/front/src/fragments/IfcStreamer/src/geometry-culler-renderer.ts b/packages/front/src/fragments/IfcStreamer/src/geometry-culler-renderer.ts index ff2aa0029..95a04feab 100644 --- a/packages/front/src/fragments/IfcStreamer/src/geometry-culler-renderer.ts +++ b/packages/front/src/fragments/IfcStreamer/src/geometry-culler-renderer.ts @@ -34,11 +34,13 @@ export class GeometryCullerRenderer extends OBC.CullerRenderer { private readonly _geometry: THREE.BufferGeometry; private _material = new THREE.MeshBasicMaterial({ - transparent: true, + transparent: false, side: 2, opacity: 1, }); + private _materialT = new THREE.RawShaderMaterial(); + readonly onViewUpdated = new OBC.AsyncEvent<{ toLoad: { [modelID: string]: Map> }; toRemove: { [modelID: string]: Set }; @@ -290,9 +292,10 @@ export class GeometryCullerRenderer extends OBC.CullerRenderer { // Substitute it by fragment with same color if (!geometry.fragment) { + const material = frag.mesh.instanceColor?.array?.[4] !== undefined && frag.mesh.instanceColor.array[4] < 0.9 ? this._materialT : this._material; geometry.fragment = new FRAGS.Fragment( frag.mesh.geometry, - this._material, + material, frag.capacity, );