Replies: 9 comments 17 replies
-
|
My thoughts on requirements (not set in stone):
|
Beta Was this translation helpful? Give feedback.
-
|
My thoughts on potential implementations based on other file formats (an edit of what I posted on r/VoxelGameDev) The format is intended for complete scenes as well as models. There are two main transfer formats in the gamedev space, glTF and Universal Scene Description (USD), and for Voxel formats the MagicaVoxel .vox format. MagicaVoxel .voxThis is a relatively simple format which is extensible, however in my view it does not meet the requirements I have:
glTFglTF is fairly simple. It has some issues dealing with very large scenes (the binary .glb format is limited to 32bit size), but it is extensible so this could be worked around or external assets used. There's a fair amount of tooling around glTF, and hierarchies plus animations should work with this tooling even if they can't load the voxel data extension components. glTF does not have any volume description, however it has extensions for volumetric parameters which are applied to the interior of meshes such as index of refraction and transmission/attenuation. We can reuse these, and add extensions for other parameters (scattering etc.). USDUSD is more complicated, but more powerful. USD has volumes usdVol which are usually represented by an OpenVDB asset. Technically with USD one could likely throw a load of open source code at the problem and with a 40MB library (compiled) solve the problem without any further work than specifying how to handle indexed OpenVDB materials (OpenVDB can handle integer voxels). ConclusionI personally favour lightweight code, and thus glTF. There are simple C and C++ libraries for using it, and the base information is very simple JSON. On the other hand USD is far more powerful and already has volumes. Your thoughts are welcome below |
Beta Was this translation helpful? Give feedback.
-
|
Neat! Let me just quickly dump a few (very shortened) points from my previous notes on this idea... EDIT: Copying without consistency/duplicate checking t'was a bad idea; see replies.
|
Beta Was this translation helpful? Give feedback.
-
|
What's the goal of this new format ? Is it:
|
Beta Was this translation helpful? Give feedback.
-
|
First of all, thank you for initiating this discussion and i'm all for it! I already agree with many of the points made.
Those are just some quick things immediately coming to my mind. |
Beta Was this translation helpful? Give feedback.
-
|
An extra note here on things I've read here/elsewhere:
|
Beta Was this translation helpful? Give feedback.
-
|
Just also dumping this here: https://pro.arcgis.com/en/pro-app/latest/help/mapping/layer-properties/supported-voxel-formats.htm The time components on voxel layers is also kind of interesting. Also this documentation might give some general ideas: https://eisenwave.github.io/voxel-compression-docs/ And also the way to store the palette must be defined - colors could have names, materials and so on. |
Beta Was this translation helpful? Give feedback.
-
|
Hi Doug, thanks for starting this conversation. From your list of initial bullet points, the first two really stand out to me.
I propose that these two requirements could form the basis of a successful format. We've seen open formats dominate in the past; glTF, OpenGL and Vulkan being good examples. Another comment in the thread that jumped out me was:
I think this is a useful idea, and makes for an attractive method of piece-wise writing reference implementations, and the specification. My preferred method of development looks something like the following:
I've used this method for writing compilers (with formal specifications) in the past, with good success. In terms of the actual format discussion, there does exist a fourth option, which is to define our own custom format. My read on the options presented so far is as follows:
Of the above options, (2) glTF seems like the best candidate to me. This comes with two large caveats; first, glTF appears to broadly operate under the assumption that it is a wire-transfer format, and will be gzip/deflate'd. It does not appear to have any native notion of compression, which we need. Secondly, after briefly reading the specification, I propose that we would not actually re-use much of the existing glTF spec, and instead we would end up stuffing our own specification format to fit inside glTF-shaped containers. While this is not a deal-breaker, it does sound to me like we may be introducing significant friction into our lives, for yet-unknown benefit. I could be wrong about this; I only read the spec for 30 minutes, but that's my initial read. Briefly, it appears we may be able to reuse the following features to store arbitrary voxel data & scene descriptions.
I also read through the EXT_primitive_voxels proposed spec linked above and .. it looks pretty watery to me. It does appear to specify something along the lines of what we're discussing in this thread, but so far looks pretty half-baked, with some academic-looking frills that make me a bit nervous (the implicit volume stuff). The real boon that I see glTF providing is that if we adopt that format, the barrier for applications to bake the voxel representation of the world into traditional triangulated 3D meshes, textures, etc is much lower. The resulting exports could be loaded into traditional 3D editors (Maya, Blender, etc). That said, then we're more talking about an export target for applications, and not necessarily a voxel data interchange format. That observation makes the value proposition of using something like glTF basically boils down to potentially sharing a parser with another export path, which isn't nothing, but isn't much either. -- So.. that all said, I would propose adding a "novel voxel format", option to the list of candidates, with the following qualities: Pros
Cons
Thoughts? I'm between jobs right now and could spend a day to write a simple |
Beta Was this translation helpful? Give feedback.
-
|
This is most certainly pointless bikeshedding for now, but: Since the format is mainly intended for the 'transfer' of voxel(scene)s, similar to glTF, would it make sense to call the format vxTF? |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
A short discussion in the Vengi discord led to me mentioning on the VoxelGameDev subreddit that:
I'm hoping to create an open Voxel interchange/transfer format. My thoughts are that I would make this based on gltf's json format for everything but the raw voxel data, which would likely be in RLE encoded binary arrays. It would be great if it could support different bits per voxel (at least 8 and 16) and perhaps other data than just material indices (Avoyd has 8bit density), but that would be a stretch goal.
If anyone's interested in following along with this let me know. I'm thinking of starting by making a spec sheet on Github, and will notify any folk who reply when I get around to putting the first draft up.
Essentially a number of tools such as Vengi and my own Avoyd have outgrown the MagicaVoxel .vox format, and we need something else. This is the place for this discussion and perhaps an initial implementation.
Beta Was this translation helpful? Give feedback.
All reactions