Geometry Nodes does not show instances of collections in "Render image" ok, while both cycles and eevee render those correctly in Viewport #97373

Closed
opened 2022-04-15 23:55:40 +02:00 by Mikael Virtanen · 9 comments

System Information
Operating system: Ubuntu 20.04.4 LTS
Graphics card: GeForce GTX 1650

Blender Version 3.1.2
Broken: 3.1.2 daily build April 15, 01:58:06, cc66d1020c as well as earlier versions

Short description of error

Instances made with geometry nodes don't show collections in Render image, unless the collection itself is rendered in the image, too. Why this is serious bug and not a feature is explained below. Also note that both cycles and eevee do render the geometry nodes correctly in Viewport, although not in the final Render image.

Exact steps for others to reproduce the error

  1. Start a new general blender file

  2. Add UV sphere, and move it slightly away from the cube, so that you now see both the cube and the sphere

  3. Make a new collection, and move the cube into that collection

  4. Go to Geometry Nodes workspace, select the sphere, and click "+ New". You now have "Group Input" ----> "Group Output" for the sphere shown in the Geometry Nodes editor

  5. Drag the new collection containing the cube into the Nodes editor. It is shown as "Collection Info" box within the editor.

  6. Connect the Geometry output from the "Collection Info" to the geometry input of the "Group Output". The sphere changes into a cube, and so you see two cubes.

  7. Hide the collection containing the cube both from Viewport and from Renders by clicking the respective eye and camera icons on the right side of the collection name

Now you see just one cube in Viewport. It is where the sphere was located. This perfect as it should be. And it doesn't matter which kind of visual or which workspace you have in Viewport. All of them show one cube, from the wireframes and solid modes to eevee and cycles rendered scenes - as long as eevee and cycles are rendered in Viewport.

  1. Hit F12 or select Render Image from the Render menu. You don't see one cube rendered anymore, there is nothing in the image. This is both inconsistent with the same cycles (and eevee) rendering in Viewport, and more importantly, plainly wrong and highly problematic, as exemplified below. Correct behavior would be showing one cube, just like both eevee and cycles show when those are rendering for Viewport.

(9. Note that if you unhide the collection in the Renders by clicking the crossed camera icon, and then F12 to render, you shall see two cubes. That rendered image is right and ok as such, but this behavior shows a current requirement that the collections themselves must be clicked unhidden in Renders, so that one could use instances of a collection in the Geometry nodes. This is a serious bug that is hard to circumvent.)

No - that is not a correct feature but a bug. A practical example illustrates:

Make some complicated object, for example a small spaceship, and put all of its components into a collection. So far so good.

You wish to make an animation of a fleet of 100 of similar spaceships engaged in some situation and flying in the scene.

A beautiful method to achieve is this by geometry nodes. The original spaceship collection would be hidden from Viewport and from Renders, since you are not using it and not moving it around. You are using it just as model for you fleet's ships.

You make your fleet, and make it move by some logic, and everything looks great in Viewport even when rendered with cycles. But when you begin to render your final images, no spaceship will be seen, because your collection was hidden.

Ok, perhaps you just unhide the collection and use it as one your ships? No good, since when you rotate or move your collection, all of the geometry node instances (your 99 other space ships) move and rotate similarly as well. The collection has to remain unmoving and unrotating, at origin. And that spaceship will look pretty stupid, just standing still while all the other ships move around. (Note that even if some future versions of blender would make it possible that the collection itself and the geometry node instances could move independently from each other - so that e.g. rotating the collection would not rotate the instances - it would still be wrong to require that the original collection is visible in the scene to have those geometry node instances in the final Render image. For the reasons that has been said this far, and also because then one would need to make two separate modules for moving and rotating the spaceships in the scene. One for moving the collection and its single spaceship, and one for moving all the 99 other spaceships that are generated by geometry nodes! Right way is making all of the 100 spaceships with the geometry nodes, and making just one module/logic that move all those spaceships in a way that looks good and consistent.)

Also, you cannot hide the unmoving collection spaceship by scaling it to zero size, because all of the other spaceships would scale similarly with the collection.

Maybe put the camera so that the collection is behind it? Then it wouldn't matter, even if the collection is unhidden and just standing still at the origin...? Well, this would be really clunky workaround, and even that wouldn't work well in a general case, since you might need to turn the camera to different directions, if you are for example following some particular spaceship.. So the (unmoving) collection could become visible in such cases.

A functioning hack would be positioning our camera, scene and everything that is interesting say 10,000 units away from the origin, and the collection would be at origin. This way the collection would be too small and too far to be seen in Render image, even if it is unhidden. Yet realistically, this is not the right way to do it...

There has been a very short bug report that relates to part of this, but it didn't make the real problems very understandable. It was https://developer.blender.org/T93429

