Skip to content

Commit b458e05

Browse files
fix: sky and compression
1 parent 67b19b4 commit b458e05

6 files changed

Lines changed: 49 additions & 28 deletions

File tree

src/fuse/CourseScene.jsx

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -292,7 +292,7 @@ export default function CourseScene({
292292
raycasterRef.current.setFromCamera(pointerRef.current, cameraRef.current);
293293
const meshes = surfacesRef.current.map(s => s.mesh);
294294
const hits = raycasterRef.current.intersectObjects(meshes, false);
295-
295+
console.log(hits);
296296
const layer = hits.length > 0 ? project._meshes.find(l => l.id === hits[0].object.name) : null;
297297
if (onSelect) onSelect(layer);
298298
}, [project._meshes]);
@@ -324,11 +324,12 @@ export default function CourseScene({
324324
}
325325
}, [project._meshes]);
326326

327+
327328
useEffect(() => {
328329
const ctx = sceneRef.current;
329-
if (!ctx || !skySettings) return;
330+
if (!ctx || !rendererReady || !skySettings) return;
330331
const { scene, camera } = ctx;
331-
332+
console.log("SKY SETTINGS CHANGED");
332333
// Update background
333334
scene.background = new THREE.Color(skySettings.clouds.skyColor);
334335

@@ -337,16 +338,17 @@ export default function CourseScene({
337338
scene.remove(cloudsRef.current.object);
338339
}
339340

340-
// const clouds = new VolumetricClouds(camera, {
341-
// radius: 800,
342-
// skyColor: new THREE.Color(skySettings.clouds.skyColor),
343-
// cloudColor: new THREE.Color(skySettings.clouds.cloudColor),
344-
// density: skySettings.clouds.density,
345-
// scale: 4,
346-
// });
347-
// scene.add(clouds.object);
348-
// cloudsRef.current = clouds;
349-
}, [skySettings]);
341+
const clouds = new VolumetricClouds(camera, {
342+
radius: 800,
343+
skyColor: new THREE.Color(skySettings.clouds.skyColor),
344+
cloudColor: new THREE.Color(skySettings.clouds.cloudColor),
345+
fogColor: new THREE.Color(skySettings.clouds.fogColor),
346+
density: skySettings.clouds.density,
347+
scale: 4,
348+
});
349+
scene.add(clouds.object);
350+
cloudsRef.current = clouds;
351+
}, [skySettings, rendererReady]);
350352

