GLB Optimizer for Geometry and Texture Conversion (WEBP and KTX2)

Hello friends,

We are glad to introduce the new GLB Optimizer, the successor of highly appreciated GLB with WEBP Textures Converter.

By default all textures converted to WEBP format with no resize, and geometry is optimized with soft settings to preserve visual appearance.
Just drop some 3D model into it and see the size difference, compare visual quality and download if satisfied.
Instant reload supported - press ‘R’ to reload the file with the new optimization settings applied.

The Select Resize button lets to resize all textures to the chosen dimensions, preserving aspect ratio. For example, a 4096x8192 texture, resized with 2048 setting, will be reduced to 1024x2048.
The Texture Format button lets to choose between Original, WEBP and PNG formats. WEBP is turned on by default.
The Help button shows some information about optimization functions and parameters. To close the information window click the Help button once more.

After the GLB/GLTF uploading (Draco compressed files are not supported at the moment) there are more additional buttons available.

To compare the difference between the original and optimized models use “Comparing Screenshot” function, activated with the button with camera icon.
This function makes pixel comparison between 2 screenshots (original and optimized) and shows the red overlay over mismatched pixels. The number of mismatched pixels and error percentage is displayed in the pop-up message. The overlay layer will disappear after 3 seconds after any mouse movement on canvas.

The Settings button opens the Optimization Settings panel. It is divided into 2 sections (currently): Basic Optimization and KHR Extensions. All Basic Optimization operations don’t require and don’t add any KHR Extensions, meanwhile all operations done from KHR Extensions section will add the corresponding KHR extension to the file.

The Reset button resets all settings to default, including texture format and size, and reloads the page.
To close the Optimization Settings panel click the Settings button once more.

After any settings change one may press R to fast reload the model with the new optimization settings applied.

More functions and extensions will be added in the next releases :slight_smile:

The same pipeline can be used also for automated processing and optimization of 3D assets, for example ones uploaded by users or ones exporting as GLB from some of your applications.
See console messages for some information related to the files processing.

Note that if your GLB file will have validation errors the application will try to correct them (the number of validation errors will be shown in the pop-up message) and then will call Inspector with Validation tab opened, so one may compare. If you see the green checkmark as in the screenshot all validation errors were resolved successfully.

Enjoy and give feedback! - https://glb.babylonpress.org/

16 Likes

This is a super awesome and valuable tool, thanks for the work! Getting a 10x size reduction with basically no visible difference is huge :smiley:

2 Likes

I’ll add later the ability to tune the comparison threshold and to use altColor for dark areas.
Meahwhile there is the great breakthrough in the new release: KTX2 texture conversion.

To use KTX2 texture conversion just choose “ktx2” (currently) option in the “Texture Format” drop button.

Currently there are no settings (some will be added soon), UASTC mode is used (ETC1S support is coming).
Be aware that KTX2 compression takes time (usually 5-30 seconds for one average texture) so meanwhile you may entertain yourself with console messages giving some debug information.

To speed up the process one may choose to resize texture first. Use the “Select Resize” button, then press ‘R’ to reload the model.

The original and optimized VRAMs (GPU memory used by textures) are shown at the top info panel.

4 Likes

Keep em coming @labris !!!

1 Like

Added 2 more modes to KTX2 texture conversion, so there are 3 of them at the moment: ktx2/UASTC, ktx2/ETC1S and ktx2/MIX.

In the MIX mode albedo (baseColor) textures are processed with ETC1S, textures from all other channels are compressed with UASTC. This is the best combination of visual quality, file size and GPU size (VRAM). More modes will follow, meanwhile one may try to tune some compression settings like described further.

There are several settings available at the KTX2 Compression panel. To open it, use the Settings button.

ETC1S Quality Level allows you to choose between file size and quality. Range: 1-255.

ETC1S Compression Level parameter controls the encoder performance vs. file size tradeoff. When set to 0 it works really fast. Range: 0-5.

Both above mentioned settings are applied only to ETC1S compression (and work in MIX mode for ETC1S textures as well).

Also one may choose to use or not to use UASTC Zstandard Supercompression. When checked (by default) it may save some file size but will take some CPU time to zstd decompress (very fast) the texture before sending to GPU.
This setting applies only to UASTC compression (and works in MIX mode for UASTC textures as well).

Note that the pure UASTC compression may sometimes lead to the file size bigger than the original size, but GPU size (VRAM) will always be much less than original one.

