1
0
Fork 0
Commit graph

707 commits

Author SHA1 Message Date
Fernando García Liñán
691337a00e HDR: Add separate fog layer to atmosphere
Also use Nasal to feed the shaders' uniforms. Much better than running
the computations on the GPU.
2023-04-21 02:15:42 +02:00
Fernando García Liñán
10cd3fb8c4 HDR: Normal mapping without precomputed tangents
Also tidy up model and terrain shaders. Inputs and outputs to vertex and
fragment shaders are now interface blocks.
2023-04-17 05:09:24 +02:00
Fernando García Liñán
82d415cbd4 HDR: Add remaining aerosol types
Now the properties of the atmospheric medium can be changed through the
property tree.
2023-04-16 07:19:22 +02:00
Fernando García Liñán
e77e5bad9c HDR: Fix aerial perspective banding 2023-04-13 05:57:01 +02:00
Fernando García Liñán
f53a170539 HDR: Better bloom effect
We also now pre-expose our lighting before writing to the HDR buffers.
This solves some precision issues and prevents the Sun from producing
infinite values.
2023-04-13 00:30:02 +02:00
Stuart Buchanan
ce24a3f05f HDR: WS30 basic terrain shader 2023-04-12 18:11:41 +01:00
Fernando García Liñán
23b4e6e26f Fix typo 2023-04-11 17:59:44 +02:00
Fernando García Liñán
8af67bfb2f HDR: Complete refactoring of shader style and naming
See https://wiki.flightgear.org/Shader_Style_Guide.
2023-04-11 15:53:47 +02:00
Fernando García Liñán
c4d19877cf HDR: Significant update
- New atmosphering rendering technique based on my own work.
- Attempt to fix some remaining transparency issues.
- Use a luminance histogram for auto exposure.
- Add support for clustered shading.
- Add WS 2.0 shaders.
- Add 3D cloud shaders.
- Add orthoscenery support.
2023-04-06 00:18:29 +02:00
Fernando García Liñán
85771b2863 Use different vertex attribute for orthoscenery
See related SimGear commit e8ffe461

Now the orthophoto texture coordinates are contained in gl_TexCoord[2],
so no need to pass any custom vertex attributes to Effects that use
photoscenery.
2023-04-05 23:13:51 +02:00
Stuart Buchanan
71bdd9e99b WS30 - Improved coastline shader
Make the coastline shader consistent between
the coastline texture and the underlying landclass
texture, irrespective of materials.
2023-02-27 22:02:34 +00:00
Benedikt Wolf
1be001a18c Fix wingflex shader to use current effect code. A better way would probably be to just keep the wing flexing part there and then include model-combined, but I couldnt get that to work unfortunately 2023-02-10 10:40:36 +01:00
Stuart Buchanan
ff8cfed80e WS30: Water texture for photoscenery 2022-11-20 19:51:12 +00:00
Stuart Buchanan
4d3466216a WS30: Improve water line features 2022-10-24 19:53:12 +01:00
Stuart Buchanan
dc167d0656 WS30: Improved coastlines
Modify the ws30 shader to build a coastline using
a high resolution overlay texture mixed with the
landclass texture.
2022-05-28 20:44:25 +01:00
Erik Hofman
b169d59c01 Fix too flat shadowing by not completely removing diffuse light but by toning it down instead. There's almost always reflective light bouncing around. 2022-05-15 10:41:37 +02:00
Stuart Buchanan
7ee03dd9da WS30: Clean up unused Uniforms 2022-04-09 17:17:15 +01:00
Stuart Buchanan
fc8342887a WS30: Coastline beaches and cliffs
Landclass information is typically not high enough resolution
to render small beaches and coastline features.

This commit uses the steepness of the elevation mesh
to procedurally generate:
a) sea-cliffs (poorly - just a texture at present)
b) beaches, which mix into translucent shallow water
c) breaking waves (poorly - uses the wind direction rather than the
slope normal)
2022-04-09 16:26:00 +01:00
Fahim Imaduddin Dalvi
f3b455b699 Bugfix: Terrain quality taken into account in model shaders.
Objects like OSM buildings using the `model-combined` effect ignored
the Terrain quality. Rayleigh Fog is computed for the terrain only
at "Ultra" level, but was computed for models at all quality levels,
which led to a visual disparity. The shader now takes into account
the terrain quality before computing rayleigh fog for objects.
The `road` effect also had the same issue and is fixed now.
2022-04-02 21:20:20 +03:00
Chris Ringeval
6f83fe0c34 Allows ALS filters for space shaders 2022-03-03 19:09:22 +00:00
Stuart Buchanan
8bba60772f WS30: Initial shoreline shader
Using steepness to create a shoreline
2022-02-05 16:23:49 +00:00
Stuart Buchanan
98fda02e65 WS30: Combined land and water shader
Previously the water shader was separate and executed on a
different mesh.

