1
0
Fork 0
Commit graph

570 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
Fahim Imaduddin Dalvi
ae119f29cf Fixed FOV side effect on light sprite size.
The light sprite diminished to zero size as the FOV was decreased
(in sim zoom), and increased considerably as the FOV was increased.
This commit fixed this by taking the FOV into account to keep the light
sprite size roughly constant across the valid FOV range.
2021-09-04 13:41:02 +03:00
Fernando García Liñán
96a6e6c9bf HDR: Implement GTAO (Ground Truth Ambient Occlusion) 2021-09-01 04:26:03 +02:00
Fernando García Liñán
c21951407d HDR: Better technique ordering 2021-08-31 18:42:21 +02:00
Fernando García Liñán
e505c79618 Better handling of transparent objects in Classic
- model-combined-transparent is deprecated.
- model-transparent can be used to let some rendering pipelines know that
an object is transparent.
- In the case of Classic, model-transparent just inherits from model-default
and the object is rendered normally.
2021-08-31 18:25:28 +02:00
Fernando García Liñán
3459e7ddfe HDR: Use gl_VertexID instead of the MVP matrix in fullscreen passes 2021-08-31 18:02:38 +02:00
Fernando García Liñán
9f39644199 HDR: Optimize the G-Buffer and do not separate the occlusion texture
- The G-Buffer layout has been redesigned to be 96 bits per pixel. There are 24
unused bits that can be used for extra material parameters later (like
clearcoat).
- Add better debug views for the G-Buffer.
- Use octahedron normal encoding. This yields the same results as the previous
method but uses 16 bits less.
- Use rg11fb10f for the environment mapping cubemaps.
- Tweak the shadow mapping parameters and add a colored debug mode.
- Only render shadow maps for objects that inherit from model-default.eff or
model-pbr.eff instead of having a fallback Effect. Now transparent objects
should be ignored (if they are marked as such with model-transparent or
similar).
- Remove the separate occlusion texture. Now the PBR Effect expects a single
texture where R=occlusion, G=roughness and B=metallic.
2021-08-27 00:03:43 +02:00
Fernando García Liñán
55410e9d35 HDR: Port chrome.eff 2021-08-25 14:32:22 +02:00
Fernando García Liñán
9983a0c68c HDR: Water rendering 2021-08-25 04:17:09 +02:00
Fernando García Liñán
eea955168e HDR: Organize shadow-related files and add screen space shadows 2021-08-24 23:38:56 +02:00
Fernando García Liñán
eed433ce9f HDR: Use stencil buffer for optimization purposes 2021-08-23 12:44:26 +02:00
Fernando García Liñán
8662ce0a86 HDR: Add SMAA as the default antialiasing technique 2021-08-23 01:05:41 +02:00
Fernando García Liñán
2443c5bce7 HDR: Fix WS 2.0 ocean tiles and remove hdr-geometry fallback Effect 2021-08-22 18:15:23 +02:00
Stuart Buchanan
a442615c68 WS30: Fix WS30 fragment shaders 2021-08-21 17:15:15 +01:00
Fernando García Liñán
b52fe3bf34 HDR: Remove glass.eff minimum alpha hack 2021-08-19 20:19:55 +02:00
Fernando García Liñán
7ff31e9004 HDR: Properly handle AC3D transparent materials 2021-08-19 18:20:37 +02:00
Fernando García Liñán
212f8fdab9 HDR: Add support for glTF transparent objects 2021-08-19 01:42:32 +02:00
Fernando García Liñán
05994100ea HDR: Better handling of model-combined for backwards compatibility 2021-08-18 12:27:03 +02: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
13df616ca6 HDR: Support glTF models 2021-08-16 17:10:01 +02:00
Fahim Imaduddin Dalvi
81af0f37c2 Shader-based scenery lights.
This commit implements shader-based scenery lights with support for
efficient rendering of a large number of lights, animations and
directionality. Detailed commit log can be found at [1]. Detailed
discussions can be found on the mailing list [2][3][4].

