Huge viewport performance difference between the instances from the particle system and the geometry nodes instances #92862

Closed
opened 2021-11-05 18:22:51 +01:00 by kursad k · 21 comments
Member

System Information
Operating system: Windows 10
Graphics card: RTX 2070

Blender Version
Broken: e7e3431b29

There is a huge viewport interaction speed difference with these two types of instancing methods. The same setup from the geometry nodes setup drops the viewport interactivity speed and the playback FPS more than half.

The scene below is using the vertices as instancing locations so the number of instances should be the same between the methods.

See the video please

XZXe68juul.mp4

Exact steps for others to reproduce the error

Load the attach .blend
Select the plane
Enable those individual modifiers and compare the viewport interactivity and the playback speed

gn_05112021_1205_44.blend

**System Information** Operating system: Windows 10 Graphics card: RTX 2070 **Blender Version** Broken: e7e3431b2994 There is a huge viewport interaction speed difference with these two types of instancing methods. The same setup from the geometry nodes setup drops the viewport interactivity speed and the playback FPS more than half. The scene below is using the vertices as instancing locations so the number of instances should be the same between the methods. See the video please [XZXe68juul.mp4](https://archive.blender.org/developer/F11734272/XZXe68juul.mp4) **Exact steps for others to reproduce the error** Load the attach .blend Select the plane Enable those individual modifiers and compare the viewport interactivity and the playback speed [gn_05112021_1205_44.blend](https://archive.blender.org/developer/F11734288/gn_05112021_1205_44.blend)
Author
Member

Added subscriber: @kursadk

Added subscriber: @kursadk
kursad k changed title from Huge viewport performance difference between instances from the particle system and from the geometry nodes instances to Huge viewport performance difference between the instances from the particle system and from the geometry nodes instances 2021-11-05 18:26:41 +01:00
kursad k changed title from Huge viewport performance difference between the instances from the particle system and from the geometry nodes instances to Huge viewport performance difference between the instances from the particle system and the geometry nodes instances 2021-11-05 18:29:29 +01:00

Added subscriber: @Bradley_G

Added subscriber: @Bradley_G

I've run a test on my side as well. Due to my laptop limitation I have to change some settings.
But I've made sure that counts of fps really matches in both GN and hair system. This is confirmed with viewport statistics and spreadsheet.
Here's my conclusion:
"As Instance" option in "object info" node is making a difference. This sounds to be weird, because instances aren't realized at the end.
[BUG TEST].mp4

I've run a test on my side as well. Due to my laptop limitation I have to change some settings. But I've made sure that counts of fps really matches in both GN and hair system. This is confirmed with viewport statistics and spreadsheet. Here's my conclusion: "As Instance" option in "object info" node is making a difference. This sounds to be weird, because instances aren't realized at the end. [[BUG TEST].mp4](https://archive.blender.org/developer/F11735781/_BUG_TEST_.mp4)

I've realized that in the file the cone has 17k vertices.
that's why I can only instance about 2000 objects for blender run smoothly.
If I am using a default cone, I can instance as many as 60k instances and even more (it's hard to tell the vertices count since statistic won't show it)
In such a case, whether "As Instance" is checked or not, GN's performance is better than hair (12 fps Vs. 10 fps)

I've realized that in the file the cone has 17k vertices. that's why I can only instance about 2000 objects for blender run smoothly. If I am using a default cone, I can instance as many as 60k instances and even more (it's hard to tell the vertices count since statistic won't show it) In such a case, whether "As Instance" is checked or not, GN's performance is better than hair (12 fps Vs. 10 fps)
Author
Member

I made the cone as an high poly object to demonstrate the issue, in regular cases this issue is not as visible.

I made the cone as an high poly object to demonstrate the issue, in regular cases this issue is not as visible.

But in essence this issue is not relevant to difference between particle system and Geometry Nodes.
This issue stems in "As Instance", in which you just turn it on or off you can see the difference.
Considering what "Object Info" node is doing. I am not really sure if this should be called a bug or not. will need to wait dev to define it.

But in essence this issue is not relevant to difference between particle system and Geometry Nodes. This issue stems in "As Instance", in which you just turn it on or off you can see the difference. Considering what "Object Info" node is doing. I am not really sure if this should be called a bug or not. will need to wait dev to define it.

I've simplify the file and update a new demonstration now.
AS INSTANCE.blend
AS INSTANCE.mp4

I've simplify the file and update a new demonstration now. [AS INSTANCE.blend](https://archive.blender.org/developer/F11739088/AS_INSTANCE.blend) [AS INSTANCE.mp4](https://archive.blender.org/developer/F11739130/AS_INSTANCE.mp4)

Added subscriber: @3di

Added subscriber: @3di

maybe these test files will be helpful. They indicate the issue isn't just with loading the large object each frame, as the performance is severely hit even when navigating the viewport when the timeline isn't playing:

instance performance legacy vs geo.zip

maybe these test files will be helpful. They indicate the issue isn't just with loading the large object each frame, as the performance is severely hit even when navigating the viewport when the timeline isn't playing: [instance performance legacy vs geo.zip](https://archive.blender.org/developer/F11740428/instance_performance_legacy_vs_geo.zip)
Author
Member

@Bradley_G

This issue becomes a horrible mess when using the Collection Info node. It seems like that node is not outputting instances, so the speed difference between the particle system and the geometry nodes is very evident when one using collections as the instance sources.

EDIT:

The issue below seems to be a separate issue related to instancing objects with existing particle systems

Also even with enabling instancing in the object node is not a real match for particle systems when one is using very dense objects as the instancing source. Try using something like a tree object as instance type in geometry node. The particle system is at least 15-25 times faster in the viewport in real life production setups like setting up a forest or a jungle.

I have a production scene setup here (see the image). I can easily navigate around with the particle system setup. On the other hand it takes more than half a minute to rotate the viewport with the geometry nodes one.

The "as instance" option in the object node definitely makes a big difference but with low to mid-range complexity scenes.

blender_QxtnQkV0Ag.jpg

@Bradley_G This issue becomes a horrible mess when using the Collection Info node. It seems like that node is not outputting instances, so the speed difference between the particle system and the geometry nodes is very evident when one using collections as the instance sources. ## **EDIT**: **The issue below seems to be a separate issue related to instancing objects with existing particle systems** Also even with enabling instancing in the object node is not a real match for particle systems when one is using very dense objects as the instancing source. Try using something like a tree object as instance type in geometry node. The particle system is at least 15-25 times faster in the viewport in real life production setups like setting up a forest or a jungle. I have a production scene setup here (see the image). I can easily navigate around with the particle system setup. On the other hand it takes more than half a minute to rotate the viewport with the geometry nodes one. The "as instance" option in the object node definitely makes a big difference but with low to mid-range complexity scenes. ![blender_QxtnQkV0Ag.jpg](https://archive.blender.org/developer/F12043259/blender_QxtnQkV0Ag.jpg)
Member

Added subscriber: @lichtwerk

Added subscriber: @lichtwerk
Member

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

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

Looking at older reports (sorry this has been lying around for quite some time).

Output the entire object as single instance instead of realized geometry. This allows instancing non-geometry object types, because the output will contain an instance of the object.

Is not really entirely clear to me either, since we are instancing a geometry object type in the example, this sounds like it should not make a difference?

In #92862#1259601, @kursadk wrote:
This issue becomes a horrible mess when using the Collection Info node. It seems like that node is not outputting instances, so the speed difference between the particle system and the geometry nodes is very evident when one using collections as the instance sources.

This I cannot reproduce, at least in 3.2 putting the single Suzanne in its own collection will yield similar performance.
Do you mean this is an issue with multiple objects in a collection?

Also even with enabling instancing in the object node is not a real match for particle systems when one is using very dense objects as the instancing source. Try using something like a tree object as instance type in geometry node. The particle system is at least 15-25 times faster in the viewport in real life production setups like setting up a forest or a jungle.

I have a production scene setup here (see the image). I can easily navigate around with the particle system setup. On the other hand it takes more than half a minute to rotate the viewport with the geometry nodes one.

The "as instance" option in the object node definitely makes a big difference but with low to mid-range complexity scenes.

Can you share such an example file?

Looking at older reports (sorry this has been lying around for quite some time). - testing `instance performance legacy vs geo.zip` in 3.2alpha - cannot see a huge difference between `legacy dupli vert instancing` and `geo nodes instancing (as instancing checked)` - `geo nodes instancing (as instancing un-checked)`: yep that one is really slow, not sure this is expected https://docs.blender.org/manual/en/dev/modeling/geometry_nodes/input/object_info.html > Output the entire object as single instance instead of realized geometry. This allows instancing non-geometry object types, because the output will contain an instance of the object. Is not really entirely clear to me either, since we are instancing a geometry object type in the example, this sounds like it should not make a difference? > In #92862#1259601, @kursadk wrote: > This issue becomes a horrible mess when using the Collection Info node. It seems like that node is not outputting instances, so the speed difference between the particle system and the geometry nodes is very evident when one using collections as the instance sources. This I cannot reproduce, at least in 3.2 putting the single Suzanne in its own collection will yield similar performance. Do you mean this is an issue with multiple objects in a collection? > Also even with enabling instancing in the object node is not a real match for particle systems when one is using very dense objects as the instancing source. Try using something like a tree object as instance type in geometry node. The particle system is at least 15-25 times faster in the viewport in real life production setups like setting up a forest or a jungle. > > I have a production scene setup here (see the image). I can easily navigate around with the particle system setup. On the other hand it takes more than half a minute to rotate the viewport with the geometry nodes one. > > The "as instance" option in the object node definitely makes a big difference but with low to mid-range complexity scenes. Can you share such an example file?
Author
Member

@lichtwerk

The performance issue comes to surface when one instances dense objects like complicated trees (dense branches with leaves etc) over a large terrain. You won't be able to hit this issue with primitives and such.

This I cannot reproduce, at least in 3.2 putting the single Suzanne in its own collection will yield similar performance.
Do you mean this is an issue with multiple objects in a collection?

I am not sure what the collection node outputs. It seemed like it was outputting regular objects not instances when I provided a collection with mixed bunch. What is a good way to test if a node is outputting instances or not? This is easy with the regular object node since it provides an option to output an instance instead of a regular object.

@lichtwerk The performance issue comes to surface when one instances dense objects like complicated trees (dense branches with leaves etc) over a large terrain. You won't be able to hit this issue with primitives and such. >This I cannot reproduce, at least in 3.2 putting the single Suzanne in its own collection will yield similar performance. >Do you mean this is an issue with multiple objects in a collection? I am not sure what the collection node outputs. It seemed like it was outputting regular objects not instances when I provided a collection with mixed bunch. What is a good way to test if a node is outputting instances or not? This is easy with the regular object node since it provides an option to output an instance instead of a regular object.
Member

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

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

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

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

In #92862#1308812, @kursadk wrote:
@lichtwerk

The performance issue comes to surface when one instances dense objects like complicated trees (dense branches with leaves etc) over a large terrain. You won't be able to hit this issue with primitives and such.

Not sure at which point this kicks in, it would be really handy to have an example .blend file to see a clear difference of legacy/duplivert instancing vs. goenodes instancing.

I am not sure what the collection node outputs. It seemed like it was outputting regular objects not instances when I provided a collection with mixed bunch. What is a good way to test if a node is outputting instances or not? This is easy with the regular object node since it provides an option to output an instance instead of a regular object.

Think it outputs instances (single or multiple -- depending on the Separate Children option)
You can check in the spreadsheet:
{F12957014 size=full}

> In #92862#1308812, @kursadk wrote: > @lichtwerk > > > The performance issue comes to surface when one instances dense objects like complicated trees (dense branches with leaves etc) over a large terrain. You won't be able to hit this issue with primitives and such. Not sure at which point this kicks in, it would be really handy to have an example .blend file to see a clear difference of legacy/duplivert instancing vs. goenodes instancing. > I am not sure what the collection node outputs. It seemed like it was outputting regular objects not instances when I provided a collection with mixed bunch. What is a good way to test if a node is outputting instances or not? This is easy with the regular object node since it provides an option to output an instance instead of a regular object. Think it outputs instances (single or multiple -- depending on the `Separate Children` option) You can check in the spreadsheet: {[F12957014](https://archive.blender.org/developer/F12957014/image.png) size=full}

Added subscriber: @PetterLundh

Added subscriber: @PetterLundh
Member

Added subscriber: @HooglyBoogly

Added subscriber: @HooglyBoogly
Member

Thanks for the investigation everyone. These are basically known issues with the code, which we already have a task for, so I'll merge this there.

Thanks for the investigation everyone. These are basically known issues with the code, which we already have a task for, so I'll merge this there.
Member

Closed as duplicate of #92963

Closed as duplicate of #92963
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
6 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#92862
No description provided.