I am trying to experiment with compressed textures as a means of improving performance, but I’m not sure which format I need to use for my app, which is osx/windows (and trying on osx first, as that is what I am developing on) – I made a script to compress my assets based on this library GitHub - TimvanScherpenzeel/texture-compressor: CLI tool for texture compression using ASTC, ETC, PVRTC and S3TC in a KTX container. which lists S3TC as the correct format for OSX / win - But it does not seem to be working, and I can’t find anything about OSX on Babylon.js Documentation – Anyone know which format I should be using for OSX?
Ok so, I’m not sure about S3TC or whatever, but the script output the files as .dxt3.ktx - I was doing 2 things wrong, needed to change the file extension to .dxt.ktx, and needed to set:
var available = ['-astc.ktx', '-dxt.ktx', '-pvrtc.ktx', '-etc2.ktx', '-etc1.ktx']; var formatUsed = engine.setTextureFormatToUse(available);
At which point it will make requests to the server for -dxt3.ktx files. HOWEVER:
It’s still broken in my app. Running electron / still stuck on babylon 3.1 alpha 7 release. – Does anyone know if something changed in babylon to add support or fix a bug with those texture files? I am getting a
[29365:0105/091850:ERROR:gles2_cmd_decoder.cc(8605)] [.Offscreen-For-WebGL-0x7f8e978fc200]RENDER WARNING: texture bound to texture unit 0 is not renderable. It maybe non-power-of-2 and have incompatible texture filtering.
Error whenever I try to load a compressed texture. (And here is a working example of using one of the textures my script output in a playground)
GL version in my app is
_glVersion:"WebGL 2.0 (OpenGL ES 3.0 Chromium)
So I assume I can safely rule out electron as the problem?
Also found an issue with older chromium regarding ktx, so I updated my electron app to most recent version, which uses Chrome/69.0.3497.106 – Still same issue. So I’m thinking it’s babylon, just not sure what would have changed or how to backport it.
There were a couple of fixes on ktx in the latest version and the previous. Could you try with latest ? or create a play ground using some of the broken textures ?
So that we could pin point the issue ?
@sebvan well I don’t think the issue can be recreated on PG now since it seems to be only in my local project (on 3.1.alpha6), I’m version locked by a really nasty bug ATM, so can’t upgrade for now. But that’s helpful to know that fixes happened, maybe I can backport the fixes into my version
Are you blocked by a BJs bug? Can we help?
I THINK, it’s an issue with my app that surfaced due to changes to clone behavior (or rather the helper method used within the clone method), but not an issue with babylon itself. – I spent so much time trying to figure it out unsuccessfully that I promised myself I would finish game before attempting to upgrade again. Though I suppose I’ve refactored enough since then and fixed enough other issues, that maybe I should give it another try.
Ok let us know:)
I’m running into the same issue. Just as a test, I downloaded this example normal map:
I ran it through the texture-compressor npm module and outputted a dxt file using all defaults, but when I try and use it I get the same error.
Looking at the playground above, it seems as though the issue is still present in v4.1:
Well in your PG you are using ktx format but you are pointing to a jpg
I think that’s the way it’s supposed to work? You reference a png or jpg, and the
createTexture method subs out the extension. So in this case, it’s subbing out
The issue is that ktx files created with texture-compressor are not working with Babylon. If you look at the code for that library, it’s just a wrapper for the PVR Tex tool, and the same files work with ThreeJS.
EDIT: I just referenced this PG because the actual files I’m working with are IP and I can’t share them
Ok so thats why
Pinging @sebavan if he has a few cycles
I searched for this issue and found that someone had already discovered the same problem so I just piggybacked on this thread
it is because by default Babylon use mipmaps (opposite of three), and you need to disable them on this texture: https://www.babylonjs-playground.com/#1SCH7H#33
Most of the time they would be needed
Yep, that solves the problem. So mipmaps won’t work with KTX? Or the KTX has to be created with mipmaps as a setting?
Answered my own question. In
texture-compressor, there’s a flag for mipmaps. Set that to “true” and that also solves the problem.
yup you can not generate mip maps at runtime if the base level is compressed.
Not a direct answer, but I’d recommend looking into using basis compression instead, as that’s what I ended up doing and it’s been great so far