**System Information** Operating system: Ubuntu 20.04.4 LTS Graphics card: GeForce GTX 1650 **Blender Version** 3.1.2 Broken: 3.1.2 daily build April 15, 01:58:06, cc66d1020c3b as well as earlier versions **Short description of error** Instances made with geometry nodes don't show collections in *Render image*, unless the collection itself is rendered in the image, too. Why this is serious bug and not a feature is explained below. Also note that both cycles and eevee do render the geometry nodes correctly in Viewport, although not in the final Render image. **Exact steps for others to reproduce the error** 1. Start a new general blender file 2. Add UV sphere, and move it slightly away from the cube, so that you now see both the cube and the sphere 3. Make a new collection, and move the cube into that collection 4. Go to Geometry Nodes workspace, select the sphere, and click "+ New". You now have "Group Input" ----> "Group Output" for the sphere shown in the Geometry Nodes editor 5. Drag the new collection containing the cube into the Nodes editor. It is shown as "Collection Info" box within the editor. 6. Connect the Geometry output from the "Collection Info" to the geometry input of the "Group Output". The sphere changes into a cube, and so you see two cubes. 7. Hide the collection containing the cube both from Viewport and from Renders by clicking the respective eye and camera icons on the right side of the collection name Now you see just one cube in Viewport. It is where the sphere was located. **This perfect as it should be**. And it doesn't matter which kind of visual or which workspace you have in Viewport. All of them show one cube, **from the wireframes and solid modes to eevee and cycles rendered scenes - as long as eevee and cycles are rendered in Viewport**. 8. Hit F12 or select Render Image from the Render menu. You don't see one cube rendered anymore, there is nothing in the image. This is both inconsistent with the same cycles (and eevee) rendering in Viewport, and more importantly, plainly wrong and highly problematic, as exemplified below. Correct behavior would be showing one cube, just like both eevee and cycles show when those are rendering for Viewport. (9. *Note that if you unhide the collection in the Renders by clicking the crossed camera icon, and then F12 to render, you shall see two cubes. That rendered image is right and ok as such,* but this behavior shows a current requirement that the collections themselves must be clicked unhidden in Renders, so that one could use instances of a collection in the Geometry nodes. This is a serious bug that is hard to circumvent.) **No - that is not a correct feature but a bug. A practical example illustrates:** Make some complicated object, for example a small spaceship, and put all of its components into a collection. So far so good. You wish to make an animation of a fleet of 100 of similar spaceships engaged in some situation and flying in the scene. A beautiful method to achieve is this by geometry nodes. The original spaceship collection would be hidden from Viewport and from Renders, since you are not using it and not moving it around. You are using it just as model for you fleet's ships. You make your fleet, and make it move by some logic, and everything looks great in Viewport even when rendered with cycles. But when you begin to render your final images, no spaceship will be seen, because your collection was hidden. Ok, perhaps you just unhide the collection and use it as one your ships? No good, since when you rotate or move your collection, all of the geometry node instances (your 99 other space ships) move and rotate similarly as well. The collection has to remain unmoving and unrotating, at origin. And that spaceship will look pretty stupid, just standing still while all the other ships move around. (Note that even if some future versions of blender would make it possible that the collection itself and the geometry node instances could move independently from each other - so that e.g. rotating the collection would not rotate the instances - it would still be wrong to require that the original collection is visible in the scene to have those geometry node instances in the final Render image. For the reasons that has been said this far, and also because then one would need to make two separate modules for moving and rotating the spaceships in the scene. One for moving the collection and its single spaceship, and one for moving all the 99 other spaceships that are generated by geometry nodes! Right way is making all of the 100 spaceships with the geometry nodes, and making just one module/logic that move all those spaceships in a way that looks good and consistent.) Also, you cannot hide the unmoving collection spaceship by scaling it to zero size, because all of the other spaceships would scale similarly with the collection. Maybe put the camera so that the collection is behind it? Then it wouldn't matter, even if the collection is unhidden and just standing still at the origin...? Well, this would be really clunky workaround, and even that wouldn't work well in a general case, since you might need to turn the camera to different directions, if you are for example following some particular spaceship.. So the (unmoving) collection could become visible in such cases. A functioning hack would be positioning our camera, scene and everything that is interesting say 10,000 units away from the origin, and the collection would be at origin. This way the collection would be too small and too far to be seen in Render image, even if it is unhidden. Yet realistically, this is not the right way to do it... There has been a very short bug report that relates to part of this, but it didn't make the real problems very understandable. It was https://developer.blender.org/T93429

Added subscriber: @boson

Added subscriber: @boson
Member

Added subscriber: @HooglyBoogly

Added subscriber: @HooglyBoogly
Member

Changed status from 'Needs Triage' to: 'Needs User Info'

