1
0
Fork 0
Commit graph

19 commits

Author SHA1 Message Date
Stuart Buchanan
d723b0b518 WS30 - Uniform Arrays and lighting model
Use Uniform Arrays instead of Texture1D.

Use ambient/diffuse/specular/shininess material
properties consistently across all WS30 shaders.

Use consistent shading model for photoscenery vs.
landclass to minimize visual difference.
2021-11-10 22:58:44 +00:00
Stuart Buchanan
6b943c5e5c WS30: Photoscenery shaders 2021-11-09 20:27:23 +00:00
vs
64e5abda41 WS30 shaders:
Add WS3 detailed technique using the "6" slot. Port the ALS haze, lighting, and math parts of the detailed and ultra shaders. The texture lookups are left out.

Shader selection based on terrain quality setting:

- Ultra - ws30-ALS-ultra frag/vert.

- High and Medium - ws30-ALS-detailed frag/vert. The shaders switch code paths based on quality level uniform.

- Low - ws30-ALS frag/vert.

Changelog:

ws30-ALS vertex shaders:

- Ambient colour material colour doesn't seem to be used in the vertex shader, and isn't sent to fragment shaders currently. Regional materials only define non-default ambient colour of vec4(0.0) for water, ocean etc. Otherwise the default value of vec4(0.2, 0.2, 0.2, 1.0) is used.

ws30-ALS.frag:

- Set alpha of color to diffuse_term.a, to be consistent with WS2 implementation.

ws30-ALS-ultra.frag and ws30-ALS-detailed.frag

- World pos is assigned a value to allow noise functions to compile.

- Swatch_size is temporarily set to 2000m instead of the xsize texture dimension to allow noise math to run while landclass search and texture arrays are being looked up. Swatch_size is used to adjust the wavelength of multiple overlay mixing noise wavelengths based on how far the textures are stretched (WiP WS2 feature). There are some noise calculations that could run while the first landclass lookup happens. If this is not enough, the selection of calculated noise wavelengths to add could change based on how far the textures are stretched, instead of changing the wavelengths at calculation time.

- Move photoscenery technique no "4" after technique no "7" without changing the index (in case the low index is needed for photoscenery). This makes viewing a diff with the WS2 effect easier.

Performance: Currently there's only 1 ground texture lookup and landclass transitions for that texture. The ultra shader looks up 5 more textures. Probably transitions for 1 more texture need to be supported, as often a base and overlay texture are mixed contributing heavily to visible colour. The math overhead is mostly present, except for noise math being better hidden than in the eventual version. Some of the texture array lookups in the full version may be hidden by the math - depending on GPU memory handling compared to calculation speed.
2021-11-10 00:25:09 +10:00
Stuart Buchanan
ffe8738065 WS30: Correct phototexture coordinates 2021-11-06 16:21:58 +00:00
Stuart Buchanan
b043981992 WS30: Initial photoscenery effect
Very basic - just uses the texture.
2021-11-06 14:46:39 +00:00
vs
78df0cb68c WS30 shaders:
Power users looking to profile on different GPUs: the controls and toggles, as well as a guide on how to get accurate results are now in: Shaders/ws30-ALS-landclass-search-functions.frag .

Changelog:
- Move landclass search functions in ws30-ALS-ultra.frag into a shader include: ws30-ALS-landclass-search-functions.frag . These controls should be removed when appropriate.
- 2 development controls to reduce haze and/or lighting are left at the top of ws30-ALS-ultra.frag .

