This is a real limitation you’ve hit, and you’re understanding it correctly.
Short version first:
Named Attribute does not work on geometry that is loaded dynamically (Import PLY / OBJ / etc).
Those attributes exist, but they are anonymous inside the node tree.
So you must capture the attribute immediately after import.
For dynamically imported geometry:
You can only access attributes by name in the same evaluation branch, right after import, using Capture Attribute.
You cannot:
- Use Named Attribute later
- Use it in another node tree
- Use it after instancing
Capture Attribute (Color)
(then do instancing / points / etc)
Most PLY files store color as:
You need to inspect which one.
Add a Spreadsheet panel:
- Select the Geometry Nodes object
- Open Spreadsheet → Geometry Nodes
- Look at Point / Vertex attributes
You’ll see something like:
or
- After Import PLY
- Add Capture Attribute
- Domain: Point
- Type: Color
- Add Named Attribute
- Plug Named Attribute → Capture Attribute (Value)
Now you have a captured color output socket.
Some PLYs store:
Then you do:
- Three Named Attribute nodes:
- Combine Color
- Plug into Capture Attribute
Example: points → spheres
Capture Attribute (Color)
In the material:
Use Attribute node with name:
(or whatever the socket name is)
This fails:
Import PLY → Instance → Named Attribute
Because:
- Instancing breaks attribute access
- Dynamic geometry has no global attribute registry
Dynamic imports are like a private data stream.
You must:
- Grab attributes immediately
- Store them via Capture Attribute
- Then you’re free to instance / realize / modify
The most stable production pattern:
Capture Attribute (color, normal, id, etc)
Realize Instances (if needed)
This makes attributes behave like “real” geometry.
Insert Store Named Attribute right after import:
Import PLY → Store Named Attribute ("debug_color")
Then open Spreadsheet — now it becomes visible globally.
Imported geometry:
- Is evaluated lazily
- Has no persistent attribute namespace
- Lives only inside that node branch
Named Attribute works only on:
- Real mesh datablocks
- Or attributes already stored upstream
Dynamic geometry: Capture first, ask questions later.
If you don’t capture right after Import PLY, the attribute is gone forever.