Kết xuất và Xuất cảnh
@aspose/3d là một thư viện xử lý và chuyển đổi, và nó không thực hiện render bằng GPU hoặc tạo ra các tệp hình ảnh. “Rendering” trong ngữ cảnh của thư viện này có nghĩa là xuất một cảnh sang định dạng mà một trình render, engine game, hoặc trình xem phía dưới có thể tiêu thụ.
Trang này bao gồm tất cả các đường xuất: lưu dựa trên tệp, xuất ra bộ đệm trong bộ nhớ, các tùy chọn riêng cho định dạng, và cách chuẩn bị các cảnh cho các mục tiêu phía sau phổ biến (Three.js, Babylon.js, trình xem mô hình, và các engine game).
Basic Export
Gọi scene.save() với một đường dẫn tệp. Thư viện suy ra định dạng đầu ra từ phần mở rộng của tệp:
import { Scene } from '@aspose/3d';
const scene = new Scene();
scene.open('input.obj'); // use a supported format (OBJ, glTF, GLB, STL, 3MF, COLLADA)
scene.save('output.glb'); // GLB (binary glTF)
scene.save('output.stl'); // STL
scene.save('output.dae'); // COLLADA
scene.save('output.3mf'); // 3MF
Exporting to GLB (Recommended for Web and Games)
GLB (binary glTF 2.0) là một tệp duy nhất tự chứa, nhúng tất cả dữ liệu lưới, vật liệu và texture. Đây là định dạng đầu ra được đề xuất cho các trình xem web (Three.js, Babylon.js, model-viewer) và các engine game (Godot, Unity thông qua trình nhập):
import { Scene } from '@aspose/3d';
import { GltfSaveOptions } from '@aspose/3d/formats/gltf';
const scene = new Scene();
scene.open('source.obj');
const opts = new GltfSaveOptions();
opts.binaryMode = true; // produce .glb instead of .gltf + .bin
scene.save('output.glb', opts);
console.log('GLB export complete');Đặt binaryMode = true để tạo ra một tệp GLB tự chứa. Khi false, đầu ra là một .gltf tệp JSON với một .bin tệp phụ buffer.
Exporting to glTF (JSON Format for Inspection)
Biến thể JSON (.gltf + .bin) hữu ích trong quá trình phát triển vì JSON có thể đọc được bởi con người:
import { Scene } from '@aspose/3d';
import { GltfSaveOptions } from '@aspose/3d/formats/gltf';
const scene = new Scene();
scene.open('input.dae'); // COLLADA is fully supported; FBX is not wired into scene.open()
const opts = new GltfSaveOptions();
opts.binaryMode = false; // JSON + .bin sidecar
scene.save('output.gltf', opts);Exporting to STL (3D Printing Workflows)
STL chỉ chứa hình học (không có vật liệu, không có hoạt ảnh). Đây là định dạng trao đổi tiêu chuẩn cho các phần mềm cắt lớp in 3D:
import { Scene } from '@aspose/3d';
import { StlSaveOptions } from '@aspose/3d/formats/stl';
const scene = new Scene();
scene.open('model.obj');
const opts = new StlSaveOptions();
opts.binaryMode = true; // binary STL is more compact than ASCII
scene.save('output.stl', opts);Đặt binaryMode = false để tạo ra STL ASCII, dạng văn bản có thể đọc được nhưng kích thước lớn hơn.
Exporting to FBX (DCC Tool Workflows)
Lưu ý: Các lớp nhập và xuất FBX tồn tại trong thư viện, nhưng việc tự động phát hiện định dạng FBX chưa được tích hợp vào scene.open() hoặc scene.save(). Gọi scene.save('output.fbx', opts) sẽ không gọi trình xuất FBX — the .fbx phần mở rộng không được bộ điều phối lưu nhận dạng và cuộc gọi sẽ quay lại đầu ra OBJ. Sử dụng the FbxExporter lớp trực tiếp nếu bạn cần FBX I/O. Bảng hỗ trợ định dạng đánh dấu FBX là No* vì lý do này.
Nếu bạn cần xuất sang định dạng được Blender, Maya hoặc Unreal Engine chấp nhận, hãy sử dụng GLB hoặc COLLADA thay thế — cả hai đều được tích hợp đầy đủ vào scene.save():
import { Scene } from '@aspose/3d';
import { GltfSaveOptions } from '@aspose/3d/formats/gltf';
const scene = new Scene();
scene.open('input.dae');
// GLB is fully supported and widely accepted by DCC tools
const opts = new GltfSaveOptions();
opts.binaryMode = true;
scene.save('output.glb', opts);Xuất bộ nhớ trong với saveToBuffer()
Đối với các hàm serverless, phản hồi HTTP và các pipeline streaming, xuất trực tiếp sang một Buffer không cần ghi vào đĩa:
import { Scene } from '@aspose/3d';
import { GltfSaveOptions } from '@aspose/3d/formats/gltf';
function convertToGlbBuffer(inputPath: string): Buffer {
const scene = new Scene();
scene.open(inputPath);
const opts = new GltfSaveOptions();
opts.binaryMode = true;
return scene.saveToBuffer('glb', opts);
}
// Express.js / HTTP response example
// const glbBuffer = convertToGlbBuffer('model.obj');
// res.setHeader('Content-Type', 'model/gltf-binary');
// res.send(glbBuffer);
saveToBuffer() nhận một chuỗi định dạng làm đối số đầu tiên (ví dụ:. 'glb', 'stl', 'obj') và các đối tượng tùy chọn giống như save().
Kết hợp openFromBuffer() và saveToBuffer()
Một pipeline chuyển đổi hoàn toàn trong bộ nhớ mà không có I/O đĩa ở bất kỳ giai đoạn nào:
import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';
import { GltfSaveOptions } from '@aspose/3d/formats/gltf';
function objBufferToGlbBuffer(objData: Buffer): Buffer {
const scene = new Scene();
const loadOpts = new ObjLoadOptions();
loadOpts.enableMaterials = true;
scene.openFromBuffer(objData, loadOpts);
const saveOpts = new GltfSaveOptions();
saveOpts.binaryMode = true;
return scene.saveToBuffer('glb', saveOpts);
}Chuẩn bị các Scene cho các Renderer cụ thể
Three.js / Babylon.js (Web)
Các trình render này tải tệp GLB một cách nguyên bản. Xuất bằng binaryMode = true. Nếu các texture được tham chiếu từ OBJ nguồn, hãy đảm bảo .mtl và các tệp hình ảnh được đặt cùng nhau khi tải.
model-viewer (Web Component)
Chấp nhận .glb trực tiếp. Cùng cài đặt xuất như Three.js.
Godot Engine
Nhập GLB qua trình nhập của Godot (Project → Import). Sử dụng binaryMode = true. Godot hỗ trợ nguyên bản các vật liệu PBR từ glTF 2.0.
Blender
Để đạt độ trung thực nhập tốt nhất, hãy sử dụng glTF (output.gltf + output.bin) hoặc GLB (output.glb). Trình nhập glTF 2.0 của Blender hỗ trợ vật liệu PBR và hoạt ảnh. Lưu ý: xuất FBX qua scene.save() không được hỗ trợ — việc tự động phát hiện định dạng FBX không được kết nối vào bộ điều phối lưu.
3D Printing (Slicers: Cura, PrusaSlicer, Bambu Studio)
Xuất ra STL hoặc 3MF. Sử dụng 3MF khi bạn cần giữ màu hoặc siêu dữ liệu vật liệu. Dùng STL để đạt độ tương thích tối đa.
So sánh các định dạng xuất
| Định dạng | Phần mở rộng | Vật liệu | Hoạt hình | Tệp đơn | Tốt nhất cho |
|---|---|---|---|---|---|
| GLB | .glb | PBR (glTF 2.0) | Có | Có | Web, trò chơi, phân phối chung |
| glTF | .gltf | PBR (glTF 2.0) | Có | Không (+ .bin) | Phát triển, kiểm tra |
| STL | .stl | Không | Không | Có | 3D printing, geometry-only |
| FBX | .fbx | Phong/PBR | Không* | Không* | Trình nhập/xuất tồn tại nhưng chưa được kết nối vào việc tự động phát hiện |
| COLLADA | .dae | Có | Có | Có | Trao đổi giữa các DCC |
| 3MF | .3mf | Màu/vật liệu | Không | Có | In 3D hiện đại |
Các vấn đề xuất khẩu thường gặp
| Triệu chứng | Nguyên nhân | Khắc phục |
|---|---|---|
| Đầu ra GLB mở dưới dạng JSON trong trình xem | binaryMode để lại là false | Đặt opts.binaryMode = true |
| Các texture bị thiếu trong GLB đầu ra | binaryMode chưa thiết lập | Đặt opts.binaryMode = true cho GLB tự chứa |
| Tệp STL không có màu trong slicer | Định dạng STL không hỗ trợ màu | Sử dụng 3MF cho dữ liệu màu |
saveToBuffer trả về bộ đệm rỗng | Đối số chuỗi định dạng bị thiếu hoặc sai | Truyền chuỗi định dạng, ví dụ:. 'glb', 'stl', hoặc 'obj' |
| FBX mở mà không có hoạt ảnh trong Blender | Tệp nguồn (OBJ/STL) không có hoạt ảnh | Hoạt ảnh chỉ được truyền nếu có trong nguồn |
| Tệp đầu ra rất lớn | OBJ nguồn có nhiều đỉnh trùng lặp | Đầu ra nhị phân GLB đã loại bỏ trùng lặp; kiểm tra chất lượng tài sản nguồn |
Xem Thêm
- Tải mô hình: tải các tệp 3D từ đĩa và bộ đệm
- Đồ thị cảnh: xây dựng và chỉnh sửa cảnh trước khi xuất
- Hỗ trợ định dạng: ma trận đọc/ghi đầy đủ
- Tổng quan API: tất cả các lớp và liệt kê