(cherry picked from commit 5196dbd4ebd5f586a7261dc3ae46aa50218caf91)
2021-11-06 19:12:04 +10:00
Stuart Buchanan
0bce3c966f WS30: landclass and texture lookups in fragment shader
commit e131ffaca7b2c934474f0e447b5852cb4c7c8d4a
Author: vs <vs2009@mail.com>
Date:   Fri Oct 15 22:19:42 2021 +1000

    WS30: landclass and texture lookups in fragment shader:

    Changelog:

    - Testing: Procedural random landclass function, get_random_landclass(). 1). Avoids a texture lookup for   profiling. 2). Creates squares of configurable size with controllable random landclass ranges - to test   landclass transition algorithms and quickly profile lots of landclasses in view. It's also possible to put   pressure on GPU memory even with 1 lookup of ground textures per fragment, by reducing size to <20m and   viewing from altitude.

    - Add ALS ultra technique as no 5, move existing ALS technique to no. 6. Add WS30-ALS-ultra frag & vert in   preparation for eventual ALS ultra port. Change comments/variables to match using a texture array instead   of atlas. Sampler name: atlas -> textureArray.

    - Testing/optimisation of de-tiling: WS30-ALS.frag: reorder perlin detiling to make noise source easier to   switch. WS30-ALS-ultra.frag: Create alternative to perlin noise used for reducing tiling that avoids a   texture lookup - to profile and optimise. This is commented out. The performance difference in the final  version depends on memory pressure versus arithmetic load of the full shader. It varies by GPU and what's  in view. In future, once a full ALS  port is done, maybe it'll be more efficient to run a higher quality  de-tiling algorithm all the time to avoid branching overhead due to effects like agriculture which need  more de-tiling. De-tiling code in shaders should /eventually/ match CPU-side de-tiling of texture masks  used for object and vegetation placement. De-tiling code in GPUs might be subject to precision and  numerical artifacts, and if so maybe the texture lookup version would work better. The same applies to  noise used for rendering WS3 water waves and collision queries. One option is to use exactly the same glsl  code, with a C++ header to convert glsl syntax e.g. https://github.com/g-truc/glm .
2021-10-21 21:31:03 +01:00
Fernando García Liñán
eed433ce9f HDR: Use stencil buffer for optimization purposes 2021-08-23 12:44:26 +02:00
Stuart Buchanan
a442615c68 WS30: Fix WS30 fragment shaders 2021-08-21 17:15:15 +01:00
Fernando García Liñán
f5bc6df9fb HDR: Use a reversed depth buffer to increase precision and avoid Z-fighting 2021-08-17 20:58:48 +02:00
Fernando García Liñán
1215f1eba2 HDR pipeline: add placeholder shaders for WS 3.0 2021-07-24 13:35:53 +02:00
Stuart Buchanan
bd4b4ffbec WS30: Clean up WS30 Effect.
Remove redundant and possibly confusing texture assignment
2021-03-28 19:48:14 +01:00
Stuart Buchanan
9d357e58e6 WS30: Improve ALS frame-rate
... by removing depth buffer check for scenery.
2021-02-06 18:01:58 +00:00
Stuart Buchanan
580c375d4b WS30: Use perlin texture to reduce tiling
Use a perlin noise texture to rotate some of the landclass
textures to reduce tiling.

Also add a quality=1 technique which uses it.
2021-01-26 20:17:17 +00:00
Stuart Buchanan
d058b514f2 WS30: Add basic shaders 2021-01-23 17:15:12 +00:00
Stuart Buchanan
ba89f4c153 WS30: Improved material atlas
Add
- texture size
- shininess
- diffuse
- specular

from material.xml into the fragment shader via sampler1D.
2020-12-08 21:15:13 +00:00
Stuart Buchanan
3e3593119c WS30: Shader change to use texture atlas
These changes use the generated Texture2DArray for
texture lookup, supporting arbritary sets of material
textures.
2020-12-05 13:11:59 +00:00
Stuart Buchanan
2a30377124 WS3.0: Remove Effect dependence on ALS.
For the moment, as we have only one technique, stop it from
only being active if ALS is active.
2020-11-21 22:07:40 +00:00
Fernando García Liñán
a3a8f9123e Make Compositor default
- Remove all Compositor Effects and Shaders.
- Unify the low-spec and ALS pipelines in a single pipeline called 'Classic'.
- Readd shadow mapping.
- Move the WS30 Effect and fragment shader out of the Compositor-specific directories.
2020-11-16 13:46:30 +01:00
Renamed from Compositor/Effects/ws30.eff (Browse further)