Hi @markc , it’s amazing to meet someone from the original .M3G format dev team!.


I think the format is formidable as it has so many things that definitely shaped the way we handle 3D data ( I saw a lot of similar things regarding USD and GLTF).
I picked up interest in this format to give original retro game developers a way to port their 3d meshes into the JSR184 J2ME format. I’m coding with the help of Claude, Gemini, a modern day M3G exporter using Blender 3.6. github().com/3dcinetv/M3G-Blender-Exporter
So far, the exporter does:
- export .m3g byte complyant
- bones + animation (1 action timeline)
- Materials + alpha
- World color (background), ambient light, point, and sun (omni / directional)
Next on the roadmap:
- Vertex colors
- Morph targets (blendshapes)
- Fog (it’s there but I can’t assign the appearance)
I contacted Claus Höfele after I found out he wrote a whole book using Blender 2.49 and M3G API. This was last week.
For the past two years (before I found the book), I’ve been trying to put 2+2 together basically through trial and error. AI wasn’t “smart enough” back then. However things have changed for the better and I finally got work done in 1 month, what took me 2 years to slowly progress in regards of making the exporter.
I got a semi-final “Pre-release” version finished now.
I understand back in 2005, the original .m3g .py addon for Blender 2.49 also had a long journey of development. I read the notes inside the addon, and there were things left to be finished. I understand the .mbac/ .mtra formats evolved pass .m3g, and in 2006 the .h3t format took over.
I understand Blender 2.5 arrived, then no one updated the addon, the format was left behind in time. I contacted another CGI artist who used to work in 3DsMax back at the time, and he pointed a lot of interesting facts about the .m3g format in regards of custom attributes/(in blender 2.8+: Custom properties).
@markc there are some things that are cryptic to me in regards of volume detection (they call it raycast - nikita36078.github(.)io/J2ME_Docs/docs/jsr184/index.html. Question: if I create an empty#1, assign custom properties: location, size; these properties can be passed on to Java by Object3D.find() <–Id of “1” in this example, and in Java we can create a “trigger event” if the raycast hits, right?
Another thing I wanted to ask is about LODs. There’s nothing on the current internet that talks about how J2ME handled .m3g LODs at the time. The little I know it’s only through other retro developer forums or old podcasts about the J2ME games era, but not really any details about how they handled/passed these kind of attributes (load?) at a given distance from the camera/player. If you could share something about this, it would be amazing.
You mentioned you are familiar with Mascot Capsule V3: was this an authoring visual environment like Unreal Engine or Unity? Even a vague sketch of what it looked like would be awesome. I understand it had an Eclipse integration, so I really don’t know if it had its own “tool panel” or it was just an easier way to import classes from it (dependencies / code)?
Anything you can share on these topics, I’ll be great to progress in this exporter for Blender 3.6
Regards!
Pierre.