As an experiment, I'm trying to create a Viewport of a 3D scene, to be rendered on a ViewportTexture, which will be displayed in a 2D scene. (Specifically, it'll be displayed as a scene tile that's part of a TileSet.)

As of yet, it works fine. (In the graphic, that's a 3D torus at the center left, in the red area, and it's animating. Great so far.)

However, the background is imprinting over anything I have in a lower tile layer. This is not good, it limits me to a rectangular shape.

I attempt to set transparent_bg to true for the SubViewport, but after I do that, all 3D objects in the scene become transparent, not just the background. All that's left is the little microscopic Godot icon at the top left, which is a Sprite2D; the MeshInstance and the Sprite3D disappear. However, I can see the green tile that's placed beneath it.

Is this a bug in the program, or a bug in my understanding? It's version 4.1.

UPDATE: It seems that if I'm working with an ordinary 2D scene, without a TileMap, simply selecting "Transparent BG" works fine. Interesting.

  • Lil' Bobby Tables@programming.dev
    hexagon
    ·
    10 months ago

    OK, I seem to have figured it out. It was me.

    I created a second scene, which had a Node2D root. Its children were, in order, a TextureRect2D set to a noise texture (just to test this as I work), a SubViewport with with a MeshInstance3D torus and a Camera3D as children, and then finally a TextureRect2D with a ViewportTexture, set to that SubViewport. The camera was of course aligned to look straight down at the MeshInstance3D.

    The viewport's transparent_bg was toggled to on, and I can see the TextureRect2D right beneath it. Importing it as a scene tile worked fine, I can see the grassy green underneath the tile now.

    It seems likely that I may have messed up my blending mode somewhere in the old one, which is fine; apparently I don't really need to worry much about that.