This adds the water shader as a separate fragment function
(ws30-water.frag) and uses a material parameter passed in
as a Uniform to use it in preference to the usual texel
lookup.

Performance testing found a slight performance improvement
from having a single mesh, but a slight performance impact
from the extra fragment shader complexity.
2022-02-05 15:24:02 +00:00
Stuart Buchanan
a06298055a MR269 - Added the Milky Way onto the night sky
from Chris RINGEVAL

https://sourceforge.net/p/flightgear/fgdata/merge-requests/269/

Squashed commit of the following:

commit 23194c0fed49609999b4da67b2990af774f7df03
Author: Chris Ringeval <eatdirt@protonmail.com>
Date:   Sun Jan 30 23:52:09 2022 +0100

    Remove CC-BY-SA 3.0 texture provided by EAS and replace it with one made by myself

commit cb30c7972ba3db6b4cb4ad5f9dcd12d7e0ddbc1a
Author: Chris Ringeval <eatdirt@protonmail.com>
Date:   Sun Dec 5 15:49:31 2021 +0100

    Optimize shaders for vram usage and use new uniforms

commit 7541e49c6757a23b08684f1c4354e84b9af3bcc3
Author: Chris Ringeval <eatdirt@protonmail.com>
Date:   Thu Dec 2 17:22:55 2021 +0100

    Reduce the oversized galaxy texture to 400kB

commit 0e6591907a9978077dc6dff1b53dea7c439a6cc4
Author: Chris Ringeval <eatdirt@protonmail.com>
Date:   Tue Nov 30 23:49:24 2021 +0100

    Add Milky Way onto the night sky
2022-02-01 16:19:35 +00:00
James Turner
2d17217a01 Marker-pins FGData changes
From Tobias Dammers
2022-01-27 12:11:24 +00:00
Stuart Buchanan
1bd128bb63 WS30: Clean-up of the WS30 ALS Ultra shader 2022-01-23 15:21:56 +00:00
Stuart Buchanan
49b1b83be2 WS30: Better edge-hardness implementation 2022-01-22 15:48:02 +00:00
Stuart Buchanan
1d76ced7c7 WS30: Fix snow on ALS detailed level (again?) 2022-01-20 22:24:30 +00:00
Stuart Buchanan
4564b30eac WS30: Separate out haze calculations
Previously haze calculations were performed
in the main body of the ws30 shaders (inherited
from the ALS terrain shaders).  This change creates
a common applyHaze function to consistently apply haze.

This is not ws30 specific, and could be used to replace the
haze calculations of all ALS shaders for improved consistency.
2022-01-18 21:13:29 +00:00
Stuart Buchanan
d8110f0b38 WS30: Shader refactoring: common get_material func 2022-01-18 16:57:39 +00:00
Stuart Buchanan
68df0191c0 WS30: add edge-hardness parameter for landclass transitions
Also new use_edge_hardness_with_large_scale_transition const
for testing
2022-01-15 15:04:54 +00:00
Stuart Buchanan
b35f5d6db2 WS30: Road Shader porting from osm2city 2022-01-12 21:32:55 +00:00
Stuart Buchanan
3261f4a97c WS30: MR #267: Improved texture lookups from VS
Squashed commit of the following:

