What's the difference between GeometryInstance and Geometry?

I have read the graph nodes section: http://raytracing-docs.nvidia.com/optix/guide/index.html#host#graph-nodes.
I am still confused with GeometryInstance and Geometry.

I also read some codes in the samples, and found that an object consisting of triangles is often put into a Geometry.
What if I put a single triangle into a Geometry, and build a GeometryInstance from the Geometries?
I notice that Acceleration is bound to GeometryInstance, so I don’t understand the difference between the two choices.

The Geometry holds the data describing your geometric primitives as well as the bounding box program to build the BVH acceleration structure inside OptiX and the intersection program in which you calculate the actual intersection with whatever geometric primitive you define.

The GeometryInstance on top of that combines one Geometry node with with a Material. The Material holds the anyhit and/or closesthit programs for all raytypes. That way you define the visibility and behavior of the material.

Only OptiX scene nodes with “Group” in the name can hold an acceleration structure. It’s not at GeometryInstance level, it’s at the GeometryGroup above it. That way you can share identical Acceleration structures among different GeometryGroups if all geometry below them is identical.

Please watch the OptiX Introduction presentation which explains the three minimal scene graph layouts for these cases on slides 7 to 11.
Links here: [url]https://devtalk.nvidia.com/default/topic/998546/optix/optix-advanced-samples-on-github/[/url]

In addition to Detlef’s response, I would suggest taking a look at this topic:
[url]https://devtalk.nvidia.com/default/topic/1042071/optix-graph-nodes-explained/[/url]

The introduction is very helpful, thank you!