Changed status from 'Needs Triage' to: 'Needs User Info'
Member

Thanks for the detailed report. Could you upload a file with the example set up? This makes it much easier to discuss the problem, since we can both use the same reference.

Thanks for the detailed report. Could you upload a file with the example set up? This makes it much easier to discuss the problem, since we can both use the same reference.
Pratik Borhade changed title from Geography Nodes does not show instances of collections in "Render image" ok, while both cycles and eevee render those correctly in Viewport to Geometry Nodes does not show instances of collections in "Render image" ok, while both cycles and eevee render those correctly in Viewport 2022-04-16 12:02:44 +02:00
Member

Added subscriber: @PratikPB2123

Added subscriber: @PratikPB2123

Here are files that Hans requested.

So Viewport rendering is always ok. If the collection is hidden in Renders (=the camera icon is crossed next to collectionname ), then Render image does not show instances of collections made with geometry nodes.

minimal example.blend A minimal reproduction of the bug, like the bug report steps 1-8. Select viewport rendering, so that you see cycles and eevee render one cube in the scene in Viewport. Press F12 to Render image, and you will notice there is nothing in the image - unlike in Viewport.

simple spaceship example.blend I made also a better example, a crude spaceship animation like the one envisioned in the bug report. This will illustrate more clearly why Viewport rendering is right and Render image rendering is wrong, and not the other way around.

  1. Select Viewport rendering icon so that you render with cycles (or with eevee) in the Viewport.

  2. Then make the animation play in Viewport by pressing the spacebar. A large number of spaceships is moving towards the horizon. This is the expected good situation, as it should be.

  3. Make a final rendering of some frame with Render image from Render menu or with F12. There is nothing in the image!!!

  4. Change the spaceship collection visible in Renders by clicking the crossed camera icon next to the spaceship collection name, and render again with F12. Now all the instanced spaceship will be shown, but regrettable also the original spaceship collection ( =the huge spaceship at the center) will show in the final rendering.

  5. Click the eye icon next to the spaceship collection name to show the spaceship collection also in Viewport. Then press spacebar to play animation in Viewport. The instanced spaceships are moving as before, but there is one much larger unmoving spaceship in the center of the scene, and it clearly shouldn't be there. (That is the spaceship collection that we changed to visible in step 4. for Renders and in step 5. for Viewport). The point of this step 5. is that the bug is even more obvious in animation than in a single still image.

