Geometry Nodes: Apparently No Frame-to-Frame Linkage Between Instanced Objects and Point Cloud Elements - Shader Node Object Info Becomes Unreliable #84326

Closed
opened 2021-01-02 15:04:11 +01:00 by Garry R. Osgood · 11 comments

System Information
Operating system: Linux-5.9.6-gentoo-bertha-x86_64-Intel-R-_Xeon-R-CPU_E5-2630_v4@_2.20GHz-with-gentoo-2.7 64 Bits
Graphics card: Radeon Pro WX 9100 (VEGA10, DRM 3.39.0, 5.9.6-gentoo-bertha, LLVM 9.0.1) X.Org 4.6 (Core Profile) Mesa 20.1.10

Blender Version
Broken: version: 2.92.0 Alpha, branch: master, commit date: Thu Dec 31 17:01:09 2020 -0600 hash:0da1fc2fc4
Worked: Not found

Short description of error
Commonly with instanced geometry, the Object Info shader node sources from its Random socket an arbitrary floating point number chosen from the interval [0,..1], unique to the instance and which persists over the lifetime of the instance. Material designers use this output in a variety of ways to visually distinguish the instance from its peers in a generated cohort of instances, as all in the cohort are derived from a single template object and can be otherwise susceptible to an unrelenting sameness.
breport_00.png
In Geometry Nodes, the [Point Instance]] node generates instance objects to give point cloud elements a visual representation. It is frequently found in tandem with upstream https:*docs.blender.org/manual/en/dev/modeling/modifiers/nodes/input/object_info.html#object-info and [https://docs.blender.org/manual/en/dev/modeling/modifiers/nodes/point/point_distribute.html#point-distribute|Point Distribute nodes. The first, Object Info, is functionally distinct from the similarly named shader node; in Geometry Nodes, it introduces a geometry set derived from the Blender mesh object specified in its input Object socket. The new geometry set is available on the node's Geometry output socket. Point Distribute receives this geometry set, generates and distributes a point cloud across the mesh surface, given particular density and distribution algorithm inputs. This is a second point cloud geometry set derived from the first. Point Instance receives this second geometry set and derives a third: a generated cohort of instances based on the template Blender mesh object specified on its Object input socket and using the instances to visualize the elements of the point cloud. Thus, this trio implements a "scattered pebbles" use case. However, there appears that there is no maintained relationship between a point cloud element and its instanced geometry, in contrast with older instance generators such as in 'Old School' Blender particle systems.

Recent work in Geometry Nodes strives to ensure that this trio of nodes produces a temporally coherent point cloud, a "scattering of pebbles" that doesn't "crawl around" from frame to frame in an animation. See D9832 "Geometry Nodes: Make random attribute node stable". This gives rise to a similar expectation in the realm of shading and texturing. In a production environment, some designer will invariably create a material that incorporates the shader version of Object Info and harness its Random output to modify color and texture dynamically on a per-instance basis. However, the Geometry Node "scattered pebbles" pipeline appears not to similarly maintain any frame-to-frame coherence between a point cloud element and the instance that visualizes it. This association appears to change from frame to frame, so in a shader node tree, a material designer cannot rely on consistent behavior of the Random socket and vary instance appearances without encountering frame-by-frame flutter. The animation in the Exact steps for others to reproduce the error section illustrates the issue.

Exact steps for others to reproduce the error
Open the attached Blender file and run the animation in a viewport visualization mode suitable for reviewing material appearances. Otherwise, see the attached animation.
objectidcoherence.mp4
objectcoherence.blend
The animation and blend file incorporates an 'Old School' particle system, which does maintain frame-by-frame coherence between a particle and the specific mesh object instance that visualizes it. Regardless of underlying implementations - which greatly differ - it is this Old School particle system behavior that sets the material designer's expectations when it comes to the Geometry Node "scattered pebble" use case. In a particle system, the viewer can easily trace the trajectory of a particle; its appearance remains stable throughout the animation. But in the corresponding Geometry Node point cloud, the elements flutter, jarring both for the viewer and the material designer's expectations regarding the Object Info shader node.