[1] https://sourceforge.net/u/fahimdalvi/fgdata/ci/feat/scenery-shader-lights/~/tree/
[2] (Timed animation stops working in certain configurations) https://sourceforge.net/p/flightgear/mailman/flightgear-devel/thread/4A7AC359-63B3-4D8A-815B-09823BCEFF27%40gmail.com/#msg37095923
[3] (Shader-based scenery lights) https://sourceforge.net/p/flightgear/mailman/flightgear-devel/thread/63E3C131-7662-4F59-B2E6-03208C78EF96%40gmail.com/#msg37190517
[4] (Shader-based scenery lights Part 2) https://sourceforge.net/p/flightgear/mailman/flightgear-devel/thread/74F18179-CA34-4901-A44E-15498ECC230A%40gmail.com/#msg37331695
2021-08-07 21:42:20 +03:00
Fernando García Liñán
e745684c33 HDR: Use a better DFG LUT
The previous one had 8 bit precision, this one has 16 bit precision and is stored on a DDS texture.
2021-07-31 19:13:19 +02:00
Fernando García Liñán
467468ef3a HDR: Improve exposure and bloom handling 2021-07-31 19:13:19 +02:00
Fernando García Liñán
526491790e HDR: Improve envmap pre-filtering 2021-07-31 19:13:19 +02:00
Fernando García Liñán
5c1c28c536 HDR: Improve PBR Effect 2021-07-31 19:13:19 +02:00
Fernando García Liñán
871654c16f HDR: Better handling of the Sun
Add transmittance to the Sun illuminance value to get correct colors at every time of day.
Also improved the Sun disk rendering.
2021-07-31 19:13:19 +02:00
Fernando García Liñán
af29642423 HDR: miscellaneous changes
- Add an utility linearizeDepth function to help visualize the depth buffer for debug purposes.
- Use 'color0' instead of 'color' for all color attachments.
- Do not write to the HDR buffer if a fragment doesn't need shading (depth = 1).
2021-07-29 08:45:17 +02:00
Fernando García Liñán
9b9ae5cf38 HDR pipeline: even better atmospheric scattering
Implementation of "A Scalable and Production Ready Sky and Atmosphere Rendering Technique" by Sébastien Hillaire (2020).
2021-07-28 09:40:04 +02:00
Fernando García Liñán
016585e176 HDR pipeline: Use MRT to prefilter the environment map 2021-07-26 17:21:20 +02:00
James.Hester
c6b526f343 Create overlay mixing scales based on texture scale. 2021-07-26 11:13:00 +01:00
Fernando García Liñán
9eaef501c7 HDR pipeline: a lot of improvements to atmospheric scattering 2021-07-26 12:11:37 +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
Fernando García Liñán
96313e7eb0 Initial commit of the HDR pipeline 2021-07-23 07:46:05 +02:00
Fernando García Liñán
49fa42faac Add shaders for osgText 2021-05-14 22:45:36 +02:00
Erik Hofman
55209d40b5 Cleanup:
- water.eff: technique 2: air_pollution uniform is not used by water-ALS-base.frag
- water.eff: ocean_flag is now a parameter
- water-inland.eff now inherits from water.eff as it's a copy, except for ocean_flag value
2021-05-10 11:52:28 +02:00
Stuart Buchanan
8a94ffa7e1 WS30 Use proper inheritance for ws30water 2021-05-08 20:41:58 +01:00
Erik Hofman
5abacfbaf4 Also use the new Gray-Alpha texture for water depth information for ws30 water too. 2021-05-07 15:39:48 +02:00
Erik Hofman
e741d069ab Use the new Gray-Alpha texture for water depth information for inland water too 2021-05-07 15:24:47 +02:00
Erik Hofman
055ce55be4 Use a Gray-Alpha texture for water depth information and use the globe-colors.jpg texture for water color. 2021-05-07 15:14:56 +02:00
Stuart Buchanan
c87798c610 WS30i: Initial coastlines 2021-05-03 15:47:13 +01:00
Erik Hofman
6d0c1439f0 There is no reason not to keep ocean_depth_1 as a JPEG file saving around 120MB of diskspace (and installer space) 2021-05-01 12:55:16 +02:00
Fernando García Liñán
3497d531fc Add dummy techniques to model-combined.eff
This should fix issues with empty techniques in effects inheriting from model-combined.
2021-04-29 12:44:58 +02:00
Stuart Buchanan
4db5d00c16 Simplify building.eff, fix lack of orthoTexCoord 2021-04-25 21:36:02 +01:00
James Turner
bde07c8862 Fix inherits-from breaking lightmap.eff fallback 2021-04-22 10:29:59 +01:00