Here are files that Hans requested. So Viewport rendering is always ok. If the collection is hidden in Renders (=the camera icon is crossed next to collectionname ), then *Render image* does not show instances of collections made with geometry nodes. [minimal example.blend](https://archive.blender.org/developer/F13004355/minimal_example.blend) A minimal reproduction of the bug, like the bug report steps 1-8. Select viewport rendering, so that you see cycles and eevee render one cube in the scene *in Viewport*. Press F12 to *Render image*, and you will notice there is nothing in the image - unlike in Viewport. [simple spaceship example.blend](https://archive.blender.org/developer/F13004363/simple_spaceship_example.blend) I made also a better example, a crude spaceship animation like the one envisioned in the bug report. **This will illustrate more clearly why Viewport rendering is right and *Render image* rendering is wrong**, and not the other way around. 1. Select Viewport rendering icon so that you render with cycles (or with eevee) in the Viewport. 2. Then make the animation play in Viewport by pressing the spacebar. A large number of spaceships is moving towards the horizon. This is the expected good situation, as it should be. 3. Make a final rendering of some frame with *Render image* from Render menu or with F12. There is nothing in the image!!! 4. Change the spaceship collection visible in Renders by clicking the crossed camera icon next to the spaceship collection name, and render again with F12. Now all the instanced spaceship will be shown, but regrettable also the original spaceship collection ( =the huge spaceship at the center) will show in the final rendering. 5. Click the eye icon next to the spaceship collection name to show the spaceship collection also in Viewport. Then press spacebar to play animation in Viewport. The instanced spaceships are moving as before, but there is one much larger unmoving spaceship in the center of the scene, and it clearly shouldn't be there. (That is the spaceship collection that we changed to visible in step 4. for Renders and in step 5. for Viewport). The point of this step 5. is that the bug is even more obvious in animation than in a single still image.

Update to the bug report:

There is still the bug that rendering with eevee and cycles produce very different results when done in Viewport and when done in the final Render image, as described above.

However, my earlier opinion that "it is the Viewport rendering is the correct and meaningful one, andRender imagerendering is wrong" now seems false. It is likely to be the other way around: Viewport rendering is wrong and Render image rendering is doing the right thing. Why? Because there is indeed another way of hiding a collection from Viewport and from Render image rendering: The check box next to the collection name, titled "Exclude from View Layer". The whole purpose of this check box is to hide the collection, and it is already doing it.

So I would suggest just fixing Viewport rendering so that it's behavior matches the Render image rendering. That is: In Viewport, instances of collections would check if the "Show in Viewport" for that collection is true (there is an open eye icon). If the Show in Viewport is false (icon showing a closed eyelid) , then the instances of that collection would not be shown in Viewport.

**Update to the bug report:** There is still the bug that rendering with eevee and cycles produce very different results when done in Viewport and when done in the final *Render image*, as described above. However, my earlier opinion that *"it is the Viewport rendering is the correct and meaningful one, and*Render image*rendering is wrong"* now seems false. **It is likely to be the other way around:** Viewport rendering is wrong and *Render image* rendering is doing the right thing. Why? Because there is indeed another way of hiding a collection from Viewport and from *Render image* rendering: The check box next to the collection name, titled "Exclude from View Layer". The whole purpose of this check box is to hide the collection, and it is already doing it. So I would suggest just fixing Viewport rendering so that it's behavior matches the *Render image* rendering. That is: In Viewport, instances of collections would check if the *"Show in Viewport"* for that collection is true (there is an open eye icon). If the *Show in Viewport* is false (icon showing a closed eyelid) , then the instances of that collection would not be shown in Viewport.
Member

Not sure which behavior is correct.
If I use Object instead of the collection in node tree, object shows up in final render even if it's disabled from viewport and render.
but that's not the case for collection. So I think collection should also be visible in final render.
Same issue is also discussed in #97535 (Source Collection visbility will affect the final render of the links object(geo nodes) in eevee/cycles)
So I'll merge this report in #97535.
Don't hesitate to comment if there is any sort of misunderstanding. Thanks again for the report

Not sure which behavior is correct. If I use Object instead of the collection in node tree, object shows up in final render even if it's disabled from viewport and render. but that's not the case for collection. So I think collection should also be visible in final render. Same issue is also discussed in #97535 (Source Collection visbility will affect the final render of the links object(geo nodes) in eevee/cycles) So I'll merge this report in `#97535`. Don't hesitate to comment if there is any sort of misunderstanding. Thanks again for the report
Member

Closed as duplicate of #97535

Closed as duplicate of #97535
Sign in to join this conversation.
No Label
Interest
Alembic
Interest
Animation & Rigging
Interest
Asset Browser
Interest
Asset Browser Project Overview
Interest
Audio
Interest
Automated Testing
Interest
Blender Asset Bundle
Interest
BlendFile
Interest
Collada
Interest
Compatibility
Interest
Compositing
Interest
Core
Interest
Cycles
Interest
Dependency Graph
Interest
Development Management
Interest
EEVEE
Interest
EEVEE & Viewport
Interest
Freestyle
Interest
Geometry Nodes
Interest
Grease Pencil
Interest
ID Management
Interest
Images & Movies
Interest
Import Export
Interest
Line Art
Interest
Masking
Interest
Metal
Interest
Modeling
Interest
Modifiers
Interest
Motion Tracking
Interest
Nodes & Physics
Interest
OpenGL
Interest
Overlay
Interest
Overrides
Interest
Performance
Interest
Physics
Interest
Pipeline, Assets & IO
Interest
Platforms, Builds & Tests
Interest
Python API
Interest
Render & Cycles
Interest
Render Pipeline
Interest
Sculpt, Paint & Texture
Interest
Text Editor
Interest
Translations
Interest
Triaging
Interest
Undo
Interest
USD
Interest
User Interface
Interest
UV Editing
Interest
VFX & Video
Interest
Video Sequencer
Interest
Virtual Reality
Interest
Vulkan
Interest
Wayland
Interest
Workbench
Interest: X11
Legacy
Blender 2.8 Project
Legacy
Milestone 1: Basic, Local Asset Browser
Legacy
OpenGL Error
Meta
Good First Issue
Meta
Papercut
Meta
Retrospective
Meta
Security
Module
Animation & Rigging
Module
Core
Module
Development Management
Module
EEVEE & Viewport
Module
Grease Pencil
Module
Modeling
Module
Nodes & Physics
Module
Pipeline, Assets & IO
Module
Platforms, Builds & Tests
Module
Python API
Module
Render & Cycles
Module
Sculpt, Paint & Texture
Module
Triaging
Module
User Interface
Module
VFX & Video
Platform
FreeBSD
Platform
Linux
Platform
macOS
Platform
Windows
Priority
High
Priority
Low
Priority
Normal
Priority
Unbreak Now!
Status
Archived
Status
Confirmed
Status
Duplicate
Status
Needs Info from Developers
Status
Needs Information from User
Status
Needs Triage
Status
Resolved
Type
Bug
Type
Design
Type
Known Issue
Type
Patch
Type
Report
Type
To Do
No Milestone
No project
No Assignees
3 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: blender/blender#97373
No description provided.