Screenshot looks stunning: )
Just a quick/random experiment, thought I may as well post (done on an old nightly):
Proof of concept (re)implementing double quad trees in geometry shader. The other grass method is limited to people who know the XML tweak. Triangles in mesh coloured by unique random number blending red to blue:
img,
img. . (Some funkyness due to using same pass as grass). Number of quads generated roughly based on triangle area
1 quad,
2 quads. Idea is 3 tri vertex positions in model space are pretty much enough to generate a unique seed by mixing bits w/o numerical instability I got last time (addition works for mixing). Allows density & random property variation.
Thought came as a mixing volumetric and old double quad grass
looks great. Adds 'volume'. Then wondered if there was benefit in additional toggleable vegetation layers for undergrowth (plants/small trees/large bushes/regrowth in tree-fall clearings). If I understand correctly, 2 quad grass looks bad in rembrandt(?) and no way to change effect or have scenery layers based on renderer.
I guess (?) even crowds on airports or beaches, or grazing animals on grass fields with noise based movement may work with quads (placing discrete items via shells using a 'grid seed' probability might be too expensive- 3rd branch&texture with height as alpha).
Just a random experiment (just following math/logic, &conceptual understanding).
"shader extruding a couple of shells""since one can use both (noise) and (1-noise) to generate two mutually exclusive bump patterns on the same geometry"In 1st screenshot far terrain shows the first pass, without shells. May be (?) possible to draw contents of shell in the normal terrain pass at a performance hit - even with shells off.
Testing results for anyone wanting to fine tune: Fiddling with NVIDIA control panel. 'Enhancing per application settings' for transparancy AA especially, &AA helped reduce noisy-ness at range. Transparency AA matters more for grass than (larger) terrain bumps. 4x AA requested by default? What about transparency AA? Not sure if users will know about that or suspect it helps (there may be a detailed AA select FG setting I don't know about, doesn't seem to be one in GUI).
(Transparency AA is applied to all alpha surfaces (?) - clouds&trees. Beware the supersampling variety (TRSSAA) is -expensive-. Google suggests the driver overrides & bruteforce renders specific surfaces to separate supersampled buffer(?) - then rescales&composits to the framebuffer. Interesting, hypothetically if effects framework supported writing to multiple buffers or an intermidiate buffer/texture - might do to save&reuse scattering intermediates in sceenspace in 2nd pass when rendering shells or trees. Anyway, if engine was able to select rendering to supersampled buffer by surface, like grass shells only, it may be be cheaper.)
@Lots of Performance talk reading both threads.
Looked up a bit on GS speed on google while experimenting. Seems some (old) results say geometry shader pipeline is additionally slow due to assumptions about the old flow not being able to be held(???) - maybe less with recent drivers(?). Maybe outdated now.
Just a thought, since 1:1 primitives are output there might (?) be an alternate way of using vertex shader
instancing in some form. If there's any benefit at all, it would be geometry shaders are slower somehow? on worst case hardware that is still fast enough to run. Not sure if possible, worth gain, or requires engine work.
Some redundancy between 2 passes. Also (randomly) wondered if there was any magic trick to reuse vertex transform data between 2 passes (same shader&draw calls close together(?) to exploit post transform cache).But not useful if fragment limited on worst case. Marginal systems not often vertex limited?
Maybe more controls in-line with performance cost of effect might help..to tweak shell seperation, or view/fade distance (maybe also based on view angle of shell. Also aliasing noise can maybe be avoided (?) by angle subtended by a pixel versus angle subtended by grass blade or noise detail wavelength - based on FOV/resolution. Since grass blades use thresholding of a smoothly varying noise function perhaps(?) there's some way so fragment centers perspectively just outside the threshold can be made faded in and coloured by the % of likely coverage to anti-alias without needing transparency supersampling AA for the whole scene).
The procedural texturing is so detailed (e.g. Norway) that shell based terrain is not really needed unless intending to fly low to see 3d-ness of bump geometry (no bump normal shading atm? or possibly expensive. maybe a 2nd noise lookup close to threshold can fake shadows too). Adjusting LODs helps (detailed and rough can be reduced <4 km(?) depending on flatness&view-range while bare lod can be large). Workflow using different setting profiles for flight&craft profiles isn't cued or directed in UI, so people with somewhat recent GPUs may just be running unnecessary LODs or AA for satisfactory FPS/visuals.
At any rate next time people update GPUs & sync with steady tech progress it should run fine @ 1080p (& newcomers without use for GPU power previously will have a new usecase).
Kind regards,
vnts