When we use “Position”, “Index”, “Normal” or any other nodes from the “Input” group in Blender Geometry Nodes we need to be clear about exactly what information they provide.
These nodes, as I think, are not quite correctly assigned to the “input” group of nodes. Usually “input” nodes seem to provide some information at the initial stage of processing the node tree. However, this is not right for input Geometry Nodes.
Let’s consider a simple example:
Add a Plane to the scene (shift+a – Mesh – Plane) and assign a Geometry Nodes modifier to it.
Add the “Position” node and send its values to the “pos” attribute by linking it to the “Group Output” node.
Having opened the SpreadSheet area, we can verify that the “Position” node gives us the same data of the points positions that we have from the initial geometry of the plane.
Now let’s add a “Mesh Circle” node to the tree (shift+a – Mesh Primitives – Mesh Circle), and set the number of vertices to 4. Connect it to the main geometry branch with the “Join Geometry” node (shit+a – Geometry + Join Geometry).
What do we see? The “Position” node now translates into an attribute the position of both the initial points of the geometry and generated by the “Mesh Circle” node.
Let’s make our experiment even more interesting – add the “Delete Geometry” node (shift+a – Geometry – Delete Geometry) to the main geometry branch and place it to delete all the original geometry of the plane.
And what happens now? The “Position” node translates into an attribute the position of only the points created by the “Mesh Circle” node. None of them existed when we start processing the node tree.
From our experiment, we can take the following conclusion: although the “Position”, “Normal”, “Index”, etc. nodes refer to “Input”, in fact, they give out the current information at a moment of processing the node tree, but not at it’s beginning.