본문 바로가기
개발/3D Programming

[nodejs] obj2gltf 라이브러리로 대용량 obj파일➡️ gltf로 변환하기

by 반비🥰 2024. 5. 23.
반응형

 

오늘은 obj2gltf 라이브러리를 활용해서 대용량 obj파일을 gltf파일로 변환하는 코드를 테스트해 봤다.

📌 문제 상황

데이터 용량이 적은 obj파일을 gltf로 변환할 때는 문제가 발생하지 않았지만, 용량이 큰 obj파일을 변환할 Buffer 크기 문제 발생

Buffer is too large to embed in the glTF. Use the --separate flag instead.

 

👍 문제해결 방법

[ 기존 코드 ]

try {
        obj2gltf(objFilePath).then(function (gltf) {
            const data = Buffer.from(JSON.stringify(gltf));
            fs.writeFileSync(gltfFilePath, data);
        });
    } catch (err) {
        console.log(err);
        res.status(500).send(err);
    }

 

[ 변경된 코드 ]

try {
        obj2gltf(objFilePath, {
            separate: true,
            outputDirectory: outputDirectory //출력될 폴더 경로
        }).then(function (gltf) {
            const data = Buffer.from(JSON.stringify(gltf));
            fs.writeFileSync(gltfFilePath, data);
        });
    } catch (err) {
        console.log(err);
        res.status(500).send(err);
    }

 

github에 설명되어 있는 내용을 보니, separate는 glTF파일에 포함하는 대신 별도의 버퍼와 텍스처를 작성한다.

separate를 추가했는데, 추가로 오류가 발생했다. 확인해 보니 separate 인자로 별도의 버퍼와 텍스처를 생성할 경로를 지정해줘야 해서 발생한 오류였다. 그래서 추가로 outputDirectory를 추가해서 돌렸더니 해결되었다.

 

.obj 파일을 .gltf와 .glb 파일로 변환한 이유는 CesiumJS에 .obj 파일을 .gltf로 변환해야 하기 때문이다.

다음에는 변환한 .gltf 파일을 CesiumJS에 띄우는 방법을 남겨볼 예정이다.

 

 

+ 추가로 .obj 파일을 .glb 파일로 변환하는 코드

try {
        obj2gltf(objFilePath, {
            binary : true,
        }).then(function (glb) {
            const data = Buffer.from(JSON.stringify(glb));
            fs.writeFileSync(glbFilePath, data);
        });
    } catch (err) {
        console.log(err);
        res.status(500).send(err);
    }

 

 

참고 사이트

https://github.com/CesiumGS/obj2gltf/blob/main/README.md

 

obj2gltf/README.md at main · CesiumGS/obj2gltf

Convert OBJ assets to glTF. Contribute to CesiumGS/obj2gltf development by creating an account on GitHub.

github.com

 

 

반응형