commit 115511888c20c53670eba17a82c81c9af99d7302
Author: vs <vs2009@mail.com>
Date:   Mon Dec 6 18:52:06 2021 +1000

    WS30 effects and shaders:

    Changelog:

    ws30-ALS-ultra.frag:

    - Ground textures lookups use their own coordinates separate from the landclass  texture lookup.

    - Partial derivatives dFdx and Dfdy are packed together in a vec4, so simple   multiplication to scale can be done in 1 instruction. dFdx = s and t components. dFdy  = p and q components. These must be scaled properly for ground texture access as ground  texture stretching and detiling of tex coords mean textures are scaled differently.

    - Added calculation of partial derivatives for texture coordinates used by the 5 non- base textures. dFdx() and dFdy() were called for nontrivial texture coordinate manipulation.

    - New control randomise_texture_lookups added at top of ws30-ALS-ultra.frag, in the  development tools section. Setting this to 1 will do a stress test of ground texture  array lookups. A fast random number generation function is used to assign each  landclass 4 random textures from the ground texture array - this is done by .  Performance will not be as bad in the full ALS port as some texture slots will better caching in memory - e.g. have 1 or a few variants.

    - Possible optimisation: use a 2nd or 3rd texture array for some of the non-base  texture slots that typically have 256, 512, or 1024 textures. The resolutions of these  arrays should change based on the largest loaded texture size in the active regional  definitions - this will allow taking full advantage of smaller texture sizes in some  areas. The disadvantage is some texture duplication with more slots.

    - Possible optimisation: offer the option to shrink textures by 50% or 25% - for  texture slots that use large textures like base or mix slots.

    - Very temporary - reduce procedural normal map features with photoscenery active  without breaking profiling, as the inputs to shaders are effect defaults or  placeholder (by request on ML).

    ----

    ws30-ALS-ultra.vert:
    - Start of conversion of geocentic world space xyz into lat/lon coords used for ground  texture lookups. Currently commented out as it's unknown what model space coords are  in (not geocentric it seems).

    ws20-ALS-landclass-search-functions.frag:

    - Add control for changing the ground texture array lookup function for debugging in  case old compilers/GPUs have issues. tex_lookup_type: 0: normal( textureGrad(), 1:  textureLod (manual Lod calculation), 2: texture() with no partial derivative  adjustment.

    - New get6_random_integers() will extract 6 limited random values from the full  precision of a 32 bit random value.

    - Old landclass_texel_size_m references are removed since textureSize() is used. There  are no 'const in float' arguments that may cause issues on AMD compilers.

    ----

    WS30-overlay effect (Inactive):

    - ws30-overlay.eff (derived from terrain-overlay.eff). Technique no "4" is used for two passes. The 1st pass is a copy of the ALS ultra pass (technique no "5") from ws30.eff.  The 2nd pass is the same as terrain-overlay.eff. The 2nd pass uses terrain- overlay.frag from WS2.

    - grass-ALS.vert copied to ws30-ovelay-ALS.vert. To do: needs texture coords that  don't change with tiles.

    - terrain-overlay-ALS.geom copied to ws30-overlay-ALS.geom. To do: uses gl_PositionIn [i].xy for position in the horizontal plane - assumes z is vertical. Tile model space  doesn't seem to match this.

    - WS3 doesn't seem to have a way of switching references to terrain-overlay.eff (which  inherits from terrain-default.eff) to the new ws3-overlay.eff (which needs to inherit  from ws30.eff). The ws3-overlay.eff included /might/ just work without any other changes: the first pass is the WS3 als ultra settings pass, and the second overlay pass is unchanged from WS2 (the same terrain overlay shaders should probably work apart from texcoords and rawpos not being correct).

    - Materials/base/materials-base.xml: ws30Road material: uncomment line declaring terrain-default as the effect. The target effect for ws30 roads is road-*.eff and it's added to ws30Road and ws30Freeway but commented out as it's not working currently.

    - Misc: large scale transitions are turned on in ws30-ALS-landclass-search-functions.frag by default. Grow landclass borders with large scale transitions is now on by default.

    ----

    Changes after the multi-texture support commit:

    ws30-ALS-ultra.vert

    - Added documentation: WS30 model space and z up space - for future people working on WS30, and people looking through shaders to rule out possibilities e.g. when fixing bugs, or interpreting visual bug reports.

    ws30-ALS-landclass-search-functions.frag:

    - For now, lookup_ground_texture_array() also looks up the relevant texture's index  based on an integer.

    - Add get_mixed_texel() - looks up texel for this fragment and any neighbors before mixing. Moves currently shared mixing code out of 3 fragment shaders.

    Misc: changed indentation from mixed tabs/spaces to spaces in ws30-ALS-ultra frag and vert. The indentation can be changed again when the porting is complete.

    ws30-ALS vert/frag and ws30-ALS-detailed vert/frag:

    - Add varying for ground texture coordiante, currently set to gl_TexCoord[0]. Apply texture stretching dimensions in fragment shaders.

    - Misc: varying rawPos is set to vec2 for now, as relPos.z+eye_alt might be faster. Misc: keep WS2 mixing logic for now , including turning off mixing via the alpha channel of the textures

    ----

    Changes after sending material parameters in uniform arrays commit:

    - Materials parameter for rock_strata is cast into an int so rock_strata==1 should work. Misc: Left over uniform for rock strata cleaned up.

    - ws30-ALS-ultra.frag and ws30-ALS-detailed.frag: Add missing mat_shininess for photoscenery case .
2022-01-03 15:43:29 +00:00
Erik Hofman
d240a9b138 Improved frozen-lake texture without snow 2021-12-25 10:55:09 +01:00
Erik Hofman
a36a7c96ac Make a distinction between ocean and non-ocean, for which a flag was already available, when animating moving ice-texures. 2021-12-23 14:50:26 +01:00
Erik Hofman
b43a04895c Prevent water ice-textures from moving around. 2021-12-23 14:22:48 +01:00
Stuart Buchanan
6a917a68b3 WS30: Revert to green channel for texture atlas 2021-12-18 21:55:17 +00:00
Stuart Buchanan
eaf03b6005 Add object shadows to water
commit 918aa4402143638133153dff722ef3a6b4feead7
Author: vs <vs2009@mail.com>
Date:   Sat Nov 20 23:38:52 2021 +1000

    ALS water effect & shaders:

    Add object shadows for water in a similar fashion to terrain.

    Add commented out code of what should be the shader part of clustered lighting for the compositor. getClusteredLightsContribution() normally multiplies the texel by light contributions. It is fed input such that the light contribution term is similar to secondary lights in the water lighting equation, and both are added together.
2021-12-05 14:15:27 +00:00
Stuart Buchanan
dcf8641329 WS30: Full ALS Detailed and Ultra implementation
Including mix, detailed, grain, dot, gradient textures
2021-12-05 13:45:46 +00:00
Stuart Buchanan
d4bd49f5f9 WS30: Multi-texture support, global coordinates
- Use fixed fg_modelOffset for global coordinates.  Fixes haze, snow,
noise
- Use updated texture atlas for mix, deetail, frain, dot, gradient
textures
- Hack transition_model until it is added as Uniform.
2021-11-28 19:31:07 +00:00
Stuart Buchanan
688bbbc167 WS30: Add zUpTransform and modelOffset, fix snow 2021-11-19 22:06:34 +00:00
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
851f47f576 WS30: Fix errors on AMD 2021-11-07 18:08:49 +00:00
Stuart Buchanan
f53283be12 WS30: Correct orthophoto texture coordinates 2021-11-06 15:29:22 +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
aaa6c3ff42 WS30: Fix merge markers. 2021-11-05 20:03:51 +00:00
Stuart Buchanan
e5123eeb46 WS30 : terrain shaders from vs
Squashed commit of the following:

commit e7c89ffb600d1bf5cee2936b7dbff31089452745
Author: vs <vs2009@mail.com>
Date:   Fri Nov 5 23:44:35 2021 +1000

    WS30 shaders:

    - WS30-ALS and WS30-ALS-ultra fargment and vertex shaders: Fix NDotL being used before it is initialised. Rename varying diffuse_term from WS2 terrain shaders to light_diffuse_comp as the full diffuse term is not calculated until the fragment shader.
    - WS30-ALS-ultra.frag: Enable haze and lighting by default.

commit 9b55ad051a8d7f3568dfdcd6890655942999e8d0
Author: vs <vs2009@mail.com>
Date:   Wed Nov 3 22:50:29 2021 +1000

    WS30 terrain shaders: ws30-ALS-ultra.frag

    - For power users looking to profile transitions on different GPUs: The test phase toggles and settings for different transition options are available at the start of ws30-ALS-ultra.frag, along with explanations, and how to get accurate profile results on different GPUs. Just need to change a few numbers, save, and debug menu > configure dev extensions > reload shaders to activate.

    - Note: at a minimum, small scale transitions to remove the 'squareness' due to the landclass texture need to be used even on old GPUs.

    - All transition options are off by default. ws30-ALS-ultra.frag is active when the terrain quality slider is set to Ultra. Start by turning one of small or large scale transitions.

    - Texture mixing for small and large scale transitions don't work together, to reduce texture lookups. Turn one off when using the other.

    - Landclasses with contrasting colours make transition issues more visble. The driver control panel texture filtering settings reduces issues with seams at landclass borders.

    - ws30-ALS.frag is left untouched in this commit, for comparison and reviewing. ws30-ALS.frag is active when terrain quality slider is set High to Low.

    Changes:

    - Implement large scale transitions and small scale de-pixelisation of landclasses by searching the landclass texture. Several options and quality levels are available for profiling on different GPUs.
    - There are fixes for multiple issues dealing with texture rendering.

    Changelog:

    1.0 - Small-scale transitions:
    -- a) Remove squareness due to landclass texture by growing neighbour landclasses onto others depending on a growth priority. This feature uses 2 landclass texture lookups, 1 noise lookup, and only 1 ground texture lookup per point. For now the growth priority is simply the landclass id number. If this approach is used, growth priority would be a materials parameter. A way to set default growth priority by landclass via an xml file would be needed. There is flickering noise at long ranges due to small scale detail in the noise function used for growing landclasses. Partial derivative are used to turn off the feature, but turning off the feature too quickly still shows some square ness in distant landclasses.
    -- b) Reduce squareness due to landclass texture by mixing base textures of neighbouring landclasses. This is not perfect, as perfectly square shapes turn into perfectly square shapes with perfectly smudged edges. This uses 2 landclass texture lookups, and 2-3 ground texture lookups.
    -- c) - a) and b) can be run at once. This option will also fade the growths  gradually with distance. This uses 2 landclass texture lookups, 1 noise lookup, and 2-3 ground texture lookups.

    2.0 - Large scale transitions:
    -- a) Implemented by searching the landclass texture. The search pattern is current landlcass for the fragment at the center, and n search points in four directions along the s and t axes forming a cross. The search directions are configurable in the code, adn a minimum of 3 directions are needed. The step size is configurable. The fewer the steps, the larger the bands formed in the transitions. There are 1+4*n landclass lookups per n search points. e.g. 1 search point: 5 lookups, 4 search points:17 lookups, 10 search points: 41 lookups.
    -- b) An option to dither the transition bands by adding mixing noise is availble. This breaks up the visual impact of bands.
    -- c) There is some functionality to grow neighbours on a large scale. No growth priority is used - bothe neighbours will lose definition. A more advanced implementation can use several material parameters to define the nature of the transition: some transitions are very sharp in nature like with agriculture, other transitions can be very gradual, some transitions are patchy. Materials can have competing parameters, to determine which neighbour grows or has a shorter transition on one side. These parameters will need a way of specifying defaults by landclass.

    3.0 - Fixes
    -- a) - Fix seams at landclass borders. These are caused by different ground textures being stretched by different amounts. At the border, an incorrect mip-map level is looked up, causing a colour disontinuity in addition to the difference between landclasses. The reason the mip-map LoD is incorrect is because GPUs use 4 neighbouring pixels to figure out how fast texture coordinates change with respect to screenspace x and y (i.e. partial derivaitves), and use that information to pick a mip-map level. At a landlcass border, this calculation is incorrect.
    -- b) Fix seams at borders caused by the current detiling function. This is due to the detiling function changing the amount textures are stretched, as well as messing with coordinates.
    -- c) The solution to a) and b) is to use textureGrad() to lookup textures. It allows specifying partial derivatives. The partial derivatives for the normal texture coordinates are obtained by built-in funcions, and these need to be multiplied by each stretching factor, including different stretching inside conditionals. All future texture lookups that use custom coordinate scaling/manipulation need to use textureGrad. This fixes various signs of incorrect mip-map lod with distance and view angle (textures look stable/solid).
    -- d) Fix ground textures being stretched out of proportion in the detiling function. This is caused by tile dimensions not being unequal and texture stretching.
2021-11-05 19:59:32 +00:00
Stuart Buchanan
bf55997a56 WS30: Improved ambient color
Previous we just applied gl_LightSource[0].ambient without
multiplying it by the texture itself, so it just lightened
everything.

This fixes that.  (ws30-ALS-detailed.frag still to do)
2021-11-05 19:55:05 +00:00
Stuart Buchanan
63487bbe7b WS30 ultra shader - port ambient lighting fix
commit aca259acaccffbaf1cb264be423dda72c106150e
Author: vs <vs2009@mail.com>
Date:   Sat Oct 23 22:55:56 2021 +1000

    WS30 shaders: varying fix

commit 91b194f6766d432206cb013d99e0a96cd34ff33b
Author: vs <vs2009@mail.com>
Date:   Sat Oct 23 22:17:03 2021 +1000

    WS30 ultra shader: port the ambient lighting fix.
2021-10-24 21:36:39 +01:00