Use Geometry shader on visible geometry?

I have a large open world I am making, I have a few options on how to do vegetation,

  1. geometry shader -
    pros - can push millions of extra faces
    cons - I am not good with GLSL and it doubles the vertex count (visible geo + ‘imposter geo’)
    at the moment this would mean doubling the vertex count of the world, I could use help with this approach to be able to
    use the visible mesh as the geometry emitter without doubling up.

2.static mesh batching per tile
pros - super fast to render
cons - management - can I just delete a whole batch without crashing etc? (unknown)

3.No batching / just streaming add object / end object
pros - no ‘management’ overhead, and if under 128 vertex can take advantage of instancing.
cons - adding and ending have a cost and the bloat the scene graph

4.[easiest and maybe best]
dont’ end the objects, instead suspend them later move them ahead and replace mesh on them
(any object is any other object)

what are your thoughts?

I think number four is the best.
4.[easiest and maybe best]
dont’ end the objects, instead suspend them later move them ahead and replace mesh on them
(any object is any other object)

Not the most experienced with GLSL either, but the shader route seems like a hassle. I reckon the generated geometry’s behavior would depend on the emitter object, so… how do you make it react to the environment independently? I mean, is that even possible? Seems a tad daunting, can’t even get a clear idea of how one could make the fake stuff snap to surface when dealing with wavy terrain. I’d feel safer moving patches of grass around than wrapping my head around that.

vertLocation = tile.worldTransform*vert.XYZ
obj.worldPosition = vertLocation
obj.alignAxisToVect(vert.normal,2,1)

:3 to get extra tricky you could use a neighbor table and factor the connected vertex normals.

Mother of god, is there anything you can’t do?

It’s like watching an AI progress, I love it xD