Since KTX2 conversion takes time one may optimize geometry first with No Resize and Keep Original texture settings for better comparison (press ‘R’ after any parameter change to reload the file with the new parameters appiled) and then choose the Texture Format and play with KTX2 Compression settings.

@PirateJC I believe we could update the KTX tools documentation section now - KTX2 Compressed Textures | Babylon.js Documentation

2 Likes

GO GO GO !!! :slight_smile:

1 Like

Added the ability to drop OBJ+MTL+textures files for geometry and texture optimization.

The screenshot comparison has no sense here because of different nature of materials used (user will receive the corresponding notification).

So now one may drop OBJ model set into https://glb.babylonpress.org/ and get optimized KTXed GLB :slight_smile:

2 Likes

It’s an extremely handy and quick tool, thank you!

Is there any way of controlling the webp compression level?
I’m asking because I have compression artefacts on the texture.

Cheers from Hamburg, Germany
doc

Not for browser version. If you want full control use GLTF-Transform CLI. Install the sharp module, and provide an encoder. When the encoder is omitted — sharp works only in Node.js — the implementation will use a platform-specific fallback encoder, and most quality- and compression-related options are ignored, sadly :slight_smile:

First make sure that you don’t resize it.
I would also recommend to try ktx2/MIX mode where albedo textures are processed with ETC1S (smaller size) and all other texture with UASTC (better quality).


You may also try some other texture format/compressions combinations, here is quite a good guide - 3D-Formats-Guidelines/KTXArtistGuide.md at main · KhronosGroup/3D-Formats-Guidelines · GitHub

I’m getting this weird page when I enter the URL, did something happen?

Should work now, I forgot to pay for my hosting :slight_smile:

4 Likes

Hi was looking for an online compressor and this is really great!
A wireframe overlay might be useful, especially for Simplify, I could not see one.
What exactly is the amount of Quantization applied under KHR_mesh_quantization as I believe there are a number of levels/storage-options to compress this way? Does it ever have much effect on the appearance?

1 Like

I hadn’t seen this tool. I find it cool. This really reduces the 3d model a lot while keeping it looking impeccable.

I would love it if it could convert .babylon files to glb too. But I imagine it’s more complicated.

Anyway, this tool is awesome. Thanks for doing it.

On the other hand, it is true that the URL is regularly not accessible : https://glb.babylonpress.org/

1 Like

Thanks for your kind words!

Just open the Inspector (the same button as in the Sandbox), click on Scene and choose Wireframe rendering mode (see screenshot below with noticeable geometry optimization).
I think I could add Wireframe button in future update to make the comparison easier.

The default settings for KHR_mesh_quantization:

const QUANTIZE_DEFAULTS: Required<Omit<QuantizeOptions, 'patternTargets'>> = {
	pattern: /.*/,
	quantizationVolume: 'mesh',
	quantizePosition: 14,
	quantizeNormal: 10,
	quantizeTexcoord: 12,
	quantizeColor: 8,
	quantizeWeight: 8,
	quantizeGeneric: 12,
	normalizeWeights: true,
	cleanup: true,
};

More info about each parameter here - glTF-Transform/packages/functions/src/quantize.ts at main · donmccurdy/glTF-Transform · GitHub

The default quantization settings are quite good for a wide range of 3D models, but you may fine tune these settings to better suit your model set with the help of GLTF-Transform CLI.

1 Like

Technically it could be possible, but there will be memory issues with large models (over 500 Mb). So at the moment it is easier to convert .babylon to GLB separately with the help of old good Sandbox :slight_smile:

Thank you! Your feedback is always welcome!

@labris, There seems to be a problem accessing the site.

Should work now with no hassle :slight_smile:

It’s very random, but it happens that the site is not accessible.
I also noticed that the connection is not https secure when the site is not accessible, but becomes secure again when it is.

2024-06-27 11_33_08-Greenshot

2024-06-27 11_36_40-Greenshot

Wouldn’t it be possible to have a zip to use it locally ?

It is quite strange, the SSL certificate is valid till 19th of August then will be prolonged automatically.


The server uptime is 99.98%.
You may try to clear browser cache, maybe it will help.

I think I’ll make the source code public with the next update (probably at the end of this summer). At the moment I could share the bundle, if it is OK for you.

Yes, the certificate is good when the site is accessible. There it works.