I want to swap between 3D models like a 2D sprite swaps between frames, as opposed to rigging a skeleton. Is there some sort of built-in node for this (like how a grid map is a 3D tile map), and if not, is there anything I can use as a good starting point for a custom node? I couldn’t find discussion about this anywhere online. (note: the only thing that came up was pre-rendering 3D sprites onto a 2D sprite sheet; I don’t want that. The camera will not be constrained to a certain view, and it also won’t be orthogonal, so I need actual 3D models.)
I know it would probably be very impractical for high detail models, but my characters are already very low-poly (well under 1000 faces, and I could cut the poly count down even further if nothing needed to deform in-engine), and I don’t plan on making the animations fluid, so I don’t think there’d be any problems with rendering.
I don’t think there is anything specifically like a sprite sheet for 3D models. But it should be easily mimicked by just using multiple MeshInstance3D nodes and a simple script hiding/showing relevant nodes at runtime.
I’m genuinely curious and would love to know why you want to do this. Is it to achieve a ‘choppy’ visual style?
I know of one way to do this, but it still involves creating an armature for your character. If you rig your character in Blender and then animate with f-curve interpolation set to constant, you’ll get the visual look you’re after.
No idea if this imports cleanly into Godot; I haven’t tried it yet.
i didn’t know about these, they look like they’ll be super helpful for squash/stretch and smear frames later. however, i’m working with pixelated textures, so i can only deform models so much before the textures start looking really ugly. i’ll have to look into them though, thank you!
I think you misunderstood what blendshapes are. They’re precisely what you ask for. Although they are typically interpolated between, you can simply use each blendshape as an animation frame.
If you can write shaders, @conz3d suggestion may be even better, especially performance-wise.
i am looking for that sort of choppy vibe, but the other reason i want a model-swapping thing is so i can “cheat” at 3d animation, like adding geometry and/or changing the UV around for different purposes. like, if in a certain pose i’d have to worry about part of a characters’ leg clipping through their pelvis, i can just delete that part of the leg for that frame. i have a lot of issues with the seams between characters’ body parts, especially when they start moving
there’s other reasons too, i’m way more used to 2d animation, and i don’t have the time to learn some of the intricacies of blender bc there’s a ton of other things i have to learn. i want to get a working demo of this game before i leave for college
i did totally misunderstand what they were, but they do still have some constraints that i don’t want. i probably should have elaborated on this earlier, but i don’t necessarily want the different frames to even have a consistent number of vertices.
i’m looking for something similar to having a hundred differently-posed minis for a D&D character that you swap between whenever your character does something. obviously impractical in real life, but i don’t see a reason why it couldn’t work for low-poly models in a game
That would be bad design. Just from the data handling it’s better to have a base mesh (with a fixed amount of vertices) and deform them for every pose.
that was my plan basically, i just want to know if i can do that like using a 2d sprite sheet
like you don’t export every frame of a sprite as an individual image, you have them all on a grid and select a portion of the grid. i guess in 3d the frames wouldn’t even need to be spaced out, i just need to be able to pick which one is showing (@joao_do_paoo’s and @wchc’s suggestions but without every pose needing its own node or file)
also i should’ve mentioned this in the initial post, but i’m never gonna need a lot of characters on screen at once. it’s a tactics game, so there’s a maximum number of characters that can be in any given combat before the turn order gets annoyingly long
Start by the simplest stupidest solution. In a modelling app put all frames on the same place. Each frame will end up imported as a mesh instance node. When animating, show only one of them. To organize use a naming convention or parent each “clip” under a dummy 3d node. There are ways to optimize but if this works for you just go with that.
yeah this would work perfectly. turns out my problem was thinking about 3d objects like 2d images, idk why i didn’t realize you could just hide the different mesh instances
thank you so much, i’ve asked two questions on this forum and you’ve solved both of them