3D models in a 2D world?

:information_source: Attention Topic was automatically imported from the old Question2Answer platform.
:bust_in_silhouette: Asked By Tomogara

Hi Godot Community,

this is my first question on my very first project and I was just wondering if what I am looking for is possible in Godot. In the example-video below it already shows that it is technically possible. But since I am a bloody beginner I wanted to make sure I didn’t misunderstand this concept and if I can make changes to my 3D player model later after it had animations already.

so:

I want to create a 2D world with 3D models inside of it (3D models = player, npc, properties) I have seen tutorials that show how to render a 3D model from different ankles into a 2D sprite but I’d rather have a real 3D model sitting inside the 2D world because I’d like to be able to switch the 3D model’s armor for example later.

what I want to avoid: 2D sprite “player running animation” made of a follow up of multiple pictures to create 3D illussion, because if I want to change the player’s look later, I’ll have to render the animation again. Or maybe there is still a way to switch the 2D player’s clothing even after the animations have been created? maybe I’m stressing for no reason here?

what I am aiming for: “3D model player running animation” so changes on the player could still be made after the animation has already been created.

or would it be better to have a 3D model in blender, then do the changes on the 3D model’s look, and finally have it render all the animations for that model into a 2D sprite again, wouldn’t that be a problem in terms of time consumption and game file size?

If something still sounds confusing I can try explaining it in a different way :slight_smile:

I wanted to know if something like that would be possible for a beginner in Godot to start working with :smiley: I saw a video on YouTube that shows what I am aiming for pretty good: https://www.youtube.com/watch?v=bsawS6q6wuE

1 Like
:bust_in_silhouette: Reply From: MuffinManKen

There’s 2 approaches that are “pure 2D”:

  1. Pre-render everything as a sprite. Do animations by playing the frames. It will use a lot of memory (especially as you add more animations) and changing clothes would be pretty much limited to changing colours.
  2. Use skeleton-based animation. Here you have all the different pieces as sprites (head, body, arms, etc). This will save a ton of memory and changing clothes is as easy as swapping just the required sprites:
    2D skeletons — Godot Engine (3.1) documentation in English

If you want to use a 3D model, you can render the model in a viewport, then use the resulting texture as a sprite. This is the most flexible, but also more complicated. I’m doing this now and I’m having some quality issues with the sprites.

thank you very much for the explanation and the mentioned examples, since I am just about to start learning GD Script and creating the very first game this managed to help me on what to focus on when it comes to the player characters!

Tomogara | 2019-04-10 14:46

:bust_in_silhouette: Reply From: NoobOfTheDay

I have to admit, that I’m also still a Godot beginner but from what I see in your example video there might be a third approach thats not exactly 2D but maybe you only want to create a world that looks sort of 2d-ish.

You could create your game as real 3D world and set up the camera to use orthogonal projection which makes the scene look flat and move the camera only in two dimensions in front of your 3D scene.

One big advantage would be that your free to add animations to you character during development without having to render dozens of new images and setting them up as animation frames.
And your “2D world” has implicit paralax scolling (which I find very neat).

Of course developing a 3D game needs a slightly different “mindset” than 2D games but when you get used to it you can have a 3D scene/game that looks 2D, 2.5D (isometric) or even 3D and you could switch between the presentations in mid-game without much effort.

Changes to the player model (active weapon, clothing, etc.) would be reduced to assigning new textures or replacing a child 3D object with another one.

At least that’s the approach I would attempt to use.
Hope it helps.