351353
useEffect(() => {
352354
const container = containerRef.current;
@@ -635,6 +637,8 @@ export default function CourseScene({
635637
const neighborMesh = new THREE.Mesh(new THREE.BufferGeometry(), neighborMaterial);
636638
neighborMesh.userData.tileSize = TEXTURE_MAP[neighborSurface]?.tileSize || 2.0;
637639

640+
mesh.receiveShadow = true;
641+
638642
// SandMaterial reads from both meshes and replaces the material
639643
new SandMaterial(
640644
mesh,
@@ -690,7 +694,7 @@ export default function CourseScene({
690694
mesh.name = layer.id;
691695
mesh.visible = layer.visible !== false;
692696
mesh.receiveShadow = true;
693-
697+
console.log(`Add base texture ${layer.surface}`, layer.id);
694698
scene.add(mesh);
695699
surfacesRef.current.push({ mesh, geometry, material });
696700
}

src/lib/project.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -778,11 +778,13 @@ export async function updateHoleByNumber(holeNumber, update) {
778778
}
779779

780780
export async function updateScene(update) {
781-
const updatedScene = _.merge({ ...openProject.scene }, update);
782-
const changed = !_.isEqual(updatedScene, openProject.scene);
781+
// const updatedScene = _.merge({ ...openProject.scene }, update);
782+
const changed = !_.isEqual(update, openProject.scene);
783+
console.log('updateScene', update, openProject.scene);
784+
console.log('changed', changed);
783785
if (changed) {
784786
console.log('Project scene changed!');
785-
openProject.scene = updatedScene;
787+
openProject.scene = update;
786788
await saveProjectSettings();
787789
// } else {
788790
// console.log('Project scene NOT changed!');

src/lib/settings.js

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -188,8 +188,21 @@ export const defaultSettings = {
188188
// blend: 0,
189189
// blending: { ...defaultBlend },
190190
blend: 0.5,
191-
blending: { ...defaultBlend },
192-
// blending: { enabled: true, distance: 2, spacing: 0.5 },
191+
// blending: { ...defaultBlend },
192+
blending: {
193+
enabled: true,
194+
distance: 2.0, // narrow blend zone
195+
noiseFreq: 0.8, // gentle undulation
196+
noiseAmp: 0.8, // subtle edge wander
197+
lipDarken: 0.0,
198+
dirtTint: '#5a4a32',
199+
dirtWidth: 0.0,
200+
dirtStrength: 0.0,
201+
sandNoiseFreq: 0.15, // scale of sand color variation
202+
sandVariationStrength: 0.3, // how much dark patches show (0-1)
203+
sandLowDarken: 0.25, // how much lower spots darken (0-1)
204+
sandBaseHeight: 0, // reference height — set to bunker floor Y
205+
},
193206
dig: { ...defaultDig }
194207
}
195208
}

src/lib/textures.js

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
// Texture paths are URIs relative to the output .gltf file.
44
export const TEXTURE_MAP = {
55
fairway: {
6-
tileSize: 2.0,
6+
tileSize: 3.5,
77
baseColor: 'gen_fairway_tex.png',
88
normal: 'gen_fairway_map.png',
99
normalScale: [0.2, 0.5],
@@ -14,7 +14,7 @@ export const TEXTURE_MAP = {
1414
// tint: 'hsl(21, 42%, 84%)',
1515
},
1616
first_cut: {
17-
tileSize: 2.0,
17+
tileSize: 3.5,
1818
baseColor: 'gen_fairway_tex.png',
1919
normal: 'gen_fairway_map.png',
2020
// tint: 'rgb(240, 233, 204)',
@@ -24,7 +24,7 @@ export const TEXTURE_MAP = {
2424
tint: 'hsl(20, 50%, 80%)',
2525
},
2626
green: {
27-
tileSize: 3.0,
27+
tileSize: 3.2,
2828
baseColor: 'gen_green_tex.png',
2929
normal: 'gen_green_map.png',
3030
normalScale: [0.2, 0.3],
@@ -41,7 +41,7 @@ export const TEXTURE_MAP = {
4141
roughnessFactor: 0.95,
4242
},
4343
tee: {
44-
tileSize: 1.0,
44+
tileSize: 3.0,
4545
baseColor: 'gen_fairway_tex.png',
4646
normal: 'gen_fairway_map.png',
4747
normalScale: [0.8, 1],
@@ -81,24 +81,25 @@ export const TEXTURE_MAP = {
8181
tint: 'rgb(214, 197, 163)',
8282
},
8383
water: {
84-
tileSize: 1.5,
84+
tileSize: 2.5,
8585
baseColor: 'ground_color.png',
8686
normal: 'ground_normal_gl.png',
8787
roughnessFactor: 0.8,
8888
tint: 'hsl(68, 27%, 63%)',
8989
},
9090
river: {
91-
tileSize: 1.5,
91+
tileSize: 2.5,
9292
baseColor: 'ground_color.png',
9393
normal: 'ground_normal_gl.png',
9494
roughnessFactor: 0.8,
9595
tint: 'hsl(68, 27%, 63%)',
9696
},
9797
pine_straw: {
98-
tileSize: 1.5,
98+
tileSize: 2.5,
9999
baseColor: 'pine_straw_map.png',
100100
normal: 'pine_straw_normal.png',
101101
roughnessFactor: 1.0,
102+
tint: 'hsl(68, 27%, 63%)',
102103
},
103104
// Fallback for layers whose surface isn't textured yet — uses layer.color.
104105
_default: { tileSize: 2.0, roughnessFactor: 0.9 },

src/lib/workers/export.worker.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,8 @@ async function encodeTexture(rawImageData, ktx2Options = {}) {
7676
const resultData = new Uint8Array(1024 * 1024 * 10);
7777
const resultSize = encoder.encode(resultData);
7878
if (resultSize === 0) throw new Error('KTX2 encode failed');
79-
return new Uint8Array(resultData.buffer, 0, resultSize);
79+
// return new Uint8Array(resultData.buffer, 0, resultSize);
80+
return resultData.slice(0, resultSize);
8081
} finally {
8182
encoder.delete();
8283
}

src/pages/Course.jsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -302,7 +302,7 @@ export default function Course() {
302302
skySettingsInit.current = true;
303303
return;
304304
}
305-
console.log('skySettings-changed', skySettings);
305+
console.log('sky Settings-changed', skySettings);
306306
updateSceneSettings({ sky: skySettings });
307307
}, [skySettings]);
308308

0 commit comments

Comments
 (0)