diff --git a/packages/viewer/src/components/renderers/item/item-renderer.tsx b/packages/viewer/src/components/renderers/item/item-renderer.tsx index 34bc1d9f..c8d94dc5 100644 --- a/packages/viewer/src/components/renderers/item/item-renderer.tsx +++ b/packages/viewer/src/components/renderers/item/item-renderer.tsx @@ -3,9 +3,10 @@ import { Clone } from '@react-three/drei/core/Clone' import { useGLTF } from '@react-three/drei/core/Gltf' import { Suspense, useEffect, useMemo, useRef } from 'react' import type { Group, Material, Mesh } from 'three' +import { positionLocal, smoothstep, time } from 'three/tsl' import { DoubleSide, MeshStandardNodeMaterial } from 'three/webgpu' -import { resolveCdnUrl } from '../../../lib/asset-url' import { useNodeEvents } from '../../../hooks/use-node-events' +import { resolveCdnUrl } from '../../../lib/asset-url' // Shared materials to avoid creating new instances for every mesh const defaultMaterial = new MeshStandardNodeMaterial({ @@ -39,13 +40,35 @@ export const ItemRenderer = ({ node }: { node: ItemNode }) => { return ( - + }> ) } +const previewMaterial = new MeshStandardNodeMaterial({ + color: '#cccccc', + roughness: 1, + metalness: 0, + depthTest: false, +}) + +const previewOpacity = smoothstep(0.42, 0.55, positionLocal.y.add(time.mul(-0.2)).mul(10).fract()) + +previewMaterial.opacityNode = previewOpacity +previewMaterial.transparent = true + +const PreviewModel = ({ node }: { node: ItemNode }) => { + return ( + + + + ) +} + const ModelRenderer = ({ node }: { node: ItemNode }) => { const { scene, nodes } = useGLTF(resolveCdnUrl(node.asset.src) || '') diff --git a/packages/viewer/src/components/renderers/site/site-renderer.tsx b/packages/viewer/src/components/renderers/site/site-renderer.tsx index ce50a4bc..dd872404 100644 --- a/packages/viewer/src/components/renderers/site/site-renderer.tsx +++ b/packages/viewer/src/components/renderers/site/site-renderer.tsx @@ -121,6 +121,7 @@ export const SiteRenderer = ({ node }: { node: SiteNode }) => { position={[edge.midX, 0.5, edge.midZ]} style={{ pointerEvents: 'none', userSelect: 'none' }} zIndexRange={[10, 0]} + occlude >
{edge.dist.toFixed(2)}m