- TODO
Features:
- functions: Adds
uninstance()
andcreateInstanceNodes()
#1525
Performance:
- core: Update to property-graph v3 #1543
- Removes
.dispatch
,.addEventListener
, and other event-related behaviors fromGraphEdge
class
- Removes
Other:
- fix(core): Handle duplicate URIs on read/write #1522
- fix(functions,cli): Locale-based numeric formatting #1512
Breaking changes:
- core: Renames
NodeIO#setAllowHttp
tosetAllowNetwork
#1392 - core: Removes
Document#merge
andDocument#clone
methods #1375- Use
mergeDocuments
andcloneDocument
from/functions
package
- Use
- core: Renames
bounds
togetBounds
and moves from /core to /functions #1340 - core: Renames
Node#getParent
toNode#getParentNode
andNode#listNodeScenes
#1211 - core: Renames
MathUtils#denormalize
todecodeNormalizedInt
, andMathUtils#normalize
toencodeNormalizedInt
#1211 - core,extensions: Removes hexadecimal getters/setters #1211
- Use
ColorUtils
instead
- Use
- extensions: Upgrade to
property-graph
v2 #1141- Affects implementations of custom extensions. See changes to official extensions in #1141
- functions: Removes 'overwrite' and 'skipIndices' options from
transformMesh()
andtransformPrimitive()
functions #1397 - functions: Removes lossy
weld()
options #1357 - functions: Merges
textureResize
intotextureCompress
function #1211 - cli: Update to Sharp v0.33 #1402
- cli: Upgrade to KTX-Software v4.3 #1277, #1369, #1376, #1378
- cli: Renames
--allow-http
to--allow-net
#1392 - cli: Change default compression of
optimize
command to Meshopt #1377 - core,cli: Requires Node.js >=18; other runtimes (Web and Deno) unaffected
Features:
- extensions: Adds
KHR_materials_diffuse_transmission
#1159 - extensions: Adds
KHR_materials_dispersion
#1262 - functions: Adds
mergeDocuments(target, source)
#1375 - functions: Adds
cloneDocument(source)
#1375 - functions: Adds
copyToDocument(target, source, sourceProperties)
#1375 - functions: Adds
moveToDocument(target, source, sourceProperties)
#1375 - functions: Adds
compactPrimitive()
to remove unused vertices #1397 - functions: Adds
convertPrimitiveToLines
andconvertPrimitiveToTriangles
, support conversions of various primitive topologies to triangle lists and line lists #1316 - functions: Adds more aggressive
prune()
defaults #1199, #1270 - cli: Expose
--simplify-ratio
and--simplify-lock-border
options onoptimize
command #1354 by @jo-chemla - cli: Expose prune-related options on
optimize
command #1298 by @subho57 - cli: MikkTSpace tangent calculation handles unwelding and welding automatically #1241
- functions: Add vertex count helpers,
getSceneVertexCount
,getNodeVertexCount
,getMeshVertexCount
,getPrimitiveVertexCount
#1320, #1327, #1393 - functions: Add
keepExtras
option toprune()
#1302 by @Archimagus - functions: Add support for point cloud simplification, via meshoptimizer v0.20 #1291
- functions: Add power-of-two options to
textureCompress
#1221
Performance:
- functions: Improves
weld()
performance #1237, #1238, #1344, #1351 - functions: Improves
join()
andjoinPrimitives()
performance #1242, #1397 - functions: Improves
transformMesh()
transformPrimitive()
performance #1397 - functions: Improves
quantize()
performance #1395 - functions: Improves
partition()
performance #1373 - functions: Improves
reorder()
performance #1358 - core: NodeIO now writes files to disk in batches #1383
- functions: Improves
simplify()
performance on indexed primitives #1381
Other:
- chore(repo): Update to Yarn v4 #1401
- chore(repo): Adds CI for local builds on windows #959
- chore(repo): Add benchmarks
- chore(repo): Packages are now published as unminified code #1212
- docs(core): Fix errors in Accessor documentation #1235 by @harrycollin
- docs(extensions): Add more illustrations for extensions
- docs(repo): Show 'experimental' tags in API documentation
c3a693
- fix(core): Clamp when encoding normalized ints #1286
- fix(extensions): Bug fixes for Draco compression #1388, #1385
- fix(extensions): Group Meshopt-compressed accessors by parent #1384
- fix(extensions): Improve order-independence in extension implementations #1257
- fix(functions): Various fixes for pruning and welding #1284
- fix(functions): Fixes for instancing bugs #1269
- fix(functions): Fixes for simplification bugs #1268
- fix(cli): Reformat 'validate' output as valid CSV #1252
v3.9 (Milestone)
Features:
- Update
prune()
to remove redundant mesh indices #1164 - Update meshoptimizer to v0.20
v3.8 (Milestone)
Features:
- Add quantization options in
meshopt()
function #1144 - Improve encoding of morh normals with quantization and meshopt encoding #1151
v3.7 (Milestone)
Features:
Other:
- Fix encoding of special characters in filenames when writing to disk #1118
- Fixed regression in quality of Draco compression #1077
- Updated
sharp
CLI dependency to address high-priority WebP vulnerability in libwebp- See CVE-2023-4863 and CVE-2023-41064
v3.6 (Milestone)
Features:
- Add limited
textureCompress()
support in web browsers (PNG, JPEG, WebP) #1075 - Bug fixes and quality improvements in
optimize()
,dedup()
,instance()
,flatten()
andjoin()
operations #1073 textureCompress()
PNG compression is now lossless by default #1068join()
now supports quantized meshes #1067simplify()
now cleans up degenerate mesh primitives #1066- Moved CLI to a fork of Caporal.js #1065
v3.5 (Milestone)
Features:
- Improvements to
weld()
#1029 by @rotu - Add
--pattern
flag inetc1s
anduastc
CLI commands #1037 - Add
toleranceNormal
option inweld()
#1046- Default vertex normal tolerance has been reduced (#1035), reducing loss of quality in some cases. Where more aggressive welding is required (such as simplification and LODs), users should specify
toleranceNormal=0.5
to restore the previous default.
- Default vertex normal tolerance has been reduced (#1035), reducing loss of quality in some cases. Where more aggressive welding is required (such as simplification and LODs), users should specify
v3.4 (Milestone)
Special thanks to Muse for supporting development of the palette()
feature.
Features:
v3.3 (Milestone)
Special thanks to @kzhsw for help with performance improvements in v3.3.
Features:
- Add
listTextureInfoByMaterial()
function #947 - Add
getTextureColorSpace
function #944 - Sync with
KHR_materials_anisotropy
release candidate #946 - Improve performance of
dedup
#945 - Improve performance of
resample
, port to WASM #934
Internal:
v3.2 (Milestone)
Features:
v3.1 (Milestone)
Features:
- Add
--join <bool>
and--flatten <bool>
flags to `optimize' CLI command #838 by @xlsfs - Add
KHR_materials_anisotropy
extension #748 - Allow root Nodes to be shared by multiple Scenes #833
- Deprecate
Node#getParent()
, preferNode#getParentNode()
- Deprecate
getNodeScene()
, preferlistNodeScenes()
- Deprecate
v3.0 (Milestone)
Features:
- Add
optimize
multi-command to CLI, "optimize all the things" #819 - Replace Squoosh with Sharp, new
textureCompress()
API #752 - Add
flatten()
function, reduce scene graph nesting #790 - Add
join()
andjoinPrimitives()
functions, reduce draw calls #707, #658 - Add support for sparse accessors #793
- Add
--format
option to CLIvalidate
command #778 - NodeIO creates missing directories when writing .gltf resources #779
- Add
clearNodeParent()
,clearNodeTransform()
,getNodeScene()
#784 - (EXPERIMENTAL) Add
--config
flag to CLI, support userland extensions and commands #791
Breaking changes:
- Rename extension classes, include vendor prefixes #776
- Rename
bounds()
→getBounds()
#774 - Rename MathUtils
normalize()
/denormalize()
→encodeNormalizedInt()
/decodeNormalizedInt()
#777 - Rename ImageUtils
getMemSize()
→getVRAMByteLength()
#812 - Replace Squoosh with Sharp, new
textureCompress()
API #752 - Update signatures of
listTextureChannels
,listTextureInfo
,listTextureSlots
, andgetTextureChannelMask
to not requiredocument
parameter #787 - Store array literals (color, vector, ...) as copies #796
Internal:
v2.5 (Milestone)
Features:
- Add
weldPrimitive(document, prim, options)
function #767 by @marwie - Support resampling quaternion keyframe tracks in
resample()
#760 - Remove unused vertex attributes in
prune()
#759 - Display KTX2 compression type in
inspect()
report #757 - Add morph target support in
transformMesh()
,transformPrimitive()
#756 - Improve detection of duplicate meshes in
dedup()
#663 by @robertlong
v2.4 — (Milestone)
Features:
- Add
sortPrimitiveWeights(prim, limit)
function #670 - Add
listTextureInfo(texture)
function #692 - Add
transformMesh(mesh, matrix)
andtransformPrimitive(prim, matrix)
functions #657 - Rewrite
weld()
function, improving weld results #661 - Handle conflicting URLs during merge #677
- Add documentation for writing custom extensions #678
v2.3 (Milestone)
Features:
- Add
simplify()
function. #655 - Add
ILogger
interface for user-specified logging. #653 - Add support for
.extras
on TextureInfo. #646 - Show normalized attributes in
inspect()
output. #638
v2.2 (Milestone)
Features:
Changedpackage.json#module
entrypoint extension to.mjs
#619- Add 'slots' option to
textureResize()
function. #622 by @snagy
v2.1 (Milestone)
Features:
- Vastly improved KTX compression speed. #389 by @mikejurka, @spatialsys
- Add
KHR_materials_iridescence
extension. #518 - Add WebP, OxiPNG, and MozJPEG image optimization with
@squoosh/lib
. #506 - Add
draco()
,meshopt()
,unlit()
, andktxfix()
functions to@gltf-transform/functions
(moved from CLI). #544 - Add
listTextureSlots()
,listTextureChannels()
,getTextureChannelMask()
. #506
v2.0 (Milestone)
Features:
- Improved and simplified extension API. #437
- Add
a.equals(b)
method for all property types. #437 - Add
KHR_xmp_json_ld
extension. #468 - Add
NodeIO.setAllowHTTP(<boolean>)
. #466 - Non-blocking NodeIO read/write. #441
- Add
DenoIO
(experimental). #380 - Add
normals()
function. #497
Breaking changes:
- API for custom extensions updated. #437
- I/O, Texture and other classes use Uint8Array for binary data, not ArrayBuffer. #447
- I/O read/write methods are now asynchronous. #441
- Removed support for Node.js ≤ 12.x
v1.2 (Milestone)
Features:
- Add
dequantize()
function. #431 - Add
KHR_materials_emissive_strength
extension. #422 - Add
ImageUtils.getMimeType(buffer)
. #432
v1.1 (Milestone)
Features:
- Extensions registered with I/O are written if used; unregistered extensions are skipped. #421
- Stages in
document.transform()
can detect other stages and optimize accordingly. #417 - Added
material.equals(otherMaterial)
method. #405 by @MrMagicPenguin - Added support for materials in
dedup()
function. #407 by @MrMagicPenguin
v1.0 (Milestone)
Stable release.
v0.12 (Milestone)
Features:
- Add compression/decompression support for
EXT_meshopt_compression
. #314 #323 - Add
reorder()
function. #321 - Faster, smaller CLI installation. #281
- Improved
textureResize()
API. #282 - Add
node.setMatrix(...)
. #270 - Parse in-memory Data URIs with
readJSON
. #266 - Support
.extras
on Root object #339
Breaking changes:
- Remove ao() function and dependencies. #281
v0.11 (Milestone)
Features:
- Add
textureResize()
function. #267 - Add
quantizationVolume: 'scene' | 'mesh'
option toquantize()
and Draco compression. Fixes #257. #272 - Support GLB files without binary data (e.g. just a node graph). #245
- Improve type-checking throughout the library, with TypeScript's strict checks.
- Add API documentation for
@gltf-transform/extensions
and@gltf-transform/functions
, with Typedoc v0.20.
Breaking changes:
- Rename
@gltf-transform/lib
to@gltf-transform/functions
. #249 - Move
ao()
from@gltf-transform/functions
to the CLI, cutting size and dependencies of the functions package. - I/O
writeJSON
optionisGLB: true
changed toformat: Format.GLB
.
v0.10 (Milestone)
Features:
Breaking changes:
- Material extensions now track RGBA channel usage of each texture, allowing improvements in KTX 2.0 support. #221
v0.9 (Milestone)
Features:
- Add 'instance' transform. #169
- Add 'prune' transform. #162
- Add 'resample' transform. #158
- Add 'tangents' transform. #175
- Add 'quantize' transform. #59
- Add
KHR_materials_volume
extension. #161 - Add
EXT_mesh_gpu_instancing
extension. #115 - Add
--format={pretty,csv,md}
output options for CLIinspect
command. - Add
--vertex-layout={interleaved,separate}
options for CLI output.
Breaking changes:
- Stricter type checking.
- Enum values moved from
GLTF.*
to static properties of the relevant class. Primitive enum values are now allowed. - Enable esModuleInterop in TS config.
- 'dedup' transform takes a
propertyTypes: string[]
array, rather than boolean flags for each property type. - 'draco' CLI command options renamed (hyphenated) for consistency.
v0.8 (Milestone)
Features:
- Add 'weld' and 'unweld' transforms.
- Add encoding/compression support for
KHR_draco_mesh_compression
. - Add KTX and WebP support in utils and 'inspect' function.
- Add
KHR_materials_variants
extension.
Breaking changes:
- Stricter type checking.
- External type definitions are now installed as dependencies.
v0.7 (Milestone)
Features:
- Add 'center' and 'sequence' transforms.
- Add 'bounds' helper.
- Enhance 'partition' transform to support animations.
- Add
KHR_draco_mesh_compression
extension (decode only). - Add
KHR_texture_transform
extension. - Add
EXT_texture_webp
extension. - Add
KHR_materials_sheen
extension.
Breaking changes:
- Merged TextureSampler properties into TextureInfo.
- TextureInfo now extends from ExtensibleProperty.
- Simplified I/O API. Renamed:
- NativeDocument -> JSONDocument
- unpackGLB -> readBinary
- packGLB -> writeBinary
- createDocument -> readJSON
- createNativeDocument -> writeJSON
- unpackGLBToNativeDocument -> binaryToJSON
v0.6 (Milestone)
Features:
- Add world transform API (getWorldTranslation/getWorldRotation/getWorldScale/getWorldMatrix) and getMatrix to Node.
- Add ColorUtils and helper methods to work with colors in hexadecimal and sRGB.
- Add traverse method to Node.
- Simplified Extension API.
- Add Extras API.
CLI:
- Accept textures in
merge
command.
Breaking changes:
- getExtension/setExtension syntax changed to accept extension names, not constructors. See ExtensibleProperty.
- Scene addNode/removeNode/listNodes are now addChild/removeChild/listChildren, for consistency with Node API.