Hi @ndebruyn, I just did something similar (not so fancy) and I’ve been wondering what is the correct approach. I exported from mixamo to blender and then export from blender as gltf. The issue I have with mixamo is that it does not allow me to combine multiple animations into one downloadable model so I have to combine animations on jME level. Is this just me or did you have to do it same way?
Hi @raistm, this is the exact steps I take.
How to animate models for jME with Mixamo:
- Choose a model to upload to mixamo in the T-pose
- Go to mixamo.com
- Upload you model
- Find an animation
- Download the character from mixamo as a .dae with skin
- Unzip the file
- Open blender and import the .dae file.
- Save the file as .blend to you jME assets Models folder.
- Open jME and in your project find the model.blend file right mouse click and convert to .j3o
- For more animations go to mixamo and find a new animation.
- Download the character as .dae with skin.
- Open same old model with previous animation and import that animation into that blend model.
- In blender open the drop sheet and go to the Action Editor.
- Select the new animation and rename it to an appropriate name.
- Save again to you jMe assets Models folder.
- Convert the model again to .j3o in jME.
- In jME Scene Explorer you will find multiple models of the same. Find the one with all the animations and delete the rest. Then save the model.
You can always automate the process with a script. I instead got an import scripts which converts other data to j3o or whatever else.
After a long break I started over with writing a base game which I can quickly clone and use for prototyping.
Here is my first prototype with wall jumps. Use Zay-Es, dyn4j, feather and libgdx-ai
Looks like a kind of 2.5D super meat boy
Been working on a procedural world generator and saving mechanism that I’ll be putting on github in the next week or so.
You start by creating layers (first image) of terrain, grass, flowers, trees, rocks, whatever. The built-in noise functions help you place them accordingly. In the case of grass, flowers, trees, whatever, you can use multi-layered noise - anything over zero means it will be placed there, anything under and it wont.
Every layer has independent view distance, cell size and add/remove rate (to avoid adding/removing a ton of geometries in the scene in a single frame) to keep the frame-rate fluid. So you could for example set the terrain with a view distance of 10 and a cell size of 32, and the grass a view distance of 6 (because you can’t really even see the grass so far away anyway). Set the trees to a cell size of 64 and a view distance of 3. Whatever works best to improve the object count/frame-rate battle.
You have a layered noise function (second image) to determine how the world is generated. This works by using layers of noise - generally starting with huge “continent” size noise and moving up to mountains, hills, details, etc… (usually increasing in persistence and reducing in amplitude) to create detail. I’ve also found that using two layers of the same settings but different seed - one stretched on the X-plane and the other on the Z plane also works really well.
It also includes a collison pager that allows you to add anything with a Vector3f position to collide with the world, optimizations like pooling collision rigidbodies - so when two characters stand next to each other - they share the same collision shapes instead of each generating their own - and a Post Process Filter configurer (third image) so you can primarily alter the water-filter, but will work for any other filter too.
The goal is to use the editor to tweak the hell out of the world and make it exactly how you want it, save it, and use it in your game. Everything is saved in json format and comes with a saver and reader so it’s literally just a case of copying over the world dir (which is just a bunch of json files) into your game folder and boom - it’s there.
Once I’m done with this I’ll more than likely create a vehicle addon (which I already have) so you can tweak the hell out of vehicles, too, and add them to the worlds with collisions.
Will you be able to specify the areas where generated content is by an user painted image? or function?
Can you quickly change the type of generated object? Eg. swap area with flowers for a mix of bushes and trees.
With these types of questions, and some other I have thought about when I designed a procedural generator on my own.
After some thinking I have settled on the following design which identified and separated the main concerns of a level designer when dealing with such tool into a system with three parts, namely: area selectors, distributors and modifiers.
Area Selector: is any function which given a 3D point returns a float value, zero or less than zero means the area is not selected, greater or equal to one it is, and in between is a weight.
Distributor: Is a function which given an area selector function, generates a set of points.
Modifier: Is a function that can eg. modify a point generated by distributor, generate models at points, rotate them, change their color etc…
In practice, this translates to a workflow such as:
- level designer defines area selectors by:
- drawing a square, circle, polygon
- top view 2D image,
- painting on the terrain directly
- combining existing selectors: union, intersection, difference
- level designer defines a group of modifiers:
- group which generates flowers
- group which generates trees
- group which generates rocks
- level designer assigns which selector function will receive which modifiers
- the system is also extensible: user defined modifiers can be used
The result is a highly customizable procedurally generated scene.
For a quick overview you can check these slides:
or this paper for more detail.
upgrading grandmother, something goen wrong
I’ve been working on a custom scene editor so that I can quickly write new scene editing tools as needed, and also to make up for some of the shortcomings of the default terrain editor Tool in the SDK.
So far I’ve started with a Movement Node editor tool for drawing static movement paths, and I also managed to make a mini Scene Graph Navigation menu fairly quickly using Lemur
Next on the agenda is a Decal tool.
I also don’t plan to rewrite many Tools or features that already exist in the SDK or JMB, since I still use both of those, and they both have their advantages. But I’ve found that creating this editor has been the quickest way to write new editing Tools on a whim so that I can speed up the Level Design process as much as possible.
I’m a little confused on your description. On the one hand you say “procedurally generated” - and in the same breath talk about “manually placing” objects either by hand or images.
In an infinitely procedural world, it wouldn’t make sense to intervene manually and paint certain areas. In a “closed” world game where level design is heavily involved I get it, but for example in minecraft - manually intervening wouldn’t many any sense at all.
Having said that, this editor in particular is focused on noise functions/math to plot positions. Which means it’s entirely possible to alter that generation after it’s saved - say for example to remove a tree or plant a bush. You just set that point to a positive or negative value. So actually painting/user-intervention isn’t a problem. In fact in-game the “player” will be doing exactly that.
can’t you just use recast4j? i have it implemented(without special geom params) so i can help.
it have tiles, so even when terrain is random, it can generate in-run the tiles.
I did not know that existed, and I do know I could have also used the NavMesh built into JME - although I never looked into it much since I wanted a pathing system I could easily extend to fit my game.
I also flag my movement nodes into zones and use the closest move node to the player in order to determine which zone to spawn enemies in, and I also can flag UserData values to certain movement nodes and do thinks like check the NPC’s height to determine if they can make it through a small path, or up a large ledge.
I’ve also noticed that most pathing libraries I looked at in the past choose the fastest path and will cause enemies to cut corners and always hug the walls (after a quick search it looks like recastj4 does this as well). There’s nothing wrong with that and sometimes that’s better to have the NPC cut all corners to make the quckest path, but not for cut scenes or escort quests.
I like to place my movement nodes the way I do so that the NPCs will walk in the center of the paths I paint on the terrain, and not hug the walls like I’ve noticed with most dynamic pathing libraries… it just seems more natural to me that way, but I guess its also just a trivial detail and doesn’t affect much.
Because ideally a system allows both, if a selector functions samples only random noise image/data then the result will be “purely procedurally generated”, if it samples user image/shape then its defined manually, the last variant is a mix of both, eg function which samples random noise but subtracts user image/shape.
I’d like to agree, but usually you wouldn’t want whole game to be only procedurally generated. Not all procedurally generated games need to be of infinite size. For example in my case, I generate an island with trees, flowers, but each city/road/village/point of interest for the player/quest is designed. Even in infinite procedural world, some user defined areas can repeat with variations.
Anyways, making a procedural editor/generator is a lot of fun and work.
I like to place my movement nodes the way I do so that the NPCs will walk in the center of the paths, and not hug the walls like I’ve noticed with most dynamic pathing libraries… it just seems more natural to me that way, but I guess its also just a trivial detail and doesn’t effect much.
see screenshot, it wraps tree here, when npc move it go near tree, not to it and go arround, it just go proper path.
you just setup params liks:
private final float m_agentRadius = 0.5f;
so it know what offset of mesh it should generate from the tree (so it dont collide with tree)
you can setup it big enough, but then you might have problem with doors.
i just made one method myself:
private synchronized boolean buildRecastTile(final int tx, final int ty)
and i can build tile in any position and then add it to Detour to make npc know they have it as navmesh. ofc it need to be in threads, because it take a lot of cpu.
tile size you also provide to recast4j (that is based on recast in C)
i have some old screenshot:
(dont look at this ugly trees, i got much better now )
you can also determine what slope npc can go and much much much more. there are a lot options i dont even know.
even so you are able to MIX your paths with this system (where i also wanted to make something like road-paths out of recast system) or maybe in recast there is already something like priority paths / priority move points
So much like the MotionPath Editor in the SDK? Okay, probably without the cool “connection/placement by clicking” stuff
I didn’t know the SDK had that built in, although that would’ve been a good starting point (or atleast a good reference) for my movement node system.
The pathing code was actually one of the very first things I wrote when I was new to JME, back when I didn’t know about most of engine’s libraries and SDK features - although even now I am still finding out about new ones haha
I wanted to link it, but I don’t find my post anymore, it even had a video showing it.
The bonus definitely is that it uses jme’s cinematics MotionPath, so it’s easily serialized to j3o.
Yeah this blender import in the SDK works amazingly good, I use it a lot and head no issues so far. Thanks for that step by step tut. maybe worth a wiki page?!
Trying to figure out a way to distribute “assets” on an asset store. There are a handful of options and most of them are pretty complex. This program basically lets you put in a “clone” url from github/bitbucket/whatever and builds it to your local maven repository, and thus you can just reference them as normal.
The left ListView shows the repositories you’ve downloaded and the right ListView gives you all the generated dependency strings that you have in the local repository.
It saves you from cloning and installing, and knowing how to actually go about it all, getting the version of the installed dependency, etc… So it does make it quicker and easier, and stops you having to learn it all…
It feels promising… I don’t know… I’m not convinced if this is the best option just yet. It’s definitely easier than convincing people to put things on jcenter and all of that. That’s a real headache if you’ve never done it before. All they have to do is push it to git. I mean it works. It does exactly what it says on the tin, so there’s that