Implement a simple water shader for HDR.
Largely created from the non-HDR WS3.0 water shader,
but only generating a fragment normal.
Notes:
- Water color is a constant in the shader, and set by eye
only.
- foam etc is not yet implemented.
- at very low altitudes the shader breaks down somewhat.
This commit implements instancing for scenery objects by introducing a
OBJECT_INSTANCED verb in stg files. Instances can be defined by their
positions, rotations and scales. The framework also supports extending
object instancing with custom effects, including an additional colorization
effect that allows for setting the colors for each instance of the same
model.
Detailed commit history can be found at [1], and mailing list discussions
at [2].
[1] https://sourceforge.net/u/fahimdalvi/fgdata/ci/feat/scenery-object-instancing/~/tree/
[2] https://sourceforge.net/p/flightgear/mailman/flightgear-devel/thread/7381A03F-BF5B-45E7-AAF3-5288B7DEDFFA%40gmail.com/#msg37617087
Squashed commit of the following:
commit 2af16b3dfa859eff8b9d96e1b9256e8d872d28c5
Author: Fahim Imaduddin Dalvi <dalvifahim@gmail.com>
Date: Sat Feb 24 10:24:12 2024 +0300
Update documentation for instancing
Add details on optional parameters and the order of transformations.
commit f0fda25c196fbb46063abdd30be63ebbc4285841
Author: Fahim Imaduddin Dalvi <dalvifahim@gmail.com>
Date: Sat Feb 24 10:15:17 2024 +0300
Add low-spec shaders for object instancing.
commit bcf6e15523750ea9d1578a48de736073a37ea2bd
Author: Fahim Imaduddin Dalvi <dalvifahim@gmail.com>
Date: Fri Feb 16 14:54:26 2024 +0300
Add documentation
commit a4b889b40543f70c4e9c9d6002f853547c6fb373
Author: Fahim Imaduddin Dalvi <dalvifahim@gmail.com>
Date: Tue Feb 13 17:32:11 2024 +0300
Use header file defined indices for vertex attributes
Vertex attributes were hardcoded across the code, this commit changes
the implementation to use constants defined in the header file. Also
change the indices used to be compatible with the future HDR pipeline.
commit 8120544e276161f57dd1aeda645ef52684eab7a7
Author: Fahim Imaduddin Dalvi <dalvifahim@gmail.com>
Date: Sat Feb 10 22:26:55 2024 +0300
Clean up shader code
Use *.glsl library code to minimize duplication across object-instancing*
shaders. Rename variables to follow Shader Style Guide:
https://wiki.flightgear.org/Shader_Style_Guide
commit ed864379621c060860c68d46cab054f8f1161f25
Author: Fahim Imaduddin Dalvi <dalvifahim@gmail.com>
Date: Sat Feb 3 22:23:11 2024 +0300
Remove unused fragment shader.
commit be80516fff660764dad245cd6389e7616d8d807c
Author: Fahim Imaduddin Dalvi <dalvifahim@gmail.com>
Date: Sat Feb 3 22:21:15 2024 +0300
Add support for multiple effects and add a colored instancing effect.
This commit adds shaders and a corresponding effect for colored
instanced objects using the new custom attributes provided by the
corresponding SimGear commit.
commit f758ad00b08578052b815bdf138dae5b3a0e026c
Author: Fahim Imaduddin Dalvi <dalvifahim@gmail.com>
Date: Sat Feb 3 16:31:15 2024 +0300
Remove unnecessary inclusion of vertex shader in inherited effect
commit 26fa5ecc8d825ed6902c6a6934a82749839cc9cc
Author: Fahim Imaduddin Dalvi <dalvifahim@gmail.com>
Date: Wed Oct 18 21:14:18 2023 +0300
Fix rotation to match normal scenery objects
commit 2a47c3164085d5821944f53a02a55c3bea9ca4ac
Author: Fahim Imaduddin Dalvi <dalvifahim@gmail.com>
Date: Wed Oct 18 21:13:41 2023 +0300
Reduce instancing effect to bare minimum
commit c24d4fdbfc295872ec6f47a8f8e002dfa301fd83
Author: Fahim Imaduddin Dalvi <dalvifahim@gmail.com>
Date: Sat Oct 14 11:30:34 2023 +0300
Properly handle model/texture/effects
Simgear:
Previously, the model was being loaded without any options, this is
now fixed. *ac models have their effect instantiated manually, while
*xml models require an explicit <effect> tags. Also, the already
loaded model node is edited (for adding vertex attributes, statesets
etc) instead of creating a new node (for deferred texture loading and
other stuff to work).
FGData:
Reverted object-instancing effect to match model-default more closely
to make texturing work.
commit 17e74fc4cc421c3aa9f08e5bbcd08d8a5b450655
Author: Fahim Imaduddin Dalvi <dalvifahim@gmail.com>
Date: Sat Sep 9 14:07:35 2023 +0300
Implement model-default effects for instanced objects.
Not perfect yet, normal models are quite a bit darker, and we are loading
the model using OSG directly, instead of SGModelLib.
commit d4734690745bde0652e578174e18ddf4fe799000
Author: Fahim Imaduddin Dalvi <dalvifahim@gmail.com>
Date: Sat Apr 23 14:52:36 2022 +0300
Implemented instance rotation and scaling
This commit adds support for optional per-instance rotation and
scaling, defaulting to no scaling and rotation if none is specified.
commit dd7256818becb21695487385fe5d4b7fcd33a61e
Author: Fahim Imaduddin Dalvi <dalvifahim@gmail.com>
Date: Fri Mar 18 09:19:24 2022 +0300
Implemented texture handling
The code assumes there is a single texture, and this is applied
to the single drawable geometry created for instancing. This commit
breaks texture-less object support for instancing.
commit 547e051459c91ef0abe1b9fe583f0aed59720135
Author: Fahim Imaduddin Dalvi <dalvifahim@gmail.com>
Date: Sat Feb 26 14:25:57 2022 +0300
Moved random color generation to shader
commit ab927a8555ca615d2fe51c9fc87b9fb5f6198c3f
Author: Fahim Imaduddin Dalvi <dalvifahim@gmail.com>
Date: Tue Feb 22 18:32:10 2022 +0300
Proof of Concept instancing support for scenery objects.
Previously we did not take into account the atmospheric transmittance
to render the stars, leading to stars being incorrectly rendered in
low visibility conditions.
Also place the stars in the correct render bin.
- Terrain and clouds and now rendered on the envmap, with correct aerial
perspective.
- Each face is rendered on a separate frame to help with performance.
- All faces are updated every 1.5 minutes. This can be changed through a
property.
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.
- 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.
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.
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)
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.