**System Information** Operating system: Linux-5.9.6-gentoo-bertha-x86_64-Intel-R-_Xeon-R-_CPU_E5-2630_v4_@_2.20GHz-with-gentoo-2.7 64 Bits Graphics card: Radeon Pro WX 9100 (VEGA10, DRM 3.39.0, 5.9.6-gentoo-bertha, LLVM 9.0.1) X.Org 4.6 (Core Profile) Mesa 20.1.10 **Blender Version** Broken: version: 2.92.0 Alpha, branch: master, commit date: Thu Dec 31 17:01:09 2020 -0600 hash:`0da1fc2fc4` Worked: Not found **Short description of error** Commonly with instanced geometry, the [Object Info](https://docs.blender.org/manual/en/latest/render/shader_nodes/input/object_info.html) shader node sources from its **Random** socket an arbitrary floating point number chosen from the interval [0,..1], unique to the instance and which persists over the lifetime of the instance. Material designers use this output in a variety of ways to visually distinguish the instance from its peers in a generated cohort of instances, as all in the cohort are derived from a single template object and can be otherwise susceptible to an unrelenting sameness. ![breport_00.png](https://archive.blender.org/developer/F9547095/breport_00.png) In Geometry Nodes, the [Point Instance]] node generates instance objects to give point cloud elements a visual representation. It is frequently found in tandem with upstream [[https:*docs.blender.org/manual/en/dev/modeling/modifiers/nodes/input/object_info.html#object-info|Object Info]] and [[https://docs.blender.org/manual/en/dev/modeling/modifiers/nodes/point/point_distribute.html#point-distribute|Point Distribute](https:*docs.blender.org/manual/en/dev/modeling/modifiers/nodes/point/point_instance.html#point-instance) nodes. The first, `Object Info`, is functionally distinct from the similarly named shader node; in Geometry Nodes, it introduces a geometry set derived from the Blender mesh object specified in its input **Object** socket. The new geometry set is available on the node's **Geometry** output socket. `Point Distribute` receives this geometry set, generates and distributes a point cloud across the mesh surface, given particular density and distribution algorithm inputs. This is a second point cloud geometry set derived from the first. `Point Instance` receives this second geometry set and derives a third: a generated cohort of instances based on the template Blender mesh object specified on its **Object** input socket and using the instances to visualize the elements of the point cloud. Thus, this trio implements a "scattered pebbles" use case. However, there appears that there is no maintained relationship between a point cloud element and its instanced geometry, in contrast with older instance generators such as in 'Old School' Blender particle systems. Recent work in Geometry Nodes strives to ensure that this trio of nodes produces a temporally coherent point cloud, a "scattering of pebbles" that doesn't "crawl around" from frame to frame in an animation. See [D9832](https://archive.blender.org/developer/D9832) "Geometry Nodes: Make random attribute node stable". This gives rise to a similar expectation in the realm of shading and texturing. In a production environment, some designer will invariably create a material that incorporates the shader version of `Object Info` and harness its **Random** output to modify color and texture dynamically on a per-instance basis. However, the Geometry Node "scattered pebbles" pipeline appears not to similarly maintain any frame-to-frame coherence between a point cloud element and the instance that visualizes it. This association appears to change from frame to frame, so in a shader node tree, a material designer cannot rely on consistent behavior of the **Random** socket and vary instance appearances without encountering frame-by-frame flutter. The animation in the **Exact steps for others to reproduce the error** section illustrates the issue. **Exact steps for others to reproduce the error** Open the attached Blender file and run the animation in a viewport visualization mode suitable for reviewing material appearances. Otherwise, see the attached animation. [objectidcoherence.mp4](https://archive.blender.org/developer/F9547108/objectidcoherence.mp4) [objectcoherence.blend](https://archive.blender.org/developer/F9547117/objectcoherence.blend) The animation and blend file incorporates an 'Old School' particle system, which does maintain frame-by-frame coherence between a particle and the specific mesh object instance that visualizes it. Regardless of underlying implementations - which greatly differ - it is this Old School particle system behavior that sets the material designer's expectations when it comes to the Geometry Node "scattered pebble" use case. In a particle system, the viewer can easily trace the trajectory of a particle; its appearance remains stable throughout the animation. But in the corresponding Geometry Node point cloud, the elements flutter, jarring both for the viewer and the material designer's expectations regarding the `Object Info` shader node.

Added subscriber: @grosgood

Added subscriber: @grosgood
Member
Added subscribers: @HooglyBoogly, @JacquesLucke, @filedescriptor
Member

Changed status from 'Needs Triage' to: 'Confirmed'

Changed status from 'Needs Triage' to: 'Confirmed'
Member

I can confirm this on 2.92.0 Alpha, branch: master, commit date: 2021-01-06 10:55, hash: 4e23f08807. I don't know if this should be considered a bug or a limitation at the moment. @HooglyBoogly or @JacquesLucke do you have any comments?

I can confirm this on 2.92.0 Alpha, branch: master, commit date: 2021-01-06 10:55, hash: `4e23f08807`. I don't know if this should be considered a bug or a limitation at the moment. @HooglyBoogly or @JacquesLucke do you have any comments?

Added subscriber: @brecht

Added subscriber: @brecht

@filedescriptor
Thank you for taking a look at this.

I don't know if this should be considered a bug or a limitation at the moment.

I'd opt for the "Known Issue - Limitation" category. A comment @brecht made in #84330 - last paragraph, in particular - reminds that Geometry Nodes aren't done yet. There are design gaps. This bug is an outward manifestation of one of those gaps, I believe, and there is likely an as yet unspecified design task to more closely couple instanced mesh geometry sets with related Blender mesh objects, so that a mesh instance that "visualizes" a specific point cloud element has a permanent association - at least for the lifetime of the point cloud element and the visualizing mesh. One aspect of that association is a characteristic random value exposed through the shader node Object Info Random output socket.
Until that is in place, this task can serve as an accumulator that the triage team can reference as others play with Geometry Nodes and encounter this issue.

@filedescriptor Thank you for taking a look at this. >I don't know if this should be considered a bug or a limitation at the moment. I'd opt for the "Known Issue - Limitation" category. A comment @brecht made in #84330 - last paragraph, in particular - reminds that Geometry Nodes aren't done yet. There are design gaps. This bug is an outward manifestation of one of those gaps, I believe, and there is likely an as yet unspecified design task to more closely couple instanced mesh geometry sets with related Blender mesh objects, so that a mesh instance that "visualizes" a specific point cloud element has a permanent association - at least for the lifetime of the point cloud element and the visualizing mesh. One aspect of that association is a characteristic random value exposed through the shader node `Object Info` **Random** output socket. Until that is in place, this task can serve as an accumulator that the triage team can reference as others play with Geometry Nodes and encounter this issue.
Member

It wasn't so bad solving part of this, the distributions with the "Random" method should produce stable values with D10024. The issue with the "Poisson Disk" method is that it's not a stable distribution when the XY bounding box changes.

Anyway, I think using poisson disk distribution on animated meshes is just not a good idea at this point because of how slow it is.

It wasn't so bad solving part of this, the distributions with the "Random" method should produce stable values with [D10024](https://archive.blender.org/developer/D10024). The issue with the "Poisson Disk" method is that it's not a stable distribution when the XY bounding box changes. Anyway, I think using poisson disk distribution on animated meshes is just not a good idea at this point because of how slow it is.
Member

Removed subscriber: @HooglyBoogly

Removed subscriber: @HooglyBoogly
Member

Added subscriber: @HooglyBoogly

Added subscriber: @HooglyBoogly

This issue was referenced by 3db975f30d

This issue was referenced by 3db975f30dd327381dc1a0e08305460a1a12eba4
Member

Changed status from 'Confirmed' to: 'Resolved'

Changed status from 'Confirmed' to: 'Resolved'
Hans Goudey self-assigned this 2021-01-07 16:31:07 +01:00
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
4 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#84326
No description provided.