spacecloud woot! I can’t wait for this. It looks like 3.5 is getting pretty close too

I've got 110,911 dds files on my hard drive. 🙂
Lots of games use them. Nvidia and Microsoft make tools for them (like photoshop plugin and stand alone), every game engine (that I've used) supports them. But I guess non Windows developers might not have as much, since DDS (Direct Draw Surface) is pretty much a header then a raw dump of a Direct3D texture from memory. It may take a little more code to load them in OpenGL if you don't want to simply convert them to a simpler internal format in the loader.

Of course "right tool for the job" and all that.
Jpeg compresses well on disk, but is lossy, expands to raw in memory and doesn't support alpha channels.
PNG compresses ok-ish, is lossless and has alpha channels (and things like deep colour modes), but also raw in memory.
DDS can store ST3C style block compressed formats (the kind that stay compressed on the GPU), voxels and 6 face cube maps, plus less common formats (like RGBA4444).
GIF is paletted (stores pixels as an index into a palette of up to 256 colours, instead of as colours directly) and supports animation.
EXR for high dynamic range images.

Block compressed textures use RGB565 (16 bit colour) so can look crappy, depending on the texture. (Technically for most of the BC formats each 4x4 block is paletted, with a palette of 2 user specified RGB565 colours and 2 interpolated RGB888 colours between the user specified ones). Godot converts textures into block compressed format internally when you set a texture to VRAM compression.

From the Godot docs, the actual types stored in an exported project are going to be raw, webp, png or st3c/pvrtc. If you put a jpg in a project, and set it to lossy compressed mode in the importer, it will be stored as a webp.

I used to have my own format that was 192 bit colour (double precision float per channel) in a tiled format for handling massive images bigger than memory. Yeah, overkill for pre-2000 rendering, but it was fun. 🙂

Yeah, for sure. When I was using DDS it was with a custom DirectX11 engine I was writing. I did go with it, only because it worked best with the Microsoft APIs and I needed it for efficient cubemapping. But the tools were poor. I think there was a Photoshop Plug-In, but it hadn't been updated, or didn't work with the latest version of PS at the time, or something, can't recall exactly. I think there was a Microsoft tool I used.

When I switched to Vulkan, I was on Linux and kind of trying to get away from Microsoft, so I attempted with KTX, which is like the OpenGL version of DDS. It's actually a decent format, but the tools were not great. I think I had to use a command-line convertor or there was some random third party app. But I decided it was too much effort, so I just switched to using standard formats like JPG and did the mipmapping/cubemapping in code. So not the end of the world, but I would prefer if there was just standard support in apps like Photoshop, GIMP, etc. without using strange tools.

In any case, I think JPEG XL is the future. I know Godot supports WebP already, and they are quite similar in performance and file size, but I think JPEG XL has a lot of potential. Aside from the quality and file size (which is as good as WebP and far better than JPG/PNG) it also has transparency, high quality animation, and really high levels of depth, HDR, multiple layers, etc. You should read this blog post to see why it's probably the last image format we will ever need in our lifetime (disregarding stuff like holography or lightfields, I mean as a 2D image).

https://cloudinary.com/blog/how_jpeg_xl_compares_to_other_image_codecs

Just to show you one data point, a single image in JXL can be up to 1,073,741,823 x 1,073,741,824 with 4,100 24-bit channels. You could literally store an entire AAA PS5 game in 1 image. Granted, that's not a great idea for a lot of reasons, but you could.

Jpeg xl is definitely interesting, but it needs more support. Chrome won't show them by default (have to turn on a flag, why?) and Firefox only allows them in nightly builds, not the standard release.

QOI can handle 4,294,967,296 x 4,294,967,296 images. 🙂
(Although that would require something like 72 exabytes for 32bit colour without compression)

    That's ... a lot. Just thought that there's a lot of dust to clean in my room, but that's just nothing in comparison.

    16k, max on most PC graphics cards, is already a Gb without compression. Humongous amount of data to move around, so always squeeze it out 🗜️

    And for my project I need lossless compression, no fine print. Not 'visually' or 'mathematically' because what if epsilon is a large number ? 🧐

    Nice Sunday everyone!

      Kojack Jpeg xl is definitely interesting, but it needs more support.

      Well yes. The spec was finalized in 2021, but even the reference implementation on Github is not finished. There is some beta support (mostly if you build source yourself, like for GIMP, Firefox, etc.) but I think this has more to do with the reference code not being stable. I would expect things will be rolled out later this year. And the spec is final, so people could write their own implementation or whatever. But it takes time. As I said, the spec wasn't finalized until October of last year. But seeing as it has HUGE benefits for web development, I expect the adoption to be quick. WebP is good, but I think being backed by Google made people wary, just like Apple's formats haven't gone far beyond Apple products, but JPEG XL is a standard and royalty-free with a BSD license.

      Pixophir And for my project I need lossless compression, no fine print. Not 'visually' or 'mathematically' because what if epsilon is a large number ?

      JPEG XL can do lossless, at 35% smaller than PNG. You can also store 32-bit floats in each channel, so it has way higher precision than most other image formats (unless you include working directly with GL/DX).

      In my case it is not so much about fine grained precision (I have only uint16_ts) but stability to avoid artefacts.

      I certainly will have a look once it is stable and in the Debian reps and has a reasonable documentation. PNG is by no means the best solution, and 35% better compression is quite a carrot to run after. I know now whom to contact when questions arise :-)

      5 days later

      Gonna try to start making a mobile game tomorrow. Could really use an extra income source. Something simple, but fun and with good heart put into it. Maybe i can sell some bonus levels for it.
      I might post my progress somewhere. Im not sure where 🤔.

      A platformer splatter, a splatformer ? Muahahaha :-)

      I only fear most gamers just don't care about the doings. I am only personally affected when KSP2 is released, practically the only game I am/was waiting for.

      They were public, still are now in the new company. But the shady doings will probably not stop but spread further, can't stop thinking even about political aspects.

      cybereality Farewell, Unity. I have learned a lot from work with you.

      Now I have to re-purchase all my assets elsewhere...

      cybereality https://www.pcgamer.com/unity-is-merging-with-a-company-who-made-a-malware-installer/

      Looks like Unity is over. Expect a LOT more people coming to Godot very soon...

      The thing I find the most sad about this is that the merge/acquire was right after they (Unity) let go of a bunch of their employees. They seem to have the money that they could have, at least from a theoretical monetary perspective, kept the employees and been able to pay them, but… I digress.


      A totally different aside: I’ve been slowly trying to wrap my head around efficient peer-to-peer networking setups, but it is confusing. Payload size isn’t nearly as much of an issue as I thought it might have been, but instead it is latency. Even with smoothing and interpolation between packets, things are still a little laggy visually. I’ve read the way around it seems to be sending data so you can predict where the player will be going next, which can be as simple as passing the velocity or as complex as pooling the player’s recent input and then trying to guess their next input from that.

      All of this has given me a new appreciation of all the multiplayer games I’ve played. I’m just working on a 2 player project, I cannot imagine the immense complexity of trying to program the networking for something like a MMO or a battle-royal game.

        cybereality

        After reading the article, I think you're overreacting. The malware they mention was adware, which lots of "legitimate" companies produced, and they seem to be past that now and mostly into advertising. Getting more advertising experience is likely to make unity more attractive to developers who just want a really easy way to cash in.

        I wouldn't like it, but I didn't like unity to begin with. 🙂

          TwistedTwigleg

          I'm of the opinion that the secret to making a good networked game is getting the software to lie convincingly about what happened. As long as each player sees something reasonable, who cares if they all see the same thing at the same time. Einstein would approve.

          I was in a love-hate relationship with Unity, TBH. It's sad to see it change and all. What I didn't like was how those who couldn't/didn't pay for stuff was usually kept in the dark. Plus, the tuts they offered for free were not up-to-date. I liked how easy it was to whip up a game with it using assets from their store, and I also made and published my very first game with it. It wasn't really that great, but it was a huge step.

          Some doubted that I would get that far, it was awesome when I managed to officially correct them.

          Alright, so this is about my player blinking to indicate invincibility.

          Right now, I'm using AnimationPlayer to make visibility on and off.

          It's just... well... the node tree.

          Normally, it should be either AnimatedSprite or AnimationPlayer + Sprite. Here, I use both of them (AnimatedSprite for explosion effect and AnimationPlayer + Sprite for blinking).

          I did try to use only AnimationPlayer + Sprite, but when changing texture using keys, the texture is just... gone.

          Maybe because the explosion sprites are on different files, it doesn't want to work.

          Assets:

          • Ships
          • Tiles <- The explosion sprites are here.

          So in the end, I have to use both methods. Though, I feel it's not efficient.

          duane Everyone pretty much knows adware is the way to go for indy games. They can probably sell a few on steam, but mostly people don't want to pay for indy games.