diff --git a/src/loading2/gltf-splats-decoder.ts b/src/loading2/gltf-splats-decoder.ts index de9538f5..f517fe1e 100644 --- a/src/loading2/gltf-splats-decoder.ts +++ b/src/loading2/gltf-splats-decoder.ts @@ -102,7 +102,11 @@ export class GltfSplatDecoder implements GeometryDecoder { const fetchBuffer = async (url: string, offsetMultiplier: bigint): Promise => { const firstByte = byteOffset * 4n * offsetMultiplier; const lastByte = firstByte + byteSize * 4n * offsetMultiplier - 1n; - const headers: Record = { Range: `bytes=${firstByte}-${lastByte}` }; + const headers: any = { + Range: `bytes=${firstByte}-${lastByte}`, + 'Transfer-Encoding': 'compress', + 'Accept-Encoding': 'compress', + }; const response = await this.xhrRequest(url, { headers }); return response.arrayBuffer(); }; diff --git a/src/loading2/gltf-splats-decoder.worker.js b/src/loading2/gltf-splats-decoder.worker.js index 867e3a80..82ab6189 100644 --- a/src/loading2/gltf-splats-decoder.worker.js +++ b/src/loading2/gltf-splats-decoder.worker.js @@ -179,7 +179,8 @@ onmessage = function (event) { // opacity let a = view.getFloat32(opacityOffset, true); a = (1 / (1 + Math.exp(-a))) * 255; - colors[c3] = clamp(Math.floor(a), 0, 255); + a = clamp(Math.floor(a), 0, 255); + colors[c3] = a; } } else if (['scale'].includes(pointAttribute.name)) { let maxScale = 0; diff --git a/src/materials/shaders/splats.vert b/src/materials/shaders/splats.vert index 73544ff3..d6b660e0 100644 --- a/src/materials/shaders/splats.vert +++ b/src/materials/shaders/splats.vert @@ -4,6 +4,7 @@ precision highp int; uniform vec2 focal; uniform float inverseFocalAdjustment; uniform float splatScale; +uniform float initialSplatScale; uniform vec2 basisViewport; uniform float harmonicsDegree; uniform bool renderIds; @@ -277,7 +278,8 @@ void main() { if(adaptiveSize) { float lodSplatScale = clamp(getLOD( nodePosition, int(vnStart), float(level) ) / maxDepth, 0., 1.); - renderScale = mix(maxSplatScale * splatScale, 1., lodSplatScale); + float currentSplatScale = lodSplatScale < 2. ? initialSplatScale : splatScale; + renderScale = mix(maxSplatScale * currentSplatScale, 1., lodSplatScale); } vRenderScale = renderScale; @@ -302,7 +304,9 @@ void main() { vColor = colorData.rgb; - vec3 worldViewDir = normalize(-viewCenter.rgb); + vec4 worldCenter = modelMatrix * vec4(instancePosition, 1.0); + + vec3 worldViewDir = normalize(worldCenter.xyz - cameraPosition); //Harmonics vec3 harmonics = vec3(0.); diff --git a/src/splats-mesh.ts b/src/splats-mesh.ts index b83d752a..4a1242e2 100644 --- a/src/splats-mesh.ts +++ b/src/splats-mesh.ts @@ -240,6 +240,7 @@ export class SplatsMesh extends Object3D { focal: { value: new Vector2(0, 0) }, inverseFocalAdjustment: { value: 1 }, splatScale: { value: 1 }, + initialSplatScale: { value: 1 }, basisViewport: { value: new Vector2(0, 0) }, globalOffset: { value: new Vector3(0, 0, 0) }, sortedTexture: { value: null },