mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-10-29 02:17:28 +01:00
Let the instances drawn from the GPU hide one another, in two phases
This commit is contained in:
@@ -268,13 +268,20 @@ views go as before.
|
||||
|---|---|---|
|
||||
| `gfx.gpucull` | `no` | `no`: on the processor, as before. `yes`: on the graphics card, and the models are drawn from its result. `compare`: on the processor, which draws, and on the graphics card too, for the results to be compared (debugging) |
|
||||
| `gfx.gpucull.occlusion yes/no` | `yes` | with `gfx.gpucull yes`: models hidden whole behind what was drawn before them (the cab, the terrain, buildings and other models drawn on their own, vehicles) are left out |
|
||||
| `gfx.gpucull.occlusion.instances yes/no` | `yes` | with `gfx.gpucull.occlusion yes`: the models drawn this way hide one another too (see below) |
|
||||
| `gfx.depthprepass yes/no` | `yes` | with `gfx.gpucull yes`: the depth of the models is drawn first, so the colour is worked out only for what stays in view (dense foliage) |
|
||||
| `gfx.depthprepass.scene yes/no` | `no` | the depth of the whole opaque scene of the main view (terrain, tracks, buildings, models, vehicles, the cab) is drawn before its colour, see below |
|
||||
|
||||
The occlusion test does not take models drawn this way as covering each other: a tree hidden behind another tree is still
|
||||
drawn (its colour is not worked out with the depth prepass on). Models whose material is not one of the usual ones (parallax,
|
||||
water and the like) are left out of the depth prepass and drawn as before. All three can be changed while the simulator
|
||||
runs, in the **Instance culling** debug window.
|
||||
With `gfx.gpucull.occlusion.instances yes` the test goes in two phases: the models seen in the previous frame are drawn
|
||||
first (their depth, or their colour without the depth prepass), the depth they leave is added to what the others are tested
|
||||
against, and only then are the others tested and drawn; the graphics card also notes which models it saw, for the next frame.
|
||||
So a tree hidden behind other trees, or behind a hill of models, is left out as well. Whatever is left out is hidden behind
|
||||
something drawn, so the picture is the same either way; a model coming into view is drawn in the frame it appears in. It
|
||||
costs the depth pyramid a second time and the processor one more pass over the draws of the models (hundreds of draw calls,
|
||||
not the scene). With `no` the models do not cover each other: a tree hidden behind another tree is still drawn (its colour
|
||||
is not worked out with the depth prepass on). Models whose material is not one of the usual ones (parallax, water and the
|
||||
like) are left out of the depth prepass and drawn as before; with the depth prepass on, they don't hide the others either.
|
||||
All of these can be changed while the simulator runs, in the **Instance culling** debug window.
|
||||
|
||||
With `gfx.depthprepass.scene yes` the scene is gone through twice: first only its depth is drawn, then its colour, worked
|
||||
out once per pixel for the surface which stays in view. That costs the processor a second walk through the scene (fewer
|
||||
@@ -351,11 +358,13 @@ editor goes through the first `dynamiclights` headlights, the reflections throug
|
||||
of it, which can be edited and applied with a time of change, and the layers of clouds, the fog, the precipitation and
|
||||
the wind, which change at once. These changes are of this computer only. Shift+F12 shows the GPU time of `clouds:` (the
|
||||
main view), `clouds panorama:` (a band of the panorama), `cloud shadows:` and `fog volume:`.
|
||||
- **Instance culling** window: the mode of `gfx.gpucull` and the two switches above. With `gfx.gpucull yes` Shift+F12 shows
|
||||
`gpu cull:` (models drawn and hidden by the occlusion test, as counted on the graphics card a few frames before, the levels
|
||||
of detail, the draw calls with those of the depth prepass, and the processor time of the whole step) and the timings
|
||||
`instance cull:`, `occlusion depth:` (the depth pyramid of the test) and `depth prepass:`. With `compare` it shows how many
|
||||
models both counted and how many levels of detail differ.
|
||||
- **Instance culling** window: the mode of `gfx.gpucull` and the switches above. With `gfx.gpucull yes` Shift+F12 shows
|
||||
`gpu cull:` (models drawn, in two phases how many of them first, and hidden by the occlusion test, as counted on the
|
||||
graphics card a few frames before, the levels of detail, the draw calls with those of the depth prepass, and the processor
|
||||
time of the whole step) and the timings `instance cull:`, `occlusion depth:` (the depth pyramid of the test) and
|
||||
`depth prepass:`; in two phases each of them adds in brackets the time of the second phase, of the second pyramid and of
|
||||
the depth of the models drawn first. With `compare` it shows how many models both counted and how many levels of detail
|
||||
differ.
|
||||
- With `gfx.depthprepass.scene yes` Shift+F12 shows the `scene depth:` row (draws of the depth pass and its processor time)
|
||||
and the timing `scene depth:` (its GPU time).
|
||||
- With `gfx.contactshadows` on Shift+F12 shows the `contact shadows:` row (the level, the length and reach of the rays, or
|
||||
|
||||
Reference in New Issue
Block a user