From 66206c7ce575523ceae96a69ff6ac3ccd8eec34a Mon Sep 17 00:00:00 2001 From: AI Bot Date: Mon, 5 Oct 2026 13:00:01 +0530 Subject: [PATCH] fix: automatically re-apply baked UV projections on model reload --- src/components/ModelViewer.tsx | 9 ++++++++- src/pages/Editor.tsx | 10 +++++++--- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/components/ModelViewer.tsx b/src/components/ModelViewer.tsx index 351f43c..ea9107c 100644 --- a/src/components/ModelViewer.tsx +++ b/src/components/ModelViewer.tsx @@ -3,6 +3,7 @@ import * as THREE from "three"; import { useFrame, useThree, createPortal } from "@react-three/fiber"; import { MaterialFactory } from "../materials/MaterialFactory"; import { useTexturePipeline } from "../hooks/useTexturePipeline"; +import { reprojectUVs, bakeTextureToNewUVs } from '../lib/bakingUtils'; interface ModelViewerProps { object: THREE.Object3D | null; @@ -27,6 +28,12 @@ const MeshMaterialManager = ({ mesh, sceneObj, textureCache }: MeshMaterialManag const uvTiling = props.uvTiling || [1, 1]; const uvOffset = props.uvOffset || [0, 0]; const uvRotation = props.uvRotation || 0; + const bakedMappingType = props.bakedMappingType; + + // Automatically re-apply baked UV projections on load + if (bakedMappingType && ['planar', 'cylinder', 'sphere', 'box'].includes(bakedMappingType)) { + reprojectUVs(mesh.geometry, bakedMappingType as any); + } const origMat = (Array.isArray(mesh.material) ? mesh.material[0] : mesh.material) as THREE.MeshPhysicalMaterial; @@ -213,7 +220,7 @@ const FillMesh = ({ fillProps, originalMesh }: { fillProps: any, originalMesh: T return createPortal(fillNode, originalMesh); }; -import { reprojectUVs, bakeTextureToNewUVs } from '../lib/bakingUtils'; + export const ModelViewer = forwardRef(({ object, sceneObjects, bakeRequest, onBakeComplete }, ref) => { const internalRef = useRef(null); diff --git a/src/pages/Editor.tsx b/src/pages/Editor.tsx index e292d95..cc09444 100644 --- a/src/pages/Editor.tsx +++ b/src/pages/Editor.tsx @@ -2540,9 +2540,13 @@ export default function Editor() { sceneObjects={sceneObjects} bakeRequest={bakeRequest} onBakeComplete={(dataUrl) => { - if (bakeRequest) { - updateObjectMaterial(bakeRequest.id, { map: dataUrl, mappingType: 'uv' }); - } + if (bakeRequest) { + updateObjectMaterial(bakeRequest.id, { + map: dataUrl, + mappingType: 'uv', + bakedMappingType: bakeRequest.type + }); + } setBakeRequest(null); }} />