2019-11-19 18:34:52 +00:00
|
|
|
|
mod diffusion;
|
2019-10-16 11:39:41 +00:00
|
|
|
|
mod erosion;
|
2019-06-10 16:28:02 +00:00
|
|
|
|
mod location;
|
2020-01-13 07:10:38 +00:00
|
|
|
|
mod map;
|
2020-04-20 16:30:39 +00:00
|
|
|
|
mod util;
|
2020-07-25 11:19:13 +00:00
|
|
|
|
mod way;
|
2019-06-10 16:28:02 +00:00
|
|
|
|
|
2019-06-18 21:22:31 +00:00
|
|
|
|
// Reexports
|
2020-01-11 21:05:22 +00:00
|
|
|
|
use self::erosion::Compute;
|
2020-02-01 20:39:39 +00:00
|
|
|
|
pub use self::{
|
|
|
|
|
diffusion::diffusion,
|
|
|
|
|
erosion::{
|
|
|
|
|
do_erosion, fill_sinks, get_drainage, get_lakes, get_multi_drainage, get_multi_rec,
|
|
|
|
|
get_rivers, mrec_downhill, Alt, RiverData, RiverKind,
|
|
|
|
|
},
|
|
|
|
|
location::Location,
|
(See sharp/lod-history) LOD, shadows, greedy meshing, new lighting, perf
---
Pretty much a Veloren fork at this point. Here's a high level overview of the changes (will be added to CHANGELOG just before merge).
At a high level this MR incorporates roughly two groups of changes.
The first group consists of new game features: more flexible map sizes, level of detail terrain, shadow maps, and a new lighting
engine. This is "feature work" that (mostly) only adds new things to Veloren, and mostly shouldn't affect old stuff.
The second big group of changes are those addressing the fallout from all the new features. These include performance fixes of
various sorts: the addition of multiple graphics options and optimization of the cheap ones to avoid work, switching all voxel
models to use some variant of greedy meshing, switching over much of our CPU-side vector math to exploit SIMD instructions
(coinciding with a fork of `vek`), and a rewrite of how the UI handles text rendering (coinciding with updates to our fork
of `conrod`). Making Veloren's hardcoded colors appear correct under the new lighting engine also required considerably
changes (TODO: Fill in this section when it's complete).
The second category of changes often heavily touches code owned by other people, including frequently modified code "owned" by a
handful of people, so I recommend that this code be reviewed particularly carefully.
---
At a high level (each will be described in more detail below):
- The world map has been refactored.
- The world size is no longer hardcoded (@zesterer).
- The map generation code was made generic to allow using it outside of the `world` crate (@zesterer).
- On world creation, we now compute *horizon maps* (@zesterer).
- The way we pass the world from the server to the client has been updated (@xMAC94x).
- Artifacts related to image rotation were fixed (@imbris).
- Multiflow rivers were enabled (@zesterer).
- In the process of making changes related to the world map, various incidental fixes and optimizations were required.
- The new *level of detail* feature was added (@zesterer wrote part of this and has checked out the rest).
- A new LOD terrain rendering step was added to the pipeline.
- The LOD terrain quality was made configurable via a graphics setting.
- Horizon maps were used to cast shadows from LOD chunks on both LOD and non-LOD terrain.
- A "voxelization" effect was incorporated into rendered LOD terrain to make it blend better into the world.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Veloren's lighting has been completely overhauled (@zesterer has already checked most of this out).
- A semi-accurate index of refraction was assigned to our materials.
- A new, more realistic, physically based approach to lighting was used using the *Ashikhmin Shirley* BRDF.
- We emulate *atmospheric scattering* using equations designed for measuring solar panel light exposure.
- We attempt to compute *realistic light attenuation* in water using its real material properties.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Point and directional lights now cast realistic shadows, using *shadow mapping.* (@imbris, @zesterer, @Treeco, @YuriMomo)
- Point light shadow maps were added to the rendering pipeline, using geometry shaders and *seamless cube maps*.
- Directional light shadows were added to the rendering pipeline, using LISPSM together with disabling *depth clamping*.
- "Shadow-only" chunks and NPCs were added to prevent shadows from models behind you from disappearing.
- In the process of making changes related to shadow maps, various incidental fixes and optimizations were required.
The addition of shadow maps, LOD terrain, and the new lighting all led to significant performance degradation, on top of other
changes happening in master. Therefore, a large number of performance improvements were also needed:
- The graphics options were made much more flexible and configurable, and shaders were optimize.
- New options were provided for how to render lights and shadows (@Pfauenauge, @zesterer).
- Graphic setting storage and configuration were overhauled to make adding new features easier (@Pfauenauge, @imbris).
- Shaders were rewritten to utilize GLSL's preprocessor to avoid overhead (@zesterer, @YuriMomo).
- In the process of making changes related to providing additional rendering options, various incidental fixes and optimizations were required.
- Voxel model creation was switched to use *greedy meshing.*
- A new voxel meshing method, greedy meshing, was added (@imbris).
- Uses of the older meshing methods were migrated to use greedy meshing (@imbris, @jshipsey, @Pfauenauge).
- New restrictions were added to terrain, figure, and sprites to future proof them for further optimizations (@jshipsey, @Pfauenauge, @zesterer).
- Most positions are now relative to either chunk or player position for better precision (@imbris, @zesterer, @scottc).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- Animation and terrain math were switched to use SIMD where possible.
- Fixes were made to vek to make its SIMD feature usable for us (@zesterer, @imbris).
- The interface and types used in bone animation were changed in various ways (@jshipsey, @Snowram, @Pfauenauge).
- Redundant code generation for body animation is now partly taken care of by a macro (@jshipsey, @Snowram, @Pfauenauge).
- Animation code was modified to to use vek's SIMD representation where possible (@jshipsey, @Snowram, @Pfauenauge).
- Terrain meshing code and shadow map math were also modified to use vek's SIMD representation (@imbris).
- SIMD instruction generation was enabled (@YuriMomo, @jshipsey, @Snowram, @imbris, @Angelonfira, @xMAC94x).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- The way we cache glyphs was completely refactored, fixed, and optimized.
- Our fork of `conrod` was optimized in various ways (@imbris).
- Our fork of `conrod` now exposes whether a widget was updated during the current frame (@imbris).
- Our use of the glyph cache was rewritten for correctness (@imbris).
- A *text cache* was introduced that lets us skip remeshing glyphs that have not changed (@imbris).
- Various changes were made to reduce pressure on the glyph cache, with more planned (@imbris, @Pfauenauge).
- In the process of making changes related to the glyph cache, various incidental fixes and optimizations were required.
- Colors were changed to keep Veloren's look consistent with master.
- Some older tree models were brought back (@Pfauenauge).
- TODO(@Sharp): All hardcoded colors were extracted and made hotloadable.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Hardcoded colors were fixed to conform to Veloren's style.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Color models were fixed to conform to Veloren's style.
A detailed description of the involved changes follows.
---
- The world size is no longer hardcoded. All functions dependent on world size now take a `WorldSizeLg`, which holds the base 2 logarithm of each actual world dimension and is guaranteed to maintain certain properties (outlined in `common/src/terrain/map.rs`). Additionally, many utility functions that utilize the world size were moved into `common` as well (mostly `common/src/terrain/mod.rs`). Finally, the world map format was updated in order to store its size explicitly, with a migration path from the old format that should work whenever the old formatted map was a square (practically always). See `world/src/sim/mod.rs` for these changes.
- The map generation code was made generic to allow using it outside of the `world` crate. The parts of the map generating code that do not need to query the world were moved over to `common/src/terrain/map.rs`, allowing them to be used from the client without creating a dependency on `world`. The rest of it was turned into helper functions in `world/src/sim/map.rs`, which can be passed as closures to the generic map generation code to complete its construction. This also means that colors are now passed in separately to the map generation function. See <https://veloren.net/devblog-78/> for more details.
- On world creation, we now compute *horizon maps*. See the function in `world/src/sim/util.rs`.
Given a height map and a plane intersecting that height map, our horizon maps allow us to encode enough information to reconstruct shadows for each point on the height map using only the *horizon angle* (the angle at which the sun starts to become visible). As Veloren's sun only covers one plane, this is sufficient for encoding sun shadows for LOD terrain, by encoding two angles per chunk (one for each 90 degrees the sun covers). We can also use this for the moon, if we want, since the moon follows the same path. Additionally, we store the *height* of the furthest occluder, to try to make the shadows volumetric; so this means 4 bytes in total for each chunk.
Support for horizon maps has been merged into the map functionality in common as well.
- The way we pass the world from the server to the client has been updated. Rather than passing the prerendered map, we instead pass three maps with values for each chunk; one with the color information, a second with altitude information, and a third with horizon map information. We then reconstruct the map on the client, together with some additional information we send from the server (like the sea level and maximum height). See `common/src/msg/server.rs` for a detailed description of the format of `WorldMapMsg`, and `server/src/libr.rs` and `client/src/lib.rs` for details of the map construction and parsing.
- Artifacts related to image rotation were fixed. See the commit message for commit SHA `cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e` for a detailed explanation. This involved changes to shaders, the addition of a new type of graphic (also reflected in the graphic cache) that allows specifying a border color (which automatically makes the associated texture immutable), and some related fixes. I reproduce the first two paragraphs of the MR description as well:
```
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
```
- Multiflow rivers were enabled.
This does not really need to be part of this MR, and would be easy to revert, but since it seemed to provide a nice improvement it's currently packaged with it.
We already computed multiple outflows from each chunk for erosion purposes long before this MR.
However, we never modified river rendering to be able to handle this case (just a single downhill river flow is complex enough!) so this was not exposed when deciding which chunks were rivers.
Now that
- In the process of making changes related to the world map, various incidental fixes and optimizations were required. Some examples of fixes include making sure terrain is never lowered to below sea level (to make the shadow maps report correct values), fixing map altitudes and colors to understand things like cliffs and "block level" coloring (that doesn'te xist on the column level), and fixing a crashbug when rendering images for the UI where source pixels are strongly rectangular. Some examples of related performance fixes include avoiding allocating a fresh vector for all the maps (i.e. copying it over to change the format from `[u32; n]` to `DynamicImage` and then copying again to convert to `RgbaImage`), and instead using the `gfx::memory::slice` function to accomplish the same thing. These sorts of changes are spread all arond the code.
This includes the additon of a new scene, `voxygen/src/scene/lod.rs`, a new pipeline `voxygen/src/render/pipeline/lod_terrain.rs`, and new shaders `assets/vxygen/shaders/lod-terrain-vert.glsl` and `assets/vxygen/shaders/lod-terrain-frag.glsl`, as well as associated changes to the renderer in `voxygen/src/render/renderer.rs`.
The main idea behind our initial approach to LOD was to take the world data we now get from the server (altitude, color, and horizon mapping).
- Some previously computed values were turned into shader uniforms for better prediction on weak processors. (@zesterer)
- Calls to power or trig functions were removed or replaced with multiplications, where possible.
- After some deliberation
- To properly handle sprite "waving" for nearby sprites,
We explicitly designed the greedy meshing system with figures and sprites in mind.
In both cases, we want to be able to *efficiently* pack many different models into the same texture, especially in cases where we know
we will either not be removing any of the grouped-together from the models from the texture, or will remove all of them at once (so
they can be packed into some specific subtexture).
For sprites, since we know every model in advance and never intend to deallocate them, we currently pack them all as efficiently as
possible into one giant tetxure atlas. However, in the future we might opt to pack them slightly less efficiently in exchange for
shrinking the sprite vertex size.
For figures, we pack all the textures for each *model* into the same atlas.
is a global texture atlas used for every sprite, and for figures which is why we have the ability to mesh multiple
models to the same texture area (using the simple texture atlas allocator) without requiring intermediate vector allocations.
This is accomplished by delaying the time when we actually write the color and light data to the texture until *after* all the
model vertices have been meshed; then, we can just allocate the whole color/light array at once, making the atlas we use an
exact fit. In computer science-y terms, we accomplish this delay by, after we perform the initial greedy meshing (without
texture information), not continuing to create the texture data, but instead constructing a *continuation*--that is, a function
that, when called, will execute the rest of the computation. We push this continuation (which in Rust terms is a `FnOnce` closure
that takes the `ColLightsInfo` that it is supposed to write to as context) onto a
onto a vector
resizing. To allow for suspended writes to texture data, Rust pointed out to me that the continuation that would eventually write the color and light data to the texture atlas (the one that is shared by all models sharing the same greedy mesher) would have to *own* whatever data it mshed. Because we often generate the model data to mesh as a temporary in `voxygen/src/load.rs`, the
- Matrix multiplications in the shader were reduced for figure data (@zesterer).
- Vertex "waves" for fluid data were removed.
- Terrain "bending" near edges was removed.
- Scaling was fixed to make sure empty space was not introduced in a space previously occupied by a block. It was also changed to take ownership of its voxel data,
rather than sharing it, to let it be used with meshing.
- Rust's nightly version was bumped in order to use the `array_map` function, which lets us reuse more code between the simple map and `FigureModelCache`.
- PositionedGlyph::standalone.
---
I tried to cite sources in many cases[^realtime],[^lloyd],[^lispsm],[^pbrt],[^greedy],[^tjunctions]
where I needed features from elsewhere but I am particularly grateful for the following resources,
esepcially where they have accompanying source code. I linked all of them that are accessible to the public (those that are not were
obtained through legal means).
[^realtime]: Eisemann, Elmar, Michael Schwarz, Ulf Assarsson, Michael Wimmer. Real-Time Shadows. A K Peters/CRC Press (T&F), 20160419.
[^lloyd]: Lloyd,B. 2007. [Logarithmic perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). PhD thesis, University of North Carolina.
[^lispsm]: Wimmer, M., Scherzer, D., and Purgathofer, W. 2004. [Light space perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). In Proceedings of Eurographics Symposium on Rendering 2004, pp. 143– 152.
[^pbrt]: Pharr, Matt, et al. [http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf](Physically Based Rendering: From Theory to Implementation). Third edition, Morgan Kaufmann Publishers/Elsevier, 2017.
[^greedy]: mikolalysenko. “Meshing in a Minecraft Game.” 0 FPS, 30 June 2012, <https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/>.
[^tjunctions]: blackflux. “Meshing in Voxel Engines – Part 1.” Blackflux.Com, 23 Feb. 2014, <https://blackflux.wordpress.com/2014/02/23/meshing-in-voxel-engines-part-1/>.
I am also especially grateful to Khronos, Wikiepdia, and stackoverflow for answering many of my specific questions while writing the MR.
---
Squashed commit of the following:
commit 300505e7305a2fdac722a808ee8538323f215f39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 18:46:25 2020 +0200
Fixing cargo doc and typo in CHANGELOG.
commit ec0aeb18e8499d7d84ef818331b4b65c3d76cea6
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 15:38:50 2020 +0200
Hopefully final commit for the LOD branch.
commit 5e8ea0b1eaac02903a02feb2eb038d195de4872f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 10:14:26 2020 +0200
Falling back to power as stopgap.
commit e44a1cbf46504ee9931a01bdc9033e145500d557
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 09:25:41 2020 +0200
Address imbris feedback.
Temporarily disables shiny water, lowers max VD.
These restrictions will be lifted soon after merging.
commit 561e25778a108ac3712f5ec2ce3a51234c4430d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 08:31:13 2020 +0200
Tweaking shaders a bit.
commit 7d19259078ce0dd7b3742ad7d0cb3fab3ece3fdc
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:59:43 2020 +0200
Fix view example as well.
commit 051cd4934e0fad2c0b15db4380a4189fa318679f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:29:06 2020 +0200
Fix meshing benchmark.
commit c95e07db3b4dcca285678985e65e31b927cb1c61
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 05:46:22 2020 +0200
Address MR feedback, fix scene clouds.
commit 1bfb816cabdb3ffc1e507a009c2d98696b4b573a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:39:36 2020 +0200
Incorporating Pfau's figure color changes.
New eyes and new humanoid colors.
commit 3f9b89a3ac7b3356b1dba0d1a8f6541357f81469
Merge: e2f5162e4 62c53963a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:29:41 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit e2f5162e4f96f4124aa43488f7245d341b3dcfd4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:28:38 2020 +0200
World colors are all hotloadable.
They live in assets/world/style/colors.ron.
Only a small handful of hardcoed colors remain in World; they are either
part of the map, or difficult to disentangle from the rest of the
computation. Comments are made where appropriate.
commit 62c53963abe1975009d34a8f9515a355bef24f31
Author: Marcel Märtens <marcel.cochem@googlemail.com>
Date: Wed Aug 19 15:59:00 2020 +0200
replace pretty_env_logger with tracing
commit 5b1625f99d9586fe80e2232f583ec5af9f953099
Merge: d71003acd 4942b5b39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:15:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit d71003acdabeff970b3928e97c26af6847b5b78e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:14:34 2020 +0200
Hotloading colors, part 1: colors in common.
Currently, this just entails humanoid colors. There are only three
colors not handled; the light emitter colors in
common/src/comp/inventory/item/tool.rs. These don't seem important
enough to me to warrant making hotloadable, at least not right now, but
if it's needed later we can always add them to the file.
commit 63b5e0e553eb2ea49276f192a6fc7dd65254270d
Merge: c32b337a4 6d2c4b9c1
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 13:05:37 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c32b337a46e10d9de473d178a94a3ccd61c39bb3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:52:04 2020 +0200
Fixing LOD grid, for real.
commit a166ae0360395387e09fb35a1f84210c2ce5ec24
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:28:05 2020 +0200
Addressing imbris's initial feedback.
Fixes two minor bugs: explosion particles were no longer spawning
randomly, and LOD grids were not perfectly even.
commit 4cbad004f44060994252dd3d38647a14a589712f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:27:58 2020 +0200
Bumping nightly per request.
commit 548680276aac77c25d43d16b5622f847d474dbef
Merge: acc098604 8f8b20c91
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:26:06 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit acc0986040589a3492f88a740bc3c3fc693b26d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:28:32 2020 +0200
Lower resolution due to lying drivers.
commit d3b878de2a52c358d2944a6bbd0555dad7fbdb10
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:15:38 2020 +0200
Fix issues msh encountered with Intel 4600.
commit 10245e0c1b0cb6fae10d86409435364edc6102ef
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 21:15:02 2020 +0200
Merge more models into one mesh than we did previously.
commit 3155c31e663c52ae5c3a53d5fb5665892a1a498a
Merge: 7204cc8a7 3c199280e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:35:22 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7204cc8a7a4f74a30306bd205d9834fee4bb944f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:34:43 2020 +0200
Fix not yet done NPC animations.
This forces them all to be the idle animation if not specified.
This fixes issues where you'd have giant NPCs in water.
commit bc83360f2a08918f19d417b5f772e1ff554dba08
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 19:36:37 2020 +0200
Try to fix some bugs:
- Z fighting with LOD terrain and water.
- Audio SFX not playing.
commit 1fd104aa603bf3781b6526a5cada46aeca3049dd
Merge: 862df3c99 7c2c392a3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 12:02:31 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 862df3c9976c4da9bd7cfd784f1a85973127968a
Merge: 0a4218ed9 75c1d4401
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 05:52:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0a4218ed9d541a2b34c133351bea38a99ddf4ea7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 22:27:14 2020 +0200
Fix particle depth.
commit f51dfdeb442d0dd5243dd2f344fa4be295bd0875
Merge: c6251a956 5e6dc0471
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:19:04 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit c6251a956ad376400dca5c23420cf8d213dc8fdf
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:15:46 2020 +0200
Cache figures more intelligently.
Cache figures for longer, and don't cache character states for the
player except where they actually affect the rendered model.
commit 0ed801d5404982c6fb63b1eaa4567d908b294c9d
Merge: c11b9bdf0 eea64f78f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 16:32:24 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c11b9bdf0a53bf9884d2f5a48fec9b01d582df1a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 11:47:15 2020 +0200
Remove unneeded Clippy annotation.
commit 16aa9ef40af56d69289d00aafb3deadfb8bd4f35
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 8 00:53:02 2020 +0200
Fix hotloading and Clippy.
commit 3dc973e0be5b758da1e9805eb764ad401374cd0c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 23:50:27 2020 +0200
Major speedups with SIMD.
commit fba64a7d93d5a96077ce87287bbce6ab9b7fbcae
Merge: 76429d00e d1e10b178
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:19 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 76429d00eea00d212fbd672a84ee91e75b19b938
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:10 2020 +0200
Add clippy.toml.
commit c79f512f84dbb83cb82b7954db68ff241dfd8e41
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 11:55:20 2020 +0200
Fix all clippy issues, clean up Rust code.
commit 6f90e010b3fbefb53b0d632e819931350015b6b8
Merge: 77a8c7c26 5929cfa5c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:30 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 77a8c7c267d3f44a1a62bd6b2274359973c5e4d4
Merge: b44e44232 44febaabd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:10 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 5929cfa5c713aa392110bbb62407f76caf53c3df
Author: jshipsey <jshipsey18@gmail.com>
Date: Thu Aug 6 20:47:27 2020 -0400
fixed in-hand arrow bug
commit b44e442325d828f1cd564d66908f89d09e80474b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 6 13:40:35 2020 +0200
Miscellaneous performance improvements.
commit be37acf287c1360d8085862526ac3365ffd1d768
Merge: 125d7fc6c c11876547
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 05:49:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 125d7fc6c4dcd8c8c5f27b8268a4d64f409f3644
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 04:55:31 2020 +0200
Abstract over simd vs. repr_c vectors.
Also some minor improvements to Event size.
commit d4d4956e9252e1241ce110b2aa85076c6b1e2a23
Merge: 5f3b7294a aced5f979
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:56:54 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 5f3b7294af1f8533edc2620b58863c248e2b07af
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:43:52 2020 +0200
Fix formatting issues I missed before.
commit a428a3ebba70dcab63dd0f8cd983120c90617271
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:41:51 2020 +0200
Fix clippy warnings, part 1.
There aer still a bunch of type too complex and
function takes too many arguments warnings that I'll fix later
(or ignore, since in the one case I did fix a function takes too
many arguments warning I think it made the code *less* readable).
commit ba54307540ed8a937ac08209730284fc653af85b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 30 13:22:42 2020 +0200
Fix light animations so they are removed when the light turns off.
commit 7e0f4bcbf0f4717145d8beac40d52e3acebbe2aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 21:10:20 2020 +0200
Fix crash in edge case for pixel art.
commit 56da06f7a351e2b949e9b014a90b974d511a0924
Merge: cf74d55f2 9f53a4a19
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:56:52 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:29:52 2020 +0200
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
The first concern was addressed by fixing the dimensions of the map
images drawn from the UI (so that we always use a square source
rectangle, rather than a rectangular one according to the dimensions of
the map). We also fixed the way rotation was done in the fragment
shader for north-facing sources to make it properly handle aspect ratio
(this was already done for north-facing targets). Together, these fix
rendering issues peculiar to rectangular maps.
The second and third concerns were jointly addressed by adding an
optional border color to every 2D image drawn by the UI. This turns
out not to waste extra space even though we hold a full f32 color
(to avoid an extra dependency on gfx's PackedColor), since voxel
images already take up more space than Optiion<[f32; 4]> requires.
This is then implemented automatically using the "border color"
wrapping method in the attached sampler.
Since this is implemented in graphics hardware, it only works (at
least naively) if the actual image bounds match the texture bounds.
Therefore, we altered the way the graphics cache stores images
with a border color to guarantee that they are always in their own
texture, whose size exactly matches their extent. Since the easiest
currently exposed way to set a border color is to do so for an
immutable texture, we went a bit further and added a new "immutable"
texture storage type used for these cases; currently, it is always
and automatically used only when there is a specified border color,
but in theory there's no reason we couldn't provide immutable-only
images that use the default wrapping mdoe (though clamp to border
is admittedly not a great default).
To fix the maps case specifically, we set the border color to a
translucent version of the ocean border color. This may need
tweaking going forward, which shouldn't be hard.
As part of this process, we had to modify graphics replacement to
make sure immutable images are *removed* when invalidated, rather
than just having a validity flag unset (this is normally done by
the UI to try to reuse allocations in place if images are updated
in benign ways, since the texture atlases used for Ui do not
support deallocation; currently this is only used for item images,
so there should be no overlap with immutable image replacement,
so this was purely precautionary).
Since we were already touching the relevant code, we also updated
the image dependency to a newer version that provides more ways
to avoid allocations, and made a few other changes that should
hopefully eliminate redundant most of the intermediate buffer
allocations we were performing for what should be zero-cost
conversions. This may slightly improve performance in some
cases.
commit ad18ce939940a8c697270f6e9b94db9942fd8295
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 13:21:09 2020 +0200
Fix continent scale hack.
commit 36b1cb074f5b195aebd7dbbc3da7f0246a1a18ec
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 12:11:40 2020 +0200
Enable loading different sized maps without a recompile.
We may want to tweak the effects of the continent_scale_hack.
commit 13b6d4d534cc4814b7cb3294ca41bbfea0a6b186
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 10:55:48 2020 +0200
Removing WORLD_SIZE, part 1.
Erased almost every instance of WORLD_SIZE and replaced it with a local
power of two, map_size_lg (which respects certain invariants; see
common/src/terrain/map.rs for more details about MapSizeLg). This also
means we can avoid a dependency on the world crate from client, as
desired.
Now that the rest of the code is not expecting a fixed WORLD_SIZE, the
next step is to arrange for maps to store their world size, and to use
that world size as a basis prior to loading the map (as well, probably,
as prior to configuring some of the noise functions).
commit 30b1d2c6428230a9eaa0d749cdcbbd6f1cbccd78
Merge: 7d56ba31b 1377b369f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:58 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 7d56ba31b445441461b28a07fc495d7d4f047c17
Merge: 2101113b4 598f14b25
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 1377b369f6db2258e910d467a5740f31789e3ded
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sun Jul 19 23:25:38 2020 +0200
more saturated pumpkins
commit ae8d50527f93bb0616c2ad46ce4dacb63bc37c6d
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sat Jul 18 20:29:56 2020 +0200
acacia models
commit 2101113b467e691de787392d7f20f1745f5637bd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 18 18:55:25 2020 +0200
Higher detail LOD.
commit add2cfae04b4385fa5590e11e2bd5229d9dee0aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 16 01:57:39 2020 +0200
Revert some irrelevant stuff.
commit 2e2ab3dc1eaa59a4aef7f8d34a53d8aae4c8553a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 15 13:30:49 2020 +0200
Fixing various things about shadows.
* Correcting optimal LISPSM parameter.
* Figure shadows are cast when they're not visible.
* Chunk shadows stay cast until you look away.
* Seamless cubemaps for point lights.
* Etc.
commit 6c31e6b56217274285b597af297036691ea5d897
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 19:50:26 2020 +0200
Fix shadow creation.
commit 6332cbe006115ae205597529cd8bbccd146c2cca
Merge: be438657c 930e0028b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:47:00 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit be438657c33d7b5bfb0a9582c3ed3fd366637323
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:28:08 2020 +0200
Tweaks to shadows.
Added shadow map resolution configuration, added seamless cubemaps,
documented all existing rendering options, and fixed a few Clippy
errors.
commit 23b4058906013c7d2a40c286e20e32c5fbd897ed
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 10:11:19 2020 +0200
Fix moon, use nonlinear noise for terrain.
Note that the latter has a bit of performance cost.
commit 7fbe5cbfbb9dc29607957b8e62f432a4deed193d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:23:02 2020 +0200
Address lies about max texture size.
commit bcfc62b5e13a1cdd83f57535fde4694720bebfd9
Merge: 75e3626a7 18a08e8fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:22:08 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 75e3626a785919f43fdcf2127c2b10e3e4df2f9f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:21:52 2020 +0200
OpenGL 3.3 minimum.
commit 18a08e8fe2739f02af99a5d2cb4e7c38c49e858b
Author: Monty Marz <m.marzouq@gmx.de>
Date: Tue Jul 7 23:57:52 2020 +0200
settings localization
commit 90c5d1ca3620092bc3ae10b2211489eb1cf6f5e8
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 21:11:48 2020 +0200
Lower near distance.
commit 0e66f02b25aaddaa2dfddbbc89cd67de54a9a7b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 20:09:01 2020 +0200
All sprites sway in the wind now.
commit db1401a6910bf42dcf502462c90038752ff5fbdb
Merge: 69e508d8c e8b4b29d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 19:34:17 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 69e508d8c94d8973033817ca86f357e466fc7c4d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 18:41:37 2020 +0200
Make it easy to switch to SIMD for math.
commit ffe0f5928c7a7e87d00cb5426b3b1d831d7e02fd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 21:21:12 2020 +0200
Fix some issues with underwater rendering.
commit bfda6da42f38fd02c31ee92c81ab785a3e50c2a0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 19:17:59 2020 +0200
Fix some minor display issues.
commit 0ed752e087968cf901301884aaeae698e32ef8a5
Merge: ccc6a06a8 518edcb85
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:14:21 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit ccc6a06a8d4504d6b9f7af7905a414d2ee06ab76
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:04:34 2020 +0200
Some minor changes.
commit 4e020246702889269efe1a191788992164c508d6
Merge: 50a64d927 e05c9267a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 16:17:40 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 50a64d927e6c4f4b0e4688e4cbfca694bc3f922a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 13:07:03 2020 +0200
Fix far plane.
commit 7dd06da34cae8f9ea3b6c889fe965181f3fd3949
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:25:35 2020 +0200
Add shadows.glsl.
commit 618a18c998778bf871b905a74657440fcc384c80
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:10:22 2020 +0200
Adding shadows, greedy meshing, and more.
commit eaea83fe6a5cb1cb0ba8beef888183c718258496
Merge: 267018495 2f89b863e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 22:47:07 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 2670184954a13e4a9e7a4e35ba79aac0c5fac2f7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 21:20:01 2020 +0200
Make civsim and sites deterministic.
For anything in worldgen where you use a HashMap, *please* think
carefully about which hasher you are going to use! This is
especially true if (for some reason) you are depending on hashmap
iteration order remaining stable for some aspect of worldgen.
commit f8376fd5dc72b4a9c2f51a6b4570d59c8b8e9343
Merge: 654f7e049 cdee191dd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 17:53:57 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 654f7e049258d9da27c09608bbe6a46ffa8787e5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed May 20 21:22:30 2020 +0200
Correct backface culling.
commit 560501df05ca725409b0f2e4eb31bdfdc15fd0c7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue May 19 17:22:06 2020 +0200
Greedy messhing for shadows.
commit a4d87e1875ca543436e6bbbeb20348facc5a52d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun May 17 05:59:00 2020 +0200
Shadow maps work for lantern.
commit 243d0837b8a3b08172c9a3c348d964d7ddc2a0a8
Merge: 04382dc28 71dd520cd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:53:13 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 04382dc28632b6c66e8821f6870c0daaa1c1901a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:22:17 2020 +0200
WIP: better graphics config, better LOD, shadow maps.
commit 22ddbad3eb32bfa70f0932176022208fe67ded81
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 18:54:09 2020 +0200
Minor shader fixes.
commit 746a10e8d01ac235f994b0cde78fa48998602a1f
Merge: 0f4a0e763 40ab94673
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 04:02:09 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0f4a0e763db3afbdc4fb0558611f38326ca87151
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 23:03:24 2020 +0200
Switch back to pop-in terrain.
commit dd74fa7e4a53667b38811d7aec58d7f6a68889bb
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 22:58:55 2020 +0200
LOD shading closer to voxel shading.
commit ef67bd58ba0bdaf622b078892d768263b6cba268
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 28 20:49:03 2020 +0200
Experimental underwater lighting.
commit 2c5ad9d07605e80d5fd5679dd3a5d70c605b86a9
Merge: 748279835 303967a6f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 22:35:24 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7482798354eda18c8207950080fc24d443a369de
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 21:59:55 2020 +0200
Replace discard in figure-frag.
commit d83b4ae69be4912f69bf7835f509c68a1c7770a4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:45:57 2020 +0200
Fix sprite lighting, HDR from focus_pos.
commit 0594238004f116274905fa0ed7c2b6c417ed1d29
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:14:10 2020 +0200
Proper HDR from point lights.
commit 48c93d2b41ce5743103d18e76cc228f5ac766492
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 14:01:43 2020 +0200
Brighter ambiance, darker LOD shadows.
commit e0452e895ccfa8a43f368cae3b8b8aedc24dad93
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 13:13:23 2020 +0200
More proper HDR.
commit 4c6da3ed16cfeebb455e40da5f557b4af9a499d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 00:13:10 2020 +0200
Trying LOD noise.
commit 682a3d74c85df5503ffe1fc1cc891bce789df1ad
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 23:11:08 2020 +0200
Fix LOD heights in towns.
commit cc39e5734e8b18f9077bf42e66337c1319dd6b6e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 21:01:23 2020 +0200
More LOD fixes.
commit 8116b21c2e51c836e77894e309ac273caf2917b3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:54:43 2020 +0200
I like this coloring.
commit bc2560ea90b36f4b46190005344232d993043ac3
Merge: 14effdd5d e690efe71
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:48:33 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 14effdd5db8747fcf3eb34f03b46b7792e92d1c5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:24:35 2020 +0200
Re-saturate.
commit 48a643955d4435b78179acba0beb4a979905cc31
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:23:57 2020 +0200
Various fixes.
commit f7b497a0c25f4ad4682c71dd1ed6f608052feb9b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 03:22:49 2020 +0200
Render figures again.
commit 44e4aad48deba8266b9f8bdfd3db096b381f5327
Merge: e6f0a5a98 9ec319a18
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 02:01:04 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit e6f0a5a981a82533ba188fff0a54ce98577bb152
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 24 16:12:20 2020 +0200
Add atmospheric scattering.
commit f2953087f691a8edbc001cb98ebf5059fc6f8ac0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 23 00:01:20 2020 +0200
Fix shadowing for specular reflections.
commit ddd4a67a9799b8d08c7dc0c2bec90621c2bed0e3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Apr 22 22:56:12 2020 +0200
HDR fixes.
commit 1015e60deef3c447381996277df7496707a63bd0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 21 18:25:19 2020 +0200
More lighting changes.
commit 80c264abd111fb237e57843efcb5c071d4f84613
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 13 00:29:59 2020 +0200
Lighting experiments.
commit 8414987e589dd5102bad89762a3adaccc0bfe957
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 9 02:38:40 2020 +0200
WIP -- lighting changes and soft shadows.
commit 9cd2b3fb0d6b49776c6dfe463e4169637250b11a
Merge: c7ea687eb 8b149ad11
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:29 2020 +0200
Merge branch 'sharp/new-lighting' into sharp/small-fixes
commit c7ea687ebbc5aace1b455f134a5bf49ce2c7434a
Merge: 476441531 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:02 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 8b149ad11ad4bb75018fcf9519baec27d1c95951
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:32:39 2020 +0200
Trying out a new lighting model.
commit b0ac9f36f755dd06f7c17c46150568064790864f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 07:56:11 2020 +0200
Use bicubic interpolation for terrain.
commit f6fc9307a121514b614bc50ef8eb055953e7da8a
Merge: 33140a295 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 05:01:41 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 4764415312aae6e9ac2d00e86e84577cb958f1ab
Merge: ed2d0111d 13388ee6a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 04:54:48 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 13388ee6a42943f3f79a9cb488346cef18e272fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 20:30:08 2020 +0200
Various fixes (to coloring and to soft shadows).
commit fbd084a94a067082a87cd6d28b82054709bc9265
Merge: 5a089863b 4fdf6896a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 18:50:38 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/map-colors
commit ed2d0111d994262ae836d84d1fe5a45e4de72a0b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 06:49:27 2020 +0200
Combining colors and LOD.
commit 88342640c6b835114d01c797b89fdede3b0a2108
Merge: 33140a295 5a089863b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:49:20 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 33140a2951b8212725f42c758b277aaec4d888f7
Merge: 4c65a5aed f34d4b379
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:36:21 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 5a089863beb01d4794bbe3580ada47b278715ea2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 03:17:49 2020 +0200
Making maps brighter.
This is probably not the right way to do it, but oh well!
commit 32b2c99109dd486aa922886081068f9c550c83f2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 02:46:36 2020 +0200
Horizon mapping and "layered" map generation.
Horizon mapping is a method of shadow mapping specific to height maps.
It can handle any angle between 0 and 90 degrees from the ground, as
long as know the horizontal direction in advance, by remembering only a
single angle (the "horizon angle" of the shadow map). More is explained
in common/src/msg/server.rs. We also remember the approximate height of
the largest occluder, to try to be able to generate soft shadows and
create a vertical position where the shadows can't go higher.
Additionally, map generation has been reworked. Instead of computing
everything from explicit samples, we pass in sampling functions that
return exactly what the map generator needs. This allows us to cleanly
separate the way we sample things like altitudes and colors from the map
generation process. We exploit this to generate maps *partially* on the
server (with colors and rivers, but not shading). We can then send the
partially completed map to the client, which can combine it with shadow
information to generate the final map. This is useful for two reasons:
first, it makes sure the client can apply shadow information by itself,
and second, it lets us pass the unshaded map for use with level of
detail functionality.
For similar reasons, river generation is split
out into its own layer, but for now we opt to still generate rivers on
the server (since the river wire format is more complicated to compress
and may require some extra work to make sure we have enough precision to
draw rivers well enough for LoD).
Finally, the mostly ad-hoc lighting we were performing has been (mostly)
replaced with explicit Phong reflection shading (including specular
highlights). Regularizing this seems useful and helps clarify the
"meaning" of the various light intensities, and helps us keep a more
physically plausible basis. However, its interaction with soft shadows
is still imperfect, and it's not yet clear to me what we need to do to
turn this into something useful for LoD.
commit f8926a5737ddc51f3d585c651a64c43677aae0f4
Merge: a1aee931e 875ae6ced
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Mar 13 13:32:42 2020 +0100
Merge remote-tracking branch 'origin/master' into sharp/map-colors
commit 4c65a5aed353b119aea65a2aaeb94549b67beb42
Author: Treeco <5021038-Treeco@users.noreply.gitlab.com>
Date: Mon Feb 24 16:48:05 2020 +0000
Made LOD setting slider exponential
commit 2fa7b2d20d7233dc8bfd64f9f7f54617575248f1
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 17:49:53 2020 +0000
Added mist to LoD
commit aab059a450b5f635777129ff82cc15b662965c3c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 15:14:06 2020 +0000
Added LoD slider
commit 779c36b538121c5ade3633ae5cb67bb14c8c3877
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:54:55 2020 +0000
Reduced cost of vertex pushing
commit 9fea150473906b166365b738ebcea07c697daf3d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:38:53 2020 +0000
Fixed maths, improved LoD resolution
commit 5481df38fea5bf183ff376a3337179cfaa5233dc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 11:22:50 2020 +0000
Dynamically relocate LoD vertices to enhance details
commit a3e36a50ababd615da7db1b26158c7906a5def01
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 18:13:51 2020 +0000
Simpler terrain spiral rendering
commit 255f450ae9ac8763db4bede075fb409161ed57cc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:53:17 2020 +0000
Better LoD precision
commit 3d027aebe812a5b8658a4eb8123dc9f61b3776d2
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:04:03 2020 +0000
Better falloff
commit be775c9484b457b2c0b1a494aec03392d0c70e76
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 15:30:45 2020 +0000
Applied good ideas from experimental branch
commit 58587b68545a23c5c04ab4574a4b94b3bc982246
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 16:15:13 2020 +0000
Minor fixes to LoD merging
commit 7b42aebd709c14df2db766aad61d9280ad24d84d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 15:04:44 2020 +0000
Capped LoD dragging
commit 8aafc559f87124e1ea5ca6e3ddc2aa0c242d793c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:54:37 2020 +0000
Better blending between LoD and terrain border
commit edd3455d5161792d87ddc8eadc0ecbad5532b284
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:40:19 2020 +0000
Fixed LoD z depth, added sea level offset
commit b9b06744620114dd5556e73f64fa93c145503a7c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:27:43 2020 +0000
Better LoD smoothing
commit a1aee931e790431560cd2d953ad61d9497072afd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Feb 21 14:52:17 2020 +0100
Adding shadows.
commit 2400786c13dd891c131ed86d48d05df516a8a778
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 13:48:40 2020 +0000
Use world map as LoD source
commit dbf650f504a4c25fbbc2096ac3616c736bf52d23
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Jan 20 00:48:14 2020 +0000
Better clouds at distance
commit 5e6f81b86cdb9730b9b056877b19257075fd5fa8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Jan 19 23:59:02 2020 +0000
sync
commit 745e7540ddb000cc645f612767b337c2ddc3f7c0
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 12:40:48 2019 +0000
Improved cloud falloff mist, faster noise sampling
commit f6a200d0cb866196ba57697466755f9e0c7ea5d8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 10:09:00 2019 +0000
Improved long-range depth precision, removed unnecessary LoD polygons
commit 63d1b2bb2292898d59fb4f4e502201103dfeb86f
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 20:57:46 2019 +0000
Working LoD shader
commit f13d98ee3e58f881e8b978861a67663b59ed91ec
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 11:03:40 2019 +0000
LoD first attempt (stack overflow issue)
2020-08-20 18:34:59 +00:00
|
|
|
|
map::{sample_pos, sample_wpos},
|
2020-02-01 20:39:39 +00:00
|
|
|
|
util::{
|
(See sharp/lod-history) LOD, shadows, greedy meshing, new lighting, perf
---
Pretty much a Veloren fork at this point. Here's a high level overview of the changes (will be added to CHANGELOG just before merge).
At a high level this MR incorporates roughly two groups of changes.
The first group consists of new game features: more flexible map sizes, level of detail terrain, shadow maps, and a new lighting
engine. This is "feature work" that (mostly) only adds new things to Veloren, and mostly shouldn't affect old stuff.
The second big group of changes are those addressing the fallout from all the new features. These include performance fixes of
various sorts: the addition of multiple graphics options and optimization of the cheap ones to avoid work, switching all voxel
models to use some variant of greedy meshing, switching over much of our CPU-side vector math to exploit SIMD instructions
(coinciding with a fork of `vek`), and a rewrite of how the UI handles text rendering (coinciding with updates to our fork
of `conrod`). Making Veloren's hardcoded colors appear correct under the new lighting engine also required considerably
changes (TODO: Fill in this section when it's complete).
The second category of changes often heavily touches code owned by other people, including frequently modified code "owned" by a
handful of people, so I recommend that this code be reviewed particularly carefully.
---
At a high level (each will be described in more detail below):
- The world map has been refactored.
- The world size is no longer hardcoded (@zesterer).
- The map generation code was made generic to allow using it outside of the `world` crate (@zesterer).
- On world creation, we now compute *horizon maps* (@zesterer).
- The way we pass the world from the server to the client has been updated (@xMAC94x).
- Artifacts related to image rotation were fixed (@imbris).
- Multiflow rivers were enabled (@zesterer).
- In the process of making changes related to the world map, various incidental fixes and optimizations were required.
- The new *level of detail* feature was added (@zesterer wrote part of this and has checked out the rest).
- A new LOD terrain rendering step was added to the pipeline.
- The LOD terrain quality was made configurable via a graphics setting.
- Horizon maps were used to cast shadows from LOD chunks on both LOD and non-LOD terrain.
- A "voxelization" effect was incorporated into rendered LOD terrain to make it blend better into the world.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Veloren's lighting has been completely overhauled (@zesterer has already checked most of this out).
- A semi-accurate index of refraction was assigned to our materials.
- A new, more realistic, physically based approach to lighting was used using the *Ashikhmin Shirley* BRDF.
- We emulate *atmospheric scattering* using equations designed for measuring solar panel light exposure.
- We attempt to compute *realistic light attenuation* in water using its real material properties.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Point and directional lights now cast realistic shadows, using *shadow mapping.* (@imbris, @zesterer, @Treeco, @YuriMomo)
- Point light shadow maps were added to the rendering pipeline, using geometry shaders and *seamless cube maps*.
- Directional light shadows were added to the rendering pipeline, using LISPSM together with disabling *depth clamping*.
- "Shadow-only" chunks and NPCs were added to prevent shadows from models behind you from disappearing.
- In the process of making changes related to shadow maps, various incidental fixes and optimizations were required.
The addition of shadow maps, LOD terrain, and the new lighting all led to significant performance degradation, on top of other
changes happening in master. Therefore, a large number of performance improvements were also needed:
- The graphics options were made much more flexible and configurable, and shaders were optimize.
- New options were provided for how to render lights and shadows (@Pfauenauge, @zesterer).
- Graphic setting storage and configuration were overhauled to make adding new features easier (@Pfauenauge, @imbris).
- Shaders were rewritten to utilize GLSL's preprocessor to avoid overhead (@zesterer, @YuriMomo).
- In the process of making changes related to providing additional rendering options, various incidental fixes and optimizations were required.
- Voxel model creation was switched to use *greedy meshing.*
- A new voxel meshing method, greedy meshing, was added (@imbris).
- Uses of the older meshing methods were migrated to use greedy meshing (@imbris, @jshipsey, @Pfauenauge).
- New restrictions were added to terrain, figure, and sprites to future proof them for further optimizations (@jshipsey, @Pfauenauge, @zesterer).
- Most positions are now relative to either chunk or player position for better precision (@imbris, @zesterer, @scottc).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- Animation and terrain math were switched to use SIMD where possible.
- Fixes were made to vek to make its SIMD feature usable for us (@zesterer, @imbris).
- The interface and types used in bone animation were changed in various ways (@jshipsey, @Snowram, @Pfauenauge).
- Redundant code generation for body animation is now partly taken care of by a macro (@jshipsey, @Snowram, @Pfauenauge).
- Animation code was modified to to use vek's SIMD representation where possible (@jshipsey, @Snowram, @Pfauenauge).
- Terrain meshing code and shadow map math were also modified to use vek's SIMD representation (@imbris).
- SIMD instruction generation was enabled (@YuriMomo, @jshipsey, @Snowram, @imbris, @Angelonfira, @xMAC94x).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- The way we cache glyphs was completely refactored, fixed, and optimized.
- Our fork of `conrod` was optimized in various ways (@imbris).
- Our fork of `conrod` now exposes whether a widget was updated during the current frame (@imbris).
- Our use of the glyph cache was rewritten for correctness (@imbris).
- A *text cache* was introduced that lets us skip remeshing glyphs that have not changed (@imbris).
- Various changes were made to reduce pressure on the glyph cache, with more planned (@imbris, @Pfauenauge).
- In the process of making changes related to the glyph cache, various incidental fixes and optimizations were required.
- Colors were changed to keep Veloren's look consistent with master.
- Some older tree models were brought back (@Pfauenauge).
- TODO(@Sharp): All hardcoded colors were extracted and made hotloadable.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Hardcoded colors were fixed to conform to Veloren's style.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Color models were fixed to conform to Veloren's style.
A detailed description of the involved changes follows.
---
- The world size is no longer hardcoded. All functions dependent on world size now take a `WorldSizeLg`, which holds the base 2 logarithm of each actual world dimension and is guaranteed to maintain certain properties (outlined in `common/src/terrain/map.rs`). Additionally, many utility functions that utilize the world size were moved into `common` as well (mostly `common/src/terrain/mod.rs`). Finally, the world map format was updated in order to store its size explicitly, with a migration path from the old format that should work whenever the old formatted map was a square (practically always). See `world/src/sim/mod.rs` for these changes.
- The map generation code was made generic to allow using it outside of the `world` crate. The parts of the map generating code that do not need to query the world were moved over to `common/src/terrain/map.rs`, allowing them to be used from the client without creating a dependency on `world`. The rest of it was turned into helper functions in `world/src/sim/map.rs`, which can be passed as closures to the generic map generation code to complete its construction. This also means that colors are now passed in separately to the map generation function. See <https://veloren.net/devblog-78/> for more details.
- On world creation, we now compute *horizon maps*. See the function in `world/src/sim/util.rs`.
Given a height map and a plane intersecting that height map, our horizon maps allow us to encode enough information to reconstruct shadows for each point on the height map using only the *horizon angle* (the angle at which the sun starts to become visible). As Veloren's sun only covers one plane, this is sufficient for encoding sun shadows for LOD terrain, by encoding two angles per chunk (one for each 90 degrees the sun covers). We can also use this for the moon, if we want, since the moon follows the same path. Additionally, we store the *height* of the furthest occluder, to try to make the shadows volumetric; so this means 4 bytes in total for each chunk.
Support for horizon maps has been merged into the map functionality in common as well.
- The way we pass the world from the server to the client has been updated. Rather than passing the prerendered map, we instead pass three maps with values for each chunk; one with the color information, a second with altitude information, and a third with horizon map information. We then reconstruct the map on the client, together with some additional information we send from the server (like the sea level and maximum height). See `common/src/msg/server.rs` for a detailed description of the format of `WorldMapMsg`, and `server/src/libr.rs` and `client/src/lib.rs` for details of the map construction and parsing.
- Artifacts related to image rotation were fixed. See the commit message for commit SHA `cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e` for a detailed explanation. This involved changes to shaders, the addition of a new type of graphic (also reflected in the graphic cache) that allows specifying a border color (which automatically makes the associated texture immutable), and some related fixes. I reproduce the first two paragraphs of the MR description as well:
```
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
```
- Multiflow rivers were enabled.
This does not really need to be part of this MR, and would be easy to revert, but since it seemed to provide a nice improvement it's currently packaged with it.
We already computed multiple outflows from each chunk for erosion purposes long before this MR.
However, we never modified river rendering to be able to handle this case (just a single downhill river flow is complex enough!) so this was not exposed when deciding which chunks were rivers.
Now that
- In the process of making changes related to the world map, various incidental fixes and optimizations were required. Some examples of fixes include making sure terrain is never lowered to below sea level (to make the shadow maps report correct values), fixing map altitudes and colors to understand things like cliffs and "block level" coloring (that doesn'te xist on the column level), and fixing a crashbug when rendering images for the UI where source pixels are strongly rectangular. Some examples of related performance fixes include avoiding allocating a fresh vector for all the maps (i.e. copying it over to change the format from `[u32; n]` to `DynamicImage` and then copying again to convert to `RgbaImage`), and instead using the `gfx::memory::slice` function to accomplish the same thing. These sorts of changes are spread all arond the code.
This includes the additon of a new scene, `voxygen/src/scene/lod.rs`, a new pipeline `voxygen/src/render/pipeline/lod_terrain.rs`, and new shaders `assets/vxygen/shaders/lod-terrain-vert.glsl` and `assets/vxygen/shaders/lod-terrain-frag.glsl`, as well as associated changes to the renderer in `voxygen/src/render/renderer.rs`.
The main idea behind our initial approach to LOD was to take the world data we now get from the server (altitude, color, and horizon mapping).
- Some previously computed values were turned into shader uniforms for better prediction on weak processors. (@zesterer)
- Calls to power or trig functions were removed or replaced with multiplications, where possible.
- After some deliberation
- To properly handle sprite "waving" for nearby sprites,
We explicitly designed the greedy meshing system with figures and sprites in mind.
In both cases, we want to be able to *efficiently* pack many different models into the same texture, especially in cases where we know
we will either not be removing any of the grouped-together from the models from the texture, or will remove all of them at once (so
they can be packed into some specific subtexture).
For sprites, since we know every model in advance and never intend to deallocate them, we currently pack them all as efficiently as
possible into one giant tetxure atlas. However, in the future we might opt to pack them slightly less efficiently in exchange for
shrinking the sprite vertex size.
For figures, we pack all the textures for each *model* into the same atlas.
is a global texture atlas used for every sprite, and for figures which is why we have the ability to mesh multiple
models to the same texture area (using the simple texture atlas allocator) without requiring intermediate vector allocations.
This is accomplished by delaying the time when we actually write the color and light data to the texture until *after* all the
model vertices have been meshed; then, we can just allocate the whole color/light array at once, making the atlas we use an
exact fit. In computer science-y terms, we accomplish this delay by, after we perform the initial greedy meshing (without
texture information), not continuing to create the texture data, but instead constructing a *continuation*--that is, a function
that, when called, will execute the rest of the computation. We push this continuation (which in Rust terms is a `FnOnce` closure
that takes the `ColLightsInfo` that it is supposed to write to as context) onto a
onto a vector
resizing. To allow for suspended writes to texture data, Rust pointed out to me that the continuation that would eventually write the color and light data to the texture atlas (the one that is shared by all models sharing the same greedy mesher) would have to *own* whatever data it mshed. Because we often generate the model data to mesh as a temporary in `voxygen/src/load.rs`, the
- Matrix multiplications in the shader were reduced for figure data (@zesterer).
- Vertex "waves" for fluid data were removed.
- Terrain "bending" near edges was removed.
- Scaling was fixed to make sure empty space was not introduced in a space previously occupied by a block. It was also changed to take ownership of its voxel data,
rather than sharing it, to let it be used with meshing.
- Rust's nightly version was bumped in order to use the `array_map` function, which lets us reuse more code between the simple map and `FigureModelCache`.
- PositionedGlyph::standalone.
---
I tried to cite sources in many cases[^realtime],[^lloyd],[^lispsm],[^pbrt],[^greedy],[^tjunctions]
where I needed features from elsewhere but I am particularly grateful for the following resources,
esepcially where they have accompanying source code. I linked all of them that are accessible to the public (those that are not were
obtained through legal means).
[^realtime]: Eisemann, Elmar, Michael Schwarz, Ulf Assarsson, Michael Wimmer. Real-Time Shadows. A K Peters/CRC Press (T&F), 20160419.
[^lloyd]: Lloyd,B. 2007. [Logarithmic perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). PhD thesis, University of North Carolina.
[^lispsm]: Wimmer, M., Scherzer, D., and Purgathofer, W. 2004. [Light space perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). In Proceedings of Eurographics Symposium on Rendering 2004, pp. 143– 152.
[^pbrt]: Pharr, Matt, et al. [http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf](Physically Based Rendering: From Theory to Implementation). Third edition, Morgan Kaufmann Publishers/Elsevier, 2017.
[^greedy]: mikolalysenko. “Meshing in a Minecraft Game.” 0 FPS, 30 June 2012, <https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/>.
[^tjunctions]: blackflux. “Meshing in Voxel Engines – Part 1.” Blackflux.Com, 23 Feb. 2014, <https://blackflux.wordpress.com/2014/02/23/meshing-in-voxel-engines-part-1/>.
I am also especially grateful to Khronos, Wikiepdia, and stackoverflow for answering many of my specific questions while writing the MR.
---
Squashed commit of the following:
commit 300505e7305a2fdac722a808ee8538323f215f39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 18:46:25 2020 +0200
Fixing cargo doc and typo in CHANGELOG.
commit ec0aeb18e8499d7d84ef818331b4b65c3d76cea6
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 15:38:50 2020 +0200
Hopefully final commit for the LOD branch.
commit 5e8ea0b1eaac02903a02feb2eb038d195de4872f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 10:14:26 2020 +0200
Falling back to power as stopgap.
commit e44a1cbf46504ee9931a01bdc9033e145500d557
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 09:25:41 2020 +0200
Address imbris feedback.
Temporarily disables shiny water, lowers max VD.
These restrictions will be lifted soon after merging.
commit 561e25778a108ac3712f5ec2ce3a51234c4430d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 08:31:13 2020 +0200
Tweaking shaders a bit.
commit 7d19259078ce0dd7b3742ad7d0cb3fab3ece3fdc
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:59:43 2020 +0200
Fix view example as well.
commit 051cd4934e0fad2c0b15db4380a4189fa318679f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:29:06 2020 +0200
Fix meshing benchmark.
commit c95e07db3b4dcca285678985e65e31b927cb1c61
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 05:46:22 2020 +0200
Address MR feedback, fix scene clouds.
commit 1bfb816cabdb3ffc1e507a009c2d98696b4b573a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:39:36 2020 +0200
Incorporating Pfau's figure color changes.
New eyes and new humanoid colors.
commit 3f9b89a3ac7b3356b1dba0d1a8f6541357f81469
Merge: e2f5162e4 62c53963a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:29:41 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit e2f5162e4f96f4124aa43488f7245d341b3dcfd4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:28:38 2020 +0200
World colors are all hotloadable.
They live in assets/world/style/colors.ron.
Only a small handful of hardcoed colors remain in World; they are either
part of the map, or difficult to disentangle from the rest of the
computation. Comments are made where appropriate.
commit 62c53963abe1975009d34a8f9515a355bef24f31
Author: Marcel Märtens <marcel.cochem@googlemail.com>
Date: Wed Aug 19 15:59:00 2020 +0200
replace pretty_env_logger with tracing
commit 5b1625f99d9586fe80e2232f583ec5af9f953099
Merge: d71003acd 4942b5b39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:15:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit d71003acdabeff970b3928e97c26af6847b5b78e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:14:34 2020 +0200
Hotloading colors, part 1: colors in common.
Currently, this just entails humanoid colors. There are only three
colors not handled; the light emitter colors in
common/src/comp/inventory/item/tool.rs. These don't seem important
enough to me to warrant making hotloadable, at least not right now, but
if it's needed later we can always add them to the file.
commit 63b5e0e553eb2ea49276f192a6fc7dd65254270d
Merge: c32b337a4 6d2c4b9c1
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 13:05:37 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c32b337a46e10d9de473d178a94a3ccd61c39bb3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:52:04 2020 +0200
Fixing LOD grid, for real.
commit a166ae0360395387e09fb35a1f84210c2ce5ec24
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:28:05 2020 +0200
Addressing imbris's initial feedback.
Fixes two minor bugs: explosion particles were no longer spawning
randomly, and LOD grids were not perfectly even.
commit 4cbad004f44060994252dd3d38647a14a589712f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:27:58 2020 +0200
Bumping nightly per request.
commit 548680276aac77c25d43d16b5622f847d474dbef
Merge: acc098604 8f8b20c91
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:26:06 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit acc0986040589a3492f88a740bc3c3fc693b26d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:28:32 2020 +0200
Lower resolution due to lying drivers.
commit d3b878de2a52c358d2944a6bbd0555dad7fbdb10
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:15:38 2020 +0200
Fix issues msh encountered with Intel 4600.
commit 10245e0c1b0cb6fae10d86409435364edc6102ef
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 21:15:02 2020 +0200
Merge more models into one mesh than we did previously.
commit 3155c31e663c52ae5c3a53d5fb5665892a1a498a
Merge: 7204cc8a7 3c199280e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:35:22 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7204cc8a7a4f74a30306bd205d9834fee4bb944f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:34:43 2020 +0200
Fix not yet done NPC animations.
This forces them all to be the idle animation if not specified.
This fixes issues where you'd have giant NPCs in water.
commit bc83360f2a08918f19d417b5f772e1ff554dba08
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 19:36:37 2020 +0200
Try to fix some bugs:
- Z fighting with LOD terrain and water.
- Audio SFX not playing.
commit 1fd104aa603bf3781b6526a5cada46aeca3049dd
Merge: 862df3c99 7c2c392a3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 12:02:31 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 862df3c9976c4da9bd7cfd784f1a85973127968a
Merge: 0a4218ed9 75c1d4401
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 05:52:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0a4218ed9d541a2b34c133351bea38a99ddf4ea7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 22:27:14 2020 +0200
Fix particle depth.
commit f51dfdeb442d0dd5243dd2f344fa4be295bd0875
Merge: c6251a956 5e6dc0471
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:19:04 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit c6251a956ad376400dca5c23420cf8d213dc8fdf
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:15:46 2020 +0200
Cache figures more intelligently.
Cache figures for longer, and don't cache character states for the
player except where they actually affect the rendered model.
commit 0ed801d5404982c6fb63b1eaa4567d908b294c9d
Merge: c11b9bdf0 eea64f78f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 16:32:24 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c11b9bdf0a53bf9884d2f5a48fec9b01d582df1a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 11:47:15 2020 +0200
Remove unneeded Clippy annotation.
commit 16aa9ef40af56d69289d00aafb3deadfb8bd4f35
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 8 00:53:02 2020 +0200
Fix hotloading and Clippy.
commit 3dc973e0be5b758da1e9805eb764ad401374cd0c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 23:50:27 2020 +0200
Major speedups with SIMD.
commit fba64a7d93d5a96077ce87287bbce6ab9b7fbcae
Merge: 76429d00e d1e10b178
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:19 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 76429d00eea00d212fbd672a84ee91e75b19b938
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:10 2020 +0200
Add clippy.toml.
commit c79f512f84dbb83cb82b7954db68ff241dfd8e41
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 11:55:20 2020 +0200
Fix all clippy issues, clean up Rust code.
commit 6f90e010b3fbefb53b0d632e819931350015b6b8
Merge: 77a8c7c26 5929cfa5c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:30 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 77a8c7c267d3f44a1a62bd6b2274359973c5e4d4
Merge: b44e44232 44febaabd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:10 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 5929cfa5c713aa392110bbb62407f76caf53c3df
Author: jshipsey <jshipsey18@gmail.com>
Date: Thu Aug 6 20:47:27 2020 -0400
fixed in-hand arrow bug
commit b44e442325d828f1cd564d66908f89d09e80474b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 6 13:40:35 2020 +0200
Miscellaneous performance improvements.
commit be37acf287c1360d8085862526ac3365ffd1d768
Merge: 125d7fc6c c11876547
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 05:49:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 125d7fc6c4dcd8c8c5f27b8268a4d64f409f3644
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 04:55:31 2020 +0200
Abstract over simd vs. repr_c vectors.
Also some minor improvements to Event size.
commit d4d4956e9252e1241ce110b2aa85076c6b1e2a23
Merge: 5f3b7294a aced5f979
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:56:54 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 5f3b7294af1f8533edc2620b58863c248e2b07af
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:43:52 2020 +0200
Fix formatting issues I missed before.
commit a428a3ebba70dcab63dd0f8cd983120c90617271
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:41:51 2020 +0200
Fix clippy warnings, part 1.
There aer still a bunch of type too complex and
function takes too many arguments warnings that I'll fix later
(or ignore, since in the one case I did fix a function takes too
many arguments warning I think it made the code *less* readable).
commit ba54307540ed8a937ac08209730284fc653af85b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 30 13:22:42 2020 +0200
Fix light animations so they are removed when the light turns off.
commit 7e0f4bcbf0f4717145d8beac40d52e3acebbe2aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 21:10:20 2020 +0200
Fix crash in edge case for pixel art.
commit 56da06f7a351e2b949e9b014a90b974d511a0924
Merge: cf74d55f2 9f53a4a19
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:56:52 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:29:52 2020 +0200
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
The first concern was addressed by fixing the dimensions of the map
images drawn from the UI (so that we always use a square source
rectangle, rather than a rectangular one according to the dimensions of
the map). We also fixed the way rotation was done in the fragment
shader for north-facing sources to make it properly handle aspect ratio
(this was already done for north-facing targets). Together, these fix
rendering issues peculiar to rectangular maps.
The second and third concerns were jointly addressed by adding an
optional border color to every 2D image drawn by the UI. This turns
out not to waste extra space even though we hold a full f32 color
(to avoid an extra dependency on gfx's PackedColor), since voxel
images already take up more space than Optiion<[f32; 4]> requires.
This is then implemented automatically using the "border color"
wrapping method in the attached sampler.
Since this is implemented in graphics hardware, it only works (at
least naively) if the actual image bounds match the texture bounds.
Therefore, we altered the way the graphics cache stores images
with a border color to guarantee that they are always in their own
texture, whose size exactly matches their extent. Since the easiest
currently exposed way to set a border color is to do so for an
immutable texture, we went a bit further and added a new "immutable"
texture storage type used for these cases; currently, it is always
and automatically used only when there is a specified border color,
but in theory there's no reason we couldn't provide immutable-only
images that use the default wrapping mdoe (though clamp to border
is admittedly not a great default).
To fix the maps case specifically, we set the border color to a
translucent version of the ocean border color. This may need
tweaking going forward, which shouldn't be hard.
As part of this process, we had to modify graphics replacement to
make sure immutable images are *removed* when invalidated, rather
than just having a validity flag unset (this is normally done by
the UI to try to reuse allocations in place if images are updated
in benign ways, since the texture atlases used for Ui do not
support deallocation; currently this is only used for item images,
so there should be no overlap with immutable image replacement,
so this was purely precautionary).
Since we were already touching the relevant code, we also updated
the image dependency to a newer version that provides more ways
to avoid allocations, and made a few other changes that should
hopefully eliminate redundant most of the intermediate buffer
allocations we were performing for what should be zero-cost
conversions. This may slightly improve performance in some
cases.
commit ad18ce939940a8c697270f6e9b94db9942fd8295
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 13:21:09 2020 +0200
Fix continent scale hack.
commit 36b1cb074f5b195aebd7dbbc3da7f0246a1a18ec
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 12:11:40 2020 +0200
Enable loading different sized maps without a recompile.
We may want to tweak the effects of the continent_scale_hack.
commit 13b6d4d534cc4814b7cb3294ca41bbfea0a6b186
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 10:55:48 2020 +0200
Removing WORLD_SIZE, part 1.
Erased almost every instance of WORLD_SIZE and replaced it with a local
power of two, map_size_lg (which respects certain invariants; see
common/src/terrain/map.rs for more details about MapSizeLg). This also
means we can avoid a dependency on the world crate from client, as
desired.
Now that the rest of the code is not expecting a fixed WORLD_SIZE, the
next step is to arrange for maps to store their world size, and to use
that world size as a basis prior to loading the map (as well, probably,
as prior to configuring some of the noise functions).
commit 30b1d2c6428230a9eaa0d749cdcbbd6f1cbccd78
Merge: 7d56ba31b 1377b369f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:58 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 7d56ba31b445441461b28a07fc495d7d4f047c17
Merge: 2101113b4 598f14b25
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 1377b369f6db2258e910d467a5740f31789e3ded
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sun Jul 19 23:25:38 2020 +0200
more saturated pumpkins
commit ae8d50527f93bb0616c2ad46ce4dacb63bc37c6d
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sat Jul 18 20:29:56 2020 +0200
acacia models
commit 2101113b467e691de787392d7f20f1745f5637bd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 18 18:55:25 2020 +0200
Higher detail LOD.
commit add2cfae04b4385fa5590e11e2bd5229d9dee0aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 16 01:57:39 2020 +0200
Revert some irrelevant stuff.
commit 2e2ab3dc1eaa59a4aef7f8d34a53d8aae4c8553a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 15 13:30:49 2020 +0200
Fixing various things about shadows.
* Correcting optimal LISPSM parameter.
* Figure shadows are cast when they're not visible.
* Chunk shadows stay cast until you look away.
* Seamless cubemaps for point lights.
* Etc.
commit 6c31e6b56217274285b597af297036691ea5d897
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 19:50:26 2020 +0200
Fix shadow creation.
commit 6332cbe006115ae205597529cd8bbccd146c2cca
Merge: be438657c 930e0028b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:47:00 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit be438657c33d7b5bfb0a9582c3ed3fd366637323
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:28:08 2020 +0200
Tweaks to shadows.
Added shadow map resolution configuration, added seamless cubemaps,
documented all existing rendering options, and fixed a few Clippy
errors.
commit 23b4058906013c7d2a40c286e20e32c5fbd897ed
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 10:11:19 2020 +0200
Fix moon, use nonlinear noise for terrain.
Note that the latter has a bit of performance cost.
commit 7fbe5cbfbb9dc29607957b8e62f432a4deed193d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:23:02 2020 +0200
Address lies about max texture size.
commit bcfc62b5e13a1cdd83f57535fde4694720bebfd9
Merge: 75e3626a7 18a08e8fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:22:08 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 75e3626a785919f43fdcf2127c2b10e3e4df2f9f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:21:52 2020 +0200
OpenGL 3.3 minimum.
commit 18a08e8fe2739f02af99a5d2cb4e7c38c49e858b
Author: Monty Marz <m.marzouq@gmx.de>
Date: Tue Jul 7 23:57:52 2020 +0200
settings localization
commit 90c5d1ca3620092bc3ae10b2211489eb1cf6f5e8
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 21:11:48 2020 +0200
Lower near distance.
commit 0e66f02b25aaddaa2dfddbbc89cd67de54a9a7b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 20:09:01 2020 +0200
All sprites sway in the wind now.
commit db1401a6910bf42dcf502462c90038752ff5fbdb
Merge: 69e508d8c e8b4b29d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 19:34:17 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 69e508d8c94d8973033817ca86f357e466fc7c4d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 18:41:37 2020 +0200
Make it easy to switch to SIMD for math.
commit ffe0f5928c7a7e87d00cb5426b3b1d831d7e02fd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 21:21:12 2020 +0200
Fix some issues with underwater rendering.
commit bfda6da42f38fd02c31ee92c81ab785a3e50c2a0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 19:17:59 2020 +0200
Fix some minor display issues.
commit 0ed752e087968cf901301884aaeae698e32ef8a5
Merge: ccc6a06a8 518edcb85
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:14:21 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit ccc6a06a8d4504d6b9f7af7905a414d2ee06ab76
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:04:34 2020 +0200
Some minor changes.
commit 4e020246702889269efe1a191788992164c508d6
Merge: 50a64d927 e05c9267a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 16:17:40 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 50a64d927e6c4f4b0e4688e4cbfca694bc3f922a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 13:07:03 2020 +0200
Fix far plane.
commit 7dd06da34cae8f9ea3b6c889fe965181f3fd3949
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:25:35 2020 +0200
Add shadows.glsl.
commit 618a18c998778bf871b905a74657440fcc384c80
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:10:22 2020 +0200
Adding shadows, greedy meshing, and more.
commit eaea83fe6a5cb1cb0ba8beef888183c718258496
Merge: 267018495 2f89b863e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 22:47:07 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 2670184954a13e4a9e7a4e35ba79aac0c5fac2f7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 21:20:01 2020 +0200
Make civsim and sites deterministic.
For anything in worldgen where you use a HashMap, *please* think
carefully about which hasher you are going to use! This is
especially true if (for some reason) you are depending on hashmap
iteration order remaining stable for some aspect of worldgen.
commit f8376fd5dc72b4a9c2f51a6b4570d59c8b8e9343
Merge: 654f7e049 cdee191dd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 17:53:57 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 654f7e049258d9da27c09608bbe6a46ffa8787e5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed May 20 21:22:30 2020 +0200
Correct backface culling.
commit 560501df05ca725409b0f2e4eb31bdfdc15fd0c7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue May 19 17:22:06 2020 +0200
Greedy messhing for shadows.
commit a4d87e1875ca543436e6bbbeb20348facc5a52d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun May 17 05:59:00 2020 +0200
Shadow maps work for lantern.
commit 243d0837b8a3b08172c9a3c348d964d7ddc2a0a8
Merge: 04382dc28 71dd520cd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:53:13 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 04382dc28632b6c66e8821f6870c0daaa1c1901a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:22:17 2020 +0200
WIP: better graphics config, better LOD, shadow maps.
commit 22ddbad3eb32bfa70f0932176022208fe67ded81
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 18:54:09 2020 +0200
Minor shader fixes.
commit 746a10e8d01ac235f994b0cde78fa48998602a1f
Merge: 0f4a0e763 40ab94673
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 04:02:09 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0f4a0e763db3afbdc4fb0558611f38326ca87151
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 23:03:24 2020 +0200
Switch back to pop-in terrain.
commit dd74fa7e4a53667b38811d7aec58d7f6a68889bb
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 22:58:55 2020 +0200
LOD shading closer to voxel shading.
commit ef67bd58ba0bdaf622b078892d768263b6cba268
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 28 20:49:03 2020 +0200
Experimental underwater lighting.
commit 2c5ad9d07605e80d5fd5679dd3a5d70c605b86a9
Merge: 748279835 303967a6f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 22:35:24 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7482798354eda18c8207950080fc24d443a369de
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 21:59:55 2020 +0200
Replace discard in figure-frag.
commit d83b4ae69be4912f69bf7835f509c68a1c7770a4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:45:57 2020 +0200
Fix sprite lighting, HDR from focus_pos.
commit 0594238004f116274905fa0ed7c2b6c417ed1d29
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:14:10 2020 +0200
Proper HDR from point lights.
commit 48c93d2b41ce5743103d18e76cc228f5ac766492
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 14:01:43 2020 +0200
Brighter ambiance, darker LOD shadows.
commit e0452e895ccfa8a43f368cae3b8b8aedc24dad93
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 13:13:23 2020 +0200
More proper HDR.
commit 4c6da3ed16cfeebb455e40da5f557b4af9a499d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 00:13:10 2020 +0200
Trying LOD noise.
commit 682a3d74c85df5503ffe1fc1cc891bce789df1ad
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 23:11:08 2020 +0200
Fix LOD heights in towns.
commit cc39e5734e8b18f9077bf42e66337c1319dd6b6e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 21:01:23 2020 +0200
More LOD fixes.
commit 8116b21c2e51c836e77894e309ac273caf2917b3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:54:43 2020 +0200
I like this coloring.
commit bc2560ea90b36f4b46190005344232d993043ac3
Merge: 14effdd5d e690efe71
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:48:33 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 14effdd5db8747fcf3eb34f03b46b7792e92d1c5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:24:35 2020 +0200
Re-saturate.
commit 48a643955d4435b78179acba0beb4a979905cc31
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:23:57 2020 +0200
Various fixes.
commit f7b497a0c25f4ad4682c71dd1ed6f608052feb9b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 03:22:49 2020 +0200
Render figures again.
commit 44e4aad48deba8266b9f8bdfd3db096b381f5327
Merge: e6f0a5a98 9ec319a18
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 02:01:04 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit e6f0a5a981a82533ba188fff0a54ce98577bb152
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 24 16:12:20 2020 +0200
Add atmospheric scattering.
commit f2953087f691a8edbc001cb98ebf5059fc6f8ac0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 23 00:01:20 2020 +0200
Fix shadowing for specular reflections.
commit ddd4a67a9799b8d08c7dc0c2bec90621c2bed0e3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Apr 22 22:56:12 2020 +0200
HDR fixes.
commit 1015e60deef3c447381996277df7496707a63bd0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 21 18:25:19 2020 +0200
More lighting changes.
commit 80c264abd111fb237e57843efcb5c071d4f84613
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 13 00:29:59 2020 +0200
Lighting experiments.
commit 8414987e589dd5102bad89762a3adaccc0bfe957
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 9 02:38:40 2020 +0200
WIP -- lighting changes and soft shadows.
commit 9cd2b3fb0d6b49776c6dfe463e4169637250b11a
Merge: c7ea687eb 8b149ad11
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:29 2020 +0200
Merge branch 'sharp/new-lighting' into sharp/small-fixes
commit c7ea687ebbc5aace1b455f134a5bf49ce2c7434a
Merge: 476441531 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:02 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 8b149ad11ad4bb75018fcf9519baec27d1c95951
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:32:39 2020 +0200
Trying out a new lighting model.
commit b0ac9f36f755dd06f7c17c46150568064790864f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 07:56:11 2020 +0200
Use bicubic interpolation for terrain.
commit f6fc9307a121514b614bc50ef8eb055953e7da8a
Merge: 33140a295 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 05:01:41 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 4764415312aae6e9ac2d00e86e84577cb958f1ab
Merge: ed2d0111d 13388ee6a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 04:54:48 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 13388ee6a42943f3f79a9cb488346cef18e272fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 20:30:08 2020 +0200
Various fixes (to coloring and to soft shadows).
commit fbd084a94a067082a87cd6d28b82054709bc9265
Merge: 5a089863b 4fdf6896a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 18:50:38 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/map-colors
commit ed2d0111d994262ae836d84d1fe5a45e4de72a0b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 06:49:27 2020 +0200
Combining colors and LOD.
commit 88342640c6b835114d01c797b89fdede3b0a2108
Merge: 33140a295 5a089863b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:49:20 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 33140a2951b8212725f42c758b277aaec4d888f7
Merge: 4c65a5aed f34d4b379
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:36:21 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 5a089863beb01d4794bbe3580ada47b278715ea2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 03:17:49 2020 +0200
Making maps brighter.
This is probably not the right way to do it, but oh well!
commit 32b2c99109dd486aa922886081068f9c550c83f2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 02:46:36 2020 +0200
Horizon mapping and "layered" map generation.
Horizon mapping is a method of shadow mapping specific to height maps.
It can handle any angle between 0 and 90 degrees from the ground, as
long as know the horizontal direction in advance, by remembering only a
single angle (the "horizon angle" of the shadow map). More is explained
in common/src/msg/server.rs. We also remember the approximate height of
the largest occluder, to try to be able to generate soft shadows and
create a vertical position where the shadows can't go higher.
Additionally, map generation has been reworked. Instead of computing
everything from explicit samples, we pass in sampling functions that
return exactly what the map generator needs. This allows us to cleanly
separate the way we sample things like altitudes and colors from the map
generation process. We exploit this to generate maps *partially* on the
server (with colors and rivers, but not shading). We can then send the
partially completed map to the client, which can combine it with shadow
information to generate the final map. This is useful for two reasons:
first, it makes sure the client can apply shadow information by itself,
and second, it lets us pass the unshaded map for use with level of
detail functionality.
For similar reasons, river generation is split
out into its own layer, but for now we opt to still generate rivers on
the server (since the river wire format is more complicated to compress
and may require some extra work to make sure we have enough precision to
draw rivers well enough for LoD).
Finally, the mostly ad-hoc lighting we were performing has been (mostly)
replaced with explicit Phong reflection shading (including specular
highlights). Regularizing this seems useful and helps clarify the
"meaning" of the various light intensities, and helps us keep a more
physically plausible basis. However, its interaction with soft shadows
is still imperfect, and it's not yet clear to me what we need to do to
turn this into something useful for LoD.
commit f8926a5737ddc51f3d585c651a64c43677aae0f4
Merge: a1aee931e 875ae6ced
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Mar 13 13:32:42 2020 +0100
Merge remote-tracking branch 'origin/master' into sharp/map-colors
commit 4c65a5aed353b119aea65a2aaeb94549b67beb42
Author: Treeco <5021038-Treeco@users.noreply.gitlab.com>
Date: Mon Feb 24 16:48:05 2020 +0000
Made LOD setting slider exponential
commit 2fa7b2d20d7233dc8bfd64f9f7f54617575248f1
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 17:49:53 2020 +0000
Added mist to LoD
commit aab059a450b5f635777129ff82cc15b662965c3c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 15:14:06 2020 +0000
Added LoD slider
commit 779c36b538121c5ade3633ae5cb67bb14c8c3877
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:54:55 2020 +0000
Reduced cost of vertex pushing
commit 9fea150473906b166365b738ebcea07c697daf3d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:38:53 2020 +0000
Fixed maths, improved LoD resolution
commit 5481df38fea5bf183ff376a3337179cfaa5233dc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 11:22:50 2020 +0000
Dynamically relocate LoD vertices to enhance details
commit a3e36a50ababd615da7db1b26158c7906a5def01
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 18:13:51 2020 +0000
Simpler terrain spiral rendering
commit 255f450ae9ac8763db4bede075fb409161ed57cc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:53:17 2020 +0000
Better LoD precision
commit 3d027aebe812a5b8658a4eb8123dc9f61b3776d2
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:04:03 2020 +0000
Better falloff
commit be775c9484b457b2c0b1a494aec03392d0c70e76
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 15:30:45 2020 +0000
Applied good ideas from experimental branch
commit 58587b68545a23c5c04ab4574a4b94b3bc982246
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 16:15:13 2020 +0000
Minor fixes to LoD merging
commit 7b42aebd709c14df2db766aad61d9280ad24d84d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 15:04:44 2020 +0000
Capped LoD dragging
commit 8aafc559f87124e1ea5ca6e3ddc2aa0c242d793c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:54:37 2020 +0000
Better blending between LoD and terrain border
commit edd3455d5161792d87ddc8eadc0ecbad5532b284
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:40:19 2020 +0000
Fixed LoD z depth, added sea level offset
commit b9b06744620114dd5556e73f64fa93c145503a7c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:27:43 2020 +0000
Better LoD smoothing
commit a1aee931e790431560cd2d953ad61d9497072afd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Feb 21 14:52:17 2020 +0100
Adding shadows.
commit 2400786c13dd891c131ed86d48d05df516a8a778
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 13:48:40 2020 +0000
Use world map as LoD source
commit dbf650f504a4c25fbbc2096ac3616c736bf52d23
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Jan 20 00:48:14 2020 +0000
Better clouds at distance
commit 5e6f81b86cdb9730b9b056877b19257075fd5fa8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Jan 19 23:59:02 2020 +0000
sync
commit 745e7540ddb000cc645f612767b337c2ddc3f7c0
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 12:40:48 2019 +0000
Improved cloud falloff mist, faster noise sampling
commit f6a200d0cb866196ba57697466755f9e0c7ea5d8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 10:09:00 2019 +0000
Improved long-range depth precision, removed unnecessary LoD polygons
commit 63d1b2bb2292898d59fb4f4e502201103dfeb86f
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 20:57:46 2019 +0000
Working LoD shader
commit f13d98ee3e58f881e8b978861a67663b59ed91ec
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 11:03:40 2019 +0000
LoD first attempt (stack overflow issue)
2020-08-20 18:34:59 +00:00
|
|
|
|
cdf_irwin_hall, downhill, get_horizon_map, get_oceans, local_cells, map_edge_factor,
|
|
|
|
|
uniform_noise, uphill, InverseCdf, ScaleBias,
|
2020-02-01 20:39:39 +00:00
|
|
|
|
},
|
2020-07-25 11:19:13 +00:00
|
|
|
|
way::{Cave, Path, Way},
|
2019-08-25 15:49:33 +00:00
|
|
|
|
};
|
2019-06-18 21:22:31 +00:00
|
|
|
|
|
2019-06-22 21:44:27 +00:00
|
|
|
|
use crate::{
|
|
|
|
|
all::ForestKind,
|
(See sharp/lod-history) LOD, shadows, greedy meshing, new lighting, perf
---
Pretty much a Veloren fork at this point. Here's a high level overview of the changes (will be added to CHANGELOG just before merge).
At a high level this MR incorporates roughly two groups of changes.
The first group consists of new game features: more flexible map sizes, level of detail terrain, shadow maps, and a new lighting
engine. This is "feature work" that (mostly) only adds new things to Veloren, and mostly shouldn't affect old stuff.
The second big group of changes are those addressing the fallout from all the new features. These include performance fixes of
various sorts: the addition of multiple graphics options and optimization of the cheap ones to avoid work, switching all voxel
models to use some variant of greedy meshing, switching over much of our CPU-side vector math to exploit SIMD instructions
(coinciding with a fork of `vek`), and a rewrite of how the UI handles text rendering (coinciding with updates to our fork
of `conrod`). Making Veloren's hardcoded colors appear correct under the new lighting engine also required considerably
changes (TODO: Fill in this section when it's complete).
The second category of changes often heavily touches code owned by other people, including frequently modified code "owned" by a
handful of people, so I recommend that this code be reviewed particularly carefully.
---
At a high level (each will be described in more detail below):
- The world map has been refactored.
- The world size is no longer hardcoded (@zesterer).
- The map generation code was made generic to allow using it outside of the `world` crate (@zesterer).
- On world creation, we now compute *horizon maps* (@zesterer).
- The way we pass the world from the server to the client has been updated (@xMAC94x).
- Artifacts related to image rotation were fixed (@imbris).
- Multiflow rivers were enabled (@zesterer).
- In the process of making changes related to the world map, various incidental fixes and optimizations were required.
- The new *level of detail* feature was added (@zesterer wrote part of this and has checked out the rest).
- A new LOD terrain rendering step was added to the pipeline.
- The LOD terrain quality was made configurable via a graphics setting.
- Horizon maps were used to cast shadows from LOD chunks on both LOD and non-LOD terrain.
- A "voxelization" effect was incorporated into rendered LOD terrain to make it blend better into the world.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Veloren's lighting has been completely overhauled (@zesterer has already checked most of this out).
- A semi-accurate index of refraction was assigned to our materials.
- A new, more realistic, physically based approach to lighting was used using the *Ashikhmin Shirley* BRDF.
- We emulate *atmospheric scattering* using equations designed for measuring solar panel light exposure.
- We attempt to compute *realistic light attenuation* in water using its real material properties.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Point and directional lights now cast realistic shadows, using *shadow mapping.* (@imbris, @zesterer, @Treeco, @YuriMomo)
- Point light shadow maps were added to the rendering pipeline, using geometry shaders and *seamless cube maps*.
- Directional light shadows were added to the rendering pipeline, using LISPSM together with disabling *depth clamping*.
- "Shadow-only" chunks and NPCs were added to prevent shadows from models behind you from disappearing.
- In the process of making changes related to shadow maps, various incidental fixes and optimizations were required.
The addition of shadow maps, LOD terrain, and the new lighting all led to significant performance degradation, on top of other
changes happening in master. Therefore, a large number of performance improvements were also needed:
- The graphics options were made much more flexible and configurable, and shaders were optimize.
- New options were provided for how to render lights and shadows (@Pfauenauge, @zesterer).
- Graphic setting storage and configuration were overhauled to make adding new features easier (@Pfauenauge, @imbris).
- Shaders were rewritten to utilize GLSL's preprocessor to avoid overhead (@zesterer, @YuriMomo).
- In the process of making changes related to providing additional rendering options, various incidental fixes and optimizations were required.
- Voxel model creation was switched to use *greedy meshing.*
- A new voxel meshing method, greedy meshing, was added (@imbris).
- Uses of the older meshing methods were migrated to use greedy meshing (@imbris, @jshipsey, @Pfauenauge).
- New restrictions were added to terrain, figure, and sprites to future proof them for further optimizations (@jshipsey, @Pfauenauge, @zesterer).
- Most positions are now relative to either chunk or player position for better precision (@imbris, @zesterer, @scottc).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- Animation and terrain math were switched to use SIMD where possible.
- Fixes were made to vek to make its SIMD feature usable for us (@zesterer, @imbris).
- The interface and types used in bone animation were changed in various ways (@jshipsey, @Snowram, @Pfauenauge).
- Redundant code generation for body animation is now partly taken care of by a macro (@jshipsey, @Snowram, @Pfauenauge).
- Animation code was modified to to use vek's SIMD representation where possible (@jshipsey, @Snowram, @Pfauenauge).
- Terrain meshing code and shadow map math were also modified to use vek's SIMD representation (@imbris).
- SIMD instruction generation was enabled (@YuriMomo, @jshipsey, @Snowram, @imbris, @Angelonfira, @xMAC94x).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- The way we cache glyphs was completely refactored, fixed, and optimized.
- Our fork of `conrod` was optimized in various ways (@imbris).
- Our fork of `conrod` now exposes whether a widget was updated during the current frame (@imbris).
- Our use of the glyph cache was rewritten for correctness (@imbris).
- A *text cache* was introduced that lets us skip remeshing glyphs that have not changed (@imbris).
- Various changes were made to reduce pressure on the glyph cache, with more planned (@imbris, @Pfauenauge).
- In the process of making changes related to the glyph cache, various incidental fixes and optimizations were required.
- Colors were changed to keep Veloren's look consistent with master.
- Some older tree models were brought back (@Pfauenauge).
- TODO(@Sharp): All hardcoded colors were extracted and made hotloadable.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Hardcoded colors were fixed to conform to Veloren's style.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Color models were fixed to conform to Veloren's style.
A detailed description of the involved changes follows.
---
- The world size is no longer hardcoded. All functions dependent on world size now take a `WorldSizeLg`, which holds the base 2 logarithm of each actual world dimension and is guaranteed to maintain certain properties (outlined in `common/src/terrain/map.rs`). Additionally, many utility functions that utilize the world size were moved into `common` as well (mostly `common/src/terrain/mod.rs`). Finally, the world map format was updated in order to store its size explicitly, with a migration path from the old format that should work whenever the old formatted map was a square (practically always). See `world/src/sim/mod.rs` for these changes.
- The map generation code was made generic to allow using it outside of the `world` crate. The parts of the map generating code that do not need to query the world were moved over to `common/src/terrain/map.rs`, allowing them to be used from the client without creating a dependency on `world`. The rest of it was turned into helper functions in `world/src/sim/map.rs`, which can be passed as closures to the generic map generation code to complete its construction. This also means that colors are now passed in separately to the map generation function. See <https://veloren.net/devblog-78/> for more details.
- On world creation, we now compute *horizon maps*. See the function in `world/src/sim/util.rs`.
Given a height map and a plane intersecting that height map, our horizon maps allow us to encode enough information to reconstruct shadows for each point on the height map using only the *horizon angle* (the angle at which the sun starts to become visible). As Veloren's sun only covers one plane, this is sufficient for encoding sun shadows for LOD terrain, by encoding two angles per chunk (one for each 90 degrees the sun covers). We can also use this for the moon, if we want, since the moon follows the same path. Additionally, we store the *height* of the furthest occluder, to try to make the shadows volumetric; so this means 4 bytes in total for each chunk.
Support for horizon maps has been merged into the map functionality in common as well.
- The way we pass the world from the server to the client has been updated. Rather than passing the prerendered map, we instead pass three maps with values for each chunk; one with the color information, a second with altitude information, and a third with horizon map information. We then reconstruct the map on the client, together with some additional information we send from the server (like the sea level and maximum height). See `common/src/msg/server.rs` for a detailed description of the format of `WorldMapMsg`, and `server/src/libr.rs` and `client/src/lib.rs` for details of the map construction and parsing.
- Artifacts related to image rotation were fixed. See the commit message for commit SHA `cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e` for a detailed explanation. This involved changes to shaders, the addition of a new type of graphic (also reflected in the graphic cache) that allows specifying a border color (which automatically makes the associated texture immutable), and some related fixes. I reproduce the first two paragraphs of the MR description as well:
```
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
```
- Multiflow rivers were enabled.
This does not really need to be part of this MR, and would be easy to revert, but since it seemed to provide a nice improvement it's currently packaged with it.
We already computed multiple outflows from each chunk for erosion purposes long before this MR.
However, we never modified river rendering to be able to handle this case (just a single downhill river flow is complex enough!) so this was not exposed when deciding which chunks were rivers.
Now that
- In the process of making changes related to the world map, various incidental fixes and optimizations were required. Some examples of fixes include making sure terrain is never lowered to below sea level (to make the shadow maps report correct values), fixing map altitudes and colors to understand things like cliffs and "block level" coloring (that doesn'te xist on the column level), and fixing a crashbug when rendering images for the UI where source pixels are strongly rectangular. Some examples of related performance fixes include avoiding allocating a fresh vector for all the maps (i.e. copying it over to change the format from `[u32; n]` to `DynamicImage` and then copying again to convert to `RgbaImage`), and instead using the `gfx::memory::slice` function to accomplish the same thing. These sorts of changes are spread all arond the code.
This includes the additon of a new scene, `voxygen/src/scene/lod.rs`, a new pipeline `voxygen/src/render/pipeline/lod_terrain.rs`, and new shaders `assets/vxygen/shaders/lod-terrain-vert.glsl` and `assets/vxygen/shaders/lod-terrain-frag.glsl`, as well as associated changes to the renderer in `voxygen/src/render/renderer.rs`.
The main idea behind our initial approach to LOD was to take the world data we now get from the server (altitude, color, and horizon mapping).
- Some previously computed values were turned into shader uniforms for better prediction on weak processors. (@zesterer)
- Calls to power or trig functions were removed or replaced with multiplications, where possible.
- After some deliberation
- To properly handle sprite "waving" for nearby sprites,
We explicitly designed the greedy meshing system with figures and sprites in mind.
In both cases, we want to be able to *efficiently* pack many different models into the same texture, especially in cases where we know
we will either not be removing any of the grouped-together from the models from the texture, or will remove all of them at once (so
they can be packed into some specific subtexture).
For sprites, since we know every model in advance and never intend to deallocate them, we currently pack them all as efficiently as
possible into one giant tetxure atlas. However, in the future we might opt to pack them slightly less efficiently in exchange for
shrinking the sprite vertex size.
For figures, we pack all the textures for each *model* into the same atlas.
is a global texture atlas used for every sprite, and for figures which is why we have the ability to mesh multiple
models to the same texture area (using the simple texture atlas allocator) without requiring intermediate vector allocations.
This is accomplished by delaying the time when we actually write the color and light data to the texture until *after* all the
model vertices have been meshed; then, we can just allocate the whole color/light array at once, making the atlas we use an
exact fit. In computer science-y terms, we accomplish this delay by, after we perform the initial greedy meshing (without
texture information), not continuing to create the texture data, but instead constructing a *continuation*--that is, a function
that, when called, will execute the rest of the computation. We push this continuation (which in Rust terms is a `FnOnce` closure
that takes the `ColLightsInfo` that it is supposed to write to as context) onto a
onto a vector
resizing. To allow for suspended writes to texture data, Rust pointed out to me that the continuation that would eventually write the color and light data to the texture atlas (the one that is shared by all models sharing the same greedy mesher) would have to *own* whatever data it mshed. Because we often generate the model data to mesh as a temporary in `voxygen/src/load.rs`, the
- Matrix multiplications in the shader were reduced for figure data (@zesterer).
- Vertex "waves" for fluid data were removed.
- Terrain "bending" near edges was removed.
- Scaling was fixed to make sure empty space was not introduced in a space previously occupied by a block. It was also changed to take ownership of its voxel data,
rather than sharing it, to let it be used with meshing.
- Rust's nightly version was bumped in order to use the `array_map` function, which lets us reuse more code between the simple map and `FigureModelCache`.
- PositionedGlyph::standalone.
---
I tried to cite sources in many cases[^realtime],[^lloyd],[^lispsm],[^pbrt],[^greedy],[^tjunctions]
where I needed features from elsewhere but I am particularly grateful for the following resources,
esepcially where they have accompanying source code. I linked all of them that are accessible to the public (those that are not were
obtained through legal means).
[^realtime]: Eisemann, Elmar, Michael Schwarz, Ulf Assarsson, Michael Wimmer. Real-Time Shadows. A K Peters/CRC Press (T&F), 20160419.
[^lloyd]: Lloyd,B. 2007. [Logarithmic perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). PhD thesis, University of North Carolina.
[^lispsm]: Wimmer, M., Scherzer, D., and Purgathofer, W. 2004. [Light space perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). In Proceedings of Eurographics Symposium on Rendering 2004, pp. 143– 152.
[^pbrt]: Pharr, Matt, et al. [http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf](Physically Based Rendering: From Theory to Implementation). Third edition, Morgan Kaufmann Publishers/Elsevier, 2017.
[^greedy]: mikolalysenko. “Meshing in a Minecraft Game.” 0 FPS, 30 June 2012, <https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/>.
[^tjunctions]: blackflux. “Meshing in Voxel Engines – Part 1.” Blackflux.Com, 23 Feb. 2014, <https://blackflux.wordpress.com/2014/02/23/meshing-in-voxel-engines-part-1/>.
I am also especially grateful to Khronos, Wikiepdia, and stackoverflow for answering many of my specific questions while writing the MR.
---
Squashed commit of the following:
commit 300505e7305a2fdac722a808ee8538323f215f39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 18:46:25 2020 +0200
Fixing cargo doc and typo in CHANGELOG.
commit ec0aeb18e8499d7d84ef818331b4b65c3d76cea6
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 15:38:50 2020 +0200
Hopefully final commit for the LOD branch.
commit 5e8ea0b1eaac02903a02feb2eb038d195de4872f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 10:14:26 2020 +0200
Falling back to power as stopgap.
commit e44a1cbf46504ee9931a01bdc9033e145500d557
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 09:25:41 2020 +0200
Address imbris feedback.
Temporarily disables shiny water, lowers max VD.
These restrictions will be lifted soon after merging.
commit 561e25778a108ac3712f5ec2ce3a51234c4430d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 08:31:13 2020 +0200
Tweaking shaders a bit.
commit 7d19259078ce0dd7b3742ad7d0cb3fab3ece3fdc
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:59:43 2020 +0200
Fix view example as well.
commit 051cd4934e0fad2c0b15db4380a4189fa318679f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:29:06 2020 +0200
Fix meshing benchmark.
commit c95e07db3b4dcca285678985e65e31b927cb1c61
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 05:46:22 2020 +0200
Address MR feedback, fix scene clouds.
commit 1bfb816cabdb3ffc1e507a009c2d98696b4b573a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:39:36 2020 +0200
Incorporating Pfau's figure color changes.
New eyes and new humanoid colors.
commit 3f9b89a3ac7b3356b1dba0d1a8f6541357f81469
Merge: e2f5162e4 62c53963a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:29:41 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit e2f5162e4f96f4124aa43488f7245d341b3dcfd4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:28:38 2020 +0200
World colors are all hotloadable.
They live in assets/world/style/colors.ron.
Only a small handful of hardcoed colors remain in World; they are either
part of the map, or difficult to disentangle from the rest of the
computation. Comments are made where appropriate.
commit 62c53963abe1975009d34a8f9515a355bef24f31
Author: Marcel Märtens <marcel.cochem@googlemail.com>
Date: Wed Aug 19 15:59:00 2020 +0200
replace pretty_env_logger with tracing
commit 5b1625f99d9586fe80e2232f583ec5af9f953099
Merge: d71003acd 4942b5b39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:15:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit d71003acdabeff970b3928e97c26af6847b5b78e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:14:34 2020 +0200
Hotloading colors, part 1: colors in common.
Currently, this just entails humanoid colors. There are only three
colors not handled; the light emitter colors in
common/src/comp/inventory/item/tool.rs. These don't seem important
enough to me to warrant making hotloadable, at least not right now, but
if it's needed later we can always add them to the file.
commit 63b5e0e553eb2ea49276f192a6fc7dd65254270d
Merge: c32b337a4 6d2c4b9c1
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 13:05:37 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c32b337a46e10d9de473d178a94a3ccd61c39bb3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:52:04 2020 +0200
Fixing LOD grid, for real.
commit a166ae0360395387e09fb35a1f84210c2ce5ec24
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:28:05 2020 +0200
Addressing imbris's initial feedback.
Fixes two minor bugs: explosion particles were no longer spawning
randomly, and LOD grids were not perfectly even.
commit 4cbad004f44060994252dd3d38647a14a589712f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:27:58 2020 +0200
Bumping nightly per request.
commit 548680276aac77c25d43d16b5622f847d474dbef
Merge: acc098604 8f8b20c91
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:26:06 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit acc0986040589a3492f88a740bc3c3fc693b26d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:28:32 2020 +0200
Lower resolution due to lying drivers.
commit d3b878de2a52c358d2944a6bbd0555dad7fbdb10
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:15:38 2020 +0200
Fix issues msh encountered with Intel 4600.
commit 10245e0c1b0cb6fae10d86409435364edc6102ef
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 21:15:02 2020 +0200
Merge more models into one mesh than we did previously.
commit 3155c31e663c52ae5c3a53d5fb5665892a1a498a
Merge: 7204cc8a7 3c199280e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:35:22 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7204cc8a7a4f74a30306bd205d9834fee4bb944f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:34:43 2020 +0200
Fix not yet done NPC animations.
This forces them all to be the idle animation if not specified.
This fixes issues where you'd have giant NPCs in water.
commit bc83360f2a08918f19d417b5f772e1ff554dba08
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 19:36:37 2020 +0200
Try to fix some bugs:
- Z fighting with LOD terrain and water.
- Audio SFX not playing.
commit 1fd104aa603bf3781b6526a5cada46aeca3049dd
Merge: 862df3c99 7c2c392a3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 12:02:31 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 862df3c9976c4da9bd7cfd784f1a85973127968a
Merge: 0a4218ed9 75c1d4401
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 05:52:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0a4218ed9d541a2b34c133351bea38a99ddf4ea7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 22:27:14 2020 +0200
Fix particle depth.
commit f51dfdeb442d0dd5243dd2f344fa4be295bd0875
Merge: c6251a956 5e6dc0471
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:19:04 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit c6251a956ad376400dca5c23420cf8d213dc8fdf
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:15:46 2020 +0200
Cache figures more intelligently.
Cache figures for longer, and don't cache character states for the
player except where they actually affect the rendered model.
commit 0ed801d5404982c6fb63b1eaa4567d908b294c9d
Merge: c11b9bdf0 eea64f78f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 16:32:24 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c11b9bdf0a53bf9884d2f5a48fec9b01d582df1a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 11:47:15 2020 +0200
Remove unneeded Clippy annotation.
commit 16aa9ef40af56d69289d00aafb3deadfb8bd4f35
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 8 00:53:02 2020 +0200
Fix hotloading and Clippy.
commit 3dc973e0be5b758da1e9805eb764ad401374cd0c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 23:50:27 2020 +0200
Major speedups with SIMD.
commit fba64a7d93d5a96077ce87287bbce6ab9b7fbcae
Merge: 76429d00e d1e10b178
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:19 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 76429d00eea00d212fbd672a84ee91e75b19b938
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:10 2020 +0200
Add clippy.toml.
commit c79f512f84dbb83cb82b7954db68ff241dfd8e41
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 11:55:20 2020 +0200
Fix all clippy issues, clean up Rust code.
commit 6f90e010b3fbefb53b0d632e819931350015b6b8
Merge: 77a8c7c26 5929cfa5c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:30 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 77a8c7c267d3f44a1a62bd6b2274359973c5e4d4
Merge: b44e44232 44febaabd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:10 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 5929cfa5c713aa392110bbb62407f76caf53c3df
Author: jshipsey <jshipsey18@gmail.com>
Date: Thu Aug 6 20:47:27 2020 -0400
fixed in-hand arrow bug
commit b44e442325d828f1cd564d66908f89d09e80474b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 6 13:40:35 2020 +0200
Miscellaneous performance improvements.
commit be37acf287c1360d8085862526ac3365ffd1d768
Merge: 125d7fc6c c11876547
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 05:49:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 125d7fc6c4dcd8c8c5f27b8268a4d64f409f3644
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 04:55:31 2020 +0200
Abstract over simd vs. repr_c vectors.
Also some minor improvements to Event size.
commit d4d4956e9252e1241ce110b2aa85076c6b1e2a23
Merge: 5f3b7294a aced5f979
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:56:54 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 5f3b7294af1f8533edc2620b58863c248e2b07af
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:43:52 2020 +0200
Fix formatting issues I missed before.
commit a428a3ebba70dcab63dd0f8cd983120c90617271
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:41:51 2020 +0200
Fix clippy warnings, part 1.
There aer still a bunch of type too complex and
function takes too many arguments warnings that I'll fix later
(or ignore, since in the one case I did fix a function takes too
many arguments warning I think it made the code *less* readable).
commit ba54307540ed8a937ac08209730284fc653af85b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 30 13:22:42 2020 +0200
Fix light animations so they are removed when the light turns off.
commit 7e0f4bcbf0f4717145d8beac40d52e3acebbe2aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 21:10:20 2020 +0200
Fix crash in edge case for pixel art.
commit 56da06f7a351e2b949e9b014a90b974d511a0924
Merge: cf74d55f2 9f53a4a19
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:56:52 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:29:52 2020 +0200
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
The first concern was addressed by fixing the dimensions of the map
images drawn from the UI (so that we always use a square source
rectangle, rather than a rectangular one according to the dimensions of
the map). We also fixed the way rotation was done in the fragment
shader for north-facing sources to make it properly handle aspect ratio
(this was already done for north-facing targets). Together, these fix
rendering issues peculiar to rectangular maps.
The second and third concerns were jointly addressed by adding an
optional border color to every 2D image drawn by the UI. This turns
out not to waste extra space even though we hold a full f32 color
(to avoid an extra dependency on gfx's PackedColor), since voxel
images already take up more space than Optiion<[f32; 4]> requires.
This is then implemented automatically using the "border color"
wrapping method in the attached sampler.
Since this is implemented in graphics hardware, it only works (at
least naively) if the actual image bounds match the texture bounds.
Therefore, we altered the way the graphics cache stores images
with a border color to guarantee that they are always in their own
texture, whose size exactly matches their extent. Since the easiest
currently exposed way to set a border color is to do so for an
immutable texture, we went a bit further and added a new "immutable"
texture storage type used for these cases; currently, it is always
and automatically used only when there is a specified border color,
but in theory there's no reason we couldn't provide immutable-only
images that use the default wrapping mdoe (though clamp to border
is admittedly not a great default).
To fix the maps case specifically, we set the border color to a
translucent version of the ocean border color. This may need
tweaking going forward, which shouldn't be hard.
As part of this process, we had to modify graphics replacement to
make sure immutable images are *removed* when invalidated, rather
than just having a validity flag unset (this is normally done by
the UI to try to reuse allocations in place if images are updated
in benign ways, since the texture atlases used for Ui do not
support deallocation; currently this is only used for item images,
so there should be no overlap with immutable image replacement,
so this was purely precautionary).
Since we were already touching the relevant code, we also updated
the image dependency to a newer version that provides more ways
to avoid allocations, and made a few other changes that should
hopefully eliminate redundant most of the intermediate buffer
allocations we were performing for what should be zero-cost
conversions. This may slightly improve performance in some
cases.
commit ad18ce939940a8c697270f6e9b94db9942fd8295
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 13:21:09 2020 +0200
Fix continent scale hack.
commit 36b1cb074f5b195aebd7dbbc3da7f0246a1a18ec
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 12:11:40 2020 +0200
Enable loading different sized maps without a recompile.
We may want to tweak the effects of the continent_scale_hack.
commit 13b6d4d534cc4814b7cb3294ca41bbfea0a6b186
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 10:55:48 2020 +0200
Removing WORLD_SIZE, part 1.
Erased almost every instance of WORLD_SIZE and replaced it with a local
power of two, map_size_lg (which respects certain invariants; see
common/src/terrain/map.rs for more details about MapSizeLg). This also
means we can avoid a dependency on the world crate from client, as
desired.
Now that the rest of the code is not expecting a fixed WORLD_SIZE, the
next step is to arrange for maps to store their world size, and to use
that world size as a basis prior to loading the map (as well, probably,
as prior to configuring some of the noise functions).
commit 30b1d2c6428230a9eaa0d749cdcbbd6f1cbccd78
Merge: 7d56ba31b 1377b369f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:58 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 7d56ba31b445441461b28a07fc495d7d4f047c17
Merge: 2101113b4 598f14b25
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 1377b369f6db2258e910d467a5740f31789e3ded
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sun Jul 19 23:25:38 2020 +0200
more saturated pumpkins
commit ae8d50527f93bb0616c2ad46ce4dacb63bc37c6d
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sat Jul 18 20:29:56 2020 +0200
acacia models
commit 2101113b467e691de787392d7f20f1745f5637bd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 18 18:55:25 2020 +0200
Higher detail LOD.
commit add2cfae04b4385fa5590e11e2bd5229d9dee0aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 16 01:57:39 2020 +0200
Revert some irrelevant stuff.
commit 2e2ab3dc1eaa59a4aef7f8d34a53d8aae4c8553a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 15 13:30:49 2020 +0200
Fixing various things about shadows.
* Correcting optimal LISPSM parameter.
* Figure shadows are cast when they're not visible.
* Chunk shadows stay cast until you look away.
* Seamless cubemaps for point lights.
* Etc.
commit 6c31e6b56217274285b597af297036691ea5d897
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 19:50:26 2020 +0200
Fix shadow creation.
commit 6332cbe006115ae205597529cd8bbccd146c2cca
Merge: be438657c 930e0028b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:47:00 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit be438657c33d7b5bfb0a9582c3ed3fd366637323
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:28:08 2020 +0200
Tweaks to shadows.
Added shadow map resolution configuration, added seamless cubemaps,
documented all existing rendering options, and fixed a few Clippy
errors.
commit 23b4058906013c7d2a40c286e20e32c5fbd897ed
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 10:11:19 2020 +0200
Fix moon, use nonlinear noise for terrain.
Note that the latter has a bit of performance cost.
commit 7fbe5cbfbb9dc29607957b8e62f432a4deed193d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:23:02 2020 +0200
Address lies about max texture size.
commit bcfc62b5e13a1cdd83f57535fde4694720bebfd9
Merge: 75e3626a7 18a08e8fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:22:08 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 75e3626a785919f43fdcf2127c2b10e3e4df2f9f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:21:52 2020 +0200
OpenGL 3.3 minimum.
commit 18a08e8fe2739f02af99a5d2cb4e7c38c49e858b
Author: Monty Marz <m.marzouq@gmx.de>
Date: Tue Jul 7 23:57:52 2020 +0200
settings localization
commit 90c5d1ca3620092bc3ae10b2211489eb1cf6f5e8
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 21:11:48 2020 +0200
Lower near distance.
commit 0e66f02b25aaddaa2dfddbbc89cd67de54a9a7b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 20:09:01 2020 +0200
All sprites sway in the wind now.
commit db1401a6910bf42dcf502462c90038752ff5fbdb
Merge: 69e508d8c e8b4b29d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 19:34:17 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 69e508d8c94d8973033817ca86f357e466fc7c4d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 18:41:37 2020 +0200
Make it easy to switch to SIMD for math.
commit ffe0f5928c7a7e87d00cb5426b3b1d831d7e02fd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 21:21:12 2020 +0200
Fix some issues with underwater rendering.
commit bfda6da42f38fd02c31ee92c81ab785a3e50c2a0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 19:17:59 2020 +0200
Fix some minor display issues.
commit 0ed752e087968cf901301884aaeae698e32ef8a5
Merge: ccc6a06a8 518edcb85
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:14:21 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit ccc6a06a8d4504d6b9f7af7905a414d2ee06ab76
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:04:34 2020 +0200
Some minor changes.
commit 4e020246702889269efe1a191788992164c508d6
Merge: 50a64d927 e05c9267a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 16:17:40 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 50a64d927e6c4f4b0e4688e4cbfca694bc3f922a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 13:07:03 2020 +0200
Fix far plane.
commit 7dd06da34cae8f9ea3b6c889fe965181f3fd3949
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:25:35 2020 +0200
Add shadows.glsl.
commit 618a18c998778bf871b905a74657440fcc384c80
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:10:22 2020 +0200
Adding shadows, greedy meshing, and more.
commit eaea83fe6a5cb1cb0ba8beef888183c718258496
Merge: 267018495 2f89b863e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 22:47:07 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 2670184954a13e4a9e7a4e35ba79aac0c5fac2f7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 21:20:01 2020 +0200
Make civsim and sites deterministic.
For anything in worldgen where you use a HashMap, *please* think
carefully about which hasher you are going to use! This is
especially true if (for some reason) you are depending on hashmap
iteration order remaining stable for some aspect of worldgen.
commit f8376fd5dc72b4a9c2f51a6b4570d59c8b8e9343
Merge: 654f7e049 cdee191dd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 17:53:57 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 654f7e049258d9da27c09608bbe6a46ffa8787e5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed May 20 21:22:30 2020 +0200
Correct backface culling.
commit 560501df05ca725409b0f2e4eb31bdfdc15fd0c7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue May 19 17:22:06 2020 +0200
Greedy messhing for shadows.
commit a4d87e1875ca543436e6bbbeb20348facc5a52d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun May 17 05:59:00 2020 +0200
Shadow maps work for lantern.
commit 243d0837b8a3b08172c9a3c348d964d7ddc2a0a8
Merge: 04382dc28 71dd520cd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:53:13 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 04382dc28632b6c66e8821f6870c0daaa1c1901a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:22:17 2020 +0200
WIP: better graphics config, better LOD, shadow maps.
commit 22ddbad3eb32bfa70f0932176022208fe67ded81
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 18:54:09 2020 +0200
Minor shader fixes.
commit 746a10e8d01ac235f994b0cde78fa48998602a1f
Merge: 0f4a0e763 40ab94673
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 04:02:09 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0f4a0e763db3afbdc4fb0558611f38326ca87151
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 23:03:24 2020 +0200
Switch back to pop-in terrain.
commit dd74fa7e4a53667b38811d7aec58d7f6a68889bb
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 22:58:55 2020 +0200
LOD shading closer to voxel shading.
commit ef67bd58ba0bdaf622b078892d768263b6cba268
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 28 20:49:03 2020 +0200
Experimental underwater lighting.
commit 2c5ad9d07605e80d5fd5679dd3a5d70c605b86a9
Merge: 748279835 303967a6f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 22:35:24 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7482798354eda18c8207950080fc24d443a369de
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 21:59:55 2020 +0200
Replace discard in figure-frag.
commit d83b4ae69be4912f69bf7835f509c68a1c7770a4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:45:57 2020 +0200
Fix sprite lighting, HDR from focus_pos.
commit 0594238004f116274905fa0ed7c2b6c417ed1d29
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:14:10 2020 +0200
Proper HDR from point lights.
commit 48c93d2b41ce5743103d18e76cc228f5ac766492
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 14:01:43 2020 +0200
Brighter ambiance, darker LOD shadows.
commit e0452e895ccfa8a43f368cae3b8b8aedc24dad93
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 13:13:23 2020 +0200
More proper HDR.
commit 4c6da3ed16cfeebb455e40da5f557b4af9a499d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 00:13:10 2020 +0200
Trying LOD noise.
commit 682a3d74c85df5503ffe1fc1cc891bce789df1ad
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 23:11:08 2020 +0200
Fix LOD heights in towns.
commit cc39e5734e8b18f9077bf42e66337c1319dd6b6e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 21:01:23 2020 +0200
More LOD fixes.
commit 8116b21c2e51c836e77894e309ac273caf2917b3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:54:43 2020 +0200
I like this coloring.
commit bc2560ea90b36f4b46190005344232d993043ac3
Merge: 14effdd5d e690efe71
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:48:33 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 14effdd5db8747fcf3eb34f03b46b7792e92d1c5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:24:35 2020 +0200
Re-saturate.
commit 48a643955d4435b78179acba0beb4a979905cc31
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:23:57 2020 +0200
Various fixes.
commit f7b497a0c25f4ad4682c71dd1ed6f608052feb9b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 03:22:49 2020 +0200
Render figures again.
commit 44e4aad48deba8266b9f8bdfd3db096b381f5327
Merge: e6f0a5a98 9ec319a18
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 02:01:04 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit e6f0a5a981a82533ba188fff0a54ce98577bb152
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 24 16:12:20 2020 +0200
Add atmospheric scattering.
commit f2953087f691a8edbc001cb98ebf5059fc6f8ac0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 23 00:01:20 2020 +0200
Fix shadowing for specular reflections.
commit ddd4a67a9799b8d08c7dc0c2bec90621c2bed0e3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Apr 22 22:56:12 2020 +0200
HDR fixes.
commit 1015e60deef3c447381996277df7496707a63bd0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 21 18:25:19 2020 +0200
More lighting changes.
commit 80c264abd111fb237e57843efcb5c071d4f84613
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 13 00:29:59 2020 +0200
Lighting experiments.
commit 8414987e589dd5102bad89762a3adaccc0bfe957
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 9 02:38:40 2020 +0200
WIP -- lighting changes and soft shadows.
commit 9cd2b3fb0d6b49776c6dfe463e4169637250b11a
Merge: c7ea687eb 8b149ad11
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:29 2020 +0200
Merge branch 'sharp/new-lighting' into sharp/small-fixes
commit c7ea687ebbc5aace1b455f134a5bf49ce2c7434a
Merge: 476441531 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:02 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 8b149ad11ad4bb75018fcf9519baec27d1c95951
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:32:39 2020 +0200
Trying out a new lighting model.
commit b0ac9f36f755dd06f7c17c46150568064790864f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 07:56:11 2020 +0200
Use bicubic interpolation for terrain.
commit f6fc9307a121514b614bc50ef8eb055953e7da8a
Merge: 33140a295 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 05:01:41 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 4764415312aae6e9ac2d00e86e84577cb958f1ab
Merge: ed2d0111d 13388ee6a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 04:54:48 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 13388ee6a42943f3f79a9cb488346cef18e272fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 20:30:08 2020 +0200
Various fixes (to coloring and to soft shadows).
commit fbd084a94a067082a87cd6d28b82054709bc9265
Merge: 5a089863b 4fdf6896a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 18:50:38 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/map-colors
commit ed2d0111d994262ae836d84d1fe5a45e4de72a0b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 06:49:27 2020 +0200
Combining colors and LOD.
commit 88342640c6b835114d01c797b89fdede3b0a2108
Merge: 33140a295 5a089863b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:49:20 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 33140a2951b8212725f42c758b277aaec4d888f7
Merge: 4c65a5aed f34d4b379
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:36:21 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 5a089863beb01d4794bbe3580ada47b278715ea2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 03:17:49 2020 +0200
Making maps brighter.
This is probably not the right way to do it, but oh well!
commit 32b2c99109dd486aa922886081068f9c550c83f2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 02:46:36 2020 +0200
Horizon mapping and "layered" map generation.
Horizon mapping is a method of shadow mapping specific to height maps.
It can handle any angle between 0 and 90 degrees from the ground, as
long as know the horizontal direction in advance, by remembering only a
single angle (the "horizon angle" of the shadow map). More is explained
in common/src/msg/server.rs. We also remember the approximate height of
the largest occluder, to try to be able to generate soft shadows and
create a vertical position where the shadows can't go higher.
Additionally, map generation has been reworked. Instead of computing
everything from explicit samples, we pass in sampling functions that
return exactly what the map generator needs. This allows us to cleanly
separate the way we sample things like altitudes and colors from the map
generation process. We exploit this to generate maps *partially* on the
server (with colors and rivers, but not shading). We can then send the
partially completed map to the client, which can combine it with shadow
information to generate the final map. This is useful for two reasons:
first, it makes sure the client can apply shadow information by itself,
and second, it lets us pass the unshaded map for use with level of
detail functionality.
For similar reasons, river generation is split
out into its own layer, but for now we opt to still generate rivers on
the server (since the river wire format is more complicated to compress
and may require some extra work to make sure we have enough precision to
draw rivers well enough for LoD).
Finally, the mostly ad-hoc lighting we were performing has been (mostly)
replaced with explicit Phong reflection shading (including specular
highlights). Regularizing this seems useful and helps clarify the
"meaning" of the various light intensities, and helps us keep a more
physically plausible basis. However, its interaction with soft shadows
is still imperfect, and it's not yet clear to me what we need to do to
turn this into something useful for LoD.
commit f8926a5737ddc51f3d585c651a64c43677aae0f4
Merge: a1aee931e 875ae6ced
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Mar 13 13:32:42 2020 +0100
Merge remote-tracking branch 'origin/master' into sharp/map-colors
commit 4c65a5aed353b119aea65a2aaeb94549b67beb42
Author: Treeco <5021038-Treeco@users.noreply.gitlab.com>
Date: Mon Feb 24 16:48:05 2020 +0000
Made LOD setting slider exponential
commit 2fa7b2d20d7233dc8bfd64f9f7f54617575248f1
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 17:49:53 2020 +0000
Added mist to LoD
commit aab059a450b5f635777129ff82cc15b662965c3c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 15:14:06 2020 +0000
Added LoD slider
commit 779c36b538121c5ade3633ae5cb67bb14c8c3877
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:54:55 2020 +0000
Reduced cost of vertex pushing
commit 9fea150473906b166365b738ebcea07c697daf3d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:38:53 2020 +0000
Fixed maths, improved LoD resolution
commit 5481df38fea5bf183ff376a3337179cfaa5233dc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 11:22:50 2020 +0000
Dynamically relocate LoD vertices to enhance details
commit a3e36a50ababd615da7db1b26158c7906a5def01
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 18:13:51 2020 +0000
Simpler terrain spiral rendering
commit 255f450ae9ac8763db4bede075fb409161ed57cc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:53:17 2020 +0000
Better LoD precision
commit 3d027aebe812a5b8658a4eb8123dc9f61b3776d2
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:04:03 2020 +0000
Better falloff
commit be775c9484b457b2c0b1a494aec03392d0c70e76
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 15:30:45 2020 +0000
Applied good ideas from experimental branch
commit 58587b68545a23c5c04ab4574a4b94b3bc982246
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 16:15:13 2020 +0000
Minor fixes to LoD merging
commit 7b42aebd709c14df2db766aad61d9280ad24d84d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 15:04:44 2020 +0000
Capped LoD dragging
commit 8aafc559f87124e1ea5ca6e3ddc2aa0c242d793c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:54:37 2020 +0000
Better blending between LoD and terrain border
commit edd3455d5161792d87ddc8eadc0ecbad5532b284
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:40:19 2020 +0000
Fixed LoD z depth, added sea level offset
commit b9b06744620114dd5556e73f64fa93c145503a7c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:27:43 2020 +0000
Better LoD smoothing
commit a1aee931e790431560cd2d953ad61d9497072afd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Feb 21 14:52:17 2020 +0100
Adding shadows.
commit 2400786c13dd891c131ed86d48d05df516a8a778
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 13:48:40 2020 +0000
Use world map as LoD source
commit dbf650f504a4c25fbbc2096ac3616c736bf52d23
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Jan 20 00:48:14 2020 +0000
Better clouds at distance
commit 5e6f81b86cdb9730b9b056877b19257075fd5fa8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Jan 19 23:59:02 2020 +0000
sync
commit 745e7540ddb000cc645f612767b337c2ddc3f7c0
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 12:40:48 2019 +0000
Improved cloud falloff mist, faster noise sampling
commit f6a200d0cb866196ba57697466755f9e0c7ea5d8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 10:09:00 2019 +0000
Improved long-range depth precision, removed unnecessary LoD polygons
commit 63d1b2bb2292898d59fb4f4e502201103dfeb86f
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 20:57:46 2019 +0000
Working LoD shader
commit f13d98ee3e58f881e8b978861a67663b59ed91ec
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 11:03:40 2019 +0000
LoD first attempt (stack overflow issue)
2020-08-20 18:34:59 +00:00
|
|
|
|
block::BlockGen,
|
2020-04-17 23:29:01 +00:00
|
|
|
|
civ::Place,
|
(See sharp/lod-history) LOD, shadows, greedy meshing, new lighting, perf
---
Pretty much a Veloren fork at this point. Here's a high level overview of the changes (will be added to CHANGELOG just before merge).
At a high level this MR incorporates roughly two groups of changes.
The first group consists of new game features: more flexible map sizes, level of detail terrain, shadow maps, and a new lighting
engine. This is "feature work" that (mostly) only adds new things to Veloren, and mostly shouldn't affect old stuff.
The second big group of changes are those addressing the fallout from all the new features. These include performance fixes of
various sorts: the addition of multiple graphics options and optimization of the cheap ones to avoid work, switching all voxel
models to use some variant of greedy meshing, switching over much of our CPU-side vector math to exploit SIMD instructions
(coinciding with a fork of `vek`), and a rewrite of how the UI handles text rendering (coinciding with updates to our fork
of `conrod`). Making Veloren's hardcoded colors appear correct under the new lighting engine also required considerably
changes (TODO: Fill in this section when it's complete).
The second category of changes often heavily touches code owned by other people, including frequently modified code "owned" by a
handful of people, so I recommend that this code be reviewed particularly carefully.
---
At a high level (each will be described in more detail below):
- The world map has been refactored.
- The world size is no longer hardcoded (@zesterer).
- The map generation code was made generic to allow using it outside of the `world` crate (@zesterer).
- On world creation, we now compute *horizon maps* (@zesterer).
- The way we pass the world from the server to the client has been updated (@xMAC94x).
- Artifacts related to image rotation were fixed (@imbris).
- Multiflow rivers were enabled (@zesterer).
- In the process of making changes related to the world map, various incidental fixes and optimizations were required.
- The new *level of detail* feature was added (@zesterer wrote part of this and has checked out the rest).
- A new LOD terrain rendering step was added to the pipeline.
- The LOD terrain quality was made configurable via a graphics setting.
- Horizon maps were used to cast shadows from LOD chunks on both LOD and non-LOD terrain.
- A "voxelization" effect was incorporated into rendered LOD terrain to make it blend better into the world.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Veloren's lighting has been completely overhauled (@zesterer has already checked most of this out).
- A semi-accurate index of refraction was assigned to our materials.
- A new, more realistic, physically based approach to lighting was used using the *Ashikhmin Shirley* BRDF.
- We emulate *atmospheric scattering* using equations designed for measuring solar panel light exposure.
- We attempt to compute *realistic light attenuation* in water using its real material properties.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Point and directional lights now cast realistic shadows, using *shadow mapping.* (@imbris, @zesterer, @Treeco, @YuriMomo)
- Point light shadow maps were added to the rendering pipeline, using geometry shaders and *seamless cube maps*.
- Directional light shadows were added to the rendering pipeline, using LISPSM together with disabling *depth clamping*.
- "Shadow-only" chunks and NPCs were added to prevent shadows from models behind you from disappearing.
- In the process of making changes related to shadow maps, various incidental fixes and optimizations were required.
The addition of shadow maps, LOD terrain, and the new lighting all led to significant performance degradation, on top of other
changes happening in master. Therefore, a large number of performance improvements were also needed:
- The graphics options were made much more flexible and configurable, and shaders were optimize.
- New options were provided for how to render lights and shadows (@Pfauenauge, @zesterer).
- Graphic setting storage and configuration were overhauled to make adding new features easier (@Pfauenauge, @imbris).
- Shaders were rewritten to utilize GLSL's preprocessor to avoid overhead (@zesterer, @YuriMomo).
- In the process of making changes related to providing additional rendering options, various incidental fixes and optimizations were required.
- Voxel model creation was switched to use *greedy meshing.*
- A new voxel meshing method, greedy meshing, was added (@imbris).
- Uses of the older meshing methods were migrated to use greedy meshing (@imbris, @jshipsey, @Pfauenauge).
- New restrictions were added to terrain, figure, and sprites to future proof them for further optimizations (@jshipsey, @Pfauenauge, @zesterer).
- Most positions are now relative to either chunk or player position for better precision (@imbris, @zesterer, @scottc).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- Animation and terrain math were switched to use SIMD where possible.
- Fixes were made to vek to make its SIMD feature usable for us (@zesterer, @imbris).
- The interface and types used in bone animation were changed in various ways (@jshipsey, @Snowram, @Pfauenauge).
- Redundant code generation for body animation is now partly taken care of by a macro (@jshipsey, @Snowram, @Pfauenauge).
- Animation code was modified to to use vek's SIMD representation where possible (@jshipsey, @Snowram, @Pfauenauge).
- Terrain meshing code and shadow map math were also modified to use vek's SIMD representation (@imbris).
- SIMD instruction generation was enabled (@YuriMomo, @jshipsey, @Snowram, @imbris, @Angelonfira, @xMAC94x).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- The way we cache glyphs was completely refactored, fixed, and optimized.
- Our fork of `conrod` was optimized in various ways (@imbris).
- Our fork of `conrod` now exposes whether a widget was updated during the current frame (@imbris).
- Our use of the glyph cache was rewritten for correctness (@imbris).
- A *text cache* was introduced that lets us skip remeshing glyphs that have not changed (@imbris).
- Various changes were made to reduce pressure on the glyph cache, with more planned (@imbris, @Pfauenauge).
- In the process of making changes related to the glyph cache, various incidental fixes and optimizations were required.
- Colors were changed to keep Veloren's look consistent with master.
- Some older tree models were brought back (@Pfauenauge).
- TODO(@Sharp): All hardcoded colors were extracted and made hotloadable.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Hardcoded colors were fixed to conform to Veloren's style.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Color models were fixed to conform to Veloren's style.
A detailed description of the involved changes follows.
---
- The world size is no longer hardcoded. All functions dependent on world size now take a `WorldSizeLg`, which holds the base 2 logarithm of each actual world dimension and is guaranteed to maintain certain properties (outlined in `common/src/terrain/map.rs`). Additionally, many utility functions that utilize the world size were moved into `common` as well (mostly `common/src/terrain/mod.rs`). Finally, the world map format was updated in order to store its size explicitly, with a migration path from the old format that should work whenever the old formatted map was a square (practically always). See `world/src/sim/mod.rs` for these changes.
- The map generation code was made generic to allow using it outside of the `world` crate. The parts of the map generating code that do not need to query the world were moved over to `common/src/terrain/map.rs`, allowing them to be used from the client without creating a dependency on `world`. The rest of it was turned into helper functions in `world/src/sim/map.rs`, which can be passed as closures to the generic map generation code to complete its construction. This also means that colors are now passed in separately to the map generation function. See <https://veloren.net/devblog-78/> for more details.
- On world creation, we now compute *horizon maps*. See the function in `world/src/sim/util.rs`.
Given a height map and a plane intersecting that height map, our horizon maps allow us to encode enough information to reconstruct shadows for each point on the height map using only the *horizon angle* (the angle at which the sun starts to become visible). As Veloren's sun only covers one plane, this is sufficient for encoding sun shadows for LOD terrain, by encoding two angles per chunk (one for each 90 degrees the sun covers). We can also use this for the moon, if we want, since the moon follows the same path. Additionally, we store the *height* of the furthest occluder, to try to make the shadows volumetric; so this means 4 bytes in total for each chunk.
Support for horizon maps has been merged into the map functionality in common as well.
- The way we pass the world from the server to the client has been updated. Rather than passing the prerendered map, we instead pass three maps with values for each chunk; one with the color information, a second with altitude information, and a third with horizon map information. We then reconstruct the map on the client, together with some additional information we send from the server (like the sea level and maximum height). See `common/src/msg/server.rs` for a detailed description of the format of `WorldMapMsg`, and `server/src/libr.rs` and `client/src/lib.rs` for details of the map construction and parsing.
- Artifacts related to image rotation were fixed. See the commit message for commit SHA `cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e` for a detailed explanation. This involved changes to shaders, the addition of a new type of graphic (also reflected in the graphic cache) that allows specifying a border color (which automatically makes the associated texture immutable), and some related fixes. I reproduce the first two paragraphs of the MR description as well:
```
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
```
- Multiflow rivers were enabled.
This does not really need to be part of this MR, and would be easy to revert, but since it seemed to provide a nice improvement it's currently packaged with it.
We already computed multiple outflows from each chunk for erosion purposes long before this MR.
However, we never modified river rendering to be able to handle this case (just a single downhill river flow is complex enough!) so this was not exposed when deciding which chunks were rivers.
Now that
- In the process of making changes related to the world map, various incidental fixes and optimizations were required. Some examples of fixes include making sure terrain is never lowered to below sea level (to make the shadow maps report correct values), fixing map altitudes and colors to understand things like cliffs and "block level" coloring (that doesn'te xist on the column level), and fixing a crashbug when rendering images for the UI where source pixels are strongly rectangular. Some examples of related performance fixes include avoiding allocating a fresh vector for all the maps (i.e. copying it over to change the format from `[u32; n]` to `DynamicImage` and then copying again to convert to `RgbaImage`), and instead using the `gfx::memory::slice` function to accomplish the same thing. These sorts of changes are spread all arond the code.
This includes the additon of a new scene, `voxygen/src/scene/lod.rs`, a new pipeline `voxygen/src/render/pipeline/lod_terrain.rs`, and new shaders `assets/vxygen/shaders/lod-terrain-vert.glsl` and `assets/vxygen/shaders/lod-terrain-frag.glsl`, as well as associated changes to the renderer in `voxygen/src/render/renderer.rs`.
The main idea behind our initial approach to LOD was to take the world data we now get from the server (altitude, color, and horizon mapping).
- Some previously computed values were turned into shader uniforms for better prediction on weak processors. (@zesterer)
- Calls to power or trig functions were removed or replaced with multiplications, where possible.
- After some deliberation
- To properly handle sprite "waving" for nearby sprites,
We explicitly designed the greedy meshing system with figures and sprites in mind.
In both cases, we want to be able to *efficiently* pack many different models into the same texture, especially in cases where we know
we will either not be removing any of the grouped-together from the models from the texture, or will remove all of them at once (so
they can be packed into some specific subtexture).
For sprites, since we know every model in advance and never intend to deallocate them, we currently pack them all as efficiently as
possible into one giant tetxure atlas. However, in the future we might opt to pack them slightly less efficiently in exchange for
shrinking the sprite vertex size.
For figures, we pack all the textures for each *model* into the same atlas.
is a global texture atlas used for every sprite, and for figures which is why we have the ability to mesh multiple
models to the same texture area (using the simple texture atlas allocator) without requiring intermediate vector allocations.
This is accomplished by delaying the time when we actually write the color and light data to the texture until *after* all the
model vertices have been meshed; then, we can just allocate the whole color/light array at once, making the atlas we use an
exact fit. In computer science-y terms, we accomplish this delay by, after we perform the initial greedy meshing (without
texture information), not continuing to create the texture data, but instead constructing a *continuation*--that is, a function
that, when called, will execute the rest of the computation. We push this continuation (which in Rust terms is a `FnOnce` closure
that takes the `ColLightsInfo` that it is supposed to write to as context) onto a
onto a vector
resizing. To allow for suspended writes to texture data, Rust pointed out to me that the continuation that would eventually write the color and light data to the texture atlas (the one that is shared by all models sharing the same greedy mesher) would have to *own* whatever data it mshed. Because we often generate the model data to mesh as a temporary in `voxygen/src/load.rs`, the
- Matrix multiplications in the shader were reduced for figure data (@zesterer).
- Vertex "waves" for fluid data were removed.
- Terrain "bending" near edges was removed.
- Scaling was fixed to make sure empty space was not introduced in a space previously occupied by a block. It was also changed to take ownership of its voxel data,
rather than sharing it, to let it be used with meshing.
- Rust's nightly version was bumped in order to use the `array_map` function, which lets us reuse more code between the simple map and `FigureModelCache`.
- PositionedGlyph::standalone.
---
I tried to cite sources in many cases[^realtime],[^lloyd],[^lispsm],[^pbrt],[^greedy],[^tjunctions]
where I needed features from elsewhere but I am particularly grateful for the following resources,
esepcially where they have accompanying source code. I linked all of them that are accessible to the public (those that are not were
obtained through legal means).
[^realtime]: Eisemann, Elmar, Michael Schwarz, Ulf Assarsson, Michael Wimmer. Real-Time Shadows. A K Peters/CRC Press (T&F), 20160419.
[^lloyd]: Lloyd,B. 2007. [Logarithmic perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). PhD thesis, University of North Carolina.
[^lispsm]: Wimmer, M., Scherzer, D., and Purgathofer, W. 2004. [Light space perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). In Proceedings of Eurographics Symposium on Rendering 2004, pp. 143– 152.
[^pbrt]: Pharr, Matt, et al. [http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf](Physically Based Rendering: From Theory to Implementation). Third edition, Morgan Kaufmann Publishers/Elsevier, 2017.
[^greedy]: mikolalysenko. “Meshing in a Minecraft Game.” 0 FPS, 30 June 2012, <https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/>.
[^tjunctions]: blackflux. “Meshing in Voxel Engines – Part 1.” Blackflux.Com, 23 Feb. 2014, <https://blackflux.wordpress.com/2014/02/23/meshing-in-voxel-engines-part-1/>.
I am also especially grateful to Khronos, Wikiepdia, and stackoverflow for answering many of my specific questions while writing the MR.
---
Squashed commit of the following:
commit 300505e7305a2fdac722a808ee8538323f215f39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 18:46:25 2020 +0200
Fixing cargo doc and typo in CHANGELOG.
commit ec0aeb18e8499d7d84ef818331b4b65c3d76cea6
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 15:38:50 2020 +0200
Hopefully final commit for the LOD branch.
commit 5e8ea0b1eaac02903a02feb2eb038d195de4872f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 10:14:26 2020 +0200
Falling back to power as stopgap.
commit e44a1cbf46504ee9931a01bdc9033e145500d557
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 09:25:41 2020 +0200
Address imbris feedback.
Temporarily disables shiny water, lowers max VD.
These restrictions will be lifted soon after merging.
commit 561e25778a108ac3712f5ec2ce3a51234c4430d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 08:31:13 2020 +0200
Tweaking shaders a bit.
commit 7d19259078ce0dd7b3742ad7d0cb3fab3ece3fdc
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:59:43 2020 +0200
Fix view example as well.
commit 051cd4934e0fad2c0b15db4380a4189fa318679f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:29:06 2020 +0200
Fix meshing benchmark.
commit c95e07db3b4dcca285678985e65e31b927cb1c61
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 05:46:22 2020 +0200
Address MR feedback, fix scene clouds.
commit 1bfb816cabdb3ffc1e507a009c2d98696b4b573a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:39:36 2020 +0200
Incorporating Pfau's figure color changes.
New eyes and new humanoid colors.
commit 3f9b89a3ac7b3356b1dba0d1a8f6541357f81469
Merge: e2f5162e4 62c53963a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:29:41 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit e2f5162e4f96f4124aa43488f7245d341b3dcfd4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:28:38 2020 +0200
World colors are all hotloadable.
They live in assets/world/style/colors.ron.
Only a small handful of hardcoed colors remain in World; they are either
part of the map, or difficult to disentangle from the rest of the
computation. Comments are made where appropriate.
commit 62c53963abe1975009d34a8f9515a355bef24f31
Author: Marcel Märtens <marcel.cochem@googlemail.com>
Date: Wed Aug 19 15:59:00 2020 +0200
replace pretty_env_logger with tracing
commit 5b1625f99d9586fe80e2232f583ec5af9f953099
Merge: d71003acd 4942b5b39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:15:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit d71003acdabeff970b3928e97c26af6847b5b78e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:14:34 2020 +0200
Hotloading colors, part 1: colors in common.
Currently, this just entails humanoid colors. There are only three
colors not handled; the light emitter colors in
common/src/comp/inventory/item/tool.rs. These don't seem important
enough to me to warrant making hotloadable, at least not right now, but
if it's needed later we can always add them to the file.
commit 63b5e0e553eb2ea49276f192a6fc7dd65254270d
Merge: c32b337a4 6d2c4b9c1
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 13:05:37 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c32b337a46e10d9de473d178a94a3ccd61c39bb3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:52:04 2020 +0200
Fixing LOD grid, for real.
commit a166ae0360395387e09fb35a1f84210c2ce5ec24
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:28:05 2020 +0200
Addressing imbris's initial feedback.
Fixes two minor bugs: explosion particles were no longer spawning
randomly, and LOD grids were not perfectly even.
commit 4cbad004f44060994252dd3d38647a14a589712f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:27:58 2020 +0200
Bumping nightly per request.
commit 548680276aac77c25d43d16b5622f847d474dbef
Merge: acc098604 8f8b20c91
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:26:06 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit acc0986040589a3492f88a740bc3c3fc693b26d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:28:32 2020 +0200
Lower resolution due to lying drivers.
commit d3b878de2a52c358d2944a6bbd0555dad7fbdb10
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:15:38 2020 +0200
Fix issues msh encountered with Intel 4600.
commit 10245e0c1b0cb6fae10d86409435364edc6102ef
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 21:15:02 2020 +0200
Merge more models into one mesh than we did previously.
commit 3155c31e663c52ae5c3a53d5fb5665892a1a498a
Merge: 7204cc8a7 3c199280e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:35:22 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7204cc8a7a4f74a30306bd205d9834fee4bb944f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:34:43 2020 +0200
Fix not yet done NPC animations.
This forces them all to be the idle animation if not specified.
This fixes issues where you'd have giant NPCs in water.
commit bc83360f2a08918f19d417b5f772e1ff554dba08
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 19:36:37 2020 +0200
Try to fix some bugs:
- Z fighting with LOD terrain and water.
- Audio SFX not playing.
commit 1fd104aa603bf3781b6526a5cada46aeca3049dd
Merge: 862df3c99 7c2c392a3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 12:02:31 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 862df3c9976c4da9bd7cfd784f1a85973127968a
Merge: 0a4218ed9 75c1d4401
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 05:52:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0a4218ed9d541a2b34c133351bea38a99ddf4ea7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 22:27:14 2020 +0200
Fix particle depth.
commit f51dfdeb442d0dd5243dd2f344fa4be295bd0875
Merge: c6251a956 5e6dc0471
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:19:04 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit c6251a956ad376400dca5c23420cf8d213dc8fdf
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:15:46 2020 +0200
Cache figures more intelligently.
Cache figures for longer, and don't cache character states for the
player except where they actually affect the rendered model.
commit 0ed801d5404982c6fb63b1eaa4567d908b294c9d
Merge: c11b9bdf0 eea64f78f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 16:32:24 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c11b9bdf0a53bf9884d2f5a48fec9b01d582df1a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 11:47:15 2020 +0200
Remove unneeded Clippy annotation.
commit 16aa9ef40af56d69289d00aafb3deadfb8bd4f35
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 8 00:53:02 2020 +0200
Fix hotloading and Clippy.
commit 3dc973e0be5b758da1e9805eb764ad401374cd0c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 23:50:27 2020 +0200
Major speedups with SIMD.
commit fba64a7d93d5a96077ce87287bbce6ab9b7fbcae
Merge: 76429d00e d1e10b178
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:19 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 76429d00eea00d212fbd672a84ee91e75b19b938
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:10 2020 +0200
Add clippy.toml.
commit c79f512f84dbb83cb82b7954db68ff241dfd8e41
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 11:55:20 2020 +0200
Fix all clippy issues, clean up Rust code.
commit 6f90e010b3fbefb53b0d632e819931350015b6b8
Merge: 77a8c7c26 5929cfa5c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:30 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 77a8c7c267d3f44a1a62bd6b2274359973c5e4d4
Merge: b44e44232 44febaabd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:10 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 5929cfa5c713aa392110bbb62407f76caf53c3df
Author: jshipsey <jshipsey18@gmail.com>
Date: Thu Aug 6 20:47:27 2020 -0400
fixed in-hand arrow bug
commit b44e442325d828f1cd564d66908f89d09e80474b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 6 13:40:35 2020 +0200
Miscellaneous performance improvements.
commit be37acf287c1360d8085862526ac3365ffd1d768
Merge: 125d7fc6c c11876547
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 05:49:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 125d7fc6c4dcd8c8c5f27b8268a4d64f409f3644
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 04:55:31 2020 +0200
Abstract over simd vs. repr_c vectors.
Also some minor improvements to Event size.
commit d4d4956e9252e1241ce110b2aa85076c6b1e2a23
Merge: 5f3b7294a aced5f979
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:56:54 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 5f3b7294af1f8533edc2620b58863c248e2b07af
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:43:52 2020 +0200
Fix formatting issues I missed before.
commit a428a3ebba70dcab63dd0f8cd983120c90617271
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:41:51 2020 +0200
Fix clippy warnings, part 1.
There aer still a bunch of type too complex and
function takes too many arguments warnings that I'll fix later
(or ignore, since in the one case I did fix a function takes too
many arguments warning I think it made the code *less* readable).
commit ba54307540ed8a937ac08209730284fc653af85b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 30 13:22:42 2020 +0200
Fix light animations so they are removed when the light turns off.
commit 7e0f4bcbf0f4717145d8beac40d52e3acebbe2aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 21:10:20 2020 +0200
Fix crash in edge case for pixel art.
commit 56da06f7a351e2b949e9b014a90b974d511a0924
Merge: cf74d55f2 9f53a4a19
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:56:52 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:29:52 2020 +0200
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
The first concern was addressed by fixing the dimensions of the map
images drawn from the UI (so that we always use a square source
rectangle, rather than a rectangular one according to the dimensions of
the map). We also fixed the way rotation was done in the fragment
shader for north-facing sources to make it properly handle aspect ratio
(this was already done for north-facing targets). Together, these fix
rendering issues peculiar to rectangular maps.
The second and third concerns were jointly addressed by adding an
optional border color to every 2D image drawn by the UI. This turns
out not to waste extra space even though we hold a full f32 color
(to avoid an extra dependency on gfx's PackedColor), since voxel
images already take up more space than Optiion<[f32; 4]> requires.
This is then implemented automatically using the "border color"
wrapping method in the attached sampler.
Since this is implemented in graphics hardware, it only works (at
least naively) if the actual image bounds match the texture bounds.
Therefore, we altered the way the graphics cache stores images
with a border color to guarantee that they are always in their own
texture, whose size exactly matches their extent. Since the easiest
currently exposed way to set a border color is to do so for an
immutable texture, we went a bit further and added a new "immutable"
texture storage type used for these cases; currently, it is always
and automatically used only when there is a specified border color,
but in theory there's no reason we couldn't provide immutable-only
images that use the default wrapping mdoe (though clamp to border
is admittedly not a great default).
To fix the maps case specifically, we set the border color to a
translucent version of the ocean border color. This may need
tweaking going forward, which shouldn't be hard.
As part of this process, we had to modify graphics replacement to
make sure immutable images are *removed* when invalidated, rather
than just having a validity flag unset (this is normally done by
the UI to try to reuse allocations in place if images are updated
in benign ways, since the texture atlases used for Ui do not
support deallocation; currently this is only used for item images,
so there should be no overlap with immutable image replacement,
so this was purely precautionary).
Since we were already touching the relevant code, we also updated
the image dependency to a newer version that provides more ways
to avoid allocations, and made a few other changes that should
hopefully eliminate redundant most of the intermediate buffer
allocations we were performing for what should be zero-cost
conversions. This may slightly improve performance in some
cases.
commit ad18ce939940a8c697270f6e9b94db9942fd8295
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 13:21:09 2020 +0200
Fix continent scale hack.
commit 36b1cb074f5b195aebd7dbbc3da7f0246a1a18ec
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 12:11:40 2020 +0200
Enable loading different sized maps without a recompile.
We may want to tweak the effects of the continent_scale_hack.
commit 13b6d4d534cc4814b7cb3294ca41bbfea0a6b186
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 10:55:48 2020 +0200
Removing WORLD_SIZE, part 1.
Erased almost every instance of WORLD_SIZE and replaced it with a local
power of two, map_size_lg (which respects certain invariants; see
common/src/terrain/map.rs for more details about MapSizeLg). This also
means we can avoid a dependency on the world crate from client, as
desired.
Now that the rest of the code is not expecting a fixed WORLD_SIZE, the
next step is to arrange for maps to store their world size, and to use
that world size as a basis prior to loading the map (as well, probably,
as prior to configuring some of the noise functions).
commit 30b1d2c6428230a9eaa0d749cdcbbd6f1cbccd78
Merge: 7d56ba31b 1377b369f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:58 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 7d56ba31b445441461b28a07fc495d7d4f047c17
Merge: 2101113b4 598f14b25
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 1377b369f6db2258e910d467a5740f31789e3ded
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sun Jul 19 23:25:38 2020 +0200
more saturated pumpkins
commit ae8d50527f93bb0616c2ad46ce4dacb63bc37c6d
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sat Jul 18 20:29:56 2020 +0200
acacia models
commit 2101113b467e691de787392d7f20f1745f5637bd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 18 18:55:25 2020 +0200
Higher detail LOD.
commit add2cfae04b4385fa5590e11e2bd5229d9dee0aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 16 01:57:39 2020 +0200
Revert some irrelevant stuff.
commit 2e2ab3dc1eaa59a4aef7f8d34a53d8aae4c8553a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 15 13:30:49 2020 +0200
Fixing various things about shadows.
* Correcting optimal LISPSM parameter.
* Figure shadows are cast when they're not visible.
* Chunk shadows stay cast until you look away.
* Seamless cubemaps for point lights.
* Etc.
commit 6c31e6b56217274285b597af297036691ea5d897
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 19:50:26 2020 +0200
Fix shadow creation.
commit 6332cbe006115ae205597529cd8bbccd146c2cca
Merge: be438657c 930e0028b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:47:00 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit be438657c33d7b5bfb0a9582c3ed3fd366637323
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:28:08 2020 +0200
Tweaks to shadows.
Added shadow map resolution configuration, added seamless cubemaps,
documented all existing rendering options, and fixed a few Clippy
errors.
commit 23b4058906013c7d2a40c286e20e32c5fbd897ed
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 10:11:19 2020 +0200
Fix moon, use nonlinear noise for terrain.
Note that the latter has a bit of performance cost.
commit 7fbe5cbfbb9dc29607957b8e62f432a4deed193d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:23:02 2020 +0200
Address lies about max texture size.
commit bcfc62b5e13a1cdd83f57535fde4694720bebfd9
Merge: 75e3626a7 18a08e8fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:22:08 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 75e3626a785919f43fdcf2127c2b10e3e4df2f9f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:21:52 2020 +0200
OpenGL 3.3 minimum.
commit 18a08e8fe2739f02af99a5d2cb4e7c38c49e858b
Author: Monty Marz <m.marzouq@gmx.de>
Date: Tue Jul 7 23:57:52 2020 +0200
settings localization
commit 90c5d1ca3620092bc3ae10b2211489eb1cf6f5e8
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 21:11:48 2020 +0200
Lower near distance.
commit 0e66f02b25aaddaa2dfddbbc89cd67de54a9a7b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 20:09:01 2020 +0200
All sprites sway in the wind now.
commit db1401a6910bf42dcf502462c90038752ff5fbdb
Merge: 69e508d8c e8b4b29d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 19:34:17 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 69e508d8c94d8973033817ca86f357e466fc7c4d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 18:41:37 2020 +0200
Make it easy to switch to SIMD for math.
commit ffe0f5928c7a7e87d00cb5426b3b1d831d7e02fd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 21:21:12 2020 +0200
Fix some issues with underwater rendering.
commit bfda6da42f38fd02c31ee92c81ab785a3e50c2a0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 19:17:59 2020 +0200
Fix some minor display issues.
commit 0ed752e087968cf901301884aaeae698e32ef8a5
Merge: ccc6a06a8 518edcb85
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:14:21 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit ccc6a06a8d4504d6b9f7af7905a414d2ee06ab76
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:04:34 2020 +0200
Some minor changes.
commit 4e020246702889269efe1a191788992164c508d6
Merge: 50a64d927 e05c9267a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 16:17:40 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 50a64d927e6c4f4b0e4688e4cbfca694bc3f922a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 13:07:03 2020 +0200
Fix far plane.
commit 7dd06da34cae8f9ea3b6c889fe965181f3fd3949
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:25:35 2020 +0200
Add shadows.glsl.
commit 618a18c998778bf871b905a74657440fcc384c80
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:10:22 2020 +0200
Adding shadows, greedy meshing, and more.
commit eaea83fe6a5cb1cb0ba8beef888183c718258496
Merge: 267018495 2f89b863e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 22:47:07 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 2670184954a13e4a9e7a4e35ba79aac0c5fac2f7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 21:20:01 2020 +0200
Make civsim and sites deterministic.
For anything in worldgen where you use a HashMap, *please* think
carefully about which hasher you are going to use! This is
especially true if (for some reason) you are depending on hashmap
iteration order remaining stable for some aspect of worldgen.
commit f8376fd5dc72b4a9c2f51a6b4570d59c8b8e9343
Merge: 654f7e049 cdee191dd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 17:53:57 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 654f7e049258d9da27c09608bbe6a46ffa8787e5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed May 20 21:22:30 2020 +0200
Correct backface culling.
commit 560501df05ca725409b0f2e4eb31bdfdc15fd0c7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue May 19 17:22:06 2020 +0200
Greedy messhing for shadows.
commit a4d87e1875ca543436e6bbbeb20348facc5a52d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun May 17 05:59:00 2020 +0200
Shadow maps work for lantern.
commit 243d0837b8a3b08172c9a3c348d964d7ddc2a0a8
Merge: 04382dc28 71dd520cd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:53:13 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 04382dc28632b6c66e8821f6870c0daaa1c1901a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:22:17 2020 +0200
WIP: better graphics config, better LOD, shadow maps.
commit 22ddbad3eb32bfa70f0932176022208fe67ded81
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 18:54:09 2020 +0200
Minor shader fixes.
commit 746a10e8d01ac235f994b0cde78fa48998602a1f
Merge: 0f4a0e763 40ab94673
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 04:02:09 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0f4a0e763db3afbdc4fb0558611f38326ca87151
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 23:03:24 2020 +0200
Switch back to pop-in terrain.
commit dd74fa7e4a53667b38811d7aec58d7f6a68889bb
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 22:58:55 2020 +0200
LOD shading closer to voxel shading.
commit ef67bd58ba0bdaf622b078892d768263b6cba268
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 28 20:49:03 2020 +0200
Experimental underwater lighting.
commit 2c5ad9d07605e80d5fd5679dd3a5d70c605b86a9
Merge: 748279835 303967a6f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 22:35:24 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7482798354eda18c8207950080fc24d443a369de
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 21:59:55 2020 +0200
Replace discard in figure-frag.
commit d83b4ae69be4912f69bf7835f509c68a1c7770a4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:45:57 2020 +0200
Fix sprite lighting, HDR from focus_pos.
commit 0594238004f116274905fa0ed7c2b6c417ed1d29
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:14:10 2020 +0200
Proper HDR from point lights.
commit 48c93d2b41ce5743103d18e76cc228f5ac766492
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 14:01:43 2020 +0200
Brighter ambiance, darker LOD shadows.
commit e0452e895ccfa8a43f368cae3b8b8aedc24dad93
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 13:13:23 2020 +0200
More proper HDR.
commit 4c6da3ed16cfeebb455e40da5f557b4af9a499d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 00:13:10 2020 +0200
Trying LOD noise.
commit 682a3d74c85df5503ffe1fc1cc891bce789df1ad
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 23:11:08 2020 +0200
Fix LOD heights in towns.
commit cc39e5734e8b18f9077bf42e66337c1319dd6b6e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 21:01:23 2020 +0200
More LOD fixes.
commit 8116b21c2e51c836e77894e309ac273caf2917b3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:54:43 2020 +0200
I like this coloring.
commit bc2560ea90b36f4b46190005344232d993043ac3
Merge: 14effdd5d e690efe71
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:48:33 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 14effdd5db8747fcf3eb34f03b46b7792e92d1c5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:24:35 2020 +0200
Re-saturate.
commit 48a643955d4435b78179acba0beb4a979905cc31
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:23:57 2020 +0200
Various fixes.
commit f7b497a0c25f4ad4682c71dd1ed6f608052feb9b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 03:22:49 2020 +0200
Render figures again.
commit 44e4aad48deba8266b9f8bdfd3db096b381f5327
Merge: e6f0a5a98 9ec319a18
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 02:01:04 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit e6f0a5a981a82533ba188fff0a54ce98577bb152
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 24 16:12:20 2020 +0200
Add atmospheric scattering.
commit f2953087f691a8edbc001cb98ebf5059fc6f8ac0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 23 00:01:20 2020 +0200
Fix shadowing for specular reflections.
commit ddd4a67a9799b8d08c7dc0c2bec90621c2bed0e3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Apr 22 22:56:12 2020 +0200
HDR fixes.
commit 1015e60deef3c447381996277df7496707a63bd0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 21 18:25:19 2020 +0200
More lighting changes.
commit 80c264abd111fb237e57843efcb5c071d4f84613
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 13 00:29:59 2020 +0200
Lighting experiments.
commit 8414987e589dd5102bad89762a3adaccc0bfe957
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 9 02:38:40 2020 +0200
WIP -- lighting changes and soft shadows.
commit 9cd2b3fb0d6b49776c6dfe463e4169637250b11a
Merge: c7ea687eb 8b149ad11
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:29 2020 +0200
Merge branch 'sharp/new-lighting' into sharp/small-fixes
commit c7ea687ebbc5aace1b455f134a5bf49ce2c7434a
Merge: 476441531 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:02 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 8b149ad11ad4bb75018fcf9519baec27d1c95951
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:32:39 2020 +0200
Trying out a new lighting model.
commit b0ac9f36f755dd06f7c17c46150568064790864f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 07:56:11 2020 +0200
Use bicubic interpolation for terrain.
commit f6fc9307a121514b614bc50ef8eb055953e7da8a
Merge: 33140a295 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 05:01:41 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 4764415312aae6e9ac2d00e86e84577cb958f1ab
Merge: ed2d0111d 13388ee6a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 04:54:48 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 13388ee6a42943f3f79a9cb488346cef18e272fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 20:30:08 2020 +0200
Various fixes (to coloring and to soft shadows).
commit fbd084a94a067082a87cd6d28b82054709bc9265
Merge: 5a089863b 4fdf6896a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 18:50:38 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/map-colors
commit ed2d0111d994262ae836d84d1fe5a45e4de72a0b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 06:49:27 2020 +0200
Combining colors and LOD.
commit 88342640c6b835114d01c797b89fdede3b0a2108
Merge: 33140a295 5a089863b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:49:20 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 33140a2951b8212725f42c758b277aaec4d888f7
Merge: 4c65a5aed f34d4b379
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:36:21 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 5a089863beb01d4794bbe3580ada47b278715ea2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 03:17:49 2020 +0200
Making maps brighter.
This is probably not the right way to do it, but oh well!
commit 32b2c99109dd486aa922886081068f9c550c83f2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 02:46:36 2020 +0200
Horizon mapping and "layered" map generation.
Horizon mapping is a method of shadow mapping specific to height maps.
It can handle any angle between 0 and 90 degrees from the ground, as
long as know the horizontal direction in advance, by remembering only a
single angle (the "horizon angle" of the shadow map). More is explained
in common/src/msg/server.rs. We also remember the approximate height of
the largest occluder, to try to be able to generate soft shadows and
create a vertical position where the shadows can't go higher.
Additionally, map generation has been reworked. Instead of computing
everything from explicit samples, we pass in sampling functions that
return exactly what the map generator needs. This allows us to cleanly
separate the way we sample things like altitudes and colors from the map
generation process. We exploit this to generate maps *partially* on the
server (with colors and rivers, but not shading). We can then send the
partially completed map to the client, which can combine it with shadow
information to generate the final map. This is useful for two reasons:
first, it makes sure the client can apply shadow information by itself,
and second, it lets us pass the unshaded map for use with level of
detail functionality.
For similar reasons, river generation is split
out into its own layer, but for now we opt to still generate rivers on
the server (since the river wire format is more complicated to compress
and may require some extra work to make sure we have enough precision to
draw rivers well enough for LoD).
Finally, the mostly ad-hoc lighting we were performing has been (mostly)
replaced with explicit Phong reflection shading (including specular
highlights). Regularizing this seems useful and helps clarify the
"meaning" of the various light intensities, and helps us keep a more
physically plausible basis. However, its interaction with soft shadows
is still imperfect, and it's not yet clear to me what we need to do to
turn this into something useful for LoD.
commit f8926a5737ddc51f3d585c651a64c43677aae0f4
Merge: a1aee931e 875ae6ced
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Mar 13 13:32:42 2020 +0100
Merge remote-tracking branch 'origin/master' into sharp/map-colors
commit 4c65a5aed353b119aea65a2aaeb94549b67beb42
Author: Treeco <5021038-Treeco@users.noreply.gitlab.com>
Date: Mon Feb 24 16:48:05 2020 +0000
Made LOD setting slider exponential
commit 2fa7b2d20d7233dc8bfd64f9f7f54617575248f1
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 17:49:53 2020 +0000
Added mist to LoD
commit aab059a450b5f635777129ff82cc15b662965c3c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 15:14:06 2020 +0000
Added LoD slider
commit 779c36b538121c5ade3633ae5cb67bb14c8c3877
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:54:55 2020 +0000
Reduced cost of vertex pushing
commit 9fea150473906b166365b738ebcea07c697daf3d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:38:53 2020 +0000
Fixed maths, improved LoD resolution
commit 5481df38fea5bf183ff376a3337179cfaa5233dc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 11:22:50 2020 +0000
Dynamically relocate LoD vertices to enhance details
commit a3e36a50ababd615da7db1b26158c7906a5def01
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 18:13:51 2020 +0000
Simpler terrain spiral rendering
commit 255f450ae9ac8763db4bede075fb409161ed57cc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:53:17 2020 +0000
Better LoD precision
commit 3d027aebe812a5b8658a4eb8123dc9f61b3776d2
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:04:03 2020 +0000
Better falloff
commit be775c9484b457b2c0b1a494aec03392d0c70e76
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 15:30:45 2020 +0000
Applied good ideas from experimental branch
commit 58587b68545a23c5c04ab4574a4b94b3bc982246
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 16:15:13 2020 +0000
Minor fixes to LoD merging
commit 7b42aebd709c14df2db766aad61d9280ad24d84d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 15:04:44 2020 +0000
Capped LoD dragging
commit 8aafc559f87124e1ea5ca6e3ddc2aa0c242d793c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:54:37 2020 +0000
Better blending between LoD and terrain border
commit edd3455d5161792d87ddc8eadc0ecbad5532b284
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:40:19 2020 +0000
Fixed LoD z depth, added sea level offset
commit b9b06744620114dd5556e73f64fa93c145503a7c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:27:43 2020 +0000
Better LoD smoothing
commit a1aee931e790431560cd2d953ad61d9497072afd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Feb 21 14:52:17 2020 +0100
Adding shadows.
commit 2400786c13dd891c131ed86d48d05df516a8a778
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 13:48:40 2020 +0000
Use world map as LoD source
commit dbf650f504a4c25fbbc2096ac3616c736bf52d23
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Jan 20 00:48:14 2020 +0000
Better clouds at distance
commit 5e6f81b86cdb9730b9b056877b19257075fd5fa8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Jan 19 23:59:02 2020 +0000
sync
commit 745e7540ddb000cc645f612767b337c2ddc3f7c0
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 12:40:48 2019 +0000
Improved cloud falloff mist, faster noise sampling
commit f6a200d0cb866196ba57697466755f9e0c7ea5d8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 10:09:00 2019 +0000
Improved long-range depth precision, removed unnecessary LoD polygons
commit 63d1b2bb2292898d59fb4f4e502201103dfeb86f
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 20:57:46 2019 +0000
Working LoD shader
commit f13d98ee3e58f881e8b978861a67663b59ed91ec
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 11:03:40 2019 +0000
LoD first attempt (stack overflow issue)
2020-08-20 18:34:59 +00:00
|
|
|
|
column::ColumnGen,
|
2020-04-23 15:16:08 +00:00
|
|
|
|
site::Site,
|
(See sharp/lod-history) LOD, shadows, greedy meshing, new lighting, perf
---
Pretty much a Veloren fork at this point. Here's a high level overview of the changes (will be added to CHANGELOG just before merge).
At a high level this MR incorporates roughly two groups of changes.
The first group consists of new game features: more flexible map sizes, level of detail terrain, shadow maps, and a new lighting
engine. This is "feature work" that (mostly) only adds new things to Veloren, and mostly shouldn't affect old stuff.
The second big group of changes are those addressing the fallout from all the new features. These include performance fixes of
various sorts: the addition of multiple graphics options and optimization of the cheap ones to avoid work, switching all voxel
models to use some variant of greedy meshing, switching over much of our CPU-side vector math to exploit SIMD instructions
(coinciding with a fork of `vek`), and a rewrite of how the UI handles text rendering (coinciding with updates to our fork
of `conrod`). Making Veloren's hardcoded colors appear correct under the new lighting engine also required considerably
changes (TODO: Fill in this section when it's complete).
The second category of changes often heavily touches code owned by other people, including frequently modified code "owned" by a
handful of people, so I recommend that this code be reviewed particularly carefully.
---
At a high level (each will be described in more detail below):
- The world map has been refactored.
- The world size is no longer hardcoded (@zesterer).
- The map generation code was made generic to allow using it outside of the `world` crate (@zesterer).
- On world creation, we now compute *horizon maps* (@zesterer).
- The way we pass the world from the server to the client has been updated (@xMAC94x).
- Artifacts related to image rotation were fixed (@imbris).
- Multiflow rivers were enabled (@zesterer).
- In the process of making changes related to the world map, various incidental fixes and optimizations were required.
- The new *level of detail* feature was added (@zesterer wrote part of this and has checked out the rest).
- A new LOD terrain rendering step was added to the pipeline.
- The LOD terrain quality was made configurable via a graphics setting.
- Horizon maps were used to cast shadows from LOD chunks on both LOD and non-LOD terrain.
- A "voxelization" effect was incorporated into rendered LOD terrain to make it blend better into the world.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Veloren's lighting has been completely overhauled (@zesterer has already checked most of this out).
- A semi-accurate index of refraction was assigned to our materials.
- A new, more realistic, physically based approach to lighting was used using the *Ashikhmin Shirley* BRDF.
- We emulate *atmospheric scattering* using equations designed for measuring solar panel light exposure.
- We attempt to compute *realistic light attenuation* in water using its real material properties.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Point and directional lights now cast realistic shadows, using *shadow mapping.* (@imbris, @zesterer, @Treeco, @YuriMomo)
- Point light shadow maps were added to the rendering pipeline, using geometry shaders and *seamless cube maps*.
- Directional light shadows were added to the rendering pipeline, using LISPSM together with disabling *depth clamping*.
- "Shadow-only" chunks and NPCs were added to prevent shadows from models behind you from disappearing.
- In the process of making changes related to shadow maps, various incidental fixes and optimizations were required.
The addition of shadow maps, LOD terrain, and the new lighting all led to significant performance degradation, on top of other
changes happening in master. Therefore, a large number of performance improvements were also needed:
- The graphics options were made much more flexible and configurable, and shaders were optimize.
- New options were provided for how to render lights and shadows (@Pfauenauge, @zesterer).
- Graphic setting storage and configuration were overhauled to make adding new features easier (@Pfauenauge, @imbris).
- Shaders were rewritten to utilize GLSL's preprocessor to avoid overhead (@zesterer, @YuriMomo).
- In the process of making changes related to providing additional rendering options, various incidental fixes and optimizations were required.
- Voxel model creation was switched to use *greedy meshing.*
- A new voxel meshing method, greedy meshing, was added (@imbris).
- Uses of the older meshing methods were migrated to use greedy meshing (@imbris, @jshipsey, @Pfauenauge).
- New restrictions were added to terrain, figure, and sprites to future proof them for further optimizations (@jshipsey, @Pfauenauge, @zesterer).
- Most positions are now relative to either chunk or player position for better precision (@imbris, @zesterer, @scottc).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- Animation and terrain math were switched to use SIMD where possible.
- Fixes were made to vek to make its SIMD feature usable for us (@zesterer, @imbris).
- The interface and types used in bone animation were changed in various ways (@jshipsey, @Snowram, @Pfauenauge).
- Redundant code generation for body animation is now partly taken care of by a macro (@jshipsey, @Snowram, @Pfauenauge).
- Animation code was modified to to use vek's SIMD representation where possible (@jshipsey, @Snowram, @Pfauenauge).
- Terrain meshing code and shadow map math were also modified to use vek's SIMD representation (@imbris).
- SIMD instruction generation was enabled (@YuriMomo, @jshipsey, @Snowram, @imbris, @Angelonfira, @xMAC94x).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- The way we cache glyphs was completely refactored, fixed, and optimized.
- Our fork of `conrod` was optimized in various ways (@imbris).
- Our fork of `conrod` now exposes whether a widget was updated during the current frame (@imbris).
- Our use of the glyph cache was rewritten for correctness (@imbris).
- A *text cache* was introduced that lets us skip remeshing glyphs that have not changed (@imbris).
- Various changes were made to reduce pressure on the glyph cache, with more planned (@imbris, @Pfauenauge).
- In the process of making changes related to the glyph cache, various incidental fixes and optimizations were required.
- Colors were changed to keep Veloren's look consistent with master.
- Some older tree models were brought back (@Pfauenauge).
- TODO(@Sharp): All hardcoded colors were extracted and made hotloadable.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Hardcoded colors were fixed to conform to Veloren's style.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Color models were fixed to conform to Veloren's style.
A detailed description of the involved changes follows.
---
- The world size is no longer hardcoded. All functions dependent on world size now take a `WorldSizeLg`, which holds the base 2 logarithm of each actual world dimension and is guaranteed to maintain certain properties (outlined in `common/src/terrain/map.rs`). Additionally, many utility functions that utilize the world size were moved into `common` as well (mostly `common/src/terrain/mod.rs`). Finally, the world map format was updated in order to store its size explicitly, with a migration path from the old format that should work whenever the old formatted map was a square (practically always). See `world/src/sim/mod.rs` for these changes.
- The map generation code was made generic to allow using it outside of the `world` crate. The parts of the map generating code that do not need to query the world were moved over to `common/src/terrain/map.rs`, allowing them to be used from the client without creating a dependency on `world`. The rest of it was turned into helper functions in `world/src/sim/map.rs`, which can be passed as closures to the generic map generation code to complete its construction. This also means that colors are now passed in separately to the map generation function. See <https://veloren.net/devblog-78/> for more details.
- On world creation, we now compute *horizon maps*. See the function in `world/src/sim/util.rs`.
Given a height map and a plane intersecting that height map, our horizon maps allow us to encode enough information to reconstruct shadows for each point on the height map using only the *horizon angle* (the angle at which the sun starts to become visible). As Veloren's sun only covers one plane, this is sufficient for encoding sun shadows for LOD terrain, by encoding two angles per chunk (one for each 90 degrees the sun covers). We can also use this for the moon, if we want, since the moon follows the same path. Additionally, we store the *height* of the furthest occluder, to try to make the shadows volumetric; so this means 4 bytes in total for each chunk.
Support for horizon maps has been merged into the map functionality in common as well.
- The way we pass the world from the server to the client has been updated. Rather than passing the prerendered map, we instead pass three maps with values for each chunk; one with the color information, a second with altitude information, and a third with horizon map information. We then reconstruct the map on the client, together with some additional information we send from the server (like the sea level and maximum height). See `common/src/msg/server.rs` for a detailed description of the format of `WorldMapMsg`, and `server/src/libr.rs` and `client/src/lib.rs` for details of the map construction and parsing.
- Artifacts related to image rotation were fixed. See the commit message for commit SHA `cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e` for a detailed explanation. This involved changes to shaders, the addition of a new type of graphic (also reflected in the graphic cache) that allows specifying a border color (which automatically makes the associated texture immutable), and some related fixes. I reproduce the first two paragraphs of the MR description as well:
```
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
```
- Multiflow rivers were enabled.
This does not really need to be part of this MR, and would be easy to revert, but since it seemed to provide a nice improvement it's currently packaged with it.
We already computed multiple outflows from each chunk for erosion purposes long before this MR.
However, we never modified river rendering to be able to handle this case (just a single downhill river flow is complex enough!) so this was not exposed when deciding which chunks were rivers.
Now that
- In the process of making changes related to the world map, various incidental fixes and optimizations were required. Some examples of fixes include making sure terrain is never lowered to below sea level (to make the shadow maps report correct values), fixing map altitudes and colors to understand things like cliffs and "block level" coloring (that doesn'te xist on the column level), and fixing a crashbug when rendering images for the UI where source pixels are strongly rectangular. Some examples of related performance fixes include avoiding allocating a fresh vector for all the maps (i.e. copying it over to change the format from `[u32; n]` to `DynamicImage` and then copying again to convert to `RgbaImage`), and instead using the `gfx::memory::slice` function to accomplish the same thing. These sorts of changes are spread all arond the code.
This includes the additon of a new scene, `voxygen/src/scene/lod.rs`, a new pipeline `voxygen/src/render/pipeline/lod_terrain.rs`, and new shaders `assets/vxygen/shaders/lod-terrain-vert.glsl` and `assets/vxygen/shaders/lod-terrain-frag.glsl`, as well as associated changes to the renderer in `voxygen/src/render/renderer.rs`.
The main idea behind our initial approach to LOD was to take the world data we now get from the server (altitude, color, and horizon mapping).
- Some previously computed values were turned into shader uniforms for better prediction on weak processors. (@zesterer)
- Calls to power or trig functions were removed or replaced with multiplications, where possible.
- After some deliberation
- To properly handle sprite "waving" for nearby sprites,
We explicitly designed the greedy meshing system with figures and sprites in mind.
In both cases, we want to be able to *efficiently* pack many different models into the same texture, especially in cases where we know
we will either not be removing any of the grouped-together from the models from the texture, or will remove all of them at once (so
they can be packed into some specific subtexture).
For sprites, since we know every model in advance and never intend to deallocate them, we currently pack them all as efficiently as
possible into one giant tetxure atlas. However, in the future we might opt to pack them slightly less efficiently in exchange for
shrinking the sprite vertex size.
For figures, we pack all the textures for each *model* into the same atlas.
is a global texture atlas used for every sprite, and for figures which is why we have the ability to mesh multiple
models to the same texture area (using the simple texture atlas allocator) without requiring intermediate vector allocations.
This is accomplished by delaying the time when we actually write the color and light data to the texture until *after* all the
model vertices have been meshed; then, we can just allocate the whole color/light array at once, making the atlas we use an
exact fit. In computer science-y terms, we accomplish this delay by, after we perform the initial greedy meshing (without
texture information), not continuing to create the texture data, but instead constructing a *continuation*--that is, a function
that, when called, will execute the rest of the computation. We push this continuation (which in Rust terms is a `FnOnce` closure
that takes the `ColLightsInfo` that it is supposed to write to as context) onto a
onto a vector
resizing. To allow for suspended writes to texture data, Rust pointed out to me that the continuation that would eventually write the color and light data to the texture atlas (the one that is shared by all models sharing the same greedy mesher) would have to *own* whatever data it mshed. Because we often generate the model data to mesh as a temporary in `voxygen/src/load.rs`, the
- Matrix multiplications in the shader were reduced for figure data (@zesterer).
- Vertex "waves" for fluid data were removed.
- Terrain "bending" near edges was removed.
- Scaling was fixed to make sure empty space was not introduced in a space previously occupied by a block. It was also changed to take ownership of its voxel data,
rather than sharing it, to let it be used with meshing.
- Rust's nightly version was bumped in order to use the `array_map` function, which lets us reuse more code between the simple map and `FigureModelCache`.
- PositionedGlyph::standalone.
---
I tried to cite sources in many cases[^realtime],[^lloyd],[^lispsm],[^pbrt],[^greedy],[^tjunctions]
where I needed features from elsewhere but I am particularly grateful for the following resources,
esepcially where they have accompanying source code. I linked all of them that are accessible to the public (those that are not were
obtained through legal means).
[^realtime]: Eisemann, Elmar, Michael Schwarz, Ulf Assarsson, Michael Wimmer. Real-Time Shadows. A K Peters/CRC Press (T&F), 20160419.
[^lloyd]: Lloyd,B. 2007. [Logarithmic perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). PhD thesis, University of North Carolina.
[^lispsm]: Wimmer, M., Scherzer, D., and Purgathofer, W. 2004. [Light space perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). In Proceedings of Eurographics Symposium on Rendering 2004, pp. 143– 152.
[^pbrt]: Pharr, Matt, et al. [http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf](Physically Based Rendering: From Theory to Implementation). Third edition, Morgan Kaufmann Publishers/Elsevier, 2017.
[^greedy]: mikolalysenko. “Meshing in a Minecraft Game.” 0 FPS, 30 June 2012, <https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/>.
[^tjunctions]: blackflux. “Meshing in Voxel Engines – Part 1.” Blackflux.Com, 23 Feb. 2014, <https://blackflux.wordpress.com/2014/02/23/meshing-in-voxel-engines-part-1/>.
I am also especially grateful to Khronos, Wikiepdia, and stackoverflow for answering many of my specific questions while writing the MR.
---
Squashed commit of the following:
commit 300505e7305a2fdac722a808ee8538323f215f39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 18:46:25 2020 +0200
Fixing cargo doc and typo in CHANGELOG.
commit ec0aeb18e8499d7d84ef818331b4b65c3d76cea6
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 15:38:50 2020 +0200
Hopefully final commit for the LOD branch.
commit 5e8ea0b1eaac02903a02feb2eb038d195de4872f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 10:14:26 2020 +0200
Falling back to power as stopgap.
commit e44a1cbf46504ee9931a01bdc9033e145500d557
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 09:25:41 2020 +0200
Address imbris feedback.
Temporarily disables shiny water, lowers max VD.
These restrictions will be lifted soon after merging.
commit 561e25778a108ac3712f5ec2ce3a51234c4430d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 08:31:13 2020 +0200
Tweaking shaders a bit.
commit 7d19259078ce0dd7b3742ad7d0cb3fab3ece3fdc
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:59:43 2020 +0200
Fix view example as well.
commit 051cd4934e0fad2c0b15db4380a4189fa318679f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:29:06 2020 +0200
Fix meshing benchmark.
commit c95e07db3b4dcca285678985e65e31b927cb1c61
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 05:46:22 2020 +0200
Address MR feedback, fix scene clouds.
commit 1bfb816cabdb3ffc1e507a009c2d98696b4b573a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:39:36 2020 +0200
Incorporating Pfau's figure color changes.
New eyes and new humanoid colors.
commit 3f9b89a3ac7b3356b1dba0d1a8f6541357f81469
Merge: e2f5162e4 62c53963a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:29:41 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit e2f5162e4f96f4124aa43488f7245d341b3dcfd4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:28:38 2020 +0200
World colors are all hotloadable.
They live in assets/world/style/colors.ron.
Only a small handful of hardcoed colors remain in World; they are either
part of the map, or difficult to disentangle from the rest of the
computation. Comments are made where appropriate.
commit 62c53963abe1975009d34a8f9515a355bef24f31
Author: Marcel Märtens <marcel.cochem@googlemail.com>
Date: Wed Aug 19 15:59:00 2020 +0200
replace pretty_env_logger with tracing
commit 5b1625f99d9586fe80e2232f583ec5af9f953099
Merge: d71003acd 4942b5b39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:15:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit d71003acdabeff970b3928e97c26af6847b5b78e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:14:34 2020 +0200
Hotloading colors, part 1: colors in common.
Currently, this just entails humanoid colors. There are only three
colors not handled; the light emitter colors in
common/src/comp/inventory/item/tool.rs. These don't seem important
enough to me to warrant making hotloadable, at least not right now, but
if it's needed later we can always add them to the file.
commit 63b5e0e553eb2ea49276f192a6fc7dd65254270d
Merge: c32b337a4 6d2c4b9c1
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 13:05:37 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c32b337a46e10d9de473d178a94a3ccd61c39bb3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:52:04 2020 +0200
Fixing LOD grid, for real.
commit a166ae0360395387e09fb35a1f84210c2ce5ec24
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:28:05 2020 +0200
Addressing imbris's initial feedback.
Fixes two minor bugs: explosion particles were no longer spawning
randomly, and LOD grids were not perfectly even.
commit 4cbad004f44060994252dd3d38647a14a589712f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:27:58 2020 +0200
Bumping nightly per request.
commit 548680276aac77c25d43d16b5622f847d474dbef
Merge: acc098604 8f8b20c91
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:26:06 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit acc0986040589a3492f88a740bc3c3fc693b26d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:28:32 2020 +0200
Lower resolution due to lying drivers.
commit d3b878de2a52c358d2944a6bbd0555dad7fbdb10
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:15:38 2020 +0200
Fix issues msh encountered with Intel 4600.
commit 10245e0c1b0cb6fae10d86409435364edc6102ef
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 21:15:02 2020 +0200
Merge more models into one mesh than we did previously.
commit 3155c31e663c52ae5c3a53d5fb5665892a1a498a
Merge: 7204cc8a7 3c199280e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:35:22 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7204cc8a7a4f74a30306bd205d9834fee4bb944f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:34:43 2020 +0200
Fix not yet done NPC animations.
This forces them all to be the idle animation if not specified.
This fixes issues where you'd have giant NPCs in water.
commit bc83360f2a08918f19d417b5f772e1ff554dba08
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 19:36:37 2020 +0200
Try to fix some bugs:
- Z fighting with LOD terrain and water.
- Audio SFX not playing.
commit 1fd104aa603bf3781b6526a5cada46aeca3049dd
Merge: 862df3c99 7c2c392a3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 12:02:31 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 862df3c9976c4da9bd7cfd784f1a85973127968a
Merge: 0a4218ed9 75c1d4401
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 05:52:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0a4218ed9d541a2b34c133351bea38a99ddf4ea7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 22:27:14 2020 +0200
Fix particle depth.
commit f51dfdeb442d0dd5243dd2f344fa4be295bd0875
Merge: c6251a956 5e6dc0471
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:19:04 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit c6251a956ad376400dca5c23420cf8d213dc8fdf
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:15:46 2020 +0200
Cache figures more intelligently.
Cache figures for longer, and don't cache character states for the
player except where they actually affect the rendered model.
commit 0ed801d5404982c6fb63b1eaa4567d908b294c9d
Merge: c11b9bdf0 eea64f78f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 16:32:24 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c11b9bdf0a53bf9884d2f5a48fec9b01d582df1a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 11:47:15 2020 +0200
Remove unneeded Clippy annotation.
commit 16aa9ef40af56d69289d00aafb3deadfb8bd4f35
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 8 00:53:02 2020 +0200
Fix hotloading and Clippy.
commit 3dc973e0be5b758da1e9805eb764ad401374cd0c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 23:50:27 2020 +0200
Major speedups with SIMD.
commit fba64a7d93d5a96077ce87287bbce6ab9b7fbcae
Merge: 76429d00e d1e10b178
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:19 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 76429d00eea00d212fbd672a84ee91e75b19b938
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:10 2020 +0200
Add clippy.toml.
commit c79f512f84dbb83cb82b7954db68ff241dfd8e41
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 11:55:20 2020 +0200
Fix all clippy issues, clean up Rust code.
commit 6f90e010b3fbefb53b0d632e819931350015b6b8
Merge: 77a8c7c26 5929cfa5c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:30 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 77a8c7c267d3f44a1a62bd6b2274359973c5e4d4
Merge: b44e44232 44febaabd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:10 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 5929cfa5c713aa392110bbb62407f76caf53c3df
Author: jshipsey <jshipsey18@gmail.com>
Date: Thu Aug 6 20:47:27 2020 -0400
fixed in-hand arrow bug
commit b44e442325d828f1cd564d66908f89d09e80474b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 6 13:40:35 2020 +0200
Miscellaneous performance improvements.
commit be37acf287c1360d8085862526ac3365ffd1d768
Merge: 125d7fc6c c11876547
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 05:49:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 125d7fc6c4dcd8c8c5f27b8268a4d64f409f3644
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 04:55:31 2020 +0200
Abstract over simd vs. repr_c vectors.
Also some minor improvements to Event size.
commit d4d4956e9252e1241ce110b2aa85076c6b1e2a23
Merge: 5f3b7294a aced5f979
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:56:54 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 5f3b7294af1f8533edc2620b58863c248e2b07af
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:43:52 2020 +0200
Fix formatting issues I missed before.
commit a428a3ebba70dcab63dd0f8cd983120c90617271
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:41:51 2020 +0200
Fix clippy warnings, part 1.
There aer still a bunch of type too complex and
function takes too many arguments warnings that I'll fix later
(or ignore, since in the one case I did fix a function takes too
many arguments warning I think it made the code *less* readable).
commit ba54307540ed8a937ac08209730284fc653af85b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 30 13:22:42 2020 +0200
Fix light animations so they are removed when the light turns off.
commit 7e0f4bcbf0f4717145d8beac40d52e3acebbe2aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 21:10:20 2020 +0200
Fix crash in edge case for pixel art.
commit 56da06f7a351e2b949e9b014a90b974d511a0924
Merge: cf74d55f2 9f53a4a19
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:56:52 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:29:52 2020 +0200
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
The first concern was addressed by fixing the dimensions of the map
images drawn from the UI (so that we always use a square source
rectangle, rather than a rectangular one according to the dimensions of
the map). We also fixed the way rotation was done in the fragment
shader for north-facing sources to make it properly handle aspect ratio
(this was already done for north-facing targets). Together, these fix
rendering issues peculiar to rectangular maps.
The second and third concerns were jointly addressed by adding an
optional border color to every 2D image drawn by the UI. This turns
out not to waste extra space even though we hold a full f32 color
(to avoid an extra dependency on gfx's PackedColor), since voxel
images already take up more space than Optiion<[f32; 4]> requires.
This is then implemented automatically using the "border color"
wrapping method in the attached sampler.
Since this is implemented in graphics hardware, it only works (at
least naively) if the actual image bounds match the texture bounds.
Therefore, we altered the way the graphics cache stores images
with a border color to guarantee that they are always in their own
texture, whose size exactly matches their extent. Since the easiest
currently exposed way to set a border color is to do so for an
immutable texture, we went a bit further and added a new "immutable"
texture storage type used for these cases; currently, it is always
and automatically used only when there is a specified border color,
but in theory there's no reason we couldn't provide immutable-only
images that use the default wrapping mdoe (though clamp to border
is admittedly not a great default).
To fix the maps case specifically, we set the border color to a
translucent version of the ocean border color. This may need
tweaking going forward, which shouldn't be hard.
As part of this process, we had to modify graphics replacement to
make sure immutable images are *removed* when invalidated, rather
than just having a validity flag unset (this is normally done by
the UI to try to reuse allocations in place if images are updated
in benign ways, since the texture atlases used for Ui do not
support deallocation; currently this is only used for item images,
so there should be no overlap with immutable image replacement,
so this was purely precautionary).
Since we were already touching the relevant code, we also updated
the image dependency to a newer version that provides more ways
to avoid allocations, and made a few other changes that should
hopefully eliminate redundant most of the intermediate buffer
allocations we were performing for what should be zero-cost
conversions. This may slightly improve performance in some
cases.
commit ad18ce939940a8c697270f6e9b94db9942fd8295
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 13:21:09 2020 +0200
Fix continent scale hack.
commit 36b1cb074f5b195aebd7dbbc3da7f0246a1a18ec
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 12:11:40 2020 +0200
Enable loading different sized maps without a recompile.
We may want to tweak the effects of the continent_scale_hack.
commit 13b6d4d534cc4814b7cb3294ca41bbfea0a6b186
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 10:55:48 2020 +0200
Removing WORLD_SIZE, part 1.
Erased almost every instance of WORLD_SIZE and replaced it with a local
power of two, map_size_lg (which respects certain invariants; see
common/src/terrain/map.rs for more details about MapSizeLg). This also
means we can avoid a dependency on the world crate from client, as
desired.
Now that the rest of the code is not expecting a fixed WORLD_SIZE, the
next step is to arrange for maps to store their world size, and to use
that world size as a basis prior to loading the map (as well, probably,
as prior to configuring some of the noise functions).
commit 30b1d2c6428230a9eaa0d749cdcbbd6f1cbccd78
Merge: 7d56ba31b 1377b369f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:58 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 7d56ba31b445441461b28a07fc495d7d4f047c17
Merge: 2101113b4 598f14b25
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 1377b369f6db2258e910d467a5740f31789e3ded
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sun Jul 19 23:25:38 2020 +0200
more saturated pumpkins
commit ae8d50527f93bb0616c2ad46ce4dacb63bc37c6d
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sat Jul 18 20:29:56 2020 +0200
acacia models
commit 2101113b467e691de787392d7f20f1745f5637bd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 18 18:55:25 2020 +0200
Higher detail LOD.
commit add2cfae04b4385fa5590e11e2bd5229d9dee0aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 16 01:57:39 2020 +0200
Revert some irrelevant stuff.
commit 2e2ab3dc1eaa59a4aef7f8d34a53d8aae4c8553a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 15 13:30:49 2020 +0200
Fixing various things about shadows.
* Correcting optimal LISPSM parameter.
* Figure shadows are cast when they're not visible.
* Chunk shadows stay cast until you look away.
* Seamless cubemaps for point lights.
* Etc.
commit 6c31e6b56217274285b597af297036691ea5d897
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 19:50:26 2020 +0200
Fix shadow creation.
commit 6332cbe006115ae205597529cd8bbccd146c2cca
Merge: be438657c 930e0028b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:47:00 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit be438657c33d7b5bfb0a9582c3ed3fd366637323
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:28:08 2020 +0200
Tweaks to shadows.
Added shadow map resolution configuration, added seamless cubemaps,
documented all existing rendering options, and fixed a few Clippy
errors.
commit 23b4058906013c7d2a40c286e20e32c5fbd897ed
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 10:11:19 2020 +0200
Fix moon, use nonlinear noise for terrain.
Note that the latter has a bit of performance cost.
commit 7fbe5cbfbb9dc29607957b8e62f432a4deed193d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:23:02 2020 +0200
Address lies about max texture size.
commit bcfc62b5e13a1cdd83f57535fde4694720bebfd9
Merge: 75e3626a7 18a08e8fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:22:08 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 75e3626a785919f43fdcf2127c2b10e3e4df2f9f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:21:52 2020 +0200
OpenGL 3.3 minimum.
commit 18a08e8fe2739f02af99a5d2cb4e7c38c49e858b
Author: Monty Marz <m.marzouq@gmx.de>
Date: Tue Jul 7 23:57:52 2020 +0200
settings localization
commit 90c5d1ca3620092bc3ae10b2211489eb1cf6f5e8
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 21:11:48 2020 +0200
Lower near distance.
commit 0e66f02b25aaddaa2dfddbbc89cd67de54a9a7b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 20:09:01 2020 +0200
All sprites sway in the wind now.
commit db1401a6910bf42dcf502462c90038752ff5fbdb
Merge: 69e508d8c e8b4b29d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 19:34:17 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 69e508d8c94d8973033817ca86f357e466fc7c4d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 18:41:37 2020 +0200
Make it easy to switch to SIMD for math.
commit ffe0f5928c7a7e87d00cb5426b3b1d831d7e02fd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 21:21:12 2020 +0200
Fix some issues with underwater rendering.
commit bfda6da42f38fd02c31ee92c81ab785a3e50c2a0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 19:17:59 2020 +0200
Fix some minor display issues.
commit 0ed752e087968cf901301884aaeae698e32ef8a5
Merge: ccc6a06a8 518edcb85
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:14:21 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit ccc6a06a8d4504d6b9f7af7905a414d2ee06ab76
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:04:34 2020 +0200
Some minor changes.
commit 4e020246702889269efe1a191788992164c508d6
Merge: 50a64d927 e05c9267a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 16:17:40 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 50a64d927e6c4f4b0e4688e4cbfca694bc3f922a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 13:07:03 2020 +0200
Fix far plane.
commit 7dd06da34cae8f9ea3b6c889fe965181f3fd3949
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:25:35 2020 +0200
Add shadows.glsl.
commit 618a18c998778bf871b905a74657440fcc384c80
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:10:22 2020 +0200
Adding shadows, greedy meshing, and more.
commit eaea83fe6a5cb1cb0ba8beef888183c718258496
Merge: 267018495 2f89b863e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 22:47:07 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 2670184954a13e4a9e7a4e35ba79aac0c5fac2f7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 21:20:01 2020 +0200
Make civsim and sites deterministic.
For anything in worldgen where you use a HashMap, *please* think
carefully about which hasher you are going to use! This is
especially true if (for some reason) you are depending on hashmap
iteration order remaining stable for some aspect of worldgen.
commit f8376fd5dc72b4a9c2f51a6b4570d59c8b8e9343
Merge: 654f7e049 cdee191dd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 17:53:57 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 654f7e049258d9da27c09608bbe6a46ffa8787e5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed May 20 21:22:30 2020 +0200
Correct backface culling.
commit 560501df05ca725409b0f2e4eb31bdfdc15fd0c7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue May 19 17:22:06 2020 +0200
Greedy messhing for shadows.
commit a4d87e1875ca543436e6bbbeb20348facc5a52d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun May 17 05:59:00 2020 +0200
Shadow maps work for lantern.
commit 243d0837b8a3b08172c9a3c348d964d7ddc2a0a8
Merge: 04382dc28 71dd520cd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:53:13 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 04382dc28632b6c66e8821f6870c0daaa1c1901a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:22:17 2020 +0200
WIP: better graphics config, better LOD, shadow maps.
commit 22ddbad3eb32bfa70f0932176022208fe67ded81
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 18:54:09 2020 +0200
Minor shader fixes.
commit 746a10e8d01ac235f994b0cde78fa48998602a1f
Merge: 0f4a0e763 40ab94673
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 04:02:09 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0f4a0e763db3afbdc4fb0558611f38326ca87151
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 23:03:24 2020 +0200
Switch back to pop-in terrain.
commit dd74fa7e4a53667b38811d7aec58d7f6a68889bb
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 22:58:55 2020 +0200
LOD shading closer to voxel shading.
commit ef67bd58ba0bdaf622b078892d768263b6cba268
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 28 20:49:03 2020 +0200
Experimental underwater lighting.
commit 2c5ad9d07605e80d5fd5679dd3a5d70c605b86a9
Merge: 748279835 303967a6f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 22:35:24 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7482798354eda18c8207950080fc24d443a369de
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 21:59:55 2020 +0200
Replace discard in figure-frag.
commit d83b4ae69be4912f69bf7835f509c68a1c7770a4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:45:57 2020 +0200
Fix sprite lighting, HDR from focus_pos.
commit 0594238004f116274905fa0ed7c2b6c417ed1d29
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:14:10 2020 +0200
Proper HDR from point lights.
commit 48c93d2b41ce5743103d18e76cc228f5ac766492
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 14:01:43 2020 +0200
Brighter ambiance, darker LOD shadows.
commit e0452e895ccfa8a43f368cae3b8b8aedc24dad93
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 13:13:23 2020 +0200
More proper HDR.
commit 4c6da3ed16cfeebb455e40da5f557b4af9a499d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 00:13:10 2020 +0200
Trying LOD noise.
commit 682a3d74c85df5503ffe1fc1cc891bce789df1ad
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 23:11:08 2020 +0200
Fix LOD heights in towns.
commit cc39e5734e8b18f9077bf42e66337c1319dd6b6e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 21:01:23 2020 +0200
More LOD fixes.
commit 8116b21c2e51c836e77894e309ac273caf2917b3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:54:43 2020 +0200
I like this coloring.
commit bc2560ea90b36f4b46190005344232d993043ac3
Merge: 14effdd5d e690efe71
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:48:33 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 14effdd5db8747fcf3eb34f03b46b7792e92d1c5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:24:35 2020 +0200
Re-saturate.
commit 48a643955d4435b78179acba0beb4a979905cc31
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:23:57 2020 +0200
Various fixes.
commit f7b497a0c25f4ad4682c71dd1ed6f608052feb9b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 03:22:49 2020 +0200
Render figures again.
commit 44e4aad48deba8266b9f8bdfd3db096b381f5327
Merge: e6f0a5a98 9ec319a18
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 02:01:04 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit e6f0a5a981a82533ba188fff0a54ce98577bb152
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 24 16:12:20 2020 +0200
Add atmospheric scattering.
commit f2953087f691a8edbc001cb98ebf5059fc6f8ac0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 23 00:01:20 2020 +0200
Fix shadowing for specular reflections.
commit ddd4a67a9799b8d08c7dc0c2bec90621c2bed0e3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Apr 22 22:56:12 2020 +0200
HDR fixes.
commit 1015e60deef3c447381996277df7496707a63bd0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 21 18:25:19 2020 +0200
More lighting changes.
commit 80c264abd111fb237e57843efcb5c071d4f84613
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 13 00:29:59 2020 +0200
Lighting experiments.
commit 8414987e589dd5102bad89762a3adaccc0bfe957
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 9 02:38:40 2020 +0200
WIP -- lighting changes and soft shadows.
commit 9cd2b3fb0d6b49776c6dfe463e4169637250b11a
Merge: c7ea687eb 8b149ad11
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:29 2020 +0200
Merge branch 'sharp/new-lighting' into sharp/small-fixes
commit c7ea687ebbc5aace1b455f134a5bf49ce2c7434a
Merge: 476441531 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:02 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 8b149ad11ad4bb75018fcf9519baec27d1c95951
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:32:39 2020 +0200
Trying out a new lighting model.
commit b0ac9f36f755dd06f7c17c46150568064790864f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 07:56:11 2020 +0200
Use bicubic interpolation for terrain.
commit f6fc9307a121514b614bc50ef8eb055953e7da8a
Merge: 33140a295 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 05:01:41 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 4764415312aae6e9ac2d00e86e84577cb958f1ab
Merge: ed2d0111d 13388ee6a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 04:54:48 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 13388ee6a42943f3f79a9cb488346cef18e272fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 20:30:08 2020 +0200
Various fixes (to coloring and to soft shadows).
commit fbd084a94a067082a87cd6d28b82054709bc9265
Merge: 5a089863b 4fdf6896a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 18:50:38 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/map-colors
commit ed2d0111d994262ae836d84d1fe5a45e4de72a0b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 06:49:27 2020 +0200
Combining colors and LOD.
commit 88342640c6b835114d01c797b89fdede3b0a2108
Merge: 33140a295 5a089863b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:49:20 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 33140a2951b8212725f42c758b277aaec4d888f7
Merge: 4c65a5aed f34d4b379
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:36:21 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 5a089863beb01d4794bbe3580ada47b278715ea2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 03:17:49 2020 +0200
Making maps brighter.
This is probably not the right way to do it, but oh well!
commit 32b2c99109dd486aa922886081068f9c550c83f2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 02:46:36 2020 +0200
Horizon mapping and "layered" map generation.
Horizon mapping is a method of shadow mapping specific to height maps.
It can handle any angle between 0 and 90 degrees from the ground, as
long as know the horizontal direction in advance, by remembering only a
single angle (the "horizon angle" of the shadow map). More is explained
in common/src/msg/server.rs. We also remember the approximate height of
the largest occluder, to try to be able to generate soft shadows and
create a vertical position where the shadows can't go higher.
Additionally, map generation has been reworked. Instead of computing
everything from explicit samples, we pass in sampling functions that
return exactly what the map generator needs. This allows us to cleanly
separate the way we sample things like altitudes and colors from the map
generation process. We exploit this to generate maps *partially* on the
server (with colors and rivers, but not shading). We can then send the
partially completed map to the client, which can combine it with shadow
information to generate the final map. This is useful for two reasons:
first, it makes sure the client can apply shadow information by itself,
and second, it lets us pass the unshaded map for use with level of
detail functionality.
For similar reasons, river generation is split
out into its own layer, but for now we opt to still generate rivers on
the server (since the river wire format is more complicated to compress
and may require some extra work to make sure we have enough precision to
draw rivers well enough for LoD).
Finally, the mostly ad-hoc lighting we were performing has been (mostly)
replaced with explicit Phong reflection shading (including specular
highlights). Regularizing this seems useful and helps clarify the
"meaning" of the various light intensities, and helps us keep a more
physically plausible basis. However, its interaction with soft shadows
is still imperfect, and it's not yet clear to me what we need to do to
turn this into something useful for LoD.
commit f8926a5737ddc51f3d585c651a64c43677aae0f4
Merge: a1aee931e 875ae6ced
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Mar 13 13:32:42 2020 +0100
Merge remote-tracking branch 'origin/master' into sharp/map-colors
commit 4c65a5aed353b119aea65a2aaeb94549b67beb42
Author: Treeco <5021038-Treeco@users.noreply.gitlab.com>
Date: Mon Feb 24 16:48:05 2020 +0000
Made LOD setting slider exponential
commit 2fa7b2d20d7233dc8bfd64f9f7f54617575248f1
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 17:49:53 2020 +0000
Added mist to LoD
commit aab059a450b5f635777129ff82cc15b662965c3c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 15:14:06 2020 +0000
Added LoD slider
commit 779c36b538121c5ade3633ae5cb67bb14c8c3877
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:54:55 2020 +0000
Reduced cost of vertex pushing
commit 9fea150473906b166365b738ebcea07c697daf3d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:38:53 2020 +0000
Fixed maths, improved LoD resolution
commit 5481df38fea5bf183ff376a3337179cfaa5233dc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 11:22:50 2020 +0000
Dynamically relocate LoD vertices to enhance details
commit a3e36a50ababd615da7db1b26158c7906a5def01
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 18:13:51 2020 +0000
Simpler terrain spiral rendering
commit 255f450ae9ac8763db4bede075fb409161ed57cc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:53:17 2020 +0000
Better LoD precision
commit 3d027aebe812a5b8658a4eb8123dc9f61b3776d2
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:04:03 2020 +0000
Better falloff
commit be775c9484b457b2c0b1a494aec03392d0c70e76
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 15:30:45 2020 +0000
Applied good ideas from experimental branch
commit 58587b68545a23c5c04ab4574a4b94b3bc982246
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 16:15:13 2020 +0000
Minor fixes to LoD merging
commit 7b42aebd709c14df2db766aad61d9280ad24d84d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 15:04:44 2020 +0000
Capped LoD dragging
commit 8aafc559f87124e1ea5ca6e3ddc2aa0c242d793c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:54:37 2020 +0000
Better blending between LoD and terrain border
commit edd3455d5161792d87ddc8eadc0ecbad5532b284
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:40:19 2020 +0000
Fixed LoD z depth, added sea level offset
commit b9b06744620114dd5556e73f64fa93c145503a7c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:27:43 2020 +0000
Better LoD smoothing
commit a1aee931e790431560cd2d953ad61d9497072afd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Feb 21 14:52:17 2020 +0100
Adding shadows.
commit 2400786c13dd891c131ed86d48d05df516a8a778
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 13:48:40 2020 +0000
Use world map as LoD source
commit dbf650f504a4c25fbbc2096ac3616c736bf52d23
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Jan 20 00:48:14 2020 +0000
Better clouds at distance
commit 5e6f81b86cdb9730b9b056877b19257075fd5fa8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Jan 19 23:59:02 2020 +0000
sync
commit 745e7540ddb000cc645f612767b337c2ddc3f7c0
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 12:40:48 2019 +0000
Improved cloud falloff mist, faster noise sampling
commit f6a200d0cb866196ba57697466755f9e0c7ea5d8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 10:09:00 2019 +0000
Improved long-range depth precision, removed unnecessary LoD polygons
commit 63d1b2bb2292898d59fb4f4e502201103dfeb86f
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 20:57:46 2019 +0000
Working LoD shader
commit f13d98ee3e58f881e8b978861a67663b59ed91ec
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 11:03:40 2019 +0000
LoD first attempt (stack overflow issue)
2020-08-20 18:34:59 +00:00
|
|
|
|
util::{seed_expan, FastNoise, RandomField, Sampler, StructureGen2d, LOCALITY, NEIGHBORS},
|
|
|
|
|
IndexRef, CONFIG,
|
2019-06-22 21:44:27 +00:00
|
|
|
|
};
|
2019-06-18 21:22:31 +00:00
|
|
|
|
use common::{
|
2020-01-18 18:41:37 +00:00
|
|
|
|
assets,
|
(See sharp/lod-history) LOD, shadows, greedy meshing, new lighting, perf
---
Pretty much a Veloren fork at this point. Here's a high level overview of the changes (will be added to CHANGELOG just before merge).
At a high level this MR incorporates roughly two groups of changes.
The first group consists of new game features: more flexible map sizes, level of detail terrain, shadow maps, and a new lighting
engine. This is "feature work" that (mostly) only adds new things to Veloren, and mostly shouldn't affect old stuff.
The second big group of changes are those addressing the fallout from all the new features. These include performance fixes of
various sorts: the addition of multiple graphics options and optimization of the cheap ones to avoid work, switching all voxel
models to use some variant of greedy meshing, switching over much of our CPU-side vector math to exploit SIMD instructions
(coinciding with a fork of `vek`), and a rewrite of how the UI handles text rendering (coinciding with updates to our fork
of `conrod`). Making Veloren's hardcoded colors appear correct under the new lighting engine also required considerably
changes (TODO: Fill in this section when it's complete).
The second category of changes often heavily touches code owned by other people, including frequently modified code "owned" by a
handful of people, so I recommend that this code be reviewed particularly carefully.
---
At a high level (each will be described in more detail below):
- The world map has been refactored.
- The world size is no longer hardcoded (@zesterer).
- The map generation code was made generic to allow using it outside of the `world` crate (@zesterer).
- On world creation, we now compute *horizon maps* (@zesterer).
- The way we pass the world from the server to the client has been updated (@xMAC94x).
- Artifacts related to image rotation were fixed (@imbris).
- Multiflow rivers were enabled (@zesterer).
- In the process of making changes related to the world map, various incidental fixes and optimizations were required.
- The new *level of detail* feature was added (@zesterer wrote part of this and has checked out the rest).
- A new LOD terrain rendering step was added to the pipeline.
- The LOD terrain quality was made configurable via a graphics setting.
- Horizon maps were used to cast shadows from LOD chunks on both LOD and non-LOD terrain.
- A "voxelization" effect was incorporated into rendered LOD terrain to make it blend better into the world.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Veloren's lighting has been completely overhauled (@zesterer has already checked most of this out).
- A semi-accurate index of refraction was assigned to our materials.
- A new, more realistic, physically based approach to lighting was used using the *Ashikhmin Shirley* BRDF.
- We emulate *atmospheric scattering* using equations designed for measuring solar panel light exposure.
- We attempt to compute *realistic light attenuation* in water using its real material properties.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Point and directional lights now cast realistic shadows, using *shadow mapping.* (@imbris, @zesterer, @Treeco, @YuriMomo)
- Point light shadow maps were added to the rendering pipeline, using geometry shaders and *seamless cube maps*.
- Directional light shadows were added to the rendering pipeline, using LISPSM together with disabling *depth clamping*.
- "Shadow-only" chunks and NPCs were added to prevent shadows from models behind you from disappearing.
- In the process of making changes related to shadow maps, various incidental fixes and optimizations were required.
The addition of shadow maps, LOD terrain, and the new lighting all led to significant performance degradation, on top of other
changes happening in master. Therefore, a large number of performance improvements were also needed:
- The graphics options were made much more flexible and configurable, and shaders were optimize.
- New options were provided for how to render lights and shadows (@Pfauenauge, @zesterer).
- Graphic setting storage and configuration were overhauled to make adding new features easier (@Pfauenauge, @imbris).
- Shaders were rewritten to utilize GLSL's preprocessor to avoid overhead (@zesterer, @YuriMomo).
- In the process of making changes related to providing additional rendering options, various incidental fixes and optimizations were required.
- Voxel model creation was switched to use *greedy meshing.*
- A new voxel meshing method, greedy meshing, was added (@imbris).
- Uses of the older meshing methods were migrated to use greedy meshing (@imbris, @jshipsey, @Pfauenauge).
- New restrictions were added to terrain, figure, and sprites to future proof them for further optimizations (@jshipsey, @Pfauenauge, @zesterer).
- Most positions are now relative to either chunk or player position for better precision (@imbris, @zesterer, @scottc).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- Animation and terrain math were switched to use SIMD where possible.
- Fixes were made to vek to make its SIMD feature usable for us (@zesterer, @imbris).
- The interface and types used in bone animation were changed in various ways (@jshipsey, @Snowram, @Pfauenauge).
- Redundant code generation for body animation is now partly taken care of by a macro (@jshipsey, @Snowram, @Pfauenauge).
- Animation code was modified to to use vek's SIMD representation where possible (@jshipsey, @Snowram, @Pfauenauge).
- Terrain meshing code and shadow map math were also modified to use vek's SIMD representation (@imbris).
- SIMD instruction generation was enabled (@YuriMomo, @jshipsey, @Snowram, @imbris, @Angelonfira, @xMAC94x).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- The way we cache glyphs was completely refactored, fixed, and optimized.
- Our fork of `conrod` was optimized in various ways (@imbris).
- Our fork of `conrod` now exposes whether a widget was updated during the current frame (@imbris).
- Our use of the glyph cache was rewritten for correctness (@imbris).
- A *text cache* was introduced that lets us skip remeshing glyphs that have not changed (@imbris).
- Various changes were made to reduce pressure on the glyph cache, with more planned (@imbris, @Pfauenauge).
- In the process of making changes related to the glyph cache, various incidental fixes and optimizations were required.
- Colors were changed to keep Veloren's look consistent with master.
- Some older tree models were brought back (@Pfauenauge).
- TODO(@Sharp): All hardcoded colors were extracted and made hotloadable.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Hardcoded colors were fixed to conform to Veloren's style.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Color models were fixed to conform to Veloren's style.
A detailed description of the involved changes follows.
---
- The world size is no longer hardcoded. All functions dependent on world size now take a `WorldSizeLg`, which holds the base 2 logarithm of each actual world dimension and is guaranteed to maintain certain properties (outlined in `common/src/terrain/map.rs`). Additionally, many utility functions that utilize the world size were moved into `common` as well (mostly `common/src/terrain/mod.rs`). Finally, the world map format was updated in order to store its size explicitly, with a migration path from the old format that should work whenever the old formatted map was a square (practically always). See `world/src/sim/mod.rs` for these changes.
- The map generation code was made generic to allow using it outside of the `world` crate. The parts of the map generating code that do not need to query the world were moved over to `common/src/terrain/map.rs`, allowing them to be used from the client without creating a dependency on `world`. The rest of it was turned into helper functions in `world/src/sim/map.rs`, which can be passed as closures to the generic map generation code to complete its construction. This also means that colors are now passed in separately to the map generation function. See <https://veloren.net/devblog-78/> for more details.
- On world creation, we now compute *horizon maps*. See the function in `world/src/sim/util.rs`.
Given a height map and a plane intersecting that height map, our horizon maps allow us to encode enough information to reconstruct shadows for each point on the height map using only the *horizon angle* (the angle at which the sun starts to become visible). As Veloren's sun only covers one plane, this is sufficient for encoding sun shadows for LOD terrain, by encoding two angles per chunk (one for each 90 degrees the sun covers). We can also use this for the moon, if we want, since the moon follows the same path. Additionally, we store the *height* of the furthest occluder, to try to make the shadows volumetric; so this means 4 bytes in total for each chunk.
Support for horizon maps has been merged into the map functionality in common as well.
- The way we pass the world from the server to the client has been updated. Rather than passing the prerendered map, we instead pass three maps with values for each chunk; one with the color information, a second with altitude information, and a third with horizon map information. We then reconstruct the map on the client, together with some additional information we send from the server (like the sea level and maximum height). See `common/src/msg/server.rs` for a detailed description of the format of `WorldMapMsg`, and `server/src/libr.rs` and `client/src/lib.rs` for details of the map construction and parsing.
- Artifacts related to image rotation were fixed. See the commit message for commit SHA `cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e` for a detailed explanation. This involved changes to shaders, the addition of a new type of graphic (also reflected in the graphic cache) that allows specifying a border color (which automatically makes the associated texture immutable), and some related fixes. I reproduce the first two paragraphs of the MR description as well:
```
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
```
- Multiflow rivers were enabled.
This does not really need to be part of this MR, and would be easy to revert, but since it seemed to provide a nice improvement it's currently packaged with it.
We already computed multiple outflows from each chunk for erosion purposes long before this MR.
However, we never modified river rendering to be able to handle this case (just a single downhill river flow is complex enough!) so this was not exposed when deciding which chunks were rivers.
Now that
- In the process of making changes related to the world map, various incidental fixes and optimizations were required. Some examples of fixes include making sure terrain is never lowered to below sea level (to make the shadow maps report correct values), fixing map altitudes and colors to understand things like cliffs and "block level" coloring (that doesn'te xist on the column level), and fixing a crashbug when rendering images for the UI where source pixels are strongly rectangular. Some examples of related performance fixes include avoiding allocating a fresh vector for all the maps (i.e. copying it over to change the format from `[u32; n]` to `DynamicImage` and then copying again to convert to `RgbaImage`), and instead using the `gfx::memory::slice` function to accomplish the same thing. These sorts of changes are spread all arond the code.
This includes the additon of a new scene, `voxygen/src/scene/lod.rs`, a new pipeline `voxygen/src/render/pipeline/lod_terrain.rs`, and new shaders `assets/vxygen/shaders/lod-terrain-vert.glsl` and `assets/vxygen/shaders/lod-terrain-frag.glsl`, as well as associated changes to the renderer in `voxygen/src/render/renderer.rs`.
The main idea behind our initial approach to LOD was to take the world data we now get from the server (altitude, color, and horizon mapping).
- Some previously computed values were turned into shader uniforms for better prediction on weak processors. (@zesterer)
- Calls to power or trig functions were removed or replaced with multiplications, where possible.
- After some deliberation
- To properly handle sprite "waving" for nearby sprites,
We explicitly designed the greedy meshing system with figures and sprites in mind.
In both cases, we want to be able to *efficiently* pack many different models into the same texture, especially in cases where we know
we will either not be removing any of the grouped-together from the models from the texture, or will remove all of them at once (so
they can be packed into some specific subtexture).
For sprites, since we know every model in advance and never intend to deallocate them, we currently pack them all as efficiently as
possible into one giant tetxure atlas. However, in the future we might opt to pack them slightly less efficiently in exchange for
shrinking the sprite vertex size.
For figures, we pack all the textures for each *model* into the same atlas.
is a global texture atlas used for every sprite, and for figures which is why we have the ability to mesh multiple
models to the same texture area (using the simple texture atlas allocator) without requiring intermediate vector allocations.
This is accomplished by delaying the time when we actually write the color and light data to the texture until *after* all the
model vertices have been meshed; then, we can just allocate the whole color/light array at once, making the atlas we use an
exact fit. In computer science-y terms, we accomplish this delay by, after we perform the initial greedy meshing (without
texture information), not continuing to create the texture data, but instead constructing a *continuation*--that is, a function
that, when called, will execute the rest of the computation. We push this continuation (which in Rust terms is a `FnOnce` closure
that takes the `ColLightsInfo` that it is supposed to write to as context) onto a
onto a vector
resizing. To allow for suspended writes to texture data, Rust pointed out to me that the continuation that would eventually write the color and light data to the texture atlas (the one that is shared by all models sharing the same greedy mesher) would have to *own* whatever data it mshed. Because we often generate the model data to mesh as a temporary in `voxygen/src/load.rs`, the
- Matrix multiplications in the shader were reduced for figure data (@zesterer).
- Vertex "waves" for fluid data were removed.
- Terrain "bending" near edges was removed.
- Scaling was fixed to make sure empty space was not introduced in a space previously occupied by a block. It was also changed to take ownership of its voxel data,
rather than sharing it, to let it be used with meshing.
- Rust's nightly version was bumped in order to use the `array_map` function, which lets us reuse more code between the simple map and `FigureModelCache`.
- PositionedGlyph::standalone.
---
I tried to cite sources in many cases[^realtime],[^lloyd],[^lispsm],[^pbrt],[^greedy],[^tjunctions]
where I needed features from elsewhere but I am particularly grateful for the following resources,
esepcially where they have accompanying source code. I linked all of them that are accessible to the public (those that are not were
obtained through legal means).
[^realtime]: Eisemann, Elmar, Michael Schwarz, Ulf Assarsson, Michael Wimmer. Real-Time Shadows. A K Peters/CRC Press (T&F), 20160419.
[^lloyd]: Lloyd,B. 2007. [Logarithmic perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). PhD thesis, University of North Carolina.
[^lispsm]: Wimmer, M., Scherzer, D., and Purgathofer, W. 2004. [Light space perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). In Proceedings of Eurographics Symposium on Rendering 2004, pp. 143– 152.
[^pbrt]: Pharr, Matt, et al. [http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf](Physically Based Rendering: From Theory to Implementation). Third edition, Morgan Kaufmann Publishers/Elsevier, 2017.
[^greedy]: mikolalysenko. “Meshing in a Minecraft Game.” 0 FPS, 30 June 2012, <https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/>.
[^tjunctions]: blackflux. “Meshing in Voxel Engines – Part 1.” Blackflux.Com, 23 Feb. 2014, <https://blackflux.wordpress.com/2014/02/23/meshing-in-voxel-engines-part-1/>.
I am also especially grateful to Khronos, Wikiepdia, and stackoverflow for answering many of my specific questions while writing the MR.
---
Squashed commit of the following:
commit 300505e7305a2fdac722a808ee8538323f215f39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 18:46:25 2020 +0200
Fixing cargo doc and typo in CHANGELOG.
commit ec0aeb18e8499d7d84ef818331b4b65c3d76cea6
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 15:38:50 2020 +0200
Hopefully final commit for the LOD branch.
commit 5e8ea0b1eaac02903a02feb2eb038d195de4872f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 10:14:26 2020 +0200
Falling back to power as stopgap.
commit e44a1cbf46504ee9931a01bdc9033e145500d557
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 09:25:41 2020 +0200
Address imbris feedback.
Temporarily disables shiny water, lowers max VD.
These restrictions will be lifted soon after merging.
commit 561e25778a108ac3712f5ec2ce3a51234c4430d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 08:31:13 2020 +0200
Tweaking shaders a bit.
commit 7d19259078ce0dd7b3742ad7d0cb3fab3ece3fdc
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:59:43 2020 +0200
Fix view example as well.
commit 051cd4934e0fad2c0b15db4380a4189fa318679f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:29:06 2020 +0200
Fix meshing benchmark.
commit c95e07db3b4dcca285678985e65e31b927cb1c61
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 05:46:22 2020 +0200
Address MR feedback, fix scene clouds.
commit 1bfb816cabdb3ffc1e507a009c2d98696b4b573a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:39:36 2020 +0200
Incorporating Pfau's figure color changes.
New eyes and new humanoid colors.
commit 3f9b89a3ac7b3356b1dba0d1a8f6541357f81469
Merge: e2f5162e4 62c53963a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:29:41 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit e2f5162e4f96f4124aa43488f7245d341b3dcfd4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:28:38 2020 +0200
World colors are all hotloadable.
They live in assets/world/style/colors.ron.
Only a small handful of hardcoed colors remain in World; they are either
part of the map, or difficult to disentangle from the rest of the
computation. Comments are made where appropriate.
commit 62c53963abe1975009d34a8f9515a355bef24f31
Author: Marcel Märtens <marcel.cochem@googlemail.com>
Date: Wed Aug 19 15:59:00 2020 +0200
replace pretty_env_logger with tracing
commit 5b1625f99d9586fe80e2232f583ec5af9f953099
Merge: d71003acd 4942b5b39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:15:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit d71003acdabeff970b3928e97c26af6847b5b78e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:14:34 2020 +0200
Hotloading colors, part 1: colors in common.
Currently, this just entails humanoid colors. There are only three
colors not handled; the light emitter colors in
common/src/comp/inventory/item/tool.rs. These don't seem important
enough to me to warrant making hotloadable, at least not right now, but
if it's needed later we can always add them to the file.
commit 63b5e0e553eb2ea49276f192a6fc7dd65254270d
Merge: c32b337a4 6d2c4b9c1
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 13:05:37 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c32b337a46e10d9de473d178a94a3ccd61c39bb3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:52:04 2020 +0200
Fixing LOD grid, for real.
commit a166ae0360395387e09fb35a1f84210c2ce5ec24
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:28:05 2020 +0200
Addressing imbris's initial feedback.
Fixes two minor bugs: explosion particles were no longer spawning
randomly, and LOD grids were not perfectly even.
commit 4cbad004f44060994252dd3d38647a14a589712f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:27:58 2020 +0200
Bumping nightly per request.
commit 548680276aac77c25d43d16b5622f847d474dbef
Merge: acc098604 8f8b20c91
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:26:06 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit acc0986040589a3492f88a740bc3c3fc693b26d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:28:32 2020 +0200
Lower resolution due to lying drivers.
commit d3b878de2a52c358d2944a6bbd0555dad7fbdb10
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:15:38 2020 +0200
Fix issues msh encountered with Intel 4600.
commit 10245e0c1b0cb6fae10d86409435364edc6102ef
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 21:15:02 2020 +0200
Merge more models into one mesh than we did previously.
commit 3155c31e663c52ae5c3a53d5fb5665892a1a498a
Merge: 7204cc8a7 3c199280e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:35:22 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7204cc8a7a4f74a30306bd205d9834fee4bb944f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:34:43 2020 +0200
Fix not yet done NPC animations.
This forces them all to be the idle animation if not specified.
This fixes issues where you'd have giant NPCs in water.
commit bc83360f2a08918f19d417b5f772e1ff554dba08
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 19:36:37 2020 +0200
Try to fix some bugs:
- Z fighting with LOD terrain and water.
- Audio SFX not playing.
commit 1fd104aa603bf3781b6526a5cada46aeca3049dd
Merge: 862df3c99 7c2c392a3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 12:02:31 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 862df3c9976c4da9bd7cfd784f1a85973127968a
Merge: 0a4218ed9 75c1d4401
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 05:52:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0a4218ed9d541a2b34c133351bea38a99ddf4ea7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 22:27:14 2020 +0200
Fix particle depth.
commit f51dfdeb442d0dd5243dd2f344fa4be295bd0875
Merge: c6251a956 5e6dc0471
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:19:04 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit c6251a956ad376400dca5c23420cf8d213dc8fdf
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:15:46 2020 +0200
Cache figures more intelligently.
Cache figures for longer, and don't cache character states for the
player except where they actually affect the rendered model.
commit 0ed801d5404982c6fb63b1eaa4567d908b294c9d
Merge: c11b9bdf0 eea64f78f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 16:32:24 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c11b9bdf0a53bf9884d2f5a48fec9b01d582df1a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 11:47:15 2020 +0200
Remove unneeded Clippy annotation.
commit 16aa9ef40af56d69289d00aafb3deadfb8bd4f35
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 8 00:53:02 2020 +0200
Fix hotloading and Clippy.
commit 3dc973e0be5b758da1e9805eb764ad401374cd0c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 23:50:27 2020 +0200
Major speedups with SIMD.
commit fba64a7d93d5a96077ce87287bbce6ab9b7fbcae
Merge: 76429d00e d1e10b178
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:19 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 76429d00eea00d212fbd672a84ee91e75b19b938
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:10 2020 +0200
Add clippy.toml.
commit c79f512f84dbb83cb82b7954db68ff241dfd8e41
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 11:55:20 2020 +0200
Fix all clippy issues, clean up Rust code.
commit 6f90e010b3fbefb53b0d632e819931350015b6b8
Merge: 77a8c7c26 5929cfa5c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:30 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 77a8c7c267d3f44a1a62bd6b2274359973c5e4d4
Merge: b44e44232 44febaabd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:10 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 5929cfa5c713aa392110bbb62407f76caf53c3df
Author: jshipsey <jshipsey18@gmail.com>
Date: Thu Aug 6 20:47:27 2020 -0400
fixed in-hand arrow bug
commit b44e442325d828f1cd564d66908f89d09e80474b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 6 13:40:35 2020 +0200
Miscellaneous performance improvements.
commit be37acf287c1360d8085862526ac3365ffd1d768
Merge: 125d7fc6c c11876547
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 05:49:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 125d7fc6c4dcd8c8c5f27b8268a4d64f409f3644
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 04:55:31 2020 +0200
Abstract over simd vs. repr_c vectors.
Also some minor improvements to Event size.
commit d4d4956e9252e1241ce110b2aa85076c6b1e2a23
Merge: 5f3b7294a aced5f979
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:56:54 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 5f3b7294af1f8533edc2620b58863c248e2b07af
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:43:52 2020 +0200
Fix formatting issues I missed before.
commit a428a3ebba70dcab63dd0f8cd983120c90617271
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:41:51 2020 +0200
Fix clippy warnings, part 1.
There aer still a bunch of type too complex and
function takes too many arguments warnings that I'll fix later
(or ignore, since in the one case I did fix a function takes too
many arguments warning I think it made the code *less* readable).
commit ba54307540ed8a937ac08209730284fc653af85b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 30 13:22:42 2020 +0200
Fix light animations so they are removed when the light turns off.
commit 7e0f4bcbf0f4717145d8beac40d52e3acebbe2aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 21:10:20 2020 +0200
Fix crash in edge case for pixel art.
commit 56da06f7a351e2b949e9b014a90b974d511a0924
Merge: cf74d55f2 9f53a4a19
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:56:52 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:29:52 2020 +0200
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
The first concern was addressed by fixing the dimensions of the map
images drawn from the UI (so that we always use a square source
rectangle, rather than a rectangular one according to the dimensions of
the map). We also fixed the way rotation was done in the fragment
shader for north-facing sources to make it properly handle aspect ratio
(this was already done for north-facing targets). Together, these fix
rendering issues peculiar to rectangular maps.
The second and third concerns were jointly addressed by adding an
optional border color to every 2D image drawn by the UI. This turns
out not to waste extra space even though we hold a full f32 color
(to avoid an extra dependency on gfx's PackedColor), since voxel
images already take up more space than Optiion<[f32; 4]> requires.
This is then implemented automatically using the "border color"
wrapping method in the attached sampler.
Since this is implemented in graphics hardware, it only works (at
least naively) if the actual image bounds match the texture bounds.
Therefore, we altered the way the graphics cache stores images
with a border color to guarantee that they are always in their own
texture, whose size exactly matches their extent. Since the easiest
currently exposed way to set a border color is to do so for an
immutable texture, we went a bit further and added a new "immutable"
texture storage type used for these cases; currently, it is always
and automatically used only when there is a specified border color,
but in theory there's no reason we couldn't provide immutable-only
images that use the default wrapping mdoe (though clamp to border
is admittedly not a great default).
To fix the maps case specifically, we set the border color to a
translucent version of the ocean border color. This may need
tweaking going forward, which shouldn't be hard.
As part of this process, we had to modify graphics replacement to
make sure immutable images are *removed* when invalidated, rather
than just having a validity flag unset (this is normally done by
the UI to try to reuse allocations in place if images are updated
in benign ways, since the texture atlases used for Ui do not
support deallocation; currently this is only used for item images,
so there should be no overlap with immutable image replacement,
so this was purely precautionary).
Since we were already touching the relevant code, we also updated
the image dependency to a newer version that provides more ways
to avoid allocations, and made a few other changes that should
hopefully eliminate redundant most of the intermediate buffer
allocations we were performing for what should be zero-cost
conversions. This may slightly improve performance in some
cases.
commit ad18ce939940a8c697270f6e9b94db9942fd8295
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 13:21:09 2020 +0200
Fix continent scale hack.
commit 36b1cb074f5b195aebd7dbbc3da7f0246a1a18ec
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 12:11:40 2020 +0200
Enable loading different sized maps without a recompile.
We may want to tweak the effects of the continent_scale_hack.
commit 13b6d4d534cc4814b7cb3294ca41bbfea0a6b186
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 10:55:48 2020 +0200
Removing WORLD_SIZE, part 1.
Erased almost every instance of WORLD_SIZE and replaced it with a local
power of two, map_size_lg (which respects certain invariants; see
common/src/terrain/map.rs for more details about MapSizeLg). This also
means we can avoid a dependency on the world crate from client, as
desired.
Now that the rest of the code is not expecting a fixed WORLD_SIZE, the
next step is to arrange for maps to store their world size, and to use
that world size as a basis prior to loading the map (as well, probably,
as prior to configuring some of the noise functions).
commit 30b1d2c6428230a9eaa0d749cdcbbd6f1cbccd78
Merge: 7d56ba31b 1377b369f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:58 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 7d56ba31b445441461b28a07fc495d7d4f047c17
Merge: 2101113b4 598f14b25
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 1377b369f6db2258e910d467a5740f31789e3ded
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sun Jul 19 23:25:38 2020 +0200
more saturated pumpkins
commit ae8d50527f93bb0616c2ad46ce4dacb63bc37c6d
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sat Jul 18 20:29:56 2020 +0200
acacia models
commit 2101113b467e691de787392d7f20f1745f5637bd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 18 18:55:25 2020 +0200
Higher detail LOD.
commit add2cfae04b4385fa5590e11e2bd5229d9dee0aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 16 01:57:39 2020 +0200
Revert some irrelevant stuff.
commit 2e2ab3dc1eaa59a4aef7f8d34a53d8aae4c8553a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 15 13:30:49 2020 +0200
Fixing various things about shadows.
* Correcting optimal LISPSM parameter.
* Figure shadows are cast when they're not visible.
* Chunk shadows stay cast until you look away.
* Seamless cubemaps for point lights.
* Etc.
commit 6c31e6b56217274285b597af297036691ea5d897
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 19:50:26 2020 +0200
Fix shadow creation.
commit 6332cbe006115ae205597529cd8bbccd146c2cca
Merge: be438657c 930e0028b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:47:00 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit be438657c33d7b5bfb0a9582c3ed3fd366637323
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:28:08 2020 +0200
Tweaks to shadows.
Added shadow map resolution configuration, added seamless cubemaps,
documented all existing rendering options, and fixed a few Clippy
errors.
commit 23b4058906013c7d2a40c286e20e32c5fbd897ed
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 10:11:19 2020 +0200
Fix moon, use nonlinear noise for terrain.
Note that the latter has a bit of performance cost.
commit 7fbe5cbfbb9dc29607957b8e62f432a4deed193d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:23:02 2020 +0200
Address lies about max texture size.
commit bcfc62b5e13a1cdd83f57535fde4694720bebfd9
Merge: 75e3626a7 18a08e8fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:22:08 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 75e3626a785919f43fdcf2127c2b10e3e4df2f9f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:21:52 2020 +0200
OpenGL 3.3 minimum.
commit 18a08e8fe2739f02af99a5d2cb4e7c38c49e858b
Author: Monty Marz <m.marzouq@gmx.de>
Date: Tue Jul 7 23:57:52 2020 +0200
settings localization
commit 90c5d1ca3620092bc3ae10b2211489eb1cf6f5e8
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 21:11:48 2020 +0200
Lower near distance.
commit 0e66f02b25aaddaa2dfddbbc89cd67de54a9a7b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 20:09:01 2020 +0200
All sprites sway in the wind now.
commit db1401a6910bf42dcf502462c90038752ff5fbdb
Merge: 69e508d8c e8b4b29d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 19:34:17 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 69e508d8c94d8973033817ca86f357e466fc7c4d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 18:41:37 2020 +0200
Make it easy to switch to SIMD for math.
commit ffe0f5928c7a7e87d00cb5426b3b1d831d7e02fd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 21:21:12 2020 +0200
Fix some issues with underwater rendering.
commit bfda6da42f38fd02c31ee92c81ab785a3e50c2a0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 19:17:59 2020 +0200
Fix some minor display issues.
commit 0ed752e087968cf901301884aaeae698e32ef8a5
Merge: ccc6a06a8 518edcb85
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:14:21 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit ccc6a06a8d4504d6b9f7af7905a414d2ee06ab76
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:04:34 2020 +0200
Some minor changes.
commit 4e020246702889269efe1a191788992164c508d6
Merge: 50a64d927 e05c9267a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 16:17:40 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 50a64d927e6c4f4b0e4688e4cbfca694bc3f922a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 13:07:03 2020 +0200
Fix far plane.
commit 7dd06da34cae8f9ea3b6c889fe965181f3fd3949
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:25:35 2020 +0200
Add shadows.glsl.
commit 618a18c998778bf871b905a74657440fcc384c80
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:10:22 2020 +0200
Adding shadows, greedy meshing, and more.
commit eaea83fe6a5cb1cb0ba8beef888183c718258496
Merge: 267018495 2f89b863e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 22:47:07 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 2670184954a13e4a9e7a4e35ba79aac0c5fac2f7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 21:20:01 2020 +0200
Make civsim and sites deterministic.
For anything in worldgen where you use a HashMap, *please* think
carefully about which hasher you are going to use! This is
especially true if (for some reason) you are depending on hashmap
iteration order remaining stable for some aspect of worldgen.
commit f8376fd5dc72b4a9c2f51a6b4570d59c8b8e9343
Merge: 654f7e049 cdee191dd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 17:53:57 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 654f7e049258d9da27c09608bbe6a46ffa8787e5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed May 20 21:22:30 2020 +0200
Correct backface culling.
commit 560501df05ca725409b0f2e4eb31bdfdc15fd0c7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue May 19 17:22:06 2020 +0200
Greedy messhing for shadows.
commit a4d87e1875ca543436e6bbbeb20348facc5a52d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun May 17 05:59:00 2020 +0200
Shadow maps work for lantern.
commit 243d0837b8a3b08172c9a3c348d964d7ddc2a0a8
Merge: 04382dc28 71dd520cd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:53:13 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 04382dc28632b6c66e8821f6870c0daaa1c1901a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:22:17 2020 +0200
WIP: better graphics config, better LOD, shadow maps.
commit 22ddbad3eb32bfa70f0932176022208fe67ded81
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 18:54:09 2020 +0200
Minor shader fixes.
commit 746a10e8d01ac235f994b0cde78fa48998602a1f
Merge: 0f4a0e763 40ab94673
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 04:02:09 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0f4a0e763db3afbdc4fb0558611f38326ca87151
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 23:03:24 2020 +0200
Switch back to pop-in terrain.
commit dd74fa7e4a53667b38811d7aec58d7f6a68889bb
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 22:58:55 2020 +0200
LOD shading closer to voxel shading.
commit ef67bd58ba0bdaf622b078892d768263b6cba268
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 28 20:49:03 2020 +0200
Experimental underwater lighting.
commit 2c5ad9d07605e80d5fd5679dd3a5d70c605b86a9
Merge: 748279835 303967a6f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 22:35:24 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7482798354eda18c8207950080fc24d443a369de
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 21:59:55 2020 +0200
Replace discard in figure-frag.
commit d83b4ae69be4912f69bf7835f509c68a1c7770a4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:45:57 2020 +0200
Fix sprite lighting, HDR from focus_pos.
commit 0594238004f116274905fa0ed7c2b6c417ed1d29
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:14:10 2020 +0200
Proper HDR from point lights.
commit 48c93d2b41ce5743103d18e76cc228f5ac766492
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 14:01:43 2020 +0200
Brighter ambiance, darker LOD shadows.
commit e0452e895ccfa8a43f368cae3b8b8aedc24dad93
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 13:13:23 2020 +0200
More proper HDR.
commit 4c6da3ed16cfeebb455e40da5f557b4af9a499d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 00:13:10 2020 +0200
Trying LOD noise.
commit 682a3d74c85df5503ffe1fc1cc891bce789df1ad
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 23:11:08 2020 +0200
Fix LOD heights in towns.
commit cc39e5734e8b18f9077bf42e66337c1319dd6b6e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 21:01:23 2020 +0200
More LOD fixes.
commit 8116b21c2e51c836e77894e309ac273caf2917b3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:54:43 2020 +0200
I like this coloring.
commit bc2560ea90b36f4b46190005344232d993043ac3
Merge: 14effdd5d e690efe71
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:48:33 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 14effdd5db8747fcf3eb34f03b46b7792e92d1c5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:24:35 2020 +0200
Re-saturate.
commit 48a643955d4435b78179acba0beb4a979905cc31
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:23:57 2020 +0200
Various fixes.
commit f7b497a0c25f4ad4682c71dd1ed6f608052feb9b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 03:22:49 2020 +0200
Render figures again.
commit 44e4aad48deba8266b9f8bdfd3db096b381f5327
Merge: e6f0a5a98 9ec319a18
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 02:01:04 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit e6f0a5a981a82533ba188fff0a54ce98577bb152
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 24 16:12:20 2020 +0200
Add atmospheric scattering.
commit f2953087f691a8edbc001cb98ebf5059fc6f8ac0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 23 00:01:20 2020 +0200
Fix shadowing for specular reflections.
commit ddd4a67a9799b8d08c7dc0c2bec90621c2bed0e3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Apr 22 22:56:12 2020 +0200
HDR fixes.
commit 1015e60deef3c447381996277df7496707a63bd0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 21 18:25:19 2020 +0200
More lighting changes.
commit 80c264abd111fb237e57843efcb5c071d4f84613
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 13 00:29:59 2020 +0200
Lighting experiments.
commit 8414987e589dd5102bad89762a3adaccc0bfe957
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 9 02:38:40 2020 +0200
WIP -- lighting changes and soft shadows.
commit 9cd2b3fb0d6b49776c6dfe463e4169637250b11a
Merge: c7ea687eb 8b149ad11
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:29 2020 +0200
Merge branch 'sharp/new-lighting' into sharp/small-fixes
commit c7ea687ebbc5aace1b455f134a5bf49ce2c7434a
Merge: 476441531 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:02 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 8b149ad11ad4bb75018fcf9519baec27d1c95951
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:32:39 2020 +0200
Trying out a new lighting model.
commit b0ac9f36f755dd06f7c17c46150568064790864f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 07:56:11 2020 +0200
Use bicubic interpolation for terrain.
commit f6fc9307a121514b614bc50ef8eb055953e7da8a
Merge: 33140a295 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 05:01:41 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 4764415312aae6e9ac2d00e86e84577cb958f1ab
Merge: ed2d0111d 13388ee6a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 04:54:48 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 13388ee6a42943f3f79a9cb488346cef18e272fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 20:30:08 2020 +0200
Various fixes (to coloring and to soft shadows).
commit fbd084a94a067082a87cd6d28b82054709bc9265
Merge: 5a089863b 4fdf6896a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 18:50:38 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/map-colors
commit ed2d0111d994262ae836d84d1fe5a45e4de72a0b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 06:49:27 2020 +0200
Combining colors and LOD.
commit 88342640c6b835114d01c797b89fdede3b0a2108
Merge: 33140a295 5a089863b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:49:20 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 33140a2951b8212725f42c758b277aaec4d888f7
Merge: 4c65a5aed f34d4b379
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:36:21 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 5a089863beb01d4794bbe3580ada47b278715ea2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 03:17:49 2020 +0200
Making maps brighter.
This is probably not the right way to do it, but oh well!
commit 32b2c99109dd486aa922886081068f9c550c83f2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 02:46:36 2020 +0200
Horizon mapping and "layered" map generation.
Horizon mapping is a method of shadow mapping specific to height maps.
It can handle any angle between 0 and 90 degrees from the ground, as
long as know the horizontal direction in advance, by remembering only a
single angle (the "horizon angle" of the shadow map). More is explained
in common/src/msg/server.rs. We also remember the approximate height of
the largest occluder, to try to be able to generate soft shadows and
create a vertical position where the shadows can't go higher.
Additionally, map generation has been reworked. Instead of computing
everything from explicit samples, we pass in sampling functions that
return exactly what the map generator needs. This allows us to cleanly
separate the way we sample things like altitudes and colors from the map
generation process. We exploit this to generate maps *partially* on the
server (with colors and rivers, but not shading). We can then send the
partially completed map to the client, which can combine it with shadow
information to generate the final map. This is useful for two reasons:
first, it makes sure the client can apply shadow information by itself,
and second, it lets us pass the unshaded map for use with level of
detail functionality.
For similar reasons, river generation is split
out into its own layer, but for now we opt to still generate rivers on
the server (since the river wire format is more complicated to compress
and may require some extra work to make sure we have enough precision to
draw rivers well enough for LoD).
Finally, the mostly ad-hoc lighting we were performing has been (mostly)
replaced with explicit Phong reflection shading (including specular
highlights). Regularizing this seems useful and helps clarify the
"meaning" of the various light intensities, and helps us keep a more
physically plausible basis. However, its interaction with soft shadows
is still imperfect, and it's not yet clear to me what we need to do to
turn this into something useful for LoD.
commit f8926a5737ddc51f3d585c651a64c43677aae0f4
Merge: a1aee931e 875ae6ced
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Mar 13 13:32:42 2020 +0100
Merge remote-tracking branch 'origin/master' into sharp/map-colors
commit 4c65a5aed353b119aea65a2aaeb94549b67beb42
Author: Treeco <5021038-Treeco@users.noreply.gitlab.com>
Date: Mon Feb 24 16:48:05 2020 +0000
Made LOD setting slider exponential
commit 2fa7b2d20d7233dc8bfd64f9f7f54617575248f1
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 17:49:53 2020 +0000
Added mist to LoD
commit aab059a450b5f635777129ff82cc15b662965c3c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 15:14:06 2020 +0000
Added LoD slider
commit 779c36b538121c5ade3633ae5cb67bb14c8c3877
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:54:55 2020 +0000
Reduced cost of vertex pushing
commit 9fea150473906b166365b738ebcea07c697daf3d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:38:53 2020 +0000
Fixed maths, improved LoD resolution
commit 5481df38fea5bf183ff376a3337179cfaa5233dc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 11:22:50 2020 +0000
Dynamically relocate LoD vertices to enhance details
commit a3e36a50ababd615da7db1b26158c7906a5def01
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 18:13:51 2020 +0000
Simpler terrain spiral rendering
commit 255f450ae9ac8763db4bede075fb409161ed57cc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:53:17 2020 +0000
Better LoD precision
commit 3d027aebe812a5b8658a4eb8123dc9f61b3776d2
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:04:03 2020 +0000
Better falloff
commit be775c9484b457b2c0b1a494aec03392d0c70e76
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 15:30:45 2020 +0000
Applied good ideas from experimental branch
commit 58587b68545a23c5c04ab4574a4b94b3bc982246
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 16:15:13 2020 +0000
Minor fixes to LoD merging
commit 7b42aebd709c14df2db766aad61d9280ad24d84d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 15:04:44 2020 +0000
Capped LoD dragging
commit 8aafc559f87124e1ea5ca6e3ddc2aa0c242d793c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:54:37 2020 +0000
Better blending between LoD and terrain border
commit edd3455d5161792d87ddc8eadc0ecbad5532b284
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:40:19 2020 +0000
Fixed LoD z depth, added sea level offset
commit b9b06744620114dd5556e73f64fa93c145503a7c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:27:43 2020 +0000
Better LoD smoothing
commit a1aee931e790431560cd2d953ad61d9497072afd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Feb 21 14:52:17 2020 +0100
Adding shadows.
commit 2400786c13dd891c131ed86d48d05df516a8a778
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 13:48:40 2020 +0000
Use world map as LoD source
commit dbf650f504a4c25fbbc2096ac3616c736bf52d23
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Jan 20 00:48:14 2020 +0000
Better clouds at distance
commit 5e6f81b86cdb9730b9b056877b19257075fd5fa8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Jan 19 23:59:02 2020 +0000
sync
commit 745e7540ddb000cc645f612767b337c2ddc3f7c0
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 12:40:48 2019 +0000
Improved cloud falloff mist, faster noise sampling
commit f6a200d0cb866196ba57697466755f9e0c7ea5d8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 10:09:00 2019 +0000
Improved long-range depth precision, removed unnecessary LoD polygons
commit 63d1b2bb2292898d59fb4f4e502201103dfeb86f
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 20:57:46 2019 +0000
Working LoD shader
commit f13d98ee3e58f881e8b978861a67663b59ed91ec
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 11:03:40 2019 +0000
LoD first attempt (stack overflow issue)
2020-08-20 18:34:59 +00:00
|
|
|
|
msg::server::WorldMapMsg,
|
2020-04-17 23:29:01 +00:00
|
|
|
|
store::Id,
|
(See sharp/lod-history) LOD, shadows, greedy meshing, new lighting, perf
---
Pretty much a Veloren fork at this point. Here's a high level overview of the changes (will be added to CHANGELOG just before merge).
At a high level this MR incorporates roughly two groups of changes.
The first group consists of new game features: more flexible map sizes, level of detail terrain, shadow maps, and a new lighting
engine. This is "feature work" that (mostly) only adds new things to Veloren, and mostly shouldn't affect old stuff.
The second big group of changes are those addressing the fallout from all the new features. These include performance fixes of
various sorts: the addition of multiple graphics options and optimization of the cheap ones to avoid work, switching all voxel
models to use some variant of greedy meshing, switching over much of our CPU-side vector math to exploit SIMD instructions
(coinciding with a fork of `vek`), and a rewrite of how the UI handles text rendering (coinciding with updates to our fork
of `conrod`). Making Veloren's hardcoded colors appear correct under the new lighting engine also required considerably
changes (TODO: Fill in this section when it's complete).
The second category of changes often heavily touches code owned by other people, including frequently modified code "owned" by a
handful of people, so I recommend that this code be reviewed particularly carefully.
---
At a high level (each will be described in more detail below):
- The world map has been refactored.
- The world size is no longer hardcoded (@zesterer).
- The map generation code was made generic to allow using it outside of the `world` crate (@zesterer).
- On world creation, we now compute *horizon maps* (@zesterer).
- The way we pass the world from the server to the client has been updated (@xMAC94x).
- Artifacts related to image rotation were fixed (@imbris).
- Multiflow rivers were enabled (@zesterer).
- In the process of making changes related to the world map, various incidental fixes and optimizations were required.
- The new *level of detail* feature was added (@zesterer wrote part of this and has checked out the rest).
- A new LOD terrain rendering step was added to the pipeline.
- The LOD terrain quality was made configurable via a graphics setting.
- Horizon maps were used to cast shadows from LOD chunks on both LOD and non-LOD terrain.
- A "voxelization" effect was incorporated into rendered LOD terrain to make it blend better into the world.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Veloren's lighting has been completely overhauled (@zesterer has already checked most of this out).
- A semi-accurate index of refraction was assigned to our materials.
- A new, more realistic, physically based approach to lighting was used using the *Ashikhmin Shirley* BRDF.
- We emulate *atmospheric scattering* using equations designed for measuring solar panel light exposure.
- We attempt to compute *realistic light attenuation* in water using its real material properties.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Point and directional lights now cast realistic shadows, using *shadow mapping.* (@imbris, @zesterer, @Treeco, @YuriMomo)
- Point light shadow maps were added to the rendering pipeline, using geometry shaders and *seamless cube maps*.
- Directional light shadows were added to the rendering pipeline, using LISPSM together with disabling *depth clamping*.
- "Shadow-only" chunks and NPCs were added to prevent shadows from models behind you from disappearing.
- In the process of making changes related to shadow maps, various incidental fixes and optimizations were required.
The addition of shadow maps, LOD terrain, and the new lighting all led to significant performance degradation, on top of other
changes happening in master. Therefore, a large number of performance improvements were also needed:
- The graphics options were made much more flexible and configurable, and shaders were optimize.
- New options were provided for how to render lights and shadows (@Pfauenauge, @zesterer).
- Graphic setting storage and configuration were overhauled to make adding new features easier (@Pfauenauge, @imbris).
- Shaders were rewritten to utilize GLSL's preprocessor to avoid overhead (@zesterer, @YuriMomo).
- In the process of making changes related to providing additional rendering options, various incidental fixes and optimizations were required.
- Voxel model creation was switched to use *greedy meshing.*
- A new voxel meshing method, greedy meshing, was added (@imbris).
- Uses of the older meshing methods were migrated to use greedy meshing (@imbris, @jshipsey, @Pfauenauge).
- New restrictions were added to terrain, figure, and sprites to future proof them for further optimizations (@jshipsey, @Pfauenauge, @zesterer).
- Most positions are now relative to either chunk or player position for better precision (@imbris, @zesterer, @scottc).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- Animation and terrain math were switched to use SIMD where possible.
- Fixes were made to vek to make its SIMD feature usable for us (@zesterer, @imbris).
- The interface and types used in bone animation were changed in various ways (@jshipsey, @Snowram, @Pfauenauge).
- Redundant code generation for body animation is now partly taken care of by a macro (@jshipsey, @Snowram, @Pfauenauge).
- Animation code was modified to to use vek's SIMD representation where possible (@jshipsey, @Snowram, @Pfauenauge).
- Terrain meshing code and shadow map math were also modified to use vek's SIMD representation (@imbris).
- SIMD instruction generation was enabled (@YuriMomo, @jshipsey, @Snowram, @imbris, @Angelonfira, @xMAC94x).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- The way we cache glyphs was completely refactored, fixed, and optimized.
- Our fork of `conrod` was optimized in various ways (@imbris).
- Our fork of `conrod` now exposes whether a widget was updated during the current frame (@imbris).
- Our use of the glyph cache was rewritten for correctness (@imbris).
- A *text cache* was introduced that lets us skip remeshing glyphs that have not changed (@imbris).
- Various changes were made to reduce pressure on the glyph cache, with more planned (@imbris, @Pfauenauge).
- In the process of making changes related to the glyph cache, various incidental fixes and optimizations were required.
- Colors were changed to keep Veloren's look consistent with master.
- Some older tree models were brought back (@Pfauenauge).
- TODO(@Sharp): All hardcoded colors were extracted and made hotloadable.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Hardcoded colors were fixed to conform to Veloren's style.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Color models were fixed to conform to Veloren's style.
A detailed description of the involved changes follows.
---
- The world size is no longer hardcoded. All functions dependent on world size now take a `WorldSizeLg`, which holds the base 2 logarithm of each actual world dimension and is guaranteed to maintain certain properties (outlined in `common/src/terrain/map.rs`). Additionally, many utility functions that utilize the world size were moved into `common` as well (mostly `common/src/terrain/mod.rs`). Finally, the world map format was updated in order to store its size explicitly, with a migration path from the old format that should work whenever the old formatted map was a square (practically always). See `world/src/sim/mod.rs` for these changes.
- The map generation code was made generic to allow using it outside of the `world` crate. The parts of the map generating code that do not need to query the world were moved over to `common/src/terrain/map.rs`, allowing them to be used from the client without creating a dependency on `world`. The rest of it was turned into helper functions in `world/src/sim/map.rs`, which can be passed as closures to the generic map generation code to complete its construction. This also means that colors are now passed in separately to the map generation function. See <https://veloren.net/devblog-78/> for more details.
- On world creation, we now compute *horizon maps*. See the function in `world/src/sim/util.rs`.
Given a height map and a plane intersecting that height map, our horizon maps allow us to encode enough information to reconstruct shadows for each point on the height map using only the *horizon angle* (the angle at which the sun starts to become visible). As Veloren's sun only covers one plane, this is sufficient for encoding sun shadows for LOD terrain, by encoding two angles per chunk (one for each 90 degrees the sun covers). We can also use this for the moon, if we want, since the moon follows the same path. Additionally, we store the *height* of the furthest occluder, to try to make the shadows volumetric; so this means 4 bytes in total for each chunk.
Support for horizon maps has been merged into the map functionality in common as well.
- The way we pass the world from the server to the client has been updated. Rather than passing the prerendered map, we instead pass three maps with values for each chunk; one with the color information, a second with altitude information, and a third with horizon map information. We then reconstruct the map on the client, together with some additional information we send from the server (like the sea level and maximum height). See `common/src/msg/server.rs` for a detailed description of the format of `WorldMapMsg`, and `server/src/libr.rs` and `client/src/lib.rs` for details of the map construction and parsing.
- Artifacts related to image rotation were fixed. See the commit message for commit SHA `cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e` for a detailed explanation. This involved changes to shaders, the addition of a new type of graphic (also reflected in the graphic cache) that allows specifying a border color (which automatically makes the associated texture immutable), and some related fixes. I reproduce the first two paragraphs of the MR description as well:
```
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
```
- Multiflow rivers were enabled.
This does not really need to be part of this MR, and would be easy to revert, but since it seemed to provide a nice improvement it's currently packaged with it.
We already computed multiple outflows from each chunk for erosion purposes long before this MR.
However, we never modified river rendering to be able to handle this case (just a single downhill river flow is complex enough!) so this was not exposed when deciding which chunks were rivers.
Now that
- In the process of making changes related to the world map, various incidental fixes and optimizations were required. Some examples of fixes include making sure terrain is never lowered to below sea level (to make the shadow maps report correct values), fixing map altitudes and colors to understand things like cliffs and "block level" coloring (that doesn'te xist on the column level), and fixing a crashbug when rendering images for the UI where source pixels are strongly rectangular. Some examples of related performance fixes include avoiding allocating a fresh vector for all the maps (i.e. copying it over to change the format from `[u32; n]` to `DynamicImage` and then copying again to convert to `RgbaImage`), and instead using the `gfx::memory::slice` function to accomplish the same thing. These sorts of changes are spread all arond the code.
This includes the additon of a new scene, `voxygen/src/scene/lod.rs`, a new pipeline `voxygen/src/render/pipeline/lod_terrain.rs`, and new shaders `assets/vxygen/shaders/lod-terrain-vert.glsl` and `assets/vxygen/shaders/lod-terrain-frag.glsl`, as well as associated changes to the renderer in `voxygen/src/render/renderer.rs`.
The main idea behind our initial approach to LOD was to take the world data we now get from the server (altitude, color, and horizon mapping).
- Some previously computed values were turned into shader uniforms for better prediction on weak processors. (@zesterer)
- Calls to power or trig functions were removed or replaced with multiplications, where possible.
- After some deliberation
- To properly handle sprite "waving" for nearby sprites,
We explicitly designed the greedy meshing system with figures and sprites in mind.
In both cases, we want to be able to *efficiently* pack many different models into the same texture, especially in cases where we know
we will either not be removing any of the grouped-together from the models from the texture, or will remove all of them at once (so
they can be packed into some specific subtexture).
For sprites, since we know every model in advance and never intend to deallocate them, we currently pack them all as efficiently as
possible into one giant tetxure atlas. However, in the future we might opt to pack them slightly less efficiently in exchange for
shrinking the sprite vertex size.
For figures, we pack all the textures for each *model* into the same atlas.
is a global texture atlas used for every sprite, and for figures which is why we have the ability to mesh multiple
models to the same texture area (using the simple texture atlas allocator) without requiring intermediate vector allocations.
This is accomplished by delaying the time when we actually write the color and light data to the texture until *after* all the
model vertices have been meshed; then, we can just allocate the whole color/light array at once, making the atlas we use an
exact fit. In computer science-y terms, we accomplish this delay by, after we perform the initial greedy meshing (without
texture information), not continuing to create the texture data, but instead constructing a *continuation*--that is, a function
that, when called, will execute the rest of the computation. We push this continuation (which in Rust terms is a `FnOnce` closure
that takes the `ColLightsInfo` that it is supposed to write to as context) onto a
onto a vector
resizing. To allow for suspended writes to texture data, Rust pointed out to me that the continuation that would eventually write the color and light data to the texture atlas (the one that is shared by all models sharing the same greedy mesher) would have to *own* whatever data it mshed. Because we often generate the model data to mesh as a temporary in `voxygen/src/load.rs`, the
- Matrix multiplications in the shader were reduced for figure data (@zesterer).
- Vertex "waves" for fluid data were removed.
- Terrain "bending" near edges was removed.
- Scaling was fixed to make sure empty space was not introduced in a space previously occupied by a block. It was also changed to take ownership of its voxel data,
rather than sharing it, to let it be used with meshing.
- Rust's nightly version was bumped in order to use the `array_map` function, which lets us reuse more code between the simple map and `FigureModelCache`.
- PositionedGlyph::standalone.
---
I tried to cite sources in many cases[^realtime],[^lloyd],[^lispsm],[^pbrt],[^greedy],[^tjunctions]
where I needed features from elsewhere but I am particularly grateful for the following resources,
esepcially where they have accompanying source code. I linked all of them that are accessible to the public (those that are not were
obtained through legal means).
[^realtime]: Eisemann, Elmar, Michael Schwarz, Ulf Assarsson, Michael Wimmer. Real-Time Shadows. A K Peters/CRC Press (T&F), 20160419.
[^lloyd]: Lloyd,B. 2007. [Logarithmic perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). PhD thesis, University of North Carolina.
[^lispsm]: Wimmer, M., Scherzer, D., and Purgathofer, W. 2004. [Light space perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). In Proceedings of Eurographics Symposium on Rendering 2004, pp. 143– 152.
[^pbrt]: Pharr, Matt, et al. [http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf](Physically Based Rendering: From Theory to Implementation). Third edition, Morgan Kaufmann Publishers/Elsevier, 2017.
[^greedy]: mikolalysenko. “Meshing in a Minecraft Game.” 0 FPS, 30 June 2012, <https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/>.
[^tjunctions]: blackflux. “Meshing in Voxel Engines – Part 1.” Blackflux.Com, 23 Feb. 2014, <https://blackflux.wordpress.com/2014/02/23/meshing-in-voxel-engines-part-1/>.
I am also especially grateful to Khronos, Wikiepdia, and stackoverflow for answering many of my specific questions while writing the MR.
---
Squashed commit of the following:
commit 300505e7305a2fdac722a808ee8538323f215f39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 18:46:25 2020 +0200
Fixing cargo doc and typo in CHANGELOG.
commit ec0aeb18e8499d7d84ef818331b4b65c3d76cea6
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 15:38:50 2020 +0200
Hopefully final commit for the LOD branch.
commit 5e8ea0b1eaac02903a02feb2eb038d195de4872f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 10:14:26 2020 +0200
Falling back to power as stopgap.
commit e44a1cbf46504ee9931a01bdc9033e145500d557
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 09:25:41 2020 +0200
Address imbris feedback.
Temporarily disables shiny water, lowers max VD.
These restrictions will be lifted soon after merging.
commit 561e25778a108ac3712f5ec2ce3a51234c4430d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 08:31:13 2020 +0200
Tweaking shaders a bit.
commit 7d19259078ce0dd7b3742ad7d0cb3fab3ece3fdc
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:59:43 2020 +0200
Fix view example as well.
commit 051cd4934e0fad2c0b15db4380a4189fa318679f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:29:06 2020 +0200
Fix meshing benchmark.
commit c95e07db3b4dcca285678985e65e31b927cb1c61
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 05:46:22 2020 +0200
Address MR feedback, fix scene clouds.
commit 1bfb816cabdb3ffc1e507a009c2d98696b4b573a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:39:36 2020 +0200
Incorporating Pfau's figure color changes.
New eyes and new humanoid colors.
commit 3f9b89a3ac7b3356b1dba0d1a8f6541357f81469
Merge: e2f5162e4 62c53963a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:29:41 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit e2f5162e4f96f4124aa43488f7245d341b3dcfd4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:28:38 2020 +0200
World colors are all hotloadable.
They live in assets/world/style/colors.ron.
Only a small handful of hardcoed colors remain in World; they are either
part of the map, or difficult to disentangle from the rest of the
computation. Comments are made where appropriate.
commit 62c53963abe1975009d34a8f9515a355bef24f31
Author: Marcel Märtens <marcel.cochem@googlemail.com>
Date: Wed Aug 19 15:59:00 2020 +0200
replace pretty_env_logger with tracing
commit 5b1625f99d9586fe80e2232f583ec5af9f953099
Merge: d71003acd 4942b5b39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:15:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit d71003acdabeff970b3928e97c26af6847b5b78e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:14:34 2020 +0200
Hotloading colors, part 1: colors in common.
Currently, this just entails humanoid colors. There are only three
colors not handled; the light emitter colors in
common/src/comp/inventory/item/tool.rs. These don't seem important
enough to me to warrant making hotloadable, at least not right now, but
if it's needed later we can always add them to the file.
commit 63b5e0e553eb2ea49276f192a6fc7dd65254270d
Merge: c32b337a4 6d2c4b9c1
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 13:05:37 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c32b337a46e10d9de473d178a94a3ccd61c39bb3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:52:04 2020 +0200
Fixing LOD grid, for real.
commit a166ae0360395387e09fb35a1f84210c2ce5ec24
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:28:05 2020 +0200
Addressing imbris's initial feedback.
Fixes two minor bugs: explosion particles were no longer spawning
randomly, and LOD grids were not perfectly even.
commit 4cbad004f44060994252dd3d38647a14a589712f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:27:58 2020 +0200
Bumping nightly per request.
commit 548680276aac77c25d43d16b5622f847d474dbef
Merge: acc098604 8f8b20c91
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:26:06 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit acc0986040589a3492f88a740bc3c3fc693b26d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:28:32 2020 +0200
Lower resolution due to lying drivers.
commit d3b878de2a52c358d2944a6bbd0555dad7fbdb10
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:15:38 2020 +0200
Fix issues msh encountered with Intel 4600.
commit 10245e0c1b0cb6fae10d86409435364edc6102ef
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 21:15:02 2020 +0200
Merge more models into one mesh than we did previously.
commit 3155c31e663c52ae5c3a53d5fb5665892a1a498a
Merge: 7204cc8a7 3c199280e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:35:22 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7204cc8a7a4f74a30306bd205d9834fee4bb944f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:34:43 2020 +0200
Fix not yet done NPC animations.
This forces them all to be the idle animation if not specified.
This fixes issues where you'd have giant NPCs in water.
commit bc83360f2a08918f19d417b5f772e1ff554dba08
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 19:36:37 2020 +0200
Try to fix some bugs:
- Z fighting with LOD terrain and water.
- Audio SFX not playing.
commit 1fd104aa603bf3781b6526a5cada46aeca3049dd
Merge: 862df3c99 7c2c392a3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 12:02:31 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 862df3c9976c4da9bd7cfd784f1a85973127968a
Merge: 0a4218ed9 75c1d4401
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 05:52:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0a4218ed9d541a2b34c133351bea38a99ddf4ea7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 22:27:14 2020 +0200
Fix particle depth.
commit f51dfdeb442d0dd5243dd2f344fa4be295bd0875
Merge: c6251a956 5e6dc0471
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:19:04 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit c6251a956ad376400dca5c23420cf8d213dc8fdf
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:15:46 2020 +0200
Cache figures more intelligently.
Cache figures for longer, and don't cache character states for the
player except where they actually affect the rendered model.
commit 0ed801d5404982c6fb63b1eaa4567d908b294c9d
Merge: c11b9bdf0 eea64f78f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 16:32:24 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c11b9bdf0a53bf9884d2f5a48fec9b01d582df1a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 11:47:15 2020 +0200
Remove unneeded Clippy annotation.
commit 16aa9ef40af56d69289d00aafb3deadfb8bd4f35
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 8 00:53:02 2020 +0200
Fix hotloading and Clippy.
commit 3dc973e0be5b758da1e9805eb764ad401374cd0c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 23:50:27 2020 +0200
Major speedups with SIMD.
commit fba64a7d93d5a96077ce87287bbce6ab9b7fbcae
Merge: 76429d00e d1e10b178
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:19 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 76429d00eea00d212fbd672a84ee91e75b19b938
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:10 2020 +0200
Add clippy.toml.
commit c79f512f84dbb83cb82b7954db68ff241dfd8e41
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 11:55:20 2020 +0200
Fix all clippy issues, clean up Rust code.
commit 6f90e010b3fbefb53b0d632e819931350015b6b8
Merge: 77a8c7c26 5929cfa5c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:30 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 77a8c7c267d3f44a1a62bd6b2274359973c5e4d4
Merge: b44e44232 44febaabd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:10 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 5929cfa5c713aa392110bbb62407f76caf53c3df
Author: jshipsey <jshipsey18@gmail.com>
Date: Thu Aug 6 20:47:27 2020 -0400
fixed in-hand arrow bug
commit b44e442325d828f1cd564d66908f89d09e80474b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 6 13:40:35 2020 +0200
Miscellaneous performance improvements.
commit be37acf287c1360d8085862526ac3365ffd1d768
Merge: 125d7fc6c c11876547
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 05:49:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 125d7fc6c4dcd8c8c5f27b8268a4d64f409f3644
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 04:55:31 2020 +0200
Abstract over simd vs. repr_c vectors.
Also some minor improvements to Event size.
commit d4d4956e9252e1241ce110b2aa85076c6b1e2a23
Merge: 5f3b7294a aced5f979
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:56:54 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 5f3b7294af1f8533edc2620b58863c248e2b07af
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:43:52 2020 +0200
Fix formatting issues I missed before.
commit a428a3ebba70dcab63dd0f8cd983120c90617271
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:41:51 2020 +0200
Fix clippy warnings, part 1.
There aer still a bunch of type too complex and
function takes too many arguments warnings that I'll fix later
(or ignore, since in the one case I did fix a function takes too
many arguments warning I think it made the code *less* readable).
commit ba54307540ed8a937ac08209730284fc653af85b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 30 13:22:42 2020 +0200
Fix light animations so they are removed when the light turns off.
commit 7e0f4bcbf0f4717145d8beac40d52e3acebbe2aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 21:10:20 2020 +0200
Fix crash in edge case for pixel art.
commit 56da06f7a351e2b949e9b014a90b974d511a0924
Merge: cf74d55f2 9f53a4a19
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:56:52 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:29:52 2020 +0200
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
The first concern was addressed by fixing the dimensions of the map
images drawn from the UI (so that we always use a square source
rectangle, rather than a rectangular one according to the dimensions of
the map). We also fixed the way rotation was done in the fragment
shader for north-facing sources to make it properly handle aspect ratio
(this was already done for north-facing targets). Together, these fix
rendering issues peculiar to rectangular maps.
The second and third concerns were jointly addressed by adding an
optional border color to every 2D image drawn by the UI. This turns
out not to waste extra space even though we hold a full f32 color
(to avoid an extra dependency on gfx's PackedColor), since voxel
images already take up more space than Optiion<[f32; 4]> requires.
This is then implemented automatically using the "border color"
wrapping method in the attached sampler.
Since this is implemented in graphics hardware, it only works (at
least naively) if the actual image bounds match the texture bounds.
Therefore, we altered the way the graphics cache stores images
with a border color to guarantee that they are always in their own
texture, whose size exactly matches their extent. Since the easiest
currently exposed way to set a border color is to do so for an
immutable texture, we went a bit further and added a new "immutable"
texture storage type used for these cases; currently, it is always
and automatically used only when there is a specified border color,
but in theory there's no reason we couldn't provide immutable-only
images that use the default wrapping mdoe (though clamp to border
is admittedly not a great default).
To fix the maps case specifically, we set the border color to a
translucent version of the ocean border color. This may need
tweaking going forward, which shouldn't be hard.
As part of this process, we had to modify graphics replacement to
make sure immutable images are *removed* when invalidated, rather
than just having a validity flag unset (this is normally done by
the UI to try to reuse allocations in place if images are updated
in benign ways, since the texture atlases used for Ui do not
support deallocation; currently this is only used for item images,
so there should be no overlap with immutable image replacement,
so this was purely precautionary).
Since we were already touching the relevant code, we also updated
the image dependency to a newer version that provides more ways
to avoid allocations, and made a few other changes that should
hopefully eliminate redundant most of the intermediate buffer
allocations we were performing for what should be zero-cost
conversions. This may slightly improve performance in some
cases.
commit ad18ce939940a8c697270f6e9b94db9942fd8295
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 13:21:09 2020 +0200
Fix continent scale hack.
commit 36b1cb074f5b195aebd7dbbc3da7f0246a1a18ec
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 12:11:40 2020 +0200
Enable loading different sized maps without a recompile.
We may want to tweak the effects of the continent_scale_hack.
commit 13b6d4d534cc4814b7cb3294ca41bbfea0a6b186
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 10:55:48 2020 +0200
Removing WORLD_SIZE, part 1.
Erased almost every instance of WORLD_SIZE and replaced it with a local
power of two, map_size_lg (which respects certain invariants; see
common/src/terrain/map.rs for more details about MapSizeLg). This also
means we can avoid a dependency on the world crate from client, as
desired.
Now that the rest of the code is not expecting a fixed WORLD_SIZE, the
next step is to arrange for maps to store their world size, and to use
that world size as a basis prior to loading the map (as well, probably,
as prior to configuring some of the noise functions).
commit 30b1d2c6428230a9eaa0d749cdcbbd6f1cbccd78
Merge: 7d56ba31b 1377b369f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:58 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 7d56ba31b445441461b28a07fc495d7d4f047c17
Merge: 2101113b4 598f14b25
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 1377b369f6db2258e910d467a5740f31789e3ded
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sun Jul 19 23:25:38 2020 +0200
more saturated pumpkins
commit ae8d50527f93bb0616c2ad46ce4dacb63bc37c6d
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sat Jul 18 20:29:56 2020 +0200
acacia models
commit 2101113b467e691de787392d7f20f1745f5637bd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 18 18:55:25 2020 +0200
Higher detail LOD.
commit add2cfae04b4385fa5590e11e2bd5229d9dee0aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 16 01:57:39 2020 +0200
Revert some irrelevant stuff.
commit 2e2ab3dc1eaa59a4aef7f8d34a53d8aae4c8553a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 15 13:30:49 2020 +0200
Fixing various things about shadows.
* Correcting optimal LISPSM parameter.
* Figure shadows are cast when they're not visible.
* Chunk shadows stay cast until you look away.
* Seamless cubemaps for point lights.
* Etc.
commit 6c31e6b56217274285b597af297036691ea5d897
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 19:50:26 2020 +0200
Fix shadow creation.
commit 6332cbe006115ae205597529cd8bbccd146c2cca
Merge: be438657c 930e0028b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:47:00 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit be438657c33d7b5bfb0a9582c3ed3fd366637323
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:28:08 2020 +0200
Tweaks to shadows.
Added shadow map resolution configuration, added seamless cubemaps,
documented all existing rendering options, and fixed a few Clippy
errors.
commit 23b4058906013c7d2a40c286e20e32c5fbd897ed
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 10:11:19 2020 +0200
Fix moon, use nonlinear noise for terrain.
Note that the latter has a bit of performance cost.
commit 7fbe5cbfbb9dc29607957b8e62f432a4deed193d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:23:02 2020 +0200
Address lies about max texture size.
commit bcfc62b5e13a1cdd83f57535fde4694720bebfd9
Merge: 75e3626a7 18a08e8fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:22:08 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 75e3626a785919f43fdcf2127c2b10e3e4df2f9f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:21:52 2020 +0200
OpenGL 3.3 minimum.
commit 18a08e8fe2739f02af99a5d2cb4e7c38c49e858b
Author: Monty Marz <m.marzouq@gmx.de>
Date: Tue Jul 7 23:57:52 2020 +0200
settings localization
commit 90c5d1ca3620092bc3ae10b2211489eb1cf6f5e8
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 21:11:48 2020 +0200
Lower near distance.
commit 0e66f02b25aaddaa2dfddbbc89cd67de54a9a7b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 20:09:01 2020 +0200
All sprites sway in the wind now.
commit db1401a6910bf42dcf502462c90038752ff5fbdb
Merge: 69e508d8c e8b4b29d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 19:34:17 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 69e508d8c94d8973033817ca86f357e466fc7c4d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 18:41:37 2020 +0200
Make it easy to switch to SIMD for math.
commit ffe0f5928c7a7e87d00cb5426b3b1d831d7e02fd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 21:21:12 2020 +0200
Fix some issues with underwater rendering.
commit bfda6da42f38fd02c31ee92c81ab785a3e50c2a0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 19:17:59 2020 +0200
Fix some minor display issues.
commit 0ed752e087968cf901301884aaeae698e32ef8a5
Merge: ccc6a06a8 518edcb85
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:14:21 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit ccc6a06a8d4504d6b9f7af7905a414d2ee06ab76
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:04:34 2020 +0200
Some minor changes.
commit 4e020246702889269efe1a191788992164c508d6
Merge: 50a64d927 e05c9267a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 16:17:40 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 50a64d927e6c4f4b0e4688e4cbfca694bc3f922a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 13:07:03 2020 +0200
Fix far plane.
commit 7dd06da34cae8f9ea3b6c889fe965181f3fd3949
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:25:35 2020 +0200
Add shadows.glsl.
commit 618a18c998778bf871b905a74657440fcc384c80
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:10:22 2020 +0200
Adding shadows, greedy meshing, and more.
commit eaea83fe6a5cb1cb0ba8beef888183c718258496
Merge: 267018495 2f89b863e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 22:47:07 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 2670184954a13e4a9e7a4e35ba79aac0c5fac2f7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 21:20:01 2020 +0200
Make civsim and sites deterministic.
For anything in worldgen where you use a HashMap, *please* think
carefully about which hasher you are going to use! This is
especially true if (for some reason) you are depending on hashmap
iteration order remaining stable for some aspect of worldgen.
commit f8376fd5dc72b4a9c2f51a6b4570d59c8b8e9343
Merge: 654f7e049 cdee191dd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 17:53:57 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 654f7e049258d9da27c09608bbe6a46ffa8787e5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed May 20 21:22:30 2020 +0200
Correct backface culling.
commit 560501df05ca725409b0f2e4eb31bdfdc15fd0c7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue May 19 17:22:06 2020 +0200
Greedy messhing for shadows.
commit a4d87e1875ca543436e6bbbeb20348facc5a52d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun May 17 05:59:00 2020 +0200
Shadow maps work for lantern.
commit 243d0837b8a3b08172c9a3c348d964d7ddc2a0a8
Merge: 04382dc28 71dd520cd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:53:13 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 04382dc28632b6c66e8821f6870c0daaa1c1901a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:22:17 2020 +0200
WIP: better graphics config, better LOD, shadow maps.
commit 22ddbad3eb32bfa70f0932176022208fe67ded81
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 18:54:09 2020 +0200
Minor shader fixes.
commit 746a10e8d01ac235f994b0cde78fa48998602a1f
Merge: 0f4a0e763 40ab94673
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 04:02:09 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0f4a0e763db3afbdc4fb0558611f38326ca87151
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 23:03:24 2020 +0200
Switch back to pop-in terrain.
commit dd74fa7e4a53667b38811d7aec58d7f6a68889bb
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 22:58:55 2020 +0200
LOD shading closer to voxel shading.
commit ef67bd58ba0bdaf622b078892d768263b6cba268
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 28 20:49:03 2020 +0200
Experimental underwater lighting.
commit 2c5ad9d07605e80d5fd5679dd3a5d70c605b86a9
Merge: 748279835 303967a6f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 22:35:24 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7482798354eda18c8207950080fc24d443a369de
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 21:59:55 2020 +0200
Replace discard in figure-frag.
commit d83b4ae69be4912f69bf7835f509c68a1c7770a4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:45:57 2020 +0200
Fix sprite lighting, HDR from focus_pos.
commit 0594238004f116274905fa0ed7c2b6c417ed1d29
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:14:10 2020 +0200
Proper HDR from point lights.
commit 48c93d2b41ce5743103d18e76cc228f5ac766492
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 14:01:43 2020 +0200
Brighter ambiance, darker LOD shadows.
commit e0452e895ccfa8a43f368cae3b8b8aedc24dad93
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 13:13:23 2020 +0200
More proper HDR.
commit 4c6da3ed16cfeebb455e40da5f557b4af9a499d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 00:13:10 2020 +0200
Trying LOD noise.
commit 682a3d74c85df5503ffe1fc1cc891bce789df1ad
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 23:11:08 2020 +0200
Fix LOD heights in towns.
commit cc39e5734e8b18f9077bf42e66337c1319dd6b6e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 21:01:23 2020 +0200
More LOD fixes.
commit 8116b21c2e51c836e77894e309ac273caf2917b3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:54:43 2020 +0200
I like this coloring.
commit bc2560ea90b36f4b46190005344232d993043ac3
Merge: 14effdd5d e690efe71
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:48:33 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 14effdd5db8747fcf3eb34f03b46b7792e92d1c5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:24:35 2020 +0200
Re-saturate.
commit 48a643955d4435b78179acba0beb4a979905cc31
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:23:57 2020 +0200
Various fixes.
commit f7b497a0c25f4ad4682c71dd1ed6f608052feb9b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 03:22:49 2020 +0200
Render figures again.
commit 44e4aad48deba8266b9f8bdfd3db096b381f5327
Merge: e6f0a5a98 9ec319a18
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 02:01:04 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit e6f0a5a981a82533ba188fff0a54ce98577bb152
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 24 16:12:20 2020 +0200
Add atmospheric scattering.
commit f2953087f691a8edbc001cb98ebf5059fc6f8ac0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 23 00:01:20 2020 +0200
Fix shadowing for specular reflections.
commit ddd4a67a9799b8d08c7dc0c2bec90621c2bed0e3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Apr 22 22:56:12 2020 +0200
HDR fixes.
commit 1015e60deef3c447381996277df7496707a63bd0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 21 18:25:19 2020 +0200
More lighting changes.
commit 80c264abd111fb237e57843efcb5c071d4f84613
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 13 00:29:59 2020 +0200
Lighting experiments.
commit 8414987e589dd5102bad89762a3adaccc0bfe957
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 9 02:38:40 2020 +0200
WIP -- lighting changes and soft shadows.
commit 9cd2b3fb0d6b49776c6dfe463e4169637250b11a
Merge: c7ea687eb 8b149ad11
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:29 2020 +0200
Merge branch 'sharp/new-lighting' into sharp/small-fixes
commit c7ea687ebbc5aace1b455f134a5bf49ce2c7434a
Merge: 476441531 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:02 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 8b149ad11ad4bb75018fcf9519baec27d1c95951
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:32:39 2020 +0200
Trying out a new lighting model.
commit b0ac9f36f755dd06f7c17c46150568064790864f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 07:56:11 2020 +0200
Use bicubic interpolation for terrain.
commit f6fc9307a121514b614bc50ef8eb055953e7da8a
Merge: 33140a295 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 05:01:41 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 4764415312aae6e9ac2d00e86e84577cb958f1ab
Merge: ed2d0111d 13388ee6a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 04:54:48 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 13388ee6a42943f3f79a9cb488346cef18e272fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 20:30:08 2020 +0200
Various fixes (to coloring and to soft shadows).
commit fbd084a94a067082a87cd6d28b82054709bc9265
Merge: 5a089863b 4fdf6896a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 18:50:38 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/map-colors
commit ed2d0111d994262ae836d84d1fe5a45e4de72a0b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 06:49:27 2020 +0200
Combining colors and LOD.
commit 88342640c6b835114d01c797b89fdede3b0a2108
Merge: 33140a295 5a089863b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:49:20 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 33140a2951b8212725f42c758b277aaec4d888f7
Merge: 4c65a5aed f34d4b379
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:36:21 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 5a089863beb01d4794bbe3580ada47b278715ea2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 03:17:49 2020 +0200
Making maps brighter.
This is probably not the right way to do it, but oh well!
commit 32b2c99109dd486aa922886081068f9c550c83f2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 02:46:36 2020 +0200
Horizon mapping and "layered" map generation.
Horizon mapping is a method of shadow mapping specific to height maps.
It can handle any angle between 0 and 90 degrees from the ground, as
long as know the horizontal direction in advance, by remembering only a
single angle (the "horizon angle" of the shadow map). More is explained
in common/src/msg/server.rs. We also remember the approximate height of
the largest occluder, to try to be able to generate soft shadows and
create a vertical position where the shadows can't go higher.
Additionally, map generation has been reworked. Instead of computing
everything from explicit samples, we pass in sampling functions that
return exactly what the map generator needs. This allows us to cleanly
separate the way we sample things like altitudes and colors from the map
generation process. We exploit this to generate maps *partially* on the
server (with colors and rivers, but not shading). We can then send the
partially completed map to the client, which can combine it with shadow
information to generate the final map. This is useful for two reasons:
first, it makes sure the client can apply shadow information by itself,
and second, it lets us pass the unshaded map for use with level of
detail functionality.
For similar reasons, river generation is split
out into its own layer, but for now we opt to still generate rivers on
the server (since the river wire format is more complicated to compress
and may require some extra work to make sure we have enough precision to
draw rivers well enough for LoD).
Finally, the mostly ad-hoc lighting we were performing has been (mostly)
replaced with explicit Phong reflection shading (including specular
highlights). Regularizing this seems useful and helps clarify the
"meaning" of the various light intensities, and helps us keep a more
physically plausible basis. However, its interaction with soft shadows
is still imperfect, and it's not yet clear to me what we need to do to
turn this into something useful for LoD.
commit f8926a5737ddc51f3d585c651a64c43677aae0f4
Merge: a1aee931e 875ae6ced
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Mar 13 13:32:42 2020 +0100
Merge remote-tracking branch 'origin/master' into sharp/map-colors
commit 4c65a5aed353b119aea65a2aaeb94549b67beb42
Author: Treeco <5021038-Treeco@users.noreply.gitlab.com>
Date: Mon Feb 24 16:48:05 2020 +0000
Made LOD setting slider exponential
commit 2fa7b2d20d7233dc8bfd64f9f7f54617575248f1
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 17:49:53 2020 +0000
Added mist to LoD
commit aab059a450b5f635777129ff82cc15b662965c3c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 15:14:06 2020 +0000
Added LoD slider
commit 779c36b538121c5ade3633ae5cb67bb14c8c3877
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:54:55 2020 +0000
Reduced cost of vertex pushing
commit 9fea150473906b166365b738ebcea07c697daf3d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:38:53 2020 +0000
Fixed maths, improved LoD resolution
commit 5481df38fea5bf183ff376a3337179cfaa5233dc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 11:22:50 2020 +0000
Dynamically relocate LoD vertices to enhance details
commit a3e36a50ababd615da7db1b26158c7906a5def01
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 18:13:51 2020 +0000
Simpler terrain spiral rendering
commit 255f450ae9ac8763db4bede075fb409161ed57cc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:53:17 2020 +0000
Better LoD precision
commit 3d027aebe812a5b8658a4eb8123dc9f61b3776d2
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:04:03 2020 +0000
Better falloff
commit be775c9484b457b2c0b1a494aec03392d0c70e76
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 15:30:45 2020 +0000
Applied good ideas from experimental branch
commit 58587b68545a23c5c04ab4574a4b94b3bc982246
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 16:15:13 2020 +0000
Minor fixes to LoD merging
commit 7b42aebd709c14df2db766aad61d9280ad24d84d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 15:04:44 2020 +0000
Capped LoD dragging
commit 8aafc559f87124e1ea5ca6e3ddc2aa0c242d793c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:54:37 2020 +0000
Better blending between LoD and terrain border
commit edd3455d5161792d87ddc8eadc0ecbad5532b284
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:40:19 2020 +0000
Fixed LoD z depth, added sea level offset
commit b9b06744620114dd5556e73f64fa93c145503a7c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:27:43 2020 +0000
Better LoD smoothing
commit a1aee931e790431560cd2d953ad61d9497072afd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Feb 21 14:52:17 2020 +0100
Adding shadows.
commit 2400786c13dd891c131ed86d48d05df516a8a778
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 13:48:40 2020 +0000
Use world map as LoD source
commit dbf650f504a4c25fbbc2096ac3616c736bf52d23
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Jan 20 00:48:14 2020 +0000
Better clouds at distance
commit 5e6f81b86cdb9730b9b056877b19257075fd5fa8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Jan 19 23:59:02 2020 +0000
sync
commit 745e7540ddb000cc645f612767b337c2ddc3f7c0
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 12:40:48 2019 +0000
Improved cloud falloff mist, faster noise sampling
commit f6a200d0cb866196ba57697466755f9e0c7ea5d8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 10:09:00 2019 +0000
Improved long-range depth precision, removed unnecessary LoD polygons
commit 63d1b2bb2292898d59fb4f4e502201103dfeb86f
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 20:57:46 2019 +0000
Working LoD shader
commit f13d98ee3e58f881e8b978861a67663b59ed91ec
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 11:03:40 2019 +0000
LoD first attempt (stack overflow issue)
2020-08-20 18:34:59 +00:00
|
|
|
|
terrain::{
|
|
|
|
|
map::MapConfig, uniform_idx_as_vec2, vec2_as_uniform_idx, BiomeKind, MapSizeLg,
|
|
|
|
|
TerrainChunkSize,
|
|
|
|
|
},
|
common: Rework volume API
See the doc comments in `common/src/vol.rs` for more information on
the API itself.
The changes include:
* Consistent `Err`/`Error` naming.
* Types are named `...Error`.
* `enum` variants are named `...Err`.
* Rename `VolMap{2d, 3d}` -> `VolGrid{2d, 3d}`. This is in preparation
to an upcoming change where a “map” in the game related sense will
be added.
* Add volume iterators. There are two types of them:
* _Position_ iterators obtained from the trait `IntoPosIterator`
using the method
`fn pos_iter(self, lower_bound: Vec3<i32>, upper_bound: Vec3<i32>) -> ...`
which returns an iterator over `Vec3<i32>`.
* _Volume_ iterators obtained from the trait `IntoVolIterator`
using the method
`fn vol_iter(self, lower_bound: Vec3<i32>, upper_bound: Vec3<i32>) -> ...`
which returns an iterator over `(Vec3<i32>, &Self::Vox)`.
Those traits will usually be implemented by references to volume
types (i.e. `impl IntoVolIterator<'a> for &'a T` where `T` is some
type which usually implements several volume traits, such as `Chunk`).
* _Position_ iterators iterate over the positions valid for that
volume.
* _Volume_ iterators do the same but return not only the position
but also the voxel at that position, in each iteration.
* Introduce trait `RectSizedVol` for the use case which we have with
`Chonk`: A `Chonk` is sized only in x and y direction.
* Introduce traits `RasterableVol`, `RectRasterableVol`
* `RasterableVol` represents a volume that is compile-time sized and has
its lower bound at `(0, 0, 0)`. The name `RasterableVol` was chosen
because such a volume can be used with `VolGrid3d`.
* `RectRasterableVol` represents a volume that is compile-time sized at
least in x and y direction and has its lower bound at `(0, 0, z)`.
There's no requirement on he lower bound or size in z direction.
The name `RectRasterableVol` was chosen because such a volume can be
used with `VolGrid2d`.
2019-09-03 22:23:29 +00:00
|
|
|
|
vol::RectVolSize,
|
2019-06-18 21:22:31 +00:00
|
|
|
|
};
|
2019-08-22 21:25:17 +00:00
|
|
|
|
use noise::{
|
2020-01-11 20:38:30 +00:00
|
|
|
|
BasicMulti, Billow, Fbm, HybridMulti, MultiFractal, NoiseFn, RangeFunction, RidgedMulti,
|
|
|
|
|
Seedable, SuperSimplex, Worley,
|
2019-08-22 21:25:17 +00:00
|
|
|
|
};
|
(See sharp/lod-history) LOD, shadows, greedy meshing, new lighting, perf
---
Pretty much a Veloren fork at this point. Here's a high level overview of the changes (will be added to CHANGELOG just before merge).
At a high level this MR incorporates roughly two groups of changes.
The first group consists of new game features: more flexible map sizes, level of detail terrain, shadow maps, and a new lighting
engine. This is "feature work" that (mostly) only adds new things to Veloren, and mostly shouldn't affect old stuff.
The second big group of changes are those addressing the fallout from all the new features. These include performance fixes of
various sorts: the addition of multiple graphics options and optimization of the cheap ones to avoid work, switching all voxel
models to use some variant of greedy meshing, switching over much of our CPU-side vector math to exploit SIMD instructions
(coinciding with a fork of `vek`), and a rewrite of how the UI handles text rendering (coinciding with updates to our fork
of `conrod`). Making Veloren's hardcoded colors appear correct under the new lighting engine also required considerably
changes (TODO: Fill in this section when it's complete).
The second category of changes often heavily touches code owned by other people, including frequently modified code "owned" by a
handful of people, so I recommend that this code be reviewed particularly carefully.
---
At a high level (each will be described in more detail below):
- The world map has been refactored.
- The world size is no longer hardcoded (@zesterer).
- The map generation code was made generic to allow using it outside of the `world` crate (@zesterer).
- On world creation, we now compute *horizon maps* (@zesterer).
- The way we pass the world from the server to the client has been updated (@xMAC94x).
- Artifacts related to image rotation were fixed (@imbris).
- Multiflow rivers were enabled (@zesterer).
- In the process of making changes related to the world map, various incidental fixes and optimizations were required.
- The new *level of detail* feature was added (@zesterer wrote part of this and has checked out the rest).
- A new LOD terrain rendering step was added to the pipeline.
- The LOD terrain quality was made configurable via a graphics setting.
- Horizon maps were used to cast shadows from LOD chunks on both LOD and non-LOD terrain.
- A "voxelization" effect was incorporated into rendered LOD terrain to make it blend better into the world.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Veloren's lighting has been completely overhauled (@zesterer has already checked most of this out).
- A semi-accurate index of refraction was assigned to our materials.
- A new, more realistic, physically based approach to lighting was used using the *Ashikhmin Shirley* BRDF.
- We emulate *atmospheric scattering* using equations designed for measuring solar panel light exposure.
- We attempt to compute *realistic light attenuation* in water using its real material properties.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Point and directional lights now cast realistic shadows, using *shadow mapping.* (@imbris, @zesterer, @Treeco, @YuriMomo)
- Point light shadow maps were added to the rendering pipeline, using geometry shaders and *seamless cube maps*.
- Directional light shadows were added to the rendering pipeline, using LISPSM together with disabling *depth clamping*.
- "Shadow-only" chunks and NPCs were added to prevent shadows from models behind you from disappearing.
- In the process of making changes related to shadow maps, various incidental fixes and optimizations were required.
The addition of shadow maps, LOD terrain, and the new lighting all led to significant performance degradation, on top of other
changes happening in master. Therefore, a large number of performance improvements were also needed:
- The graphics options were made much more flexible and configurable, and shaders were optimize.
- New options were provided for how to render lights and shadows (@Pfauenauge, @zesterer).
- Graphic setting storage and configuration were overhauled to make adding new features easier (@Pfauenauge, @imbris).
- Shaders were rewritten to utilize GLSL's preprocessor to avoid overhead (@zesterer, @YuriMomo).
- In the process of making changes related to providing additional rendering options, various incidental fixes and optimizations were required.
- Voxel model creation was switched to use *greedy meshing.*
- A new voxel meshing method, greedy meshing, was added (@imbris).
- Uses of the older meshing methods were migrated to use greedy meshing (@imbris, @jshipsey, @Pfauenauge).
- New restrictions were added to terrain, figure, and sprites to future proof them for further optimizations (@jshipsey, @Pfauenauge, @zesterer).
- Most positions are now relative to either chunk or player position for better precision (@imbris, @zesterer, @scottc).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- Animation and terrain math were switched to use SIMD where possible.
- Fixes were made to vek to make its SIMD feature usable for us (@zesterer, @imbris).
- The interface and types used in bone animation were changed in various ways (@jshipsey, @Snowram, @Pfauenauge).
- Redundant code generation for body animation is now partly taken care of by a macro (@jshipsey, @Snowram, @Pfauenauge).
- Animation code was modified to to use vek's SIMD representation where possible (@jshipsey, @Snowram, @Pfauenauge).
- Terrain meshing code and shadow map math were also modified to use vek's SIMD representation (@imbris).
- SIMD instruction generation was enabled (@YuriMomo, @jshipsey, @Snowram, @imbris, @Angelonfira, @xMAC94x).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- The way we cache glyphs was completely refactored, fixed, and optimized.
- Our fork of `conrod` was optimized in various ways (@imbris).
- Our fork of `conrod` now exposes whether a widget was updated during the current frame (@imbris).
- Our use of the glyph cache was rewritten for correctness (@imbris).
- A *text cache* was introduced that lets us skip remeshing glyphs that have not changed (@imbris).
- Various changes were made to reduce pressure on the glyph cache, with more planned (@imbris, @Pfauenauge).
- In the process of making changes related to the glyph cache, various incidental fixes and optimizations were required.
- Colors were changed to keep Veloren's look consistent with master.
- Some older tree models were brought back (@Pfauenauge).
- TODO(@Sharp): All hardcoded colors were extracted and made hotloadable.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Hardcoded colors were fixed to conform to Veloren's style.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Color models were fixed to conform to Veloren's style.
A detailed description of the involved changes follows.
---
- The world size is no longer hardcoded. All functions dependent on world size now take a `WorldSizeLg`, which holds the base 2 logarithm of each actual world dimension and is guaranteed to maintain certain properties (outlined in `common/src/terrain/map.rs`). Additionally, many utility functions that utilize the world size were moved into `common` as well (mostly `common/src/terrain/mod.rs`). Finally, the world map format was updated in order to store its size explicitly, with a migration path from the old format that should work whenever the old formatted map was a square (practically always). See `world/src/sim/mod.rs` for these changes.
- The map generation code was made generic to allow using it outside of the `world` crate. The parts of the map generating code that do not need to query the world were moved over to `common/src/terrain/map.rs`, allowing them to be used from the client without creating a dependency on `world`. The rest of it was turned into helper functions in `world/src/sim/map.rs`, which can be passed as closures to the generic map generation code to complete its construction. This also means that colors are now passed in separately to the map generation function. See <https://veloren.net/devblog-78/> for more details.
- On world creation, we now compute *horizon maps*. See the function in `world/src/sim/util.rs`.
Given a height map and a plane intersecting that height map, our horizon maps allow us to encode enough information to reconstruct shadows for each point on the height map using only the *horizon angle* (the angle at which the sun starts to become visible). As Veloren's sun only covers one plane, this is sufficient for encoding sun shadows for LOD terrain, by encoding two angles per chunk (one for each 90 degrees the sun covers). We can also use this for the moon, if we want, since the moon follows the same path. Additionally, we store the *height* of the furthest occluder, to try to make the shadows volumetric; so this means 4 bytes in total for each chunk.
Support for horizon maps has been merged into the map functionality in common as well.
- The way we pass the world from the server to the client has been updated. Rather than passing the prerendered map, we instead pass three maps with values for each chunk; one with the color information, a second with altitude information, and a third with horizon map information. We then reconstruct the map on the client, together with some additional information we send from the server (like the sea level and maximum height). See `common/src/msg/server.rs` for a detailed description of the format of `WorldMapMsg`, and `server/src/libr.rs` and `client/src/lib.rs` for details of the map construction and parsing.
- Artifacts related to image rotation were fixed. See the commit message for commit SHA `cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e` for a detailed explanation. This involved changes to shaders, the addition of a new type of graphic (also reflected in the graphic cache) that allows specifying a border color (which automatically makes the associated texture immutable), and some related fixes. I reproduce the first two paragraphs of the MR description as well:
```
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
```
- Multiflow rivers were enabled.
This does not really need to be part of this MR, and would be easy to revert, but since it seemed to provide a nice improvement it's currently packaged with it.
We already computed multiple outflows from each chunk for erosion purposes long before this MR.
However, we never modified river rendering to be able to handle this case (just a single downhill river flow is complex enough!) so this was not exposed when deciding which chunks were rivers.
Now that
- In the process of making changes related to the world map, various incidental fixes and optimizations were required. Some examples of fixes include making sure terrain is never lowered to below sea level (to make the shadow maps report correct values), fixing map altitudes and colors to understand things like cliffs and "block level" coloring (that doesn'te xist on the column level), and fixing a crashbug when rendering images for the UI where source pixels are strongly rectangular. Some examples of related performance fixes include avoiding allocating a fresh vector for all the maps (i.e. copying it over to change the format from `[u32; n]` to `DynamicImage` and then copying again to convert to `RgbaImage`), and instead using the `gfx::memory::slice` function to accomplish the same thing. These sorts of changes are spread all arond the code.
This includes the additon of a new scene, `voxygen/src/scene/lod.rs`, a new pipeline `voxygen/src/render/pipeline/lod_terrain.rs`, and new shaders `assets/vxygen/shaders/lod-terrain-vert.glsl` and `assets/vxygen/shaders/lod-terrain-frag.glsl`, as well as associated changes to the renderer in `voxygen/src/render/renderer.rs`.
The main idea behind our initial approach to LOD was to take the world data we now get from the server (altitude, color, and horizon mapping).
- Some previously computed values were turned into shader uniforms for better prediction on weak processors. (@zesterer)
- Calls to power or trig functions were removed or replaced with multiplications, where possible.
- After some deliberation
- To properly handle sprite "waving" for nearby sprites,
We explicitly designed the greedy meshing system with figures and sprites in mind.
In both cases, we want to be able to *efficiently* pack many different models into the same texture, especially in cases where we know
we will either not be removing any of the grouped-together from the models from the texture, or will remove all of them at once (so
they can be packed into some specific subtexture).
For sprites, since we know every model in advance and never intend to deallocate them, we currently pack them all as efficiently as
possible into one giant tetxure atlas. However, in the future we might opt to pack them slightly less efficiently in exchange for
shrinking the sprite vertex size.
For figures, we pack all the textures for each *model* into the same atlas.
is a global texture atlas used for every sprite, and for figures which is why we have the ability to mesh multiple
models to the same texture area (using the simple texture atlas allocator) without requiring intermediate vector allocations.
This is accomplished by delaying the time when we actually write the color and light data to the texture until *after* all the
model vertices have been meshed; then, we can just allocate the whole color/light array at once, making the atlas we use an
exact fit. In computer science-y terms, we accomplish this delay by, after we perform the initial greedy meshing (without
texture information), not continuing to create the texture data, but instead constructing a *continuation*--that is, a function
that, when called, will execute the rest of the computation. We push this continuation (which in Rust terms is a `FnOnce` closure
that takes the `ColLightsInfo` that it is supposed to write to as context) onto a
onto a vector
resizing. To allow for suspended writes to texture data, Rust pointed out to me that the continuation that would eventually write the color and light data to the texture atlas (the one that is shared by all models sharing the same greedy mesher) would have to *own* whatever data it mshed. Because we often generate the model data to mesh as a temporary in `voxygen/src/load.rs`, the
- Matrix multiplications in the shader were reduced for figure data (@zesterer).
- Vertex "waves" for fluid data were removed.
- Terrain "bending" near edges was removed.
- Scaling was fixed to make sure empty space was not introduced in a space previously occupied by a block. It was also changed to take ownership of its voxel data,
rather than sharing it, to let it be used with meshing.
- Rust's nightly version was bumped in order to use the `array_map` function, which lets us reuse more code between the simple map and `FigureModelCache`.
- PositionedGlyph::standalone.
---
I tried to cite sources in many cases[^realtime],[^lloyd],[^lispsm],[^pbrt],[^greedy],[^tjunctions]
where I needed features from elsewhere but I am particularly grateful for the following resources,
esepcially where they have accompanying source code. I linked all of them that are accessible to the public (those that are not were
obtained through legal means).
[^realtime]: Eisemann, Elmar, Michael Schwarz, Ulf Assarsson, Michael Wimmer. Real-Time Shadows. A K Peters/CRC Press (T&F), 20160419.
[^lloyd]: Lloyd,B. 2007. [Logarithmic perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). PhD thesis, University of North Carolina.
[^lispsm]: Wimmer, M., Scherzer, D., and Purgathofer, W. 2004. [Light space perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). In Proceedings of Eurographics Symposium on Rendering 2004, pp. 143– 152.
[^pbrt]: Pharr, Matt, et al. [http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf](Physically Based Rendering: From Theory to Implementation). Third edition, Morgan Kaufmann Publishers/Elsevier, 2017.
[^greedy]: mikolalysenko. “Meshing in a Minecraft Game.” 0 FPS, 30 June 2012, <https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/>.
[^tjunctions]: blackflux. “Meshing in Voxel Engines – Part 1.” Blackflux.Com, 23 Feb. 2014, <https://blackflux.wordpress.com/2014/02/23/meshing-in-voxel-engines-part-1/>.
I am also especially grateful to Khronos, Wikiepdia, and stackoverflow for answering many of my specific questions while writing the MR.
---
Squashed commit of the following:
commit 300505e7305a2fdac722a808ee8538323f215f39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 18:46:25 2020 +0200
Fixing cargo doc and typo in CHANGELOG.
commit ec0aeb18e8499d7d84ef818331b4b65c3d76cea6
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 15:38:50 2020 +0200
Hopefully final commit for the LOD branch.
commit 5e8ea0b1eaac02903a02feb2eb038d195de4872f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 10:14:26 2020 +0200
Falling back to power as stopgap.
commit e44a1cbf46504ee9931a01bdc9033e145500d557
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 09:25:41 2020 +0200
Address imbris feedback.
Temporarily disables shiny water, lowers max VD.
These restrictions will be lifted soon after merging.
commit 561e25778a108ac3712f5ec2ce3a51234c4430d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 08:31:13 2020 +0200
Tweaking shaders a bit.
commit 7d19259078ce0dd7b3742ad7d0cb3fab3ece3fdc
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:59:43 2020 +0200
Fix view example as well.
commit 051cd4934e0fad2c0b15db4380a4189fa318679f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:29:06 2020 +0200
Fix meshing benchmark.
commit c95e07db3b4dcca285678985e65e31b927cb1c61
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 05:46:22 2020 +0200
Address MR feedback, fix scene clouds.
commit 1bfb816cabdb3ffc1e507a009c2d98696b4b573a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:39:36 2020 +0200
Incorporating Pfau's figure color changes.
New eyes and new humanoid colors.
commit 3f9b89a3ac7b3356b1dba0d1a8f6541357f81469
Merge: e2f5162e4 62c53963a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:29:41 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit e2f5162e4f96f4124aa43488f7245d341b3dcfd4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:28:38 2020 +0200
World colors are all hotloadable.
They live in assets/world/style/colors.ron.
Only a small handful of hardcoed colors remain in World; they are either
part of the map, or difficult to disentangle from the rest of the
computation. Comments are made where appropriate.
commit 62c53963abe1975009d34a8f9515a355bef24f31
Author: Marcel Märtens <marcel.cochem@googlemail.com>
Date: Wed Aug 19 15:59:00 2020 +0200
replace pretty_env_logger with tracing
commit 5b1625f99d9586fe80e2232f583ec5af9f953099
Merge: d71003acd 4942b5b39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:15:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit d71003acdabeff970b3928e97c26af6847b5b78e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:14:34 2020 +0200
Hotloading colors, part 1: colors in common.
Currently, this just entails humanoid colors. There are only three
colors not handled; the light emitter colors in
common/src/comp/inventory/item/tool.rs. These don't seem important
enough to me to warrant making hotloadable, at least not right now, but
if it's needed later we can always add them to the file.
commit 63b5e0e553eb2ea49276f192a6fc7dd65254270d
Merge: c32b337a4 6d2c4b9c1
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 13:05:37 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c32b337a46e10d9de473d178a94a3ccd61c39bb3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:52:04 2020 +0200
Fixing LOD grid, for real.
commit a166ae0360395387e09fb35a1f84210c2ce5ec24
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:28:05 2020 +0200
Addressing imbris's initial feedback.
Fixes two minor bugs: explosion particles were no longer spawning
randomly, and LOD grids were not perfectly even.
commit 4cbad004f44060994252dd3d38647a14a589712f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:27:58 2020 +0200
Bumping nightly per request.
commit 548680276aac77c25d43d16b5622f847d474dbef
Merge: acc098604 8f8b20c91
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:26:06 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit acc0986040589a3492f88a740bc3c3fc693b26d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:28:32 2020 +0200
Lower resolution due to lying drivers.
commit d3b878de2a52c358d2944a6bbd0555dad7fbdb10
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:15:38 2020 +0200
Fix issues msh encountered with Intel 4600.
commit 10245e0c1b0cb6fae10d86409435364edc6102ef
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 21:15:02 2020 +0200
Merge more models into one mesh than we did previously.
commit 3155c31e663c52ae5c3a53d5fb5665892a1a498a
Merge: 7204cc8a7 3c199280e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:35:22 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7204cc8a7a4f74a30306bd205d9834fee4bb944f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:34:43 2020 +0200
Fix not yet done NPC animations.
This forces them all to be the idle animation if not specified.
This fixes issues where you'd have giant NPCs in water.
commit bc83360f2a08918f19d417b5f772e1ff554dba08
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 19:36:37 2020 +0200
Try to fix some bugs:
- Z fighting with LOD terrain and water.
- Audio SFX not playing.
commit 1fd104aa603bf3781b6526a5cada46aeca3049dd
Merge: 862df3c99 7c2c392a3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 12:02:31 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 862df3c9976c4da9bd7cfd784f1a85973127968a
Merge: 0a4218ed9 75c1d4401
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 05:52:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0a4218ed9d541a2b34c133351bea38a99ddf4ea7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 22:27:14 2020 +0200
Fix particle depth.
commit f51dfdeb442d0dd5243dd2f344fa4be295bd0875
Merge: c6251a956 5e6dc0471
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:19:04 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit c6251a956ad376400dca5c23420cf8d213dc8fdf
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:15:46 2020 +0200
Cache figures more intelligently.
Cache figures for longer, and don't cache character states for the
player except where they actually affect the rendered model.
commit 0ed801d5404982c6fb63b1eaa4567d908b294c9d
Merge: c11b9bdf0 eea64f78f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 16:32:24 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c11b9bdf0a53bf9884d2f5a48fec9b01d582df1a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 11:47:15 2020 +0200
Remove unneeded Clippy annotation.
commit 16aa9ef40af56d69289d00aafb3deadfb8bd4f35
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 8 00:53:02 2020 +0200
Fix hotloading and Clippy.
commit 3dc973e0be5b758da1e9805eb764ad401374cd0c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 23:50:27 2020 +0200
Major speedups with SIMD.
commit fba64a7d93d5a96077ce87287bbce6ab9b7fbcae
Merge: 76429d00e d1e10b178
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:19 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 76429d00eea00d212fbd672a84ee91e75b19b938
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:10 2020 +0200
Add clippy.toml.
commit c79f512f84dbb83cb82b7954db68ff241dfd8e41
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 11:55:20 2020 +0200
Fix all clippy issues, clean up Rust code.
commit 6f90e010b3fbefb53b0d632e819931350015b6b8
Merge: 77a8c7c26 5929cfa5c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:30 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 77a8c7c267d3f44a1a62bd6b2274359973c5e4d4
Merge: b44e44232 44febaabd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:10 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 5929cfa5c713aa392110bbb62407f76caf53c3df
Author: jshipsey <jshipsey18@gmail.com>
Date: Thu Aug 6 20:47:27 2020 -0400
fixed in-hand arrow bug
commit b44e442325d828f1cd564d66908f89d09e80474b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 6 13:40:35 2020 +0200
Miscellaneous performance improvements.
commit be37acf287c1360d8085862526ac3365ffd1d768
Merge: 125d7fc6c c11876547
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 05:49:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 125d7fc6c4dcd8c8c5f27b8268a4d64f409f3644
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 04:55:31 2020 +0200
Abstract over simd vs. repr_c vectors.
Also some minor improvements to Event size.
commit d4d4956e9252e1241ce110b2aa85076c6b1e2a23
Merge: 5f3b7294a aced5f979
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:56:54 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 5f3b7294af1f8533edc2620b58863c248e2b07af
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:43:52 2020 +0200
Fix formatting issues I missed before.
commit a428a3ebba70dcab63dd0f8cd983120c90617271
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:41:51 2020 +0200
Fix clippy warnings, part 1.
There aer still a bunch of type too complex and
function takes too many arguments warnings that I'll fix later
(or ignore, since in the one case I did fix a function takes too
many arguments warning I think it made the code *less* readable).
commit ba54307540ed8a937ac08209730284fc653af85b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 30 13:22:42 2020 +0200
Fix light animations so they are removed when the light turns off.
commit 7e0f4bcbf0f4717145d8beac40d52e3acebbe2aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 21:10:20 2020 +0200
Fix crash in edge case for pixel art.
commit 56da06f7a351e2b949e9b014a90b974d511a0924
Merge: cf74d55f2 9f53a4a19
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:56:52 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:29:52 2020 +0200
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
The first concern was addressed by fixing the dimensions of the map
images drawn from the UI (so that we always use a square source
rectangle, rather than a rectangular one according to the dimensions of
the map). We also fixed the way rotation was done in the fragment
shader for north-facing sources to make it properly handle aspect ratio
(this was already done for north-facing targets). Together, these fix
rendering issues peculiar to rectangular maps.
The second and third concerns were jointly addressed by adding an
optional border color to every 2D image drawn by the UI. This turns
out not to waste extra space even though we hold a full f32 color
(to avoid an extra dependency on gfx's PackedColor), since voxel
images already take up more space than Optiion<[f32; 4]> requires.
This is then implemented automatically using the "border color"
wrapping method in the attached sampler.
Since this is implemented in graphics hardware, it only works (at
least naively) if the actual image bounds match the texture bounds.
Therefore, we altered the way the graphics cache stores images
with a border color to guarantee that they are always in their own
texture, whose size exactly matches their extent. Since the easiest
currently exposed way to set a border color is to do so for an
immutable texture, we went a bit further and added a new "immutable"
texture storage type used for these cases; currently, it is always
and automatically used only when there is a specified border color,
but in theory there's no reason we couldn't provide immutable-only
images that use the default wrapping mdoe (though clamp to border
is admittedly not a great default).
To fix the maps case specifically, we set the border color to a
translucent version of the ocean border color. This may need
tweaking going forward, which shouldn't be hard.
As part of this process, we had to modify graphics replacement to
make sure immutable images are *removed* when invalidated, rather
than just having a validity flag unset (this is normally done by
the UI to try to reuse allocations in place if images are updated
in benign ways, since the texture atlases used for Ui do not
support deallocation; currently this is only used for item images,
so there should be no overlap with immutable image replacement,
so this was purely precautionary).
Since we were already touching the relevant code, we also updated
the image dependency to a newer version that provides more ways
to avoid allocations, and made a few other changes that should
hopefully eliminate redundant most of the intermediate buffer
allocations we were performing for what should be zero-cost
conversions. This may slightly improve performance in some
cases.
commit ad18ce939940a8c697270f6e9b94db9942fd8295
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 13:21:09 2020 +0200
Fix continent scale hack.
commit 36b1cb074f5b195aebd7dbbc3da7f0246a1a18ec
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 12:11:40 2020 +0200
Enable loading different sized maps without a recompile.
We may want to tweak the effects of the continent_scale_hack.
commit 13b6d4d534cc4814b7cb3294ca41bbfea0a6b186
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 10:55:48 2020 +0200
Removing WORLD_SIZE, part 1.
Erased almost every instance of WORLD_SIZE and replaced it with a local
power of two, map_size_lg (which respects certain invariants; see
common/src/terrain/map.rs for more details about MapSizeLg). This also
means we can avoid a dependency on the world crate from client, as
desired.
Now that the rest of the code is not expecting a fixed WORLD_SIZE, the
next step is to arrange for maps to store their world size, and to use
that world size as a basis prior to loading the map (as well, probably,
as prior to configuring some of the noise functions).
commit 30b1d2c6428230a9eaa0d749cdcbbd6f1cbccd78
Merge: 7d56ba31b 1377b369f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:58 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 7d56ba31b445441461b28a07fc495d7d4f047c17
Merge: 2101113b4 598f14b25
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 1377b369f6db2258e910d467a5740f31789e3ded
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sun Jul 19 23:25:38 2020 +0200
more saturated pumpkins
commit ae8d50527f93bb0616c2ad46ce4dacb63bc37c6d
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sat Jul 18 20:29:56 2020 +0200
acacia models
commit 2101113b467e691de787392d7f20f1745f5637bd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 18 18:55:25 2020 +0200
Higher detail LOD.
commit add2cfae04b4385fa5590e11e2bd5229d9dee0aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 16 01:57:39 2020 +0200
Revert some irrelevant stuff.
commit 2e2ab3dc1eaa59a4aef7f8d34a53d8aae4c8553a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 15 13:30:49 2020 +0200
Fixing various things about shadows.
* Correcting optimal LISPSM parameter.
* Figure shadows are cast when they're not visible.
* Chunk shadows stay cast until you look away.
* Seamless cubemaps for point lights.
* Etc.
commit 6c31e6b56217274285b597af297036691ea5d897
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 19:50:26 2020 +0200
Fix shadow creation.
commit 6332cbe006115ae205597529cd8bbccd146c2cca
Merge: be438657c 930e0028b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:47:00 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit be438657c33d7b5bfb0a9582c3ed3fd366637323
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:28:08 2020 +0200
Tweaks to shadows.
Added shadow map resolution configuration, added seamless cubemaps,
documented all existing rendering options, and fixed a few Clippy
errors.
commit 23b4058906013c7d2a40c286e20e32c5fbd897ed
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 10:11:19 2020 +0200
Fix moon, use nonlinear noise for terrain.
Note that the latter has a bit of performance cost.
commit 7fbe5cbfbb9dc29607957b8e62f432a4deed193d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:23:02 2020 +0200
Address lies about max texture size.
commit bcfc62b5e13a1cdd83f57535fde4694720bebfd9
Merge: 75e3626a7 18a08e8fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:22:08 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 75e3626a785919f43fdcf2127c2b10e3e4df2f9f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:21:52 2020 +0200
OpenGL 3.3 minimum.
commit 18a08e8fe2739f02af99a5d2cb4e7c38c49e858b
Author: Monty Marz <m.marzouq@gmx.de>
Date: Tue Jul 7 23:57:52 2020 +0200
settings localization
commit 90c5d1ca3620092bc3ae10b2211489eb1cf6f5e8
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 21:11:48 2020 +0200
Lower near distance.
commit 0e66f02b25aaddaa2dfddbbc89cd67de54a9a7b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 20:09:01 2020 +0200
All sprites sway in the wind now.
commit db1401a6910bf42dcf502462c90038752ff5fbdb
Merge: 69e508d8c e8b4b29d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 19:34:17 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 69e508d8c94d8973033817ca86f357e466fc7c4d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 18:41:37 2020 +0200
Make it easy to switch to SIMD for math.
commit ffe0f5928c7a7e87d00cb5426b3b1d831d7e02fd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 21:21:12 2020 +0200
Fix some issues with underwater rendering.
commit bfda6da42f38fd02c31ee92c81ab785a3e50c2a0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 19:17:59 2020 +0200
Fix some minor display issues.
commit 0ed752e087968cf901301884aaeae698e32ef8a5
Merge: ccc6a06a8 518edcb85
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:14:21 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit ccc6a06a8d4504d6b9f7af7905a414d2ee06ab76
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:04:34 2020 +0200
Some minor changes.
commit 4e020246702889269efe1a191788992164c508d6
Merge: 50a64d927 e05c9267a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 16:17:40 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 50a64d927e6c4f4b0e4688e4cbfca694bc3f922a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 13:07:03 2020 +0200
Fix far plane.
commit 7dd06da34cae8f9ea3b6c889fe965181f3fd3949
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:25:35 2020 +0200
Add shadows.glsl.
commit 618a18c998778bf871b905a74657440fcc384c80
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:10:22 2020 +0200
Adding shadows, greedy meshing, and more.
commit eaea83fe6a5cb1cb0ba8beef888183c718258496
Merge: 267018495 2f89b863e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 22:47:07 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 2670184954a13e4a9e7a4e35ba79aac0c5fac2f7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 21:20:01 2020 +0200
Make civsim and sites deterministic.
For anything in worldgen where you use a HashMap, *please* think
carefully about which hasher you are going to use! This is
especially true if (for some reason) you are depending on hashmap
iteration order remaining stable for some aspect of worldgen.
commit f8376fd5dc72b4a9c2f51a6b4570d59c8b8e9343
Merge: 654f7e049 cdee191dd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 17:53:57 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 654f7e049258d9da27c09608bbe6a46ffa8787e5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed May 20 21:22:30 2020 +0200
Correct backface culling.
commit 560501df05ca725409b0f2e4eb31bdfdc15fd0c7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue May 19 17:22:06 2020 +0200
Greedy messhing for shadows.
commit a4d87e1875ca543436e6bbbeb20348facc5a52d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun May 17 05:59:00 2020 +0200
Shadow maps work for lantern.
commit 243d0837b8a3b08172c9a3c348d964d7ddc2a0a8
Merge: 04382dc28 71dd520cd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:53:13 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 04382dc28632b6c66e8821f6870c0daaa1c1901a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:22:17 2020 +0200
WIP: better graphics config, better LOD, shadow maps.
commit 22ddbad3eb32bfa70f0932176022208fe67ded81
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 18:54:09 2020 +0200
Minor shader fixes.
commit 746a10e8d01ac235f994b0cde78fa48998602a1f
Merge: 0f4a0e763 40ab94673
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 04:02:09 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0f4a0e763db3afbdc4fb0558611f38326ca87151
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 23:03:24 2020 +0200
Switch back to pop-in terrain.
commit dd74fa7e4a53667b38811d7aec58d7f6a68889bb
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 22:58:55 2020 +0200
LOD shading closer to voxel shading.
commit ef67bd58ba0bdaf622b078892d768263b6cba268
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 28 20:49:03 2020 +0200
Experimental underwater lighting.
commit 2c5ad9d07605e80d5fd5679dd3a5d70c605b86a9
Merge: 748279835 303967a6f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 22:35:24 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7482798354eda18c8207950080fc24d443a369de
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 21:59:55 2020 +0200
Replace discard in figure-frag.
commit d83b4ae69be4912f69bf7835f509c68a1c7770a4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:45:57 2020 +0200
Fix sprite lighting, HDR from focus_pos.
commit 0594238004f116274905fa0ed7c2b6c417ed1d29
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:14:10 2020 +0200
Proper HDR from point lights.
commit 48c93d2b41ce5743103d18e76cc228f5ac766492
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 14:01:43 2020 +0200
Brighter ambiance, darker LOD shadows.
commit e0452e895ccfa8a43f368cae3b8b8aedc24dad93
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 13:13:23 2020 +0200
More proper HDR.
commit 4c6da3ed16cfeebb455e40da5f557b4af9a499d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 00:13:10 2020 +0200
Trying LOD noise.
commit 682a3d74c85df5503ffe1fc1cc891bce789df1ad
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 23:11:08 2020 +0200
Fix LOD heights in towns.
commit cc39e5734e8b18f9077bf42e66337c1319dd6b6e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 21:01:23 2020 +0200
More LOD fixes.
commit 8116b21c2e51c836e77894e309ac273caf2917b3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:54:43 2020 +0200
I like this coloring.
commit bc2560ea90b36f4b46190005344232d993043ac3
Merge: 14effdd5d e690efe71
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:48:33 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 14effdd5db8747fcf3eb34f03b46b7792e92d1c5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:24:35 2020 +0200
Re-saturate.
commit 48a643955d4435b78179acba0beb4a979905cc31
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:23:57 2020 +0200
Various fixes.
commit f7b497a0c25f4ad4682c71dd1ed6f608052feb9b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 03:22:49 2020 +0200
Render figures again.
commit 44e4aad48deba8266b9f8bdfd3db096b381f5327
Merge: e6f0a5a98 9ec319a18
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 02:01:04 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit e6f0a5a981a82533ba188fff0a54ce98577bb152
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 24 16:12:20 2020 +0200
Add atmospheric scattering.
commit f2953087f691a8edbc001cb98ebf5059fc6f8ac0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 23 00:01:20 2020 +0200
Fix shadowing for specular reflections.
commit ddd4a67a9799b8d08c7dc0c2bec90621c2bed0e3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Apr 22 22:56:12 2020 +0200
HDR fixes.
commit 1015e60deef3c447381996277df7496707a63bd0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 21 18:25:19 2020 +0200
More lighting changes.
commit 80c264abd111fb237e57843efcb5c071d4f84613
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 13 00:29:59 2020 +0200
Lighting experiments.
commit 8414987e589dd5102bad89762a3adaccc0bfe957
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 9 02:38:40 2020 +0200
WIP -- lighting changes and soft shadows.
commit 9cd2b3fb0d6b49776c6dfe463e4169637250b11a
Merge: c7ea687eb 8b149ad11
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:29 2020 +0200
Merge branch 'sharp/new-lighting' into sharp/small-fixes
commit c7ea687ebbc5aace1b455f134a5bf49ce2c7434a
Merge: 476441531 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:02 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 8b149ad11ad4bb75018fcf9519baec27d1c95951
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:32:39 2020 +0200
Trying out a new lighting model.
commit b0ac9f36f755dd06f7c17c46150568064790864f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 07:56:11 2020 +0200
Use bicubic interpolation for terrain.
commit f6fc9307a121514b614bc50ef8eb055953e7da8a
Merge: 33140a295 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 05:01:41 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 4764415312aae6e9ac2d00e86e84577cb958f1ab
Merge: ed2d0111d 13388ee6a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 04:54:48 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 13388ee6a42943f3f79a9cb488346cef18e272fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 20:30:08 2020 +0200
Various fixes (to coloring and to soft shadows).
commit fbd084a94a067082a87cd6d28b82054709bc9265
Merge: 5a089863b 4fdf6896a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 18:50:38 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/map-colors
commit ed2d0111d994262ae836d84d1fe5a45e4de72a0b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 06:49:27 2020 +0200
Combining colors and LOD.
commit 88342640c6b835114d01c797b89fdede3b0a2108
Merge: 33140a295 5a089863b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:49:20 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 33140a2951b8212725f42c758b277aaec4d888f7
Merge: 4c65a5aed f34d4b379
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:36:21 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 5a089863beb01d4794bbe3580ada47b278715ea2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 03:17:49 2020 +0200
Making maps brighter.
This is probably not the right way to do it, but oh well!
commit 32b2c99109dd486aa922886081068f9c550c83f2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 02:46:36 2020 +0200
Horizon mapping and "layered" map generation.
Horizon mapping is a method of shadow mapping specific to height maps.
It can handle any angle between 0 and 90 degrees from the ground, as
long as know the horizontal direction in advance, by remembering only a
single angle (the "horizon angle" of the shadow map). More is explained
in common/src/msg/server.rs. We also remember the approximate height of
the largest occluder, to try to be able to generate soft shadows and
create a vertical position where the shadows can't go higher.
Additionally, map generation has been reworked. Instead of computing
everything from explicit samples, we pass in sampling functions that
return exactly what the map generator needs. This allows us to cleanly
separate the way we sample things like altitudes and colors from the map
generation process. We exploit this to generate maps *partially* on the
server (with colors and rivers, but not shading). We can then send the
partially completed map to the client, which can combine it with shadow
information to generate the final map. This is useful for two reasons:
first, it makes sure the client can apply shadow information by itself,
and second, it lets us pass the unshaded map for use with level of
detail functionality.
For similar reasons, river generation is split
out into its own layer, but for now we opt to still generate rivers on
the server (since the river wire format is more complicated to compress
and may require some extra work to make sure we have enough precision to
draw rivers well enough for LoD).
Finally, the mostly ad-hoc lighting we were performing has been (mostly)
replaced with explicit Phong reflection shading (including specular
highlights). Regularizing this seems useful and helps clarify the
"meaning" of the various light intensities, and helps us keep a more
physically plausible basis. However, its interaction with soft shadows
is still imperfect, and it's not yet clear to me what we need to do to
turn this into something useful for LoD.
commit f8926a5737ddc51f3d585c651a64c43677aae0f4
Merge: a1aee931e 875ae6ced
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Mar 13 13:32:42 2020 +0100
Merge remote-tracking branch 'origin/master' into sharp/map-colors
commit 4c65a5aed353b119aea65a2aaeb94549b67beb42
Author: Treeco <5021038-Treeco@users.noreply.gitlab.com>
Date: Mon Feb 24 16:48:05 2020 +0000
Made LOD setting slider exponential
commit 2fa7b2d20d7233dc8bfd64f9f7f54617575248f1
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 17:49:53 2020 +0000
Added mist to LoD
commit aab059a450b5f635777129ff82cc15b662965c3c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 15:14:06 2020 +0000
Added LoD slider
commit 779c36b538121c5ade3633ae5cb67bb14c8c3877
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:54:55 2020 +0000
Reduced cost of vertex pushing
commit 9fea150473906b166365b738ebcea07c697daf3d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:38:53 2020 +0000
Fixed maths, improved LoD resolution
commit 5481df38fea5bf183ff376a3337179cfaa5233dc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 11:22:50 2020 +0000
Dynamically relocate LoD vertices to enhance details
commit a3e36a50ababd615da7db1b26158c7906a5def01
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 18:13:51 2020 +0000
Simpler terrain spiral rendering
commit 255f450ae9ac8763db4bede075fb409161ed57cc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:53:17 2020 +0000
Better LoD precision
commit 3d027aebe812a5b8658a4eb8123dc9f61b3776d2
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:04:03 2020 +0000
Better falloff
commit be775c9484b457b2c0b1a494aec03392d0c70e76
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 15:30:45 2020 +0000
Applied good ideas from experimental branch
commit 58587b68545a23c5c04ab4574a4b94b3bc982246
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 16:15:13 2020 +0000
Minor fixes to LoD merging
commit 7b42aebd709c14df2db766aad61d9280ad24d84d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 15:04:44 2020 +0000
Capped LoD dragging
commit 8aafc559f87124e1ea5ca6e3ddc2aa0c242d793c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:54:37 2020 +0000
Better blending between LoD and terrain border
commit edd3455d5161792d87ddc8eadc0ecbad5532b284
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:40:19 2020 +0000
Fixed LoD z depth, added sea level offset
commit b9b06744620114dd5556e73f64fa93c145503a7c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:27:43 2020 +0000
Better LoD smoothing
commit a1aee931e790431560cd2d953ad61d9497072afd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Feb 21 14:52:17 2020 +0100
Adding shadows.
commit 2400786c13dd891c131ed86d48d05df516a8a778
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 13:48:40 2020 +0000
Use world map as LoD source
commit dbf650f504a4c25fbbc2096ac3616c736bf52d23
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Jan 20 00:48:14 2020 +0000
Better clouds at distance
commit 5e6f81b86cdb9730b9b056877b19257075fd5fa8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Jan 19 23:59:02 2020 +0000
sync
commit 745e7540ddb000cc645f612767b337c2ddc3f7c0
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 12:40:48 2019 +0000
Improved cloud falloff mist, faster noise sampling
commit f6a200d0cb866196ba57697466755f9e0c7ea5d8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 10:09:00 2019 +0000
Improved long-range depth precision, removed unnecessary LoD polygons
commit 63d1b2bb2292898d59fb4f4e502201103dfeb86f
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 20:57:46 2019 +0000
Working LoD shader
commit f13d98ee3e58f881e8b978861a67663b59ed91ec
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 11:03:40 2019 +0000
LoD first attempt (stack overflow issue)
2020-08-20 18:34:59 +00:00
|
|
|
|
use num::{traits::FloatConst, Float, Signed};
|
2019-07-30 14:10:59 +00:00
|
|
|
|
use rand::{Rng, SeedableRng};
|
|
|
|
|
use rand_chacha::ChaChaRng;
|
2019-10-16 11:39:41 +00:00
|
|
|
|
use rayon::prelude::*;
|
2020-07-06 14:23:08 +00:00
|
|
|
|
use serde::{Deserialize, Serialize};
|
2019-08-18 16:35:27 +00:00
|
|
|
|
use std::{
|
2019-10-16 11:39:41 +00:00
|
|
|
|
f32, f64,
|
2019-12-11 09:14:50 +00:00
|
|
|
|
fs::File,
|
2020-01-11 20:38:30 +00:00
|
|
|
|
io::{BufReader, BufWriter},
|
2019-08-18 16:35:27 +00:00
|
|
|
|
ops::{Add, Div, Mul, Neg, Sub},
|
2019-12-11 09:14:50 +00:00
|
|
|
|
path::PathBuf,
|
2019-08-18 16:35:27 +00:00
|
|
|
|
};
|
2020-06-21 14:26:06 +00:00
|
|
|
|
use tracing::{debug, warn};
|
2019-06-09 10:24:18 +00:00
|
|
|
|
use vek::*;
|
2019-05-20 02:53:04 +00:00
|
|
|
|
|
(See sharp/lod-history) LOD, shadows, greedy meshing, new lighting, perf
---
Pretty much a Veloren fork at this point. Here's a high level overview of the changes (will be added to CHANGELOG just before merge).
At a high level this MR incorporates roughly two groups of changes.
The first group consists of new game features: more flexible map sizes, level of detail terrain, shadow maps, and a new lighting
engine. This is "feature work" that (mostly) only adds new things to Veloren, and mostly shouldn't affect old stuff.
The second big group of changes are those addressing the fallout from all the new features. These include performance fixes of
various sorts: the addition of multiple graphics options and optimization of the cheap ones to avoid work, switching all voxel
models to use some variant of greedy meshing, switching over much of our CPU-side vector math to exploit SIMD instructions
(coinciding with a fork of `vek`), and a rewrite of how the UI handles text rendering (coinciding with updates to our fork
of `conrod`). Making Veloren's hardcoded colors appear correct under the new lighting engine also required considerably
changes (TODO: Fill in this section when it's complete).
The second category of changes often heavily touches code owned by other people, including frequently modified code "owned" by a
handful of people, so I recommend that this code be reviewed particularly carefully.
---
At a high level (each will be described in more detail below):
- The world map has been refactored.
- The world size is no longer hardcoded (@zesterer).
- The map generation code was made generic to allow using it outside of the `world` crate (@zesterer).
- On world creation, we now compute *horizon maps* (@zesterer).
- The way we pass the world from the server to the client has been updated (@xMAC94x).
- Artifacts related to image rotation were fixed (@imbris).
- Multiflow rivers were enabled (@zesterer).
- In the process of making changes related to the world map, various incidental fixes and optimizations were required.
- The new *level of detail* feature was added (@zesterer wrote part of this and has checked out the rest).
- A new LOD terrain rendering step was added to the pipeline.
- The LOD terrain quality was made configurable via a graphics setting.
- Horizon maps were used to cast shadows from LOD chunks on both LOD and non-LOD terrain.
- A "voxelization" effect was incorporated into rendered LOD terrain to make it blend better into the world.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Veloren's lighting has been completely overhauled (@zesterer has already checked most of this out).
- A semi-accurate index of refraction was assigned to our materials.
- A new, more realistic, physically based approach to lighting was used using the *Ashikhmin Shirley* BRDF.
- We emulate *atmospheric scattering* using equations designed for measuring solar panel light exposure.
- We attempt to compute *realistic light attenuation* in water using its real material properties.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Point and directional lights now cast realistic shadows, using *shadow mapping.* (@imbris, @zesterer, @Treeco, @YuriMomo)
- Point light shadow maps were added to the rendering pipeline, using geometry shaders and *seamless cube maps*.
- Directional light shadows were added to the rendering pipeline, using LISPSM together with disabling *depth clamping*.
- "Shadow-only" chunks and NPCs were added to prevent shadows from models behind you from disappearing.
- In the process of making changes related to shadow maps, various incidental fixes and optimizations were required.
The addition of shadow maps, LOD terrain, and the new lighting all led to significant performance degradation, on top of other
changes happening in master. Therefore, a large number of performance improvements were also needed:
- The graphics options were made much more flexible and configurable, and shaders were optimize.
- New options were provided for how to render lights and shadows (@Pfauenauge, @zesterer).
- Graphic setting storage and configuration were overhauled to make adding new features easier (@Pfauenauge, @imbris).
- Shaders were rewritten to utilize GLSL's preprocessor to avoid overhead (@zesterer, @YuriMomo).
- In the process of making changes related to providing additional rendering options, various incidental fixes and optimizations were required.
- Voxel model creation was switched to use *greedy meshing.*
- A new voxel meshing method, greedy meshing, was added (@imbris).
- Uses of the older meshing methods were migrated to use greedy meshing (@imbris, @jshipsey, @Pfauenauge).
- New restrictions were added to terrain, figure, and sprites to future proof them for further optimizations (@jshipsey, @Pfauenauge, @zesterer).
- Most positions are now relative to either chunk or player position for better precision (@imbris, @zesterer, @scottc).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- Animation and terrain math were switched to use SIMD where possible.
- Fixes were made to vek to make its SIMD feature usable for us (@zesterer, @imbris).
- The interface and types used in bone animation were changed in various ways (@jshipsey, @Snowram, @Pfauenauge).
- Redundant code generation for body animation is now partly taken care of by a macro (@jshipsey, @Snowram, @Pfauenauge).
- Animation code was modified to to use vek's SIMD representation where possible (@jshipsey, @Snowram, @Pfauenauge).
- Terrain meshing code and shadow map math were also modified to use vek's SIMD representation (@imbris).
- SIMD instruction generation was enabled (@YuriMomo, @jshipsey, @Snowram, @imbris, @Angelonfira, @xMAC94x).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- The way we cache glyphs was completely refactored, fixed, and optimized.
- Our fork of `conrod` was optimized in various ways (@imbris).
- Our fork of `conrod` now exposes whether a widget was updated during the current frame (@imbris).
- Our use of the glyph cache was rewritten for correctness (@imbris).
- A *text cache* was introduced that lets us skip remeshing glyphs that have not changed (@imbris).
- Various changes were made to reduce pressure on the glyph cache, with more planned (@imbris, @Pfauenauge).
- In the process of making changes related to the glyph cache, various incidental fixes and optimizations were required.
- Colors were changed to keep Veloren's look consistent with master.
- Some older tree models were brought back (@Pfauenauge).
- TODO(@Sharp): All hardcoded colors were extracted and made hotloadable.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Hardcoded colors were fixed to conform to Veloren's style.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Color models were fixed to conform to Veloren's style.
A detailed description of the involved changes follows.
---
- The world size is no longer hardcoded. All functions dependent on world size now take a `WorldSizeLg`, which holds the base 2 logarithm of each actual world dimension and is guaranteed to maintain certain properties (outlined in `common/src/terrain/map.rs`). Additionally, many utility functions that utilize the world size were moved into `common` as well (mostly `common/src/terrain/mod.rs`). Finally, the world map format was updated in order to store its size explicitly, with a migration path from the old format that should work whenever the old formatted map was a square (practically always). See `world/src/sim/mod.rs` for these changes.
- The map generation code was made generic to allow using it outside of the `world` crate. The parts of the map generating code that do not need to query the world were moved over to `common/src/terrain/map.rs`, allowing them to be used from the client without creating a dependency on `world`. The rest of it was turned into helper functions in `world/src/sim/map.rs`, which can be passed as closures to the generic map generation code to complete its construction. This also means that colors are now passed in separately to the map generation function. See <https://veloren.net/devblog-78/> for more details.
- On world creation, we now compute *horizon maps*. See the function in `world/src/sim/util.rs`.
Given a height map and a plane intersecting that height map, our horizon maps allow us to encode enough information to reconstruct shadows for each point on the height map using only the *horizon angle* (the angle at which the sun starts to become visible). As Veloren's sun only covers one plane, this is sufficient for encoding sun shadows for LOD terrain, by encoding two angles per chunk (one for each 90 degrees the sun covers). We can also use this for the moon, if we want, since the moon follows the same path. Additionally, we store the *height* of the furthest occluder, to try to make the shadows volumetric; so this means 4 bytes in total for each chunk.
Support for horizon maps has been merged into the map functionality in common as well.
- The way we pass the world from the server to the client has been updated. Rather than passing the prerendered map, we instead pass three maps with values for each chunk; one with the color information, a second with altitude information, and a third with horizon map information. We then reconstruct the map on the client, together with some additional information we send from the server (like the sea level and maximum height). See `common/src/msg/server.rs` for a detailed description of the format of `WorldMapMsg`, and `server/src/libr.rs` and `client/src/lib.rs` for details of the map construction and parsing.
- Artifacts related to image rotation were fixed. See the commit message for commit SHA `cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e` for a detailed explanation. This involved changes to shaders, the addition of a new type of graphic (also reflected in the graphic cache) that allows specifying a border color (which automatically makes the associated texture immutable), and some related fixes. I reproduce the first two paragraphs of the MR description as well:
```
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
```
- Multiflow rivers were enabled.
This does not really need to be part of this MR, and would be easy to revert, but since it seemed to provide a nice improvement it's currently packaged with it.
We already computed multiple outflows from each chunk for erosion purposes long before this MR.
However, we never modified river rendering to be able to handle this case (just a single downhill river flow is complex enough!) so this was not exposed when deciding which chunks were rivers.
Now that
- In the process of making changes related to the world map, various incidental fixes and optimizations were required. Some examples of fixes include making sure terrain is never lowered to below sea level (to make the shadow maps report correct values), fixing map altitudes and colors to understand things like cliffs and "block level" coloring (that doesn'te xist on the column level), and fixing a crashbug when rendering images for the UI where source pixels are strongly rectangular. Some examples of related performance fixes include avoiding allocating a fresh vector for all the maps (i.e. copying it over to change the format from `[u32; n]` to `DynamicImage` and then copying again to convert to `RgbaImage`), and instead using the `gfx::memory::slice` function to accomplish the same thing. These sorts of changes are spread all arond the code.
This includes the additon of a new scene, `voxygen/src/scene/lod.rs`, a new pipeline `voxygen/src/render/pipeline/lod_terrain.rs`, and new shaders `assets/vxygen/shaders/lod-terrain-vert.glsl` and `assets/vxygen/shaders/lod-terrain-frag.glsl`, as well as associated changes to the renderer in `voxygen/src/render/renderer.rs`.
The main idea behind our initial approach to LOD was to take the world data we now get from the server (altitude, color, and horizon mapping).
- Some previously computed values were turned into shader uniforms for better prediction on weak processors. (@zesterer)
- Calls to power or trig functions were removed or replaced with multiplications, where possible.
- After some deliberation
- To properly handle sprite "waving" for nearby sprites,
We explicitly designed the greedy meshing system with figures and sprites in mind.
In both cases, we want to be able to *efficiently* pack many different models into the same texture, especially in cases where we know
we will either not be removing any of the grouped-together from the models from the texture, or will remove all of them at once (so
they can be packed into some specific subtexture).
For sprites, since we know every model in advance and never intend to deallocate them, we currently pack them all as efficiently as
possible into one giant tetxure atlas. However, in the future we might opt to pack them slightly less efficiently in exchange for
shrinking the sprite vertex size.
For figures, we pack all the textures for each *model* into the same atlas.
is a global texture atlas used for every sprite, and for figures which is why we have the ability to mesh multiple
models to the same texture area (using the simple texture atlas allocator) without requiring intermediate vector allocations.
This is accomplished by delaying the time when we actually write the color and light data to the texture until *after* all the
model vertices have been meshed; then, we can just allocate the whole color/light array at once, making the atlas we use an
exact fit. In computer science-y terms, we accomplish this delay by, after we perform the initial greedy meshing (without
texture information), not continuing to create the texture data, but instead constructing a *continuation*--that is, a function
that, when called, will execute the rest of the computation. We push this continuation (which in Rust terms is a `FnOnce` closure
that takes the `ColLightsInfo` that it is supposed to write to as context) onto a
onto a vector
resizing. To allow for suspended writes to texture data, Rust pointed out to me that the continuation that would eventually write the color and light data to the texture atlas (the one that is shared by all models sharing the same greedy mesher) would have to *own* whatever data it mshed. Because we often generate the model data to mesh as a temporary in `voxygen/src/load.rs`, the
- Matrix multiplications in the shader were reduced for figure data (@zesterer).
- Vertex "waves" for fluid data were removed.
- Terrain "bending" near edges was removed.
- Scaling was fixed to make sure empty space was not introduced in a space previously occupied by a block. It was also changed to take ownership of its voxel data,
rather than sharing it, to let it be used with meshing.
- Rust's nightly version was bumped in order to use the `array_map` function, which lets us reuse more code between the simple map and `FigureModelCache`.
- PositionedGlyph::standalone.
---
I tried to cite sources in many cases[^realtime],[^lloyd],[^lispsm],[^pbrt],[^greedy],[^tjunctions]
where I needed features from elsewhere but I am particularly grateful for the following resources,
esepcially where they have accompanying source code. I linked all of them that are accessible to the public (those that are not were
obtained through legal means).
[^realtime]: Eisemann, Elmar, Michael Schwarz, Ulf Assarsson, Michael Wimmer. Real-Time Shadows. A K Peters/CRC Press (T&F), 20160419.
[^lloyd]: Lloyd,B. 2007. [Logarithmic perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). PhD thesis, University of North Carolina.
[^lispsm]: Wimmer, M., Scherzer, D., and Purgathofer, W. 2004. [Light space perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). In Proceedings of Eurographics Symposium on Rendering 2004, pp. 143– 152.
[^pbrt]: Pharr, Matt, et al. [http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf](Physically Based Rendering: From Theory to Implementation). Third edition, Morgan Kaufmann Publishers/Elsevier, 2017.
[^greedy]: mikolalysenko. “Meshing in a Minecraft Game.” 0 FPS, 30 June 2012, <https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/>.
[^tjunctions]: blackflux. “Meshing in Voxel Engines – Part 1.” Blackflux.Com, 23 Feb. 2014, <https://blackflux.wordpress.com/2014/02/23/meshing-in-voxel-engines-part-1/>.
I am also especially grateful to Khronos, Wikiepdia, and stackoverflow for answering many of my specific questions while writing the MR.
---
Squashed commit of the following:
commit 300505e7305a2fdac722a808ee8538323f215f39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 18:46:25 2020 +0200
Fixing cargo doc and typo in CHANGELOG.
commit ec0aeb18e8499d7d84ef818331b4b65c3d76cea6
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 15:38:50 2020 +0200
Hopefully final commit for the LOD branch.
commit 5e8ea0b1eaac02903a02feb2eb038d195de4872f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 10:14:26 2020 +0200
Falling back to power as stopgap.
commit e44a1cbf46504ee9931a01bdc9033e145500d557
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 09:25:41 2020 +0200
Address imbris feedback.
Temporarily disables shiny water, lowers max VD.
These restrictions will be lifted soon after merging.
commit 561e25778a108ac3712f5ec2ce3a51234c4430d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 08:31:13 2020 +0200
Tweaking shaders a bit.
commit 7d19259078ce0dd7b3742ad7d0cb3fab3ece3fdc
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:59:43 2020 +0200
Fix view example as well.
commit 051cd4934e0fad2c0b15db4380a4189fa318679f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:29:06 2020 +0200
Fix meshing benchmark.
commit c95e07db3b4dcca285678985e65e31b927cb1c61
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 05:46:22 2020 +0200
Address MR feedback, fix scene clouds.
commit 1bfb816cabdb3ffc1e507a009c2d98696b4b573a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:39:36 2020 +0200
Incorporating Pfau's figure color changes.
New eyes and new humanoid colors.
commit 3f9b89a3ac7b3356b1dba0d1a8f6541357f81469
Merge: e2f5162e4 62c53963a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:29:41 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit e2f5162e4f96f4124aa43488f7245d341b3dcfd4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:28:38 2020 +0200
World colors are all hotloadable.
They live in assets/world/style/colors.ron.
Only a small handful of hardcoed colors remain in World; they are either
part of the map, or difficult to disentangle from the rest of the
computation. Comments are made where appropriate.
commit 62c53963abe1975009d34a8f9515a355bef24f31
Author: Marcel Märtens <marcel.cochem@googlemail.com>
Date: Wed Aug 19 15:59:00 2020 +0200
replace pretty_env_logger with tracing
commit 5b1625f99d9586fe80e2232f583ec5af9f953099
Merge: d71003acd 4942b5b39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:15:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit d71003acdabeff970b3928e97c26af6847b5b78e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:14:34 2020 +0200
Hotloading colors, part 1: colors in common.
Currently, this just entails humanoid colors. There are only three
colors not handled; the light emitter colors in
common/src/comp/inventory/item/tool.rs. These don't seem important
enough to me to warrant making hotloadable, at least not right now, but
if it's needed later we can always add them to the file.
commit 63b5e0e553eb2ea49276f192a6fc7dd65254270d
Merge: c32b337a4 6d2c4b9c1
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 13:05:37 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c32b337a46e10d9de473d178a94a3ccd61c39bb3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:52:04 2020 +0200
Fixing LOD grid, for real.
commit a166ae0360395387e09fb35a1f84210c2ce5ec24
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:28:05 2020 +0200
Addressing imbris's initial feedback.
Fixes two minor bugs: explosion particles were no longer spawning
randomly, and LOD grids were not perfectly even.
commit 4cbad004f44060994252dd3d38647a14a589712f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:27:58 2020 +0200
Bumping nightly per request.
commit 548680276aac77c25d43d16b5622f847d474dbef
Merge: acc098604 8f8b20c91
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:26:06 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit acc0986040589a3492f88a740bc3c3fc693b26d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:28:32 2020 +0200
Lower resolution due to lying drivers.
commit d3b878de2a52c358d2944a6bbd0555dad7fbdb10
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:15:38 2020 +0200
Fix issues msh encountered with Intel 4600.
commit 10245e0c1b0cb6fae10d86409435364edc6102ef
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 21:15:02 2020 +0200
Merge more models into one mesh than we did previously.
commit 3155c31e663c52ae5c3a53d5fb5665892a1a498a
Merge: 7204cc8a7 3c199280e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:35:22 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7204cc8a7a4f74a30306bd205d9834fee4bb944f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:34:43 2020 +0200
Fix not yet done NPC animations.
This forces them all to be the idle animation if not specified.
This fixes issues where you'd have giant NPCs in water.
commit bc83360f2a08918f19d417b5f772e1ff554dba08
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 19:36:37 2020 +0200
Try to fix some bugs:
- Z fighting with LOD terrain and water.
- Audio SFX not playing.
commit 1fd104aa603bf3781b6526a5cada46aeca3049dd
Merge: 862df3c99 7c2c392a3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 12:02:31 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 862df3c9976c4da9bd7cfd784f1a85973127968a
Merge: 0a4218ed9 75c1d4401
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 05:52:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0a4218ed9d541a2b34c133351bea38a99ddf4ea7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 22:27:14 2020 +0200
Fix particle depth.
commit f51dfdeb442d0dd5243dd2f344fa4be295bd0875
Merge: c6251a956 5e6dc0471
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:19:04 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit c6251a956ad376400dca5c23420cf8d213dc8fdf
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:15:46 2020 +0200
Cache figures more intelligently.
Cache figures for longer, and don't cache character states for the
player except where they actually affect the rendered model.
commit 0ed801d5404982c6fb63b1eaa4567d908b294c9d
Merge: c11b9bdf0 eea64f78f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 16:32:24 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c11b9bdf0a53bf9884d2f5a48fec9b01d582df1a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 11:47:15 2020 +0200
Remove unneeded Clippy annotation.
commit 16aa9ef40af56d69289d00aafb3deadfb8bd4f35
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 8 00:53:02 2020 +0200
Fix hotloading and Clippy.
commit 3dc973e0be5b758da1e9805eb764ad401374cd0c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 23:50:27 2020 +0200
Major speedups with SIMD.
commit fba64a7d93d5a96077ce87287bbce6ab9b7fbcae
Merge: 76429d00e d1e10b178
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:19 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 76429d00eea00d212fbd672a84ee91e75b19b938
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:10 2020 +0200
Add clippy.toml.
commit c79f512f84dbb83cb82b7954db68ff241dfd8e41
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 11:55:20 2020 +0200
Fix all clippy issues, clean up Rust code.
commit 6f90e010b3fbefb53b0d632e819931350015b6b8
Merge: 77a8c7c26 5929cfa5c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:30 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 77a8c7c267d3f44a1a62bd6b2274359973c5e4d4
Merge: b44e44232 44febaabd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:10 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 5929cfa5c713aa392110bbb62407f76caf53c3df
Author: jshipsey <jshipsey18@gmail.com>
Date: Thu Aug 6 20:47:27 2020 -0400
fixed in-hand arrow bug
commit b44e442325d828f1cd564d66908f89d09e80474b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 6 13:40:35 2020 +0200
Miscellaneous performance improvements.
commit be37acf287c1360d8085862526ac3365ffd1d768
Merge: 125d7fc6c c11876547
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 05:49:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 125d7fc6c4dcd8c8c5f27b8268a4d64f409f3644
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 04:55:31 2020 +0200
Abstract over simd vs. repr_c vectors.
Also some minor improvements to Event size.
commit d4d4956e9252e1241ce110b2aa85076c6b1e2a23
Merge: 5f3b7294a aced5f979
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:56:54 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 5f3b7294af1f8533edc2620b58863c248e2b07af
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:43:52 2020 +0200
Fix formatting issues I missed before.
commit a428a3ebba70dcab63dd0f8cd983120c90617271
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:41:51 2020 +0200
Fix clippy warnings, part 1.
There aer still a bunch of type too complex and
function takes too many arguments warnings that I'll fix later
(or ignore, since in the one case I did fix a function takes too
many arguments warning I think it made the code *less* readable).
commit ba54307540ed8a937ac08209730284fc653af85b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 30 13:22:42 2020 +0200
Fix light animations so they are removed when the light turns off.
commit 7e0f4bcbf0f4717145d8beac40d52e3acebbe2aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 21:10:20 2020 +0200
Fix crash in edge case for pixel art.
commit 56da06f7a351e2b949e9b014a90b974d511a0924
Merge: cf74d55f2 9f53a4a19
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:56:52 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:29:52 2020 +0200
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
The first concern was addressed by fixing the dimensions of the map
images drawn from the UI (so that we always use a square source
rectangle, rather than a rectangular one according to the dimensions of
the map). We also fixed the way rotation was done in the fragment
shader for north-facing sources to make it properly handle aspect ratio
(this was already done for north-facing targets). Together, these fix
rendering issues peculiar to rectangular maps.
The second and third concerns were jointly addressed by adding an
optional border color to every 2D image drawn by the UI. This turns
out not to waste extra space even though we hold a full f32 color
(to avoid an extra dependency on gfx's PackedColor), since voxel
images already take up more space than Optiion<[f32; 4]> requires.
This is then implemented automatically using the "border color"
wrapping method in the attached sampler.
Since this is implemented in graphics hardware, it only works (at
least naively) if the actual image bounds match the texture bounds.
Therefore, we altered the way the graphics cache stores images
with a border color to guarantee that they are always in their own
texture, whose size exactly matches their extent. Since the easiest
currently exposed way to set a border color is to do so for an
immutable texture, we went a bit further and added a new "immutable"
texture storage type used for these cases; currently, it is always
and automatically used only when there is a specified border color,
but in theory there's no reason we couldn't provide immutable-only
images that use the default wrapping mdoe (though clamp to border
is admittedly not a great default).
To fix the maps case specifically, we set the border color to a
translucent version of the ocean border color. This may need
tweaking going forward, which shouldn't be hard.
As part of this process, we had to modify graphics replacement to
make sure immutable images are *removed* when invalidated, rather
than just having a validity flag unset (this is normally done by
the UI to try to reuse allocations in place if images are updated
in benign ways, since the texture atlases used for Ui do not
support deallocation; currently this is only used for item images,
so there should be no overlap with immutable image replacement,
so this was purely precautionary).
Since we were already touching the relevant code, we also updated
the image dependency to a newer version that provides more ways
to avoid allocations, and made a few other changes that should
hopefully eliminate redundant most of the intermediate buffer
allocations we were performing for what should be zero-cost
conversions. This may slightly improve performance in some
cases.
commit ad18ce939940a8c697270f6e9b94db9942fd8295
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 13:21:09 2020 +0200
Fix continent scale hack.
commit 36b1cb074f5b195aebd7dbbc3da7f0246a1a18ec
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 12:11:40 2020 +0200
Enable loading different sized maps without a recompile.
We may want to tweak the effects of the continent_scale_hack.
commit 13b6d4d534cc4814b7cb3294ca41bbfea0a6b186
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 10:55:48 2020 +0200
Removing WORLD_SIZE, part 1.
Erased almost every instance of WORLD_SIZE and replaced it with a local
power of two, map_size_lg (which respects certain invariants; see
common/src/terrain/map.rs for more details about MapSizeLg). This also
means we can avoid a dependency on the world crate from client, as
desired.
Now that the rest of the code is not expecting a fixed WORLD_SIZE, the
next step is to arrange for maps to store their world size, and to use
that world size as a basis prior to loading the map (as well, probably,
as prior to configuring some of the noise functions).
commit 30b1d2c6428230a9eaa0d749cdcbbd6f1cbccd78
Merge: 7d56ba31b 1377b369f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:58 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 7d56ba31b445441461b28a07fc495d7d4f047c17
Merge: 2101113b4 598f14b25
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 1377b369f6db2258e910d467a5740f31789e3ded
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sun Jul 19 23:25:38 2020 +0200
more saturated pumpkins
commit ae8d50527f93bb0616c2ad46ce4dacb63bc37c6d
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sat Jul 18 20:29:56 2020 +0200
acacia models
commit 2101113b467e691de787392d7f20f1745f5637bd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 18 18:55:25 2020 +0200
Higher detail LOD.
commit add2cfae04b4385fa5590e11e2bd5229d9dee0aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 16 01:57:39 2020 +0200
Revert some irrelevant stuff.
commit 2e2ab3dc1eaa59a4aef7f8d34a53d8aae4c8553a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 15 13:30:49 2020 +0200
Fixing various things about shadows.
* Correcting optimal LISPSM parameter.
* Figure shadows are cast when they're not visible.
* Chunk shadows stay cast until you look away.
* Seamless cubemaps for point lights.
* Etc.
commit 6c31e6b56217274285b597af297036691ea5d897
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 19:50:26 2020 +0200
Fix shadow creation.
commit 6332cbe006115ae205597529cd8bbccd146c2cca
Merge: be438657c 930e0028b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:47:00 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit be438657c33d7b5bfb0a9582c3ed3fd366637323
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:28:08 2020 +0200
Tweaks to shadows.
Added shadow map resolution configuration, added seamless cubemaps,
documented all existing rendering options, and fixed a few Clippy
errors.
commit 23b4058906013c7d2a40c286e20e32c5fbd897ed
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 10:11:19 2020 +0200
Fix moon, use nonlinear noise for terrain.
Note that the latter has a bit of performance cost.
commit 7fbe5cbfbb9dc29607957b8e62f432a4deed193d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:23:02 2020 +0200
Address lies about max texture size.
commit bcfc62b5e13a1cdd83f57535fde4694720bebfd9
Merge: 75e3626a7 18a08e8fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:22:08 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 75e3626a785919f43fdcf2127c2b10e3e4df2f9f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:21:52 2020 +0200
OpenGL 3.3 minimum.
commit 18a08e8fe2739f02af99a5d2cb4e7c38c49e858b
Author: Monty Marz <m.marzouq@gmx.de>
Date: Tue Jul 7 23:57:52 2020 +0200
settings localization
commit 90c5d1ca3620092bc3ae10b2211489eb1cf6f5e8
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 21:11:48 2020 +0200
Lower near distance.
commit 0e66f02b25aaddaa2dfddbbc89cd67de54a9a7b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 20:09:01 2020 +0200
All sprites sway in the wind now.
commit db1401a6910bf42dcf502462c90038752ff5fbdb
Merge: 69e508d8c e8b4b29d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 19:34:17 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 69e508d8c94d8973033817ca86f357e466fc7c4d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 18:41:37 2020 +0200
Make it easy to switch to SIMD for math.
commit ffe0f5928c7a7e87d00cb5426b3b1d831d7e02fd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 21:21:12 2020 +0200
Fix some issues with underwater rendering.
commit bfda6da42f38fd02c31ee92c81ab785a3e50c2a0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 19:17:59 2020 +0200
Fix some minor display issues.
commit 0ed752e087968cf901301884aaeae698e32ef8a5
Merge: ccc6a06a8 518edcb85
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:14:21 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit ccc6a06a8d4504d6b9f7af7905a414d2ee06ab76
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:04:34 2020 +0200
Some minor changes.
commit 4e020246702889269efe1a191788992164c508d6
Merge: 50a64d927 e05c9267a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 16:17:40 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 50a64d927e6c4f4b0e4688e4cbfca694bc3f922a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 13:07:03 2020 +0200
Fix far plane.
commit 7dd06da34cae8f9ea3b6c889fe965181f3fd3949
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:25:35 2020 +0200
Add shadows.glsl.
commit 618a18c998778bf871b905a74657440fcc384c80
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:10:22 2020 +0200
Adding shadows, greedy meshing, and more.
commit eaea83fe6a5cb1cb0ba8beef888183c718258496
Merge: 267018495 2f89b863e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 22:47:07 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 2670184954a13e4a9e7a4e35ba79aac0c5fac2f7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 21:20:01 2020 +0200
Make civsim and sites deterministic.
For anything in worldgen where you use a HashMap, *please* think
carefully about which hasher you are going to use! This is
especially true if (for some reason) you are depending on hashmap
iteration order remaining stable for some aspect of worldgen.
commit f8376fd5dc72b4a9c2f51a6b4570d59c8b8e9343
Merge: 654f7e049 cdee191dd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 17:53:57 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 654f7e049258d9da27c09608bbe6a46ffa8787e5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed May 20 21:22:30 2020 +0200
Correct backface culling.
commit 560501df05ca725409b0f2e4eb31bdfdc15fd0c7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue May 19 17:22:06 2020 +0200
Greedy messhing for shadows.
commit a4d87e1875ca543436e6bbbeb20348facc5a52d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun May 17 05:59:00 2020 +0200
Shadow maps work for lantern.
commit 243d0837b8a3b08172c9a3c348d964d7ddc2a0a8
Merge: 04382dc28 71dd520cd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:53:13 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 04382dc28632b6c66e8821f6870c0daaa1c1901a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:22:17 2020 +0200
WIP: better graphics config, better LOD, shadow maps.
commit 22ddbad3eb32bfa70f0932176022208fe67ded81
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 18:54:09 2020 +0200
Minor shader fixes.
commit 746a10e8d01ac235f994b0cde78fa48998602a1f
Merge: 0f4a0e763 40ab94673
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 04:02:09 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0f4a0e763db3afbdc4fb0558611f38326ca87151
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 23:03:24 2020 +0200
Switch back to pop-in terrain.
commit dd74fa7e4a53667b38811d7aec58d7f6a68889bb
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 22:58:55 2020 +0200
LOD shading closer to voxel shading.
commit ef67bd58ba0bdaf622b078892d768263b6cba268
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 28 20:49:03 2020 +0200
Experimental underwater lighting.
commit 2c5ad9d07605e80d5fd5679dd3a5d70c605b86a9
Merge: 748279835 303967a6f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 22:35:24 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7482798354eda18c8207950080fc24d443a369de
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 21:59:55 2020 +0200
Replace discard in figure-frag.
commit d83b4ae69be4912f69bf7835f509c68a1c7770a4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:45:57 2020 +0200
Fix sprite lighting, HDR from focus_pos.
commit 0594238004f116274905fa0ed7c2b6c417ed1d29
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:14:10 2020 +0200
Proper HDR from point lights.
commit 48c93d2b41ce5743103d18e76cc228f5ac766492
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 14:01:43 2020 +0200
Brighter ambiance, darker LOD shadows.
commit e0452e895ccfa8a43f368cae3b8b8aedc24dad93
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 13:13:23 2020 +0200
More proper HDR.
commit 4c6da3ed16cfeebb455e40da5f557b4af9a499d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 00:13:10 2020 +0200
Trying LOD noise.
commit 682a3d74c85df5503ffe1fc1cc891bce789df1ad
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 23:11:08 2020 +0200
Fix LOD heights in towns.
commit cc39e5734e8b18f9077bf42e66337c1319dd6b6e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 21:01:23 2020 +0200
More LOD fixes.
commit 8116b21c2e51c836e77894e309ac273caf2917b3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:54:43 2020 +0200
I like this coloring.
commit bc2560ea90b36f4b46190005344232d993043ac3
Merge: 14effdd5d e690efe71
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:48:33 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 14effdd5db8747fcf3eb34f03b46b7792e92d1c5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:24:35 2020 +0200
Re-saturate.
commit 48a643955d4435b78179acba0beb4a979905cc31
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:23:57 2020 +0200
Various fixes.
commit f7b497a0c25f4ad4682c71dd1ed6f608052feb9b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 03:22:49 2020 +0200
Render figures again.
commit 44e4aad48deba8266b9f8bdfd3db096b381f5327
Merge: e6f0a5a98 9ec319a18
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 02:01:04 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit e6f0a5a981a82533ba188fff0a54ce98577bb152
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 24 16:12:20 2020 +0200
Add atmospheric scattering.
commit f2953087f691a8edbc001cb98ebf5059fc6f8ac0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 23 00:01:20 2020 +0200
Fix shadowing for specular reflections.
commit ddd4a67a9799b8d08c7dc0c2bec90621c2bed0e3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Apr 22 22:56:12 2020 +0200
HDR fixes.
commit 1015e60deef3c447381996277df7496707a63bd0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 21 18:25:19 2020 +0200
More lighting changes.
commit 80c264abd111fb237e57843efcb5c071d4f84613
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 13 00:29:59 2020 +0200
Lighting experiments.
commit 8414987e589dd5102bad89762a3adaccc0bfe957
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 9 02:38:40 2020 +0200
WIP -- lighting changes and soft shadows.
commit 9cd2b3fb0d6b49776c6dfe463e4169637250b11a
Merge: c7ea687eb 8b149ad11
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:29 2020 +0200
Merge branch 'sharp/new-lighting' into sharp/small-fixes
commit c7ea687ebbc5aace1b455f134a5bf49ce2c7434a
Merge: 476441531 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:02 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 8b149ad11ad4bb75018fcf9519baec27d1c95951
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:32:39 2020 +0200
Trying out a new lighting model.
commit b0ac9f36f755dd06f7c17c46150568064790864f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 07:56:11 2020 +0200
Use bicubic interpolation for terrain.
commit f6fc9307a121514b614bc50ef8eb055953e7da8a
Merge: 33140a295 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 05:01:41 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 4764415312aae6e9ac2d00e86e84577cb958f1ab
Merge: ed2d0111d 13388ee6a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 04:54:48 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 13388ee6a42943f3f79a9cb488346cef18e272fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 20:30:08 2020 +0200
Various fixes (to coloring and to soft shadows).
commit fbd084a94a067082a87cd6d28b82054709bc9265
Merge: 5a089863b 4fdf6896a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 18:50:38 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/map-colors
commit ed2d0111d994262ae836d84d1fe5a45e4de72a0b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 06:49:27 2020 +0200
Combining colors and LOD.
commit 88342640c6b835114d01c797b89fdede3b0a2108
Merge: 33140a295 5a089863b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:49:20 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 33140a2951b8212725f42c758b277aaec4d888f7
Merge: 4c65a5aed f34d4b379
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:36:21 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 5a089863beb01d4794bbe3580ada47b278715ea2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 03:17:49 2020 +0200
Making maps brighter.
This is probably not the right way to do it, but oh well!
commit 32b2c99109dd486aa922886081068f9c550c83f2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 02:46:36 2020 +0200
Horizon mapping and "layered" map generation.
Horizon mapping is a method of shadow mapping specific to height maps.
It can handle any angle between 0 and 90 degrees from the ground, as
long as know the horizontal direction in advance, by remembering only a
single angle (the "horizon angle" of the shadow map). More is explained
in common/src/msg/server.rs. We also remember the approximate height of
the largest occluder, to try to be able to generate soft shadows and
create a vertical position where the shadows can't go higher.
Additionally, map generation has been reworked. Instead of computing
everything from explicit samples, we pass in sampling functions that
return exactly what the map generator needs. This allows us to cleanly
separate the way we sample things like altitudes and colors from the map
generation process. We exploit this to generate maps *partially* on the
server (with colors and rivers, but not shading). We can then send the
partially completed map to the client, which can combine it with shadow
information to generate the final map. This is useful for two reasons:
first, it makes sure the client can apply shadow information by itself,
and second, it lets us pass the unshaded map for use with level of
detail functionality.
For similar reasons, river generation is split
out into its own layer, but for now we opt to still generate rivers on
the server (since the river wire format is more complicated to compress
and may require some extra work to make sure we have enough precision to
draw rivers well enough for LoD).
Finally, the mostly ad-hoc lighting we were performing has been (mostly)
replaced with explicit Phong reflection shading (including specular
highlights). Regularizing this seems useful and helps clarify the
"meaning" of the various light intensities, and helps us keep a more
physically plausible basis. However, its interaction with soft shadows
is still imperfect, and it's not yet clear to me what we need to do to
turn this into something useful for LoD.
commit f8926a5737ddc51f3d585c651a64c43677aae0f4
Merge: a1aee931e 875ae6ced
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Mar 13 13:32:42 2020 +0100
Merge remote-tracking branch 'origin/master' into sharp/map-colors
commit 4c65a5aed353b119aea65a2aaeb94549b67beb42
Author: Treeco <5021038-Treeco@users.noreply.gitlab.com>
Date: Mon Feb 24 16:48:05 2020 +0000
Made LOD setting slider exponential
commit 2fa7b2d20d7233dc8bfd64f9f7f54617575248f1
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 17:49:53 2020 +0000
Added mist to LoD
commit aab059a450b5f635777129ff82cc15b662965c3c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 15:14:06 2020 +0000
Added LoD slider
commit 779c36b538121c5ade3633ae5cb67bb14c8c3877
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:54:55 2020 +0000
Reduced cost of vertex pushing
commit 9fea150473906b166365b738ebcea07c697daf3d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:38:53 2020 +0000
Fixed maths, improved LoD resolution
commit 5481df38fea5bf183ff376a3337179cfaa5233dc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 11:22:50 2020 +0000
Dynamically relocate LoD vertices to enhance details
commit a3e36a50ababd615da7db1b26158c7906a5def01
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 18:13:51 2020 +0000
Simpler terrain spiral rendering
commit 255f450ae9ac8763db4bede075fb409161ed57cc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:53:17 2020 +0000
Better LoD precision
commit 3d027aebe812a5b8658a4eb8123dc9f61b3776d2
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:04:03 2020 +0000
Better falloff
commit be775c9484b457b2c0b1a494aec03392d0c70e76
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 15:30:45 2020 +0000
Applied good ideas from experimental branch
commit 58587b68545a23c5c04ab4574a4b94b3bc982246
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 16:15:13 2020 +0000
Minor fixes to LoD merging
commit 7b42aebd709c14df2db766aad61d9280ad24d84d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 15:04:44 2020 +0000
Capped LoD dragging
commit 8aafc559f87124e1ea5ca6e3ddc2aa0c242d793c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:54:37 2020 +0000
Better blending between LoD and terrain border
commit edd3455d5161792d87ddc8eadc0ecbad5532b284
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:40:19 2020 +0000
Fixed LoD z depth, added sea level offset
commit b9b06744620114dd5556e73f64fa93c145503a7c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:27:43 2020 +0000
Better LoD smoothing
commit a1aee931e790431560cd2d953ad61d9497072afd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Feb 21 14:52:17 2020 +0100
Adding shadows.
commit 2400786c13dd891c131ed86d48d05df516a8a778
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 13:48:40 2020 +0000
Use world map as LoD source
commit dbf650f504a4c25fbbc2096ac3616c736bf52d23
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Jan 20 00:48:14 2020 +0000
Better clouds at distance
commit 5e6f81b86cdb9730b9b056877b19257075fd5fa8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Jan 19 23:59:02 2020 +0000
sync
commit 745e7540ddb000cc645f612767b337c2ddc3f7c0
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 12:40:48 2019 +0000
Improved cloud falloff mist, faster noise sampling
commit f6a200d0cb866196ba57697466755f9e0c7ea5d8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 10:09:00 2019 +0000
Improved long-range depth precision, removed unnecessary LoD polygons
commit 63d1b2bb2292898d59fb4f4e502201103dfeb86f
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 20:57:46 2019 +0000
Working LoD shader
commit f13d98ee3e58f881e8b978861a67663b59ed91ec
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 11:03:40 2019 +0000
LoD first attempt (stack overflow issue)
2020-08-20 18:34:59 +00:00
|
|
|
|
/// Default base two logarithm of the world size, in chunks, per dimension.
|
|
|
|
|
///
|
|
|
|
|
/// Currently, our default map dimensions are 2^10 × 2^10 chunks,
|
|
|
|
|
/// mostly for historical reasons. It is likely that we will increase this
|
|
|
|
|
/// default at some point.
|
|
|
|
|
const DEFAULT_WORLD_CHUNKS_LG: MapSizeLg =
|
|
|
|
|
if let Ok(map_size_lg) = MapSizeLg::new(Vec2 { x: 10, y: 10 }) {
|
|
|
|
|
map_size_lg
|
|
|
|
|
} else {
|
|
|
|
|
panic!("Default world chunk size does not satisfy required invariants.");
|
|
|
|
|
};
|
2019-05-18 08:59:58 +00:00
|
|
|
|
|
2020-02-01 20:39:39 +00:00
|
|
|
|
/// A structure that holds cached noise values and cumulative distribution
|
|
|
|
|
/// functions for the input that led to those values. See the definition of
|
|
|
|
|
/// InverseCdf for a description of how to interpret the types of its fields.
|
2019-08-21 18:41:32 +00:00
|
|
|
|
struct GenCdf {
|
|
|
|
|
humid_base: InverseCdf,
|
|
|
|
|
temp_base: InverseCdf,
|
2019-08-22 19:03:42 +00:00
|
|
|
|
chaos: InverseCdf,
|
2019-12-03 18:14:29 +00:00
|
|
|
|
alt: Box<[Alt]>,
|
|
|
|
|
basement: Box<[Alt]>,
|
2019-10-16 11:39:41 +00:00
|
|
|
|
water_alt: Box<[f32]>,
|
|
|
|
|
dh: Box<[isize]>,
|
2020-02-01 20:39:39 +00:00
|
|
|
|
/// NOTE: Until we hit 4096 × 4096, this should suffice since integers with
|
|
|
|
|
/// an absolute value under 2^24 can be exactly represented in an f32.
|
2020-01-11 21:05:22 +00:00
|
|
|
|
flux: Box<[Compute]>,
|
|
|
|
|
pure_flux: InverseCdf<Compute>,
|
2019-10-16 11:39:41 +00:00
|
|
|
|
alt_no_water: InverseCdf,
|
|
|
|
|
rivers: Box<[RiverData]>,
|
2019-08-21 18:41:32 +00:00
|
|
|
|
}
|
|
|
|
|
|
2019-11-11 17:14:58 +00:00
|
|
|
|
pub(crate) struct GenCtx {
|
2019-06-21 00:53:11 +00:00
|
|
|
|
pub turb_x_nz: SuperSimplex,
|
|
|
|
|
pub turb_y_nz: SuperSimplex,
|
2019-06-06 14:52:29 +00:00
|
|
|
|
pub chaos_nz: RidgedMulti,
|
2020-01-24 02:45:29 +00:00
|
|
|
|
pub alt_nz: util::HybridMulti,
|
2019-06-06 14:52:29 +00:00
|
|
|
|
pub hill_nz: SuperSimplex,
|
2019-11-06 11:19:50 +00:00
|
|
|
|
pub temp_nz: Fbm,
|
2019-08-18 16:35:27 +00:00
|
|
|
|
// Humidity noise
|
2019-08-22 21:25:17 +00:00
|
|
|
|
pub humid_nz: Billow,
|
2019-08-19 17:20:54 +00:00
|
|
|
|
// Small amounts of noise for simulating rough terrain.
|
2019-06-06 14:52:29 +00:00
|
|
|
|
pub small_nz: BasicMulti,
|
|
|
|
|
pub rock_nz: HybridMulti,
|
2019-06-10 14:22:59 +00:00
|
|
|
|
pub cliff_nz: HybridMulti,
|
2019-08-23 23:25:01 +00:00
|
|
|
|
pub warp_nz: FastNoise,
|
2019-06-06 14:52:29 +00:00
|
|
|
|
pub tree_nz: BasicMulti,
|
|
|
|
|
|
|
|
|
|
pub cave_0_nz: SuperSimplex,
|
|
|
|
|
pub cave_1_nz: SuperSimplex,
|
2019-06-09 10:24:18 +00:00
|
|
|
|
|
2019-07-09 23:51:54 +00:00
|
|
|
|
pub structure_gen: StructureGen2d,
|
|
|
|
|
pub region_gen: StructureGen2d,
|
2019-06-21 00:53:11 +00:00
|
|
|
|
pub cliff_gen: StructureGen2d,
|
2019-08-23 23:25:01 +00:00
|
|
|
|
|
|
|
|
|
pub fast_turb_x_nz: FastNoise,
|
|
|
|
|
pub fast_turb_y_nz: FastNoise,
|
2019-08-24 13:23:42 +00:00
|
|
|
|
|
|
|
|
|
pub town_gen: StructureGen2d,
|
2019-11-22 02:55:19 +00:00
|
|
|
|
pub river_seed: RandomField,
|
2020-01-11 20:38:30 +00:00
|
|
|
|
pub rock_strength_nz: Fbm,
|
2019-11-25 03:47:33 +00:00
|
|
|
|
pub uplift_nz: Worley,
|
2019-05-29 13:49:27 +00:00
|
|
|
|
}
|
|
|
|
|
|
2020-01-18 18:41:37 +00:00
|
|
|
|
#[derive(Clone, Debug, Deserialize, Serialize)]
|
2019-12-11 09:14:50 +00:00
|
|
|
|
pub enum FileOpts {
|
2020-02-01 20:39:39 +00:00
|
|
|
|
/// If set, generate the world map and do not try to save to or load from
|
|
|
|
|
/// file (default).
|
2019-12-11 09:14:50 +00:00
|
|
|
|
Generate,
|
|
|
|
|
/// If set, generate the world map and save the world file (path is created
|
|
|
|
|
/// the same way screenshot paths are).
|
|
|
|
|
Save,
|
2020-01-18 18:41:37 +00:00
|
|
|
|
/// If set, load the world file from this path in legacy format (errors if
|
2020-02-01 20:39:39 +00:00
|
|
|
|
/// path not found). This option may be removed at some point, since it
|
|
|
|
|
/// only applies to maps generated before map saving was merged into
|
|
|
|
|
/// master.
|
2020-01-18 18:41:37 +00:00
|
|
|
|
LoadLegacy(PathBuf),
|
2019-12-11 09:14:50 +00:00
|
|
|
|
/// If set, load the world file from this path (errors if path not found).
|
|
|
|
|
Load(PathBuf),
|
2020-02-01 20:39:39 +00:00
|
|
|
|
/// If set, look for the world file at this asset specifier (errors if
|
|
|
|
|
/// asset is not found).
|
2020-01-18 18:41:37 +00:00
|
|
|
|
///
|
2020-02-01 20:39:39 +00:00
|
|
|
|
/// NOTE: Could stand to merge this with `Load` and construct an enum that
|
|
|
|
|
/// can handle either a PathBuf or an asset specifier, at some point.
|
2020-01-18 18:41:37 +00:00
|
|
|
|
LoadAsset(String),
|
2019-12-11 09:14:50 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
impl Default for FileOpts {
|
2020-02-01 20:39:39 +00:00
|
|
|
|
fn default() -> Self { Self::Generate }
|
2019-12-11 09:14:50 +00:00
|
|
|
|
}
|
|
|
|
|
|
2019-12-03 01:07:44 +00:00
|
|
|
|
pub struct WorldOpts {
|
|
|
|
|
/// Set to false to disable seeding elements during worldgen.
|
|
|
|
|
pub seed_elements: bool,
|
2019-12-11 09:14:50 +00:00
|
|
|
|
pub world_file: FileOpts,
|
2019-12-03 01:07:44 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
impl Default for WorldOpts {
|
|
|
|
|
fn default() -> Self {
|
|
|
|
|
Self {
|
|
|
|
|
seed_elements: true,
|
2019-12-11 09:14:50 +00:00
|
|
|
|
world_file: Default::default(),
|
2019-12-03 01:07:44 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2020-01-18 18:41:37 +00:00
|
|
|
|
/// LEGACY: Remove when people stop caring.
|
|
|
|
|
#[derive(Serialize, Deserialize)]
|
|
|
|
|
#[repr(C)]
|
|
|
|
|
pub struct WorldFileLegacy {
|
|
|
|
|
/// Saved altitude height map.
|
|
|
|
|
pub alt: Box<[Alt]>,
|
|
|
|
|
/// Saved basement height map.
|
|
|
|
|
pub basement: Box<[Alt]>,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// Version of the world map intended for use in Veloren 0.5.0.
|
2020-01-11 20:38:30 +00:00
|
|
|
|
#[derive(Serialize, Deserialize)]
|
2020-01-18 18:41:37 +00:00
|
|
|
|
#[repr(C)]
|
|
|
|
|
pub struct WorldMap_0_5_0 {
|
2019-12-11 09:14:50 +00:00
|
|
|
|
/// Saved altitude height map.
|
|
|
|
|
pub alt: Box<[Alt]>,
|
|
|
|
|
/// Saved basement height map.
|
|
|
|
|
pub basement: Box<[Alt]>,
|
|
|
|
|
}
|
|
|
|
|
|
(See sharp/lod-history) LOD, shadows, greedy meshing, new lighting, perf
---
Pretty much a Veloren fork at this point. Here's a high level overview of the changes (will be added to CHANGELOG just before merge).
At a high level this MR incorporates roughly two groups of changes.
The first group consists of new game features: more flexible map sizes, level of detail terrain, shadow maps, and a new lighting
engine. This is "feature work" that (mostly) only adds new things to Veloren, and mostly shouldn't affect old stuff.
The second big group of changes are those addressing the fallout from all the new features. These include performance fixes of
various sorts: the addition of multiple graphics options and optimization of the cheap ones to avoid work, switching all voxel
models to use some variant of greedy meshing, switching over much of our CPU-side vector math to exploit SIMD instructions
(coinciding with a fork of `vek`), and a rewrite of how the UI handles text rendering (coinciding with updates to our fork
of `conrod`). Making Veloren's hardcoded colors appear correct under the new lighting engine also required considerably
changes (TODO: Fill in this section when it's complete).
The second category of changes often heavily touches code owned by other people, including frequently modified code "owned" by a
handful of people, so I recommend that this code be reviewed particularly carefully.
---
At a high level (each will be described in more detail below):
- The world map has been refactored.
- The world size is no longer hardcoded (@zesterer).
- The map generation code was made generic to allow using it outside of the `world` crate (@zesterer).
- On world creation, we now compute *horizon maps* (@zesterer).
- The way we pass the world from the server to the client has been updated (@xMAC94x).
- Artifacts related to image rotation were fixed (@imbris).
- Multiflow rivers were enabled (@zesterer).
- In the process of making changes related to the world map, various incidental fixes and optimizations were required.
- The new *level of detail* feature was added (@zesterer wrote part of this and has checked out the rest).
- A new LOD terrain rendering step was added to the pipeline.
- The LOD terrain quality was made configurable via a graphics setting.
- Horizon maps were used to cast shadows from LOD chunks on both LOD and non-LOD terrain.
- A "voxelization" effect was incorporated into rendered LOD terrain to make it blend better into the world.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Veloren's lighting has been completely overhauled (@zesterer has already checked most of this out).
- A semi-accurate index of refraction was assigned to our materials.
- A new, more realistic, physically based approach to lighting was used using the *Ashikhmin Shirley* BRDF.
- We emulate *atmospheric scattering* using equations designed for measuring solar panel light exposure.
- We attempt to compute *realistic light attenuation* in water using its real material properties.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Point and directional lights now cast realistic shadows, using *shadow mapping.* (@imbris, @zesterer, @Treeco, @YuriMomo)
- Point light shadow maps were added to the rendering pipeline, using geometry shaders and *seamless cube maps*.
- Directional light shadows were added to the rendering pipeline, using LISPSM together with disabling *depth clamping*.
- "Shadow-only" chunks and NPCs were added to prevent shadows from models behind you from disappearing.
- In the process of making changes related to shadow maps, various incidental fixes and optimizations were required.
The addition of shadow maps, LOD terrain, and the new lighting all led to significant performance degradation, on top of other
changes happening in master. Therefore, a large number of performance improvements were also needed:
- The graphics options were made much more flexible and configurable, and shaders were optimize.
- New options were provided for how to render lights and shadows (@Pfauenauge, @zesterer).
- Graphic setting storage and configuration were overhauled to make adding new features easier (@Pfauenauge, @imbris).
- Shaders were rewritten to utilize GLSL's preprocessor to avoid overhead (@zesterer, @YuriMomo).
- In the process of making changes related to providing additional rendering options, various incidental fixes and optimizations were required.
- Voxel model creation was switched to use *greedy meshing.*
- A new voxel meshing method, greedy meshing, was added (@imbris).
- Uses of the older meshing methods were migrated to use greedy meshing (@imbris, @jshipsey, @Pfauenauge).
- New restrictions were added to terrain, figure, and sprites to future proof them for further optimizations (@jshipsey, @Pfauenauge, @zesterer).
- Most positions are now relative to either chunk or player position for better precision (@imbris, @zesterer, @scottc).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- Animation and terrain math were switched to use SIMD where possible.
- Fixes were made to vek to make its SIMD feature usable for us (@zesterer, @imbris).
- The interface and types used in bone animation were changed in various ways (@jshipsey, @Snowram, @Pfauenauge).
- Redundant code generation for body animation is now partly taken care of by a macro (@jshipsey, @Snowram, @Pfauenauge).
- Animation code was modified to to use vek's SIMD representation where possible (@jshipsey, @Snowram, @Pfauenauge).
- Terrain meshing code and shadow map math were also modified to use vek's SIMD representation (@imbris).
- SIMD instruction generation was enabled (@YuriMomo, @jshipsey, @Snowram, @imbris, @Angelonfira, @xMAC94x).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- The way we cache glyphs was completely refactored, fixed, and optimized.
- Our fork of `conrod` was optimized in various ways (@imbris).
- Our fork of `conrod` now exposes whether a widget was updated during the current frame (@imbris).
- Our use of the glyph cache was rewritten for correctness (@imbris).
- A *text cache* was introduced that lets us skip remeshing glyphs that have not changed (@imbris).
- Various changes were made to reduce pressure on the glyph cache, with more planned (@imbris, @Pfauenauge).
- In the process of making changes related to the glyph cache, various incidental fixes and optimizations were required.
- Colors were changed to keep Veloren's look consistent with master.
- Some older tree models were brought back (@Pfauenauge).
- TODO(@Sharp): All hardcoded colors were extracted and made hotloadable.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Hardcoded colors were fixed to conform to Veloren's style.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Color models were fixed to conform to Veloren's style.
A detailed description of the involved changes follows.
---
- The world size is no longer hardcoded. All functions dependent on world size now take a `WorldSizeLg`, which holds the base 2 logarithm of each actual world dimension and is guaranteed to maintain certain properties (outlined in `common/src/terrain/map.rs`). Additionally, many utility functions that utilize the world size were moved into `common` as well (mostly `common/src/terrain/mod.rs`). Finally, the world map format was updated in order to store its size explicitly, with a migration path from the old format that should work whenever the old formatted map was a square (practically always). See `world/src/sim/mod.rs` for these changes.
- The map generation code was made generic to allow using it outside of the `world` crate. The parts of the map generating code that do not need to query the world were moved over to `common/src/terrain/map.rs`, allowing them to be used from the client without creating a dependency on `world`. The rest of it was turned into helper functions in `world/src/sim/map.rs`, which can be passed as closures to the generic map generation code to complete its construction. This also means that colors are now passed in separately to the map generation function. See <https://veloren.net/devblog-78/> for more details.
- On world creation, we now compute *horizon maps*. See the function in `world/src/sim/util.rs`.
Given a height map and a plane intersecting that height map, our horizon maps allow us to encode enough information to reconstruct shadows for each point on the height map using only the *horizon angle* (the angle at which the sun starts to become visible). As Veloren's sun only covers one plane, this is sufficient for encoding sun shadows for LOD terrain, by encoding two angles per chunk (one for each 90 degrees the sun covers). We can also use this for the moon, if we want, since the moon follows the same path. Additionally, we store the *height* of the furthest occluder, to try to make the shadows volumetric; so this means 4 bytes in total for each chunk.
Support for horizon maps has been merged into the map functionality in common as well.
- The way we pass the world from the server to the client has been updated. Rather than passing the prerendered map, we instead pass three maps with values for each chunk; one with the color information, a second with altitude information, and a third with horizon map information. We then reconstruct the map on the client, together with some additional information we send from the server (like the sea level and maximum height). See `common/src/msg/server.rs` for a detailed description of the format of `WorldMapMsg`, and `server/src/libr.rs` and `client/src/lib.rs` for details of the map construction and parsing.
- Artifacts related to image rotation were fixed. See the commit message for commit SHA `cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e` for a detailed explanation. This involved changes to shaders, the addition of a new type of graphic (also reflected in the graphic cache) that allows specifying a border color (which automatically makes the associated texture immutable), and some related fixes. I reproduce the first two paragraphs of the MR description as well:
```
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
```
- Multiflow rivers were enabled.
This does not really need to be part of this MR, and would be easy to revert, but since it seemed to provide a nice improvement it's currently packaged with it.
We already computed multiple outflows from each chunk for erosion purposes long before this MR.
However, we never modified river rendering to be able to handle this case (just a single downhill river flow is complex enough!) so this was not exposed when deciding which chunks were rivers.
Now that
- In the process of making changes related to the world map, various incidental fixes and optimizations were required. Some examples of fixes include making sure terrain is never lowered to below sea level (to make the shadow maps report correct values), fixing map altitudes and colors to understand things like cliffs and "block level" coloring (that doesn'te xist on the column level), and fixing a crashbug when rendering images for the UI where source pixels are strongly rectangular. Some examples of related performance fixes include avoiding allocating a fresh vector for all the maps (i.e. copying it over to change the format from `[u32; n]` to `DynamicImage` and then copying again to convert to `RgbaImage`), and instead using the `gfx::memory::slice` function to accomplish the same thing. These sorts of changes are spread all arond the code.
This includes the additon of a new scene, `voxygen/src/scene/lod.rs`, a new pipeline `voxygen/src/render/pipeline/lod_terrain.rs`, and new shaders `assets/vxygen/shaders/lod-terrain-vert.glsl` and `assets/vxygen/shaders/lod-terrain-frag.glsl`, as well as associated changes to the renderer in `voxygen/src/render/renderer.rs`.
The main idea behind our initial approach to LOD was to take the world data we now get from the server (altitude, color, and horizon mapping).
- Some previously computed values were turned into shader uniforms for better prediction on weak processors. (@zesterer)
- Calls to power or trig functions were removed or replaced with multiplications, where possible.
- After some deliberation
- To properly handle sprite "waving" for nearby sprites,
We explicitly designed the greedy meshing system with figures and sprites in mind.
In both cases, we want to be able to *efficiently* pack many different models into the same texture, especially in cases where we know
we will either not be removing any of the grouped-together from the models from the texture, or will remove all of them at once (so
they can be packed into some specific subtexture).
For sprites, since we know every model in advance and never intend to deallocate them, we currently pack them all as efficiently as
possible into one giant tetxure atlas. However, in the future we might opt to pack them slightly less efficiently in exchange for
shrinking the sprite vertex size.
For figures, we pack all the textures for each *model* into the same atlas.
is a global texture atlas used for every sprite, and for figures which is why we have the ability to mesh multiple
models to the same texture area (using the simple texture atlas allocator) without requiring intermediate vector allocations.
This is accomplished by delaying the time when we actually write the color and light data to the texture until *after* all the
model vertices have been meshed; then, we can just allocate the whole color/light array at once, making the atlas we use an
exact fit. In computer science-y terms, we accomplish this delay by, after we perform the initial greedy meshing (without
texture information), not continuing to create the texture data, but instead constructing a *continuation*--that is, a function
that, when called, will execute the rest of the computation. We push this continuation (which in Rust terms is a `FnOnce` closure
that takes the `ColLightsInfo` that it is supposed to write to as context) onto a
onto a vector
resizing. To allow for suspended writes to texture data, Rust pointed out to me that the continuation that would eventually write the color and light data to the texture atlas (the one that is shared by all models sharing the same greedy mesher) would have to *own* whatever data it mshed. Because we often generate the model data to mesh as a temporary in `voxygen/src/load.rs`, the
- Matrix multiplications in the shader were reduced for figure data (@zesterer).
- Vertex "waves" for fluid data were removed.
- Terrain "bending" near edges was removed.
- Scaling was fixed to make sure empty space was not introduced in a space previously occupied by a block. It was also changed to take ownership of its voxel data,
rather than sharing it, to let it be used with meshing.
- Rust's nightly version was bumped in order to use the `array_map` function, which lets us reuse more code between the simple map and `FigureModelCache`.
- PositionedGlyph::standalone.
---
I tried to cite sources in many cases[^realtime],[^lloyd],[^lispsm],[^pbrt],[^greedy],[^tjunctions]
where I needed features from elsewhere but I am particularly grateful for the following resources,
esepcially where they have accompanying source code. I linked all of them that are accessible to the public (those that are not were
obtained through legal means).
[^realtime]: Eisemann, Elmar, Michael Schwarz, Ulf Assarsson, Michael Wimmer. Real-Time Shadows. A K Peters/CRC Press (T&F), 20160419.
[^lloyd]: Lloyd,B. 2007. [Logarithmic perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). PhD thesis, University of North Carolina.
[^lispsm]: Wimmer, M., Scherzer, D., and Purgathofer, W. 2004. [Light space perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). In Proceedings of Eurographics Symposium on Rendering 2004, pp. 143– 152.
[^pbrt]: Pharr, Matt, et al. [http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf](Physically Based Rendering: From Theory to Implementation). Third edition, Morgan Kaufmann Publishers/Elsevier, 2017.
[^greedy]: mikolalysenko. “Meshing in a Minecraft Game.” 0 FPS, 30 June 2012, <https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/>.
[^tjunctions]: blackflux. “Meshing in Voxel Engines – Part 1.” Blackflux.Com, 23 Feb. 2014, <https://blackflux.wordpress.com/2014/02/23/meshing-in-voxel-engines-part-1/>.
I am also especially grateful to Khronos, Wikiepdia, and stackoverflow for answering many of my specific questions while writing the MR.
---
Squashed commit of the following:
commit 300505e7305a2fdac722a808ee8538323f215f39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 18:46:25 2020 +0200
Fixing cargo doc and typo in CHANGELOG.
commit ec0aeb18e8499d7d84ef818331b4b65c3d76cea6
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 15:38:50 2020 +0200
Hopefully final commit for the LOD branch.
commit 5e8ea0b1eaac02903a02feb2eb038d195de4872f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 10:14:26 2020 +0200
Falling back to power as stopgap.
commit e44a1cbf46504ee9931a01bdc9033e145500d557
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 09:25:41 2020 +0200
Address imbris feedback.
Temporarily disables shiny water, lowers max VD.
These restrictions will be lifted soon after merging.
commit 561e25778a108ac3712f5ec2ce3a51234c4430d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 08:31:13 2020 +0200
Tweaking shaders a bit.
commit 7d19259078ce0dd7b3742ad7d0cb3fab3ece3fdc
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:59:43 2020 +0200
Fix view example as well.
commit 051cd4934e0fad2c0b15db4380a4189fa318679f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:29:06 2020 +0200
Fix meshing benchmark.
commit c95e07db3b4dcca285678985e65e31b927cb1c61
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 05:46:22 2020 +0200
Address MR feedback, fix scene clouds.
commit 1bfb816cabdb3ffc1e507a009c2d98696b4b573a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:39:36 2020 +0200
Incorporating Pfau's figure color changes.
New eyes and new humanoid colors.
commit 3f9b89a3ac7b3356b1dba0d1a8f6541357f81469
Merge: e2f5162e4 62c53963a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:29:41 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit e2f5162e4f96f4124aa43488f7245d341b3dcfd4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:28:38 2020 +0200
World colors are all hotloadable.
They live in assets/world/style/colors.ron.
Only a small handful of hardcoed colors remain in World; they are either
part of the map, or difficult to disentangle from the rest of the
computation. Comments are made where appropriate.
commit 62c53963abe1975009d34a8f9515a355bef24f31
Author: Marcel Märtens <marcel.cochem@googlemail.com>
Date: Wed Aug 19 15:59:00 2020 +0200
replace pretty_env_logger with tracing
commit 5b1625f99d9586fe80e2232f583ec5af9f953099
Merge: d71003acd 4942b5b39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:15:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit d71003acdabeff970b3928e97c26af6847b5b78e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:14:34 2020 +0200
Hotloading colors, part 1: colors in common.
Currently, this just entails humanoid colors. There are only three
colors not handled; the light emitter colors in
common/src/comp/inventory/item/tool.rs. These don't seem important
enough to me to warrant making hotloadable, at least not right now, but
if it's needed later we can always add them to the file.
commit 63b5e0e553eb2ea49276f192a6fc7dd65254270d
Merge: c32b337a4 6d2c4b9c1
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 13:05:37 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c32b337a46e10d9de473d178a94a3ccd61c39bb3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:52:04 2020 +0200
Fixing LOD grid, for real.
commit a166ae0360395387e09fb35a1f84210c2ce5ec24
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:28:05 2020 +0200
Addressing imbris's initial feedback.
Fixes two minor bugs: explosion particles were no longer spawning
randomly, and LOD grids were not perfectly even.
commit 4cbad004f44060994252dd3d38647a14a589712f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:27:58 2020 +0200
Bumping nightly per request.
commit 548680276aac77c25d43d16b5622f847d474dbef
Merge: acc098604 8f8b20c91
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:26:06 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit acc0986040589a3492f88a740bc3c3fc693b26d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:28:32 2020 +0200
Lower resolution due to lying drivers.
commit d3b878de2a52c358d2944a6bbd0555dad7fbdb10
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:15:38 2020 +0200
Fix issues msh encountered with Intel 4600.
commit 10245e0c1b0cb6fae10d86409435364edc6102ef
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 21:15:02 2020 +0200
Merge more models into one mesh than we did previously.
commit 3155c31e663c52ae5c3a53d5fb5665892a1a498a
Merge: 7204cc8a7 3c199280e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:35:22 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7204cc8a7a4f74a30306bd205d9834fee4bb944f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:34:43 2020 +0200
Fix not yet done NPC animations.
This forces them all to be the idle animation if not specified.
This fixes issues where you'd have giant NPCs in water.
commit bc83360f2a08918f19d417b5f772e1ff554dba08
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 19:36:37 2020 +0200
Try to fix some bugs:
- Z fighting with LOD terrain and water.
- Audio SFX not playing.
commit 1fd104aa603bf3781b6526a5cada46aeca3049dd
Merge: 862df3c99 7c2c392a3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 12:02:31 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 862df3c9976c4da9bd7cfd784f1a85973127968a
Merge: 0a4218ed9 75c1d4401
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 05:52:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0a4218ed9d541a2b34c133351bea38a99ddf4ea7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 22:27:14 2020 +0200
Fix particle depth.
commit f51dfdeb442d0dd5243dd2f344fa4be295bd0875
Merge: c6251a956 5e6dc0471
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:19:04 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit c6251a956ad376400dca5c23420cf8d213dc8fdf
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:15:46 2020 +0200
Cache figures more intelligently.
Cache figures for longer, and don't cache character states for the
player except where they actually affect the rendered model.
commit 0ed801d5404982c6fb63b1eaa4567d908b294c9d
Merge: c11b9bdf0 eea64f78f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 16:32:24 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c11b9bdf0a53bf9884d2f5a48fec9b01d582df1a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 11:47:15 2020 +0200
Remove unneeded Clippy annotation.
commit 16aa9ef40af56d69289d00aafb3deadfb8bd4f35
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 8 00:53:02 2020 +0200
Fix hotloading and Clippy.
commit 3dc973e0be5b758da1e9805eb764ad401374cd0c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 23:50:27 2020 +0200
Major speedups with SIMD.
commit fba64a7d93d5a96077ce87287bbce6ab9b7fbcae
Merge: 76429d00e d1e10b178
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:19 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 76429d00eea00d212fbd672a84ee91e75b19b938
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:10 2020 +0200
Add clippy.toml.
commit c79f512f84dbb83cb82b7954db68ff241dfd8e41
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 11:55:20 2020 +0200
Fix all clippy issues, clean up Rust code.
commit 6f90e010b3fbefb53b0d632e819931350015b6b8
Merge: 77a8c7c26 5929cfa5c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:30 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 77a8c7c267d3f44a1a62bd6b2274359973c5e4d4
Merge: b44e44232 44febaabd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:10 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 5929cfa5c713aa392110bbb62407f76caf53c3df
Author: jshipsey <jshipsey18@gmail.com>
Date: Thu Aug 6 20:47:27 2020 -0400
fixed in-hand arrow bug
commit b44e442325d828f1cd564d66908f89d09e80474b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 6 13:40:35 2020 +0200
Miscellaneous performance improvements.
commit be37acf287c1360d8085862526ac3365ffd1d768
Merge: 125d7fc6c c11876547
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 05:49:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 125d7fc6c4dcd8c8c5f27b8268a4d64f409f3644
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 04:55:31 2020 +0200
Abstract over simd vs. repr_c vectors.
Also some minor improvements to Event size.
commit d4d4956e9252e1241ce110b2aa85076c6b1e2a23
Merge: 5f3b7294a aced5f979
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:56:54 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 5f3b7294af1f8533edc2620b58863c248e2b07af
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:43:52 2020 +0200
Fix formatting issues I missed before.
commit a428a3ebba70dcab63dd0f8cd983120c90617271
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:41:51 2020 +0200
Fix clippy warnings, part 1.
There aer still a bunch of type too complex and
function takes too many arguments warnings that I'll fix later
(or ignore, since in the one case I did fix a function takes too
many arguments warning I think it made the code *less* readable).
commit ba54307540ed8a937ac08209730284fc653af85b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 30 13:22:42 2020 +0200
Fix light animations so they are removed when the light turns off.
commit 7e0f4bcbf0f4717145d8beac40d52e3acebbe2aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 21:10:20 2020 +0200
Fix crash in edge case for pixel art.
commit 56da06f7a351e2b949e9b014a90b974d511a0924
Merge: cf74d55f2 9f53a4a19
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:56:52 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:29:52 2020 +0200
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
The first concern was addressed by fixing the dimensions of the map
images drawn from the UI (so that we always use a square source
rectangle, rather than a rectangular one according to the dimensions of
the map). We also fixed the way rotation was done in the fragment
shader for north-facing sources to make it properly handle aspect ratio
(this was already done for north-facing targets). Together, these fix
rendering issues peculiar to rectangular maps.
The second and third concerns were jointly addressed by adding an
optional border color to every 2D image drawn by the UI. This turns
out not to waste extra space even though we hold a full f32 color
(to avoid an extra dependency on gfx's PackedColor), since voxel
images already take up more space than Optiion<[f32; 4]> requires.
This is then implemented automatically using the "border color"
wrapping method in the attached sampler.
Since this is implemented in graphics hardware, it only works (at
least naively) if the actual image bounds match the texture bounds.
Therefore, we altered the way the graphics cache stores images
with a border color to guarantee that they are always in their own
texture, whose size exactly matches their extent. Since the easiest
currently exposed way to set a border color is to do so for an
immutable texture, we went a bit further and added a new "immutable"
texture storage type used for these cases; currently, it is always
and automatically used only when there is a specified border color,
but in theory there's no reason we couldn't provide immutable-only
images that use the default wrapping mdoe (though clamp to border
is admittedly not a great default).
To fix the maps case specifically, we set the border color to a
translucent version of the ocean border color. This may need
tweaking going forward, which shouldn't be hard.
As part of this process, we had to modify graphics replacement to
make sure immutable images are *removed* when invalidated, rather
than just having a validity flag unset (this is normally done by
the UI to try to reuse allocations in place if images are updated
in benign ways, since the texture atlases used for Ui do not
support deallocation; currently this is only used for item images,
so there should be no overlap with immutable image replacement,
so this was purely precautionary).
Since we were already touching the relevant code, we also updated
the image dependency to a newer version that provides more ways
to avoid allocations, and made a few other changes that should
hopefully eliminate redundant most of the intermediate buffer
allocations we were performing for what should be zero-cost
conversions. This may slightly improve performance in some
cases.
commit ad18ce939940a8c697270f6e9b94db9942fd8295
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 13:21:09 2020 +0200
Fix continent scale hack.
commit 36b1cb074f5b195aebd7dbbc3da7f0246a1a18ec
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 12:11:40 2020 +0200
Enable loading different sized maps without a recompile.
We may want to tweak the effects of the continent_scale_hack.
commit 13b6d4d534cc4814b7cb3294ca41bbfea0a6b186
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 10:55:48 2020 +0200
Removing WORLD_SIZE, part 1.
Erased almost every instance of WORLD_SIZE and replaced it with a local
power of two, map_size_lg (which respects certain invariants; see
common/src/terrain/map.rs for more details about MapSizeLg). This also
means we can avoid a dependency on the world crate from client, as
desired.
Now that the rest of the code is not expecting a fixed WORLD_SIZE, the
next step is to arrange for maps to store their world size, and to use
that world size as a basis prior to loading the map (as well, probably,
as prior to configuring some of the noise functions).
commit 30b1d2c6428230a9eaa0d749cdcbbd6f1cbccd78
Merge: 7d56ba31b 1377b369f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:58 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 7d56ba31b445441461b28a07fc495d7d4f047c17
Merge: 2101113b4 598f14b25
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 1377b369f6db2258e910d467a5740f31789e3ded
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sun Jul 19 23:25:38 2020 +0200
more saturated pumpkins
commit ae8d50527f93bb0616c2ad46ce4dacb63bc37c6d
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sat Jul 18 20:29:56 2020 +0200
acacia models
commit 2101113b467e691de787392d7f20f1745f5637bd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 18 18:55:25 2020 +0200
Higher detail LOD.
commit add2cfae04b4385fa5590e11e2bd5229d9dee0aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 16 01:57:39 2020 +0200
Revert some irrelevant stuff.
commit 2e2ab3dc1eaa59a4aef7f8d34a53d8aae4c8553a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 15 13:30:49 2020 +0200
Fixing various things about shadows.
* Correcting optimal LISPSM parameter.
* Figure shadows are cast when they're not visible.
* Chunk shadows stay cast until you look away.
* Seamless cubemaps for point lights.
* Etc.
commit 6c31e6b56217274285b597af297036691ea5d897
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 19:50:26 2020 +0200
Fix shadow creation.
commit 6332cbe006115ae205597529cd8bbccd146c2cca
Merge: be438657c 930e0028b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:47:00 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit be438657c33d7b5bfb0a9582c3ed3fd366637323
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:28:08 2020 +0200
Tweaks to shadows.
Added shadow map resolution configuration, added seamless cubemaps,
documented all existing rendering options, and fixed a few Clippy
errors.
commit 23b4058906013c7d2a40c286e20e32c5fbd897ed
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 10:11:19 2020 +0200
Fix moon, use nonlinear noise for terrain.
Note that the latter has a bit of performance cost.
commit 7fbe5cbfbb9dc29607957b8e62f432a4deed193d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:23:02 2020 +0200
Address lies about max texture size.
commit bcfc62b5e13a1cdd83f57535fde4694720bebfd9
Merge: 75e3626a7 18a08e8fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:22:08 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 75e3626a785919f43fdcf2127c2b10e3e4df2f9f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:21:52 2020 +0200
OpenGL 3.3 minimum.
commit 18a08e8fe2739f02af99a5d2cb4e7c38c49e858b
Author: Monty Marz <m.marzouq@gmx.de>
Date: Tue Jul 7 23:57:52 2020 +0200
settings localization
commit 90c5d1ca3620092bc3ae10b2211489eb1cf6f5e8
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 21:11:48 2020 +0200
Lower near distance.
commit 0e66f02b25aaddaa2dfddbbc89cd67de54a9a7b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 20:09:01 2020 +0200
All sprites sway in the wind now.
commit db1401a6910bf42dcf502462c90038752ff5fbdb
Merge: 69e508d8c e8b4b29d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 19:34:17 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 69e508d8c94d8973033817ca86f357e466fc7c4d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 18:41:37 2020 +0200
Make it easy to switch to SIMD for math.
commit ffe0f5928c7a7e87d00cb5426b3b1d831d7e02fd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 21:21:12 2020 +0200
Fix some issues with underwater rendering.
commit bfda6da42f38fd02c31ee92c81ab785a3e50c2a0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 19:17:59 2020 +0200
Fix some minor display issues.
commit 0ed752e087968cf901301884aaeae698e32ef8a5
Merge: ccc6a06a8 518edcb85
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:14:21 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit ccc6a06a8d4504d6b9f7af7905a414d2ee06ab76
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:04:34 2020 +0200
Some minor changes.
commit 4e020246702889269efe1a191788992164c508d6
Merge: 50a64d927 e05c9267a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 16:17:40 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 50a64d927e6c4f4b0e4688e4cbfca694bc3f922a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 13:07:03 2020 +0200
Fix far plane.
commit 7dd06da34cae8f9ea3b6c889fe965181f3fd3949
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:25:35 2020 +0200
Add shadows.glsl.
commit 618a18c998778bf871b905a74657440fcc384c80
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:10:22 2020 +0200
Adding shadows, greedy meshing, and more.
commit eaea83fe6a5cb1cb0ba8beef888183c718258496
Merge: 267018495 2f89b863e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 22:47:07 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 2670184954a13e4a9e7a4e35ba79aac0c5fac2f7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 21:20:01 2020 +0200
Make civsim and sites deterministic.
For anything in worldgen where you use a HashMap, *please* think
carefully about which hasher you are going to use! This is
especially true if (for some reason) you are depending on hashmap
iteration order remaining stable for some aspect of worldgen.
commit f8376fd5dc72b4a9c2f51a6b4570d59c8b8e9343
Merge: 654f7e049 cdee191dd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 17:53:57 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 654f7e049258d9da27c09608bbe6a46ffa8787e5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed May 20 21:22:30 2020 +0200
Correct backface culling.
commit 560501df05ca725409b0f2e4eb31bdfdc15fd0c7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue May 19 17:22:06 2020 +0200
Greedy messhing for shadows.
commit a4d87e1875ca543436e6bbbeb20348facc5a52d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun May 17 05:59:00 2020 +0200
Shadow maps work for lantern.
commit 243d0837b8a3b08172c9a3c348d964d7ddc2a0a8
Merge: 04382dc28 71dd520cd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:53:13 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 04382dc28632b6c66e8821f6870c0daaa1c1901a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:22:17 2020 +0200
WIP: better graphics config, better LOD, shadow maps.
commit 22ddbad3eb32bfa70f0932176022208fe67ded81
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 18:54:09 2020 +0200
Minor shader fixes.
commit 746a10e8d01ac235f994b0cde78fa48998602a1f
Merge: 0f4a0e763 40ab94673
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 04:02:09 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0f4a0e763db3afbdc4fb0558611f38326ca87151
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 23:03:24 2020 +0200
Switch back to pop-in terrain.
commit dd74fa7e4a53667b38811d7aec58d7f6a68889bb
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 22:58:55 2020 +0200
LOD shading closer to voxel shading.
commit ef67bd58ba0bdaf622b078892d768263b6cba268
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 28 20:49:03 2020 +0200
Experimental underwater lighting.
commit 2c5ad9d07605e80d5fd5679dd3a5d70c605b86a9
Merge: 748279835 303967a6f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 22:35:24 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7482798354eda18c8207950080fc24d443a369de
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 21:59:55 2020 +0200
Replace discard in figure-frag.
commit d83b4ae69be4912f69bf7835f509c68a1c7770a4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:45:57 2020 +0200
Fix sprite lighting, HDR from focus_pos.
commit 0594238004f116274905fa0ed7c2b6c417ed1d29
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:14:10 2020 +0200
Proper HDR from point lights.
commit 48c93d2b41ce5743103d18e76cc228f5ac766492
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 14:01:43 2020 +0200
Brighter ambiance, darker LOD shadows.
commit e0452e895ccfa8a43f368cae3b8b8aedc24dad93
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 13:13:23 2020 +0200
More proper HDR.
commit 4c6da3ed16cfeebb455e40da5f557b4af9a499d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 00:13:10 2020 +0200
Trying LOD noise.
commit 682a3d74c85df5503ffe1fc1cc891bce789df1ad
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 23:11:08 2020 +0200
Fix LOD heights in towns.
commit cc39e5734e8b18f9077bf42e66337c1319dd6b6e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 21:01:23 2020 +0200
More LOD fixes.
commit 8116b21c2e51c836e77894e309ac273caf2917b3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:54:43 2020 +0200
I like this coloring.
commit bc2560ea90b36f4b46190005344232d993043ac3
Merge: 14effdd5d e690efe71
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:48:33 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 14effdd5db8747fcf3eb34f03b46b7792e92d1c5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:24:35 2020 +0200
Re-saturate.
commit 48a643955d4435b78179acba0beb4a979905cc31
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:23:57 2020 +0200
Various fixes.
commit f7b497a0c25f4ad4682c71dd1ed6f608052feb9b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 03:22:49 2020 +0200
Render figures again.
commit 44e4aad48deba8266b9f8bdfd3db096b381f5327
Merge: e6f0a5a98 9ec319a18
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 02:01:04 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit e6f0a5a981a82533ba188fff0a54ce98577bb152
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 24 16:12:20 2020 +0200
Add atmospheric scattering.
commit f2953087f691a8edbc001cb98ebf5059fc6f8ac0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 23 00:01:20 2020 +0200
Fix shadowing for specular reflections.
commit ddd4a67a9799b8d08c7dc0c2bec90621c2bed0e3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Apr 22 22:56:12 2020 +0200
HDR fixes.
commit 1015e60deef3c447381996277df7496707a63bd0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 21 18:25:19 2020 +0200
More lighting changes.
commit 80c264abd111fb237e57843efcb5c071d4f84613
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 13 00:29:59 2020 +0200
Lighting experiments.
commit 8414987e589dd5102bad89762a3adaccc0bfe957
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 9 02:38:40 2020 +0200
WIP -- lighting changes and soft shadows.
commit 9cd2b3fb0d6b49776c6dfe463e4169637250b11a
Merge: c7ea687eb 8b149ad11
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:29 2020 +0200
Merge branch 'sharp/new-lighting' into sharp/small-fixes
commit c7ea687ebbc5aace1b455f134a5bf49ce2c7434a
Merge: 476441531 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:02 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 8b149ad11ad4bb75018fcf9519baec27d1c95951
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:32:39 2020 +0200
Trying out a new lighting model.
commit b0ac9f36f755dd06f7c17c46150568064790864f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 07:56:11 2020 +0200
Use bicubic interpolation for terrain.
commit f6fc9307a121514b614bc50ef8eb055953e7da8a
Merge: 33140a295 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 05:01:41 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 4764415312aae6e9ac2d00e86e84577cb958f1ab
Merge: ed2d0111d 13388ee6a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 04:54:48 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 13388ee6a42943f3f79a9cb488346cef18e272fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 20:30:08 2020 +0200
Various fixes (to coloring and to soft shadows).
commit fbd084a94a067082a87cd6d28b82054709bc9265
Merge: 5a089863b 4fdf6896a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 18:50:38 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/map-colors
commit ed2d0111d994262ae836d84d1fe5a45e4de72a0b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 06:49:27 2020 +0200
Combining colors and LOD.
commit 88342640c6b835114d01c797b89fdede3b0a2108
Merge: 33140a295 5a089863b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:49:20 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 33140a2951b8212725f42c758b277aaec4d888f7
Merge: 4c65a5aed f34d4b379
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:36:21 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 5a089863beb01d4794bbe3580ada47b278715ea2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 03:17:49 2020 +0200
Making maps brighter.
This is probably not the right way to do it, but oh well!
commit 32b2c99109dd486aa922886081068f9c550c83f2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 02:46:36 2020 +0200
Horizon mapping and "layered" map generation.
Horizon mapping is a method of shadow mapping specific to height maps.
It can handle any angle between 0 and 90 degrees from the ground, as
long as know the horizontal direction in advance, by remembering only a
single angle (the "horizon angle" of the shadow map). More is explained
in common/src/msg/server.rs. We also remember the approximate height of
the largest occluder, to try to be able to generate soft shadows and
create a vertical position where the shadows can't go higher.
Additionally, map generation has been reworked. Instead of computing
everything from explicit samples, we pass in sampling functions that
return exactly what the map generator needs. This allows us to cleanly
separate the way we sample things like altitudes and colors from the map
generation process. We exploit this to generate maps *partially* on the
server (with colors and rivers, but not shading). We can then send the
partially completed map to the client, which can combine it with shadow
information to generate the final map. This is useful for two reasons:
first, it makes sure the client can apply shadow information by itself,
and second, it lets us pass the unshaded map for use with level of
detail functionality.
For similar reasons, river generation is split
out into its own layer, but for now we opt to still generate rivers on
the server (since the river wire format is more complicated to compress
and may require some extra work to make sure we have enough precision to
draw rivers well enough for LoD).
Finally, the mostly ad-hoc lighting we were performing has been (mostly)
replaced with explicit Phong reflection shading (including specular
highlights). Regularizing this seems useful and helps clarify the
"meaning" of the various light intensities, and helps us keep a more
physically plausible basis. However, its interaction with soft shadows
is still imperfect, and it's not yet clear to me what we need to do to
turn this into something useful for LoD.
commit f8926a5737ddc51f3d585c651a64c43677aae0f4
Merge: a1aee931e 875ae6ced
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Mar 13 13:32:42 2020 +0100
Merge remote-tracking branch 'origin/master' into sharp/map-colors
commit 4c65a5aed353b119aea65a2aaeb94549b67beb42
Author: Treeco <5021038-Treeco@users.noreply.gitlab.com>
Date: Mon Feb 24 16:48:05 2020 +0000
Made LOD setting slider exponential
commit 2fa7b2d20d7233dc8bfd64f9f7f54617575248f1
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 17:49:53 2020 +0000
Added mist to LoD
commit aab059a450b5f635777129ff82cc15b662965c3c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 15:14:06 2020 +0000
Added LoD slider
commit 779c36b538121c5ade3633ae5cb67bb14c8c3877
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:54:55 2020 +0000
Reduced cost of vertex pushing
commit 9fea150473906b166365b738ebcea07c697daf3d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:38:53 2020 +0000
Fixed maths, improved LoD resolution
commit 5481df38fea5bf183ff376a3337179cfaa5233dc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 11:22:50 2020 +0000
Dynamically relocate LoD vertices to enhance details
commit a3e36a50ababd615da7db1b26158c7906a5def01
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 18:13:51 2020 +0000
Simpler terrain spiral rendering
commit 255f450ae9ac8763db4bede075fb409161ed57cc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:53:17 2020 +0000
Better LoD precision
commit 3d027aebe812a5b8658a4eb8123dc9f61b3776d2
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:04:03 2020 +0000
Better falloff
commit be775c9484b457b2c0b1a494aec03392d0c70e76
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 15:30:45 2020 +0000
Applied good ideas from experimental branch
commit 58587b68545a23c5c04ab4574a4b94b3bc982246
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 16:15:13 2020 +0000
Minor fixes to LoD merging
commit 7b42aebd709c14df2db766aad61d9280ad24d84d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 15:04:44 2020 +0000
Capped LoD dragging
commit 8aafc559f87124e1ea5ca6e3ddc2aa0c242d793c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:54:37 2020 +0000
Better blending between LoD and terrain border
commit edd3455d5161792d87ddc8eadc0ecbad5532b284
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:40:19 2020 +0000
Fixed LoD z depth, added sea level offset
commit b9b06744620114dd5556e73f64fa93c145503a7c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:27:43 2020 +0000
Better LoD smoothing
commit a1aee931e790431560cd2d953ad61d9497072afd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Feb 21 14:52:17 2020 +0100
Adding shadows.
commit 2400786c13dd891c131ed86d48d05df516a8a778
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 13:48:40 2020 +0000
Use world map as LoD source
commit dbf650f504a4c25fbbc2096ac3616c736bf52d23
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Jan 20 00:48:14 2020 +0000
Better clouds at distance
commit 5e6f81b86cdb9730b9b056877b19257075fd5fa8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Jan 19 23:59:02 2020 +0000
sync
commit 745e7540ddb000cc645f612767b337c2ddc3f7c0
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 12:40:48 2019 +0000
Improved cloud falloff mist, faster noise sampling
commit f6a200d0cb866196ba57697466755f9e0c7ea5d8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 10:09:00 2019 +0000
Improved long-range depth precision, removed unnecessary LoD polygons
commit 63d1b2bb2292898d59fb4f4e502201103dfeb86f
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 20:57:46 2019 +0000
Working LoD shader
commit f13d98ee3e58f881e8b978861a67663b59ed91ec
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 11:03:40 2019 +0000
LoD first attempt (stack overflow issue)
2020-08-20 18:34:59 +00:00
|
|
|
|
/// Version of the world map intended for use in Veloren 0.7.0.
|
|
|
|
|
#[derive(Serialize, Deserialize)]
|
|
|
|
|
#[repr(C)]
|
|
|
|
|
pub struct WorldMap_0_7_0 {
|
|
|
|
|
/// Saved map size.
|
|
|
|
|
pub map_size_lg: Vec2<u32>,
|
|
|
|
|
/// Saved continent_scale hack, to try to better approximate the correct
|
|
|
|
|
/// seed according to varying map size.
|
|
|
|
|
///
|
|
|
|
|
/// TODO: Remove when generating new maps becomes more principled.
|
|
|
|
|
pub continent_scale_hack: f64,
|
|
|
|
|
/// Saved altitude height map.
|
|
|
|
|
pub alt: Box<[Alt]>,
|
|
|
|
|
/// Saved basement height map.
|
|
|
|
|
pub basement: Box<[Alt]>,
|
|
|
|
|
}
|
|
|
|
|
|
2020-01-18 18:41:37 +00:00
|
|
|
|
/// Errors when converting a map to the most recent type (currently,
|
|
|
|
|
/// shared by the various map types, but at some point we might switch to
|
|
|
|
|
/// version-specific errors if it feels worthwhile).
|
|
|
|
|
#[derive(Debug)]
|
|
|
|
|
pub enum WorldFileError {
|
|
|
|
|
/// Map size was invalid, and it can't be converted to a valid one.
|
|
|
|
|
WorldSizeInvalid,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// WORLD MAP.
|
|
|
|
|
///
|
2020-02-01 20:39:39 +00:00
|
|
|
|
/// A way to store certain components between runs of map generation. Only
|
|
|
|
|
/// intended for development purposes--no attempt is made to detect map
|
|
|
|
|
/// invalidation or make sure that the map is synchronized with updates to
|
|
|
|
|
/// noise-rs, changes to other parameters, etc.
|
2020-01-18 18:41:37 +00:00
|
|
|
|
///
|
2020-02-01 20:39:39 +00:00
|
|
|
|
/// The map is verisoned to enable format detection between versions of Veloren,
|
|
|
|
|
/// so that when we update the map format we don't break existing maps (or at
|
|
|
|
|
/// least, we will try hard not to break maps between versions; if we can't
|
|
|
|
|
/// avoid it, we can at least give a reasonable error message).
|
2020-01-18 18:41:37 +00:00
|
|
|
|
///
|
2020-08-25 12:21:25 +00:00
|
|
|
|
/// NOTE: We rely somewhat heavily on the implementation specifics of bincode
|
2020-02-01 20:39:39 +00:00
|
|
|
|
/// to make sure this is backwards compatible. When adding new variants here,
|
|
|
|
|
/// Be very careful to make sure tha the old variants are preserved in the
|
|
|
|
|
/// correct order and with the correct names and indices, and make sure to keep
|
|
|
|
|
/// the #[repr(u32)]!
|
2020-01-18 18:41:37 +00:00
|
|
|
|
///
|
2020-02-01 20:39:39 +00:00
|
|
|
|
/// All non-legacy versions of world files should (ideally) fit in this format.
|
|
|
|
|
/// Since the format contains a version and is designed to be extensible
|
|
|
|
|
/// backwards-compatibly, the only reason not to use this forever would be if we
|
|
|
|
|
/// decided to move away from BinCode, or store data across multiple files (or
|
|
|
|
|
/// something else weird I guess).
|
2020-01-18 18:41:37 +00:00
|
|
|
|
///
|
|
|
|
|
/// Update this when you add a new map version.
|
|
|
|
|
#[derive(Serialize, Deserialize)]
|
|
|
|
|
#[repr(u32)]
|
|
|
|
|
pub enum WorldFile {
|
2020-01-20 16:16:41 +00:00
|
|
|
|
Veloren0_5_0(WorldMap_0_5_0) = 0,
|
(See sharp/lod-history) LOD, shadows, greedy meshing, new lighting, perf
---
Pretty much a Veloren fork at this point. Here's a high level overview of the changes (will be added to CHANGELOG just before merge).
At a high level this MR incorporates roughly two groups of changes.
The first group consists of new game features: more flexible map sizes, level of detail terrain, shadow maps, and a new lighting
engine. This is "feature work" that (mostly) only adds new things to Veloren, and mostly shouldn't affect old stuff.
The second big group of changes are those addressing the fallout from all the new features. These include performance fixes of
various sorts: the addition of multiple graphics options and optimization of the cheap ones to avoid work, switching all voxel
models to use some variant of greedy meshing, switching over much of our CPU-side vector math to exploit SIMD instructions
(coinciding with a fork of `vek`), and a rewrite of how the UI handles text rendering (coinciding with updates to our fork
of `conrod`). Making Veloren's hardcoded colors appear correct under the new lighting engine also required considerably
changes (TODO: Fill in this section when it's complete).
The second category of changes often heavily touches code owned by other people, including frequently modified code "owned" by a
handful of people, so I recommend that this code be reviewed particularly carefully.
---
At a high level (each will be described in more detail below):
- The world map has been refactored.
- The world size is no longer hardcoded (@zesterer).
- The map generation code was made generic to allow using it outside of the `world` crate (@zesterer).
- On world creation, we now compute *horizon maps* (@zesterer).
- The way we pass the world from the server to the client has been updated (@xMAC94x).
- Artifacts related to image rotation were fixed (@imbris).
- Multiflow rivers were enabled (@zesterer).
- In the process of making changes related to the world map, various incidental fixes and optimizations were required.
- The new *level of detail* feature was added (@zesterer wrote part of this and has checked out the rest).
- A new LOD terrain rendering step was added to the pipeline.
- The LOD terrain quality was made configurable via a graphics setting.
- Horizon maps were used to cast shadows from LOD chunks on both LOD and non-LOD terrain.
- A "voxelization" effect was incorporated into rendered LOD terrain to make it blend better into the world.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Veloren's lighting has been completely overhauled (@zesterer has already checked most of this out).
- A semi-accurate index of refraction was assigned to our materials.
- A new, more realistic, physically based approach to lighting was used using the *Ashikhmin Shirley* BRDF.
- We emulate *atmospheric scattering* using equations designed for measuring solar panel light exposure.
- We attempt to compute *realistic light attenuation* in water using its real material properties.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Point and directional lights now cast realistic shadows, using *shadow mapping.* (@imbris, @zesterer, @Treeco, @YuriMomo)
- Point light shadow maps were added to the rendering pipeline, using geometry shaders and *seamless cube maps*.
- Directional light shadows were added to the rendering pipeline, using LISPSM together with disabling *depth clamping*.
- "Shadow-only" chunks and NPCs were added to prevent shadows from models behind you from disappearing.
- In the process of making changes related to shadow maps, various incidental fixes and optimizations were required.
The addition of shadow maps, LOD terrain, and the new lighting all led to significant performance degradation, on top of other
changes happening in master. Therefore, a large number of performance improvements were also needed:
- The graphics options were made much more flexible and configurable, and shaders were optimize.
- New options were provided for how to render lights and shadows (@Pfauenauge, @zesterer).
- Graphic setting storage and configuration were overhauled to make adding new features easier (@Pfauenauge, @imbris).
- Shaders were rewritten to utilize GLSL's preprocessor to avoid overhead (@zesterer, @YuriMomo).
- In the process of making changes related to providing additional rendering options, various incidental fixes and optimizations were required.
- Voxel model creation was switched to use *greedy meshing.*
- A new voxel meshing method, greedy meshing, was added (@imbris).
- Uses of the older meshing methods were migrated to use greedy meshing (@imbris, @jshipsey, @Pfauenauge).
- New restrictions were added to terrain, figure, and sprites to future proof them for further optimizations (@jshipsey, @Pfauenauge, @zesterer).
- Most positions are now relative to either chunk or player position for better precision (@imbris, @zesterer, @scottc).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- Animation and terrain math were switched to use SIMD where possible.
- Fixes were made to vek to make its SIMD feature usable for us (@zesterer, @imbris).
- The interface and types used in bone animation were changed in various ways (@jshipsey, @Snowram, @Pfauenauge).
- Redundant code generation for body animation is now partly taken care of by a macro (@jshipsey, @Snowram, @Pfauenauge).
- Animation code was modified to to use vek's SIMD representation where possible (@jshipsey, @Snowram, @Pfauenauge).
- Terrain meshing code and shadow map math were also modified to use vek's SIMD representation (@imbris).
- SIMD instruction generation was enabled (@YuriMomo, @jshipsey, @Snowram, @imbris, @Angelonfira, @xMAC94x).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- The way we cache glyphs was completely refactored, fixed, and optimized.
- Our fork of `conrod` was optimized in various ways (@imbris).
- Our fork of `conrod` now exposes whether a widget was updated during the current frame (@imbris).
- Our use of the glyph cache was rewritten for correctness (@imbris).
- A *text cache* was introduced that lets us skip remeshing glyphs that have not changed (@imbris).
- Various changes were made to reduce pressure on the glyph cache, with more planned (@imbris, @Pfauenauge).
- In the process of making changes related to the glyph cache, various incidental fixes and optimizations were required.
- Colors were changed to keep Veloren's look consistent with master.
- Some older tree models were brought back (@Pfauenauge).
- TODO(@Sharp): All hardcoded colors were extracted and made hotloadable.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Hardcoded colors were fixed to conform to Veloren's style.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Color models were fixed to conform to Veloren's style.
A detailed description of the involved changes follows.
---
- The world size is no longer hardcoded. All functions dependent on world size now take a `WorldSizeLg`, which holds the base 2 logarithm of each actual world dimension and is guaranteed to maintain certain properties (outlined in `common/src/terrain/map.rs`). Additionally, many utility functions that utilize the world size were moved into `common` as well (mostly `common/src/terrain/mod.rs`). Finally, the world map format was updated in order to store its size explicitly, with a migration path from the old format that should work whenever the old formatted map was a square (practically always). See `world/src/sim/mod.rs` for these changes.
- The map generation code was made generic to allow using it outside of the `world` crate. The parts of the map generating code that do not need to query the world were moved over to `common/src/terrain/map.rs`, allowing them to be used from the client without creating a dependency on `world`. The rest of it was turned into helper functions in `world/src/sim/map.rs`, which can be passed as closures to the generic map generation code to complete its construction. This also means that colors are now passed in separately to the map generation function. See <https://veloren.net/devblog-78/> for more details.
- On world creation, we now compute *horizon maps*. See the function in `world/src/sim/util.rs`.
Given a height map and a plane intersecting that height map, our horizon maps allow us to encode enough information to reconstruct shadows for each point on the height map using only the *horizon angle* (the angle at which the sun starts to become visible). As Veloren's sun only covers one plane, this is sufficient for encoding sun shadows for LOD terrain, by encoding two angles per chunk (one for each 90 degrees the sun covers). We can also use this for the moon, if we want, since the moon follows the same path. Additionally, we store the *height* of the furthest occluder, to try to make the shadows volumetric; so this means 4 bytes in total for each chunk.
Support for horizon maps has been merged into the map functionality in common as well.
- The way we pass the world from the server to the client has been updated. Rather than passing the prerendered map, we instead pass three maps with values for each chunk; one with the color information, a second with altitude information, and a third with horizon map information. We then reconstruct the map on the client, together with some additional information we send from the server (like the sea level and maximum height). See `common/src/msg/server.rs` for a detailed description of the format of `WorldMapMsg`, and `server/src/libr.rs` and `client/src/lib.rs` for details of the map construction and parsing.
- Artifacts related to image rotation were fixed. See the commit message for commit SHA `cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e` for a detailed explanation. This involved changes to shaders, the addition of a new type of graphic (also reflected in the graphic cache) that allows specifying a border color (which automatically makes the associated texture immutable), and some related fixes. I reproduce the first two paragraphs of the MR description as well:
```
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
```
- Multiflow rivers were enabled.
This does not really need to be part of this MR, and would be easy to revert, but since it seemed to provide a nice improvement it's currently packaged with it.
We already computed multiple outflows from each chunk for erosion purposes long before this MR.
However, we never modified river rendering to be able to handle this case (just a single downhill river flow is complex enough!) so this was not exposed when deciding which chunks were rivers.
Now that
- In the process of making changes related to the world map, various incidental fixes and optimizations were required. Some examples of fixes include making sure terrain is never lowered to below sea level (to make the shadow maps report correct values), fixing map altitudes and colors to understand things like cliffs and "block level" coloring (that doesn'te xist on the column level), and fixing a crashbug when rendering images for the UI where source pixels are strongly rectangular. Some examples of related performance fixes include avoiding allocating a fresh vector for all the maps (i.e. copying it over to change the format from `[u32; n]` to `DynamicImage` and then copying again to convert to `RgbaImage`), and instead using the `gfx::memory::slice` function to accomplish the same thing. These sorts of changes are spread all arond the code.
This includes the additon of a new scene, `voxygen/src/scene/lod.rs`, a new pipeline `voxygen/src/render/pipeline/lod_terrain.rs`, and new shaders `assets/vxygen/shaders/lod-terrain-vert.glsl` and `assets/vxygen/shaders/lod-terrain-frag.glsl`, as well as associated changes to the renderer in `voxygen/src/render/renderer.rs`.
The main idea behind our initial approach to LOD was to take the world data we now get from the server (altitude, color, and horizon mapping).
- Some previously computed values were turned into shader uniforms for better prediction on weak processors. (@zesterer)
- Calls to power or trig functions were removed or replaced with multiplications, where possible.
- After some deliberation
- To properly handle sprite "waving" for nearby sprites,
We explicitly designed the greedy meshing system with figures and sprites in mind.
In both cases, we want to be able to *efficiently* pack many different models into the same texture, especially in cases where we know
we will either not be removing any of the grouped-together from the models from the texture, or will remove all of them at once (so
they can be packed into some specific subtexture).
For sprites, since we know every model in advance and never intend to deallocate them, we currently pack them all as efficiently as
possible into one giant tetxure atlas. However, in the future we might opt to pack them slightly less efficiently in exchange for
shrinking the sprite vertex size.
For figures, we pack all the textures for each *model* into the same atlas.
is a global texture atlas used for every sprite, and for figures which is why we have the ability to mesh multiple
models to the same texture area (using the simple texture atlas allocator) without requiring intermediate vector allocations.
This is accomplished by delaying the time when we actually write the color and light data to the texture until *after* all the
model vertices have been meshed; then, we can just allocate the whole color/light array at once, making the atlas we use an
exact fit. In computer science-y terms, we accomplish this delay by, after we perform the initial greedy meshing (without
texture information), not continuing to create the texture data, but instead constructing a *continuation*--that is, a function
that, when called, will execute the rest of the computation. We push this continuation (which in Rust terms is a `FnOnce` closure
that takes the `ColLightsInfo` that it is supposed to write to as context) onto a
onto a vector
resizing. To allow for suspended writes to texture data, Rust pointed out to me that the continuation that would eventually write the color and light data to the texture atlas (the one that is shared by all models sharing the same greedy mesher) would have to *own* whatever data it mshed. Because we often generate the model data to mesh as a temporary in `voxygen/src/load.rs`, the
- Matrix multiplications in the shader were reduced for figure data (@zesterer).
- Vertex "waves" for fluid data were removed.
- Terrain "bending" near edges was removed.
- Scaling was fixed to make sure empty space was not introduced in a space previously occupied by a block. It was also changed to take ownership of its voxel data,
rather than sharing it, to let it be used with meshing.
- Rust's nightly version was bumped in order to use the `array_map` function, which lets us reuse more code between the simple map and `FigureModelCache`.
- PositionedGlyph::standalone.
---
I tried to cite sources in many cases[^realtime],[^lloyd],[^lispsm],[^pbrt],[^greedy],[^tjunctions]
where I needed features from elsewhere but I am particularly grateful for the following resources,
esepcially where they have accompanying source code. I linked all of them that are accessible to the public (those that are not were
obtained through legal means).
[^realtime]: Eisemann, Elmar, Michael Schwarz, Ulf Assarsson, Michael Wimmer. Real-Time Shadows. A K Peters/CRC Press (T&F), 20160419.
[^lloyd]: Lloyd,B. 2007. [Logarithmic perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). PhD thesis, University of North Carolina.
[^lispsm]: Wimmer, M., Scherzer, D., and Purgathofer, W. 2004. [Light space perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). In Proceedings of Eurographics Symposium on Rendering 2004, pp. 143– 152.
[^pbrt]: Pharr, Matt, et al. [http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf](Physically Based Rendering: From Theory to Implementation). Third edition, Morgan Kaufmann Publishers/Elsevier, 2017.
[^greedy]: mikolalysenko. “Meshing in a Minecraft Game.” 0 FPS, 30 June 2012, <https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/>.
[^tjunctions]: blackflux. “Meshing in Voxel Engines – Part 1.” Blackflux.Com, 23 Feb. 2014, <https://blackflux.wordpress.com/2014/02/23/meshing-in-voxel-engines-part-1/>.
I am also especially grateful to Khronos, Wikiepdia, and stackoverflow for answering many of my specific questions while writing the MR.
---
Squashed commit of the following:
commit 300505e7305a2fdac722a808ee8538323f215f39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 18:46:25 2020 +0200
Fixing cargo doc and typo in CHANGELOG.
commit ec0aeb18e8499d7d84ef818331b4b65c3d76cea6
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 15:38:50 2020 +0200
Hopefully final commit for the LOD branch.
commit 5e8ea0b1eaac02903a02feb2eb038d195de4872f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 10:14:26 2020 +0200
Falling back to power as stopgap.
commit e44a1cbf46504ee9931a01bdc9033e145500d557
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 09:25:41 2020 +0200
Address imbris feedback.
Temporarily disables shiny water, lowers max VD.
These restrictions will be lifted soon after merging.
commit 561e25778a108ac3712f5ec2ce3a51234c4430d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 08:31:13 2020 +0200
Tweaking shaders a bit.
commit 7d19259078ce0dd7b3742ad7d0cb3fab3ece3fdc
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:59:43 2020 +0200
Fix view example as well.
commit 051cd4934e0fad2c0b15db4380a4189fa318679f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:29:06 2020 +0200
Fix meshing benchmark.
commit c95e07db3b4dcca285678985e65e31b927cb1c61
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 05:46:22 2020 +0200
Address MR feedback, fix scene clouds.
commit 1bfb816cabdb3ffc1e507a009c2d98696b4b573a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:39:36 2020 +0200
Incorporating Pfau's figure color changes.
New eyes and new humanoid colors.
commit 3f9b89a3ac7b3356b1dba0d1a8f6541357f81469
Merge: e2f5162e4 62c53963a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:29:41 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit e2f5162e4f96f4124aa43488f7245d341b3dcfd4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:28:38 2020 +0200
World colors are all hotloadable.
They live in assets/world/style/colors.ron.
Only a small handful of hardcoed colors remain in World; they are either
part of the map, or difficult to disentangle from the rest of the
computation. Comments are made where appropriate.
commit 62c53963abe1975009d34a8f9515a355bef24f31
Author: Marcel Märtens <marcel.cochem@googlemail.com>
Date: Wed Aug 19 15:59:00 2020 +0200
replace pretty_env_logger with tracing
commit 5b1625f99d9586fe80e2232f583ec5af9f953099
Merge: d71003acd 4942b5b39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:15:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit d71003acdabeff970b3928e97c26af6847b5b78e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:14:34 2020 +0200
Hotloading colors, part 1: colors in common.
Currently, this just entails humanoid colors. There are only three
colors not handled; the light emitter colors in
common/src/comp/inventory/item/tool.rs. These don't seem important
enough to me to warrant making hotloadable, at least not right now, but
if it's needed later we can always add them to the file.
commit 63b5e0e553eb2ea49276f192a6fc7dd65254270d
Merge: c32b337a4 6d2c4b9c1
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 13:05:37 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c32b337a46e10d9de473d178a94a3ccd61c39bb3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:52:04 2020 +0200
Fixing LOD grid, for real.
commit a166ae0360395387e09fb35a1f84210c2ce5ec24
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:28:05 2020 +0200
Addressing imbris's initial feedback.
Fixes two minor bugs: explosion particles were no longer spawning
randomly, and LOD grids were not perfectly even.
commit 4cbad004f44060994252dd3d38647a14a589712f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:27:58 2020 +0200
Bumping nightly per request.
commit 548680276aac77c25d43d16b5622f847d474dbef
Merge: acc098604 8f8b20c91
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:26:06 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit acc0986040589a3492f88a740bc3c3fc693b26d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:28:32 2020 +0200
Lower resolution due to lying drivers.
commit d3b878de2a52c358d2944a6bbd0555dad7fbdb10
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:15:38 2020 +0200
Fix issues msh encountered with Intel 4600.
commit 10245e0c1b0cb6fae10d86409435364edc6102ef
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 21:15:02 2020 +0200
Merge more models into one mesh than we did previously.
commit 3155c31e663c52ae5c3a53d5fb5665892a1a498a
Merge: 7204cc8a7 3c199280e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:35:22 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7204cc8a7a4f74a30306bd205d9834fee4bb944f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:34:43 2020 +0200
Fix not yet done NPC animations.
This forces them all to be the idle animation if not specified.
This fixes issues where you'd have giant NPCs in water.
commit bc83360f2a08918f19d417b5f772e1ff554dba08
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 19:36:37 2020 +0200
Try to fix some bugs:
- Z fighting with LOD terrain and water.
- Audio SFX not playing.
commit 1fd104aa603bf3781b6526a5cada46aeca3049dd
Merge: 862df3c99 7c2c392a3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 12:02:31 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 862df3c9976c4da9bd7cfd784f1a85973127968a
Merge: 0a4218ed9 75c1d4401
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 05:52:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0a4218ed9d541a2b34c133351bea38a99ddf4ea7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 22:27:14 2020 +0200
Fix particle depth.
commit f51dfdeb442d0dd5243dd2f344fa4be295bd0875
Merge: c6251a956 5e6dc0471
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:19:04 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit c6251a956ad376400dca5c23420cf8d213dc8fdf
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:15:46 2020 +0200
Cache figures more intelligently.
Cache figures for longer, and don't cache character states for the
player except where they actually affect the rendered model.
commit 0ed801d5404982c6fb63b1eaa4567d908b294c9d
Merge: c11b9bdf0 eea64f78f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 16:32:24 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c11b9bdf0a53bf9884d2f5a48fec9b01d582df1a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 11:47:15 2020 +0200
Remove unneeded Clippy annotation.
commit 16aa9ef40af56d69289d00aafb3deadfb8bd4f35
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 8 00:53:02 2020 +0200
Fix hotloading and Clippy.
commit 3dc973e0be5b758da1e9805eb764ad401374cd0c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 23:50:27 2020 +0200
Major speedups with SIMD.
commit fba64a7d93d5a96077ce87287bbce6ab9b7fbcae
Merge: 76429d00e d1e10b178
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:19 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 76429d00eea00d212fbd672a84ee91e75b19b938
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:10 2020 +0200
Add clippy.toml.
commit c79f512f84dbb83cb82b7954db68ff241dfd8e41
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 11:55:20 2020 +0200
Fix all clippy issues, clean up Rust code.
commit 6f90e010b3fbefb53b0d632e819931350015b6b8
Merge: 77a8c7c26 5929cfa5c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:30 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 77a8c7c267d3f44a1a62bd6b2274359973c5e4d4
Merge: b44e44232 44febaabd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:10 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 5929cfa5c713aa392110bbb62407f76caf53c3df
Author: jshipsey <jshipsey18@gmail.com>
Date: Thu Aug 6 20:47:27 2020 -0400
fixed in-hand arrow bug
commit b44e442325d828f1cd564d66908f89d09e80474b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 6 13:40:35 2020 +0200
Miscellaneous performance improvements.
commit be37acf287c1360d8085862526ac3365ffd1d768
Merge: 125d7fc6c c11876547
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 05:49:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 125d7fc6c4dcd8c8c5f27b8268a4d64f409f3644
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 04:55:31 2020 +0200
Abstract over simd vs. repr_c vectors.
Also some minor improvements to Event size.
commit d4d4956e9252e1241ce110b2aa85076c6b1e2a23
Merge: 5f3b7294a aced5f979
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:56:54 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 5f3b7294af1f8533edc2620b58863c248e2b07af
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:43:52 2020 +0200
Fix formatting issues I missed before.
commit a428a3ebba70dcab63dd0f8cd983120c90617271
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:41:51 2020 +0200
Fix clippy warnings, part 1.
There aer still a bunch of type too complex and
function takes too many arguments warnings that I'll fix later
(or ignore, since in the one case I did fix a function takes too
many arguments warning I think it made the code *less* readable).
commit ba54307540ed8a937ac08209730284fc653af85b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 30 13:22:42 2020 +0200
Fix light animations so they are removed when the light turns off.
commit 7e0f4bcbf0f4717145d8beac40d52e3acebbe2aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 21:10:20 2020 +0200
Fix crash in edge case for pixel art.
commit 56da06f7a351e2b949e9b014a90b974d511a0924
Merge: cf74d55f2 9f53a4a19
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:56:52 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:29:52 2020 +0200
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
The first concern was addressed by fixing the dimensions of the map
images drawn from the UI (so that we always use a square source
rectangle, rather than a rectangular one according to the dimensions of
the map). We also fixed the way rotation was done in the fragment
shader for north-facing sources to make it properly handle aspect ratio
(this was already done for north-facing targets). Together, these fix
rendering issues peculiar to rectangular maps.
The second and third concerns were jointly addressed by adding an
optional border color to every 2D image drawn by the UI. This turns
out not to waste extra space even though we hold a full f32 color
(to avoid an extra dependency on gfx's PackedColor), since voxel
images already take up more space than Optiion<[f32; 4]> requires.
This is then implemented automatically using the "border color"
wrapping method in the attached sampler.
Since this is implemented in graphics hardware, it only works (at
least naively) if the actual image bounds match the texture bounds.
Therefore, we altered the way the graphics cache stores images
with a border color to guarantee that they are always in their own
texture, whose size exactly matches their extent. Since the easiest
currently exposed way to set a border color is to do so for an
immutable texture, we went a bit further and added a new "immutable"
texture storage type used for these cases; currently, it is always
and automatically used only when there is a specified border color,
but in theory there's no reason we couldn't provide immutable-only
images that use the default wrapping mdoe (though clamp to border
is admittedly not a great default).
To fix the maps case specifically, we set the border color to a
translucent version of the ocean border color. This may need
tweaking going forward, which shouldn't be hard.
As part of this process, we had to modify graphics replacement to
make sure immutable images are *removed* when invalidated, rather
than just having a validity flag unset (this is normally done by
the UI to try to reuse allocations in place if images are updated
in benign ways, since the texture atlases used for Ui do not
support deallocation; currently this is only used for item images,
so there should be no overlap with immutable image replacement,
so this was purely precautionary).
Since we were already touching the relevant code, we also updated
the image dependency to a newer version that provides more ways
to avoid allocations, and made a few other changes that should
hopefully eliminate redundant most of the intermediate buffer
allocations we were performing for what should be zero-cost
conversions. This may slightly improve performance in some
cases.
commit ad18ce939940a8c697270f6e9b94db9942fd8295
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 13:21:09 2020 +0200
Fix continent scale hack.
commit 36b1cb074f5b195aebd7dbbc3da7f0246a1a18ec
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 12:11:40 2020 +0200
Enable loading different sized maps without a recompile.
We may want to tweak the effects of the continent_scale_hack.
commit 13b6d4d534cc4814b7cb3294ca41bbfea0a6b186
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 10:55:48 2020 +0200
Removing WORLD_SIZE, part 1.
Erased almost every instance of WORLD_SIZE and replaced it with a local
power of two, map_size_lg (which respects certain invariants; see
common/src/terrain/map.rs for more details about MapSizeLg). This also
means we can avoid a dependency on the world crate from client, as
desired.
Now that the rest of the code is not expecting a fixed WORLD_SIZE, the
next step is to arrange for maps to store their world size, and to use
that world size as a basis prior to loading the map (as well, probably,
as prior to configuring some of the noise functions).
commit 30b1d2c6428230a9eaa0d749cdcbbd6f1cbccd78
Merge: 7d56ba31b 1377b369f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:58 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 7d56ba31b445441461b28a07fc495d7d4f047c17
Merge: 2101113b4 598f14b25
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 1377b369f6db2258e910d467a5740f31789e3ded
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sun Jul 19 23:25:38 2020 +0200
more saturated pumpkins
commit ae8d50527f93bb0616c2ad46ce4dacb63bc37c6d
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sat Jul 18 20:29:56 2020 +0200
acacia models
commit 2101113b467e691de787392d7f20f1745f5637bd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 18 18:55:25 2020 +0200
Higher detail LOD.
commit add2cfae04b4385fa5590e11e2bd5229d9dee0aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 16 01:57:39 2020 +0200
Revert some irrelevant stuff.
commit 2e2ab3dc1eaa59a4aef7f8d34a53d8aae4c8553a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 15 13:30:49 2020 +0200
Fixing various things about shadows.
* Correcting optimal LISPSM parameter.
* Figure shadows are cast when they're not visible.
* Chunk shadows stay cast until you look away.
* Seamless cubemaps for point lights.
* Etc.
commit 6c31e6b56217274285b597af297036691ea5d897
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 19:50:26 2020 +0200
Fix shadow creation.
commit 6332cbe006115ae205597529cd8bbccd146c2cca
Merge: be438657c 930e0028b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:47:00 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit be438657c33d7b5bfb0a9582c3ed3fd366637323
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:28:08 2020 +0200
Tweaks to shadows.
Added shadow map resolution configuration, added seamless cubemaps,
documented all existing rendering options, and fixed a few Clippy
errors.
commit 23b4058906013c7d2a40c286e20e32c5fbd897ed
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 10:11:19 2020 +0200
Fix moon, use nonlinear noise for terrain.
Note that the latter has a bit of performance cost.
commit 7fbe5cbfbb9dc29607957b8e62f432a4deed193d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:23:02 2020 +0200
Address lies about max texture size.
commit bcfc62b5e13a1cdd83f57535fde4694720bebfd9
Merge: 75e3626a7 18a08e8fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:22:08 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 75e3626a785919f43fdcf2127c2b10e3e4df2f9f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:21:52 2020 +0200
OpenGL 3.3 minimum.
commit 18a08e8fe2739f02af99a5d2cb4e7c38c49e858b
Author: Monty Marz <m.marzouq@gmx.de>
Date: Tue Jul 7 23:57:52 2020 +0200
settings localization
commit 90c5d1ca3620092bc3ae10b2211489eb1cf6f5e8
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 21:11:48 2020 +0200
Lower near distance.
commit 0e66f02b25aaddaa2dfddbbc89cd67de54a9a7b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 20:09:01 2020 +0200
All sprites sway in the wind now.
commit db1401a6910bf42dcf502462c90038752ff5fbdb
Merge: 69e508d8c e8b4b29d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 19:34:17 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 69e508d8c94d8973033817ca86f357e466fc7c4d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 18:41:37 2020 +0200
Make it easy to switch to SIMD for math.
commit ffe0f5928c7a7e87d00cb5426b3b1d831d7e02fd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 21:21:12 2020 +0200
Fix some issues with underwater rendering.
commit bfda6da42f38fd02c31ee92c81ab785a3e50c2a0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 19:17:59 2020 +0200
Fix some minor display issues.
commit 0ed752e087968cf901301884aaeae698e32ef8a5
Merge: ccc6a06a8 518edcb85
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:14:21 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit ccc6a06a8d4504d6b9f7af7905a414d2ee06ab76
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:04:34 2020 +0200
Some minor changes.
commit 4e020246702889269efe1a191788992164c508d6
Merge: 50a64d927 e05c9267a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 16:17:40 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 50a64d927e6c4f4b0e4688e4cbfca694bc3f922a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 13:07:03 2020 +0200
Fix far plane.
commit 7dd06da34cae8f9ea3b6c889fe965181f3fd3949
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:25:35 2020 +0200
Add shadows.glsl.
commit 618a18c998778bf871b905a74657440fcc384c80
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:10:22 2020 +0200
Adding shadows, greedy meshing, and more.
commit eaea83fe6a5cb1cb0ba8beef888183c718258496
Merge: 267018495 2f89b863e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 22:47:07 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 2670184954a13e4a9e7a4e35ba79aac0c5fac2f7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 21:20:01 2020 +0200
Make civsim and sites deterministic.
For anything in worldgen where you use a HashMap, *please* think
carefully about which hasher you are going to use! This is
especially true if (for some reason) you are depending on hashmap
iteration order remaining stable for some aspect of worldgen.
commit f8376fd5dc72b4a9c2f51a6b4570d59c8b8e9343
Merge: 654f7e049 cdee191dd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 17:53:57 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 654f7e049258d9da27c09608bbe6a46ffa8787e5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed May 20 21:22:30 2020 +0200
Correct backface culling.
commit 560501df05ca725409b0f2e4eb31bdfdc15fd0c7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue May 19 17:22:06 2020 +0200
Greedy messhing for shadows.
commit a4d87e1875ca543436e6bbbeb20348facc5a52d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun May 17 05:59:00 2020 +0200
Shadow maps work for lantern.
commit 243d0837b8a3b08172c9a3c348d964d7ddc2a0a8
Merge: 04382dc28 71dd520cd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:53:13 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 04382dc28632b6c66e8821f6870c0daaa1c1901a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:22:17 2020 +0200
WIP: better graphics config, better LOD, shadow maps.
commit 22ddbad3eb32bfa70f0932176022208fe67ded81
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 18:54:09 2020 +0200
Minor shader fixes.
commit 746a10e8d01ac235f994b0cde78fa48998602a1f
Merge: 0f4a0e763 40ab94673
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 04:02:09 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0f4a0e763db3afbdc4fb0558611f38326ca87151
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 23:03:24 2020 +0200
Switch back to pop-in terrain.
commit dd74fa7e4a53667b38811d7aec58d7f6a68889bb
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 22:58:55 2020 +0200
LOD shading closer to voxel shading.
commit ef67bd58ba0bdaf622b078892d768263b6cba268
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 28 20:49:03 2020 +0200
Experimental underwater lighting.
commit 2c5ad9d07605e80d5fd5679dd3a5d70c605b86a9
Merge: 748279835 303967a6f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 22:35:24 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7482798354eda18c8207950080fc24d443a369de
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 21:59:55 2020 +0200
Replace discard in figure-frag.
commit d83b4ae69be4912f69bf7835f509c68a1c7770a4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:45:57 2020 +0200
Fix sprite lighting, HDR from focus_pos.
commit 0594238004f116274905fa0ed7c2b6c417ed1d29
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:14:10 2020 +0200
Proper HDR from point lights.
commit 48c93d2b41ce5743103d18e76cc228f5ac766492
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 14:01:43 2020 +0200
Brighter ambiance, darker LOD shadows.
commit e0452e895ccfa8a43f368cae3b8b8aedc24dad93
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 13:13:23 2020 +0200
More proper HDR.
commit 4c6da3ed16cfeebb455e40da5f557b4af9a499d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 00:13:10 2020 +0200
Trying LOD noise.
commit 682a3d74c85df5503ffe1fc1cc891bce789df1ad
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 23:11:08 2020 +0200
Fix LOD heights in towns.
commit cc39e5734e8b18f9077bf42e66337c1319dd6b6e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 21:01:23 2020 +0200
More LOD fixes.
commit 8116b21c2e51c836e77894e309ac273caf2917b3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:54:43 2020 +0200
I like this coloring.
commit bc2560ea90b36f4b46190005344232d993043ac3
Merge: 14effdd5d e690efe71
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:48:33 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 14effdd5db8747fcf3eb34f03b46b7792e92d1c5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:24:35 2020 +0200
Re-saturate.
commit 48a643955d4435b78179acba0beb4a979905cc31
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:23:57 2020 +0200
Various fixes.
commit f7b497a0c25f4ad4682c71dd1ed6f608052feb9b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 03:22:49 2020 +0200
Render figures again.
commit 44e4aad48deba8266b9f8bdfd3db096b381f5327
Merge: e6f0a5a98 9ec319a18
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 02:01:04 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit e6f0a5a981a82533ba188fff0a54ce98577bb152
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 24 16:12:20 2020 +0200
Add atmospheric scattering.
commit f2953087f691a8edbc001cb98ebf5059fc6f8ac0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 23 00:01:20 2020 +0200
Fix shadowing for specular reflections.
commit ddd4a67a9799b8d08c7dc0c2bec90621c2bed0e3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Apr 22 22:56:12 2020 +0200
HDR fixes.
commit 1015e60deef3c447381996277df7496707a63bd0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 21 18:25:19 2020 +0200
More lighting changes.
commit 80c264abd111fb237e57843efcb5c071d4f84613
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 13 00:29:59 2020 +0200
Lighting experiments.
commit 8414987e589dd5102bad89762a3adaccc0bfe957
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 9 02:38:40 2020 +0200
WIP -- lighting changes and soft shadows.
commit 9cd2b3fb0d6b49776c6dfe463e4169637250b11a
Merge: c7ea687eb 8b149ad11
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:29 2020 +0200
Merge branch 'sharp/new-lighting' into sharp/small-fixes
commit c7ea687ebbc5aace1b455f134a5bf49ce2c7434a
Merge: 476441531 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:02 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 8b149ad11ad4bb75018fcf9519baec27d1c95951
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:32:39 2020 +0200
Trying out a new lighting model.
commit b0ac9f36f755dd06f7c17c46150568064790864f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 07:56:11 2020 +0200
Use bicubic interpolation for terrain.
commit f6fc9307a121514b614bc50ef8eb055953e7da8a
Merge: 33140a295 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 05:01:41 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 4764415312aae6e9ac2d00e86e84577cb958f1ab
Merge: ed2d0111d 13388ee6a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 04:54:48 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 13388ee6a42943f3f79a9cb488346cef18e272fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 20:30:08 2020 +0200
Various fixes (to coloring and to soft shadows).
commit fbd084a94a067082a87cd6d28b82054709bc9265
Merge: 5a089863b 4fdf6896a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 18:50:38 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/map-colors
commit ed2d0111d994262ae836d84d1fe5a45e4de72a0b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 06:49:27 2020 +0200
Combining colors and LOD.
commit 88342640c6b835114d01c797b89fdede3b0a2108
Merge: 33140a295 5a089863b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:49:20 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 33140a2951b8212725f42c758b277aaec4d888f7
Merge: 4c65a5aed f34d4b379
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:36:21 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 5a089863beb01d4794bbe3580ada47b278715ea2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 03:17:49 2020 +0200
Making maps brighter.
This is probably not the right way to do it, but oh well!
commit 32b2c99109dd486aa922886081068f9c550c83f2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 02:46:36 2020 +0200
Horizon mapping and "layered" map generation.
Horizon mapping is a method of shadow mapping specific to height maps.
It can handle any angle between 0 and 90 degrees from the ground, as
long as know the horizontal direction in advance, by remembering only a
single angle (the "horizon angle" of the shadow map). More is explained
in common/src/msg/server.rs. We also remember the approximate height of
the largest occluder, to try to be able to generate soft shadows and
create a vertical position where the shadows can't go higher.
Additionally, map generation has been reworked. Instead of computing
everything from explicit samples, we pass in sampling functions that
return exactly what the map generator needs. This allows us to cleanly
separate the way we sample things like altitudes and colors from the map
generation process. We exploit this to generate maps *partially* on the
server (with colors and rivers, but not shading). We can then send the
partially completed map to the client, which can combine it with shadow
information to generate the final map. This is useful for two reasons:
first, it makes sure the client can apply shadow information by itself,
and second, it lets us pass the unshaded map for use with level of
detail functionality.
For similar reasons, river generation is split
out into its own layer, but for now we opt to still generate rivers on
the server (since the river wire format is more complicated to compress
and may require some extra work to make sure we have enough precision to
draw rivers well enough for LoD).
Finally, the mostly ad-hoc lighting we were performing has been (mostly)
replaced with explicit Phong reflection shading (including specular
highlights). Regularizing this seems useful and helps clarify the
"meaning" of the various light intensities, and helps us keep a more
physically plausible basis. However, its interaction with soft shadows
is still imperfect, and it's not yet clear to me what we need to do to
turn this into something useful for LoD.
commit f8926a5737ddc51f3d585c651a64c43677aae0f4
Merge: a1aee931e 875ae6ced
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Mar 13 13:32:42 2020 +0100
Merge remote-tracking branch 'origin/master' into sharp/map-colors
commit 4c65a5aed353b119aea65a2aaeb94549b67beb42
Author: Treeco <5021038-Treeco@users.noreply.gitlab.com>
Date: Mon Feb 24 16:48:05 2020 +0000
Made LOD setting slider exponential
commit 2fa7b2d20d7233dc8bfd64f9f7f54617575248f1
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 17:49:53 2020 +0000
Added mist to LoD
commit aab059a450b5f635777129ff82cc15b662965c3c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 15:14:06 2020 +0000
Added LoD slider
commit 779c36b538121c5ade3633ae5cb67bb14c8c3877
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:54:55 2020 +0000
Reduced cost of vertex pushing
commit 9fea150473906b166365b738ebcea07c697daf3d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:38:53 2020 +0000
Fixed maths, improved LoD resolution
commit 5481df38fea5bf183ff376a3337179cfaa5233dc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 11:22:50 2020 +0000
Dynamically relocate LoD vertices to enhance details
commit a3e36a50ababd615da7db1b26158c7906a5def01
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 18:13:51 2020 +0000
Simpler terrain spiral rendering
commit 255f450ae9ac8763db4bede075fb409161ed57cc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:53:17 2020 +0000
Better LoD precision
commit 3d027aebe812a5b8658a4eb8123dc9f61b3776d2
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:04:03 2020 +0000
Better falloff
commit be775c9484b457b2c0b1a494aec03392d0c70e76
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 15:30:45 2020 +0000
Applied good ideas from experimental branch
commit 58587b68545a23c5c04ab4574a4b94b3bc982246
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 16:15:13 2020 +0000
Minor fixes to LoD merging
commit 7b42aebd709c14df2db766aad61d9280ad24d84d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 15:04:44 2020 +0000
Capped LoD dragging
commit 8aafc559f87124e1ea5ca6e3ddc2aa0c242d793c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:54:37 2020 +0000
Better blending between LoD and terrain border
commit edd3455d5161792d87ddc8eadc0ecbad5532b284
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:40:19 2020 +0000
Fixed LoD z depth, added sea level offset
commit b9b06744620114dd5556e73f64fa93c145503a7c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:27:43 2020 +0000
Better LoD smoothing
commit a1aee931e790431560cd2d953ad61d9497072afd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Feb 21 14:52:17 2020 +0100
Adding shadows.
commit 2400786c13dd891c131ed86d48d05df516a8a778
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 13:48:40 2020 +0000
Use world map as LoD source
commit dbf650f504a4c25fbbc2096ac3616c736bf52d23
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Jan 20 00:48:14 2020 +0000
Better clouds at distance
commit 5e6f81b86cdb9730b9b056877b19257075fd5fa8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Jan 19 23:59:02 2020 +0000
sync
commit 745e7540ddb000cc645f612767b337c2ddc3f7c0
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 12:40:48 2019 +0000
Improved cloud falloff mist, faster noise sampling
commit f6a200d0cb866196ba57697466755f9e0c7ea5d8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 10:09:00 2019 +0000
Improved long-range depth precision, removed unnecessary LoD polygons
commit 63d1b2bb2292898d59fb4f4e502201103dfeb86f
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 20:57:46 2019 +0000
Working LoD shader
commit f13d98ee3e58f881e8b978861a67663b59ed91ec
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 11:03:40 2019 +0000
LoD first attempt (stack overflow issue)
2020-08-20 18:34:59 +00:00
|
|
|
|
Veloren0_7_0(WorldMap_0_7_0) = 1,
|
2020-01-18 18:41:37 +00:00
|
|
|
|
}
|
|
|
|
|
|
2020-02-01 20:39:39 +00:00
|
|
|
|
/// Data for the most recent map type. Update this when you add a new map
|
2020-08-25 12:21:25 +00:00
|
|
|
|
/// version.
|
(See sharp/lod-history) LOD, shadows, greedy meshing, new lighting, perf
---
Pretty much a Veloren fork at this point. Here's a high level overview of the changes (will be added to CHANGELOG just before merge).
At a high level this MR incorporates roughly two groups of changes.
The first group consists of new game features: more flexible map sizes, level of detail terrain, shadow maps, and a new lighting
engine. This is "feature work" that (mostly) only adds new things to Veloren, and mostly shouldn't affect old stuff.
The second big group of changes are those addressing the fallout from all the new features. These include performance fixes of
various sorts: the addition of multiple graphics options and optimization of the cheap ones to avoid work, switching all voxel
models to use some variant of greedy meshing, switching over much of our CPU-side vector math to exploit SIMD instructions
(coinciding with a fork of `vek`), and a rewrite of how the UI handles text rendering (coinciding with updates to our fork
of `conrod`). Making Veloren's hardcoded colors appear correct under the new lighting engine also required considerably
changes (TODO: Fill in this section when it's complete).
The second category of changes often heavily touches code owned by other people, including frequently modified code "owned" by a
handful of people, so I recommend that this code be reviewed particularly carefully.
---
At a high level (each will be described in more detail below):
- The world map has been refactored.
- The world size is no longer hardcoded (@zesterer).
- The map generation code was made generic to allow using it outside of the `world` crate (@zesterer).
- On world creation, we now compute *horizon maps* (@zesterer).
- The way we pass the world from the server to the client has been updated (@xMAC94x).
- Artifacts related to image rotation were fixed (@imbris).
- Multiflow rivers were enabled (@zesterer).
- In the process of making changes related to the world map, various incidental fixes and optimizations were required.
- The new *level of detail* feature was added (@zesterer wrote part of this and has checked out the rest).
- A new LOD terrain rendering step was added to the pipeline.
- The LOD terrain quality was made configurable via a graphics setting.
- Horizon maps were used to cast shadows from LOD chunks on both LOD and non-LOD terrain.
- A "voxelization" effect was incorporated into rendered LOD terrain to make it blend better into the world.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Veloren's lighting has been completely overhauled (@zesterer has already checked most of this out).
- A semi-accurate index of refraction was assigned to our materials.
- A new, more realistic, physically based approach to lighting was used using the *Ashikhmin Shirley* BRDF.
- We emulate *atmospheric scattering* using equations designed for measuring solar panel light exposure.
- We attempt to compute *realistic light attenuation* in water using its real material properties.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Point and directional lights now cast realistic shadows, using *shadow mapping.* (@imbris, @zesterer, @Treeco, @YuriMomo)
- Point light shadow maps were added to the rendering pipeline, using geometry shaders and *seamless cube maps*.
- Directional light shadows were added to the rendering pipeline, using LISPSM together with disabling *depth clamping*.
- "Shadow-only" chunks and NPCs were added to prevent shadows from models behind you from disappearing.
- In the process of making changes related to shadow maps, various incidental fixes and optimizations were required.
The addition of shadow maps, LOD terrain, and the new lighting all led to significant performance degradation, on top of other
changes happening in master. Therefore, a large number of performance improvements were also needed:
- The graphics options were made much more flexible and configurable, and shaders were optimize.
- New options were provided for how to render lights and shadows (@Pfauenauge, @zesterer).
- Graphic setting storage and configuration were overhauled to make adding new features easier (@Pfauenauge, @imbris).
- Shaders were rewritten to utilize GLSL's preprocessor to avoid overhead (@zesterer, @YuriMomo).
- In the process of making changes related to providing additional rendering options, various incidental fixes and optimizations were required.
- Voxel model creation was switched to use *greedy meshing.*
- A new voxel meshing method, greedy meshing, was added (@imbris).
- Uses of the older meshing methods were migrated to use greedy meshing (@imbris, @jshipsey, @Pfauenauge).
- New restrictions were added to terrain, figure, and sprites to future proof them for further optimizations (@jshipsey, @Pfauenauge, @zesterer).
- Most positions are now relative to either chunk or player position for better precision (@imbris, @zesterer, @scottc).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- Animation and terrain math were switched to use SIMD where possible.
- Fixes were made to vek to make its SIMD feature usable for us (@zesterer, @imbris).
- The interface and types used in bone animation were changed in various ways (@jshipsey, @Snowram, @Pfauenauge).
- Redundant code generation for body animation is now partly taken care of by a macro (@jshipsey, @Snowram, @Pfauenauge).
- Animation code was modified to to use vek's SIMD representation where possible (@jshipsey, @Snowram, @Pfauenauge).
- Terrain meshing code and shadow map math were also modified to use vek's SIMD representation (@imbris).
- SIMD instruction generation was enabled (@YuriMomo, @jshipsey, @Snowram, @imbris, @Angelonfira, @xMAC94x).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- The way we cache glyphs was completely refactored, fixed, and optimized.
- Our fork of `conrod` was optimized in various ways (@imbris).
- Our fork of `conrod` now exposes whether a widget was updated during the current frame (@imbris).
- Our use of the glyph cache was rewritten for correctness (@imbris).
- A *text cache* was introduced that lets us skip remeshing glyphs that have not changed (@imbris).
- Various changes were made to reduce pressure on the glyph cache, with more planned (@imbris, @Pfauenauge).
- In the process of making changes related to the glyph cache, various incidental fixes and optimizations were required.
- Colors were changed to keep Veloren's look consistent with master.
- Some older tree models were brought back (@Pfauenauge).
- TODO(@Sharp): All hardcoded colors were extracted and made hotloadable.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Hardcoded colors were fixed to conform to Veloren's style.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Color models were fixed to conform to Veloren's style.
A detailed description of the involved changes follows.
---
- The world size is no longer hardcoded. All functions dependent on world size now take a `WorldSizeLg`, which holds the base 2 logarithm of each actual world dimension and is guaranteed to maintain certain properties (outlined in `common/src/terrain/map.rs`). Additionally, many utility functions that utilize the world size were moved into `common` as well (mostly `common/src/terrain/mod.rs`). Finally, the world map format was updated in order to store its size explicitly, with a migration path from the old format that should work whenever the old formatted map was a square (practically always). See `world/src/sim/mod.rs` for these changes.
- The map generation code was made generic to allow using it outside of the `world` crate. The parts of the map generating code that do not need to query the world were moved over to `common/src/terrain/map.rs`, allowing them to be used from the client without creating a dependency on `world`. The rest of it was turned into helper functions in `world/src/sim/map.rs`, which can be passed as closures to the generic map generation code to complete its construction. This also means that colors are now passed in separately to the map generation function. See <https://veloren.net/devblog-78/> for more details.
- On world creation, we now compute *horizon maps*. See the function in `world/src/sim/util.rs`.
Given a height map and a plane intersecting that height map, our horizon maps allow us to encode enough information to reconstruct shadows for each point on the height map using only the *horizon angle* (the angle at which the sun starts to become visible). As Veloren's sun only covers one plane, this is sufficient for encoding sun shadows for LOD terrain, by encoding two angles per chunk (one for each 90 degrees the sun covers). We can also use this for the moon, if we want, since the moon follows the same path. Additionally, we store the *height* of the furthest occluder, to try to make the shadows volumetric; so this means 4 bytes in total for each chunk.
Support for horizon maps has been merged into the map functionality in common as well.
- The way we pass the world from the server to the client has been updated. Rather than passing the prerendered map, we instead pass three maps with values for each chunk; one with the color information, a second with altitude information, and a third with horizon map information. We then reconstruct the map on the client, together with some additional information we send from the server (like the sea level and maximum height). See `common/src/msg/server.rs` for a detailed description of the format of `WorldMapMsg`, and `server/src/libr.rs` and `client/src/lib.rs` for details of the map construction and parsing.
- Artifacts related to image rotation were fixed. See the commit message for commit SHA `cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e` for a detailed explanation. This involved changes to shaders, the addition of a new type of graphic (also reflected in the graphic cache) that allows specifying a border color (which automatically makes the associated texture immutable), and some related fixes. I reproduce the first two paragraphs of the MR description as well:
```
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
```
- Multiflow rivers were enabled.
This does not really need to be part of this MR, and would be easy to revert, but since it seemed to provide a nice improvement it's currently packaged with it.
We already computed multiple outflows from each chunk for erosion purposes long before this MR.
However, we never modified river rendering to be able to handle this case (just a single downhill river flow is complex enough!) so this was not exposed when deciding which chunks were rivers.
Now that
- In the process of making changes related to the world map, various incidental fixes and optimizations were required. Some examples of fixes include making sure terrain is never lowered to below sea level (to make the shadow maps report correct values), fixing map altitudes and colors to understand things like cliffs and "block level" coloring (that doesn'te xist on the column level), and fixing a crashbug when rendering images for the UI where source pixels are strongly rectangular. Some examples of related performance fixes include avoiding allocating a fresh vector for all the maps (i.e. copying it over to change the format from `[u32; n]` to `DynamicImage` and then copying again to convert to `RgbaImage`), and instead using the `gfx::memory::slice` function to accomplish the same thing. These sorts of changes are spread all arond the code.
This includes the additon of a new scene, `voxygen/src/scene/lod.rs`, a new pipeline `voxygen/src/render/pipeline/lod_terrain.rs`, and new shaders `assets/vxygen/shaders/lod-terrain-vert.glsl` and `assets/vxygen/shaders/lod-terrain-frag.glsl`, as well as associated changes to the renderer in `voxygen/src/render/renderer.rs`.
The main idea behind our initial approach to LOD was to take the world data we now get from the server (altitude, color, and horizon mapping).
- Some previously computed values were turned into shader uniforms for better prediction on weak processors. (@zesterer)
- Calls to power or trig functions were removed or replaced with multiplications, where possible.
- After some deliberation
- To properly handle sprite "waving" for nearby sprites,
We explicitly designed the greedy meshing system with figures and sprites in mind.
In both cases, we want to be able to *efficiently* pack many different models into the same texture, especially in cases where we know
we will either not be removing any of the grouped-together from the models from the texture, or will remove all of them at once (so
they can be packed into some specific subtexture).
For sprites, since we know every model in advance and never intend to deallocate them, we currently pack them all as efficiently as
possible into one giant tetxure atlas. However, in the future we might opt to pack them slightly less efficiently in exchange for
shrinking the sprite vertex size.
For figures, we pack all the textures for each *model* into the same atlas.
is a global texture atlas used for every sprite, and for figures which is why we have the ability to mesh multiple
models to the same texture area (using the simple texture atlas allocator) without requiring intermediate vector allocations.
This is accomplished by delaying the time when we actually write the color and light data to the texture until *after* all the
model vertices have been meshed; then, we can just allocate the whole color/light array at once, making the atlas we use an
exact fit. In computer science-y terms, we accomplish this delay by, after we perform the initial greedy meshing (without
texture information), not continuing to create the texture data, but instead constructing a *continuation*--that is, a function
that, when called, will execute the rest of the computation. We push this continuation (which in Rust terms is a `FnOnce` closure
that takes the `ColLightsInfo` that it is supposed to write to as context) onto a
onto a vector
resizing. To allow for suspended writes to texture data, Rust pointed out to me that the continuation that would eventually write the color and light data to the texture atlas (the one that is shared by all models sharing the same greedy mesher) would have to *own* whatever data it mshed. Because we often generate the model data to mesh as a temporary in `voxygen/src/load.rs`, the
- Matrix multiplications in the shader were reduced for figure data (@zesterer).
- Vertex "waves" for fluid data were removed.
- Terrain "bending" near edges was removed.
- Scaling was fixed to make sure empty space was not introduced in a space previously occupied by a block. It was also changed to take ownership of its voxel data,
rather than sharing it, to let it be used with meshing.
- Rust's nightly version was bumped in order to use the `array_map` function, which lets us reuse more code between the simple map and `FigureModelCache`.
- PositionedGlyph::standalone.
---
I tried to cite sources in many cases[^realtime],[^lloyd],[^lispsm],[^pbrt],[^greedy],[^tjunctions]
where I needed features from elsewhere but I am particularly grateful for the following resources,
esepcially where they have accompanying source code. I linked all of them that are accessible to the public (those that are not were
obtained through legal means).
[^realtime]: Eisemann, Elmar, Michael Schwarz, Ulf Assarsson, Michael Wimmer. Real-Time Shadows. A K Peters/CRC Press (T&F), 20160419.
[^lloyd]: Lloyd,B. 2007. [Logarithmic perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). PhD thesis, University of North Carolina.
[^lispsm]: Wimmer, M., Scherzer, D., and Purgathofer, W. 2004. [Light space perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). In Proceedings of Eurographics Symposium on Rendering 2004, pp. 143– 152.
[^pbrt]: Pharr, Matt, et al. [http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf](Physically Based Rendering: From Theory to Implementation). Third edition, Morgan Kaufmann Publishers/Elsevier, 2017.
[^greedy]: mikolalysenko. “Meshing in a Minecraft Game.” 0 FPS, 30 June 2012, <https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/>.
[^tjunctions]: blackflux. “Meshing in Voxel Engines – Part 1.” Blackflux.Com, 23 Feb. 2014, <https://blackflux.wordpress.com/2014/02/23/meshing-in-voxel-engines-part-1/>.
I am also especially grateful to Khronos, Wikiepdia, and stackoverflow for answering many of my specific questions while writing the MR.
---
Squashed commit of the following:
commit 300505e7305a2fdac722a808ee8538323f215f39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 18:46:25 2020 +0200
Fixing cargo doc and typo in CHANGELOG.
commit ec0aeb18e8499d7d84ef818331b4b65c3d76cea6
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 15:38:50 2020 +0200
Hopefully final commit for the LOD branch.
commit 5e8ea0b1eaac02903a02feb2eb038d195de4872f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 10:14:26 2020 +0200
Falling back to power as stopgap.
commit e44a1cbf46504ee9931a01bdc9033e145500d557
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 09:25:41 2020 +0200
Address imbris feedback.
Temporarily disables shiny water, lowers max VD.
These restrictions will be lifted soon after merging.
commit 561e25778a108ac3712f5ec2ce3a51234c4430d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 08:31:13 2020 +0200
Tweaking shaders a bit.
commit 7d19259078ce0dd7b3742ad7d0cb3fab3ece3fdc
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:59:43 2020 +0200
Fix view example as well.
commit 051cd4934e0fad2c0b15db4380a4189fa318679f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:29:06 2020 +0200
Fix meshing benchmark.
commit c95e07db3b4dcca285678985e65e31b927cb1c61
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 05:46:22 2020 +0200
Address MR feedback, fix scene clouds.
commit 1bfb816cabdb3ffc1e507a009c2d98696b4b573a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:39:36 2020 +0200
Incorporating Pfau's figure color changes.
New eyes and new humanoid colors.
commit 3f9b89a3ac7b3356b1dba0d1a8f6541357f81469
Merge: e2f5162e4 62c53963a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:29:41 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit e2f5162e4f96f4124aa43488f7245d341b3dcfd4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:28:38 2020 +0200
World colors are all hotloadable.
They live in assets/world/style/colors.ron.
Only a small handful of hardcoed colors remain in World; they are either
part of the map, or difficult to disentangle from the rest of the
computation. Comments are made where appropriate.
commit 62c53963abe1975009d34a8f9515a355bef24f31
Author: Marcel Märtens <marcel.cochem@googlemail.com>
Date: Wed Aug 19 15:59:00 2020 +0200
replace pretty_env_logger with tracing
commit 5b1625f99d9586fe80e2232f583ec5af9f953099
Merge: d71003acd 4942b5b39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:15:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit d71003acdabeff970b3928e97c26af6847b5b78e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:14:34 2020 +0200
Hotloading colors, part 1: colors in common.
Currently, this just entails humanoid colors. There are only three
colors not handled; the light emitter colors in
common/src/comp/inventory/item/tool.rs. These don't seem important
enough to me to warrant making hotloadable, at least not right now, but
if it's needed later we can always add them to the file.
commit 63b5e0e553eb2ea49276f192a6fc7dd65254270d
Merge: c32b337a4 6d2c4b9c1
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 13:05:37 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c32b337a46e10d9de473d178a94a3ccd61c39bb3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:52:04 2020 +0200
Fixing LOD grid, for real.
commit a166ae0360395387e09fb35a1f84210c2ce5ec24
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:28:05 2020 +0200
Addressing imbris's initial feedback.
Fixes two minor bugs: explosion particles were no longer spawning
randomly, and LOD grids were not perfectly even.
commit 4cbad004f44060994252dd3d38647a14a589712f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:27:58 2020 +0200
Bumping nightly per request.
commit 548680276aac77c25d43d16b5622f847d474dbef
Merge: acc098604 8f8b20c91
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:26:06 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit acc0986040589a3492f88a740bc3c3fc693b26d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:28:32 2020 +0200
Lower resolution due to lying drivers.
commit d3b878de2a52c358d2944a6bbd0555dad7fbdb10
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:15:38 2020 +0200
Fix issues msh encountered with Intel 4600.
commit 10245e0c1b0cb6fae10d86409435364edc6102ef
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 21:15:02 2020 +0200
Merge more models into one mesh than we did previously.
commit 3155c31e663c52ae5c3a53d5fb5665892a1a498a
Merge: 7204cc8a7 3c199280e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:35:22 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7204cc8a7a4f74a30306bd205d9834fee4bb944f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:34:43 2020 +0200
Fix not yet done NPC animations.
This forces them all to be the idle animation if not specified.
This fixes issues where you'd have giant NPCs in water.
commit bc83360f2a08918f19d417b5f772e1ff554dba08
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 19:36:37 2020 +0200
Try to fix some bugs:
- Z fighting with LOD terrain and water.
- Audio SFX not playing.
commit 1fd104aa603bf3781b6526a5cada46aeca3049dd
Merge: 862df3c99 7c2c392a3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 12:02:31 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 862df3c9976c4da9bd7cfd784f1a85973127968a
Merge: 0a4218ed9 75c1d4401
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 05:52:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0a4218ed9d541a2b34c133351bea38a99ddf4ea7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 22:27:14 2020 +0200
Fix particle depth.
commit f51dfdeb442d0dd5243dd2f344fa4be295bd0875
Merge: c6251a956 5e6dc0471
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:19:04 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit c6251a956ad376400dca5c23420cf8d213dc8fdf
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:15:46 2020 +0200
Cache figures more intelligently.
Cache figures for longer, and don't cache character states for the
player except where they actually affect the rendered model.
commit 0ed801d5404982c6fb63b1eaa4567d908b294c9d
Merge: c11b9bdf0 eea64f78f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 16:32:24 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c11b9bdf0a53bf9884d2f5a48fec9b01d582df1a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 11:47:15 2020 +0200
Remove unneeded Clippy annotation.
commit 16aa9ef40af56d69289d00aafb3deadfb8bd4f35
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 8 00:53:02 2020 +0200
Fix hotloading and Clippy.
commit 3dc973e0be5b758da1e9805eb764ad401374cd0c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 23:50:27 2020 +0200
Major speedups with SIMD.
commit fba64a7d93d5a96077ce87287bbce6ab9b7fbcae
Merge: 76429d00e d1e10b178
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:19 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 76429d00eea00d212fbd672a84ee91e75b19b938
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:10 2020 +0200
Add clippy.toml.
commit c79f512f84dbb83cb82b7954db68ff241dfd8e41
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 11:55:20 2020 +0200
Fix all clippy issues, clean up Rust code.
commit 6f90e010b3fbefb53b0d632e819931350015b6b8
Merge: 77a8c7c26 5929cfa5c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:30 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 77a8c7c267d3f44a1a62bd6b2274359973c5e4d4
Merge: b44e44232 44febaabd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:10 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 5929cfa5c713aa392110bbb62407f76caf53c3df
Author: jshipsey <jshipsey18@gmail.com>
Date: Thu Aug 6 20:47:27 2020 -0400
fixed in-hand arrow bug
commit b44e442325d828f1cd564d66908f89d09e80474b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 6 13:40:35 2020 +0200
Miscellaneous performance improvements.
commit be37acf287c1360d8085862526ac3365ffd1d768
Merge: 125d7fc6c c11876547
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 05:49:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 125d7fc6c4dcd8c8c5f27b8268a4d64f409f3644
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 04:55:31 2020 +0200
Abstract over simd vs. repr_c vectors.
Also some minor improvements to Event size.
commit d4d4956e9252e1241ce110b2aa85076c6b1e2a23
Merge: 5f3b7294a aced5f979
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:56:54 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 5f3b7294af1f8533edc2620b58863c248e2b07af
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:43:52 2020 +0200
Fix formatting issues I missed before.
commit a428a3ebba70dcab63dd0f8cd983120c90617271
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:41:51 2020 +0200
Fix clippy warnings, part 1.
There aer still a bunch of type too complex and
function takes too many arguments warnings that I'll fix later
(or ignore, since in the one case I did fix a function takes too
many arguments warning I think it made the code *less* readable).
commit ba54307540ed8a937ac08209730284fc653af85b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 30 13:22:42 2020 +0200
Fix light animations so they are removed when the light turns off.
commit 7e0f4bcbf0f4717145d8beac40d52e3acebbe2aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 21:10:20 2020 +0200
Fix crash in edge case for pixel art.
commit 56da06f7a351e2b949e9b014a90b974d511a0924
Merge: cf74d55f2 9f53a4a19
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:56:52 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:29:52 2020 +0200
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
The first concern was addressed by fixing the dimensions of the map
images drawn from the UI (so that we always use a square source
rectangle, rather than a rectangular one according to the dimensions of
the map). We also fixed the way rotation was done in the fragment
shader for north-facing sources to make it properly handle aspect ratio
(this was already done for north-facing targets). Together, these fix
rendering issues peculiar to rectangular maps.
The second and third concerns were jointly addressed by adding an
optional border color to every 2D image drawn by the UI. This turns
out not to waste extra space even though we hold a full f32 color
(to avoid an extra dependency on gfx's PackedColor), since voxel
images already take up more space than Optiion<[f32; 4]> requires.
This is then implemented automatically using the "border color"
wrapping method in the attached sampler.
Since this is implemented in graphics hardware, it only works (at
least naively) if the actual image bounds match the texture bounds.
Therefore, we altered the way the graphics cache stores images
with a border color to guarantee that they are always in their own
texture, whose size exactly matches their extent. Since the easiest
currently exposed way to set a border color is to do so for an
immutable texture, we went a bit further and added a new "immutable"
texture storage type used for these cases; currently, it is always
and automatically used only when there is a specified border color,
but in theory there's no reason we couldn't provide immutable-only
images that use the default wrapping mdoe (though clamp to border
is admittedly not a great default).
To fix the maps case specifically, we set the border color to a
translucent version of the ocean border color. This may need
tweaking going forward, which shouldn't be hard.
As part of this process, we had to modify graphics replacement to
make sure immutable images are *removed* when invalidated, rather
than just having a validity flag unset (this is normally done by
the UI to try to reuse allocations in place if images are updated
in benign ways, since the texture atlases used for Ui do not
support deallocation; currently this is only used for item images,
so there should be no overlap with immutable image replacement,
so this was purely precautionary).
Since we were already touching the relevant code, we also updated
the image dependency to a newer version that provides more ways
to avoid allocations, and made a few other changes that should
hopefully eliminate redundant most of the intermediate buffer
allocations we were performing for what should be zero-cost
conversions. This may slightly improve performance in some
cases.
commit ad18ce939940a8c697270f6e9b94db9942fd8295
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 13:21:09 2020 +0200
Fix continent scale hack.
commit 36b1cb074f5b195aebd7dbbc3da7f0246a1a18ec
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 12:11:40 2020 +0200
Enable loading different sized maps without a recompile.
We may want to tweak the effects of the continent_scale_hack.
commit 13b6d4d534cc4814b7cb3294ca41bbfea0a6b186
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 10:55:48 2020 +0200
Removing WORLD_SIZE, part 1.
Erased almost every instance of WORLD_SIZE and replaced it with a local
power of two, map_size_lg (which respects certain invariants; see
common/src/terrain/map.rs for more details about MapSizeLg). This also
means we can avoid a dependency on the world crate from client, as
desired.
Now that the rest of the code is not expecting a fixed WORLD_SIZE, the
next step is to arrange for maps to store their world size, and to use
that world size as a basis prior to loading the map (as well, probably,
as prior to configuring some of the noise functions).
commit 30b1d2c6428230a9eaa0d749cdcbbd6f1cbccd78
Merge: 7d56ba31b 1377b369f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:58 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 7d56ba31b445441461b28a07fc495d7d4f047c17
Merge: 2101113b4 598f14b25
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 1377b369f6db2258e910d467a5740f31789e3ded
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sun Jul 19 23:25:38 2020 +0200
more saturated pumpkins
commit ae8d50527f93bb0616c2ad46ce4dacb63bc37c6d
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sat Jul 18 20:29:56 2020 +0200
acacia models
commit 2101113b467e691de787392d7f20f1745f5637bd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 18 18:55:25 2020 +0200
Higher detail LOD.
commit add2cfae04b4385fa5590e11e2bd5229d9dee0aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 16 01:57:39 2020 +0200
Revert some irrelevant stuff.
commit 2e2ab3dc1eaa59a4aef7f8d34a53d8aae4c8553a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 15 13:30:49 2020 +0200
Fixing various things about shadows.
* Correcting optimal LISPSM parameter.
* Figure shadows are cast when they're not visible.
* Chunk shadows stay cast until you look away.
* Seamless cubemaps for point lights.
* Etc.
commit 6c31e6b56217274285b597af297036691ea5d897
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 19:50:26 2020 +0200
Fix shadow creation.
commit 6332cbe006115ae205597529cd8bbccd146c2cca
Merge: be438657c 930e0028b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:47:00 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit be438657c33d7b5bfb0a9582c3ed3fd366637323
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:28:08 2020 +0200
Tweaks to shadows.
Added shadow map resolution configuration, added seamless cubemaps,
documented all existing rendering options, and fixed a few Clippy
errors.
commit 23b4058906013c7d2a40c286e20e32c5fbd897ed
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 10:11:19 2020 +0200
Fix moon, use nonlinear noise for terrain.
Note that the latter has a bit of performance cost.
commit 7fbe5cbfbb9dc29607957b8e62f432a4deed193d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:23:02 2020 +0200
Address lies about max texture size.
commit bcfc62b5e13a1cdd83f57535fde4694720bebfd9
Merge: 75e3626a7 18a08e8fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:22:08 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 75e3626a785919f43fdcf2127c2b10e3e4df2f9f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:21:52 2020 +0200
OpenGL 3.3 minimum.
commit 18a08e8fe2739f02af99a5d2cb4e7c38c49e858b
Author: Monty Marz <m.marzouq@gmx.de>
Date: Tue Jul 7 23:57:52 2020 +0200
settings localization
commit 90c5d1ca3620092bc3ae10b2211489eb1cf6f5e8
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 21:11:48 2020 +0200
Lower near distance.
commit 0e66f02b25aaddaa2dfddbbc89cd67de54a9a7b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 20:09:01 2020 +0200
All sprites sway in the wind now.
commit db1401a6910bf42dcf502462c90038752ff5fbdb
Merge: 69e508d8c e8b4b29d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 19:34:17 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 69e508d8c94d8973033817ca86f357e466fc7c4d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 18:41:37 2020 +0200
Make it easy to switch to SIMD for math.
commit ffe0f5928c7a7e87d00cb5426b3b1d831d7e02fd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 21:21:12 2020 +0200
Fix some issues with underwater rendering.
commit bfda6da42f38fd02c31ee92c81ab785a3e50c2a0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 19:17:59 2020 +0200
Fix some minor display issues.
commit 0ed752e087968cf901301884aaeae698e32ef8a5
Merge: ccc6a06a8 518edcb85
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:14:21 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit ccc6a06a8d4504d6b9f7af7905a414d2ee06ab76
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:04:34 2020 +0200
Some minor changes.
commit 4e020246702889269efe1a191788992164c508d6
Merge: 50a64d927 e05c9267a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 16:17:40 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 50a64d927e6c4f4b0e4688e4cbfca694bc3f922a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 13:07:03 2020 +0200
Fix far plane.
commit 7dd06da34cae8f9ea3b6c889fe965181f3fd3949
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:25:35 2020 +0200
Add shadows.glsl.
commit 618a18c998778bf871b905a74657440fcc384c80
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:10:22 2020 +0200
Adding shadows, greedy meshing, and more.
commit eaea83fe6a5cb1cb0ba8beef888183c718258496
Merge: 267018495 2f89b863e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 22:47:07 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 2670184954a13e4a9e7a4e35ba79aac0c5fac2f7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 21:20:01 2020 +0200
Make civsim and sites deterministic.
For anything in worldgen where you use a HashMap, *please* think
carefully about which hasher you are going to use! This is
especially true if (for some reason) you are depending on hashmap
iteration order remaining stable for some aspect of worldgen.
commit f8376fd5dc72b4a9c2f51a6b4570d59c8b8e9343
Merge: 654f7e049 cdee191dd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 17:53:57 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 654f7e049258d9da27c09608bbe6a46ffa8787e5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed May 20 21:22:30 2020 +0200
Correct backface culling.
commit 560501df05ca725409b0f2e4eb31bdfdc15fd0c7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue May 19 17:22:06 2020 +0200
Greedy messhing for shadows.
commit a4d87e1875ca543436e6bbbeb20348facc5a52d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun May 17 05:59:00 2020 +0200
Shadow maps work for lantern.
commit 243d0837b8a3b08172c9a3c348d964d7ddc2a0a8
Merge: 04382dc28 71dd520cd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:53:13 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 04382dc28632b6c66e8821f6870c0daaa1c1901a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:22:17 2020 +0200
WIP: better graphics config, better LOD, shadow maps.
commit 22ddbad3eb32bfa70f0932176022208fe67ded81
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 18:54:09 2020 +0200
Minor shader fixes.
commit 746a10e8d01ac235f994b0cde78fa48998602a1f
Merge: 0f4a0e763 40ab94673
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 04:02:09 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0f4a0e763db3afbdc4fb0558611f38326ca87151
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 23:03:24 2020 +0200
Switch back to pop-in terrain.
commit dd74fa7e4a53667b38811d7aec58d7f6a68889bb
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 22:58:55 2020 +0200
LOD shading closer to voxel shading.
commit ef67bd58ba0bdaf622b078892d768263b6cba268
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 28 20:49:03 2020 +0200
Experimental underwater lighting.
commit 2c5ad9d07605e80d5fd5679dd3a5d70c605b86a9
Merge: 748279835 303967a6f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 22:35:24 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7482798354eda18c8207950080fc24d443a369de
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 21:59:55 2020 +0200
Replace discard in figure-frag.
commit d83b4ae69be4912f69bf7835f509c68a1c7770a4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:45:57 2020 +0200
Fix sprite lighting, HDR from focus_pos.
commit 0594238004f116274905fa0ed7c2b6c417ed1d29
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:14:10 2020 +0200
Proper HDR from point lights.
commit 48c93d2b41ce5743103d18e76cc228f5ac766492
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 14:01:43 2020 +0200
Brighter ambiance, darker LOD shadows.
commit e0452e895ccfa8a43f368cae3b8b8aedc24dad93
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 13:13:23 2020 +0200
More proper HDR.
commit 4c6da3ed16cfeebb455e40da5f557b4af9a499d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 00:13:10 2020 +0200
Trying LOD noise.
commit 682a3d74c85df5503ffe1fc1cc891bce789df1ad
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 23:11:08 2020 +0200
Fix LOD heights in towns.
commit cc39e5734e8b18f9077bf42e66337c1319dd6b6e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 21:01:23 2020 +0200
More LOD fixes.
commit 8116b21c2e51c836e77894e309ac273caf2917b3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:54:43 2020 +0200
I like this coloring.
commit bc2560ea90b36f4b46190005344232d993043ac3
Merge: 14effdd5d e690efe71
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:48:33 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 14effdd5db8747fcf3eb34f03b46b7792e92d1c5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:24:35 2020 +0200
Re-saturate.
commit 48a643955d4435b78179acba0beb4a979905cc31
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:23:57 2020 +0200
Various fixes.
commit f7b497a0c25f4ad4682c71dd1ed6f608052feb9b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 03:22:49 2020 +0200
Render figures again.
commit 44e4aad48deba8266b9f8bdfd3db096b381f5327
Merge: e6f0a5a98 9ec319a18
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 02:01:04 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit e6f0a5a981a82533ba188fff0a54ce98577bb152
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 24 16:12:20 2020 +0200
Add atmospheric scattering.
commit f2953087f691a8edbc001cb98ebf5059fc6f8ac0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 23 00:01:20 2020 +0200
Fix shadowing for specular reflections.
commit ddd4a67a9799b8d08c7dc0c2bec90621c2bed0e3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Apr 22 22:56:12 2020 +0200
HDR fixes.
commit 1015e60deef3c447381996277df7496707a63bd0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 21 18:25:19 2020 +0200
More lighting changes.
commit 80c264abd111fb237e57843efcb5c071d4f84613
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 13 00:29:59 2020 +0200
Lighting experiments.
commit 8414987e589dd5102bad89762a3adaccc0bfe957
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 9 02:38:40 2020 +0200
WIP -- lighting changes and soft shadows.
commit 9cd2b3fb0d6b49776c6dfe463e4169637250b11a
Merge: c7ea687eb 8b149ad11
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:29 2020 +0200
Merge branch 'sharp/new-lighting' into sharp/small-fixes
commit c7ea687ebbc5aace1b455f134a5bf49ce2c7434a
Merge: 476441531 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:02 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 8b149ad11ad4bb75018fcf9519baec27d1c95951
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:32:39 2020 +0200
Trying out a new lighting model.
commit b0ac9f36f755dd06f7c17c46150568064790864f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 07:56:11 2020 +0200
Use bicubic interpolation for terrain.
commit f6fc9307a121514b614bc50ef8eb055953e7da8a
Merge: 33140a295 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 05:01:41 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 4764415312aae6e9ac2d00e86e84577cb958f1ab
Merge: ed2d0111d 13388ee6a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 04:54:48 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 13388ee6a42943f3f79a9cb488346cef18e272fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 20:30:08 2020 +0200
Various fixes (to coloring and to soft shadows).
commit fbd084a94a067082a87cd6d28b82054709bc9265
Merge: 5a089863b 4fdf6896a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 18:50:38 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/map-colors
commit ed2d0111d994262ae836d84d1fe5a45e4de72a0b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 06:49:27 2020 +0200
Combining colors and LOD.
commit 88342640c6b835114d01c797b89fdede3b0a2108
Merge: 33140a295 5a089863b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:49:20 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 33140a2951b8212725f42c758b277aaec4d888f7
Merge: 4c65a5aed f34d4b379
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:36:21 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 5a089863beb01d4794bbe3580ada47b278715ea2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 03:17:49 2020 +0200
Making maps brighter.
This is probably not the right way to do it, but oh well!
commit 32b2c99109dd486aa922886081068f9c550c83f2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 02:46:36 2020 +0200
Horizon mapping and "layered" map generation.
Horizon mapping is a method of shadow mapping specific to height maps.
It can handle any angle between 0 and 90 degrees from the ground, as
long as know the horizontal direction in advance, by remembering only a
single angle (the "horizon angle" of the shadow map). More is explained
in common/src/msg/server.rs. We also remember the approximate height of
the largest occluder, to try to be able to generate soft shadows and
create a vertical position where the shadows can't go higher.
Additionally, map generation has been reworked. Instead of computing
everything from explicit samples, we pass in sampling functions that
return exactly what the map generator needs. This allows us to cleanly
separate the way we sample things like altitudes and colors from the map
generation process. We exploit this to generate maps *partially* on the
server (with colors and rivers, but not shading). We can then send the
partially completed map to the client, which can combine it with shadow
information to generate the final map. This is useful for two reasons:
first, it makes sure the client can apply shadow information by itself,
and second, it lets us pass the unshaded map for use with level of
detail functionality.
For similar reasons, river generation is split
out into its own layer, but for now we opt to still generate rivers on
the server (since the river wire format is more complicated to compress
and may require some extra work to make sure we have enough precision to
draw rivers well enough for LoD).
Finally, the mostly ad-hoc lighting we were performing has been (mostly)
replaced with explicit Phong reflection shading (including specular
highlights). Regularizing this seems useful and helps clarify the
"meaning" of the various light intensities, and helps us keep a more
physically plausible basis. However, its interaction with soft shadows
is still imperfect, and it's not yet clear to me what we need to do to
turn this into something useful for LoD.
commit f8926a5737ddc51f3d585c651a64c43677aae0f4
Merge: a1aee931e 875ae6ced
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Mar 13 13:32:42 2020 +0100
Merge remote-tracking branch 'origin/master' into sharp/map-colors
commit 4c65a5aed353b119aea65a2aaeb94549b67beb42
Author: Treeco <5021038-Treeco@users.noreply.gitlab.com>
Date: Mon Feb 24 16:48:05 2020 +0000
Made LOD setting slider exponential
commit 2fa7b2d20d7233dc8bfd64f9f7f54617575248f1
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 17:49:53 2020 +0000
Added mist to LoD
commit aab059a450b5f635777129ff82cc15b662965c3c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 15:14:06 2020 +0000
Added LoD slider
commit 779c36b538121c5ade3633ae5cb67bb14c8c3877
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:54:55 2020 +0000
Reduced cost of vertex pushing
commit 9fea150473906b166365b738ebcea07c697daf3d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:38:53 2020 +0000
Fixed maths, improved LoD resolution
commit 5481df38fea5bf183ff376a3337179cfaa5233dc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 11:22:50 2020 +0000
Dynamically relocate LoD vertices to enhance details
commit a3e36a50ababd615da7db1b26158c7906a5def01
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 18:13:51 2020 +0000
Simpler terrain spiral rendering
commit 255f450ae9ac8763db4bede075fb409161ed57cc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:53:17 2020 +0000
Better LoD precision
commit 3d027aebe812a5b8658a4eb8123dc9f61b3776d2
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:04:03 2020 +0000
Better falloff
commit be775c9484b457b2c0b1a494aec03392d0c70e76
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 15:30:45 2020 +0000
Applied good ideas from experimental branch
commit 58587b68545a23c5c04ab4574a4b94b3bc982246
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 16:15:13 2020 +0000
Minor fixes to LoD merging
commit 7b42aebd709c14df2db766aad61d9280ad24d84d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 15:04:44 2020 +0000
Capped LoD dragging
commit 8aafc559f87124e1ea5ca6e3ddc2aa0c242d793c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:54:37 2020 +0000
Better blending between LoD and terrain border
commit edd3455d5161792d87ddc8eadc0ecbad5532b284
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:40:19 2020 +0000
Fixed LoD z depth, added sea level offset
commit b9b06744620114dd5556e73f64fa93c145503a7c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:27:43 2020 +0000
Better LoD smoothing
commit a1aee931e790431560cd2d953ad61d9497072afd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Feb 21 14:52:17 2020 +0100
Adding shadows.
commit 2400786c13dd891c131ed86d48d05df516a8a778
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 13:48:40 2020 +0000
Use world map as LoD source
commit dbf650f504a4c25fbbc2096ac3616c736bf52d23
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Jan 20 00:48:14 2020 +0000
Better clouds at distance
commit 5e6f81b86cdb9730b9b056877b19257075fd5fa8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Jan 19 23:59:02 2020 +0000
sync
commit 745e7540ddb000cc645f612767b337c2ddc3f7c0
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 12:40:48 2019 +0000
Improved cloud falloff mist, faster noise sampling
commit f6a200d0cb866196ba57697466755f9e0c7ea5d8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 10:09:00 2019 +0000
Improved long-range depth precision, removed unnecessary LoD polygons
commit 63d1b2bb2292898d59fb4f4e502201103dfeb86f
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 20:57:46 2019 +0000
Working LoD shader
commit f13d98ee3e58f881e8b978861a67663b59ed91ec
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 11:03:40 2019 +0000
LoD first attempt (stack overflow issue)
2020-08-20 18:34:59 +00:00
|
|
|
|
pub type ModernMap = WorldMap_0_7_0;
|
2020-01-18 18:41:37 +00:00
|
|
|
|
|
2020-01-20 18:19:06 +00:00
|
|
|
|
/// The default world map.
|
|
|
|
|
///
|
|
|
|
|
/// TODO: Consider using some naming convention to automatically change this
|
|
|
|
|
/// with changing versions, or at least keep it in a constant somewhere that's
|
|
|
|
|
/// easy to change.
|
2020-06-10 19:47:36 +00:00
|
|
|
|
#[allow(clippy::redundant_static_lifetimes)] // TODO: Pending review in #587
|
2020-05-13 15:50:58 +00:00
|
|
|
|
pub const DEFAULT_WORLD_MAP: &'static str = "world.map.veloren_0_6_0_0";
|
2020-01-20 18:19:06 +00:00
|
|
|
|
|
2020-01-18 18:41:37 +00:00
|
|
|
|
impl WorldFileLegacy {
|
|
|
|
|
#[inline]
|
|
|
|
|
/// Idea: each map type except the latest knows how to transform
|
|
|
|
|
/// into the the subsequent map version, and each map type including the
|
|
|
|
|
/// latest exposes an "into_modern()" method that converts this map type
|
2020-02-01 20:39:39 +00:00
|
|
|
|
/// to the modern map type. Thus, to migrate a map from an old format to a
|
|
|
|
|
/// new format, we just need to transform the old format to the
|
|
|
|
|
/// subsequent map version, and then call .into_modern() on that--this
|
|
|
|
|
/// should construct a call chain that ultimately ends up with a modern
|
|
|
|
|
/// version.
|
2020-01-18 18:41:37 +00:00
|
|
|
|
pub fn into_modern(self) -> Result<ModernMap, WorldFileError> {
|
2020-08-25 12:21:25 +00:00
|
|
|
|
// NOTE: At this point, we assume that any remaining legacy maps were 1024 ×
|
(See sharp/lod-history) LOD, shadows, greedy meshing, new lighting, perf
---
Pretty much a Veloren fork at this point. Here's a high level overview of the changes (will be added to CHANGELOG just before merge).
At a high level this MR incorporates roughly two groups of changes.
The first group consists of new game features: more flexible map sizes, level of detail terrain, shadow maps, and a new lighting
engine. This is "feature work" that (mostly) only adds new things to Veloren, and mostly shouldn't affect old stuff.
The second big group of changes are those addressing the fallout from all the new features. These include performance fixes of
various sorts: the addition of multiple graphics options and optimization of the cheap ones to avoid work, switching all voxel
models to use some variant of greedy meshing, switching over much of our CPU-side vector math to exploit SIMD instructions
(coinciding with a fork of `vek`), and a rewrite of how the UI handles text rendering (coinciding with updates to our fork
of `conrod`). Making Veloren's hardcoded colors appear correct under the new lighting engine also required considerably
changes (TODO: Fill in this section when it's complete).
The second category of changes often heavily touches code owned by other people, including frequently modified code "owned" by a
handful of people, so I recommend that this code be reviewed particularly carefully.
---
At a high level (each will be described in more detail below):
- The world map has been refactored.
- The world size is no longer hardcoded (@zesterer).
- The map generation code was made generic to allow using it outside of the `world` crate (@zesterer).
- On world creation, we now compute *horizon maps* (@zesterer).
- The way we pass the world from the server to the client has been updated (@xMAC94x).
- Artifacts related to image rotation were fixed (@imbris).
- Multiflow rivers were enabled (@zesterer).
- In the process of making changes related to the world map, various incidental fixes and optimizations were required.
- The new *level of detail* feature was added (@zesterer wrote part of this and has checked out the rest).
- A new LOD terrain rendering step was added to the pipeline.
- The LOD terrain quality was made configurable via a graphics setting.
- Horizon maps were used to cast shadows from LOD chunks on both LOD and non-LOD terrain.
- A "voxelization" effect was incorporated into rendered LOD terrain to make it blend better into the world.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Veloren's lighting has been completely overhauled (@zesterer has already checked most of this out).
- A semi-accurate index of refraction was assigned to our materials.
- A new, more realistic, physically based approach to lighting was used using the *Ashikhmin Shirley* BRDF.
- We emulate *atmospheric scattering* using equations designed for measuring solar panel light exposure.
- We attempt to compute *realistic light attenuation* in water using its real material properties.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Point and directional lights now cast realistic shadows, using *shadow mapping.* (@imbris, @zesterer, @Treeco, @YuriMomo)
- Point light shadow maps were added to the rendering pipeline, using geometry shaders and *seamless cube maps*.
- Directional light shadows were added to the rendering pipeline, using LISPSM together with disabling *depth clamping*.
- "Shadow-only" chunks and NPCs were added to prevent shadows from models behind you from disappearing.
- In the process of making changes related to shadow maps, various incidental fixes and optimizations were required.
The addition of shadow maps, LOD terrain, and the new lighting all led to significant performance degradation, on top of other
changes happening in master. Therefore, a large number of performance improvements were also needed:
- The graphics options were made much more flexible and configurable, and shaders were optimize.
- New options were provided for how to render lights and shadows (@Pfauenauge, @zesterer).
- Graphic setting storage and configuration were overhauled to make adding new features easier (@Pfauenauge, @imbris).
- Shaders were rewritten to utilize GLSL's preprocessor to avoid overhead (@zesterer, @YuriMomo).
- In the process of making changes related to providing additional rendering options, various incidental fixes and optimizations were required.
- Voxel model creation was switched to use *greedy meshing.*
- A new voxel meshing method, greedy meshing, was added (@imbris).
- Uses of the older meshing methods were migrated to use greedy meshing (@imbris, @jshipsey, @Pfauenauge).
- New restrictions were added to terrain, figure, and sprites to future proof them for further optimizations (@jshipsey, @Pfauenauge, @zesterer).
- Most positions are now relative to either chunk or player position for better precision (@imbris, @zesterer, @scottc).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- Animation and terrain math were switched to use SIMD where possible.
- Fixes were made to vek to make its SIMD feature usable for us (@zesterer, @imbris).
- The interface and types used in bone animation were changed in various ways (@jshipsey, @Snowram, @Pfauenauge).
- Redundant code generation for body animation is now partly taken care of by a macro (@jshipsey, @Snowram, @Pfauenauge).
- Animation code was modified to to use vek's SIMD representation where possible (@jshipsey, @Snowram, @Pfauenauge).
- Terrain meshing code and shadow map math were also modified to use vek's SIMD representation (@imbris).
- SIMD instruction generation was enabled (@YuriMomo, @jshipsey, @Snowram, @imbris, @Angelonfira, @xMAC94x).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- The way we cache glyphs was completely refactored, fixed, and optimized.
- Our fork of `conrod` was optimized in various ways (@imbris).
- Our fork of `conrod` now exposes whether a widget was updated during the current frame (@imbris).
- Our use of the glyph cache was rewritten for correctness (@imbris).
- A *text cache* was introduced that lets us skip remeshing glyphs that have not changed (@imbris).
- Various changes were made to reduce pressure on the glyph cache, with more planned (@imbris, @Pfauenauge).
- In the process of making changes related to the glyph cache, various incidental fixes and optimizations were required.
- Colors were changed to keep Veloren's look consistent with master.
- Some older tree models were brought back (@Pfauenauge).
- TODO(@Sharp): All hardcoded colors were extracted and made hotloadable.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Hardcoded colors were fixed to conform to Veloren's style.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Color models were fixed to conform to Veloren's style.
A detailed description of the involved changes follows.
---
- The world size is no longer hardcoded. All functions dependent on world size now take a `WorldSizeLg`, which holds the base 2 logarithm of each actual world dimension and is guaranteed to maintain certain properties (outlined in `common/src/terrain/map.rs`). Additionally, many utility functions that utilize the world size were moved into `common` as well (mostly `common/src/terrain/mod.rs`). Finally, the world map format was updated in order to store its size explicitly, with a migration path from the old format that should work whenever the old formatted map was a square (practically always). See `world/src/sim/mod.rs` for these changes.
- The map generation code was made generic to allow using it outside of the `world` crate. The parts of the map generating code that do not need to query the world were moved over to `common/src/terrain/map.rs`, allowing them to be used from the client without creating a dependency on `world`. The rest of it was turned into helper functions in `world/src/sim/map.rs`, which can be passed as closures to the generic map generation code to complete its construction. This also means that colors are now passed in separately to the map generation function. See <https://veloren.net/devblog-78/> for more details.
- On world creation, we now compute *horizon maps*. See the function in `world/src/sim/util.rs`.
Given a height map and a plane intersecting that height map, our horizon maps allow us to encode enough information to reconstruct shadows for each point on the height map using only the *horizon angle* (the angle at which the sun starts to become visible). As Veloren's sun only covers one plane, this is sufficient for encoding sun shadows for LOD terrain, by encoding two angles per chunk (one for each 90 degrees the sun covers). We can also use this for the moon, if we want, since the moon follows the same path. Additionally, we store the *height* of the furthest occluder, to try to make the shadows volumetric; so this means 4 bytes in total for each chunk.
Support for horizon maps has been merged into the map functionality in common as well.
- The way we pass the world from the server to the client has been updated. Rather than passing the prerendered map, we instead pass three maps with values for each chunk; one with the color information, a second with altitude information, and a third with horizon map information. We then reconstruct the map on the client, together with some additional information we send from the server (like the sea level and maximum height). See `common/src/msg/server.rs` for a detailed description of the format of `WorldMapMsg`, and `server/src/libr.rs` and `client/src/lib.rs` for details of the map construction and parsing.
- Artifacts related to image rotation were fixed. See the commit message for commit SHA `cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e` for a detailed explanation. This involved changes to shaders, the addition of a new type of graphic (also reflected in the graphic cache) that allows specifying a border color (which automatically makes the associated texture immutable), and some related fixes. I reproduce the first two paragraphs of the MR description as well:
```
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
```
- Multiflow rivers were enabled.
This does not really need to be part of this MR, and would be easy to revert, but since it seemed to provide a nice improvement it's currently packaged with it.
We already computed multiple outflows from each chunk for erosion purposes long before this MR.
However, we never modified river rendering to be able to handle this case (just a single downhill river flow is complex enough!) so this was not exposed when deciding which chunks were rivers.
Now that
- In the process of making changes related to the world map, various incidental fixes and optimizations were required. Some examples of fixes include making sure terrain is never lowered to below sea level (to make the shadow maps report correct values), fixing map altitudes and colors to understand things like cliffs and "block level" coloring (that doesn'te xist on the column level), and fixing a crashbug when rendering images for the UI where source pixels are strongly rectangular. Some examples of related performance fixes include avoiding allocating a fresh vector for all the maps (i.e. copying it over to change the format from `[u32; n]` to `DynamicImage` and then copying again to convert to `RgbaImage`), and instead using the `gfx::memory::slice` function to accomplish the same thing. These sorts of changes are spread all arond the code.
This includes the additon of a new scene, `voxygen/src/scene/lod.rs`, a new pipeline `voxygen/src/render/pipeline/lod_terrain.rs`, and new shaders `assets/vxygen/shaders/lod-terrain-vert.glsl` and `assets/vxygen/shaders/lod-terrain-frag.glsl`, as well as associated changes to the renderer in `voxygen/src/render/renderer.rs`.
The main idea behind our initial approach to LOD was to take the world data we now get from the server (altitude, color, and horizon mapping).
- Some previously computed values were turned into shader uniforms for better prediction on weak processors. (@zesterer)
- Calls to power or trig functions were removed or replaced with multiplications, where possible.
- After some deliberation
- To properly handle sprite "waving" for nearby sprites,
We explicitly designed the greedy meshing system with figures and sprites in mind.
In both cases, we want to be able to *efficiently* pack many different models into the same texture, especially in cases where we know
we will either not be removing any of the grouped-together from the models from the texture, or will remove all of them at once (so
they can be packed into some specific subtexture).
For sprites, since we know every model in advance and never intend to deallocate them, we currently pack them all as efficiently as
possible into one giant tetxure atlas. However, in the future we might opt to pack them slightly less efficiently in exchange for
shrinking the sprite vertex size.
For figures, we pack all the textures for each *model* into the same atlas.
is a global texture atlas used for every sprite, and for figures which is why we have the ability to mesh multiple
models to the same texture area (using the simple texture atlas allocator) without requiring intermediate vector allocations.
This is accomplished by delaying the time when we actually write the color and light data to the texture until *after* all the
model vertices have been meshed; then, we can just allocate the whole color/light array at once, making the atlas we use an
exact fit. In computer science-y terms, we accomplish this delay by, after we perform the initial greedy meshing (without
texture information), not continuing to create the texture data, but instead constructing a *continuation*--that is, a function
that, when called, will execute the rest of the computation. We push this continuation (which in Rust terms is a `FnOnce` closure
that takes the `ColLightsInfo` that it is supposed to write to as context) onto a
onto a vector
resizing. To allow for suspended writes to texture data, Rust pointed out to me that the continuation that would eventually write the color and light data to the texture atlas (the one that is shared by all models sharing the same greedy mesher) would have to *own* whatever data it mshed. Because we often generate the model data to mesh as a temporary in `voxygen/src/load.rs`, the
- Matrix multiplications in the shader were reduced for figure data (@zesterer).
- Vertex "waves" for fluid data were removed.
- Terrain "bending" near edges was removed.
- Scaling was fixed to make sure empty space was not introduced in a space previously occupied by a block. It was also changed to take ownership of its voxel data,
rather than sharing it, to let it be used with meshing.
- Rust's nightly version was bumped in order to use the `array_map` function, which lets us reuse more code between the simple map and `FigureModelCache`.
- PositionedGlyph::standalone.
---
I tried to cite sources in many cases[^realtime],[^lloyd],[^lispsm],[^pbrt],[^greedy],[^tjunctions]
where I needed features from elsewhere but I am particularly grateful for the following resources,
esepcially where they have accompanying source code. I linked all of them that are accessible to the public (those that are not were
obtained through legal means).
[^realtime]: Eisemann, Elmar, Michael Schwarz, Ulf Assarsson, Michael Wimmer. Real-Time Shadows. A K Peters/CRC Press (T&F), 20160419.
[^lloyd]: Lloyd,B. 2007. [Logarithmic perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). PhD thesis, University of North Carolina.
[^lispsm]: Wimmer, M., Scherzer, D., and Purgathofer, W. 2004. [Light space perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). In Proceedings of Eurographics Symposium on Rendering 2004, pp. 143– 152.
[^pbrt]: Pharr, Matt, et al. [http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf](Physically Based Rendering: From Theory to Implementation). Third edition, Morgan Kaufmann Publishers/Elsevier, 2017.
[^greedy]: mikolalysenko. “Meshing in a Minecraft Game.” 0 FPS, 30 June 2012, <https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/>.
[^tjunctions]: blackflux. “Meshing in Voxel Engines – Part 1.” Blackflux.Com, 23 Feb. 2014, <https://blackflux.wordpress.com/2014/02/23/meshing-in-voxel-engines-part-1/>.
I am also especially grateful to Khronos, Wikiepdia, and stackoverflow for answering many of my specific questions while writing the MR.
---
Squashed commit of the following:
commit 300505e7305a2fdac722a808ee8538323f215f39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 18:46:25 2020 +0200
Fixing cargo doc and typo in CHANGELOG.
commit ec0aeb18e8499d7d84ef818331b4b65c3d76cea6
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 15:38:50 2020 +0200
Hopefully final commit for the LOD branch.
commit 5e8ea0b1eaac02903a02feb2eb038d195de4872f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 10:14:26 2020 +0200
Falling back to power as stopgap.
commit e44a1cbf46504ee9931a01bdc9033e145500d557
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 09:25:41 2020 +0200
Address imbris feedback.
Temporarily disables shiny water, lowers max VD.
These restrictions will be lifted soon after merging.
commit 561e25778a108ac3712f5ec2ce3a51234c4430d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 08:31:13 2020 +0200
Tweaking shaders a bit.
commit 7d19259078ce0dd7b3742ad7d0cb3fab3ece3fdc
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:59:43 2020 +0200
Fix view example as well.
commit 051cd4934e0fad2c0b15db4380a4189fa318679f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:29:06 2020 +0200
Fix meshing benchmark.
commit c95e07db3b4dcca285678985e65e31b927cb1c61
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 05:46:22 2020 +0200
Address MR feedback, fix scene clouds.
commit 1bfb816cabdb3ffc1e507a009c2d98696b4b573a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:39:36 2020 +0200
Incorporating Pfau's figure color changes.
New eyes and new humanoid colors.
commit 3f9b89a3ac7b3356b1dba0d1a8f6541357f81469
Merge: e2f5162e4 62c53963a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:29:41 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit e2f5162e4f96f4124aa43488f7245d341b3dcfd4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:28:38 2020 +0200
World colors are all hotloadable.
They live in assets/world/style/colors.ron.
Only a small handful of hardcoed colors remain in World; they are either
part of the map, or difficult to disentangle from the rest of the
computation. Comments are made where appropriate.
commit 62c53963abe1975009d34a8f9515a355bef24f31
Author: Marcel Märtens <marcel.cochem@googlemail.com>
Date: Wed Aug 19 15:59:00 2020 +0200
replace pretty_env_logger with tracing
commit 5b1625f99d9586fe80e2232f583ec5af9f953099
Merge: d71003acd 4942b5b39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:15:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit d71003acdabeff970b3928e97c26af6847b5b78e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:14:34 2020 +0200
Hotloading colors, part 1: colors in common.
Currently, this just entails humanoid colors. There are only three
colors not handled; the light emitter colors in
common/src/comp/inventory/item/tool.rs. These don't seem important
enough to me to warrant making hotloadable, at least not right now, but
if it's needed later we can always add them to the file.
commit 63b5e0e553eb2ea49276f192a6fc7dd65254270d
Merge: c32b337a4 6d2c4b9c1
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 13:05:37 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c32b337a46e10d9de473d178a94a3ccd61c39bb3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:52:04 2020 +0200
Fixing LOD grid, for real.
commit a166ae0360395387e09fb35a1f84210c2ce5ec24
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:28:05 2020 +0200
Addressing imbris's initial feedback.
Fixes two minor bugs: explosion particles were no longer spawning
randomly, and LOD grids were not perfectly even.
commit 4cbad004f44060994252dd3d38647a14a589712f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:27:58 2020 +0200
Bumping nightly per request.
commit 548680276aac77c25d43d16b5622f847d474dbef
Merge: acc098604 8f8b20c91
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:26:06 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit acc0986040589a3492f88a740bc3c3fc693b26d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:28:32 2020 +0200
Lower resolution due to lying drivers.
commit d3b878de2a52c358d2944a6bbd0555dad7fbdb10
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:15:38 2020 +0200
Fix issues msh encountered with Intel 4600.
commit 10245e0c1b0cb6fae10d86409435364edc6102ef
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 21:15:02 2020 +0200
Merge more models into one mesh than we did previously.
commit 3155c31e663c52ae5c3a53d5fb5665892a1a498a
Merge: 7204cc8a7 3c199280e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:35:22 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7204cc8a7a4f74a30306bd205d9834fee4bb944f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:34:43 2020 +0200
Fix not yet done NPC animations.
This forces them all to be the idle animation if not specified.
This fixes issues where you'd have giant NPCs in water.
commit bc83360f2a08918f19d417b5f772e1ff554dba08
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 19:36:37 2020 +0200
Try to fix some bugs:
- Z fighting with LOD terrain and water.
- Audio SFX not playing.
commit 1fd104aa603bf3781b6526a5cada46aeca3049dd
Merge: 862df3c99 7c2c392a3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 12:02:31 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 862df3c9976c4da9bd7cfd784f1a85973127968a
Merge: 0a4218ed9 75c1d4401
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 05:52:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0a4218ed9d541a2b34c133351bea38a99ddf4ea7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 22:27:14 2020 +0200
Fix particle depth.
commit f51dfdeb442d0dd5243dd2f344fa4be295bd0875
Merge: c6251a956 5e6dc0471
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:19:04 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit c6251a956ad376400dca5c23420cf8d213dc8fdf
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:15:46 2020 +0200
Cache figures more intelligently.
Cache figures for longer, and don't cache character states for the
player except where they actually affect the rendered model.
commit 0ed801d5404982c6fb63b1eaa4567d908b294c9d
Merge: c11b9bdf0 eea64f78f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 16:32:24 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c11b9bdf0a53bf9884d2f5a48fec9b01d582df1a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 11:47:15 2020 +0200
Remove unneeded Clippy annotation.
commit 16aa9ef40af56d69289d00aafb3deadfb8bd4f35
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 8 00:53:02 2020 +0200
Fix hotloading and Clippy.
commit 3dc973e0be5b758da1e9805eb764ad401374cd0c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 23:50:27 2020 +0200
Major speedups with SIMD.
commit fba64a7d93d5a96077ce87287bbce6ab9b7fbcae
Merge: 76429d00e d1e10b178
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:19 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 76429d00eea00d212fbd672a84ee91e75b19b938
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:10 2020 +0200
Add clippy.toml.
commit c79f512f84dbb83cb82b7954db68ff241dfd8e41
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 11:55:20 2020 +0200
Fix all clippy issues, clean up Rust code.
commit 6f90e010b3fbefb53b0d632e819931350015b6b8
Merge: 77a8c7c26 5929cfa5c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:30 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 77a8c7c267d3f44a1a62bd6b2274359973c5e4d4
Merge: b44e44232 44febaabd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:10 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 5929cfa5c713aa392110bbb62407f76caf53c3df
Author: jshipsey <jshipsey18@gmail.com>
Date: Thu Aug 6 20:47:27 2020 -0400
fixed in-hand arrow bug
commit b44e442325d828f1cd564d66908f89d09e80474b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 6 13:40:35 2020 +0200
Miscellaneous performance improvements.
commit be37acf287c1360d8085862526ac3365ffd1d768
Merge: 125d7fc6c c11876547
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 05:49:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 125d7fc6c4dcd8c8c5f27b8268a4d64f409f3644
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 04:55:31 2020 +0200
Abstract over simd vs. repr_c vectors.
Also some minor improvements to Event size.
commit d4d4956e9252e1241ce110b2aa85076c6b1e2a23
Merge: 5f3b7294a aced5f979
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:56:54 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 5f3b7294af1f8533edc2620b58863c248e2b07af
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:43:52 2020 +0200
Fix formatting issues I missed before.
commit a428a3ebba70dcab63dd0f8cd983120c90617271
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:41:51 2020 +0200
Fix clippy warnings, part 1.
There aer still a bunch of type too complex and
function takes too many arguments warnings that I'll fix later
(or ignore, since in the one case I did fix a function takes too
many arguments warning I think it made the code *less* readable).
commit ba54307540ed8a937ac08209730284fc653af85b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 30 13:22:42 2020 +0200
Fix light animations so they are removed when the light turns off.
commit 7e0f4bcbf0f4717145d8beac40d52e3acebbe2aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 21:10:20 2020 +0200
Fix crash in edge case for pixel art.
commit 56da06f7a351e2b949e9b014a90b974d511a0924
Merge: cf74d55f2 9f53a4a19
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:56:52 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:29:52 2020 +0200
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
The first concern was addressed by fixing the dimensions of the map
images drawn from the UI (so that we always use a square source
rectangle, rather than a rectangular one according to the dimensions of
the map). We also fixed the way rotation was done in the fragment
shader for north-facing sources to make it properly handle aspect ratio
(this was already done for north-facing targets). Together, these fix
rendering issues peculiar to rectangular maps.
The second and third concerns were jointly addressed by adding an
optional border color to every 2D image drawn by the UI. This turns
out not to waste extra space even though we hold a full f32 color
(to avoid an extra dependency on gfx's PackedColor), since voxel
images already take up more space than Optiion<[f32; 4]> requires.
This is then implemented automatically using the "border color"
wrapping method in the attached sampler.
Since this is implemented in graphics hardware, it only works (at
least naively) if the actual image bounds match the texture bounds.
Therefore, we altered the way the graphics cache stores images
with a border color to guarantee that they are always in their own
texture, whose size exactly matches their extent. Since the easiest
currently exposed way to set a border color is to do so for an
immutable texture, we went a bit further and added a new "immutable"
texture storage type used for these cases; currently, it is always
and automatically used only when there is a specified border color,
but in theory there's no reason we couldn't provide immutable-only
images that use the default wrapping mdoe (though clamp to border
is admittedly not a great default).
To fix the maps case specifically, we set the border color to a
translucent version of the ocean border color. This may need
tweaking going forward, which shouldn't be hard.
As part of this process, we had to modify graphics replacement to
make sure immutable images are *removed* when invalidated, rather
than just having a validity flag unset (this is normally done by
the UI to try to reuse allocations in place if images are updated
in benign ways, since the texture atlases used for Ui do not
support deallocation; currently this is only used for item images,
so there should be no overlap with immutable image replacement,
so this was purely precautionary).
Since we were already touching the relevant code, we also updated
the image dependency to a newer version that provides more ways
to avoid allocations, and made a few other changes that should
hopefully eliminate redundant most of the intermediate buffer
allocations we were performing for what should be zero-cost
conversions. This may slightly improve performance in some
cases.
commit ad18ce939940a8c697270f6e9b94db9942fd8295
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 13:21:09 2020 +0200
Fix continent scale hack.
commit 36b1cb074f5b195aebd7dbbc3da7f0246a1a18ec
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 12:11:40 2020 +0200
Enable loading different sized maps without a recompile.
We may want to tweak the effects of the continent_scale_hack.
commit 13b6d4d534cc4814b7cb3294ca41bbfea0a6b186
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 10:55:48 2020 +0200
Removing WORLD_SIZE, part 1.
Erased almost every instance of WORLD_SIZE and replaced it with a local
power of two, map_size_lg (which respects certain invariants; see
common/src/terrain/map.rs for more details about MapSizeLg). This also
means we can avoid a dependency on the world crate from client, as
desired.
Now that the rest of the code is not expecting a fixed WORLD_SIZE, the
next step is to arrange for maps to store their world size, and to use
that world size as a basis prior to loading the map (as well, probably,
as prior to configuring some of the noise functions).
commit 30b1d2c6428230a9eaa0d749cdcbbd6f1cbccd78
Merge: 7d56ba31b 1377b369f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:58 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 7d56ba31b445441461b28a07fc495d7d4f047c17
Merge: 2101113b4 598f14b25
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 1377b369f6db2258e910d467a5740f31789e3ded
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sun Jul 19 23:25:38 2020 +0200
more saturated pumpkins
commit ae8d50527f93bb0616c2ad46ce4dacb63bc37c6d
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sat Jul 18 20:29:56 2020 +0200
acacia models
commit 2101113b467e691de787392d7f20f1745f5637bd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 18 18:55:25 2020 +0200
Higher detail LOD.
commit add2cfae04b4385fa5590e11e2bd5229d9dee0aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 16 01:57:39 2020 +0200
Revert some irrelevant stuff.
commit 2e2ab3dc1eaa59a4aef7f8d34a53d8aae4c8553a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 15 13:30:49 2020 +0200
Fixing various things about shadows.
* Correcting optimal LISPSM parameter.
* Figure shadows are cast when they're not visible.
* Chunk shadows stay cast until you look away.
* Seamless cubemaps for point lights.
* Etc.
commit 6c31e6b56217274285b597af297036691ea5d897
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 19:50:26 2020 +0200
Fix shadow creation.
commit 6332cbe006115ae205597529cd8bbccd146c2cca
Merge: be438657c 930e0028b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:47:00 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit be438657c33d7b5bfb0a9582c3ed3fd366637323
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:28:08 2020 +0200
Tweaks to shadows.
Added shadow map resolution configuration, added seamless cubemaps,
documented all existing rendering options, and fixed a few Clippy
errors.
commit 23b4058906013c7d2a40c286e20e32c5fbd897ed
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 10:11:19 2020 +0200
Fix moon, use nonlinear noise for terrain.
Note that the latter has a bit of performance cost.
commit 7fbe5cbfbb9dc29607957b8e62f432a4deed193d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:23:02 2020 +0200
Address lies about max texture size.
commit bcfc62b5e13a1cdd83f57535fde4694720bebfd9
Merge: 75e3626a7 18a08e8fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:22:08 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 75e3626a785919f43fdcf2127c2b10e3e4df2f9f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:21:52 2020 +0200
OpenGL 3.3 minimum.
commit 18a08e8fe2739f02af99a5d2cb4e7c38c49e858b
Author: Monty Marz <m.marzouq@gmx.de>
Date: Tue Jul 7 23:57:52 2020 +0200
settings localization
commit 90c5d1ca3620092bc3ae10b2211489eb1cf6f5e8
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 21:11:48 2020 +0200
Lower near distance.
commit 0e66f02b25aaddaa2dfddbbc89cd67de54a9a7b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 20:09:01 2020 +0200
All sprites sway in the wind now.
commit db1401a6910bf42dcf502462c90038752ff5fbdb
Merge: 69e508d8c e8b4b29d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 19:34:17 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 69e508d8c94d8973033817ca86f357e466fc7c4d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 18:41:37 2020 +0200
Make it easy to switch to SIMD for math.
commit ffe0f5928c7a7e87d00cb5426b3b1d831d7e02fd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 21:21:12 2020 +0200
Fix some issues with underwater rendering.
commit bfda6da42f38fd02c31ee92c81ab785a3e50c2a0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 19:17:59 2020 +0200
Fix some minor display issues.
commit 0ed752e087968cf901301884aaeae698e32ef8a5
Merge: ccc6a06a8 518edcb85
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:14:21 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit ccc6a06a8d4504d6b9f7af7905a414d2ee06ab76
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:04:34 2020 +0200
Some minor changes.
commit 4e020246702889269efe1a191788992164c508d6
Merge: 50a64d927 e05c9267a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 16:17:40 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 50a64d927e6c4f4b0e4688e4cbfca694bc3f922a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 13:07:03 2020 +0200
Fix far plane.
commit 7dd06da34cae8f9ea3b6c889fe965181f3fd3949
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:25:35 2020 +0200
Add shadows.glsl.
commit 618a18c998778bf871b905a74657440fcc384c80
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:10:22 2020 +0200
Adding shadows, greedy meshing, and more.
commit eaea83fe6a5cb1cb0ba8beef888183c718258496
Merge: 267018495 2f89b863e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 22:47:07 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 2670184954a13e4a9e7a4e35ba79aac0c5fac2f7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 21:20:01 2020 +0200
Make civsim and sites deterministic.
For anything in worldgen where you use a HashMap, *please* think
carefully about which hasher you are going to use! This is
especially true if (for some reason) you are depending on hashmap
iteration order remaining stable for some aspect of worldgen.
commit f8376fd5dc72b4a9c2f51a6b4570d59c8b8e9343
Merge: 654f7e049 cdee191dd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 17:53:57 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 654f7e049258d9da27c09608bbe6a46ffa8787e5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed May 20 21:22:30 2020 +0200
Correct backface culling.
commit 560501df05ca725409b0f2e4eb31bdfdc15fd0c7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue May 19 17:22:06 2020 +0200
Greedy messhing for shadows.
commit a4d87e1875ca543436e6bbbeb20348facc5a52d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun May 17 05:59:00 2020 +0200
Shadow maps work for lantern.
commit 243d0837b8a3b08172c9a3c348d964d7ddc2a0a8
Merge: 04382dc28 71dd520cd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:53:13 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 04382dc28632b6c66e8821f6870c0daaa1c1901a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:22:17 2020 +0200
WIP: better graphics config, better LOD, shadow maps.
commit 22ddbad3eb32bfa70f0932176022208fe67ded81
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 18:54:09 2020 +0200
Minor shader fixes.
commit 746a10e8d01ac235f994b0cde78fa48998602a1f
Merge: 0f4a0e763 40ab94673
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 04:02:09 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0f4a0e763db3afbdc4fb0558611f38326ca87151
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 23:03:24 2020 +0200
Switch back to pop-in terrain.
commit dd74fa7e4a53667b38811d7aec58d7f6a68889bb
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 22:58:55 2020 +0200
LOD shading closer to voxel shading.
commit ef67bd58ba0bdaf622b078892d768263b6cba268
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 28 20:49:03 2020 +0200
Experimental underwater lighting.
commit 2c5ad9d07605e80d5fd5679dd3a5d70c605b86a9
Merge: 748279835 303967a6f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 22:35:24 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7482798354eda18c8207950080fc24d443a369de
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 21:59:55 2020 +0200
Replace discard in figure-frag.
commit d83b4ae69be4912f69bf7835f509c68a1c7770a4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:45:57 2020 +0200
Fix sprite lighting, HDR from focus_pos.
commit 0594238004f116274905fa0ed7c2b6c417ed1d29
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:14:10 2020 +0200
Proper HDR from point lights.
commit 48c93d2b41ce5743103d18e76cc228f5ac766492
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 14:01:43 2020 +0200
Brighter ambiance, darker LOD shadows.
commit e0452e895ccfa8a43f368cae3b8b8aedc24dad93
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 13:13:23 2020 +0200
More proper HDR.
commit 4c6da3ed16cfeebb455e40da5f557b4af9a499d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 00:13:10 2020 +0200
Trying LOD noise.
commit 682a3d74c85df5503ffe1fc1cc891bce789df1ad
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 23:11:08 2020 +0200
Fix LOD heights in towns.
commit cc39e5734e8b18f9077bf42e66337c1319dd6b6e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 21:01:23 2020 +0200
More LOD fixes.
commit 8116b21c2e51c836e77894e309ac273caf2917b3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:54:43 2020 +0200
I like this coloring.
commit bc2560ea90b36f4b46190005344232d993043ac3
Merge: 14effdd5d e690efe71
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:48:33 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 14effdd5db8747fcf3eb34f03b46b7792e92d1c5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:24:35 2020 +0200
Re-saturate.
commit 48a643955d4435b78179acba0beb4a979905cc31
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:23:57 2020 +0200
Various fixes.
commit f7b497a0c25f4ad4682c71dd1ed6f608052feb9b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 03:22:49 2020 +0200
Render figures again.
commit 44e4aad48deba8266b9f8bdfd3db096b381f5327
Merge: e6f0a5a98 9ec319a18
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 02:01:04 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit e6f0a5a981a82533ba188fff0a54ce98577bb152
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 24 16:12:20 2020 +0200
Add atmospheric scattering.
commit f2953087f691a8edbc001cb98ebf5059fc6f8ac0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 23 00:01:20 2020 +0200
Fix shadowing for specular reflections.
commit ddd4a67a9799b8d08c7dc0c2bec90621c2bed0e3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Apr 22 22:56:12 2020 +0200
HDR fixes.
commit 1015e60deef3c447381996277df7496707a63bd0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 21 18:25:19 2020 +0200
More lighting changes.
commit 80c264abd111fb237e57843efcb5c071d4f84613
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 13 00:29:59 2020 +0200
Lighting experiments.
commit 8414987e589dd5102bad89762a3adaccc0bfe957
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 9 02:38:40 2020 +0200
WIP -- lighting changes and soft shadows.
commit 9cd2b3fb0d6b49776c6dfe463e4169637250b11a
Merge: c7ea687eb 8b149ad11
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:29 2020 +0200
Merge branch 'sharp/new-lighting' into sharp/small-fixes
commit c7ea687ebbc5aace1b455f134a5bf49ce2c7434a
Merge: 476441531 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:02 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 8b149ad11ad4bb75018fcf9519baec27d1c95951
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:32:39 2020 +0200
Trying out a new lighting model.
commit b0ac9f36f755dd06f7c17c46150568064790864f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 07:56:11 2020 +0200
Use bicubic interpolation for terrain.
commit f6fc9307a121514b614bc50ef8eb055953e7da8a
Merge: 33140a295 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 05:01:41 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 4764415312aae6e9ac2d00e86e84577cb958f1ab
Merge: ed2d0111d 13388ee6a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 04:54:48 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 13388ee6a42943f3f79a9cb488346cef18e272fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 20:30:08 2020 +0200
Various fixes (to coloring and to soft shadows).
commit fbd084a94a067082a87cd6d28b82054709bc9265
Merge: 5a089863b 4fdf6896a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 18:50:38 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/map-colors
commit ed2d0111d994262ae836d84d1fe5a45e4de72a0b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 06:49:27 2020 +0200
Combining colors and LOD.
commit 88342640c6b835114d01c797b89fdede3b0a2108
Merge: 33140a295 5a089863b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:49:20 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 33140a2951b8212725f42c758b277aaec4d888f7
Merge: 4c65a5aed f34d4b379
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:36:21 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 5a089863beb01d4794bbe3580ada47b278715ea2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 03:17:49 2020 +0200
Making maps brighter.
This is probably not the right way to do it, but oh well!
commit 32b2c99109dd486aa922886081068f9c550c83f2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 02:46:36 2020 +0200
Horizon mapping and "layered" map generation.
Horizon mapping is a method of shadow mapping specific to height maps.
It can handle any angle between 0 and 90 degrees from the ground, as
long as know the horizontal direction in advance, by remembering only a
single angle (the "horizon angle" of the shadow map). More is explained
in common/src/msg/server.rs. We also remember the approximate height of
the largest occluder, to try to be able to generate soft shadows and
create a vertical position where the shadows can't go higher.
Additionally, map generation has been reworked. Instead of computing
everything from explicit samples, we pass in sampling functions that
return exactly what the map generator needs. This allows us to cleanly
separate the way we sample things like altitudes and colors from the map
generation process. We exploit this to generate maps *partially* on the
server (with colors and rivers, but not shading). We can then send the
partially completed map to the client, which can combine it with shadow
information to generate the final map. This is useful for two reasons:
first, it makes sure the client can apply shadow information by itself,
and second, it lets us pass the unshaded map for use with level of
detail functionality.
For similar reasons, river generation is split
out into its own layer, but for now we opt to still generate rivers on
the server (since the river wire format is more complicated to compress
and may require some extra work to make sure we have enough precision to
draw rivers well enough for LoD).
Finally, the mostly ad-hoc lighting we were performing has been (mostly)
replaced with explicit Phong reflection shading (including specular
highlights). Regularizing this seems useful and helps clarify the
"meaning" of the various light intensities, and helps us keep a more
physically plausible basis. However, its interaction with soft shadows
is still imperfect, and it's not yet clear to me what we need to do to
turn this into something useful for LoD.
commit f8926a5737ddc51f3d585c651a64c43677aae0f4
Merge: a1aee931e 875ae6ced
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Mar 13 13:32:42 2020 +0100
Merge remote-tracking branch 'origin/master' into sharp/map-colors
commit 4c65a5aed353b119aea65a2aaeb94549b67beb42
Author: Treeco <5021038-Treeco@users.noreply.gitlab.com>
Date: Mon Feb 24 16:48:05 2020 +0000
Made LOD setting slider exponential
commit 2fa7b2d20d7233dc8bfd64f9f7f54617575248f1
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 17:49:53 2020 +0000
Added mist to LoD
commit aab059a450b5f635777129ff82cc15b662965c3c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 15:14:06 2020 +0000
Added LoD slider
commit 779c36b538121c5ade3633ae5cb67bb14c8c3877
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:54:55 2020 +0000
Reduced cost of vertex pushing
commit 9fea150473906b166365b738ebcea07c697daf3d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:38:53 2020 +0000
Fixed maths, improved LoD resolution
commit 5481df38fea5bf183ff376a3337179cfaa5233dc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 11:22:50 2020 +0000
Dynamically relocate LoD vertices to enhance details
commit a3e36a50ababd615da7db1b26158c7906a5def01
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 18:13:51 2020 +0000
Simpler terrain spiral rendering
commit 255f450ae9ac8763db4bede075fb409161ed57cc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:53:17 2020 +0000
Better LoD precision
commit 3d027aebe812a5b8658a4eb8123dc9f61b3776d2
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:04:03 2020 +0000
Better falloff
commit be775c9484b457b2c0b1a494aec03392d0c70e76
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 15:30:45 2020 +0000
Applied good ideas from experimental branch
commit 58587b68545a23c5c04ab4574a4b94b3bc982246
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 16:15:13 2020 +0000
Minor fixes to LoD merging
commit 7b42aebd709c14df2db766aad61d9280ad24d84d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 15:04:44 2020 +0000
Capped LoD dragging
commit 8aafc559f87124e1ea5ca6e3ddc2aa0c242d793c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:54:37 2020 +0000
Better blending between LoD and terrain border
commit edd3455d5161792d87ddc8eadc0ecbad5532b284
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:40:19 2020 +0000
Fixed LoD z depth, added sea level offset
commit b9b06744620114dd5556e73f64fa93c145503a7c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:27:43 2020 +0000
Better LoD smoothing
commit a1aee931e790431560cd2d953ad61d9497072afd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Feb 21 14:52:17 2020 +0100
Adding shadows.
commit 2400786c13dd891c131ed86d48d05df516a8a778
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 13:48:40 2020 +0000
Use world map as LoD source
commit dbf650f504a4c25fbbc2096ac3616c736bf52d23
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Jan 20 00:48:14 2020 +0000
Better clouds at distance
commit 5e6f81b86cdb9730b9b056877b19257075fd5fa8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Jan 19 23:59:02 2020 +0000
sync
commit 745e7540ddb000cc645f612767b337c2ddc3f7c0
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 12:40:48 2019 +0000
Improved cloud falloff mist, faster noise sampling
commit f6a200d0cb866196ba57697466755f9e0c7ea5d8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 10:09:00 2019 +0000
Improved long-range depth precision, removed unnecessary LoD polygons
commit 63d1b2bb2292898d59fb4f4e502201103dfeb86f
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 20:57:46 2019 +0000
Working LoD shader
commit f13d98ee3e58f881e8b978861a67663b59ed91ec
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 11:03:40 2019 +0000
LoD first attempt (stack overflow issue)
2020-08-20 18:34:59 +00:00
|
|
|
|
// 1024.
|
|
|
|
|
if self.alt.len() != self.basement.len() || self.alt.len() != 1024 * 1024 {
|
2020-01-18 18:41:37 +00:00
|
|
|
|
return Err(WorldFileError::WorldSizeInvalid);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
let map = WorldMap_0_5_0 {
|
|
|
|
|
alt: self.alt,
|
|
|
|
|
basement: self.basement,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
map.into_modern()
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
impl WorldMap_0_5_0 {
|
(See sharp/lod-history) LOD, shadows, greedy meshing, new lighting, perf
---
Pretty much a Veloren fork at this point. Here's a high level overview of the changes (will be added to CHANGELOG just before merge).
At a high level this MR incorporates roughly two groups of changes.
The first group consists of new game features: more flexible map sizes, level of detail terrain, shadow maps, and a new lighting
engine. This is "feature work" that (mostly) only adds new things to Veloren, and mostly shouldn't affect old stuff.
The second big group of changes are those addressing the fallout from all the new features. These include performance fixes of
various sorts: the addition of multiple graphics options and optimization of the cheap ones to avoid work, switching all voxel
models to use some variant of greedy meshing, switching over much of our CPU-side vector math to exploit SIMD instructions
(coinciding with a fork of `vek`), and a rewrite of how the UI handles text rendering (coinciding with updates to our fork
of `conrod`). Making Veloren's hardcoded colors appear correct under the new lighting engine also required considerably
changes (TODO: Fill in this section when it's complete).
The second category of changes often heavily touches code owned by other people, including frequently modified code "owned" by a
handful of people, so I recommend that this code be reviewed particularly carefully.
---
At a high level (each will be described in more detail below):
- The world map has been refactored.
- The world size is no longer hardcoded (@zesterer).
- The map generation code was made generic to allow using it outside of the `world` crate (@zesterer).
- On world creation, we now compute *horizon maps* (@zesterer).
- The way we pass the world from the server to the client has been updated (@xMAC94x).
- Artifacts related to image rotation were fixed (@imbris).
- Multiflow rivers were enabled (@zesterer).
- In the process of making changes related to the world map, various incidental fixes and optimizations were required.
- The new *level of detail* feature was added (@zesterer wrote part of this and has checked out the rest).
- A new LOD terrain rendering step was added to the pipeline.
- The LOD terrain quality was made configurable via a graphics setting.
- Horizon maps were used to cast shadows from LOD chunks on both LOD and non-LOD terrain.
- A "voxelization" effect was incorporated into rendered LOD terrain to make it blend better into the world.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Veloren's lighting has been completely overhauled (@zesterer has already checked most of this out).
- A semi-accurate index of refraction was assigned to our materials.
- A new, more realistic, physically based approach to lighting was used using the *Ashikhmin Shirley* BRDF.
- We emulate *atmospheric scattering* using equations designed for measuring solar panel light exposure.
- We attempt to compute *realistic light attenuation* in water using its real material properties.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Point and directional lights now cast realistic shadows, using *shadow mapping.* (@imbris, @zesterer, @Treeco, @YuriMomo)
- Point light shadow maps were added to the rendering pipeline, using geometry shaders and *seamless cube maps*.
- Directional light shadows were added to the rendering pipeline, using LISPSM together with disabling *depth clamping*.
- "Shadow-only" chunks and NPCs were added to prevent shadows from models behind you from disappearing.
- In the process of making changes related to shadow maps, various incidental fixes and optimizations were required.
The addition of shadow maps, LOD terrain, and the new lighting all led to significant performance degradation, on top of other
changes happening in master. Therefore, a large number of performance improvements were also needed:
- The graphics options were made much more flexible and configurable, and shaders were optimize.
- New options were provided for how to render lights and shadows (@Pfauenauge, @zesterer).
- Graphic setting storage and configuration were overhauled to make adding new features easier (@Pfauenauge, @imbris).
- Shaders were rewritten to utilize GLSL's preprocessor to avoid overhead (@zesterer, @YuriMomo).
- In the process of making changes related to providing additional rendering options, various incidental fixes and optimizations were required.
- Voxel model creation was switched to use *greedy meshing.*
- A new voxel meshing method, greedy meshing, was added (@imbris).
- Uses of the older meshing methods were migrated to use greedy meshing (@imbris, @jshipsey, @Pfauenauge).
- New restrictions were added to terrain, figure, and sprites to future proof them for further optimizations (@jshipsey, @Pfauenauge, @zesterer).
- Most positions are now relative to either chunk or player position for better precision (@imbris, @zesterer, @scottc).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- Animation and terrain math were switched to use SIMD where possible.
- Fixes were made to vek to make its SIMD feature usable for us (@zesterer, @imbris).
- The interface and types used in bone animation were changed in various ways (@jshipsey, @Snowram, @Pfauenauge).
- Redundant code generation for body animation is now partly taken care of by a macro (@jshipsey, @Snowram, @Pfauenauge).
- Animation code was modified to to use vek's SIMD representation where possible (@jshipsey, @Snowram, @Pfauenauge).
- Terrain meshing code and shadow map math were also modified to use vek's SIMD representation (@imbris).
- SIMD instruction generation was enabled (@YuriMomo, @jshipsey, @Snowram, @imbris, @Angelonfira, @xMAC94x).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- The way we cache glyphs was completely refactored, fixed, and optimized.
- Our fork of `conrod` was optimized in various ways (@imbris).
- Our fork of `conrod` now exposes whether a widget was updated during the current frame (@imbris).
- Our use of the glyph cache was rewritten for correctness (@imbris).
- A *text cache* was introduced that lets us skip remeshing glyphs that have not changed (@imbris).
- Various changes were made to reduce pressure on the glyph cache, with more planned (@imbris, @Pfauenauge).
- In the process of making changes related to the glyph cache, various incidental fixes and optimizations were required.
- Colors were changed to keep Veloren's look consistent with master.
- Some older tree models were brought back (@Pfauenauge).
- TODO(@Sharp): All hardcoded colors were extracted and made hotloadable.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Hardcoded colors were fixed to conform to Veloren's style.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Color models were fixed to conform to Veloren's style.
A detailed description of the involved changes follows.
---
- The world size is no longer hardcoded. All functions dependent on world size now take a `WorldSizeLg`, which holds the base 2 logarithm of each actual world dimension and is guaranteed to maintain certain properties (outlined in `common/src/terrain/map.rs`). Additionally, many utility functions that utilize the world size were moved into `common` as well (mostly `common/src/terrain/mod.rs`). Finally, the world map format was updated in order to store its size explicitly, with a migration path from the old format that should work whenever the old formatted map was a square (practically always). See `world/src/sim/mod.rs` for these changes.
- The map generation code was made generic to allow using it outside of the `world` crate. The parts of the map generating code that do not need to query the world were moved over to `common/src/terrain/map.rs`, allowing them to be used from the client without creating a dependency on `world`. The rest of it was turned into helper functions in `world/src/sim/map.rs`, which can be passed as closures to the generic map generation code to complete its construction. This also means that colors are now passed in separately to the map generation function. See <https://veloren.net/devblog-78/> for more details.
- On world creation, we now compute *horizon maps*. See the function in `world/src/sim/util.rs`.
Given a height map and a plane intersecting that height map, our horizon maps allow us to encode enough information to reconstruct shadows for each point on the height map using only the *horizon angle* (the angle at which the sun starts to become visible). As Veloren's sun only covers one plane, this is sufficient for encoding sun shadows for LOD terrain, by encoding two angles per chunk (one for each 90 degrees the sun covers). We can also use this for the moon, if we want, since the moon follows the same path. Additionally, we store the *height* of the furthest occluder, to try to make the shadows volumetric; so this means 4 bytes in total for each chunk.
Support for horizon maps has been merged into the map functionality in common as well.
- The way we pass the world from the server to the client has been updated. Rather than passing the prerendered map, we instead pass three maps with values for each chunk; one with the color information, a second with altitude information, and a third with horizon map information. We then reconstruct the map on the client, together with some additional information we send from the server (like the sea level and maximum height). See `common/src/msg/server.rs` for a detailed description of the format of `WorldMapMsg`, and `server/src/libr.rs` and `client/src/lib.rs` for details of the map construction and parsing.
- Artifacts related to image rotation were fixed. See the commit message for commit SHA `cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e` for a detailed explanation. This involved changes to shaders, the addition of a new type of graphic (also reflected in the graphic cache) that allows specifying a border color (which automatically makes the associated texture immutable), and some related fixes. I reproduce the first two paragraphs of the MR description as well:
```
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
```
- Multiflow rivers were enabled.
This does not really need to be part of this MR, and would be easy to revert, but since it seemed to provide a nice improvement it's currently packaged with it.
We already computed multiple outflows from each chunk for erosion purposes long before this MR.
However, we never modified river rendering to be able to handle this case (just a single downhill river flow is complex enough!) so this was not exposed when deciding which chunks were rivers.
Now that
- In the process of making changes related to the world map, various incidental fixes and optimizations were required. Some examples of fixes include making sure terrain is never lowered to below sea level (to make the shadow maps report correct values), fixing map altitudes and colors to understand things like cliffs and "block level" coloring (that doesn'te xist on the column level), and fixing a crashbug when rendering images for the UI where source pixels are strongly rectangular. Some examples of related performance fixes include avoiding allocating a fresh vector for all the maps (i.e. copying it over to change the format from `[u32; n]` to `DynamicImage` and then copying again to convert to `RgbaImage`), and instead using the `gfx::memory::slice` function to accomplish the same thing. These sorts of changes are spread all arond the code.
This includes the additon of a new scene, `voxygen/src/scene/lod.rs`, a new pipeline `voxygen/src/render/pipeline/lod_terrain.rs`, and new shaders `assets/vxygen/shaders/lod-terrain-vert.glsl` and `assets/vxygen/shaders/lod-terrain-frag.glsl`, as well as associated changes to the renderer in `voxygen/src/render/renderer.rs`.
The main idea behind our initial approach to LOD was to take the world data we now get from the server (altitude, color, and horizon mapping).
- Some previously computed values were turned into shader uniforms for better prediction on weak processors. (@zesterer)
- Calls to power or trig functions were removed or replaced with multiplications, where possible.
- After some deliberation
- To properly handle sprite "waving" for nearby sprites,
We explicitly designed the greedy meshing system with figures and sprites in mind.
In both cases, we want to be able to *efficiently* pack many different models into the same texture, especially in cases where we know
we will either not be removing any of the grouped-together from the models from the texture, or will remove all of them at once (so
they can be packed into some specific subtexture).
For sprites, since we know every model in advance and never intend to deallocate them, we currently pack them all as efficiently as
possible into one giant tetxure atlas. However, in the future we might opt to pack them slightly less efficiently in exchange for
shrinking the sprite vertex size.
For figures, we pack all the textures for each *model* into the same atlas.
is a global texture atlas used for every sprite, and for figures which is why we have the ability to mesh multiple
models to the same texture area (using the simple texture atlas allocator) without requiring intermediate vector allocations.
This is accomplished by delaying the time when we actually write the color and light data to the texture until *after* all the
model vertices have been meshed; then, we can just allocate the whole color/light array at once, making the atlas we use an
exact fit. In computer science-y terms, we accomplish this delay by, after we perform the initial greedy meshing (without
texture information), not continuing to create the texture data, but instead constructing a *continuation*--that is, a function
that, when called, will execute the rest of the computation. We push this continuation (which in Rust terms is a `FnOnce` closure
that takes the `ColLightsInfo` that it is supposed to write to as context) onto a
onto a vector
resizing. To allow for suspended writes to texture data, Rust pointed out to me that the continuation that would eventually write the color and light data to the texture atlas (the one that is shared by all models sharing the same greedy mesher) would have to *own* whatever data it mshed. Because we often generate the model data to mesh as a temporary in `voxygen/src/load.rs`, the
- Matrix multiplications in the shader were reduced for figure data (@zesterer).
- Vertex "waves" for fluid data were removed.
- Terrain "bending" near edges was removed.
- Scaling was fixed to make sure empty space was not introduced in a space previously occupied by a block. It was also changed to take ownership of its voxel data,
rather than sharing it, to let it be used with meshing.
- Rust's nightly version was bumped in order to use the `array_map` function, which lets us reuse more code between the simple map and `FigureModelCache`.
- PositionedGlyph::standalone.
---
I tried to cite sources in many cases[^realtime],[^lloyd],[^lispsm],[^pbrt],[^greedy],[^tjunctions]
where I needed features from elsewhere but I am particularly grateful for the following resources,
esepcially where they have accompanying source code. I linked all of them that are accessible to the public (those that are not were
obtained through legal means).
[^realtime]: Eisemann, Elmar, Michael Schwarz, Ulf Assarsson, Michael Wimmer. Real-Time Shadows. A K Peters/CRC Press (T&F), 20160419.
[^lloyd]: Lloyd,B. 2007. [Logarithmic perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). PhD thesis, University of North Carolina.
[^lispsm]: Wimmer, M., Scherzer, D., and Purgathofer, W. 2004. [Light space perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). In Proceedings of Eurographics Symposium on Rendering 2004, pp. 143– 152.
[^pbrt]: Pharr, Matt, et al. [http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf](Physically Based Rendering: From Theory to Implementation). Third edition, Morgan Kaufmann Publishers/Elsevier, 2017.
[^greedy]: mikolalysenko. “Meshing in a Minecraft Game.” 0 FPS, 30 June 2012, <https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/>.
[^tjunctions]: blackflux. “Meshing in Voxel Engines – Part 1.” Blackflux.Com, 23 Feb. 2014, <https://blackflux.wordpress.com/2014/02/23/meshing-in-voxel-engines-part-1/>.
I am also especially grateful to Khronos, Wikiepdia, and stackoverflow for answering many of my specific questions while writing the MR.
---
Squashed commit of the following:
commit 300505e7305a2fdac722a808ee8538323f215f39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 18:46:25 2020 +0200
Fixing cargo doc and typo in CHANGELOG.
commit ec0aeb18e8499d7d84ef818331b4b65c3d76cea6
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 15:38:50 2020 +0200
Hopefully final commit for the LOD branch.
commit 5e8ea0b1eaac02903a02feb2eb038d195de4872f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 10:14:26 2020 +0200
Falling back to power as stopgap.
commit e44a1cbf46504ee9931a01bdc9033e145500d557
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 09:25:41 2020 +0200
Address imbris feedback.
Temporarily disables shiny water, lowers max VD.
These restrictions will be lifted soon after merging.
commit 561e25778a108ac3712f5ec2ce3a51234c4430d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 08:31:13 2020 +0200
Tweaking shaders a bit.
commit 7d19259078ce0dd7b3742ad7d0cb3fab3ece3fdc
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:59:43 2020 +0200
Fix view example as well.
commit 051cd4934e0fad2c0b15db4380a4189fa318679f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:29:06 2020 +0200
Fix meshing benchmark.
commit c95e07db3b4dcca285678985e65e31b927cb1c61
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 05:46:22 2020 +0200
Address MR feedback, fix scene clouds.
commit 1bfb816cabdb3ffc1e507a009c2d98696b4b573a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:39:36 2020 +0200
Incorporating Pfau's figure color changes.
New eyes and new humanoid colors.
commit 3f9b89a3ac7b3356b1dba0d1a8f6541357f81469
Merge: e2f5162e4 62c53963a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:29:41 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit e2f5162e4f96f4124aa43488f7245d341b3dcfd4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:28:38 2020 +0200
World colors are all hotloadable.
They live in assets/world/style/colors.ron.
Only a small handful of hardcoed colors remain in World; they are either
part of the map, or difficult to disentangle from the rest of the
computation. Comments are made where appropriate.
commit 62c53963abe1975009d34a8f9515a355bef24f31
Author: Marcel Märtens <marcel.cochem@googlemail.com>
Date: Wed Aug 19 15:59:00 2020 +0200
replace pretty_env_logger with tracing
commit 5b1625f99d9586fe80e2232f583ec5af9f953099
Merge: d71003acd 4942b5b39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:15:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit d71003acdabeff970b3928e97c26af6847b5b78e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:14:34 2020 +0200
Hotloading colors, part 1: colors in common.
Currently, this just entails humanoid colors. There are only three
colors not handled; the light emitter colors in
common/src/comp/inventory/item/tool.rs. These don't seem important
enough to me to warrant making hotloadable, at least not right now, but
if it's needed later we can always add them to the file.
commit 63b5e0e553eb2ea49276f192a6fc7dd65254270d
Merge: c32b337a4 6d2c4b9c1
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 13:05:37 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c32b337a46e10d9de473d178a94a3ccd61c39bb3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:52:04 2020 +0200
Fixing LOD grid, for real.
commit a166ae0360395387e09fb35a1f84210c2ce5ec24
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:28:05 2020 +0200
Addressing imbris's initial feedback.
Fixes two minor bugs: explosion particles were no longer spawning
randomly, and LOD grids were not perfectly even.
commit 4cbad004f44060994252dd3d38647a14a589712f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:27:58 2020 +0200
Bumping nightly per request.
commit 548680276aac77c25d43d16b5622f847d474dbef
Merge: acc098604 8f8b20c91
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:26:06 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit acc0986040589a3492f88a740bc3c3fc693b26d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:28:32 2020 +0200
Lower resolution due to lying drivers.
commit d3b878de2a52c358d2944a6bbd0555dad7fbdb10
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:15:38 2020 +0200
Fix issues msh encountered with Intel 4600.
commit 10245e0c1b0cb6fae10d86409435364edc6102ef
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 21:15:02 2020 +0200
Merge more models into one mesh than we did previously.
commit 3155c31e663c52ae5c3a53d5fb5665892a1a498a
Merge: 7204cc8a7 3c199280e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:35:22 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7204cc8a7a4f74a30306bd205d9834fee4bb944f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:34:43 2020 +0200
Fix not yet done NPC animations.
This forces them all to be the idle animation if not specified.
This fixes issues where you'd have giant NPCs in water.
commit bc83360f2a08918f19d417b5f772e1ff554dba08
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 19:36:37 2020 +0200
Try to fix some bugs:
- Z fighting with LOD terrain and water.
- Audio SFX not playing.
commit 1fd104aa603bf3781b6526a5cada46aeca3049dd
Merge: 862df3c99 7c2c392a3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 12:02:31 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 862df3c9976c4da9bd7cfd784f1a85973127968a
Merge: 0a4218ed9 75c1d4401
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 05:52:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0a4218ed9d541a2b34c133351bea38a99ddf4ea7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 22:27:14 2020 +0200
Fix particle depth.
commit f51dfdeb442d0dd5243dd2f344fa4be295bd0875
Merge: c6251a956 5e6dc0471
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:19:04 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit c6251a956ad376400dca5c23420cf8d213dc8fdf
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:15:46 2020 +0200
Cache figures more intelligently.
Cache figures for longer, and don't cache character states for the
player except where they actually affect the rendered model.
commit 0ed801d5404982c6fb63b1eaa4567d908b294c9d
Merge: c11b9bdf0 eea64f78f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 16:32:24 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c11b9bdf0a53bf9884d2f5a48fec9b01d582df1a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 11:47:15 2020 +0200
Remove unneeded Clippy annotation.
commit 16aa9ef40af56d69289d00aafb3deadfb8bd4f35
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 8 00:53:02 2020 +0200
Fix hotloading and Clippy.
commit 3dc973e0be5b758da1e9805eb764ad401374cd0c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 23:50:27 2020 +0200
Major speedups with SIMD.
commit fba64a7d93d5a96077ce87287bbce6ab9b7fbcae
Merge: 76429d00e d1e10b178
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:19 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 76429d00eea00d212fbd672a84ee91e75b19b938
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:10 2020 +0200
Add clippy.toml.
commit c79f512f84dbb83cb82b7954db68ff241dfd8e41
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 11:55:20 2020 +0200
Fix all clippy issues, clean up Rust code.
commit 6f90e010b3fbefb53b0d632e819931350015b6b8
Merge: 77a8c7c26 5929cfa5c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:30 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 77a8c7c267d3f44a1a62bd6b2274359973c5e4d4
Merge: b44e44232 44febaabd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:10 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 5929cfa5c713aa392110bbb62407f76caf53c3df
Author: jshipsey <jshipsey18@gmail.com>
Date: Thu Aug 6 20:47:27 2020 -0400
fixed in-hand arrow bug
commit b44e442325d828f1cd564d66908f89d09e80474b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 6 13:40:35 2020 +0200
Miscellaneous performance improvements.
commit be37acf287c1360d8085862526ac3365ffd1d768
Merge: 125d7fc6c c11876547
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 05:49:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 125d7fc6c4dcd8c8c5f27b8268a4d64f409f3644
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 04:55:31 2020 +0200
Abstract over simd vs. repr_c vectors.
Also some minor improvements to Event size.
commit d4d4956e9252e1241ce110b2aa85076c6b1e2a23
Merge: 5f3b7294a aced5f979
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:56:54 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 5f3b7294af1f8533edc2620b58863c248e2b07af
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:43:52 2020 +0200
Fix formatting issues I missed before.
commit a428a3ebba70dcab63dd0f8cd983120c90617271
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:41:51 2020 +0200
Fix clippy warnings, part 1.
There aer still a bunch of type too complex and
function takes too many arguments warnings that I'll fix later
(or ignore, since in the one case I did fix a function takes too
many arguments warning I think it made the code *less* readable).
commit ba54307540ed8a937ac08209730284fc653af85b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 30 13:22:42 2020 +0200
Fix light animations so they are removed when the light turns off.
commit 7e0f4bcbf0f4717145d8beac40d52e3acebbe2aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 21:10:20 2020 +0200
Fix crash in edge case for pixel art.
commit 56da06f7a351e2b949e9b014a90b974d511a0924
Merge: cf74d55f2 9f53a4a19
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:56:52 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:29:52 2020 +0200
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
The first concern was addressed by fixing the dimensions of the map
images drawn from the UI (so that we always use a square source
rectangle, rather than a rectangular one according to the dimensions of
the map). We also fixed the way rotation was done in the fragment
shader for north-facing sources to make it properly handle aspect ratio
(this was already done for north-facing targets). Together, these fix
rendering issues peculiar to rectangular maps.
The second and third concerns were jointly addressed by adding an
optional border color to every 2D image drawn by the UI. This turns
out not to waste extra space even though we hold a full f32 color
(to avoid an extra dependency on gfx's PackedColor), since voxel
images already take up more space than Optiion<[f32; 4]> requires.
This is then implemented automatically using the "border color"
wrapping method in the attached sampler.
Since this is implemented in graphics hardware, it only works (at
least naively) if the actual image bounds match the texture bounds.
Therefore, we altered the way the graphics cache stores images
with a border color to guarantee that they are always in their own
texture, whose size exactly matches their extent. Since the easiest
currently exposed way to set a border color is to do so for an
immutable texture, we went a bit further and added a new "immutable"
texture storage type used for these cases; currently, it is always
and automatically used only when there is a specified border color,
but in theory there's no reason we couldn't provide immutable-only
images that use the default wrapping mdoe (though clamp to border
is admittedly not a great default).
To fix the maps case specifically, we set the border color to a
translucent version of the ocean border color. This may need
tweaking going forward, which shouldn't be hard.
As part of this process, we had to modify graphics replacement to
make sure immutable images are *removed* when invalidated, rather
than just having a validity flag unset (this is normally done by
the UI to try to reuse allocations in place if images are updated
in benign ways, since the texture atlases used for Ui do not
support deallocation; currently this is only used for item images,
so there should be no overlap with immutable image replacement,
so this was purely precautionary).
Since we were already touching the relevant code, we also updated
the image dependency to a newer version that provides more ways
to avoid allocations, and made a few other changes that should
hopefully eliminate redundant most of the intermediate buffer
allocations we were performing for what should be zero-cost
conversions. This may slightly improve performance in some
cases.
commit ad18ce939940a8c697270f6e9b94db9942fd8295
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 13:21:09 2020 +0200
Fix continent scale hack.
commit 36b1cb074f5b195aebd7dbbc3da7f0246a1a18ec
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 12:11:40 2020 +0200
Enable loading different sized maps without a recompile.
We may want to tweak the effects of the continent_scale_hack.
commit 13b6d4d534cc4814b7cb3294ca41bbfea0a6b186
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 10:55:48 2020 +0200
Removing WORLD_SIZE, part 1.
Erased almost every instance of WORLD_SIZE and replaced it with a local
power of two, map_size_lg (which respects certain invariants; see
common/src/terrain/map.rs for more details about MapSizeLg). This also
means we can avoid a dependency on the world crate from client, as
desired.
Now that the rest of the code is not expecting a fixed WORLD_SIZE, the
next step is to arrange for maps to store their world size, and to use
that world size as a basis prior to loading the map (as well, probably,
as prior to configuring some of the noise functions).
commit 30b1d2c6428230a9eaa0d749cdcbbd6f1cbccd78
Merge: 7d56ba31b 1377b369f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:58 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 7d56ba31b445441461b28a07fc495d7d4f047c17
Merge: 2101113b4 598f14b25
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 1377b369f6db2258e910d467a5740f31789e3ded
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sun Jul 19 23:25:38 2020 +0200
more saturated pumpkins
commit ae8d50527f93bb0616c2ad46ce4dacb63bc37c6d
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sat Jul 18 20:29:56 2020 +0200
acacia models
commit 2101113b467e691de787392d7f20f1745f5637bd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 18 18:55:25 2020 +0200
Higher detail LOD.
commit add2cfae04b4385fa5590e11e2bd5229d9dee0aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 16 01:57:39 2020 +0200
Revert some irrelevant stuff.
commit 2e2ab3dc1eaa59a4aef7f8d34a53d8aae4c8553a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 15 13:30:49 2020 +0200
Fixing various things about shadows.
* Correcting optimal LISPSM parameter.
* Figure shadows are cast when they're not visible.
* Chunk shadows stay cast until you look away.
* Seamless cubemaps for point lights.
* Etc.
commit 6c31e6b56217274285b597af297036691ea5d897
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 19:50:26 2020 +0200
Fix shadow creation.
commit 6332cbe006115ae205597529cd8bbccd146c2cca
Merge: be438657c 930e0028b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:47:00 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit be438657c33d7b5bfb0a9582c3ed3fd366637323
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:28:08 2020 +0200
Tweaks to shadows.
Added shadow map resolution configuration, added seamless cubemaps,
documented all existing rendering options, and fixed a few Clippy
errors.
commit 23b4058906013c7d2a40c286e20e32c5fbd897ed
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 10:11:19 2020 +0200
Fix moon, use nonlinear noise for terrain.
Note that the latter has a bit of performance cost.
commit 7fbe5cbfbb9dc29607957b8e62f432a4deed193d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:23:02 2020 +0200
Address lies about max texture size.
commit bcfc62b5e13a1cdd83f57535fde4694720bebfd9
Merge: 75e3626a7 18a08e8fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:22:08 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 75e3626a785919f43fdcf2127c2b10e3e4df2f9f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:21:52 2020 +0200
OpenGL 3.3 minimum.
commit 18a08e8fe2739f02af99a5d2cb4e7c38c49e858b
Author: Monty Marz <m.marzouq@gmx.de>
Date: Tue Jul 7 23:57:52 2020 +0200
settings localization
commit 90c5d1ca3620092bc3ae10b2211489eb1cf6f5e8
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 21:11:48 2020 +0200
Lower near distance.
commit 0e66f02b25aaddaa2dfddbbc89cd67de54a9a7b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 20:09:01 2020 +0200
All sprites sway in the wind now.
commit db1401a6910bf42dcf502462c90038752ff5fbdb
Merge: 69e508d8c e8b4b29d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 19:34:17 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 69e508d8c94d8973033817ca86f357e466fc7c4d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 18:41:37 2020 +0200
Make it easy to switch to SIMD for math.
commit ffe0f5928c7a7e87d00cb5426b3b1d831d7e02fd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 21:21:12 2020 +0200
Fix some issues with underwater rendering.
commit bfda6da42f38fd02c31ee92c81ab785a3e50c2a0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 19:17:59 2020 +0200
Fix some minor display issues.
commit 0ed752e087968cf901301884aaeae698e32ef8a5
Merge: ccc6a06a8 518edcb85
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:14:21 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit ccc6a06a8d4504d6b9f7af7905a414d2ee06ab76
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:04:34 2020 +0200
Some minor changes.
commit 4e020246702889269efe1a191788992164c508d6
Merge: 50a64d927 e05c9267a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 16:17:40 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 50a64d927e6c4f4b0e4688e4cbfca694bc3f922a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 13:07:03 2020 +0200
Fix far plane.
commit 7dd06da34cae8f9ea3b6c889fe965181f3fd3949
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:25:35 2020 +0200
Add shadows.glsl.
commit 618a18c998778bf871b905a74657440fcc384c80
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:10:22 2020 +0200
Adding shadows, greedy meshing, and more.
commit eaea83fe6a5cb1cb0ba8beef888183c718258496
Merge: 267018495 2f89b863e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 22:47:07 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 2670184954a13e4a9e7a4e35ba79aac0c5fac2f7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 21:20:01 2020 +0200
Make civsim and sites deterministic.
For anything in worldgen where you use a HashMap, *please* think
carefully about which hasher you are going to use! This is
especially true if (for some reason) you are depending on hashmap
iteration order remaining stable for some aspect of worldgen.
commit f8376fd5dc72b4a9c2f51a6b4570d59c8b8e9343
Merge: 654f7e049 cdee191dd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 17:53:57 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 654f7e049258d9da27c09608bbe6a46ffa8787e5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed May 20 21:22:30 2020 +0200
Correct backface culling.
commit 560501df05ca725409b0f2e4eb31bdfdc15fd0c7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue May 19 17:22:06 2020 +0200
Greedy messhing for shadows.
commit a4d87e1875ca543436e6bbbeb20348facc5a52d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun May 17 05:59:00 2020 +0200
Shadow maps work for lantern.
commit 243d0837b8a3b08172c9a3c348d964d7ddc2a0a8
Merge: 04382dc28 71dd520cd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:53:13 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 04382dc28632b6c66e8821f6870c0daaa1c1901a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:22:17 2020 +0200
WIP: better graphics config, better LOD, shadow maps.
commit 22ddbad3eb32bfa70f0932176022208fe67ded81
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 18:54:09 2020 +0200
Minor shader fixes.
commit 746a10e8d01ac235f994b0cde78fa48998602a1f
Merge: 0f4a0e763 40ab94673
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 04:02:09 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0f4a0e763db3afbdc4fb0558611f38326ca87151
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 23:03:24 2020 +0200
Switch back to pop-in terrain.
commit dd74fa7e4a53667b38811d7aec58d7f6a68889bb
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 22:58:55 2020 +0200
LOD shading closer to voxel shading.
commit ef67bd58ba0bdaf622b078892d768263b6cba268
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 28 20:49:03 2020 +0200
Experimental underwater lighting.
commit 2c5ad9d07605e80d5fd5679dd3a5d70c605b86a9
Merge: 748279835 303967a6f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 22:35:24 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7482798354eda18c8207950080fc24d443a369de
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 21:59:55 2020 +0200
Replace discard in figure-frag.
commit d83b4ae69be4912f69bf7835f509c68a1c7770a4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:45:57 2020 +0200
Fix sprite lighting, HDR from focus_pos.
commit 0594238004f116274905fa0ed7c2b6c417ed1d29
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:14:10 2020 +0200
Proper HDR from point lights.
commit 48c93d2b41ce5743103d18e76cc228f5ac766492
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 14:01:43 2020 +0200
Brighter ambiance, darker LOD shadows.
commit e0452e895ccfa8a43f368cae3b8b8aedc24dad93
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 13:13:23 2020 +0200
More proper HDR.
commit 4c6da3ed16cfeebb455e40da5f557b4af9a499d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 00:13:10 2020 +0200
Trying LOD noise.
commit 682a3d74c85df5503ffe1fc1cc891bce789df1ad
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 23:11:08 2020 +0200
Fix LOD heights in towns.
commit cc39e5734e8b18f9077bf42e66337c1319dd6b6e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 21:01:23 2020 +0200
More LOD fixes.
commit 8116b21c2e51c836e77894e309ac273caf2917b3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:54:43 2020 +0200
I like this coloring.
commit bc2560ea90b36f4b46190005344232d993043ac3
Merge: 14effdd5d e690efe71
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:48:33 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 14effdd5db8747fcf3eb34f03b46b7792e92d1c5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:24:35 2020 +0200
Re-saturate.
commit 48a643955d4435b78179acba0beb4a979905cc31
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:23:57 2020 +0200
Various fixes.
commit f7b497a0c25f4ad4682c71dd1ed6f608052feb9b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 03:22:49 2020 +0200
Render figures again.
commit 44e4aad48deba8266b9f8bdfd3db096b381f5327
Merge: e6f0a5a98 9ec319a18
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 02:01:04 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit e6f0a5a981a82533ba188fff0a54ce98577bb152
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 24 16:12:20 2020 +0200
Add atmospheric scattering.
commit f2953087f691a8edbc001cb98ebf5059fc6f8ac0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 23 00:01:20 2020 +0200
Fix shadowing for specular reflections.
commit ddd4a67a9799b8d08c7dc0c2bec90621c2bed0e3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Apr 22 22:56:12 2020 +0200
HDR fixes.
commit 1015e60deef3c447381996277df7496707a63bd0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 21 18:25:19 2020 +0200
More lighting changes.
commit 80c264abd111fb237e57843efcb5c071d4f84613
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 13 00:29:59 2020 +0200
Lighting experiments.
commit 8414987e589dd5102bad89762a3adaccc0bfe957
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 9 02:38:40 2020 +0200
WIP -- lighting changes and soft shadows.
commit 9cd2b3fb0d6b49776c6dfe463e4169637250b11a
Merge: c7ea687eb 8b149ad11
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:29 2020 +0200
Merge branch 'sharp/new-lighting' into sharp/small-fixes
commit c7ea687ebbc5aace1b455f134a5bf49ce2c7434a
Merge: 476441531 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:02 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 8b149ad11ad4bb75018fcf9519baec27d1c95951
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:32:39 2020 +0200
Trying out a new lighting model.
commit b0ac9f36f755dd06f7c17c46150568064790864f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 07:56:11 2020 +0200
Use bicubic interpolation for terrain.
commit f6fc9307a121514b614bc50ef8eb055953e7da8a
Merge: 33140a295 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 05:01:41 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 4764415312aae6e9ac2d00e86e84577cb958f1ab
Merge: ed2d0111d 13388ee6a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 04:54:48 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 13388ee6a42943f3f79a9cb488346cef18e272fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 20:30:08 2020 +0200
Various fixes (to coloring and to soft shadows).
commit fbd084a94a067082a87cd6d28b82054709bc9265
Merge: 5a089863b 4fdf6896a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 18:50:38 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/map-colors
commit ed2d0111d994262ae836d84d1fe5a45e4de72a0b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 06:49:27 2020 +0200
Combining colors and LOD.
commit 88342640c6b835114d01c797b89fdede3b0a2108
Merge: 33140a295 5a089863b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:49:20 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 33140a2951b8212725f42c758b277aaec4d888f7
Merge: 4c65a5aed f34d4b379
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:36:21 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 5a089863beb01d4794bbe3580ada47b278715ea2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 03:17:49 2020 +0200
Making maps brighter.
This is probably not the right way to do it, but oh well!
commit 32b2c99109dd486aa922886081068f9c550c83f2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 02:46:36 2020 +0200
Horizon mapping and "layered" map generation.
Horizon mapping is a method of shadow mapping specific to height maps.
It can handle any angle between 0 and 90 degrees from the ground, as
long as know the horizontal direction in advance, by remembering only a
single angle (the "horizon angle" of the shadow map). More is explained
in common/src/msg/server.rs. We also remember the approximate height of
the largest occluder, to try to be able to generate soft shadows and
create a vertical position where the shadows can't go higher.
Additionally, map generation has been reworked. Instead of computing
everything from explicit samples, we pass in sampling functions that
return exactly what the map generator needs. This allows us to cleanly
separate the way we sample things like altitudes and colors from the map
generation process. We exploit this to generate maps *partially* on the
server (with colors and rivers, but not shading). We can then send the
partially completed map to the client, which can combine it with shadow
information to generate the final map. This is useful for two reasons:
first, it makes sure the client can apply shadow information by itself,
and second, it lets us pass the unshaded map for use with level of
detail functionality.
For similar reasons, river generation is split
out into its own layer, but for now we opt to still generate rivers on
the server (since the river wire format is more complicated to compress
and may require some extra work to make sure we have enough precision to
draw rivers well enough for LoD).
Finally, the mostly ad-hoc lighting we were performing has been (mostly)
replaced with explicit Phong reflection shading (including specular
highlights). Regularizing this seems useful and helps clarify the
"meaning" of the various light intensities, and helps us keep a more
physically plausible basis. However, its interaction with soft shadows
is still imperfect, and it's not yet clear to me what we need to do to
turn this into something useful for LoD.
commit f8926a5737ddc51f3d585c651a64c43677aae0f4
Merge: a1aee931e 875ae6ced
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Mar 13 13:32:42 2020 +0100
Merge remote-tracking branch 'origin/master' into sharp/map-colors
commit 4c65a5aed353b119aea65a2aaeb94549b67beb42
Author: Treeco <5021038-Treeco@users.noreply.gitlab.com>
Date: Mon Feb 24 16:48:05 2020 +0000
Made LOD setting slider exponential
commit 2fa7b2d20d7233dc8bfd64f9f7f54617575248f1
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 17:49:53 2020 +0000
Added mist to LoD
commit aab059a450b5f635777129ff82cc15b662965c3c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 15:14:06 2020 +0000
Added LoD slider
commit 779c36b538121c5ade3633ae5cb67bb14c8c3877
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:54:55 2020 +0000
Reduced cost of vertex pushing
commit 9fea150473906b166365b738ebcea07c697daf3d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:38:53 2020 +0000
Fixed maths, improved LoD resolution
commit 5481df38fea5bf183ff376a3337179cfaa5233dc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 11:22:50 2020 +0000
Dynamically relocate LoD vertices to enhance details
commit a3e36a50ababd615da7db1b26158c7906a5def01
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 18:13:51 2020 +0000
Simpler terrain spiral rendering
commit 255f450ae9ac8763db4bede075fb409161ed57cc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:53:17 2020 +0000
Better LoD precision
commit 3d027aebe812a5b8658a4eb8123dc9f61b3776d2
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:04:03 2020 +0000
Better falloff
commit be775c9484b457b2c0b1a494aec03392d0c70e76
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 15:30:45 2020 +0000
Applied good ideas from experimental branch
commit 58587b68545a23c5c04ab4574a4b94b3bc982246
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 16:15:13 2020 +0000
Minor fixes to LoD merging
commit 7b42aebd709c14df2db766aad61d9280ad24d84d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 15:04:44 2020 +0000
Capped LoD dragging
commit 8aafc559f87124e1ea5ca6e3ddc2aa0c242d793c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:54:37 2020 +0000
Better blending between LoD and terrain border
commit edd3455d5161792d87ddc8eadc0ecbad5532b284
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:40:19 2020 +0000
Fixed LoD z depth, added sea level offset
commit b9b06744620114dd5556e73f64fa93c145503a7c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:27:43 2020 +0000
Better LoD smoothing
commit a1aee931e790431560cd2d953ad61d9497072afd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Feb 21 14:52:17 2020 +0100
Adding shadows.
commit 2400786c13dd891c131ed86d48d05df516a8a778
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 13:48:40 2020 +0000
Use world map as LoD source
commit dbf650f504a4c25fbbc2096ac3616c736bf52d23
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Jan 20 00:48:14 2020 +0000
Better clouds at distance
commit 5e6f81b86cdb9730b9b056877b19257075fd5fa8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Jan 19 23:59:02 2020 +0000
sync
commit 745e7540ddb000cc645f612767b337c2ddc3f7c0
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 12:40:48 2019 +0000
Improved cloud falloff mist, faster noise sampling
commit f6a200d0cb866196ba57697466755f9e0c7ea5d8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 10:09:00 2019 +0000
Improved long-range depth precision, removed unnecessary LoD polygons
commit 63d1b2bb2292898d59fb4f4e502201103dfeb86f
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 20:57:46 2019 +0000
Working LoD shader
commit f13d98ee3e58f881e8b978861a67663b59ed91ec
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 11:03:40 2019 +0000
LoD first attempt (stack overflow issue)
2020-08-20 18:34:59 +00:00
|
|
|
|
#[inline]
|
|
|
|
|
pub fn into_modern(self) -> Result<ModernMap, WorldFileError> {
|
|
|
|
|
let pow_size = (self.alt.len().trailing_zeros()) / 2;
|
|
|
|
|
let two_coord_size = 1 << (2 * pow_size);
|
|
|
|
|
if self.alt.len() != self.basement.len() || self.alt.len() != two_coord_size {
|
|
|
|
|
return Err(WorldFileError::WorldSizeInvalid);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// The recommended continent scale for maps from version 0.5.0 is (in all
|
|
|
|
|
// existing cases) just 1.0 << (f64::from(pow_size) - 10.0).
|
|
|
|
|
let continent_scale_hack = (f64::from(pow_size) - 10.0).exp2();
|
|
|
|
|
|
|
|
|
|
let map = WorldMap_0_7_0 {
|
|
|
|
|
map_size_lg: Vec2::new(pow_size, pow_size),
|
|
|
|
|
continent_scale_hack,
|
|
|
|
|
alt: self.alt,
|
|
|
|
|
basement: self.basement,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
map.into_modern()
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
impl WorldMap_0_7_0 {
|
2020-01-18 18:41:37 +00:00
|
|
|
|
#[inline]
|
|
|
|
|
pub fn into_modern(self) -> Result<ModernMap, WorldFileError> {
|
|
|
|
|
if self.alt.len() != self.basement.len()
|
(See sharp/lod-history) LOD, shadows, greedy meshing, new lighting, perf
---
Pretty much a Veloren fork at this point. Here's a high level overview of the changes (will be added to CHANGELOG just before merge).
At a high level this MR incorporates roughly two groups of changes.
The first group consists of new game features: more flexible map sizes, level of detail terrain, shadow maps, and a new lighting
engine. This is "feature work" that (mostly) only adds new things to Veloren, and mostly shouldn't affect old stuff.
The second big group of changes are those addressing the fallout from all the new features. These include performance fixes of
various sorts: the addition of multiple graphics options and optimization of the cheap ones to avoid work, switching all voxel
models to use some variant of greedy meshing, switching over much of our CPU-side vector math to exploit SIMD instructions
(coinciding with a fork of `vek`), and a rewrite of how the UI handles text rendering (coinciding with updates to our fork
of `conrod`). Making Veloren's hardcoded colors appear correct under the new lighting engine also required considerably
changes (TODO: Fill in this section when it's complete).
The second category of changes often heavily touches code owned by other people, including frequently modified code "owned" by a
handful of people, so I recommend that this code be reviewed particularly carefully.
---
At a high level (each will be described in more detail below):
- The world map has been refactored.
- The world size is no longer hardcoded (@zesterer).
- The map generation code was made generic to allow using it outside of the `world` crate (@zesterer).
- On world creation, we now compute *horizon maps* (@zesterer).
- The way we pass the world from the server to the client has been updated (@xMAC94x).
- Artifacts related to image rotation were fixed (@imbris).
- Multiflow rivers were enabled (@zesterer).
- In the process of making changes related to the world map, various incidental fixes and optimizations were required.
- The new *level of detail* feature was added (@zesterer wrote part of this and has checked out the rest).
- A new LOD terrain rendering step was added to the pipeline.
- The LOD terrain quality was made configurable via a graphics setting.
- Horizon maps were used to cast shadows from LOD chunks on both LOD and non-LOD terrain.
- A "voxelization" effect was incorporated into rendered LOD terrain to make it blend better into the world.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Veloren's lighting has been completely overhauled (@zesterer has already checked most of this out).
- A semi-accurate index of refraction was assigned to our materials.
- A new, more realistic, physically based approach to lighting was used using the *Ashikhmin Shirley* BRDF.
- We emulate *atmospheric scattering* using equations designed for measuring solar panel light exposure.
- We attempt to compute *realistic light attenuation* in water using its real material properties.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Point and directional lights now cast realistic shadows, using *shadow mapping.* (@imbris, @zesterer, @Treeco, @YuriMomo)
- Point light shadow maps were added to the rendering pipeline, using geometry shaders and *seamless cube maps*.
- Directional light shadows were added to the rendering pipeline, using LISPSM together with disabling *depth clamping*.
- "Shadow-only" chunks and NPCs were added to prevent shadows from models behind you from disappearing.
- In the process of making changes related to shadow maps, various incidental fixes and optimizations were required.
The addition of shadow maps, LOD terrain, and the new lighting all led to significant performance degradation, on top of other
changes happening in master. Therefore, a large number of performance improvements were also needed:
- The graphics options were made much more flexible and configurable, and shaders were optimize.
- New options were provided for how to render lights and shadows (@Pfauenauge, @zesterer).
- Graphic setting storage and configuration were overhauled to make adding new features easier (@Pfauenauge, @imbris).
- Shaders were rewritten to utilize GLSL's preprocessor to avoid overhead (@zesterer, @YuriMomo).
- In the process of making changes related to providing additional rendering options, various incidental fixes and optimizations were required.
- Voxel model creation was switched to use *greedy meshing.*
- A new voxel meshing method, greedy meshing, was added (@imbris).
- Uses of the older meshing methods were migrated to use greedy meshing (@imbris, @jshipsey, @Pfauenauge).
- New restrictions were added to terrain, figure, and sprites to future proof them for further optimizations (@jshipsey, @Pfauenauge, @zesterer).
- Most positions are now relative to either chunk or player position for better precision (@imbris, @zesterer, @scottc).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- Animation and terrain math were switched to use SIMD where possible.
- Fixes were made to vek to make its SIMD feature usable for us (@zesterer, @imbris).
- The interface and types used in bone animation were changed in various ways (@jshipsey, @Snowram, @Pfauenauge).
- Redundant code generation for body animation is now partly taken care of by a macro (@jshipsey, @Snowram, @Pfauenauge).
- Animation code was modified to to use vek's SIMD representation where possible (@jshipsey, @Snowram, @Pfauenauge).
- Terrain meshing code and shadow map math were also modified to use vek's SIMD representation (@imbris).
- SIMD instruction generation was enabled (@YuriMomo, @jshipsey, @Snowram, @imbris, @Angelonfira, @xMAC94x).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- The way we cache glyphs was completely refactored, fixed, and optimized.
- Our fork of `conrod` was optimized in various ways (@imbris).
- Our fork of `conrod` now exposes whether a widget was updated during the current frame (@imbris).
- Our use of the glyph cache was rewritten for correctness (@imbris).
- A *text cache* was introduced that lets us skip remeshing glyphs that have not changed (@imbris).
- Various changes were made to reduce pressure on the glyph cache, with more planned (@imbris, @Pfauenauge).
- In the process of making changes related to the glyph cache, various incidental fixes and optimizations were required.
- Colors were changed to keep Veloren's look consistent with master.
- Some older tree models were brought back (@Pfauenauge).
- TODO(@Sharp): All hardcoded colors were extracted and made hotloadable.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Hardcoded colors were fixed to conform to Veloren's style.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Color models were fixed to conform to Veloren's style.
A detailed description of the involved changes follows.
---
- The world size is no longer hardcoded. All functions dependent on world size now take a `WorldSizeLg`, which holds the base 2 logarithm of each actual world dimension and is guaranteed to maintain certain properties (outlined in `common/src/terrain/map.rs`). Additionally, many utility functions that utilize the world size were moved into `common` as well (mostly `common/src/terrain/mod.rs`). Finally, the world map format was updated in order to store its size explicitly, with a migration path from the old format that should work whenever the old formatted map was a square (practically always). See `world/src/sim/mod.rs` for these changes.
- The map generation code was made generic to allow using it outside of the `world` crate. The parts of the map generating code that do not need to query the world were moved over to `common/src/terrain/map.rs`, allowing them to be used from the client without creating a dependency on `world`. The rest of it was turned into helper functions in `world/src/sim/map.rs`, which can be passed as closures to the generic map generation code to complete its construction. This also means that colors are now passed in separately to the map generation function. See <https://veloren.net/devblog-78/> for more details.
- On world creation, we now compute *horizon maps*. See the function in `world/src/sim/util.rs`.
Given a height map and a plane intersecting that height map, our horizon maps allow us to encode enough information to reconstruct shadows for each point on the height map using only the *horizon angle* (the angle at which the sun starts to become visible). As Veloren's sun only covers one plane, this is sufficient for encoding sun shadows for LOD terrain, by encoding two angles per chunk (one for each 90 degrees the sun covers). We can also use this for the moon, if we want, since the moon follows the same path. Additionally, we store the *height* of the furthest occluder, to try to make the shadows volumetric; so this means 4 bytes in total for each chunk.
Support for horizon maps has been merged into the map functionality in common as well.
- The way we pass the world from the server to the client has been updated. Rather than passing the prerendered map, we instead pass three maps with values for each chunk; one with the color information, a second with altitude information, and a third with horizon map information. We then reconstruct the map on the client, together with some additional information we send from the server (like the sea level and maximum height). See `common/src/msg/server.rs` for a detailed description of the format of `WorldMapMsg`, and `server/src/libr.rs` and `client/src/lib.rs` for details of the map construction and parsing.
- Artifacts related to image rotation were fixed. See the commit message for commit SHA `cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e` for a detailed explanation. This involved changes to shaders, the addition of a new type of graphic (also reflected in the graphic cache) that allows specifying a border color (which automatically makes the associated texture immutable), and some related fixes. I reproduce the first two paragraphs of the MR description as well:
```
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
```
- Multiflow rivers were enabled.
This does not really need to be part of this MR, and would be easy to revert, but since it seemed to provide a nice improvement it's currently packaged with it.
We already computed multiple outflows from each chunk for erosion purposes long before this MR.
However, we never modified river rendering to be able to handle this case (just a single downhill river flow is complex enough!) so this was not exposed when deciding which chunks were rivers.
Now that
- In the process of making changes related to the world map, various incidental fixes and optimizations were required. Some examples of fixes include making sure terrain is never lowered to below sea level (to make the shadow maps report correct values), fixing map altitudes and colors to understand things like cliffs and "block level" coloring (that doesn'te xist on the column level), and fixing a crashbug when rendering images for the UI where source pixels are strongly rectangular. Some examples of related performance fixes include avoiding allocating a fresh vector for all the maps (i.e. copying it over to change the format from `[u32; n]` to `DynamicImage` and then copying again to convert to `RgbaImage`), and instead using the `gfx::memory::slice` function to accomplish the same thing. These sorts of changes are spread all arond the code.
This includes the additon of a new scene, `voxygen/src/scene/lod.rs`, a new pipeline `voxygen/src/render/pipeline/lod_terrain.rs`, and new shaders `assets/vxygen/shaders/lod-terrain-vert.glsl` and `assets/vxygen/shaders/lod-terrain-frag.glsl`, as well as associated changes to the renderer in `voxygen/src/render/renderer.rs`.
The main idea behind our initial approach to LOD was to take the world data we now get from the server (altitude, color, and horizon mapping).
- Some previously computed values were turned into shader uniforms for better prediction on weak processors. (@zesterer)
- Calls to power or trig functions were removed or replaced with multiplications, where possible.
- After some deliberation
- To properly handle sprite "waving" for nearby sprites,
We explicitly designed the greedy meshing system with figures and sprites in mind.
In both cases, we want to be able to *efficiently* pack many different models into the same texture, especially in cases where we know
we will either not be removing any of the grouped-together from the models from the texture, or will remove all of them at once (so
they can be packed into some specific subtexture).
For sprites, since we know every model in advance and never intend to deallocate them, we currently pack them all as efficiently as
possible into one giant tetxure atlas. However, in the future we might opt to pack them slightly less efficiently in exchange for
shrinking the sprite vertex size.
For figures, we pack all the textures for each *model* into the same atlas.
is a global texture atlas used for every sprite, and for figures which is why we have the ability to mesh multiple
models to the same texture area (using the simple texture atlas allocator) without requiring intermediate vector allocations.
This is accomplished by delaying the time when we actually write the color and light data to the texture until *after* all the
model vertices have been meshed; then, we can just allocate the whole color/light array at once, making the atlas we use an
exact fit. In computer science-y terms, we accomplish this delay by, after we perform the initial greedy meshing (without
texture information), not continuing to create the texture data, but instead constructing a *continuation*--that is, a function
that, when called, will execute the rest of the computation. We push this continuation (which in Rust terms is a `FnOnce` closure
that takes the `ColLightsInfo` that it is supposed to write to as context) onto a
onto a vector
resizing. To allow for suspended writes to texture data, Rust pointed out to me that the continuation that would eventually write the color and light data to the texture atlas (the one that is shared by all models sharing the same greedy mesher) would have to *own* whatever data it mshed. Because we often generate the model data to mesh as a temporary in `voxygen/src/load.rs`, the
- Matrix multiplications in the shader were reduced for figure data (@zesterer).
- Vertex "waves" for fluid data were removed.
- Terrain "bending" near edges was removed.
- Scaling was fixed to make sure empty space was not introduced in a space previously occupied by a block. It was also changed to take ownership of its voxel data,
rather than sharing it, to let it be used with meshing.
- Rust's nightly version was bumped in order to use the `array_map` function, which lets us reuse more code between the simple map and `FigureModelCache`.
- PositionedGlyph::standalone.
---
I tried to cite sources in many cases[^realtime],[^lloyd],[^lispsm],[^pbrt],[^greedy],[^tjunctions]
where I needed features from elsewhere but I am particularly grateful for the following resources,
esepcially where they have accompanying source code. I linked all of them that are accessible to the public (those that are not were
obtained through legal means).
[^realtime]: Eisemann, Elmar, Michael Schwarz, Ulf Assarsson, Michael Wimmer. Real-Time Shadows. A K Peters/CRC Press (T&F), 20160419.
[^lloyd]: Lloyd,B. 2007. [Logarithmic perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). PhD thesis, University of North Carolina.
[^lispsm]: Wimmer, M., Scherzer, D., and Purgathofer, W. 2004. [Light space perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). In Proceedings of Eurographics Symposium on Rendering 2004, pp. 143– 152.
[^pbrt]: Pharr, Matt, et al. [http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf](Physically Based Rendering: From Theory to Implementation). Third edition, Morgan Kaufmann Publishers/Elsevier, 2017.
[^greedy]: mikolalysenko. “Meshing in a Minecraft Game.” 0 FPS, 30 June 2012, <https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/>.
[^tjunctions]: blackflux. “Meshing in Voxel Engines – Part 1.” Blackflux.Com, 23 Feb. 2014, <https://blackflux.wordpress.com/2014/02/23/meshing-in-voxel-engines-part-1/>.
I am also especially grateful to Khronos, Wikiepdia, and stackoverflow for answering many of my specific questions while writing the MR.
---
Squashed commit of the following:
commit 300505e7305a2fdac722a808ee8538323f215f39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 18:46:25 2020 +0200
Fixing cargo doc and typo in CHANGELOG.
commit ec0aeb18e8499d7d84ef818331b4b65c3d76cea6
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 15:38:50 2020 +0200
Hopefully final commit for the LOD branch.
commit 5e8ea0b1eaac02903a02feb2eb038d195de4872f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 10:14:26 2020 +0200
Falling back to power as stopgap.
commit e44a1cbf46504ee9931a01bdc9033e145500d557
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 09:25:41 2020 +0200
Address imbris feedback.
Temporarily disables shiny water, lowers max VD.
These restrictions will be lifted soon after merging.
commit 561e25778a108ac3712f5ec2ce3a51234c4430d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 08:31:13 2020 +0200
Tweaking shaders a bit.
commit 7d19259078ce0dd7b3742ad7d0cb3fab3ece3fdc
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:59:43 2020 +0200
Fix view example as well.
commit 051cd4934e0fad2c0b15db4380a4189fa318679f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:29:06 2020 +0200
Fix meshing benchmark.
commit c95e07db3b4dcca285678985e65e31b927cb1c61
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 05:46:22 2020 +0200
Address MR feedback, fix scene clouds.
commit 1bfb816cabdb3ffc1e507a009c2d98696b4b573a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:39:36 2020 +0200
Incorporating Pfau's figure color changes.
New eyes and new humanoid colors.
commit 3f9b89a3ac7b3356b1dba0d1a8f6541357f81469
Merge: e2f5162e4 62c53963a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:29:41 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit e2f5162e4f96f4124aa43488f7245d341b3dcfd4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:28:38 2020 +0200
World colors are all hotloadable.
They live in assets/world/style/colors.ron.
Only a small handful of hardcoed colors remain in World; they are either
part of the map, or difficult to disentangle from the rest of the
computation. Comments are made where appropriate.
commit 62c53963abe1975009d34a8f9515a355bef24f31
Author: Marcel Märtens <marcel.cochem@googlemail.com>
Date: Wed Aug 19 15:59:00 2020 +0200
replace pretty_env_logger with tracing
commit 5b1625f99d9586fe80e2232f583ec5af9f953099
Merge: d71003acd 4942b5b39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:15:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit d71003acdabeff970b3928e97c26af6847b5b78e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:14:34 2020 +0200
Hotloading colors, part 1: colors in common.
Currently, this just entails humanoid colors. There are only three
colors not handled; the light emitter colors in
common/src/comp/inventory/item/tool.rs. These don't seem important
enough to me to warrant making hotloadable, at least not right now, but
if it's needed later we can always add them to the file.
commit 63b5e0e553eb2ea49276f192a6fc7dd65254270d
Merge: c32b337a4 6d2c4b9c1
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 13:05:37 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c32b337a46e10d9de473d178a94a3ccd61c39bb3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:52:04 2020 +0200
Fixing LOD grid, for real.
commit a166ae0360395387e09fb35a1f84210c2ce5ec24
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:28:05 2020 +0200
Addressing imbris's initial feedback.
Fixes two minor bugs: explosion particles were no longer spawning
randomly, and LOD grids were not perfectly even.
commit 4cbad004f44060994252dd3d38647a14a589712f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:27:58 2020 +0200
Bumping nightly per request.
commit 548680276aac77c25d43d16b5622f847d474dbef
Merge: acc098604 8f8b20c91
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:26:06 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit acc0986040589a3492f88a740bc3c3fc693b26d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:28:32 2020 +0200
Lower resolution due to lying drivers.
commit d3b878de2a52c358d2944a6bbd0555dad7fbdb10
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:15:38 2020 +0200
Fix issues msh encountered with Intel 4600.
commit 10245e0c1b0cb6fae10d86409435364edc6102ef
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 21:15:02 2020 +0200
Merge more models into one mesh than we did previously.
commit 3155c31e663c52ae5c3a53d5fb5665892a1a498a
Merge: 7204cc8a7 3c199280e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:35:22 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7204cc8a7a4f74a30306bd205d9834fee4bb944f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:34:43 2020 +0200
Fix not yet done NPC animations.
This forces them all to be the idle animation if not specified.
This fixes issues where you'd have giant NPCs in water.
commit bc83360f2a08918f19d417b5f772e1ff554dba08
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 19:36:37 2020 +0200
Try to fix some bugs:
- Z fighting with LOD terrain and water.
- Audio SFX not playing.
commit 1fd104aa603bf3781b6526a5cada46aeca3049dd
Merge: 862df3c99 7c2c392a3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 12:02:31 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 862df3c9976c4da9bd7cfd784f1a85973127968a
Merge: 0a4218ed9 75c1d4401
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 05:52:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0a4218ed9d541a2b34c133351bea38a99ddf4ea7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 22:27:14 2020 +0200
Fix particle depth.
commit f51dfdeb442d0dd5243dd2f344fa4be295bd0875
Merge: c6251a956 5e6dc0471
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:19:04 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit c6251a956ad376400dca5c23420cf8d213dc8fdf
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:15:46 2020 +0200
Cache figures more intelligently.
Cache figures for longer, and don't cache character states for the
player except where they actually affect the rendered model.
commit 0ed801d5404982c6fb63b1eaa4567d908b294c9d
Merge: c11b9bdf0 eea64f78f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 16:32:24 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c11b9bdf0a53bf9884d2f5a48fec9b01d582df1a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 11:47:15 2020 +0200
Remove unneeded Clippy annotation.
commit 16aa9ef40af56d69289d00aafb3deadfb8bd4f35
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 8 00:53:02 2020 +0200
Fix hotloading and Clippy.
commit 3dc973e0be5b758da1e9805eb764ad401374cd0c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 23:50:27 2020 +0200
Major speedups with SIMD.
commit fba64a7d93d5a96077ce87287bbce6ab9b7fbcae
Merge: 76429d00e d1e10b178
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:19 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 76429d00eea00d212fbd672a84ee91e75b19b938
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:10 2020 +0200
Add clippy.toml.
commit c79f512f84dbb83cb82b7954db68ff241dfd8e41
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 11:55:20 2020 +0200
Fix all clippy issues, clean up Rust code.
commit 6f90e010b3fbefb53b0d632e819931350015b6b8
Merge: 77a8c7c26 5929cfa5c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:30 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 77a8c7c267d3f44a1a62bd6b2274359973c5e4d4
Merge: b44e44232 44febaabd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:10 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 5929cfa5c713aa392110bbb62407f76caf53c3df
Author: jshipsey <jshipsey18@gmail.com>
Date: Thu Aug 6 20:47:27 2020 -0400
fixed in-hand arrow bug
commit b44e442325d828f1cd564d66908f89d09e80474b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 6 13:40:35 2020 +0200
Miscellaneous performance improvements.
commit be37acf287c1360d8085862526ac3365ffd1d768
Merge: 125d7fc6c c11876547
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 05:49:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 125d7fc6c4dcd8c8c5f27b8268a4d64f409f3644
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 04:55:31 2020 +0200
Abstract over simd vs. repr_c vectors.
Also some minor improvements to Event size.
commit d4d4956e9252e1241ce110b2aa85076c6b1e2a23
Merge: 5f3b7294a aced5f979
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:56:54 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 5f3b7294af1f8533edc2620b58863c248e2b07af
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:43:52 2020 +0200
Fix formatting issues I missed before.
commit a428a3ebba70dcab63dd0f8cd983120c90617271
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:41:51 2020 +0200
Fix clippy warnings, part 1.
There aer still a bunch of type too complex and
function takes too many arguments warnings that I'll fix later
(or ignore, since in the one case I did fix a function takes too
many arguments warning I think it made the code *less* readable).
commit ba54307540ed8a937ac08209730284fc653af85b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 30 13:22:42 2020 +0200
Fix light animations so they are removed when the light turns off.
commit 7e0f4bcbf0f4717145d8beac40d52e3acebbe2aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 21:10:20 2020 +0200
Fix crash in edge case for pixel art.
commit 56da06f7a351e2b949e9b014a90b974d511a0924
Merge: cf74d55f2 9f53a4a19
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:56:52 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:29:52 2020 +0200
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
The first concern was addressed by fixing the dimensions of the map
images drawn from the UI (so that we always use a square source
rectangle, rather than a rectangular one according to the dimensions of
the map). We also fixed the way rotation was done in the fragment
shader for north-facing sources to make it properly handle aspect ratio
(this was already done for north-facing targets). Together, these fix
rendering issues peculiar to rectangular maps.
The second and third concerns were jointly addressed by adding an
optional border color to every 2D image drawn by the UI. This turns
out not to waste extra space even though we hold a full f32 color
(to avoid an extra dependency on gfx's PackedColor), since voxel
images already take up more space than Optiion<[f32; 4]> requires.
This is then implemented automatically using the "border color"
wrapping method in the attached sampler.
Since this is implemented in graphics hardware, it only works (at
least naively) if the actual image bounds match the texture bounds.
Therefore, we altered the way the graphics cache stores images
with a border color to guarantee that they are always in their own
texture, whose size exactly matches their extent. Since the easiest
currently exposed way to set a border color is to do so for an
immutable texture, we went a bit further and added a new "immutable"
texture storage type used for these cases; currently, it is always
and automatically used only when there is a specified border color,
but in theory there's no reason we couldn't provide immutable-only
images that use the default wrapping mdoe (though clamp to border
is admittedly not a great default).
To fix the maps case specifically, we set the border color to a
translucent version of the ocean border color. This may need
tweaking going forward, which shouldn't be hard.
As part of this process, we had to modify graphics replacement to
make sure immutable images are *removed* when invalidated, rather
than just having a validity flag unset (this is normally done by
the UI to try to reuse allocations in place if images are updated
in benign ways, since the texture atlases used for Ui do not
support deallocation; currently this is only used for item images,
so there should be no overlap with immutable image replacement,
so this was purely precautionary).
Since we were already touching the relevant code, we also updated
the image dependency to a newer version that provides more ways
to avoid allocations, and made a few other changes that should
hopefully eliminate redundant most of the intermediate buffer
allocations we were performing for what should be zero-cost
conversions. This may slightly improve performance in some
cases.
commit ad18ce939940a8c697270f6e9b94db9942fd8295
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 13:21:09 2020 +0200
Fix continent scale hack.
commit 36b1cb074f5b195aebd7dbbc3da7f0246a1a18ec
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 12:11:40 2020 +0200
Enable loading different sized maps without a recompile.
We may want to tweak the effects of the continent_scale_hack.
commit 13b6d4d534cc4814b7cb3294ca41bbfea0a6b186
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 10:55:48 2020 +0200
Removing WORLD_SIZE, part 1.
Erased almost every instance of WORLD_SIZE and replaced it with a local
power of two, map_size_lg (which respects certain invariants; see
common/src/terrain/map.rs for more details about MapSizeLg). This also
means we can avoid a dependency on the world crate from client, as
desired.
Now that the rest of the code is not expecting a fixed WORLD_SIZE, the
next step is to arrange for maps to store their world size, and to use
that world size as a basis prior to loading the map (as well, probably,
as prior to configuring some of the noise functions).
commit 30b1d2c6428230a9eaa0d749cdcbbd6f1cbccd78
Merge: 7d56ba31b 1377b369f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:58 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 7d56ba31b445441461b28a07fc495d7d4f047c17
Merge: 2101113b4 598f14b25
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 1377b369f6db2258e910d467a5740f31789e3ded
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sun Jul 19 23:25:38 2020 +0200
more saturated pumpkins
commit ae8d50527f93bb0616c2ad46ce4dacb63bc37c6d
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sat Jul 18 20:29:56 2020 +0200
acacia models
commit 2101113b467e691de787392d7f20f1745f5637bd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 18 18:55:25 2020 +0200
Higher detail LOD.
commit add2cfae04b4385fa5590e11e2bd5229d9dee0aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 16 01:57:39 2020 +0200
Revert some irrelevant stuff.
commit 2e2ab3dc1eaa59a4aef7f8d34a53d8aae4c8553a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 15 13:30:49 2020 +0200
Fixing various things about shadows.
* Correcting optimal LISPSM parameter.
* Figure shadows are cast when they're not visible.
* Chunk shadows stay cast until you look away.
* Seamless cubemaps for point lights.
* Etc.
commit 6c31e6b56217274285b597af297036691ea5d897
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 19:50:26 2020 +0200
Fix shadow creation.
commit 6332cbe006115ae205597529cd8bbccd146c2cca
Merge: be438657c 930e0028b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:47:00 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit be438657c33d7b5bfb0a9582c3ed3fd366637323
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:28:08 2020 +0200
Tweaks to shadows.
Added shadow map resolution configuration, added seamless cubemaps,
documented all existing rendering options, and fixed a few Clippy
errors.
commit 23b4058906013c7d2a40c286e20e32c5fbd897ed
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 10:11:19 2020 +0200
Fix moon, use nonlinear noise for terrain.
Note that the latter has a bit of performance cost.
commit 7fbe5cbfbb9dc29607957b8e62f432a4deed193d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:23:02 2020 +0200
Address lies about max texture size.
commit bcfc62b5e13a1cdd83f57535fde4694720bebfd9
Merge: 75e3626a7 18a08e8fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:22:08 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 75e3626a785919f43fdcf2127c2b10e3e4df2f9f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:21:52 2020 +0200
OpenGL 3.3 minimum.
commit 18a08e8fe2739f02af99a5d2cb4e7c38c49e858b
Author: Monty Marz <m.marzouq@gmx.de>
Date: Tue Jul 7 23:57:52 2020 +0200
settings localization
commit 90c5d1ca3620092bc3ae10b2211489eb1cf6f5e8
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 21:11:48 2020 +0200
Lower near distance.
commit 0e66f02b25aaddaa2dfddbbc89cd67de54a9a7b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 20:09:01 2020 +0200
All sprites sway in the wind now.
commit db1401a6910bf42dcf502462c90038752ff5fbdb
Merge: 69e508d8c e8b4b29d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 19:34:17 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 69e508d8c94d8973033817ca86f357e466fc7c4d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 18:41:37 2020 +0200
Make it easy to switch to SIMD for math.
commit ffe0f5928c7a7e87d00cb5426b3b1d831d7e02fd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 21:21:12 2020 +0200
Fix some issues with underwater rendering.
commit bfda6da42f38fd02c31ee92c81ab785a3e50c2a0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 19:17:59 2020 +0200
Fix some minor display issues.
commit 0ed752e087968cf901301884aaeae698e32ef8a5
Merge: ccc6a06a8 518edcb85
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:14:21 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit ccc6a06a8d4504d6b9f7af7905a414d2ee06ab76
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:04:34 2020 +0200
Some minor changes.
commit 4e020246702889269efe1a191788992164c508d6
Merge: 50a64d927 e05c9267a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 16:17:40 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 50a64d927e6c4f4b0e4688e4cbfca694bc3f922a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 13:07:03 2020 +0200
Fix far plane.
commit 7dd06da34cae8f9ea3b6c889fe965181f3fd3949
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:25:35 2020 +0200
Add shadows.glsl.
commit 618a18c998778bf871b905a74657440fcc384c80
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:10:22 2020 +0200
Adding shadows, greedy meshing, and more.
commit eaea83fe6a5cb1cb0ba8beef888183c718258496
Merge: 267018495 2f89b863e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 22:47:07 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 2670184954a13e4a9e7a4e35ba79aac0c5fac2f7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 21:20:01 2020 +0200
Make civsim and sites deterministic.
For anything in worldgen where you use a HashMap, *please* think
carefully about which hasher you are going to use! This is
especially true if (for some reason) you are depending on hashmap
iteration order remaining stable for some aspect of worldgen.
commit f8376fd5dc72b4a9c2f51a6b4570d59c8b8e9343
Merge: 654f7e049 cdee191dd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 17:53:57 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 654f7e049258d9da27c09608bbe6a46ffa8787e5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed May 20 21:22:30 2020 +0200
Correct backface culling.
commit 560501df05ca725409b0f2e4eb31bdfdc15fd0c7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue May 19 17:22:06 2020 +0200
Greedy messhing for shadows.
commit a4d87e1875ca543436e6bbbeb20348facc5a52d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun May 17 05:59:00 2020 +0200
Shadow maps work for lantern.
commit 243d0837b8a3b08172c9a3c348d964d7ddc2a0a8
Merge: 04382dc28 71dd520cd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:53:13 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 04382dc28632b6c66e8821f6870c0daaa1c1901a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:22:17 2020 +0200
WIP: better graphics config, better LOD, shadow maps.
commit 22ddbad3eb32bfa70f0932176022208fe67ded81
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 18:54:09 2020 +0200
Minor shader fixes.
commit 746a10e8d01ac235f994b0cde78fa48998602a1f
Merge: 0f4a0e763 40ab94673
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 04:02:09 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0f4a0e763db3afbdc4fb0558611f38326ca87151
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 23:03:24 2020 +0200
Switch back to pop-in terrain.
commit dd74fa7e4a53667b38811d7aec58d7f6a68889bb
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 22:58:55 2020 +0200
LOD shading closer to voxel shading.
commit ef67bd58ba0bdaf622b078892d768263b6cba268
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 28 20:49:03 2020 +0200
Experimental underwater lighting.
commit 2c5ad9d07605e80d5fd5679dd3a5d70c605b86a9
Merge: 748279835 303967a6f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 22:35:24 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7482798354eda18c8207950080fc24d443a369de
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 21:59:55 2020 +0200
Replace discard in figure-frag.
commit d83b4ae69be4912f69bf7835f509c68a1c7770a4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:45:57 2020 +0200
Fix sprite lighting, HDR from focus_pos.
commit 0594238004f116274905fa0ed7c2b6c417ed1d29
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:14:10 2020 +0200
Proper HDR from point lights.
commit 48c93d2b41ce5743103d18e76cc228f5ac766492
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 14:01:43 2020 +0200
Brighter ambiance, darker LOD shadows.
commit e0452e895ccfa8a43f368cae3b8b8aedc24dad93
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 13:13:23 2020 +0200
More proper HDR.
commit 4c6da3ed16cfeebb455e40da5f557b4af9a499d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 00:13:10 2020 +0200
Trying LOD noise.
commit 682a3d74c85df5503ffe1fc1cc891bce789df1ad
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 23:11:08 2020 +0200
Fix LOD heights in towns.
commit cc39e5734e8b18f9077bf42e66337c1319dd6b6e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 21:01:23 2020 +0200
More LOD fixes.
commit 8116b21c2e51c836e77894e309ac273caf2917b3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:54:43 2020 +0200
I like this coloring.
commit bc2560ea90b36f4b46190005344232d993043ac3
Merge: 14effdd5d e690efe71
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:48:33 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 14effdd5db8747fcf3eb34f03b46b7792e92d1c5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:24:35 2020 +0200
Re-saturate.
commit 48a643955d4435b78179acba0beb4a979905cc31
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:23:57 2020 +0200
Various fixes.
commit f7b497a0c25f4ad4682c71dd1ed6f608052feb9b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 03:22:49 2020 +0200
Render figures again.
commit 44e4aad48deba8266b9f8bdfd3db096b381f5327
Merge: e6f0a5a98 9ec319a18
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 02:01:04 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit e6f0a5a981a82533ba188fff0a54ce98577bb152
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 24 16:12:20 2020 +0200
Add atmospheric scattering.
commit f2953087f691a8edbc001cb98ebf5059fc6f8ac0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 23 00:01:20 2020 +0200
Fix shadowing for specular reflections.
commit ddd4a67a9799b8d08c7dc0c2bec90621c2bed0e3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Apr 22 22:56:12 2020 +0200
HDR fixes.
commit 1015e60deef3c447381996277df7496707a63bd0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 21 18:25:19 2020 +0200
More lighting changes.
commit 80c264abd111fb237e57843efcb5c071d4f84613
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 13 00:29:59 2020 +0200
Lighting experiments.
commit 8414987e589dd5102bad89762a3adaccc0bfe957
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 9 02:38:40 2020 +0200
WIP -- lighting changes and soft shadows.
commit 9cd2b3fb0d6b49776c6dfe463e4169637250b11a
Merge: c7ea687eb 8b149ad11
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:29 2020 +0200
Merge branch 'sharp/new-lighting' into sharp/small-fixes
commit c7ea687ebbc5aace1b455f134a5bf49ce2c7434a
Merge: 476441531 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:02 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 8b149ad11ad4bb75018fcf9519baec27d1c95951
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:32:39 2020 +0200
Trying out a new lighting model.
commit b0ac9f36f755dd06f7c17c46150568064790864f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 07:56:11 2020 +0200
Use bicubic interpolation for terrain.
commit f6fc9307a121514b614bc50ef8eb055953e7da8a
Merge: 33140a295 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 05:01:41 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 4764415312aae6e9ac2d00e86e84577cb958f1ab
Merge: ed2d0111d 13388ee6a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 04:54:48 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 13388ee6a42943f3f79a9cb488346cef18e272fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 20:30:08 2020 +0200
Various fixes (to coloring and to soft shadows).
commit fbd084a94a067082a87cd6d28b82054709bc9265
Merge: 5a089863b 4fdf6896a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 18:50:38 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/map-colors
commit ed2d0111d994262ae836d84d1fe5a45e4de72a0b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 06:49:27 2020 +0200
Combining colors and LOD.
commit 88342640c6b835114d01c797b89fdede3b0a2108
Merge: 33140a295 5a089863b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:49:20 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 33140a2951b8212725f42c758b277aaec4d888f7
Merge: 4c65a5aed f34d4b379
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:36:21 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 5a089863beb01d4794bbe3580ada47b278715ea2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 03:17:49 2020 +0200
Making maps brighter.
This is probably not the right way to do it, but oh well!
commit 32b2c99109dd486aa922886081068f9c550c83f2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 02:46:36 2020 +0200
Horizon mapping and "layered" map generation.
Horizon mapping is a method of shadow mapping specific to height maps.
It can handle any angle between 0 and 90 degrees from the ground, as
long as know the horizontal direction in advance, by remembering only a
single angle (the "horizon angle" of the shadow map). More is explained
in common/src/msg/server.rs. We also remember the approximate height of
the largest occluder, to try to be able to generate soft shadows and
create a vertical position where the shadows can't go higher.
Additionally, map generation has been reworked. Instead of computing
everything from explicit samples, we pass in sampling functions that
return exactly what the map generator needs. This allows us to cleanly
separate the way we sample things like altitudes and colors from the map
generation process. We exploit this to generate maps *partially* on the
server (with colors and rivers, but not shading). We can then send the
partially completed map to the client, which can combine it with shadow
information to generate the final map. This is useful for two reasons:
first, it makes sure the client can apply shadow information by itself,
and second, it lets us pass the unshaded map for use with level of
detail functionality.
For similar reasons, river generation is split
out into its own layer, but for now we opt to still generate rivers on
the server (since the river wire format is more complicated to compress
and may require some extra work to make sure we have enough precision to
draw rivers well enough for LoD).
Finally, the mostly ad-hoc lighting we were performing has been (mostly)
replaced with explicit Phong reflection shading (including specular
highlights). Regularizing this seems useful and helps clarify the
"meaning" of the various light intensities, and helps us keep a more
physically plausible basis. However, its interaction with soft shadows
is still imperfect, and it's not yet clear to me what we need to do to
turn this into something useful for LoD.
commit f8926a5737ddc51f3d585c651a64c43677aae0f4
Merge: a1aee931e 875ae6ced
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Mar 13 13:32:42 2020 +0100
Merge remote-tracking branch 'origin/master' into sharp/map-colors
commit 4c65a5aed353b119aea65a2aaeb94549b67beb42
Author: Treeco <5021038-Treeco@users.noreply.gitlab.com>
Date: Mon Feb 24 16:48:05 2020 +0000
Made LOD setting slider exponential
commit 2fa7b2d20d7233dc8bfd64f9f7f54617575248f1
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 17:49:53 2020 +0000
Added mist to LoD
commit aab059a450b5f635777129ff82cc15b662965c3c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 15:14:06 2020 +0000
Added LoD slider
commit 779c36b538121c5ade3633ae5cb67bb14c8c3877
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:54:55 2020 +0000
Reduced cost of vertex pushing
commit 9fea150473906b166365b738ebcea07c697daf3d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:38:53 2020 +0000
Fixed maths, improved LoD resolution
commit 5481df38fea5bf183ff376a3337179cfaa5233dc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 11:22:50 2020 +0000
Dynamically relocate LoD vertices to enhance details
commit a3e36a50ababd615da7db1b26158c7906a5def01
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 18:13:51 2020 +0000
Simpler terrain spiral rendering
commit 255f450ae9ac8763db4bede075fb409161ed57cc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:53:17 2020 +0000
Better LoD precision
commit 3d027aebe812a5b8658a4eb8123dc9f61b3776d2
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:04:03 2020 +0000
Better falloff
commit be775c9484b457b2c0b1a494aec03392d0c70e76
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 15:30:45 2020 +0000
Applied good ideas from experimental branch
commit 58587b68545a23c5c04ab4574a4b94b3bc982246
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 16:15:13 2020 +0000
Minor fixes to LoD merging
commit 7b42aebd709c14df2db766aad61d9280ad24d84d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 15:04:44 2020 +0000
Capped LoD dragging
commit 8aafc559f87124e1ea5ca6e3ddc2aa0c242d793c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:54:37 2020 +0000
Better blending between LoD and terrain border
commit edd3455d5161792d87ddc8eadc0ecbad5532b284
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:40:19 2020 +0000
Fixed LoD z depth, added sea level offset
commit b9b06744620114dd5556e73f64fa93c145503a7c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:27:43 2020 +0000
Better LoD smoothing
commit a1aee931e790431560cd2d953ad61d9497072afd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Feb 21 14:52:17 2020 +0100
Adding shadows.
commit 2400786c13dd891c131ed86d48d05df516a8a778
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 13:48:40 2020 +0000
Use world map as LoD source
commit dbf650f504a4c25fbbc2096ac3616c736bf52d23
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Jan 20 00:48:14 2020 +0000
Better clouds at distance
commit 5e6f81b86cdb9730b9b056877b19257075fd5fa8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Jan 19 23:59:02 2020 +0000
sync
commit 745e7540ddb000cc645f612767b337c2ddc3f7c0
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 12:40:48 2019 +0000
Improved cloud falloff mist, faster noise sampling
commit f6a200d0cb866196ba57697466755f9e0c7ea5d8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 10:09:00 2019 +0000
Improved long-range depth precision, removed unnecessary LoD polygons
commit 63d1b2bb2292898d59fb4f4e502201103dfeb86f
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 20:57:46 2019 +0000
Working LoD shader
commit f13d98ee3e58f881e8b978861a67663b59ed91ec
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 11:03:40 2019 +0000
LoD first attempt (stack overflow issue)
2020-08-20 18:34:59 +00:00
|
|
|
|
|| self.alt.len() != (1 << (self.map_size_lg.x + self.map_size_lg.y))
|
|
|
|
|
|| self.continent_scale_hack <= 0.0
|
2020-01-18 18:41:37 +00:00
|
|
|
|
{
|
|
|
|
|
return Err(WorldFileError::WorldSizeInvalid);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Ok(self)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
impl WorldFile {
|
2020-02-01 20:39:39 +00:00
|
|
|
|
/// Turns map data from the latest version into a versioned WorldFile ready
|
|
|
|
|
/// for serialization. Whenever a new map is updated, just change the
|
|
|
|
|
/// variant we construct here to make sure we're using the latest map
|
|
|
|
|
/// version.
|
2020-01-18 18:41:37 +00:00
|
|
|
|
|
(See sharp/lod-history) LOD, shadows, greedy meshing, new lighting, perf
---
Pretty much a Veloren fork at this point. Here's a high level overview of the changes (will be added to CHANGELOG just before merge).
At a high level this MR incorporates roughly two groups of changes.
The first group consists of new game features: more flexible map sizes, level of detail terrain, shadow maps, and a new lighting
engine. This is "feature work" that (mostly) only adds new things to Veloren, and mostly shouldn't affect old stuff.
The second big group of changes are those addressing the fallout from all the new features. These include performance fixes of
various sorts: the addition of multiple graphics options and optimization of the cheap ones to avoid work, switching all voxel
models to use some variant of greedy meshing, switching over much of our CPU-side vector math to exploit SIMD instructions
(coinciding with a fork of `vek`), and a rewrite of how the UI handles text rendering (coinciding with updates to our fork
of `conrod`). Making Veloren's hardcoded colors appear correct under the new lighting engine also required considerably
changes (TODO: Fill in this section when it's complete).
The second category of changes often heavily touches code owned by other people, including frequently modified code "owned" by a
handful of people, so I recommend that this code be reviewed particularly carefully.
---
At a high level (each will be described in more detail below):
- The world map has been refactored.
- The world size is no longer hardcoded (@zesterer).
- The map generation code was made generic to allow using it outside of the `world` crate (@zesterer).
- On world creation, we now compute *horizon maps* (@zesterer).
- The way we pass the world from the server to the client has been updated (@xMAC94x).
- Artifacts related to image rotation were fixed (@imbris).
- Multiflow rivers were enabled (@zesterer).
- In the process of making changes related to the world map, various incidental fixes and optimizations were required.
- The new *level of detail* feature was added (@zesterer wrote part of this and has checked out the rest).
- A new LOD terrain rendering step was added to the pipeline.
- The LOD terrain quality was made configurable via a graphics setting.
- Horizon maps were used to cast shadows from LOD chunks on both LOD and non-LOD terrain.
- A "voxelization" effect was incorporated into rendered LOD terrain to make it blend better into the world.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Veloren's lighting has been completely overhauled (@zesterer has already checked most of this out).
- A semi-accurate index of refraction was assigned to our materials.
- A new, more realistic, physically based approach to lighting was used using the *Ashikhmin Shirley* BRDF.
- We emulate *atmospheric scattering* using equations designed for measuring solar panel light exposure.
- We attempt to compute *realistic light attenuation* in water using its real material properties.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Point and directional lights now cast realistic shadows, using *shadow mapping.* (@imbris, @zesterer, @Treeco, @YuriMomo)
- Point light shadow maps were added to the rendering pipeline, using geometry shaders and *seamless cube maps*.
- Directional light shadows were added to the rendering pipeline, using LISPSM together with disabling *depth clamping*.
- "Shadow-only" chunks and NPCs were added to prevent shadows from models behind you from disappearing.
- In the process of making changes related to shadow maps, various incidental fixes and optimizations were required.
The addition of shadow maps, LOD terrain, and the new lighting all led to significant performance degradation, on top of other
changes happening in master. Therefore, a large number of performance improvements were also needed:
- The graphics options were made much more flexible and configurable, and shaders were optimize.
- New options were provided for how to render lights and shadows (@Pfauenauge, @zesterer).
- Graphic setting storage and configuration were overhauled to make adding new features easier (@Pfauenauge, @imbris).
- Shaders were rewritten to utilize GLSL's preprocessor to avoid overhead (@zesterer, @YuriMomo).
- In the process of making changes related to providing additional rendering options, various incidental fixes and optimizations were required.
- Voxel model creation was switched to use *greedy meshing.*
- A new voxel meshing method, greedy meshing, was added (@imbris).
- Uses of the older meshing methods were migrated to use greedy meshing (@imbris, @jshipsey, @Pfauenauge).
- New restrictions were added to terrain, figure, and sprites to future proof them for further optimizations (@jshipsey, @Pfauenauge, @zesterer).
- Most positions are now relative to either chunk or player position for better precision (@imbris, @zesterer, @scottc).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- Animation and terrain math were switched to use SIMD where possible.
- Fixes were made to vek to make its SIMD feature usable for us (@zesterer, @imbris).
- The interface and types used in bone animation were changed in various ways (@jshipsey, @Snowram, @Pfauenauge).
- Redundant code generation for body animation is now partly taken care of by a macro (@jshipsey, @Snowram, @Pfauenauge).
- Animation code was modified to to use vek's SIMD representation where possible (@jshipsey, @Snowram, @Pfauenauge).
- Terrain meshing code and shadow map math were also modified to use vek's SIMD representation (@imbris).
- SIMD instruction generation was enabled (@YuriMomo, @jshipsey, @Snowram, @imbris, @Angelonfira, @xMAC94x).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- The way we cache glyphs was completely refactored, fixed, and optimized.
- Our fork of `conrod` was optimized in various ways (@imbris).
- Our fork of `conrod` now exposes whether a widget was updated during the current frame (@imbris).
- Our use of the glyph cache was rewritten for correctness (@imbris).
- A *text cache* was introduced that lets us skip remeshing glyphs that have not changed (@imbris).
- Various changes were made to reduce pressure on the glyph cache, with more planned (@imbris, @Pfauenauge).
- In the process of making changes related to the glyph cache, various incidental fixes and optimizations were required.
- Colors were changed to keep Veloren's look consistent with master.
- Some older tree models were brought back (@Pfauenauge).
- TODO(@Sharp): All hardcoded colors were extracted and made hotloadable.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Hardcoded colors were fixed to conform to Veloren's style.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Color models were fixed to conform to Veloren's style.
A detailed description of the involved changes follows.
---
- The world size is no longer hardcoded. All functions dependent on world size now take a `WorldSizeLg`, which holds the base 2 logarithm of each actual world dimension and is guaranteed to maintain certain properties (outlined in `common/src/terrain/map.rs`). Additionally, many utility functions that utilize the world size were moved into `common` as well (mostly `common/src/terrain/mod.rs`). Finally, the world map format was updated in order to store its size explicitly, with a migration path from the old format that should work whenever the old formatted map was a square (practically always). See `world/src/sim/mod.rs` for these changes.
- The map generation code was made generic to allow using it outside of the `world` crate. The parts of the map generating code that do not need to query the world were moved over to `common/src/terrain/map.rs`, allowing them to be used from the client without creating a dependency on `world`. The rest of it was turned into helper functions in `world/src/sim/map.rs`, which can be passed as closures to the generic map generation code to complete its construction. This also means that colors are now passed in separately to the map generation function. See <https://veloren.net/devblog-78/> for more details.
- On world creation, we now compute *horizon maps*. See the function in `world/src/sim/util.rs`.
Given a height map and a plane intersecting that height map, our horizon maps allow us to encode enough information to reconstruct shadows for each point on the height map using only the *horizon angle* (the angle at which the sun starts to become visible). As Veloren's sun only covers one plane, this is sufficient for encoding sun shadows for LOD terrain, by encoding two angles per chunk (one for each 90 degrees the sun covers). We can also use this for the moon, if we want, since the moon follows the same path. Additionally, we store the *height* of the furthest occluder, to try to make the shadows volumetric; so this means 4 bytes in total for each chunk.
Support for horizon maps has been merged into the map functionality in common as well.
- The way we pass the world from the server to the client has been updated. Rather than passing the prerendered map, we instead pass three maps with values for each chunk; one with the color information, a second with altitude information, and a third with horizon map information. We then reconstruct the map on the client, together with some additional information we send from the server (like the sea level and maximum height). See `common/src/msg/server.rs` for a detailed description of the format of `WorldMapMsg`, and `server/src/libr.rs` and `client/src/lib.rs` for details of the map construction and parsing.
- Artifacts related to image rotation were fixed. See the commit message for commit SHA `cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e` for a detailed explanation. This involved changes to shaders, the addition of a new type of graphic (also reflected in the graphic cache) that allows specifying a border color (which automatically makes the associated texture immutable), and some related fixes. I reproduce the first two paragraphs of the MR description as well:
```
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
```
- Multiflow rivers were enabled.
This does not really need to be part of this MR, and would be easy to revert, but since it seemed to provide a nice improvement it's currently packaged with it.
We already computed multiple outflows from each chunk for erosion purposes long before this MR.
However, we never modified river rendering to be able to handle this case (just a single downhill river flow is complex enough!) so this was not exposed when deciding which chunks were rivers.
Now that
- In the process of making changes related to the world map, various incidental fixes and optimizations were required. Some examples of fixes include making sure terrain is never lowered to below sea level (to make the shadow maps report correct values), fixing map altitudes and colors to understand things like cliffs and "block level" coloring (that doesn'te xist on the column level), and fixing a crashbug when rendering images for the UI where source pixels are strongly rectangular. Some examples of related performance fixes include avoiding allocating a fresh vector for all the maps (i.e. copying it over to change the format from `[u32; n]` to `DynamicImage` and then copying again to convert to `RgbaImage`), and instead using the `gfx::memory::slice` function to accomplish the same thing. These sorts of changes are spread all arond the code.
This includes the additon of a new scene, `voxygen/src/scene/lod.rs`, a new pipeline `voxygen/src/render/pipeline/lod_terrain.rs`, and new shaders `assets/vxygen/shaders/lod-terrain-vert.glsl` and `assets/vxygen/shaders/lod-terrain-frag.glsl`, as well as associated changes to the renderer in `voxygen/src/render/renderer.rs`.
The main idea behind our initial approach to LOD was to take the world data we now get from the server (altitude, color, and horizon mapping).
- Some previously computed values were turned into shader uniforms for better prediction on weak processors. (@zesterer)
- Calls to power or trig functions were removed or replaced with multiplications, where possible.
- After some deliberation
- To properly handle sprite "waving" for nearby sprites,
We explicitly designed the greedy meshing system with figures and sprites in mind.
In both cases, we want to be able to *efficiently* pack many different models into the same texture, especially in cases where we know
we will either not be removing any of the grouped-together from the models from the texture, or will remove all of them at once (so
they can be packed into some specific subtexture).
For sprites, since we know every model in advance and never intend to deallocate them, we currently pack them all as efficiently as
possible into one giant tetxure atlas. However, in the future we might opt to pack them slightly less efficiently in exchange for
shrinking the sprite vertex size.
For figures, we pack all the textures for each *model* into the same atlas.
is a global texture atlas used for every sprite, and for figures which is why we have the ability to mesh multiple
models to the same texture area (using the simple texture atlas allocator) without requiring intermediate vector allocations.
This is accomplished by delaying the time when we actually write the color and light data to the texture until *after* all the
model vertices have been meshed; then, we can just allocate the whole color/light array at once, making the atlas we use an
exact fit. In computer science-y terms, we accomplish this delay by, after we perform the initial greedy meshing (without
texture information), not continuing to create the texture data, but instead constructing a *continuation*--that is, a function
that, when called, will execute the rest of the computation. We push this continuation (which in Rust terms is a `FnOnce` closure
that takes the `ColLightsInfo` that it is supposed to write to as context) onto a
onto a vector
resizing. To allow for suspended writes to texture data, Rust pointed out to me that the continuation that would eventually write the color and light data to the texture atlas (the one that is shared by all models sharing the same greedy mesher) would have to *own* whatever data it mshed. Because we often generate the model data to mesh as a temporary in `voxygen/src/load.rs`, the
- Matrix multiplications in the shader were reduced for figure data (@zesterer).
- Vertex "waves" for fluid data were removed.
- Terrain "bending" near edges was removed.
- Scaling was fixed to make sure empty space was not introduced in a space previously occupied by a block. It was also changed to take ownership of its voxel data,
rather than sharing it, to let it be used with meshing.
- Rust's nightly version was bumped in order to use the `array_map` function, which lets us reuse more code between the simple map and `FigureModelCache`.
- PositionedGlyph::standalone.
---
I tried to cite sources in many cases[^realtime],[^lloyd],[^lispsm],[^pbrt],[^greedy],[^tjunctions]
where I needed features from elsewhere but I am particularly grateful for the following resources,
esepcially where they have accompanying source code. I linked all of them that are accessible to the public (those that are not were
obtained through legal means).
[^realtime]: Eisemann, Elmar, Michael Schwarz, Ulf Assarsson, Michael Wimmer. Real-Time Shadows. A K Peters/CRC Press (T&F), 20160419.
[^lloyd]: Lloyd,B. 2007. [Logarithmic perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). PhD thesis, University of North Carolina.
[^lispsm]: Wimmer, M., Scherzer, D., and Purgathofer, W. 2004. [Light space perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). In Proceedings of Eurographics Symposium on Rendering 2004, pp. 143– 152.
[^pbrt]: Pharr, Matt, et al. [http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf](Physically Based Rendering: From Theory to Implementation). Third edition, Morgan Kaufmann Publishers/Elsevier, 2017.
[^greedy]: mikolalysenko. “Meshing in a Minecraft Game.” 0 FPS, 30 June 2012, <https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/>.
[^tjunctions]: blackflux. “Meshing in Voxel Engines – Part 1.” Blackflux.Com, 23 Feb. 2014, <https://blackflux.wordpress.com/2014/02/23/meshing-in-voxel-engines-part-1/>.
I am also especially grateful to Khronos, Wikiepdia, and stackoverflow for answering many of my specific questions while writing the MR.
---
Squashed commit of the following:
commit 300505e7305a2fdac722a808ee8538323f215f39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 18:46:25 2020 +0200
Fixing cargo doc and typo in CHANGELOG.
commit ec0aeb18e8499d7d84ef818331b4b65c3d76cea6
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 15:38:50 2020 +0200
Hopefully final commit for the LOD branch.
commit 5e8ea0b1eaac02903a02feb2eb038d195de4872f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 10:14:26 2020 +0200
Falling back to power as stopgap.
commit e44a1cbf46504ee9931a01bdc9033e145500d557
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 09:25:41 2020 +0200
Address imbris feedback.
Temporarily disables shiny water, lowers max VD.
These restrictions will be lifted soon after merging.
commit 561e25778a108ac3712f5ec2ce3a51234c4430d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 08:31:13 2020 +0200
Tweaking shaders a bit.
commit 7d19259078ce0dd7b3742ad7d0cb3fab3ece3fdc
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:59:43 2020 +0200
Fix view example as well.
commit 051cd4934e0fad2c0b15db4380a4189fa318679f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:29:06 2020 +0200
Fix meshing benchmark.
commit c95e07db3b4dcca285678985e65e31b927cb1c61
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 05:46:22 2020 +0200
Address MR feedback, fix scene clouds.
commit 1bfb816cabdb3ffc1e507a009c2d98696b4b573a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:39:36 2020 +0200
Incorporating Pfau's figure color changes.
New eyes and new humanoid colors.
commit 3f9b89a3ac7b3356b1dba0d1a8f6541357f81469
Merge: e2f5162e4 62c53963a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:29:41 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit e2f5162e4f96f4124aa43488f7245d341b3dcfd4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:28:38 2020 +0200
World colors are all hotloadable.
They live in assets/world/style/colors.ron.
Only a small handful of hardcoed colors remain in World; they are either
part of the map, or difficult to disentangle from the rest of the
computation. Comments are made where appropriate.
commit 62c53963abe1975009d34a8f9515a355bef24f31
Author: Marcel Märtens <marcel.cochem@googlemail.com>
Date: Wed Aug 19 15:59:00 2020 +0200
replace pretty_env_logger with tracing
commit 5b1625f99d9586fe80e2232f583ec5af9f953099
Merge: d71003acd 4942b5b39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:15:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit d71003acdabeff970b3928e97c26af6847b5b78e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:14:34 2020 +0200
Hotloading colors, part 1: colors in common.
Currently, this just entails humanoid colors. There are only three
colors not handled; the light emitter colors in
common/src/comp/inventory/item/tool.rs. These don't seem important
enough to me to warrant making hotloadable, at least not right now, but
if it's needed later we can always add them to the file.
commit 63b5e0e553eb2ea49276f192a6fc7dd65254270d
Merge: c32b337a4 6d2c4b9c1
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 13:05:37 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c32b337a46e10d9de473d178a94a3ccd61c39bb3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:52:04 2020 +0200
Fixing LOD grid, for real.
commit a166ae0360395387e09fb35a1f84210c2ce5ec24
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:28:05 2020 +0200
Addressing imbris's initial feedback.
Fixes two minor bugs: explosion particles were no longer spawning
randomly, and LOD grids were not perfectly even.
commit 4cbad004f44060994252dd3d38647a14a589712f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:27:58 2020 +0200
Bumping nightly per request.
commit 548680276aac77c25d43d16b5622f847d474dbef
Merge: acc098604 8f8b20c91
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:26:06 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit acc0986040589a3492f88a740bc3c3fc693b26d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:28:32 2020 +0200
Lower resolution due to lying drivers.
commit d3b878de2a52c358d2944a6bbd0555dad7fbdb10
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:15:38 2020 +0200
Fix issues msh encountered with Intel 4600.
commit 10245e0c1b0cb6fae10d86409435364edc6102ef
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 21:15:02 2020 +0200
Merge more models into one mesh than we did previously.
commit 3155c31e663c52ae5c3a53d5fb5665892a1a498a
Merge: 7204cc8a7 3c199280e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:35:22 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7204cc8a7a4f74a30306bd205d9834fee4bb944f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:34:43 2020 +0200
Fix not yet done NPC animations.
This forces them all to be the idle animation if not specified.
This fixes issues where you'd have giant NPCs in water.
commit bc83360f2a08918f19d417b5f772e1ff554dba08
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 19:36:37 2020 +0200
Try to fix some bugs:
- Z fighting with LOD terrain and water.
- Audio SFX not playing.
commit 1fd104aa603bf3781b6526a5cada46aeca3049dd
Merge: 862df3c99 7c2c392a3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 12:02:31 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 862df3c9976c4da9bd7cfd784f1a85973127968a
Merge: 0a4218ed9 75c1d4401
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 05:52:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0a4218ed9d541a2b34c133351bea38a99ddf4ea7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 22:27:14 2020 +0200
Fix particle depth.
commit f51dfdeb442d0dd5243dd2f344fa4be295bd0875
Merge: c6251a956 5e6dc0471
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:19:04 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit c6251a956ad376400dca5c23420cf8d213dc8fdf
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:15:46 2020 +0200
Cache figures more intelligently.
Cache figures for longer, and don't cache character states for the
player except where they actually affect the rendered model.
commit 0ed801d5404982c6fb63b1eaa4567d908b294c9d
Merge: c11b9bdf0 eea64f78f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 16:32:24 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c11b9bdf0a53bf9884d2f5a48fec9b01d582df1a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 11:47:15 2020 +0200
Remove unneeded Clippy annotation.
commit 16aa9ef40af56d69289d00aafb3deadfb8bd4f35
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 8 00:53:02 2020 +0200
Fix hotloading and Clippy.
commit 3dc973e0be5b758da1e9805eb764ad401374cd0c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 23:50:27 2020 +0200
Major speedups with SIMD.
commit fba64a7d93d5a96077ce87287bbce6ab9b7fbcae
Merge: 76429d00e d1e10b178
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:19 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 76429d00eea00d212fbd672a84ee91e75b19b938
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:10 2020 +0200
Add clippy.toml.
commit c79f512f84dbb83cb82b7954db68ff241dfd8e41
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 11:55:20 2020 +0200
Fix all clippy issues, clean up Rust code.
commit 6f90e010b3fbefb53b0d632e819931350015b6b8
Merge: 77a8c7c26 5929cfa5c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:30 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 77a8c7c267d3f44a1a62bd6b2274359973c5e4d4
Merge: b44e44232 44febaabd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:10 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 5929cfa5c713aa392110bbb62407f76caf53c3df
Author: jshipsey <jshipsey18@gmail.com>
Date: Thu Aug 6 20:47:27 2020 -0400
fixed in-hand arrow bug
commit b44e442325d828f1cd564d66908f89d09e80474b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 6 13:40:35 2020 +0200
Miscellaneous performance improvements.
commit be37acf287c1360d8085862526ac3365ffd1d768
Merge: 125d7fc6c c11876547
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 05:49:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 125d7fc6c4dcd8c8c5f27b8268a4d64f409f3644
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 04:55:31 2020 +0200
Abstract over simd vs. repr_c vectors.
Also some minor improvements to Event size.
commit d4d4956e9252e1241ce110b2aa85076c6b1e2a23
Merge: 5f3b7294a aced5f979
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:56:54 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 5f3b7294af1f8533edc2620b58863c248e2b07af
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:43:52 2020 +0200
Fix formatting issues I missed before.
commit a428a3ebba70dcab63dd0f8cd983120c90617271
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:41:51 2020 +0200
Fix clippy warnings, part 1.
There aer still a bunch of type too complex and
function takes too many arguments warnings that I'll fix later
(or ignore, since in the one case I did fix a function takes too
many arguments warning I think it made the code *less* readable).
commit ba54307540ed8a937ac08209730284fc653af85b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 30 13:22:42 2020 +0200
Fix light animations so they are removed when the light turns off.
commit 7e0f4bcbf0f4717145d8beac40d52e3acebbe2aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 21:10:20 2020 +0200
Fix crash in edge case for pixel art.
commit 56da06f7a351e2b949e9b014a90b974d511a0924
Merge: cf74d55f2 9f53a4a19
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:56:52 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:29:52 2020 +0200
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
The first concern was addressed by fixing the dimensions of the map
images drawn from the UI (so that we always use a square source
rectangle, rather than a rectangular one according to the dimensions of
the map). We also fixed the way rotation was done in the fragment
shader for north-facing sources to make it properly handle aspect ratio
(this was already done for north-facing targets). Together, these fix
rendering issues peculiar to rectangular maps.
The second and third concerns were jointly addressed by adding an
optional border color to every 2D image drawn by the UI. This turns
out not to waste extra space even though we hold a full f32 color
(to avoid an extra dependency on gfx's PackedColor), since voxel
images already take up more space than Optiion<[f32; 4]> requires.
This is then implemented automatically using the "border color"
wrapping method in the attached sampler.
Since this is implemented in graphics hardware, it only works (at
least naively) if the actual image bounds match the texture bounds.
Therefore, we altered the way the graphics cache stores images
with a border color to guarantee that they are always in their own
texture, whose size exactly matches their extent. Since the easiest
currently exposed way to set a border color is to do so for an
immutable texture, we went a bit further and added a new "immutable"
texture storage type used for these cases; currently, it is always
and automatically used only when there is a specified border color,
but in theory there's no reason we couldn't provide immutable-only
images that use the default wrapping mdoe (though clamp to border
is admittedly not a great default).
To fix the maps case specifically, we set the border color to a
translucent version of the ocean border color. This may need
tweaking going forward, which shouldn't be hard.
As part of this process, we had to modify graphics replacement to
make sure immutable images are *removed* when invalidated, rather
than just having a validity flag unset (this is normally done by
the UI to try to reuse allocations in place if images are updated
in benign ways, since the texture atlases used for Ui do not
support deallocation; currently this is only used for item images,
so there should be no overlap with immutable image replacement,
so this was purely precautionary).
Since we were already touching the relevant code, we also updated
the image dependency to a newer version that provides more ways
to avoid allocations, and made a few other changes that should
hopefully eliminate redundant most of the intermediate buffer
allocations we were performing for what should be zero-cost
conversions. This may slightly improve performance in some
cases.
commit ad18ce939940a8c697270f6e9b94db9942fd8295
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 13:21:09 2020 +0200
Fix continent scale hack.
commit 36b1cb074f5b195aebd7dbbc3da7f0246a1a18ec
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 12:11:40 2020 +0200
Enable loading different sized maps without a recompile.
We may want to tweak the effects of the continent_scale_hack.
commit 13b6d4d534cc4814b7cb3294ca41bbfea0a6b186
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 10:55:48 2020 +0200
Removing WORLD_SIZE, part 1.
Erased almost every instance of WORLD_SIZE and replaced it with a local
power of two, map_size_lg (which respects certain invariants; see
common/src/terrain/map.rs for more details about MapSizeLg). This also
means we can avoid a dependency on the world crate from client, as
desired.
Now that the rest of the code is not expecting a fixed WORLD_SIZE, the
next step is to arrange for maps to store their world size, and to use
that world size as a basis prior to loading the map (as well, probably,
as prior to configuring some of the noise functions).
commit 30b1d2c6428230a9eaa0d749cdcbbd6f1cbccd78
Merge: 7d56ba31b 1377b369f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:58 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 7d56ba31b445441461b28a07fc495d7d4f047c17
Merge: 2101113b4 598f14b25
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 1377b369f6db2258e910d467a5740f31789e3ded
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sun Jul 19 23:25:38 2020 +0200
more saturated pumpkins
commit ae8d50527f93bb0616c2ad46ce4dacb63bc37c6d
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sat Jul 18 20:29:56 2020 +0200
acacia models
commit 2101113b467e691de787392d7f20f1745f5637bd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 18 18:55:25 2020 +0200
Higher detail LOD.
commit add2cfae04b4385fa5590e11e2bd5229d9dee0aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 16 01:57:39 2020 +0200
Revert some irrelevant stuff.
commit 2e2ab3dc1eaa59a4aef7f8d34a53d8aae4c8553a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 15 13:30:49 2020 +0200
Fixing various things about shadows.
* Correcting optimal LISPSM parameter.
* Figure shadows are cast when they're not visible.
* Chunk shadows stay cast until you look away.
* Seamless cubemaps for point lights.
* Etc.
commit 6c31e6b56217274285b597af297036691ea5d897
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 19:50:26 2020 +0200
Fix shadow creation.
commit 6332cbe006115ae205597529cd8bbccd146c2cca
Merge: be438657c 930e0028b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:47:00 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit be438657c33d7b5bfb0a9582c3ed3fd366637323
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:28:08 2020 +0200
Tweaks to shadows.
Added shadow map resolution configuration, added seamless cubemaps,
documented all existing rendering options, and fixed a few Clippy
errors.
commit 23b4058906013c7d2a40c286e20e32c5fbd897ed
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 10:11:19 2020 +0200
Fix moon, use nonlinear noise for terrain.
Note that the latter has a bit of performance cost.
commit 7fbe5cbfbb9dc29607957b8e62f432a4deed193d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:23:02 2020 +0200
Address lies about max texture size.
commit bcfc62b5e13a1cdd83f57535fde4694720bebfd9
Merge: 75e3626a7 18a08e8fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:22:08 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 75e3626a785919f43fdcf2127c2b10e3e4df2f9f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:21:52 2020 +0200
OpenGL 3.3 minimum.
commit 18a08e8fe2739f02af99a5d2cb4e7c38c49e858b
Author: Monty Marz <m.marzouq@gmx.de>
Date: Tue Jul 7 23:57:52 2020 +0200
settings localization
commit 90c5d1ca3620092bc3ae10b2211489eb1cf6f5e8
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 21:11:48 2020 +0200
Lower near distance.
commit 0e66f02b25aaddaa2dfddbbc89cd67de54a9a7b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 20:09:01 2020 +0200
All sprites sway in the wind now.
commit db1401a6910bf42dcf502462c90038752ff5fbdb
Merge: 69e508d8c e8b4b29d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 19:34:17 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 69e508d8c94d8973033817ca86f357e466fc7c4d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 18:41:37 2020 +0200
Make it easy to switch to SIMD for math.
commit ffe0f5928c7a7e87d00cb5426b3b1d831d7e02fd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 21:21:12 2020 +0200
Fix some issues with underwater rendering.
commit bfda6da42f38fd02c31ee92c81ab785a3e50c2a0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 19:17:59 2020 +0200
Fix some minor display issues.
commit 0ed752e087968cf901301884aaeae698e32ef8a5
Merge: ccc6a06a8 518edcb85
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:14:21 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit ccc6a06a8d4504d6b9f7af7905a414d2ee06ab76
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:04:34 2020 +0200
Some minor changes.
commit 4e020246702889269efe1a191788992164c508d6
Merge: 50a64d927 e05c9267a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 16:17:40 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 50a64d927e6c4f4b0e4688e4cbfca694bc3f922a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 13:07:03 2020 +0200
Fix far plane.
commit 7dd06da34cae8f9ea3b6c889fe965181f3fd3949
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:25:35 2020 +0200
Add shadows.glsl.
commit 618a18c998778bf871b905a74657440fcc384c80
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:10:22 2020 +0200
Adding shadows, greedy meshing, and more.
commit eaea83fe6a5cb1cb0ba8beef888183c718258496
Merge: 267018495 2f89b863e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 22:47:07 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 2670184954a13e4a9e7a4e35ba79aac0c5fac2f7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 21:20:01 2020 +0200
Make civsim and sites deterministic.
For anything in worldgen where you use a HashMap, *please* think
carefully about which hasher you are going to use! This is
especially true if (for some reason) you are depending on hashmap
iteration order remaining stable for some aspect of worldgen.
commit f8376fd5dc72b4a9c2f51a6b4570d59c8b8e9343
Merge: 654f7e049 cdee191dd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 17:53:57 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 654f7e049258d9da27c09608bbe6a46ffa8787e5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed May 20 21:22:30 2020 +0200
Correct backface culling.
commit 560501df05ca725409b0f2e4eb31bdfdc15fd0c7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue May 19 17:22:06 2020 +0200
Greedy messhing for shadows.
commit a4d87e1875ca543436e6bbbeb20348facc5a52d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun May 17 05:59:00 2020 +0200
Shadow maps work for lantern.
commit 243d0837b8a3b08172c9a3c348d964d7ddc2a0a8
Merge: 04382dc28 71dd520cd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:53:13 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 04382dc28632b6c66e8821f6870c0daaa1c1901a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:22:17 2020 +0200
WIP: better graphics config, better LOD, shadow maps.
commit 22ddbad3eb32bfa70f0932176022208fe67ded81
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 18:54:09 2020 +0200
Minor shader fixes.
commit 746a10e8d01ac235f994b0cde78fa48998602a1f
Merge: 0f4a0e763 40ab94673
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 04:02:09 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0f4a0e763db3afbdc4fb0558611f38326ca87151
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 23:03:24 2020 +0200
Switch back to pop-in terrain.
commit dd74fa7e4a53667b38811d7aec58d7f6a68889bb
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 22:58:55 2020 +0200
LOD shading closer to voxel shading.
commit ef67bd58ba0bdaf622b078892d768263b6cba268
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 28 20:49:03 2020 +0200
Experimental underwater lighting.
commit 2c5ad9d07605e80d5fd5679dd3a5d70c605b86a9
Merge: 748279835 303967a6f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 22:35:24 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7482798354eda18c8207950080fc24d443a369de
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 21:59:55 2020 +0200
Replace discard in figure-frag.
commit d83b4ae69be4912f69bf7835f509c68a1c7770a4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:45:57 2020 +0200
Fix sprite lighting, HDR from focus_pos.
commit 0594238004f116274905fa0ed7c2b6c417ed1d29
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:14:10 2020 +0200
Proper HDR from point lights.
commit 48c93d2b41ce5743103d18e76cc228f5ac766492
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 14:01:43 2020 +0200
Brighter ambiance, darker LOD shadows.
commit e0452e895ccfa8a43f368cae3b8b8aedc24dad93
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 13:13:23 2020 +0200
More proper HDR.
commit 4c6da3ed16cfeebb455e40da5f557b4af9a499d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 00:13:10 2020 +0200
Trying LOD noise.
commit 682a3d74c85df5503ffe1fc1cc891bce789df1ad
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 23:11:08 2020 +0200
Fix LOD heights in towns.
commit cc39e5734e8b18f9077bf42e66337c1319dd6b6e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 21:01:23 2020 +0200
More LOD fixes.
commit 8116b21c2e51c836e77894e309ac273caf2917b3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:54:43 2020 +0200
I like this coloring.
commit bc2560ea90b36f4b46190005344232d993043ac3
Merge: 14effdd5d e690efe71
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:48:33 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 14effdd5db8747fcf3eb34f03b46b7792e92d1c5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:24:35 2020 +0200
Re-saturate.
commit 48a643955d4435b78179acba0beb4a979905cc31
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:23:57 2020 +0200
Various fixes.
commit f7b497a0c25f4ad4682c71dd1ed6f608052feb9b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 03:22:49 2020 +0200
Render figures again.
commit 44e4aad48deba8266b9f8bdfd3db096b381f5327
Merge: e6f0a5a98 9ec319a18
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 02:01:04 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit e6f0a5a981a82533ba188fff0a54ce98577bb152
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 24 16:12:20 2020 +0200
Add atmospheric scattering.
commit f2953087f691a8edbc001cb98ebf5059fc6f8ac0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 23 00:01:20 2020 +0200
Fix shadowing for specular reflections.
commit ddd4a67a9799b8d08c7dc0c2bec90621c2bed0e3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Apr 22 22:56:12 2020 +0200
HDR fixes.
commit 1015e60deef3c447381996277df7496707a63bd0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 21 18:25:19 2020 +0200
More lighting changes.
commit 80c264abd111fb237e57843efcb5c071d4f84613
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 13 00:29:59 2020 +0200
Lighting experiments.
commit 8414987e589dd5102bad89762a3adaccc0bfe957
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 9 02:38:40 2020 +0200
WIP -- lighting changes and soft shadows.
commit 9cd2b3fb0d6b49776c6dfe463e4169637250b11a
Merge: c7ea687eb 8b149ad11
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:29 2020 +0200
Merge branch 'sharp/new-lighting' into sharp/small-fixes
commit c7ea687ebbc5aace1b455f134a5bf49ce2c7434a
Merge: 476441531 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:02 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 8b149ad11ad4bb75018fcf9519baec27d1c95951
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:32:39 2020 +0200
Trying out a new lighting model.
commit b0ac9f36f755dd06f7c17c46150568064790864f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 07:56:11 2020 +0200
Use bicubic interpolation for terrain.
commit f6fc9307a121514b614bc50ef8eb055953e7da8a
Merge: 33140a295 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 05:01:41 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 4764415312aae6e9ac2d00e86e84577cb958f1ab
Merge: ed2d0111d 13388ee6a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 04:54:48 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 13388ee6a42943f3f79a9cb488346cef18e272fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 20:30:08 2020 +0200
Various fixes (to coloring and to soft shadows).
commit fbd084a94a067082a87cd6d28b82054709bc9265
Merge: 5a089863b 4fdf6896a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 18:50:38 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/map-colors
commit ed2d0111d994262ae836d84d1fe5a45e4de72a0b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 06:49:27 2020 +0200
Combining colors and LOD.
commit 88342640c6b835114d01c797b89fdede3b0a2108
Merge: 33140a295 5a089863b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:49:20 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 33140a2951b8212725f42c758b277aaec4d888f7
Merge: 4c65a5aed f34d4b379
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:36:21 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 5a089863beb01d4794bbe3580ada47b278715ea2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 03:17:49 2020 +0200
Making maps brighter.
This is probably not the right way to do it, but oh well!
commit 32b2c99109dd486aa922886081068f9c550c83f2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 02:46:36 2020 +0200
Horizon mapping and "layered" map generation.
Horizon mapping is a method of shadow mapping specific to height maps.
It can handle any angle between 0 and 90 degrees from the ground, as
long as know the horizontal direction in advance, by remembering only a
single angle (the "horizon angle" of the shadow map). More is explained
in common/src/msg/server.rs. We also remember the approximate height of
the largest occluder, to try to be able to generate soft shadows and
create a vertical position where the shadows can't go higher.
Additionally, map generation has been reworked. Instead of computing
everything from explicit samples, we pass in sampling functions that
return exactly what the map generator needs. This allows us to cleanly
separate the way we sample things like altitudes and colors from the map
generation process. We exploit this to generate maps *partially* on the
server (with colors and rivers, but not shading). We can then send the
partially completed map to the client, which can combine it with shadow
information to generate the final map. This is useful for two reasons:
first, it makes sure the client can apply shadow information by itself,
and second, it lets us pass the unshaded map for use with level of
detail functionality.
For similar reasons, river generation is split
out into its own layer, but for now we opt to still generate rivers on
the server (since the river wire format is more complicated to compress
and may require some extra work to make sure we have enough precision to
draw rivers well enough for LoD).
Finally, the mostly ad-hoc lighting we were performing has been (mostly)
replaced with explicit Phong reflection shading (including specular
highlights). Regularizing this seems useful and helps clarify the
"meaning" of the various light intensities, and helps us keep a more
physically plausible basis. However, its interaction with soft shadows
is still imperfect, and it's not yet clear to me what we need to do to
turn this into something useful for LoD.
commit f8926a5737ddc51f3d585c651a64c43677aae0f4
Merge: a1aee931e 875ae6ced
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Mar 13 13:32:42 2020 +0100
Merge remote-tracking branch 'origin/master' into sharp/map-colors
commit 4c65a5aed353b119aea65a2aaeb94549b67beb42
Author: Treeco <5021038-Treeco@users.noreply.gitlab.com>
Date: Mon Feb 24 16:48:05 2020 +0000
Made LOD setting slider exponential
commit 2fa7b2d20d7233dc8bfd64f9f7f54617575248f1
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 17:49:53 2020 +0000
Added mist to LoD
commit aab059a450b5f635777129ff82cc15b662965c3c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 15:14:06 2020 +0000
Added LoD slider
commit 779c36b538121c5ade3633ae5cb67bb14c8c3877
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:54:55 2020 +0000
Reduced cost of vertex pushing
commit 9fea150473906b166365b738ebcea07c697daf3d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:38:53 2020 +0000
Fixed maths, improved LoD resolution
commit 5481df38fea5bf183ff376a3337179cfaa5233dc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 11:22:50 2020 +0000
Dynamically relocate LoD vertices to enhance details
commit a3e36a50ababd615da7db1b26158c7906a5def01
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 18:13:51 2020 +0000
Simpler terrain spiral rendering
commit 255f450ae9ac8763db4bede075fb409161ed57cc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:53:17 2020 +0000
Better LoD precision
commit 3d027aebe812a5b8658a4eb8123dc9f61b3776d2
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:04:03 2020 +0000
Better falloff
commit be775c9484b457b2c0b1a494aec03392d0c70e76
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 15:30:45 2020 +0000
Applied good ideas from experimental branch
commit 58587b68545a23c5c04ab4574a4b94b3bc982246
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 16:15:13 2020 +0000
Minor fixes to LoD merging
commit 7b42aebd709c14df2db766aad61d9280ad24d84d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 15:04:44 2020 +0000
Capped LoD dragging
commit 8aafc559f87124e1ea5ca6e3ddc2aa0c242d793c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:54:37 2020 +0000
Better blending between LoD and terrain border
commit edd3455d5161792d87ddc8eadc0ecbad5532b284
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:40:19 2020 +0000
Fixed LoD z depth, added sea level offset
commit b9b06744620114dd5556e73f64fa93c145503a7c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:27:43 2020 +0000
Better LoD smoothing
commit a1aee931e790431560cd2d953ad61d9497072afd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Feb 21 14:52:17 2020 +0100
Adding shadows.
commit 2400786c13dd891c131ed86d48d05df516a8a778
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 13:48:40 2020 +0000
Use world map as LoD source
commit dbf650f504a4c25fbbc2096ac3616c736bf52d23
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Jan 20 00:48:14 2020 +0000
Better clouds at distance
commit 5e6f81b86cdb9730b9b056877b19257075fd5fa8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Jan 19 23:59:02 2020 +0000
sync
commit 745e7540ddb000cc645f612767b337c2ddc3f7c0
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 12:40:48 2019 +0000
Improved cloud falloff mist, faster noise sampling
commit f6a200d0cb866196ba57697466755f9e0c7ea5d8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 10:09:00 2019 +0000
Improved long-range depth precision, removed unnecessary LoD polygons
commit 63d1b2bb2292898d59fb4f4e502201103dfeb86f
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 20:57:46 2019 +0000
Working LoD shader
commit f13d98ee3e58f881e8b978861a67663b59ed91ec
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 11:03:40 2019 +0000
LoD first attempt (stack overflow issue)
2020-08-20 18:34:59 +00:00
|
|
|
|
pub fn new(map: ModernMap) -> Self { WorldFile::Veloren0_7_0(map) }
|
2020-01-18 18:41:37 +00:00
|
|
|
|
|
|
|
|
|
#[inline]
|
2020-02-01 20:39:39 +00:00
|
|
|
|
/// Turns a WorldFile into the latest version. Whenever a new map version
|
|
|
|
|
/// is added, just add it to this match statement.
|
2020-01-20 16:16:41 +00:00
|
|
|
|
pub fn into_modern(self) -> Result<ModernMap, WorldFileError> {
|
2020-01-18 18:41:37 +00:00
|
|
|
|
match self {
|
2020-01-20 16:16:41 +00:00
|
|
|
|
WorldFile::Veloren0_5_0(map) => map.into_modern(),
|
(See sharp/lod-history) LOD, shadows, greedy meshing, new lighting, perf
---
Pretty much a Veloren fork at this point. Here's a high level overview of the changes (will be added to CHANGELOG just before merge).
At a high level this MR incorporates roughly two groups of changes.
The first group consists of new game features: more flexible map sizes, level of detail terrain, shadow maps, and a new lighting
engine. This is "feature work" that (mostly) only adds new things to Veloren, and mostly shouldn't affect old stuff.
The second big group of changes are those addressing the fallout from all the new features. These include performance fixes of
various sorts: the addition of multiple graphics options and optimization of the cheap ones to avoid work, switching all voxel
models to use some variant of greedy meshing, switching over much of our CPU-side vector math to exploit SIMD instructions
(coinciding with a fork of `vek`), and a rewrite of how the UI handles text rendering (coinciding with updates to our fork
of `conrod`). Making Veloren's hardcoded colors appear correct under the new lighting engine also required considerably
changes (TODO: Fill in this section when it's complete).
The second category of changes often heavily touches code owned by other people, including frequently modified code "owned" by a
handful of people, so I recommend that this code be reviewed particularly carefully.
---
At a high level (each will be described in more detail below):
- The world map has been refactored.
- The world size is no longer hardcoded (@zesterer).
- The map generation code was made generic to allow using it outside of the `world` crate (@zesterer).
- On world creation, we now compute *horizon maps* (@zesterer).
- The way we pass the world from the server to the client has been updated (@xMAC94x).
- Artifacts related to image rotation were fixed (@imbris).
- Multiflow rivers were enabled (@zesterer).
- In the process of making changes related to the world map, various incidental fixes and optimizations were required.
- The new *level of detail* feature was added (@zesterer wrote part of this and has checked out the rest).
- A new LOD terrain rendering step was added to the pipeline.
- The LOD terrain quality was made configurable via a graphics setting.
- Horizon maps were used to cast shadows from LOD chunks on both LOD and non-LOD terrain.
- A "voxelization" effect was incorporated into rendered LOD terrain to make it blend better into the world.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Veloren's lighting has been completely overhauled (@zesterer has already checked most of this out).
- A semi-accurate index of refraction was assigned to our materials.
- A new, more realistic, physically based approach to lighting was used using the *Ashikhmin Shirley* BRDF.
- We emulate *atmospheric scattering* using equations designed for measuring solar panel light exposure.
- We attempt to compute *realistic light attenuation* in water using its real material properties.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Point and directional lights now cast realistic shadows, using *shadow mapping.* (@imbris, @zesterer, @Treeco, @YuriMomo)
- Point light shadow maps were added to the rendering pipeline, using geometry shaders and *seamless cube maps*.
- Directional light shadows were added to the rendering pipeline, using LISPSM together with disabling *depth clamping*.
- "Shadow-only" chunks and NPCs were added to prevent shadows from models behind you from disappearing.
- In the process of making changes related to shadow maps, various incidental fixes and optimizations were required.
The addition of shadow maps, LOD terrain, and the new lighting all led to significant performance degradation, on top of other
changes happening in master. Therefore, a large number of performance improvements were also needed:
- The graphics options were made much more flexible and configurable, and shaders were optimize.
- New options were provided for how to render lights and shadows (@Pfauenauge, @zesterer).
- Graphic setting storage and configuration were overhauled to make adding new features easier (@Pfauenauge, @imbris).
- Shaders were rewritten to utilize GLSL's preprocessor to avoid overhead (@zesterer, @YuriMomo).
- In the process of making changes related to providing additional rendering options, various incidental fixes and optimizations were required.
- Voxel model creation was switched to use *greedy meshing.*
- A new voxel meshing method, greedy meshing, was added (@imbris).
- Uses of the older meshing methods were migrated to use greedy meshing (@imbris, @jshipsey, @Pfauenauge).
- New restrictions were added to terrain, figure, and sprites to future proof them for further optimizations (@jshipsey, @Pfauenauge, @zesterer).
- Most positions are now relative to either chunk or player position for better precision (@imbris, @zesterer, @scottc).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- Animation and terrain math were switched to use SIMD where possible.
- Fixes were made to vek to make its SIMD feature usable for us (@zesterer, @imbris).
- The interface and types used in bone animation were changed in various ways (@jshipsey, @Snowram, @Pfauenauge).
- Redundant code generation for body animation is now partly taken care of by a macro (@jshipsey, @Snowram, @Pfauenauge).
- Animation code was modified to to use vek's SIMD representation where possible (@jshipsey, @Snowram, @Pfauenauge).
- Terrain meshing code and shadow map math were also modified to use vek's SIMD representation (@imbris).
- SIMD instruction generation was enabled (@YuriMomo, @jshipsey, @Snowram, @imbris, @Angelonfira, @xMAC94x).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- The way we cache glyphs was completely refactored, fixed, and optimized.
- Our fork of `conrod` was optimized in various ways (@imbris).
- Our fork of `conrod` now exposes whether a widget was updated during the current frame (@imbris).
- Our use of the glyph cache was rewritten for correctness (@imbris).
- A *text cache* was introduced that lets us skip remeshing glyphs that have not changed (@imbris).
- Various changes were made to reduce pressure on the glyph cache, with more planned (@imbris, @Pfauenauge).
- In the process of making changes related to the glyph cache, various incidental fixes and optimizations were required.
- Colors were changed to keep Veloren's look consistent with master.
- Some older tree models were brought back (@Pfauenauge).
- TODO(@Sharp): All hardcoded colors were extracted and made hotloadable.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Hardcoded colors were fixed to conform to Veloren's style.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Color models were fixed to conform to Veloren's style.
A detailed description of the involved changes follows.
---
- The world size is no longer hardcoded. All functions dependent on world size now take a `WorldSizeLg`, which holds the base 2 logarithm of each actual world dimension and is guaranteed to maintain certain properties (outlined in `common/src/terrain/map.rs`). Additionally, many utility functions that utilize the world size were moved into `common` as well (mostly `common/src/terrain/mod.rs`). Finally, the world map format was updated in order to store its size explicitly, with a migration path from the old format that should work whenever the old formatted map was a square (practically always). See `world/src/sim/mod.rs` for these changes.
- The map generation code was made generic to allow using it outside of the `world` crate. The parts of the map generating code that do not need to query the world were moved over to `common/src/terrain/map.rs`, allowing them to be used from the client without creating a dependency on `world`. The rest of it was turned into helper functions in `world/src/sim/map.rs`, which can be passed as closures to the generic map generation code to complete its construction. This also means that colors are now passed in separately to the map generation function. See <https://veloren.net/devblog-78/> for more details.
- On world creation, we now compute *horizon maps*. See the function in `world/src/sim/util.rs`.
Given a height map and a plane intersecting that height map, our horizon maps allow us to encode enough information to reconstruct shadows for each point on the height map using only the *horizon angle* (the angle at which the sun starts to become visible). As Veloren's sun only covers one plane, this is sufficient for encoding sun shadows for LOD terrain, by encoding two angles per chunk (one for each 90 degrees the sun covers). We can also use this for the moon, if we want, since the moon follows the same path. Additionally, we store the *height* of the furthest occluder, to try to make the shadows volumetric; so this means 4 bytes in total for each chunk.
Support for horizon maps has been merged into the map functionality in common as well.
- The way we pass the world from the server to the client has been updated. Rather than passing the prerendered map, we instead pass three maps with values for each chunk; one with the color information, a second with altitude information, and a third with horizon map information. We then reconstruct the map on the client, together with some additional information we send from the server (like the sea level and maximum height). See `common/src/msg/server.rs` for a detailed description of the format of `WorldMapMsg`, and `server/src/libr.rs` and `client/src/lib.rs` for details of the map construction and parsing.
- Artifacts related to image rotation were fixed. See the commit message for commit SHA `cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e` for a detailed explanation. This involved changes to shaders, the addition of a new type of graphic (also reflected in the graphic cache) that allows specifying a border color (which automatically makes the associated texture immutable), and some related fixes. I reproduce the first two paragraphs of the MR description as well:
```
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
```
- Multiflow rivers were enabled.
This does not really need to be part of this MR, and would be easy to revert, but since it seemed to provide a nice improvement it's currently packaged with it.
We already computed multiple outflows from each chunk for erosion purposes long before this MR.
However, we never modified river rendering to be able to handle this case (just a single downhill river flow is complex enough!) so this was not exposed when deciding which chunks were rivers.
Now that
- In the process of making changes related to the world map, various incidental fixes and optimizations were required. Some examples of fixes include making sure terrain is never lowered to below sea level (to make the shadow maps report correct values), fixing map altitudes and colors to understand things like cliffs and "block level" coloring (that doesn'te xist on the column level), and fixing a crashbug when rendering images for the UI where source pixels are strongly rectangular. Some examples of related performance fixes include avoiding allocating a fresh vector for all the maps (i.e. copying it over to change the format from `[u32; n]` to `DynamicImage` and then copying again to convert to `RgbaImage`), and instead using the `gfx::memory::slice` function to accomplish the same thing. These sorts of changes are spread all arond the code.
This includes the additon of a new scene, `voxygen/src/scene/lod.rs`, a new pipeline `voxygen/src/render/pipeline/lod_terrain.rs`, and new shaders `assets/vxygen/shaders/lod-terrain-vert.glsl` and `assets/vxygen/shaders/lod-terrain-frag.glsl`, as well as associated changes to the renderer in `voxygen/src/render/renderer.rs`.
The main idea behind our initial approach to LOD was to take the world data we now get from the server (altitude, color, and horizon mapping).
- Some previously computed values were turned into shader uniforms for better prediction on weak processors. (@zesterer)
- Calls to power or trig functions were removed or replaced with multiplications, where possible.
- After some deliberation
- To properly handle sprite "waving" for nearby sprites,
We explicitly designed the greedy meshing system with figures and sprites in mind.
In both cases, we want to be able to *efficiently* pack many different models into the same texture, especially in cases where we know
we will either not be removing any of the grouped-together from the models from the texture, or will remove all of them at once (so
they can be packed into some specific subtexture).
For sprites, since we know every model in advance and never intend to deallocate them, we currently pack them all as efficiently as
possible into one giant tetxure atlas. However, in the future we might opt to pack them slightly less efficiently in exchange for
shrinking the sprite vertex size.
For figures, we pack all the textures for each *model* into the same atlas.
is a global texture atlas used for every sprite, and for figures which is why we have the ability to mesh multiple
models to the same texture area (using the simple texture atlas allocator) without requiring intermediate vector allocations.
This is accomplished by delaying the time when we actually write the color and light data to the texture until *after* all the
model vertices have been meshed; then, we can just allocate the whole color/light array at once, making the atlas we use an
exact fit. In computer science-y terms, we accomplish this delay by, after we perform the initial greedy meshing (without
texture information), not continuing to create the texture data, but instead constructing a *continuation*--that is, a function
that, when called, will execute the rest of the computation. We push this continuation (which in Rust terms is a `FnOnce` closure
that takes the `ColLightsInfo` that it is supposed to write to as context) onto a
onto a vector
resizing. To allow for suspended writes to texture data, Rust pointed out to me that the continuation that would eventually write the color and light data to the texture atlas (the one that is shared by all models sharing the same greedy mesher) would have to *own* whatever data it mshed. Because we often generate the model data to mesh as a temporary in `voxygen/src/load.rs`, the
- Matrix multiplications in the shader were reduced for figure data (@zesterer).
- Vertex "waves" for fluid data were removed.
- Terrain "bending" near edges was removed.
- Scaling was fixed to make sure empty space was not introduced in a space previously occupied by a block. It was also changed to take ownership of its voxel data,
rather than sharing it, to let it be used with meshing.
- Rust's nightly version was bumped in order to use the `array_map` function, which lets us reuse more code between the simple map and `FigureModelCache`.
- PositionedGlyph::standalone.
---
I tried to cite sources in many cases[^realtime],[^lloyd],[^lispsm],[^pbrt],[^greedy],[^tjunctions]
where I needed features from elsewhere but I am particularly grateful for the following resources,
esepcially where they have accompanying source code. I linked all of them that are accessible to the public (those that are not were
obtained through legal means).
[^realtime]: Eisemann, Elmar, Michael Schwarz, Ulf Assarsson, Michael Wimmer. Real-Time Shadows. A K Peters/CRC Press (T&F), 20160419.
[^lloyd]: Lloyd,B. 2007. [Logarithmic perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). PhD thesis, University of North Carolina.
[^lispsm]: Wimmer, M., Scherzer, D., and Purgathofer, W. 2004. [Light space perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). In Proceedings of Eurographics Symposium on Rendering 2004, pp. 143– 152.
[^pbrt]: Pharr, Matt, et al. [http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf](Physically Based Rendering: From Theory to Implementation). Third edition, Morgan Kaufmann Publishers/Elsevier, 2017.
[^greedy]: mikolalysenko. “Meshing in a Minecraft Game.” 0 FPS, 30 June 2012, <https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/>.
[^tjunctions]: blackflux. “Meshing in Voxel Engines – Part 1.” Blackflux.Com, 23 Feb. 2014, <https://blackflux.wordpress.com/2014/02/23/meshing-in-voxel-engines-part-1/>.
I am also especially grateful to Khronos, Wikiepdia, and stackoverflow for answering many of my specific questions while writing the MR.
---
Squashed commit of the following:
commit 300505e7305a2fdac722a808ee8538323f215f39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 18:46:25 2020 +0200
Fixing cargo doc and typo in CHANGELOG.
commit ec0aeb18e8499d7d84ef818331b4b65c3d76cea6
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 15:38:50 2020 +0200
Hopefully final commit for the LOD branch.
commit 5e8ea0b1eaac02903a02feb2eb038d195de4872f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 10:14:26 2020 +0200
Falling back to power as stopgap.
commit e44a1cbf46504ee9931a01bdc9033e145500d557
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 09:25:41 2020 +0200
Address imbris feedback.
Temporarily disables shiny water, lowers max VD.
These restrictions will be lifted soon after merging.
commit 561e25778a108ac3712f5ec2ce3a51234c4430d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 08:31:13 2020 +0200
Tweaking shaders a bit.
commit 7d19259078ce0dd7b3742ad7d0cb3fab3ece3fdc
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:59:43 2020 +0200
Fix view example as well.
commit 051cd4934e0fad2c0b15db4380a4189fa318679f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:29:06 2020 +0200
Fix meshing benchmark.
commit c95e07db3b4dcca285678985e65e31b927cb1c61
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 05:46:22 2020 +0200
Address MR feedback, fix scene clouds.
commit 1bfb816cabdb3ffc1e507a009c2d98696b4b573a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:39:36 2020 +0200
Incorporating Pfau's figure color changes.
New eyes and new humanoid colors.
commit 3f9b89a3ac7b3356b1dba0d1a8f6541357f81469
Merge: e2f5162e4 62c53963a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:29:41 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit e2f5162e4f96f4124aa43488f7245d341b3dcfd4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:28:38 2020 +0200
World colors are all hotloadable.
They live in assets/world/style/colors.ron.
Only a small handful of hardcoed colors remain in World; they are either
part of the map, or difficult to disentangle from the rest of the
computation. Comments are made where appropriate.
commit 62c53963abe1975009d34a8f9515a355bef24f31
Author: Marcel Märtens <marcel.cochem@googlemail.com>
Date: Wed Aug 19 15:59:00 2020 +0200
replace pretty_env_logger with tracing
commit 5b1625f99d9586fe80e2232f583ec5af9f953099
Merge: d71003acd 4942b5b39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:15:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit d71003acdabeff970b3928e97c26af6847b5b78e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:14:34 2020 +0200
Hotloading colors, part 1: colors in common.
Currently, this just entails humanoid colors. There are only three
colors not handled; the light emitter colors in
common/src/comp/inventory/item/tool.rs. These don't seem important
enough to me to warrant making hotloadable, at least not right now, but
if it's needed later we can always add them to the file.
commit 63b5e0e553eb2ea49276f192a6fc7dd65254270d
Merge: c32b337a4 6d2c4b9c1
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 13:05:37 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c32b337a46e10d9de473d178a94a3ccd61c39bb3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:52:04 2020 +0200
Fixing LOD grid, for real.
commit a166ae0360395387e09fb35a1f84210c2ce5ec24
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:28:05 2020 +0200
Addressing imbris's initial feedback.
Fixes two minor bugs: explosion particles were no longer spawning
randomly, and LOD grids were not perfectly even.
commit 4cbad004f44060994252dd3d38647a14a589712f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:27:58 2020 +0200
Bumping nightly per request.
commit 548680276aac77c25d43d16b5622f847d474dbef
Merge: acc098604 8f8b20c91
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:26:06 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit acc0986040589a3492f88a740bc3c3fc693b26d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:28:32 2020 +0200
Lower resolution due to lying drivers.
commit d3b878de2a52c358d2944a6bbd0555dad7fbdb10
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:15:38 2020 +0200
Fix issues msh encountered with Intel 4600.
commit 10245e0c1b0cb6fae10d86409435364edc6102ef
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 21:15:02 2020 +0200
Merge more models into one mesh than we did previously.
commit 3155c31e663c52ae5c3a53d5fb5665892a1a498a
Merge: 7204cc8a7 3c199280e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:35:22 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7204cc8a7a4f74a30306bd205d9834fee4bb944f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:34:43 2020 +0200
Fix not yet done NPC animations.
This forces them all to be the idle animation if not specified.
This fixes issues where you'd have giant NPCs in water.
commit bc83360f2a08918f19d417b5f772e1ff554dba08
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 19:36:37 2020 +0200
Try to fix some bugs:
- Z fighting with LOD terrain and water.
- Audio SFX not playing.
commit 1fd104aa603bf3781b6526a5cada46aeca3049dd
Merge: 862df3c99 7c2c392a3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 12:02:31 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 862df3c9976c4da9bd7cfd784f1a85973127968a
Merge: 0a4218ed9 75c1d4401
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 05:52:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0a4218ed9d541a2b34c133351bea38a99ddf4ea7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 22:27:14 2020 +0200
Fix particle depth.
commit f51dfdeb442d0dd5243dd2f344fa4be295bd0875
Merge: c6251a956 5e6dc0471
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:19:04 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit c6251a956ad376400dca5c23420cf8d213dc8fdf
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:15:46 2020 +0200
Cache figures more intelligently.
Cache figures for longer, and don't cache character states for the
player except where they actually affect the rendered model.
commit 0ed801d5404982c6fb63b1eaa4567d908b294c9d
Merge: c11b9bdf0 eea64f78f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 16:32:24 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c11b9bdf0a53bf9884d2f5a48fec9b01d582df1a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 11:47:15 2020 +0200
Remove unneeded Clippy annotation.
commit 16aa9ef40af56d69289d00aafb3deadfb8bd4f35
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 8 00:53:02 2020 +0200
Fix hotloading and Clippy.
commit 3dc973e0be5b758da1e9805eb764ad401374cd0c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 23:50:27 2020 +0200
Major speedups with SIMD.
commit fba64a7d93d5a96077ce87287bbce6ab9b7fbcae
Merge: 76429d00e d1e10b178
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:19 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 76429d00eea00d212fbd672a84ee91e75b19b938
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:10 2020 +0200
Add clippy.toml.
commit c79f512f84dbb83cb82b7954db68ff241dfd8e41
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 11:55:20 2020 +0200
Fix all clippy issues, clean up Rust code.
commit 6f90e010b3fbefb53b0d632e819931350015b6b8
Merge: 77a8c7c26 5929cfa5c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:30 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 77a8c7c267d3f44a1a62bd6b2274359973c5e4d4
Merge: b44e44232 44febaabd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:10 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 5929cfa5c713aa392110bbb62407f76caf53c3df
Author: jshipsey <jshipsey18@gmail.com>
Date: Thu Aug 6 20:47:27 2020 -0400
fixed in-hand arrow bug
commit b44e442325d828f1cd564d66908f89d09e80474b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 6 13:40:35 2020 +0200
Miscellaneous performance improvements.
commit be37acf287c1360d8085862526ac3365ffd1d768
Merge: 125d7fc6c c11876547
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 05:49:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 125d7fc6c4dcd8c8c5f27b8268a4d64f409f3644
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 04:55:31 2020 +0200
Abstract over simd vs. repr_c vectors.
Also some minor improvements to Event size.
commit d4d4956e9252e1241ce110b2aa85076c6b1e2a23
Merge: 5f3b7294a aced5f979
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:56:54 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 5f3b7294af1f8533edc2620b58863c248e2b07af
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:43:52 2020 +0200
Fix formatting issues I missed before.
commit a428a3ebba70dcab63dd0f8cd983120c90617271
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:41:51 2020 +0200
Fix clippy warnings, part 1.
There aer still a bunch of type too complex and
function takes too many arguments warnings that I'll fix later
(or ignore, since in the one case I did fix a function takes too
many arguments warning I think it made the code *less* readable).
commit ba54307540ed8a937ac08209730284fc653af85b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 30 13:22:42 2020 +0200
Fix light animations so they are removed when the light turns off.
commit 7e0f4bcbf0f4717145d8beac40d52e3acebbe2aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 21:10:20 2020 +0200
Fix crash in edge case for pixel art.
commit 56da06f7a351e2b949e9b014a90b974d511a0924
Merge: cf74d55f2 9f53a4a19
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:56:52 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:29:52 2020 +0200
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
The first concern was addressed by fixing the dimensions of the map
images drawn from the UI (so that we always use a square source
rectangle, rather than a rectangular one according to the dimensions of
the map). We also fixed the way rotation was done in the fragment
shader for north-facing sources to make it properly handle aspect ratio
(this was already done for north-facing targets). Together, these fix
rendering issues peculiar to rectangular maps.
The second and third concerns were jointly addressed by adding an
optional border color to every 2D image drawn by the UI. This turns
out not to waste extra space even though we hold a full f32 color
(to avoid an extra dependency on gfx's PackedColor), since voxel
images already take up more space than Optiion<[f32; 4]> requires.
This is then implemented automatically using the "border color"
wrapping method in the attached sampler.
Since this is implemented in graphics hardware, it only works (at
least naively) if the actual image bounds match the texture bounds.
Therefore, we altered the way the graphics cache stores images
with a border color to guarantee that they are always in their own
texture, whose size exactly matches their extent. Since the easiest
currently exposed way to set a border color is to do so for an
immutable texture, we went a bit further and added a new "immutable"
texture storage type used for these cases; currently, it is always
and automatically used only when there is a specified border color,
but in theory there's no reason we couldn't provide immutable-only
images that use the default wrapping mdoe (though clamp to border
is admittedly not a great default).
To fix the maps case specifically, we set the border color to a
translucent version of the ocean border color. This may need
tweaking going forward, which shouldn't be hard.
As part of this process, we had to modify graphics replacement to
make sure immutable images are *removed* when invalidated, rather
than just having a validity flag unset (this is normally done by
the UI to try to reuse allocations in place if images are updated
in benign ways, since the texture atlases used for Ui do not
support deallocation; currently this is only used for item images,
so there should be no overlap with immutable image replacement,
so this was purely precautionary).
Since we were already touching the relevant code, we also updated
the image dependency to a newer version that provides more ways
to avoid allocations, and made a few other changes that should
hopefully eliminate redundant most of the intermediate buffer
allocations we were performing for what should be zero-cost
conversions. This may slightly improve performance in some
cases.
commit ad18ce939940a8c697270f6e9b94db9942fd8295
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 13:21:09 2020 +0200
Fix continent scale hack.
commit 36b1cb074f5b195aebd7dbbc3da7f0246a1a18ec
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 12:11:40 2020 +0200
Enable loading different sized maps without a recompile.
We may want to tweak the effects of the continent_scale_hack.
commit 13b6d4d534cc4814b7cb3294ca41bbfea0a6b186
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 10:55:48 2020 +0200
Removing WORLD_SIZE, part 1.
Erased almost every instance of WORLD_SIZE and replaced it with a local
power of two, map_size_lg (which respects certain invariants; see
common/src/terrain/map.rs for more details about MapSizeLg). This also
means we can avoid a dependency on the world crate from client, as
desired.
Now that the rest of the code is not expecting a fixed WORLD_SIZE, the
next step is to arrange for maps to store their world size, and to use
that world size as a basis prior to loading the map (as well, probably,
as prior to configuring some of the noise functions).
commit 30b1d2c6428230a9eaa0d749cdcbbd6f1cbccd78
Merge: 7d56ba31b 1377b369f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:58 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 7d56ba31b445441461b28a07fc495d7d4f047c17
Merge: 2101113b4 598f14b25
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 1377b369f6db2258e910d467a5740f31789e3ded
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sun Jul 19 23:25:38 2020 +0200
more saturated pumpkins
commit ae8d50527f93bb0616c2ad46ce4dacb63bc37c6d
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sat Jul 18 20:29:56 2020 +0200
acacia models
commit 2101113b467e691de787392d7f20f1745f5637bd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 18 18:55:25 2020 +0200
Higher detail LOD.
commit add2cfae04b4385fa5590e11e2bd5229d9dee0aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 16 01:57:39 2020 +0200
Revert some irrelevant stuff.
commit 2e2ab3dc1eaa59a4aef7f8d34a53d8aae4c8553a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 15 13:30:49 2020 +0200
Fixing various things about shadows.
* Correcting optimal LISPSM parameter.
* Figure shadows are cast when they're not visible.
* Chunk shadows stay cast until you look away.
* Seamless cubemaps for point lights.
* Etc.
commit 6c31e6b56217274285b597af297036691ea5d897
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 19:50:26 2020 +0200
Fix shadow creation.
commit 6332cbe006115ae205597529cd8bbccd146c2cca
Merge: be438657c 930e0028b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:47:00 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit be438657c33d7b5bfb0a9582c3ed3fd366637323
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:28:08 2020 +0200
Tweaks to shadows.
Added shadow map resolution configuration, added seamless cubemaps,
documented all existing rendering options, and fixed a few Clippy
errors.
commit 23b4058906013c7d2a40c286e20e32c5fbd897ed
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 10:11:19 2020 +0200
Fix moon, use nonlinear noise for terrain.
Note that the latter has a bit of performance cost.
commit 7fbe5cbfbb9dc29607957b8e62f432a4deed193d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:23:02 2020 +0200
Address lies about max texture size.
commit bcfc62b5e13a1cdd83f57535fde4694720bebfd9
Merge: 75e3626a7 18a08e8fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:22:08 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 75e3626a785919f43fdcf2127c2b10e3e4df2f9f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:21:52 2020 +0200
OpenGL 3.3 minimum.
commit 18a08e8fe2739f02af99a5d2cb4e7c38c49e858b
Author: Monty Marz <m.marzouq@gmx.de>
Date: Tue Jul 7 23:57:52 2020 +0200
settings localization
commit 90c5d1ca3620092bc3ae10b2211489eb1cf6f5e8
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 21:11:48 2020 +0200
Lower near distance.
commit 0e66f02b25aaddaa2dfddbbc89cd67de54a9a7b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 20:09:01 2020 +0200
All sprites sway in the wind now.
commit db1401a6910bf42dcf502462c90038752ff5fbdb
Merge: 69e508d8c e8b4b29d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 19:34:17 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 69e508d8c94d8973033817ca86f357e466fc7c4d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 18:41:37 2020 +0200
Make it easy to switch to SIMD for math.
commit ffe0f5928c7a7e87d00cb5426b3b1d831d7e02fd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 21:21:12 2020 +0200
Fix some issues with underwater rendering.
commit bfda6da42f38fd02c31ee92c81ab785a3e50c2a0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 19:17:59 2020 +0200
Fix some minor display issues.
commit 0ed752e087968cf901301884aaeae698e32ef8a5
Merge: ccc6a06a8 518edcb85
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:14:21 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit ccc6a06a8d4504d6b9f7af7905a414d2ee06ab76
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:04:34 2020 +0200
Some minor changes.
commit 4e020246702889269efe1a191788992164c508d6
Merge: 50a64d927 e05c9267a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 16:17:40 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 50a64d927e6c4f4b0e4688e4cbfca694bc3f922a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 13:07:03 2020 +0200
Fix far plane.
commit 7dd06da34cae8f9ea3b6c889fe965181f3fd3949
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:25:35 2020 +0200
Add shadows.glsl.
commit 618a18c998778bf871b905a74657440fcc384c80
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:10:22 2020 +0200
Adding shadows, greedy meshing, and more.
commit eaea83fe6a5cb1cb0ba8beef888183c718258496
Merge: 267018495 2f89b863e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 22:47:07 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 2670184954a13e4a9e7a4e35ba79aac0c5fac2f7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 21:20:01 2020 +0200
Make civsim and sites deterministic.
For anything in worldgen where you use a HashMap, *please* think
carefully about which hasher you are going to use! This is
especially true if (for some reason) you are depending on hashmap
iteration order remaining stable for some aspect of worldgen.
commit f8376fd5dc72b4a9c2f51a6b4570d59c8b8e9343
Merge: 654f7e049 cdee191dd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 17:53:57 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 654f7e049258d9da27c09608bbe6a46ffa8787e5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed May 20 21:22:30 2020 +0200
Correct backface culling.
commit 560501df05ca725409b0f2e4eb31bdfdc15fd0c7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue May 19 17:22:06 2020 +0200
Greedy messhing for shadows.
commit a4d87e1875ca543436e6bbbeb20348facc5a52d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun May 17 05:59:00 2020 +0200
Shadow maps work for lantern.
commit 243d0837b8a3b08172c9a3c348d964d7ddc2a0a8
Merge: 04382dc28 71dd520cd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:53:13 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 04382dc28632b6c66e8821f6870c0daaa1c1901a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:22:17 2020 +0200
WIP: better graphics config, better LOD, shadow maps.
commit 22ddbad3eb32bfa70f0932176022208fe67ded81
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 18:54:09 2020 +0200
Minor shader fixes.
commit 746a10e8d01ac235f994b0cde78fa48998602a1f
Merge: 0f4a0e763 40ab94673
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 04:02:09 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0f4a0e763db3afbdc4fb0558611f38326ca87151
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 23:03:24 2020 +0200
Switch back to pop-in terrain.
commit dd74fa7e4a53667b38811d7aec58d7f6a68889bb
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 22:58:55 2020 +0200
LOD shading closer to voxel shading.
commit ef67bd58ba0bdaf622b078892d768263b6cba268
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 28 20:49:03 2020 +0200
Experimental underwater lighting.
commit 2c5ad9d07605e80d5fd5679dd3a5d70c605b86a9
Merge: 748279835 303967a6f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 22:35:24 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7482798354eda18c8207950080fc24d443a369de
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 21:59:55 2020 +0200
Replace discard in figure-frag.
commit d83b4ae69be4912f69bf7835f509c68a1c7770a4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:45:57 2020 +0200
Fix sprite lighting, HDR from focus_pos.
commit 0594238004f116274905fa0ed7c2b6c417ed1d29
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:14:10 2020 +0200
Proper HDR from point lights.
commit 48c93d2b41ce5743103d18e76cc228f5ac766492
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 14:01:43 2020 +0200
Brighter ambiance, darker LOD shadows.
commit e0452e895ccfa8a43f368cae3b8b8aedc24dad93
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 13:13:23 2020 +0200
More proper HDR.
commit 4c6da3ed16cfeebb455e40da5f557b4af9a499d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 00:13:10 2020 +0200
Trying LOD noise.
commit 682a3d74c85df5503ffe1fc1cc891bce789df1ad
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 23:11:08 2020 +0200
Fix LOD heights in towns.
commit cc39e5734e8b18f9077bf42e66337c1319dd6b6e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 21:01:23 2020 +0200
More LOD fixes.
commit 8116b21c2e51c836e77894e309ac273caf2917b3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:54:43 2020 +0200
I like this coloring.
commit bc2560ea90b36f4b46190005344232d993043ac3
Merge: 14effdd5d e690efe71
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:48:33 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 14effdd5db8747fcf3eb34f03b46b7792e92d1c5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:24:35 2020 +0200
Re-saturate.
commit 48a643955d4435b78179acba0beb4a979905cc31
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:23:57 2020 +0200
Various fixes.
commit f7b497a0c25f4ad4682c71dd1ed6f608052feb9b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 03:22:49 2020 +0200
Render figures again.
commit 44e4aad48deba8266b9f8bdfd3db096b381f5327
Merge: e6f0a5a98 9ec319a18
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 02:01:04 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit e6f0a5a981a82533ba188fff0a54ce98577bb152
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 24 16:12:20 2020 +0200
Add atmospheric scattering.
commit f2953087f691a8edbc001cb98ebf5059fc6f8ac0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 23 00:01:20 2020 +0200
Fix shadowing for specular reflections.
commit ddd4a67a9799b8d08c7dc0c2bec90621c2bed0e3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Apr 22 22:56:12 2020 +0200
HDR fixes.
commit 1015e60deef3c447381996277df7496707a63bd0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 21 18:25:19 2020 +0200
More lighting changes.
commit 80c264abd111fb237e57843efcb5c071d4f84613
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 13 00:29:59 2020 +0200
Lighting experiments.
commit 8414987e589dd5102bad89762a3adaccc0bfe957
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 9 02:38:40 2020 +0200
WIP -- lighting changes and soft shadows.
commit 9cd2b3fb0d6b49776c6dfe463e4169637250b11a
Merge: c7ea687eb 8b149ad11
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:29 2020 +0200
Merge branch 'sharp/new-lighting' into sharp/small-fixes
commit c7ea687ebbc5aace1b455f134a5bf49ce2c7434a
Merge: 476441531 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:02 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 8b149ad11ad4bb75018fcf9519baec27d1c95951
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:32:39 2020 +0200
Trying out a new lighting model.
commit b0ac9f36f755dd06f7c17c46150568064790864f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 07:56:11 2020 +0200
Use bicubic interpolation for terrain.
commit f6fc9307a121514b614bc50ef8eb055953e7da8a
Merge: 33140a295 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 05:01:41 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 4764415312aae6e9ac2d00e86e84577cb958f1ab
Merge: ed2d0111d 13388ee6a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 04:54:48 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 13388ee6a42943f3f79a9cb488346cef18e272fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 20:30:08 2020 +0200
Various fixes (to coloring and to soft shadows).
commit fbd084a94a067082a87cd6d28b82054709bc9265
Merge: 5a089863b 4fdf6896a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 18:50:38 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/map-colors
commit ed2d0111d994262ae836d84d1fe5a45e4de72a0b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 06:49:27 2020 +0200
Combining colors and LOD.
commit 88342640c6b835114d01c797b89fdede3b0a2108
Merge: 33140a295 5a089863b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:49:20 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 33140a2951b8212725f42c758b277aaec4d888f7
Merge: 4c65a5aed f34d4b379
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:36:21 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 5a089863beb01d4794bbe3580ada47b278715ea2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 03:17:49 2020 +0200
Making maps brighter.
This is probably not the right way to do it, but oh well!
commit 32b2c99109dd486aa922886081068f9c550c83f2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 02:46:36 2020 +0200
Horizon mapping and "layered" map generation.
Horizon mapping is a method of shadow mapping specific to height maps.
It can handle any angle between 0 and 90 degrees from the ground, as
long as know the horizontal direction in advance, by remembering only a
single angle (the "horizon angle" of the shadow map). More is explained
in common/src/msg/server.rs. We also remember the approximate height of
the largest occluder, to try to be able to generate soft shadows and
create a vertical position where the shadows can't go higher.
Additionally, map generation has been reworked. Instead of computing
everything from explicit samples, we pass in sampling functions that
return exactly what the map generator needs. This allows us to cleanly
separate the way we sample things like altitudes and colors from the map
generation process. We exploit this to generate maps *partially* on the
server (with colors and rivers, but not shading). We can then send the
partially completed map to the client, which can combine it with shadow
information to generate the final map. This is useful for two reasons:
first, it makes sure the client can apply shadow information by itself,
and second, it lets us pass the unshaded map for use with level of
detail functionality.
For similar reasons, river generation is split
out into its own layer, but for now we opt to still generate rivers on
the server (since the river wire format is more complicated to compress
and may require some extra work to make sure we have enough precision to
draw rivers well enough for LoD).
Finally, the mostly ad-hoc lighting we were performing has been (mostly)
replaced with explicit Phong reflection shading (including specular
highlights). Regularizing this seems useful and helps clarify the
"meaning" of the various light intensities, and helps us keep a more
physically plausible basis. However, its interaction with soft shadows
is still imperfect, and it's not yet clear to me what we need to do to
turn this into something useful for LoD.
commit f8926a5737ddc51f3d585c651a64c43677aae0f4
Merge: a1aee931e 875ae6ced
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Mar 13 13:32:42 2020 +0100
Merge remote-tracking branch 'origin/master' into sharp/map-colors
commit 4c65a5aed353b119aea65a2aaeb94549b67beb42
Author: Treeco <5021038-Treeco@users.noreply.gitlab.com>
Date: Mon Feb 24 16:48:05 2020 +0000
Made LOD setting slider exponential
commit 2fa7b2d20d7233dc8bfd64f9f7f54617575248f1
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 17:49:53 2020 +0000
Added mist to LoD
commit aab059a450b5f635777129ff82cc15b662965c3c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 15:14:06 2020 +0000
Added LoD slider
commit 779c36b538121c5ade3633ae5cb67bb14c8c3877
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:54:55 2020 +0000
Reduced cost of vertex pushing
commit 9fea150473906b166365b738ebcea07c697daf3d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:38:53 2020 +0000
Fixed maths, improved LoD resolution
commit 5481df38fea5bf183ff376a3337179cfaa5233dc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 11:22:50 2020 +0000
Dynamically relocate LoD vertices to enhance details
commit a3e36a50ababd615da7db1b26158c7906a5def01
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 18:13:51 2020 +0000
Simpler terrain spiral rendering
commit 255f450ae9ac8763db4bede075fb409161ed57cc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:53:17 2020 +0000
Better LoD precision
commit 3d027aebe812a5b8658a4eb8123dc9f61b3776d2
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:04:03 2020 +0000
Better falloff
commit be775c9484b457b2c0b1a494aec03392d0c70e76
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 15:30:45 2020 +0000
Applied good ideas from experimental branch
commit 58587b68545a23c5c04ab4574a4b94b3bc982246
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 16:15:13 2020 +0000
Minor fixes to LoD merging
commit 7b42aebd709c14df2db766aad61d9280ad24d84d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 15:04:44 2020 +0000
Capped LoD dragging
commit 8aafc559f87124e1ea5ca6e3ddc2aa0c242d793c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:54:37 2020 +0000
Better blending between LoD and terrain border
commit edd3455d5161792d87ddc8eadc0ecbad5532b284
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:40:19 2020 +0000
Fixed LoD z depth, added sea level offset
commit b9b06744620114dd5556e73f64fa93c145503a7c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:27:43 2020 +0000
Better LoD smoothing
commit a1aee931e790431560cd2d953ad61d9497072afd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Feb 21 14:52:17 2020 +0100
Adding shadows.
commit 2400786c13dd891c131ed86d48d05df516a8a778
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 13:48:40 2020 +0000
Use world map as LoD source
commit dbf650f504a4c25fbbc2096ac3616c736bf52d23
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Jan 20 00:48:14 2020 +0000
Better clouds at distance
commit 5e6f81b86cdb9730b9b056877b19257075fd5fa8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Jan 19 23:59:02 2020 +0000
sync
commit 745e7540ddb000cc645f612767b337c2ddc3f7c0
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 12:40:48 2019 +0000
Improved cloud falloff mist, faster noise sampling
commit f6a200d0cb866196ba57697466755f9e0c7ea5d8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 10:09:00 2019 +0000
Improved long-range depth precision, removed unnecessary LoD polygons
commit 63d1b2bb2292898d59fb4f4e502201103dfeb86f
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 20:57:46 2019 +0000
Working LoD shader
commit f13d98ee3e58f881e8b978861a67663b59ed91ec
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 11:03:40 2019 +0000
LoD first attempt (stack overflow issue)
2020-08-20 18:34:59 +00:00
|
|
|
|
WorldFile::Veloren0_7_0(map) => map.into_modern(),
|
2020-01-18 18:41:37 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2019-05-18 08:59:58 +00:00
|
|
|
|
pub struct WorldSim {
|
2019-05-20 02:53:04 +00:00
|
|
|
|
pub seed: u32,
|
(See sharp/lod-history) LOD, shadows, greedy meshing, new lighting, perf
---
Pretty much a Veloren fork at this point. Here's a high level overview of the changes (will be added to CHANGELOG just before merge).
At a high level this MR incorporates roughly two groups of changes.
The first group consists of new game features: more flexible map sizes, level of detail terrain, shadow maps, and a new lighting
engine. This is "feature work" that (mostly) only adds new things to Veloren, and mostly shouldn't affect old stuff.
The second big group of changes are those addressing the fallout from all the new features. These include performance fixes of
various sorts: the addition of multiple graphics options and optimization of the cheap ones to avoid work, switching all voxel
models to use some variant of greedy meshing, switching over much of our CPU-side vector math to exploit SIMD instructions
(coinciding with a fork of `vek`), and a rewrite of how the UI handles text rendering (coinciding with updates to our fork
of `conrod`). Making Veloren's hardcoded colors appear correct under the new lighting engine also required considerably
changes (TODO: Fill in this section when it's complete).
The second category of changes often heavily touches code owned by other people, including frequently modified code "owned" by a
handful of people, so I recommend that this code be reviewed particularly carefully.
---
At a high level (each will be described in more detail below):
- The world map has been refactored.
- The world size is no longer hardcoded (@zesterer).
- The map generation code was made generic to allow using it outside of the `world` crate (@zesterer).
- On world creation, we now compute *horizon maps* (@zesterer).
- The way we pass the world from the server to the client has been updated (@xMAC94x).
- Artifacts related to image rotation were fixed (@imbris).
- Multiflow rivers were enabled (@zesterer).
- In the process of making changes related to the world map, various incidental fixes and optimizations were required.
- The new *level of detail* feature was added (@zesterer wrote part of this and has checked out the rest).
- A new LOD terrain rendering step was added to the pipeline.
- The LOD terrain quality was made configurable via a graphics setting.
- Horizon maps were used to cast shadows from LOD chunks on both LOD and non-LOD terrain.
- A "voxelization" effect was incorporated into rendered LOD terrain to make it blend better into the world.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Veloren's lighting has been completely overhauled (@zesterer has already checked most of this out).
- A semi-accurate index of refraction was assigned to our materials.
- A new, more realistic, physically based approach to lighting was used using the *Ashikhmin Shirley* BRDF.
- We emulate *atmospheric scattering* using equations designed for measuring solar panel light exposure.
- We attempt to compute *realistic light attenuation* in water using its real material properties.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Point and directional lights now cast realistic shadows, using *shadow mapping.* (@imbris, @zesterer, @Treeco, @YuriMomo)
- Point light shadow maps were added to the rendering pipeline, using geometry shaders and *seamless cube maps*.
- Directional light shadows were added to the rendering pipeline, using LISPSM together with disabling *depth clamping*.
- "Shadow-only" chunks and NPCs were added to prevent shadows from models behind you from disappearing.
- In the process of making changes related to shadow maps, various incidental fixes and optimizations were required.
The addition of shadow maps, LOD terrain, and the new lighting all led to significant performance degradation, on top of other
changes happening in master. Therefore, a large number of performance improvements were also needed:
- The graphics options were made much more flexible and configurable, and shaders were optimize.
- New options were provided for how to render lights and shadows (@Pfauenauge, @zesterer).
- Graphic setting storage and configuration were overhauled to make adding new features easier (@Pfauenauge, @imbris).
- Shaders were rewritten to utilize GLSL's preprocessor to avoid overhead (@zesterer, @YuriMomo).
- In the process of making changes related to providing additional rendering options, various incidental fixes and optimizations were required.
- Voxel model creation was switched to use *greedy meshing.*
- A new voxel meshing method, greedy meshing, was added (@imbris).
- Uses of the older meshing methods were migrated to use greedy meshing (@imbris, @jshipsey, @Pfauenauge).
- New restrictions were added to terrain, figure, and sprites to future proof them for further optimizations (@jshipsey, @Pfauenauge, @zesterer).
- Most positions are now relative to either chunk or player position for better precision (@imbris, @zesterer, @scottc).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- Animation and terrain math were switched to use SIMD where possible.
- Fixes were made to vek to make its SIMD feature usable for us (@zesterer, @imbris).
- The interface and types used in bone animation were changed in various ways (@jshipsey, @Snowram, @Pfauenauge).
- Redundant code generation for body animation is now partly taken care of by a macro (@jshipsey, @Snowram, @Pfauenauge).
- Animation code was modified to to use vek's SIMD representation where possible (@jshipsey, @Snowram, @Pfauenauge).
- Terrain meshing code and shadow map math were also modified to use vek's SIMD representation (@imbris).
- SIMD instruction generation was enabled (@YuriMomo, @jshipsey, @Snowram, @imbris, @Angelonfira, @xMAC94x).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- The way we cache glyphs was completely refactored, fixed, and optimized.
- Our fork of `conrod` was optimized in various ways (@imbris).
- Our fork of `conrod` now exposes whether a widget was updated during the current frame (@imbris).
- Our use of the glyph cache was rewritten for correctness (@imbris).
- A *text cache* was introduced that lets us skip remeshing glyphs that have not changed (@imbris).
- Various changes were made to reduce pressure on the glyph cache, with more planned (@imbris, @Pfauenauge).
- In the process of making changes related to the glyph cache, various incidental fixes and optimizations were required.
- Colors were changed to keep Veloren's look consistent with master.
- Some older tree models were brought back (@Pfauenauge).
- TODO(@Sharp): All hardcoded colors were extracted and made hotloadable.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Hardcoded colors were fixed to conform to Veloren's style.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Color models were fixed to conform to Veloren's style.
A detailed description of the involved changes follows.
---
- The world size is no longer hardcoded. All functions dependent on world size now take a `WorldSizeLg`, which holds the base 2 logarithm of each actual world dimension and is guaranteed to maintain certain properties (outlined in `common/src/terrain/map.rs`). Additionally, many utility functions that utilize the world size were moved into `common` as well (mostly `common/src/terrain/mod.rs`). Finally, the world map format was updated in order to store its size explicitly, with a migration path from the old format that should work whenever the old formatted map was a square (practically always). See `world/src/sim/mod.rs` for these changes.
- The map generation code was made generic to allow using it outside of the `world` crate. The parts of the map generating code that do not need to query the world were moved over to `common/src/terrain/map.rs`, allowing them to be used from the client without creating a dependency on `world`. The rest of it was turned into helper functions in `world/src/sim/map.rs`, which can be passed as closures to the generic map generation code to complete its construction. This also means that colors are now passed in separately to the map generation function. See <https://veloren.net/devblog-78/> for more details.
- On world creation, we now compute *horizon maps*. See the function in `world/src/sim/util.rs`.
Given a height map and a plane intersecting that height map, our horizon maps allow us to encode enough information to reconstruct shadows for each point on the height map using only the *horizon angle* (the angle at which the sun starts to become visible). As Veloren's sun only covers one plane, this is sufficient for encoding sun shadows for LOD terrain, by encoding two angles per chunk (one for each 90 degrees the sun covers). We can also use this for the moon, if we want, since the moon follows the same path. Additionally, we store the *height* of the furthest occluder, to try to make the shadows volumetric; so this means 4 bytes in total for each chunk.
Support for horizon maps has been merged into the map functionality in common as well.
- The way we pass the world from the server to the client has been updated. Rather than passing the prerendered map, we instead pass three maps with values for each chunk; one with the color information, a second with altitude information, and a third with horizon map information. We then reconstruct the map on the client, together with some additional information we send from the server (like the sea level and maximum height). See `common/src/msg/server.rs` for a detailed description of the format of `WorldMapMsg`, and `server/src/libr.rs` and `client/src/lib.rs` for details of the map construction and parsing.
- Artifacts related to image rotation were fixed. See the commit message for commit SHA `cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e` for a detailed explanation. This involved changes to shaders, the addition of a new type of graphic (also reflected in the graphic cache) that allows specifying a border color (which automatically makes the associated texture immutable), and some related fixes. I reproduce the first two paragraphs of the MR description as well:
```
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
```
- Multiflow rivers were enabled.
This does not really need to be part of this MR, and would be easy to revert, but since it seemed to provide a nice improvement it's currently packaged with it.
We already computed multiple outflows from each chunk for erosion purposes long before this MR.
However, we never modified river rendering to be able to handle this case (just a single downhill river flow is complex enough!) so this was not exposed when deciding which chunks were rivers.
Now that
- In the process of making changes related to the world map, various incidental fixes and optimizations were required. Some examples of fixes include making sure terrain is never lowered to below sea level (to make the shadow maps report correct values), fixing map altitudes and colors to understand things like cliffs and "block level" coloring (that doesn'te xist on the column level), and fixing a crashbug when rendering images for the UI where source pixels are strongly rectangular. Some examples of related performance fixes include avoiding allocating a fresh vector for all the maps (i.e. copying it over to change the format from `[u32; n]` to `DynamicImage` and then copying again to convert to `RgbaImage`), and instead using the `gfx::memory::slice` function to accomplish the same thing. These sorts of changes are spread all arond the code.
This includes the additon of a new scene, `voxygen/src/scene/lod.rs`, a new pipeline `voxygen/src/render/pipeline/lod_terrain.rs`, and new shaders `assets/vxygen/shaders/lod-terrain-vert.glsl` and `assets/vxygen/shaders/lod-terrain-frag.glsl`, as well as associated changes to the renderer in `voxygen/src/render/renderer.rs`.
The main idea behind our initial approach to LOD was to take the world data we now get from the server (altitude, color, and horizon mapping).
- Some previously computed values were turned into shader uniforms for better prediction on weak processors. (@zesterer)
- Calls to power or trig functions were removed or replaced with multiplications, where possible.
- After some deliberation
- To properly handle sprite "waving" for nearby sprites,
We explicitly designed the greedy meshing system with figures and sprites in mind.
In both cases, we want to be able to *efficiently* pack many different models into the same texture, especially in cases where we know
we will either not be removing any of the grouped-together from the models from the texture, or will remove all of them at once (so
they can be packed into some specific subtexture).
For sprites, since we know every model in advance and never intend to deallocate them, we currently pack them all as efficiently as
possible into one giant tetxure atlas. However, in the future we might opt to pack them slightly less efficiently in exchange for
shrinking the sprite vertex size.
For figures, we pack all the textures for each *model* into the same atlas.
is a global texture atlas used for every sprite, and for figures which is why we have the ability to mesh multiple
models to the same texture area (using the simple texture atlas allocator) without requiring intermediate vector allocations.
This is accomplished by delaying the time when we actually write the color and light data to the texture until *after* all the
model vertices have been meshed; then, we can just allocate the whole color/light array at once, making the atlas we use an
exact fit. In computer science-y terms, we accomplish this delay by, after we perform the initial greedy meshing (without
texture information), not continuing to create the texture data, but instead constructing a *continuation*--that is, a function
that, when called, will execute the rest of the computation. We push this continuation (which in Rust terms is a `FnOnce` closure
that takes the `ColLightsInfo` that it is supposed to write to as context) onto a
onto a vector
resizing. To allow for suspended writes to texture data, Rust pointed out to me that the continuation that would eventually write the color and light data to the texture atlas (the one that is shared by all models sharing the same greedy mesher) would have to *own* whatever data it mshed. Because we often generate the model data to mesh as a temporary in `voxygen/src/load.rs`, the
- Matrix multiplications in the shader were reduced for figure data (@zesterer).
- Vertex "waves" for fluid data were removed.
- Terrain "bending" near edges was removed.
- Scaling was fixed to make sure empty space was not introduced in a space previously occupied by a block. It was also changed to take ownership of its voxel data,
rather than sharing it, to let it be used with meshing.
- Rust's nightly version was bumped in order to use the `array_map` function, which lets us reuse more code between the simple map and `FigureModelCache`.
- PositionedGlyph::standalone.
---
I tried to cite sources in many cases[^realtime],[^lloyd],[^lispsm],[^pbrt],[^greedy],[^tjunctions]
where I needed features from elsewhere but I am particularly grateful for the following resources,
esepcially where they have accompanying source code. I linked all of them that are accessible to the public (those that are not were
obtained through legal means).
[^realtime]: Eisemann, Elmar, Michael Schwarz, Ulf Assarsson, Michael Wimmer. Real-Time Shadows. A K Peters/CRC Press (T&F), 20160419.
[^lloyd]: Lloyd,B. 2007. [Logarithmic perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). PhD thesis, University of North Carolina.
[^lispsm]: Wimmer, M., Scherzer, D., and Purgathofer, W. 2004. [Light space perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). In Proceedings of Eurographics Symposium on Rendering 2004, pp. 143– 152.
[^pbrt]: Pharr, Matt, et al. [http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf](Physically Based Rendering: From Theory to Implementation). Third edition, Morgan Kaufmann Publishers/Elsevier, 2017.
[^greedy]: mikolalysenko. “Meshing in a Minecraft Game.” 0 FPS, 30 June 2012, <https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/>.
[^tjunctions]: blackflux. “Meshing in Voxel Engines – Part 1.” Blackflux.Com, 23 Feb. 2014, <https://blackflux.wordpress.com/2014/02/23/meshing-in-voxel-engines-part-1/>.
I am also especially grateful to Khronos, Wikiepdia, and stackoverflow for answering many of my specific questions while writing the MR.
---
Squashed commit of the following:
commit 300505e7305a2fdac722a808ee8538323f215f39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 18:46:25 2020 +0200
Fixing cargo doc and typo in CHANGELOG.
commit ec0aeb18e8499d7d84ef818331b4b65c3d76cea6
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 15:38:50 2020 +0200
Hopefully final commit for the LOD branch.
commit 5e8ea0b1eaac02903a02feb2eb038d195de4872f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 10:14:26 2020 +0200
Falling back to power as stopgap.
commit e44a1cbf46504ee9931a01bdc9033e145500d557
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 09:25:41 2020 +0200
Address imbris feedback.
Temporarily disables shiny water, lowers max VD.
These restrictions will be lifted soon after merging.
commit 561e25778a108ac3712f5ec2ce3a51234c4430d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 08:31:13 2020 +0200
Tweaking shaders a bit.
commit 7d19259078ce0dd7b3742ad7d0cb3fab3ece3fdc
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:59:43 2020 +0200
Fix view example as well.
commit 051cd4934e0fad2c0b15db4380a4189fa318679f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:29:06 2020 +0200
Fix meshing benchmark.
commit c95e07db3b4dcca285678985e65e31b927cb1c61
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 05:46:22 2020 +0200
Address MR feedback, fix scene clouds.
commit 1bfb816cabdb3ffc1e507a009c2d98696b4b573a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:39:36 2020 +0200
Incorporating Pfau's figure color changes.
New eyes and new humanoid colors.
commit 3f9b89a3ac7b3356b1dba0d1a8f6541357f81469
Merge: e2f5162e4 62c53963a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:29:41 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit e2f5162e4f96f4124aa43488f7245d341b3dcfd4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:28:38 2020 +0200
World colors are all hotloadable.
They live in assets/world/style/colors.ron.
Only a small handful of hardcoed colors remain in World; they are either
part of the map, or difficult to disentangle from the rest of the
computation. Comments are made where appropriate.
commit 62c53963abe1975009d34a8f9515a355bef24f31
Author: Marcel Märtens <marcel.cochem@googlemail.com>
Date: Wed Aug 19 15:59:00 2020 +0200
replace pretty_env_logger with tracing
commit 5b1625f99d9586fe80e2232f583ec5af9f953099
Merge: d71003acd 4942b5b39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:15:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit d71003acdabeff970b3928e97c26af6847b5b78e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:14:34 2020 +0200
Hotloading colors, part 1: colors in common.
Currently, this just entails humanoid colors. There are only three
colors not handled; the light emitter colors in
common/src/comp/inventory/item/tool.rs. These don't seem important
enough to me to warrant making hotloadable, at least not right now, but
if it's needed later we can always add them to the file.
commit 63b5e0e553eb2ea49276f192a6fc7dd65254270d
Merge: c32b337a4 6d2c4b9c1
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 13:05:37 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c32b337a46e10d9de473d178a94a3ccd61c39bb3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:52:04 2020 +0200
Fixing LOD grid, for real.
commit a166ae0360395387e09fb35a1f84210c2ce5ec24
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:28:05 2020 +0200
Addressing imbris's initial feedback.
Fixes two minor bugs: explosion particles were no longer spawning
randomly, and LOD grids were not perfectly even.
commit 4cbad004f44060994252dd3d38647a14a589712f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:27:58 2020 +0200
Bumping nightly per request.
commit 548680276aac77c25d43d16b5622f847d474dbef
Merge: acc098604 8f8b20c91
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:26:06 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit acc0986040589a3492f88a740bc3c3fc693b26d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:28:32 2020 +0200
Lower resolution due to lying drivers.
commit d3b878de2a52c358d2944a6bbd0555dad7fbdb10
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:15:38 2020 +0200
Fix issues msh encountered with Intel 4600.
commit 10245e0c1b0cb6fae10d86409435364edc6102ef
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 21:15:02 2020 +0200
Merge more models into one mesh than we did previously.
commit 3155c31e663c52ae5c3a53d5fb5665892a1a498a
Merge: 7204cc8a7 3c199280e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:35:22 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7204cc8a7a4f74a30306bd205d9834fee4bb944f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:34:43 2020 +0200
Fix not yet done NPC animations.
This forces them all to be the idle animation if not specified.
This fixes issues where you'd have giant NPCs in water.
commit bc83360f2a08918f19d417b5f772e1ff554dba08
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 19:36:37 2020 +0200
Try to fix some bugs:
- Z fighting with LOD terrain and water.
- Audio SFX not playing.
commit 1fd104aa603bf3781b6526a5cada46aeca3049dd
Merge: 862df3c99 7c2c392a3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 12:02:31 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 862df3c9976c4da9bd7cfd784f1a85973127968a
Merge: 0a4218ed9 75c1d4401
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 05:52:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0a4218ed9d541a2b34c133351bea38a99ddf4ea7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 22:27:14 2020 +0200
Fix particle depth.
commit f51dfdeb442d0dd5243dd2f344fa4be295bd0875
Merge: c6251a956 5e6dc0471
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:19:04 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit c6251a956ad376400dca5c23420cf8d213dc8fdf
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:15:46 2020 +0200
Cache figures more intelligently.
Cache figures for longer, and don't cache character states for the
player except where they actually affect the rendered model.
commit 0ed801d5404982c6fb63b1eaa4567d908b294c9d
Merge: c11b9bdf0 eea64f78f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 16:32:24 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c11b9bdf0a53bf9884d2f5a48fec9b01d582df1a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 11:47:15 2020 +0200
Remove unneeded Clippy annotation.
commit 16aa9ef40af56d69289d00aafb3deadfb8bd4f35
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 8 00:53:02 2020 +0200
Fix hotloading and Clippy.
commit 3dc973e0be5b758da1e9805eb764ad401374cd0c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 23:50:27 2020 +0200
Major speedups with SIMD.
commit fba64a7d93d5a96077ce87287bbce6ab9b7fbcae
Merge: 76429d00e d1e10b178
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:19 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 76429d00eea00d212fbd672a84ee91e75b19b938
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:10 2020 +0200
Add clippy.toml.
commit c79f512f84dbb83cb82b7954db68ff241dfd8e41
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 11:55:20 2020 +0200
Fix all clippy issues, clean up Rust code.
commit 6f90e010b3fbefb53b0d632e819931350015b6b8
Merge: 77a8c7c26 5929cfa5c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:30 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 77a8c7c267d3f44a1a62bd6b2274359973c5e4d4
Merge: b44e44232 44febaabd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:10 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 5929cfa5c713aa392110bbb62407f76caf53c3df
Author: jshipsey <jshipsey18@gmail.com>
Date: Thu Aug 6 20:47:27 2020 -0400
fixed in-hand arrow bug
commit b44e442325d828f1cd564d66908f89d09e80474b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 6 13:40:35 2020 +0200
Miscellaneous performance improvements.
commit be37acf287c1360d8085862526ac3365ffd1d768
Merge: 125d7fc6c c11876547
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 05:49:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 125d7fc6c4dcd8c8c5f27b8268a4d64f409f3644
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 04:55:31 2020 +0200
Abstract over simd vs. repr_c vectors.
Also some minor improvements to Event size.
commit d4d4956e9252e1241ce110b2aa85076c6b1e2a23
Merge: 5f3b7294a aced5f979
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:56:54 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 5f3b7294af1f8533edc2620b58863c248e2b07af
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:43:52 2020 +0200
Fix formatting issues I missed before.
commit a428a3ebba70dcab63dd0f8cd983120c90617271
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:41:51 2020 +0200
Fix clippy warnings, part 1.
There aer still a bunch of type too complex and
function takes too many arguments warnings that I'll fix later
(or ignore, since in the one case I did fix a function takes too
many arguments warning I think it made the code *less* readable).
commit ba54307540ed8a937ac08209730284fc653af85b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 30 13:22:42 2020 +0200
Fix light animations so they are removed when the light turns off.
commit 7e0f4bcbf0f4717145d8beac40d52e3acebbe2aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 21:10:20 2020 +0200
Fix crash in edge case for pixel art.
commit 56da06f7a351e2b949e9b014a90b974d511a0924
Merge: cf74d55f2 9f53a4a19
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:56:52 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:29:52 2020 +0200
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
The first concern was addressed by fixing the dimensions of the map
images drawn from the UI (so that we always use a square source
rectangle, rather than a rectangular one according to the dimensions of
the map). We also fixed the way rotation was done in the fragment
shader for north-facing sources to make it properly handle aspect ratio
(this was already done for north-facing targets). Together, these fix
rendering issues peculiar to rectangular maps.
The second and third concerns were jointly addressed by adding an
optional border color to every 2D image drawn by the UI. This turns
out not to waste extra space even though we hold a full f32 color
(to avoid an extra dependency on gfx's PackedColor), since voxel
images already take up more space than Optiion<[f32; 4]> requires.
This is then implemented automatically using the "border color"
wrapping method in the attached sampler.
Since this is implemented in graphics hardware, it only works (at
least naively) if the actual image bounds match the texture bounds.
Therefore, we altered the way the graphics cache stores images
with a border color to guarantee that they are always in their own
texture, whose size exactly matches their extent. Since the easiest
currently exposed way to set a border color is to do so for an
immutable texture, we went a bit further and added a new "immutable"
texture storage type used for these cases; currently, it is always
and automatically used only when there is a specified border color,
but in theory there's no reason we couldn't provide immutable-only
images that use the default wrapping mdoe (though clamp to border
is admittedly not a great default).
To fix the maps case specifically, we set the border color to a
translucent version of the ocean border color. This may need
tweaking going forward, which shouldn't be hard.
As part of this process, we had to modify graphics replacement to
make sure immutable images are *removed* when invalidated, rather
than just having a validity flag unset (this is normally done by
the UI to try to reuse allocations in place if images are updated
in benign ways, since the texture atlases used for Ui do not
support deallocation; currently this is only used for item images,
so there should be no overlap with immutable image replacement,
so this was purely precautionary).
Since we were already touching the relevant code, we also updated
the image dependency to a newer version that provides more ways
to avoid allocations, and made a few other changes that should
hopefully eliminate redundant most of the intermediate buffer
allocations we were performing for what should be zero-cost
conversions. This may slightly improve performance in some
cases.
commit ad18ce939940a8c697270f6e9b94db9942fd8295
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 13:21:09 2020 +0200
Fix continent scale hack.
commit 36b1cb074f5b195aebd7dbbc3da7f0246a1a18ec
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 12:11:40 2020 +0200
Enable loading different sized maps without a recompile.
We may want to tweak the effects of the continent_scale_hack.
commit 13b6d4d534cc4814b7cb3294ca41bbfea0a6b186
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 10:55:48 2020 +0200
Removing WORLD_SIZE, part 1.
Erased almost every instance of WORLD_SIZE and replaced it with a local
power of two, map_size_lg (which respects certain invariants; see
common/src/terrain/map.rs for more details about MapSizeLg). This also
means we can avoid a dependency on the world crate from client, as
desired.
Now that the rest of the code is not expecting a fixed WORLD_SIZE, the
next step is to arrange for maps to store their world size, and to use
that world size as a basis prior to loading the map (as well, probably,
as prior to configuring some of the noise functions).
commit 30b1d2c6428230a9eaa0d749cdcbbd6f1cbccd78
Merge: 7d56ba31b 1377b369f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:58 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 7d56ba31b445441461b28a07fc495d7d4f047c17
Merge: 2101113b4 598f14b25
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 1377b369f6db2258e910d467a5740f31789e3ded
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sun Jul 19 23:25:38 2020 +0200
more saturated pumpkins
commit ae8d50527f93bb0616c2ad46ce4dacb63bc37c6d
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sat Jul 18 20:29:56 2020 +0200
acacia models
commit 2101113b467e691de787392d7f20f1745f5637bd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 18 18:55:25 2020 +0200
Higher detail LOD.
commit add2cfae04b4385fa5590e11e2bd5229d9dee0aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 16 01:57:39 2020 +0200
Revert some irrelevant stuff.
commit 2e2ab3dc1eaa59a4aef7f8d34a53d8aae4c8553a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 15 13:30:49 2020 +0200
Fixing various things about shadows.
* Correcting optimal LISPSM parameter.
* Figure shadows are cast when they're not visible.
* Chunk shadows stay cast until you look away.
* Seamless cubemaps for point lights.
* Etc.
commit 6c31e6b56217274285b597af297036691ea5d897
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 19:50:26 2020 +0200
Fix shadow creation.
commit 6332cbe006115ae205597529cd8bbccd146c2cca
Merge: be438657c 930e0028b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:47:00 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit be438657c33d7b5bfb0a9582c3ed3fd366637323
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:28:08 2020 +0200
Tweaks to shadows.
Added shadow map resolution configuration, added seamless cubemaps,
documented all existing rendering options, and fixed a few Clippy
errors.
commit 23b4058906013c7d2a40c286e20e32c5fbd897ed
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 10:11:19 2020 +0200
Fix moon, use nonlinear noise for terrain.
Note that the latter has a bit of performance cost.
commit 7fbe5cbfbb9dc29607957b8e62f432a4deed193d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:23:02 2020 +0200
Address lies about max texture size.
commit bcfc62b5e13a1cdd83f57535fde4694720bebfd9
Merge: 75e3626a7 18a08e8fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:22:08 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 75e3626a785919f43fdcf2127c2b10e3e4df2f9f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:21:52 2020 +0200
OpenGL 3.3 minimum.
commit 18a08e8fe2739f02af99a5d2cb4e7c38c49e858b
Author: Monty Marz <m.marzouq@gmx.de>
Date: Tue Jul 7 23:57:52 2020 +0200
settings localization
commit 90c5d1ca3620092bc3ae10b2211489eb1cf6f5e8
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 21:11:48 2020 +0200
Lower near distance.
commit 0e66f02b25aaddaa2dfddbbc89cd67de54a9a7b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 20:09:01 2020 +0200
All sprites sway in the wind now.
commit db1401a6910bf42dcf502462c90038752ff5fbdb
Merge: 69e508d8c e8b4b29d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 19:34:17 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 69e508d8c94d8973033817ca86f357e466fc7c4d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 18:41:37 2020 +0200
Make it easy to switch to SIMD for math.
commit ffe0f5928c7a7e87d00cb5426b3b1d831d7e02fd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 21:21:12 2020 +0200
Fix some issues with underwater rendering.
commit bfda6da42f38fd02c31ee92c81ab785a3e50c2a0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 19:17:59 2020 +0200
Fix some minor display issues.
commit 0ed752e087968cf901301884aaeae698e32ef8a5
Merge: ccc6a06a8 518edcb85
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:14:21 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit ccc6a06a8d4504d6b9f7af7905a414d2ee06ab76
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:04:34 2020 +0200
Some minor changes.
commit 4e020246702889269efe1a191788992164c508d6
Merge: 50a64d927 e05c9267a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 16:17:40 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 50a64d927e6c4f4b0e4688e4cbfca694bc3f922a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 13:07:03 2020 +0200
Fix far plane.
commit 7dd06da34cae8f9ea3b6c889fe965181f3fd3949
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:25:35 2020 +0200
Add shadows.glsl.
commit 618a18c998778bf871b905a74657440fcc384c80
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:10:22 2020 +0200
Adding shadows, greedy meshing, and more.
commit eaea83fe6a5cb1cb0ba8beef888183c718258496
Merge: 267018495 2f89b863e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 22:47:07 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 2670184954a13e4a9e7a4e35ba79aac0c5fac2f7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 21:20:01 2020 +0200
Make civsim and sites deterministic.
For anything in worldgen where you use a HashMap, *please* think
carefully about which hasher you are going to use! This is
especially true if (for some reason) you are depending on hashmap
iteration order remaining stable for some aspect of worldgen.
commit f8376fd5dc72b4a9c2f51a6b4570d59c8b8e9343
Merge: 654f7e049 cdee191dd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 17:53:57 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 654f7e049258d9da27c09608bbe6a46ffa8787e5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed May 20 21:22:30 2020 +0200
Correct backface culling.
commit 560501df05ca725409b0f2e4eb31bdfdc15fd0c7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue May 19 17:22:06 2020 +0200
Greedy messhing for shadows.
commit a4d87e1875ca543436e6bbbeb20348facc5a52d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun May 17 05:59:00 2020 +0200
Shadow maps work for lantern.
commit 243d0837b8a3b08172c9a3c348d964d7ddc2a0a8
Merge: 04382dc28 71dd520cd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:53:13 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 04382dc28632b6c66e8821f6870c0daaa1c1901a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:22:17 2020 +0200
WIP: better graphics config, better LOD, shadow maps.
commit 22ddbad3eb32bfa70f0932176022208fe67ded81
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 18:54:09 2020 +0200
Minor shader fixes.
commit 746a10e8d01ac235f994b0cde78fa48998602a1f
Merge: 0f4a0e763 40ab94673
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 04:02:09 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0f4a0e763db3afbdc4fb0558611f38326ca87151
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 23:03:24 2020 +0200
Switch back to pop-in terrain.
commit dd74fa7e4a53667b38811d7aec58d7f6a68889bb
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 22:58:55 2020 +0200
LOD shading closer to voxel shading.
commit ef67bd58ba0bdaf622b078892d768263b6cba268
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 28 20:49:03 2020 +0200
Experimental underwater lighting.
commit 2c5ad9d07605e80d5fd5679dd3a5d70c605b86a9
Merge: 748279835 303967a6f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 22:35:24 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7482798354eda18c8207950080fc24d443a369de
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 21:59:55 2020 +0200
Replace discard in figure-frag.
commit d83b4ae69be4912f69bf7835f509c68a1c7770a4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:45:57 2020 +0200
Fix sprite lighting, HDR from focus_pos.
commit 0594238004f116274905fa0ed7c2b6c417ed1d29
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:14:10 2020 +0200
Proper HDR from point lights.
commit 48c93d2b41ce5743103d18e76cc228f5ac766492
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 14:01:43 2020 +0200
Brighter ambiance, darker LOD shadows.
commit e0452e895ccfa8a43f368cae3b8b8aedc24dad93
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 13:13:23 2020 +0200
More proper HDR.
commit 4c6da3ed16cfeebb455e40da5f557b4af9a499d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 00:13:10 2020 +0200
Trying LOD noise.
commit 682a3d74c85df5503ffe1fc1cc891bce789df1ad
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 23:11:08 2020 +0200
Fix LOD heights in towns.
commit cc39e5734e8b18f9077bf42e66337c1319dd6b6e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 21:01:23 2020 +0200
More LOD fixes.
commit 8116b21c2e51c836e77894e309ac273caf2917b3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:54:43 2020 +0200
I like this coloring.
commit bc2560ea90b36f4b46190005344232d993043ac3
Merge: 14effdd5d e690efe71
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:48:33 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 14effdd5db8747fcf3eb34f03b46b7792e92d1c5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:24:35 2020 +0200
Re-saturate.
commit 48a643955d4435b78179acba0beb4a979905cc31
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:23:57 2020 +0200
Various fixes.
commit f7b497a0c25f4ad4682c71dd1ed6f608052feb9b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 03:22:49 2020 +0200
Render figures again.
commit 44e4aad48deba8266b9f8bdfd3db096b381f5327
Merge: e6f0a5a98 9ec319a18
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 02:01:04 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit e6f0a5a981a82533ba188fff0a54ce98577bb152
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 24 16:12:20 2020 +0200
Add atmospheric scattering.
commit f2953087f691a8edbc001cb98ebf5059fc6f8ac0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 23 00:01:20 2020 +0200
Fix shadowing for specular reflections.
commit ddd4a67a9799b8d08c7dc0c2bec90621c2bed0e3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Apr 22 22:56:12 2020 +0200
HDR fixes.
commit 1015e60deef3c447381996277df7496707a63bd0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 21 18:25:19 2020 +0200
More lighting changes.
commit 80c264abd111fb237e57843efcb5c071d4f84613
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 13 00:29:59 2020 +0200
Lighting experiments.
commit 8414987e589dd5102bad89762a3adaccc0bfe957
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 9 02:38:40 2020 +0200
WIP -- lighting changes and soft shadows.
commit 9cd2b3fb0d6b49776c6dfe463e4169637250b11a
Merge: c7ea687eb 8b149ad11
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:29 2020 +0200
Merge branch 'sharp/new-lighting' into sharp/small-fixes
commit c7ea687ebbc5aace1b455f134a5bf49ce2c7434a
Merge: 476441531 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:02 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 8b149ad11ad4bb75018fcf9519baec27d1c95951
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:32:39 2020 +0200
Trying out a new lighting model.
commit b0ac9f36f755dd06f7c17c46150568064790864f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 07:56:11 2020 +0200
Use bicubic interpolation for terrain.
commit f6fc9307a121514b614bc50ef8eb055953e7da8a
Merge: 33140a295 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 05:01:41 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 4764415312aae6e9ac2d00e86e84577cb958f1ab
Merge: ed2d0111d 13388ee6a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 04:54:48 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 13388ee6a42943f3f79a9cb488346cef18e272fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 20:30:08 2020 +0200
Various fixes (to coloring and to soft shadows).
commit fbd084a94a067082a87cd6d28b82054709bc9265
Merge: 5a089863b 4fdf6896a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 18:50:38 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/map-colors
commit ed2d0111d994262ae836d84d1fe5a45e4de72a0b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 06:49:27 2020 +0200
Combining colors and LOD.
commit 88342640c6b835114d01c797b89fdede3b0a2108
Merge: 33140a295 5a089863b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:49:20 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 33140a2951b8212725f42c758b277aaec4d888f7
Merge: 4c65a5aed f34d4b379
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:36:21 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 5a089863beb01d4794bbe3580ada47b278715ea2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 03:17:49 2020 +0200
Making maps brighter.
This is probably not the right way to do it, but oh well!
commit 32b2c99109dd486aa922886081068f9c550c83f2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 02:46:36 2020 +0200
Horizon mapping and "layered" map generation.
Horizon mapping is a method of shadow mapping specific to height maps.
It can handle any angle between 0 and 90 degrees from the ground, as
long as know the horizontal direction in advance, by remembering only a
single angle (the "horizon angle" of the shadow map). More is explained
in common/src/msg/server.rs. We also remember the approximate height of
the largest occluder, to try to be able to generate soft shadows and
create a vertical position where the shadows can't go higher.
Additionally, map generation has been reworked. Instead of computing
everything from explicit samples, we pass in sampling functions that
return exactly what the map generator needs. This allows us to cleanly
separate the way we sample things like altitudes and colors from the map
generation process. We exploit this to generate maps *partially* on the
server (with colors and rivers, but not shading). We can then send the
partially completed map to the client, which can combine it with shadow
information to generate the final map. This is useful for two reasons:
first, it makes sure the client can apply shadow information by itself,
and second, it lets us pass the unshaded map for use with level of
detail functionality.
For similar reasons, river generation is split
out into its own layer, but for now we opt to still generate rivers on
the server (since the river wire format is more complicated to compress
and may require some extra work to make sure we have enough precision to
draw rivers well enough for LoD).
Finally, the mostly ad-hoc lighting we were performing has been (mostly)
replaced with explicit Phong reflection shading (including specular
highlights). Regularizing this seems useful and helps clarify the
"meaning" of the various light intensities, and helps us keep a more
physically plausible basis. However, its interaction with soft shadows
is still imperfect, and it's not yet clear to me what we need to do to
turn this into something useful for LoD.
commit f8926a5737ddc51f3d585c651a64c43677aae0f4
Merge: a1aee931e 875ae6ced
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Mar 13 13:32:42 2020 +0100
Merge remote-tracking branch 'origin/master' into sharp/map-colors
commit 4c65a5aed353b119aea65a2aaeb94549b67beb42
Author: Treeco <5021038-Treeco@users.noreply.gitlab.com>
Date: Mon Feb 24 16:48:05 2020 +0000
Made LOD setting slider exponential
commit 2fa7b2d20d7233dc8bfd64f9f7f54617575248f1
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 17:49:53 2020 +0000
Added mist to LoD
commit aab059a450b5f635777129ff82cc15b662965c3c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 15:14:06 2020 +0000
Added LoD slider
commit 779c36b538121c5ade3633ae5cb67bb14c8c3877
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:54:55 2020 +0000
Reduced cost of vertex pushing
commit 9fea150473906b166365b738ebcea07c697daf3d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:38:53 2020 +0000
Fixed maths, improved LoD resolution
commit 5481df38fea5bf183ff376a3337179cfaa5233dc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 11:22:50 2020 +0000
Dynamically relocate LoD vertices to enhance details
commit a3e36a50ababd615da7db1b26158c7906a5def01
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 18:13:51 2020 +0000
Simpler terrain spiral rendering
commit 255f450ae9ac8763db4bede075fb409161ed57cc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:53:17 2020 +0000
Better LoD precision
commit 3d027aebe812a5b8658a4eb8123dc9f61b3776d2
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:04:03 2020 +0000
Better falloff
commit be775c9484b457b2c0b1a494aec03392d0c70e76
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 15:30:45 2020 +0000
Applied good ideas from experimental branch
commit 58587b68545a23c5c04ab4574a4b94b3bc982246
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 16:15:13 2020 +0000
Minor fixes to LoD merging
commit 7b42aebd709c14df2db766aad61d9280ad24d84d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 15:04:44 2020 +0000
Capped LoD dragging
commit 8aafc559f87124e1ea5ca6e3ddc2aa0c242d793c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:54:37 2020 +0000
Better blending between LoD and terrain border
commit edd3455d5161792d87ddc8eadc0ecbad5532b284
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:40:19 2020 +0000
Fixed LoD z depth, added sea level offset
commit b9b06744620114dd5556e73f64fa93c145503a7c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:27:43 2020 +0000
Better LoD smoothing
commit a1aee931e790431560cd2d953ad61d9497072afd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Feb 21 14:52:17 2020 +0100
Adding shadows.
commit 2400786c13dd891c131ed86d48d05df516a8a778
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 13:48:40 2020 +0000
Use world map as LoD source
commit dbf650f504a4c25fbbc2096ac3616c736bf52d23
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Jan 20 00:48:14 2020 +0000
Better clouds at distance
commit 5e6f81b86cdb9730b9b056877b19257075fd5fa8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Jan 19 23:59:02 2020 +0000
sync
commit 745e7540ddb000cc645f612767b337c2ddc3f7c0
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 12:40:48 2019 +0000
Improved cloud falloff mist, faster noise sampling
commit f6a200d0cb866196ba57697466755f9e0c7ea5d8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 10:09:00 2019 +0000
Improved long-range depth precision, removed unnecessary LoD polygons
commit 63d1b2bb2292898d59fb4f4e502201103dfeb86f
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 20:57:46 2019 +0000
Working LoD shader
commit f13d98ee3e58f881e8b978861a67663b59ed91ec
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 11:03:40 2019 +0000
LoD first attempt (stack overflow issue)
2020-08-20 18:34:59 +00:00
|
|
|
|
/// Base 2 logarithm of the map size.
|
|
|
|
|
map_size_lg: MapSizeLg,
|
2020-02-06 17:34:32 +00:00
|
|
|
|
/// Maximum height above sea level of any chunk in the map (not including
|
|
|
|
|
/// post-erosion warping, cliffs, and other things like that).
|
|
|
|
|
pub max_height: f32,
|
2019-06-06 14:52:29 +00:00
|
|
|
|
pub(crate) chunks: Vec<SimChunk>,
|
2019-06-25 15:59:09 +00:00
|
|
|
|
pub(crate) locations: Vec<Location>,
|
|
|
|
|
|
2019-06-06 14:52:29 +00:00
|
|
|
|
pub(crate) gen_ctx: GenCtx,
|
2019-07-30 14:10:59 +00:00
|
|
|
|
pub rng: ChaChaRng,
|
2019-05-18 08:59:58 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
impl WorldSim {
|
2020-06-23 06:52:04 +00:00
|
|
|
|
#[allow(clippy::unnested_or_patterns)] // TODO: Pending review in #587
|
2020-06-11 18:44:03 +00:00
|
|
|
|
|
2019-12-03 01:07:44 +00:00
|
|
|
|
pub fn generate(seed: u32, opts: WorldOpts) -> Self {
|
(See sharp/lod-history) LOD, shadows, greedy meshing, new lighting, perf
---
Pretty much a Veloren fork at this point. Here's a high level overview of the changes (will be added to CHANGELOG just before merge).
At a high level this MR incorporates roughly two groups of changes.
The first group consists of new game features: more flexible map sizes, level of detail terrain, shadow maps, and a new lighting
engine. This is "feature work" that (mostly) only adds new things to Veloren, and mostly shouldn't affect old stuff.
The second big group of changes are those addressing the fallout from all the new features. These include performance fixes of
various sorts: the addition of multiple graphics options and optimization of the cheap ones to avoid work, switching all voxel
models to use some variant of greedy meshing, switching over much of our CPU-side vector math to exploit SIMD instructions
(coinciding with a fork of `vek`), and a rewrite of how the UI handles text rendering (coinciding with updates to our fork
of `conrod`). Making Veloren's hardcoded colors appear correct under the new lighting engine also required considerably
changes (TODO: Fill in this section when it's complete).
The second category of changes often heavily touches code owned by other people, including frequently modified code "owned" by a
handful of people, so I recommend that this code be reviewed particularly carefully.
---
At a high level (each will be described in more detail below):
- The world map has been refactored.
- The world size is no longer hardcoded (@zesterer).
- The map generation code was made generic to allow using it outside of the `world` crate (@zesterer).
- On world creation, we now compute *horizon maps* (@zesterer).
- The way we pass the world from the server to the client has been updated (@xMAC94x).
- Artifacts related to image rotation were fixed (@imbris).
- Multiflow rivers were enabled (@zesterer).
- In the process of making changes related to the world map, various incidental fixes and optimizations were required.
- The new *level of detail* feature was added (@zesterer wrote part of this and has checked out the rest).
- A new LOD terrain rendering step was added to the pipeline.
- The LOD terrain quality was made configurable via a graphics setting.
- Horizon maps were used to cast shadows from LOD chunks on both LOD and non-LOD terrain.
- A "voxelization" effect was incorporated into rendered LOD terrain to make it blend better into the world.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Veloren's lighting has been completely overhauled (@zesterer has already checked most of this out).
- A semi-accurate index of refraction was assigned to our materials.
- A new, more realistic, physically based approach to lighting was used using the *Ashikhmin Shirley* BRDF.
- We emulate *atmospheric scattering* using equations designed for measuring solar panel light exposure.
- We attempt to compute *realistic light attenuation* in water using its real material properties.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Point and directional lights now cast realistic shadows, using *shadow mapping.* (@imbris, @zesterer, @Treeco, @YuriMomo)
- Point light shadow maps were added to the rendering pipeline, using geometry shaders and *seamless cube maps*.
- Directional light shadows were added to the rendering pipeline, using LISPSM together with disabling *depth clamping*.
- "Shadow-only" chunks and NPCs were added to prevent shadows from models behind you from disappearing.
- In the process of making changes related to shadow maps, various incidental fixes and optimizations were required.
The addition of shadow maps, LOD terrain, and the new lighting all led to significant performance degradation, on top of other
changes happening in master. Therefore, a large number of performance improvements were also needed:
- The graphics options were made much more flexible and configurable, and shaders were optimize.
- New options were provided for how to render lights and shadows (@Pfauenauge, @zesterer).
- Graphic setting storage and configuration were overhauled to make adding new features easier (@Pfauenauge, @imbris).
- Shaders were rewritten to utilize GLSL's preprocessor to avoid overhead (@zesterer, @YuriMomo).
- In the process of making changes related to providing additional rendering options, various incidental fixes and optimizations were required.
- Voxel model creation was switched to use *greedy meshing.*
- A new voxel meshing method, greedy meshing, was added (@imbris).
- Uses of the older meshing methods were migrated to use greedy meshing (@imbris, @jshipsey, @Pfauenauge).
- New restrictions were added to terrain, figure, and sprites to future proof them for further optimizations (@jshipsey, @Pfauenauge, @zesterer).
- Most positions are now relative to either chunk or player position for better precision (@imbris, @zesterer, @scottc).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- Animation and terrain math were switched to use SIMD where possible.
- Fixes were made to vek to make its SIMD feature usable for us (@zesterer, @imbris).
- The interface and types used in bone animation were changed in various ways (@jshipsey, @Snowram, @Pfauenauge).
- Redundant code generation for body animation is now partly taken care of by a macro (@jshipsey, @Snowram, @Pfauenauge).
- Animation code was modified to to use vek's SIMD representation where possible (@jshipsey, @Snowram, @Pfauenauge).
- Terrain meshing code and shadow map math were also modified to use vek's SIMD representation (@imbris).
- SIMD instruction generation was enabled (@YuriMomo, @jshipsey, @Snowram, @imbris, @Angelonfira, @xMAC94x).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- The way we cache glyphs was completely refactored, fixed, and optimized.
- Our fork of `conrod` was optimized in various ways (@imbris).
- Our fork of `conrod` now exposes whether a widget was updated during the current frame (@imbris).
- Our use of the glyph cache was rewritten for correctness (@imbris).
- A *text cache* was introduced that lets us skip remeshing glyphs that have not changed (@imbris).
- Various changes were made to reduce pressure on the glyph cache, with more planned (@imbris, @Pfauenauge).
- In the process of making changes related to the glyph cache, various incidental fixes and optimizations were required.
- Colors were changed to keep Veloren's look consistent with master.
- Some older tree models were brought back (@Pfauenauge).
- TODO(@Sharp): All hardcoded colors were extracted and made hotloadable.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Hardcoded colors were fixed to conform to Veloren's style.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Color models were fixed to conform to Veloren's style.
A detailed description of the involved changes follows.
---
- The world size is no longer hardcoded. All functions dependent on world size now take a `WorldSizeLg`, which holds the base 2 logarithm of each actual world dimension and is guaranteed to maintain certain properties (outlined in `common/src/terrain/map.rs`). Additionally, many utility functions that utilize the world size were moved into `common` as well (mostly `common/src/terrain/mod.rs`). Finally, the world map format was updated in order to store its size explicitly, with a migration path from the old format that should work whenever the old formatted map was a square (practically always). See `world/src/sim/mod.rs` for these changes.
- The map generation code was made generic to allow using it outside of the `world` crate. The parts of the map generating code that do not need to query the world were moved over to `common/src/terrain/map.rs`, allowing them to be used from the client without creating a dependency on `world`. The rest of it was turned into helper functions in `world/src/sim/map.rs`, which can be passed as closures to the generic map generation code to complete its construction. This also means that colors are now passed in separately to the map generation function. See <https://veloren.net/devblog-78/> for more details.
- On world creation, we now compute *horizon maps*. See the function in `world/src/sim/util.rs`.
Given a height map and a plane intersecting that height map, our horizon maps allow us to encode enough information to reconstruct shadows for each point on the height map using only the *horizon angle* (the angle at which the sun starts to become visible). As Veloren's sun only covers one plane, this is sufficient for encoding sun shadows for LOD terrain, by encoding two angles per chunk (one for each 90 degrees the sun covers). We can also use this for the moon, if we want, since the moon follows the same path. Additionally, we store the *height* of the furthest occluder, to try to make the shadows volumetric; so this means 4 bytes in total for each chunk.
Support for horizon maps has been merged into the map functionality in common as well.
- The way we pass the world from the server to the client has been updated. Rather than passing the prerendered map, we instead pass three maps with values for each chunk; one with the color information, a second with altitude information, and a third with horizon map information. We then reconstruct the map on the client, together with some additional information we send from the server (like the sea level and maximum height). See `common/src/msg/server.rs` for a detailed description of the format of `WorldMapMsg`, and `server/src/libr.rs` and `client/src/lib.rs` for details of the map construction and parsing.
- Artifacts related to image rotation were fixed. See the commit message for commit SHA `cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e` for a detailed explanation. This involved changes to shaders, the addition of a new type of graphic (also reflected in the graphic cache) that allows specifying a border color (which automatically makes the associated texture immutable), and some related fixes. I reproduce the first two paragraphs of the MR description as well:
```
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
```
- Multiflow rivers were enabled.
This does not really need to be part of this MR, and would be easy to revert, but since it seemed to provide a nice improvement it's currently packaged with it.
We already computed multiple outflows from each chunk for erosion purposes long before this MR.
However, we never modified river rendering to be able to handle this case (just a single downhill river flow is complex enough!) so this was not exposed when deciding which chunks were rivers.
Now that
- In the process of making changes related to the world map, various incidental fixes and optimizations were required. Some examples of fixes include making sure terrain is never lowered to below sea level (to make the shadow maps report correct values), fixing map altitudes and colors to understand things like cliffs and "block level" coloring (that doesn'te xist on the column level), and fixing a crashbug when rendering images for the UI where source pixels are strongly rectangular. Some examples of related performance fixes include avoiding allocating a fresh vector for all the maps (i.e. copying it over to change the format from `[u32; n]` to `DynamicImage` and then copying again to convert to `RgbaImage`), and instead using the `gfx::memory::slice` function to accomplish the same thing. These sorts of changes are spread all arond the code.
This includes the additon of a new scene, `voxygen/src/scene/lod.rs`, a new pipeline `voxygen/src/render/pipeline/lod_terrain.rs`, and new shaders `assets/vxygen/shaders/lod-terrain-vert.glsl` and `assets/vxygen/shaders/lod-terrain-frag.glsl`, as well as associated changes to the renderer in `voxygen/src/render/renderer.rs`.
The main idea behind our initial approach to LOD was to take the world data we now get from the server (altitude, color, and horizon mapping).
- Some previously computed values were turned into shader uniforms for better prediction on weak processors. (@zesterer)
- Calls to power or trig functions were removed or replaced with multiplications, where possible.
- After some deliberation
- To properly handle sprite "waving" for nearby sprites,
We explicitly designed the greedy meshing system with figures and sprites in mind.
In both cases, we want to be able to *efficiently* pack many different models into the same texture, especially in cases where we know
we will either not be removing any of the grouped-together from the models from the texture, or will remove all of them at once (so
they can be packed into some specific subtexture).
For sprites, since we know every model in advance and never intend to deallocate them, we currently pack them all as efficiently as
possible into one giant tetxure atlas. However, in the future we might opt to pack them slightly less efficiently in exchange for
shrinking the sprite vertex size.
For figures, we pack all the textures for each *model* into the same atlas.
is a global texture atlas used for every sprite, and for figures which is why we have the ability to mesh multiple
models to the same texture area (using the simple texture atlas allocator) without requiring intermediate vector allocations.
This is accomplished by delaying the time when we actually write the color and light data to the texture until *after* all the
model vertices have been meshed; then, we can just allocate the whole color/light array at once, making the atlas we use an
exact fit. In computer science-y terms, we accomplish this delay by, after we perform the initial greedy meshing (without
texture information), not continuing to create the texture data, but instead constructing a *continuation*--that is, a function
that, when called, will execute the rest of the computation. We push this continuation (which in Rust terms is a `FnOnce` closure
that takes the `ColLightsInfo` that it is supposed to write to as context) onto a
onto a vector
resizing. To allow for suspended writes to texture data, Rust pointed out to me that the continuation that would eventually write the color and light data to the texture atlas (the one that is shared by all models sharing the same greedy mesher) would have to *own* whatever data it mshed. Because we often generate the model data to mesh as a temporary in `voxygen/src/load.rs`, the
- Matrix multiplications in the shader were reduced for figure data (@zesterer).
- Vertex "waves" for fluid data were removed.
- Terrain "bending" near edges was removed.
- Scaling was fixed to make sure empty space was not introduced in a space previously occupied by a block. It was also changed to take ownership of its voxel data,
rather than sharing it, to let it be used with meshing.
- Rust's nightly version was bumped in order to use the `array_map` function, which lets us reuse more code between the simple map and `FigureModelCache`.
- PositionedGlyph::standalone.
---
I tried to cite sources in many cases[^realtime],[^lloyd],[^lispsm],[^pbrt],[^greedy],[^tjunctions]
where I needed features from elsewhere but I am particularly grateful for the following resources,
esepcially where they have accompanying source code. I linked all of them that are accessible to the public (those that are not were
obtained through legal means).
[^realtime]: Eisemann, Elmar, Michael Schwarz, Ulf Assarsson, Michael Wimmer. Real-Time Shadows. A K Peters/CRC Press (T&F), 20160419.
[^lloyd]: Lloyd,B. 2007. [Logarithmic perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). PhD thesis, University of North Carolina.
[^lispsm]: Wimmer, M., Scherzer, D., and Purgathofer, W. 2004. [Light space perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). In Proceedings of Eurographics Symposium on Rendering 2004, pp. 143– 152.
[^pbrt]: Pharr, Matt, et al. [http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf](Physically Based Rendering: From Theory to Implementation). Third edition, Morgan Kaufmann Publishers/Elsevier, 2017.
[^greedy]: mikolalysenko. “Meshing in a Minecraft Game.” 0 FPS, 30 June 2012, <https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/>.
[^tjunctions]: blackflux. “Meshing in Voxel Engines – Part 1.” Blackflux.Com, 23 Feb. 2014, <https://blackflux.wordpress.com/2014/02/23/meshing-in-voxel-engines-part-1/>.
I am also especially grateful to Khronos, Wikiepdia, and stackoverflow for answering many of my specific questions while writing the MR.
---
Squashed commit of the following:
commit 300505e7305a2fdac722a808ee8538323f215f39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 18:46:25 2020 +0200
Fixing cargo doc and typo in CHANGELOG.
commit ec0aeb18e8499d7d84ef818331b4b65c3d76cea6
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 15:38:50 2020 +0200
Hopefully final commit for the LOD branch.
commit 5e8ea0b1eaac02903a02feb2eb038d195de4872f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 10:14:26 2020 +0200
Falling back to power as stopgap.
commit e44a1cbf46504ee9931a01bdc9033e145500d557
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 09:25:41 2020 +0200
Address imbris feedback.
Temporarily disables shiny water, lowers max VD.
These restrictions will be lifted soon after merging.
commit 561e25778a108ac3712f5ec2ce3a51234c4430d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 08:31:13 2020 +0200
Tweaking shaders a bit.
commit 7d19259078ce0dd7b3742ad7d0cb3fab3ece3fdc
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:59:43 2020 +0200
Fix view example as well.
commit 051cd4934e0fad2c0b15db4380a4189fa318679f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:29:06 2020 +0200
Fix meshing benchmark.
commit c95e07db3b4dcca285678985e65e31b927cb1c61
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 05:46:22 2020 +0200
Address MR feedback, fix scene clouds.
commit 1bfb816cabdb3ffc1e507a009c2d98696b4b573a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:39:36 2020 +0200
Incorporating Pfau's figure color changes.
New eyes and new humanoid colors.
commit 3f9b89a3ac7b3356b1dba0d1a8f6541357f81469
Merge: e2f5162e4 62c53963a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:29:41 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit e2f5162e4f96f4124aa43488f7245d341b3dcfd4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:28:38 2020 +0200
World colors are all hotloadable.
They live in assets/world/style/colors.ron.
Only a small handful of hardcoed colors remain in World; they are either
part of the map, or difficult to disentangle from the rest of the
computation. Comments are made where appropriate.
commit 62c53963abe1975009d34a8f9515a355bef24f31
Author: Marcel Märtens <marcel.cochem@googlemail.com>
Date: Wed Aug 19 15:59:00 2020 +0200
replace pretty_env_logger with tracing
commit 5b1625f99d9586fe80e2232f583ec5af9f953099
Merge: d71003acd 4942b5b39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:15:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit d71003acdabeff970b3928e97c26af6847b5b78e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:14:34 2020 +0200
Hotloading colors, part 1: colors in common.
Currently, this just entails humanoid colors. There are only three
colors not handled; the light emitter colors in
common/src/comp/inventory/item/tool.rs. These don't seem important
enough to me to warrant making hotloadable, at least not right now, but
if it's needed later we can always add them to the file.
commit 63b5e0e553eb2ea49276f192a6fc7dd65254270d
Merge: c32b337a4 6d2c4b9c1
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 13:05:37 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c32b337a46e10d9de473d178a94a3ccd61c39bb3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:52:04 2020 +0200
Fixing LOD grid, for real.
commit a166ae0360395387e09fb35a1f84210c2ce5ec24
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:28:05 2020 +0200
Addressing imbris's initial feedback.
Fixes two minor bugs: explosion particles were no longer spawning
randomly, and LOD grids were not perfectly even.
commit 4cbad004f44060994252dd3d38647a14a589712f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:27:58 2020 +0200
Bumping nightly per request.
commit 548680276aac77c25d43d16b5622f847d474dbef
Merge: acc098604 8f8b20c91
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:26:06 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit acc0986040589a3492f88a740bc3c3fc693b26d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:28:32 2020 +0200
Lower resolution due to lying drivers.
commit d3b878de2a52c358d2944a6bbd0555dad7fbdb10
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:15:38 2020 +0200
Fix issues msh encountered with Intel 4600.
commit 10245e0c1b0cb6fae10d86409435364edc6102ef
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 21:15:02 2020 +0200
Merge more models into one mesh than we did previously.
commit 3155c31e663c52ae5c3a53d5fb5665892a1a498a
Merge: 7204cc8a7 3c199280e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:35:22 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7204cc8a7a4f74a30306bd205d9834fee4bb944f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:34:43 2020 +0200
Fix not yet done NPC animations.
This forces them all to be the idle animation if not specified.
This fixes issues where you'd have giant NPCs in water.
commit bc83360f2a08918f19d417b5f772e1ff554dba08
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 19:36:37 2020 +0200
Try to fix some bugs:
- Z fighting with LOD terrain and water.
- Audio SFX not playing.
commit 1fd104aa603bf3781b6526a5cada46aeca3049dd
Merge: 862df3c99 7c2c392a3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 12:02:31 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 862df3c9976c4da9bd7cfd784f1a85973127968a
Merge: 0a4218ed9 75c1d4401
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 05:52:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0a4218ed9d541a2b34c133351bea38a99ddf4ea7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 22:27:14 2020 +0200
Fix particle depth.
commit f51dfdeb442d0dd5243dd2f344fa4be295bd0875
Merge: c6251a956 5e6dc0471
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:19:04 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit c6251a956ad376400dca5c23420cf8d213dc8fdf
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:15:46 2020 +0200
Cache figures more intelligently.
Cache figures for longer, and don't cache character states for the
player except where they actually affect the rendered model.
commit 0ed801d5404982c6fb63b1eaa4567d908b294c9d
Merge: c11b9bdf0 eea64f78f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 16:32:24 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c11b9bdf0a53bf9884d2f5a48fec9b01d582df1a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 11:47:15 2020 +0200
Remove unneeded Clippy annotation.
commit 16aa9ef40af56d69289d00aafb3deadfb8bd4f35
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 8 00:53:02 2020 +0200
Fix hotloading and Clippy.
commit 3dc973e0be5b758da1e9805eb764ad401374cd0c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 23:50:27 2020 +0200
Major speedups with SIMD.
commit fba64a7d93d5a96077ce87287bbce6ab9b7fbcae
Merge: 76429d00e d1e10b178
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:19 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 76429d00eea00d212fbd672a84ee91e75b19b938
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:10 2020 +0200
Add clippy.toml.
commit c79f512f84dbb83cb82b7954db68ff241dfd8e41
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 11:55:20 2020 +0200
Fix all clippy issues, clean up Rust code.
commit 6f90e010b3fbefb53b0d632e819931350015b6b8
Merge: 77a8c7c26 5929cfa5c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:30 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 77a8c7c267d3f44a1a62bd6b2274359973c5e4d4
Merge: b44e44232 44febaabd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:10 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 5929cfa5c713aa392110bbb62407f76caf53c3df
Author: jshipsey <jshipsey18@gmail.com>
Date: Thu Aug 6 20:47:27 2020 -0400
fixed in-hand arrow bug
commit b44e442325d828f1cd564d66908f89d09e80474b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 6 13:40:35 2020 +0200
Miscellaneous performance improvements.
commit be37acf287c1360d8085862526ac3365ffd1d768
Merge: 125d7fc6c c11876547
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 05:49:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 125d7fc6c4dcd8c8c5f27b8268a4d64f409f3644
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 04:55:31 2020 +0200
Abstract over simd vs. repr_c vectors.
Also some minor improvements to Event size.
commit d4d4956e9252e1241ce110b2aa85076c6b1e2a23
Merge: 5f3b7294a aced5f979
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:56:54 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 5f3b7294af1f8533edc2620b58863c248e2b07af
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:43:52 2020 +0200
Fix formatting issues I missed before.
commit a428a3ebba70dcab63dd0f8cd983120c90617271
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:41:51 2020 +0200
Fix clippy warnings, part 1.
There aer still a bunch of type too complex and
function takes too many arguments warnings that I'll fix later
(or ignore, since in the one case I did fix a function takes too
many arguments warning I think it made the code *less* readable).
commit ba54307540ed8a937ac08209730284fc653af85b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 30 13:22:42 2020 +0200
Fix light animations so they are removed when the light turns off.
commit 7e0f4bcbf0f4717145d8beac40d52e3acebbe2aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 21:10:20 2020 +0200
Fix crash in edge case for pixel art.
commit 56da06f7a351e2b949e9b014a90b974d511a0924
Merge: cf74d55f2 9f53a4a19
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:56:52 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:29:52 2020 +0200
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
The first concern was addressed by fixing the dimensions of the map
images drawn from the UI (so that we always use a square source
rectangle, rather than a rectangular one according to the dimensions of
the map). We also fixed the way rotation was done in the fragment
shader for north-facing sources to make it properly handle aspect ratio
(this was already done for north-facing targets). Together, these fix
rendering issues peculiar to rectangular maps.
The second and third concerns were jointly addressed by adding an
optional border color to every 2D image drawn by the UI. This turns
out not to waste extra space even though we hold a full f32 color
(to avoid an extra dependency on gfx's PackedColor), since voxel
images already take up more space than Optiion<[f32; 4]> requires.
This is then implemented automatically using the "border color"
wrapping method in the attached sampler.
Since this is implemented in graphics hardware, it only works (at
least naively) if the actual image bounds match the texture bounds.
Therefore, we altered the way the graphics cache stores images
with a border color to guarantee that they are always in their own
texture, whose size exactly matches their extent. Since the easiest
currently exposed way to set a border color is to do so for an
immutable texture, we went a bit further and added a new "immutable"
texture storage type used for these cases; currently, it is always
and automatically used only when there is a specified border color,
but in theory there's no reason we couldn't provide immutable-only
images that use the default wrapping mdoe (though clamp to border
is admittedly not a great default).
To fix the maps case specifically, we set the border color to a
translucent version of the ocean border color. This may need
tweaking going forward, which shouldn't be hard.
As part of this process, we had to modify graphics replacement to
make sure immutable images are *removed* when invalidated, rather
than just having a validity flag unset (this is normally done by
the UI to try to reuse allocations in place if images are updated
in benign ways, since the texture atlases used for Ui do not
support deallocation; currently this is only used for item images,
so there should be no overlap with immutable image replacement,
so this was purely precautionary).
Since we were already touching the relevant code, we also updated
the image dependency to a newer version that provides more ways
to avoid allocations, and made a few other changes that should
hopefully eliminate redundant most of the intermediate buffer
allocations we were performing for what should be zero-cost
conversions. This may slightly improve performance in some
cases.
commit ad18ce939940a8c697270f6e9b94db9942fd8295
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 13:21:09 2020 +0200
Fix continent scale hack.
commit 36b1cb074f5b195aebd7dbbc3da7f0246a1a18ec
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 12:11:40 2020 +0200
Enable loading different sized maps without a recompile.
We may want to tweak the effects of the continent_scale_hack.
commit 13b6d4d534cc4814b7cb3294ca41bbfea0a6b186
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 10:55:48 2020 +0200
Removing WORLD_SIZE, part 1.
Erased almost every instance of WORLD_SIZE and replaced it with a local
power of two, map_size_lg (which respects certain invariants; see
common/src/terrain/map.rs for more details about MapSizeLg). This also
means we can avoid a dependency on the world crate from client, as
desired.
Now that the rest of the code is not expecting a fixed WORLD_SIZE, the
next step is to arrange for maps to store their world size, and to use
that world size as a basis prior to loading the map (as well, probably,
as prior to configuring some of the noise functions).
commit 30b1d2c6428230a9eaa0d749cdcbbd6f1cbccd78
Merge: 7d56ba31b 1377b369f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:58 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 7d56ba31b445441461b28a07fc495d7d4f047c17
Merge: 2101113b4 598f14b25
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 1377b369f6db2258e910d467a5740f31789e3ded
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sun Jul 19 23:25:38 2020 +0200
more saturated pumpkins
commit ae8d50527f93bb0616c2ad46ce4dacb63bc37c6d
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sat Jul 18 20:29:56 2020 +0200
acacia models
commit 2101113b467e691de787392d7f20f1745f5637bd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 18 18:55:25 2020 +0200
Higher detail LOD.
commit add2cfae04b4385fa5590e11e2bd5229d9dee0aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 16 01:57:39 2020 +0200
Revert some irrelevant stuff.
commit 2e2ab3dc1eaa59a4aef7f8d34a53d8aae4c8553a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 15 13:30:49 2020 +0200
Fixing various things about shadows.
* Correcting optimal LISPSM parameter.
* Figure shadows are cast when they're not visible.
* Chunk shadows stay cast until you look away.
* Seamless cubemaps for point lights.
* Etc.
commit 6c31e6b56217274285b597af297036691ea5d897
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 19:50:26 2020 +0200
Fix shadow creation.
commit 6332cbe006115ae205597529cd8bbccd146c2cca
Merge: be438657c 930e0028b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:47:00 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit be438657c33d7b5bfb0a9582c3ed3fd366637323
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:28:08 2020 +0200
Tweaks to shadows.
Added shadow map resolution configuration, added seamless cubemaps,
documented all existing rendering options, and fixed a few Clippy
errors.
commit 23b4058906013c7d2a40c286e20e32c5fbd897ed
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 10:11:19 2020 +0200
Fix moon, use nonlinear noise for terrain.
Note that the latter has a bit of performance cost.
commit 7fbe5cbfbb9dc29607957b8e62f432a4deed193d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:23:02 2020 +0200
Address lies about max texture size.
commit bcfc62b5e13a1cdd83f57535fde4694720bebfd9
Merge: 75e3626a7 18a08e8fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:22:08 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 75e3626a785919f43fdcf2127c2b10e3e4df2f9f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:21:52 2020 +0200
OpenGL 3.3 minimum.
commit 18a08e8fe2739f02af99a5d2cb4e7c38c49e858b
Author: Monty Marz <m.marzouq@gmx.de>
Date: Tue Jul 7 23:57:52 2020 +0200
settings localization
commit 90c5d1ca3620092bc3ae10b2211489eb1cf6f5e8
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 21:11:48 2020 +0200
Lower near distance.
commit 0e66f02b25aaddaa2dfddbbc89cd67de54a9a7b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 20:09:01 2020 +0200
All sprites sway in the wind now.
commit db1401a6910bf42dcf502462c90038752ff5fbdb
Merge: 69e508d8c e8b4b29d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 19:34:17 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 69e508d8c94d8973033817ca86f357e466fc7c4d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 18:41:37 2020 +0200
Make it easy to switch to SIMD for math.
commit ffe0f5928c7a7e87d00cb5426b3b1d831d7e02fd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 21:21:12 2020 +0200
Fix some issues with underwater rendering.
commit bfda6da42f38fd02c31ee92c81ab785a3e50c2a0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 19:17:59 2020 +0200
Fix some minor display issues.
commit 0ed752e087968cf901301884aaeae698e32ef8a5
Merge: ccc6a06a8 518edcb85
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:14:21 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit ccc6a06a8d4504d6b9f7af7905a414d2ee06ab76
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:04:34 2020 +0200
Some minor changes.
commit 4e020246702889269efe1a191788992164c508d6
Merge: 50a64d927 e05c9267a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 16:17:40 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 50a64d927e6c4f4b0e4688e4cbfca694bc3f922a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 13:07:03 2020 +0200
Fix far plane.
commit 7dd06da34cae8f9ea3b6c889fe965181f3fd3949
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:25:35 2020 +0200
Add shadows.glsl.
commit 618a18c998778bf871b905a74657440fcc384c80
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:10:22 2020 +0200
Adding shadows, greedy meshing, and more.
commit eaea83fe6a5cb1cb0ba8beef888183c718258496
Merge: 267018495 2f89b863e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 22:47:07 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 2670184954a13e4a9e7a4e35ba79aac0c5fac2f7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 21:20:01 2020 +0200
Make civsim and sites deterministic.
For anything in worldgen where you use a HashMap, *please* think
carefully about which hasher you are going to use! This is
especially true if (for some reason) you are depending on hashmap
iteration order remaining stable for some aspect of worldgen.
commit f8376fd5dc72b4a9c2f51a6b4570d59c8b8e9343
Merge: 654f7e049 cdee191dd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 17:53:57 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 654f7e049258d9da27c09608bbe6a46ffa8787e5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed May 20 21:22:30 2020 +0200
Correct backface culling.
commit 560501df05ca725409b0f2e4eb31bdfdc15fd0c7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue May 19 17:22:06 2020 +0200
Greedy messhing for shadows.
commit a4d87e1875ca543436e6bbbeb20348facc5a52d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun May 17 05:59:00 2020 +0200
Shadow maps work for lantern.
commit 243d0837b8a3b08172c9a3c348d964d7ddc2a0a8
Merge: 04382dc28 71dd520cd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:53:13 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 04382dc28632b6c66e8821f6870c0daaa1c1901a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:22:17 2020 +0200
WIP: better graphics config, better LOD, shadow maps.
commit 22ddbad3eb32bfa70f0932176022208fe67ded81
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 18:54:09 2020 +0200
Minor shader fixes.
commit 746a10e8d01ac235f994b0cde78fa48998602a1f
Merge: 0f4a0e763 40ab94673
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 04:02:09 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0f4a0e763db3afbdc4fb0558611f38326ca87151
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 23:03:24 2020 +0200
Switch back to pop-in terrain.
commit dd74fa7e4a53667b38811d7aec58d7f6a68889bb
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 22:58:55 2020 +0200
LOD shading closer to voxel shading.
commit ef67bd58ba0bdaf622b078892d768263b6cba268
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 28 20:49:03 2020 +0200
Experimental underwater lighting.
commit 2c5ad9d07605e80d5fd5679dd3a5d70c605b86a9
Merge: 748279835 303967a6f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 22:35:24 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7482798354eda18c8207950080fc24d443a369de
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 21:59:55 2020 +0200
Replace discard in figure-frag.
commit d83b4ae69be4912f69bf7835f509c68a1c7770a4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:45:57 2020 +0200
Fix sprite lighting, HDR from focus_pos.
commit 0594238004f116274905fa0ed7c2b6c417ed1d29
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:14:10 2020 +0200
Proper HDR from point lights.
commit 48c93d2b41ce5743103d18e76cc228f5ac766492
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 14:01:43 2020 +0200
Brighter ambiance, darker LOD shadows.
commit e0452e895ccfa8a43f368cae3b8b8aedc24dad93
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 13:13:23 2020 +0200
More proper HDR.
commit 4c6da3ed16cfeebb455e40da5f557b4af9a499d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 00:13:10 2020 +0200
Trying LOD noise.
commit 682a3d74c85df5503ffe1fc1cc891bce789df1ad
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 23:11:08 2020 +0200
Fix LOD heights in towns.
commit cc39e5734e8b18f9077bf42e66337c1319dd6b6e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 21:01:23 2020 +0200
More LOD fixes.
commit 8116b21c2e51c836e77894e309ac273caf2917b3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:54:43 2020 +0200
I like this coloring.
commit bc2560ea90b36f4b46190005344232d993043ac3
Merge: 14effdd5d e690efe71
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:48:33 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 14effdd5db8747fcf3eb34f03b46b7792e92d1c5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:24:35 2020 +0200
Re-saturate.
commit 48a643955d4435b78179acba0beb4a979905cc31
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:23:57 2020 +0200
Various fixes.
commit f7b497a0c25f4ad4682c71dd1ed6f608052feb9b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 03:22:49 2020 +0200
Render figures again.
commit 44e4aad48deba8266b9f8bdfd3db096b381f5327
Merge: e6f0a5a98 9ec319a18
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 02:01:04 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit e6f0a5a981a82533ba188fff0a54ce98577bb152
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 24 16:12:20 2020 +0200
Add atmospheric scattering.
commit f2953087f691a8edbc001cb98ebf5059fc6f8ac0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 23 00:01:20 2020 +0200
Fix shadowing for specular reflections.
commit ddd4a67a9799b8d08c7dc0c2bec90621c2bed0e3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Apr 22 22:56:12 2020 +0200
HDR fixes.
commit 1015e60deef3c447381996277df7496707a63bd0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 21 18:25:19 2020 +0200
More lighting changes.
commit 80c264abd111fb237e57843efcb5c071d4f84613
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 13 00:29:59 2020 +0200
Lighting experiments.
commit 8414987e589dd5102bad89762a3adaccc0bfe957
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 9 02:38:40 2020 +0200
WIP -- lighting changes and soft shadows.
commit 9cd2b3fb0d6b49776c6dfe463e4169637250b11a
Merge: c7ea687eb 8b149ad11
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:29 2020 +0200
Merge branch 'sharp/new-lighting' into sharp/small-fixes
commit c7ea687ebbc5aace1b455f134a5bf49ce2c7434a
Merge: 476441531 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:02 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 8b149ad11ad4bb75018fcf9519baec27d1c95951
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:32:39 2020 +0200
Trying out a new lighting model.
commit b0ac9f36f755dd06f7c17c46150568064790864f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 07:56:11 2020 +0200
Use bicubic interpolation for terrain.
commit f6fc9307a121514b614bc50ef8eb055953e7da8a
Merge: 33140a295 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 05:01:41 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 4764415312aae6e9ac2d00e86e84577cb958f1ab
Merge: ed2d0111d 13388ee6a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 04:54:48 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 13388ee6a42943f3f79a9cb488346cef18e272fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 20:30:08 2020 +0200
Various fixes (to coloring and to soft shadows).
commit fbd084a94a067082a87cd6d28b82054709bc9265
Merge: 5a089863b 4fdf6896a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 18:50:38 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/map-colors
commit ed2d0111d994262ae836d84d1fe5a45e4de72a0b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 06:49:27 2020 +0200
Combining colors and LOD.
commit 88342640c6b835114d01c797b89fdede3b0a2108
Merge: 33140a295 5a089863b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:49:20 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 33140a2951b8212725f42c758b277aaec4d888f7
Merge: 4c65a5aed f34d4b379
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:36:21 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 5a089863beb01d4794bbe3580ada47b278715ea2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 03:17:49 2020 +0200
Making maps brighter.
This is probably not the right way to do it, but oh well!
commit 32b2c99109dd486aa922886081068f9c550c83f2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 02:46:36 2020 +0200
Horizon mapping and "layered" map generation.
Horizon mapping is a method of shadow mapping specific to height maps.
It can handle any angle between 0 and 90 degrees from the ground, as
long as know the horizontal direction in advance, by remembering only a
single angle (the "horizon angle" of the shadow map). More is explained
in common/src/msg/server.rs. We also remember the approximate height of
the largest occluder, to try to be able to generate soft shadows and
create a vertical position where the shadows can't go higher.
Additionally, map generation has been reworked. Instead of computing
everything from explicit samples, we pass in sampling functions that
return exactly what the map generator needs. This allows us to cleanly
separate the way we sample things like altitudes and colors from the map
generation process. We exploit this to generate maps *partially* on the
server (with colors and rivers, but not shading). We can then send the
partially completed map to the client, which can combine it with shadow
information to generate the final map. This is useful for two reasons:
first, it makes sure the client can apply shadow information by itself,
and second, it lets us pass the unshaded map for use with level of
detail functionality.
For similar reasons, river generation is split
out into its own layer, but for now we opt to still generate rivers on
the server (since the river wire format is more complicated to compress
and may require some extra work to make sure we have enough precision to
draw rivers well enough for LoD).
Finally, the mostly ad-hoc lighting we were performing has been (mostly)
replaced with explicit Phong reflection shading (including specular
highlights). Regularizing this seems useful and helps clarify the
"meaning" of the various light intensities, and helps us keep a more
physically plausible basis. However, its interaction with soft shadows
is still imperfect, and it's not yet clear to me what we need to do to
turn this into something useful for LoD.
commit f8926a5737ddc51f3d585c651a64c43677aae0f4
Merge: a1aee931e 875ae6ced
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Mar 13 13:32:42 2020 +0100
Merge remote-tracking branch 'origin/master' into sharp/map-colors
commit 4c65a5aed353b119aea65a2aaeb94549b67beb42
Author: Treeco <5021038-Treeco@users.noreply.gitlab.com>
Date: Mon Feb 24 16:48:05 2020 +0000
Made LOD setting slider exponential
commit 2fa7b2d20d7233dc8bfd64f9f7f54617575248f1
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 17:49:53 2020 +0000
Added mist to LoD
commit aab059a450b5f635777129ff82cc15b662965c3c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 15:14:06 2020 +0000
Added LoD slider
commit 779c36b538121c5ade3633ae5cb67bb14c8c3877
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:54:55 2020 +0000
Reduced cost of vertex pushing
commit 9fea150473906b166365b738ebcea07c697daf3d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:38:53 2020 +0000
Fixed maths, improved LoD resolution
commit 5481df38fea5bf183ff376a3337179cfaa5233dc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 11:22:50 2020 +0000
Dynamically relocate LoD vertices to enhance details
commit a3e36a50ababd615da7db1b26158c7906a5def01
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 18:13:51 2020 +0000
Simpler terrain spiral rendering
commit 255f450ae9ac8763db4bede075fb409161ed57cc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:53:17 2020 +0000
Better LoD precision
commit 3d027aebe812a5b8658a4eb8123dc9f61b3776d2
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:04:03 2020 +0000
Better falloff
commit be775c9484b457b2c0b1a494aec03392d0c70e76
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 15:30:45 2020 +0000
Applied good ideas from experimental branch
commit 58587b68545a23c5c04ab4574a4b94b3bc982246
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 16:15:13 2020 +0000
Minor fixes to LoD merging
commit 7b42aebd709c14df2db766aad61d9280ad24d84d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 15:04:44 2020 +0000
Capped LoD dragging
commit 8aafc559f87124e1ea5ca6e3ddc2aa0c242d793c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:54:37 2020 +0000
Better blending between LoD and terrain border
commit edd3455d5161792d87ddc8eadc0ecbad5532b284
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:40:19 2020 +0000
Fixed LoD z depth, added sea level offset
commit b9b06744620114dd5556e73f64fa93c145503a7c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:27:43 2020 +0000
Better LoD smoothing
commit a1aee931e790431560cd2d953ad61d9497072afd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Feb 21 14:52:17 2020 +0100
Adding shadows.
commit 2400786c13dd891c131ed86d48d05df516a8a778
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 13:48:40 2020 +0000
Use world map as LoD source
commit dbf650f504a4c25fbbc2096ac3616c736bf52d23
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Jan 20 00:48:14 2020 +0000
Better clouds at distance
commit 5e6f81b86cdb9730b9b056877b19257075fd5fa8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Jan 19 23:59:02 2020 +0000
sync
commit 745e7540ddb000cc645f612767b337c2ddc3f7c0
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 12:40:48 2019 +0000
Improved cloud falloff mist, faster noise sampling
commit f6a200d0cb866196ba57697466755f9e0c7ea5d8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 10:09:00 2019 +0000
Improved long-range depth precision, removed unnecessary LoD polygons
commit 63d1b2bb2292898d59fb4f4e502201103dfeb86f
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 20:57:46 2019 +0000
Working LoD shader
commit f13d98ee3e58f881e8b978861a67663b59ed91ec
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 11:03:40 2019 +0000
LoD first attempt (stack overflow issue)
2020-08-20 18:34:59 +00:00
|
|
|
|
// Parse out the contents of various map formats into the values we need.
|
|
|
|
|
let parsed_world_file = (|| {
|
|
|
|
|
let map = match opts.world_file {
|
|
|
|
|
FileOpts::LoadLegacy(ref path) => {
|
|
|
|
|
let file = match File::open(path) {
|
|
|
|
|
Ok(file) => file,
|
|
|
|
|
Err(e) => {
|
|
|
|
|
warn!(?e, ?path, "Couldn't read path for maps");
|
|
|
|
|
return None;
|
|
|
|
|
},
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
let reader = BufReader::new(file);
|
|
|
|
|
let map: WorldFileLegacy = match bincode::deserialize_from(reader) {
|
|
|
|
|
Ok(map) => map,
|
|
|
|
|
Err(e) => {
|
|
|
|
|
warn!(
|
|
|
|
|
?e,
|
|
|
|
|
"Couldn't parse legacy map. Maybe you meant to try a regular \
|
|
|
|
|
load?"
|
|
|
|
|
);
|
|
|
|
|
return None;
|
|
|
|
|
},
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
map.into_modern()
|
|
|
|
|
},
|
|
|
|
|
FileOpts::Load(ref path) => {
|
|
|
|
|
let file = match File::open(path) {
|
|
|
|
|
Ok(file) => file,
|
|
|
|
|
Err(e) => {
|
|
|
|
|
warn!(?e, ?path, "Couldn't read path for maps");
|
|
|
|
|
return None;
|
|
|
|
|
},
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
let reader = BufReader::new(file);
|
|
|
|
|
let map: WorldFile = match bincode::deserialize_from(reader) {
|
|
|
|
|
Ok(map) => map,
|
|
|
|
|
Err(e) => {
|
|
|
|
|
warn!(
|
|
|
|
|
?e,
|
|
|
|
|
"Couldn't parse modern map. Maybe you meant to try a legacy load?"
|
|
|
|
|
);
|
|
|
|
|
return None;
|
|
|
|
|
},
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
map.into_modern()
|
|
|
|
|
},
|
|
|
|
|
FileOpts::LoadAsset(ref specifier) => {
|
|
|
|
|
let reader = match assets::load_file(specifier, &["bin"]) {
|
|
|
|
|
Ok(reader) => reader,
|
|
|
|
|
Err(e) => {
|
|
|
|
|
warn!(?e, ?specifier, "Couldn't read asset specifier for maps",);
|
|
|
|
|
return None;
|
|
|
|
|
},
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
let map: WorldFile = match bincode::deserialize_from(reader) {
|
|
|
|
|
Ok(map) => map,
|
|
|
|
|
Err(e) => {
|
|
|
|
|
warn!(
|
|
|
|
|
?e,
|
|
|
|
|
"Couldn't parse modern map. Maybe you meant to try a legacy load?"
|
|
|
|
|
);
|
|
|
|
|
return None;
|
|
|
|
|
},
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
map.into_modern()
|
|
|
|
|
},
|
|
|
|
|
FileOpts::Generate | FileOpts::Save => return None,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
match map {
|
|
|
|
|
Ok(map) => Some(map),
|
|
|
|
|
Err(e) => {
|
|
|
|
|
match e {
|
|
|
|
|
WorldFileError::WorldSizeInvalid => {
|
|
|
|
|
warn!("World size of map is invalid.");
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
None
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
})();
|
|
|
|
|
|
|
|
|
|
// NOTE: Change 1.0 to 4.0 for a 4x
|
|
|
|
|
// improvement in world detail. We also use this to automatically adjust
|
|
|
|
|
// grid_scale (multiplying by 4.0) and multiply mins_per_sec by
|
|
|
|
|
// 1.0 / (4.0 * 4.0) in ./erosion.rs, in order to get a similar rate of river
|
2020-02-01 20:39:39 +00:00
|
|
|
|
// formation.
|
(See sharp/lod-history) LOD, shadows, greedy meshing, new lighting, perf
---
Pretty much a Veloren fork at this point. Here's a high level overview of the changes (will be added to CHANGELOG just before merge).
At a high level this MR incorporates roughly two groups of changes.
The first group consists of new game features: more flexible map sizes, level of detail terrain, shadow maps, and a new lighting
engine. This is "feature work" that (mostly) only adds new things to Veloren, and mostly shouldn't affect old stuff.
The second big group of changes are those addressing the fallout from all the new features. These include performance fixes of
various sorts: the addition of multiple graphics options and optimization of the cheap ones to avoid work, switching all voxel
models to use some variant of greedy meshing, switching over much of our CPU-side vector math to exploit SIMD instructions
(coinciding with a fork of `vek`), and a rewrite of how the UI handles text rendering (coinciding with updates to our fork
of `conrod`). Making Veloren's hardcoded colors appear correct under the new lighting engine also required considerably
changes (TODO: Fill in this section when it's complete).
The second category of changes often heavily touches code owned by other people, including frequently modified code "owned" by a
handful of people, so I recommend that this code be reviewed particularly carefully.
---
At a high level (each will be described in more detail below):
- The world map has been refactored.
- The world size is no longer hardcoded (@zesterer).
- The map generation code was made generic to allow using it outside of the `world` crate (@zesterer).
- On world creation, we now compute *horizon maps* (@zesterer).
- The way we pass the world from the server to the client has been updated (@xMAC94x).
- Artifacts related to image rotation were fixed (@imbris).
- Multiflow rivers were enabled (@zesterer).
- In the process of making changes related to the world map, various incidental fixes and optimizations were required.
- The new *level of detail* feature was added (@zesterer wrote part of this and has checked out the rest).
- A new LOD terrain rendering step was added to the pipeline.
- The LOD terrain quality was made configurable via a graphics setting.
- Horizon maps were used to cast shadows from LOD chunks on both LOD and non-LOD terrain.
- A "voxelization" effect was incorporated into rendered LOD terrain to make it blend better into the world.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Veloren's lighting has been completely overhauled (@zesterer has already checked most of this out).
- A semi-accurate index of refraction was assigned to our materials.
- A new, more realistic, physically based approach to lighting was used using the *Ashikhmin Shirley* BRDF.
- We emulate *atmospheric scattering* using equations designed for measuring solar panel light exposure.
- We attempt to compute *realistic light attenuation* in water using its real material properties.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Point and directional lights now cast realistic shadows, using *shadow mapping.* (@imbris, @zesterer, @Treeco, @YuriMomo)
- Point light shadow maps were added to the rendering pipeline, using geometry shaders and *seamless cube maps*.
- Directional light shadows were added to the rendering pipeline, using LISPSM together with disabling *depth clamping*.
- "Shadow-only" chunks and NPCs were added to prevent shadows from models behind you from disappearing.
- In the process of making changes related to shadow maps, various incidental fixes and optimizations were required.
The addition of shadow maps, LOD terrain, and the new lighting all led to significant performance degradation, on top of other
changes happening in master. Therefore, a large number of performance improvements were also needed:
- The graphics options were made much more flexible and configurable, and shaders were optimize.
- New options were provided for how to render lights and shadows (@Pfauenauge, @zesterer).
- Graphic setting storage and configuration were overhauled to make adding new features easier (@Pfauenauge, @imbris).
- Shaders were rewritten to utilize GLSL's preprocessor to avoid overhead (@zesterer, @YuriMomo).
- In the process of making changes related to providing additional rendering options, various incidental fixes and optimizations were required.
- Voxel model creation was switched to use *greedy meshing.*
- A new voxel meshing method, greedy meshing, was added (@imbris).
- Uses of the older meshing methods were migrated to use greedy meshing (@imbris, @jshipsey, @Pfauenauge).
- New restrictions were added to terrain, figure, and sprites to future proof them for further optimizations (@jshipsey, @Pfauenauge, @zesterer).
- Most positions are now relative to either chunk or player position for better precision (@imbris, @zesterer, @scottc).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- Animation and terrain math were switched to use SIMD where possible.
- Fixes were made to vek to make its SIMD feature usable for us (@zesterer, @imbris).
- The interface and types used in bone animation were changed in various ways (@jshipsey, @Snowram, @Pfauenauge).
- Redundant code generation for body animation is now partly taken care of by a macro (@jshipsey, @Snowram, @Pfauenauge).
- Animation code was modified to to use vek's SIMD representation where possible (@jshipsey, @Snowram, @Pfauenauge).
- Terrain meshing code and shadow map math were also modified to use vek's SIMD representation (@imbris).
- SIMD instruction generation was enabled (@YuriMomo, @jshipsey, @Snowram, @imbris, @Angelonfira, @xMAC94x).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- The way we cache glyphs was completely refactored, fixed, and optimized.
- Our fork of `conrod` was optimized in various ways (@imbris).
- Our fork of `conrod` now exposes whether a widget was updated during the current frame (@imbris).
- Our use of the glyph cache was rewritten for correctness (@imbris).
- A *text cache* was introduced that lets us skip remeshing glyphs that have not changed (@imbris).
- Various changes were made to reduce pressure on the glyph cache, with more planned (@imbris, @Pfauenauge).
- In the process of making changes related to the glyph cache, various incidental fixes and optimizations were required.
- Colors were changed to keep Veloren's look consistent with master.
- Some older tree models were brought back (@Pfauenauge).
- TODO(@Sharp): All hardcoded colors were extracted and made hotloadable.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Hardcoded colors were fixed to conform to Veloren's style.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Color models were fixed to conform to Veloren's style.
A detailed description of the involved changes follows.
---
- The world size is no longer hardcoded. All functions dependent on world size now take a `WorldSizeLg`, which holds the base 2 logarithm of each actual world dimension and is guaranteed to maintain certain properties (outlined in `common/src/terrain/map.rs`). Additionally, many utility functions that utilize the world size were moved into `common` as well (mostly `common/src/terrain/mod.rs`). Finally, the world map format was updated in order to store its size explicitly, with a migration path from the old format that should work whenever the old formatted map was a square (practically always). See `world/src/sim/mod.rs` for these changes.
- The map generation code was made generic to allow using it outside of the `world` crate. The parts of the map generating code that do not need to query the world were moved over to `common/src/terrain/map.rs`, allowing them to be used from the client without creating a dependency on `world`. The rest of it was turned into helper functions in `world/src/sim/map.rs`, which can be passed as closures to the generic map generation code to complete its construction. This also means that colors are now passed in separately to the map generation function. See <https://veloren.net/devblog-78/> for more details.
- On world creation, we now compute *horizon maps*. See the function in `world/src/sim/util.rs`.
Given a height map and a plane intersecting that height map, our horizon maps allow us to encode enough information to reconstruct shadows for each point on the height map using only the *horizon angle* (the angle at which the sun starts to become visible). As Veloren's sun only covers one plane, this is sufficient for encoding sun shadows for LOD terrain, by encoding two angles per chunk (one for each 90 degrees the sun covers). We can also use this for the moon, if we want, since the moon follows the same path. Additionally, we store the *height* of the furthest occluder, to try to make the shadows volumetric; so this means 4 bytes in total for each chunk.
Support for horizon maps has been merged into the map functionality in common as well.
- The way we pass the world from the server to the client has been updated. Rather than passing the prerendered map, we instead pass three maps with values for each chunk; one with the color information, a second with altitude information, and a third with horizon map information. We then reconstruct the map on the client, together with some additional information we send from the server (like the sea level and maximum height). See `common/src/msg/server.rs` for a detailed description of the format of `WorldMapMsg`, and `server/src/libr.rs` and `client/src/lib.rs` for details of the map construction and parsing.
- Artifacts related to image rotation were fixed. See the commit message for commit SHA `cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e` for a detailed explanation. This involved changes to shaders, the addition of a new type of graphic (also reflected in the graphic cache) that allows specifying a border color (which automatically makes the associated texture immutable), and some related fixes. I reproduce the first two paragraphs of the MR description as well:
```
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
```
- Multiflow rivers were enabled.
This does not really need to be part of this MR, and would be easy to revert, but since it seemed to provide a nice improvement it's currently packaged with it.
We already computed multiple outflows from each chunk for erosion purposes long before this MR.
However, we never modified river rendering to be able to handle this case (just a single downhill river flow is complex enough!) so this was not exposed when deciding which chunks were rivers.
Now that
- In the process of making changes related to the world map, various incidental fixes and optimizations were required. Some examples of fixes include making sure terrain is never lowered to below sea level (to make the shadow maps report correct values), fixing map altitudes and colors to understand things like cliffs and "block level" coloring (that doesn'te xist on the column level), and fixing a crashbug when rendering images for the UI where source pixels are strongly rectangular. Some examples of related performance fixes include avoiding allocating a fresh vector for all the maps (i.e. copying it over to change the format from `[u32; n]` to `DynamicImage` and then copying again to convert to `RgbaImage`), and instead using the `gfx::memory::slice` function to accomplish the same thing. These sorts of changes are spread all arond the code.
This includes the additon of a new scene, `voxygen/src/scene/lod.rs`, a new pipeline `voxygen/src/render/pipeline/lod_terrain.rs`, and new shaders `assets/vxygen/shaders/lod-terrain-vert.glsl` and `assets/vxygen/shaders/lod-terrain-frag.glsl`, as well as associated changes to the renderer in `voxygen/src/render/renderer.rs`.
The main idea behind our initial approach to LOD was to take the world data we now get from the server (altitude, color, and horizon mapping).
- Some previously computed values were turned into shader uniforms for better prediction on weak processors. (@zesterer)
- Calls to power or trig functions were removed or replaced with multiplications, where possible.
- After some deliberation
- To properly handle sprite "waving" for nearby sprites,
We explicitly designed the greedy meshing system with figures and sprites in mind.
In both cases, we want to be able to *efficiently* pack many different models into the same texture, especially in cases where we know
we will either not be removing any of the grouped-together from the models from the texture, or will remove all of them at once (so
they can be packed into some specific subtexture).
For sprites, since we know every model in advance and never intend to deallocate them, we currently pack them all as efficiently as
possible into one giant tetxure atlas. However, in the future we might opt to pack them slightly less efficiently in exchange for
shrinking the sprite vertex size.
For figures, we pack all the textures for each *model* into the same atlas.
is a global texture atlas used for every sprite, and for figures which is why we have the ability to mesh multiple
models to the same texture area (using the simple texture atlas allocator) without requiring intermediate vector allocations.
This is accomplished by delaying the time when we actually write the color and light data to the texture until *after* all the
model vertices have been meshed; then, we can just allocate the whole color/light array at once, making the atlas we use an
exact fit. In computer science-y terms, we accomplish this delay by, after we perform the initial greedy meshing (without
texture information), not continuing to create the texture data, but instead constructing a *continuation*--that is, a function
that, when called, will execute the rest of the computation. We push this continuation (which in Rust terms is a `FnOnce` closure
that takes the `ColLightsInfo` that it is supposed to write to as context) onto a
onto a vector
resizing. To allow for suspended writes to texture data, Rust pointed out to me that the continuation that would eventually write the color and light data to the texture atlas (the one that is shared by all models sharing the same greedy mesher) would have to *own* whatever data it mshed. Because we often generate the model data to mesh as a temporary in `voxygen/src/load.rs`, the
- Matrix multiplications in the shader were reduced for figure data (@zesterer).
- Vertex "waves" for fluid data were removed.
- Terrain "bending" near edges was removed.
- Scaling was fixed to make sure empty space was not introduced in a space previously occupied by a block. It was also changed to take ownership of its voxel data,
rather than sharing it, to let it be used with meshing.
- Rust's nightly version was bumped in order to use the `array_map` function, which lets us reuse more code between the simple map and `FigureModelCache`.
- PositionedGlyph::standalone.
---
I tried to cite sources in many cases[^realtime],[^lloyd],[^lispsm],[^pbrt],[^greedy],[^tjunctions]
where I needed features from elsewhere but I am particularly grateful for the following resources,
esepcially where they have accompanying source code. I linked all of them that are accessible to the public (those that are not were
obtained through legal means).
[^realtime]: Eisemann, Elmar, Michael Schwarz, Ulf Assarsson, Michael Wimmer. Real-Time Shadows. A K Peters/CRC Press (T&F), 20160419.
[^lloyd]: Lloyd,B. 2007. [Logarithmic perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). PhD thesis, University of North Carolina.
[^lispsm]: Wimmer, M., Scherzer, D., and Purgathofer, W. 2004. [Light space perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). In Proceedings of Eurographics Symposium on Rendering 2004, pp. 143– 152.
[^pbrt]: Pharr, Matt, et al. [http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf](Physically Based Rendering: From Theory to Implementation). Third edition, Morgan Kaufmann Publishers/Elsevier, 2017.
[^greedy]: mikolalysenko. “Meshing in a Minecraft Game.” 0 FPS, 30 June 2012, <https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/>.
[^tjunctions]: blackflux. “Meshing in Voxel Engines – Part 1.” Blackflux.Com, 23 Feb. 2014, <https://blackflux.wordpress.com/2014/02/23/meshing-in-voxel-engines-part-1/>.
I am also especially grateful to Khronos, Wikiepdia, and stackoverflow for answering many of my specific questions while writing the MR.
---
Squashed commit of the following:
commit 300505e7305a2fdac722a808ee8538323f215f39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 18:46:25 2020 +0200
Fixing cargo doc and typo in CHANGELOG.
commit ec0aeb18e8499d7d84ef818331b4b65c3d76cea6
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 15:38:50 2020 +0200
Hopefully final commit for the LOD branch.
commit 5e8ea0b1eaac02903a02feb2eb038d195de4872f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 10:14:26 2020 +0200
Falling back to power as stopgap.
commit e44a1cbf46504ee9931a01bdc9033e145500d557
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 09:25:41 2020 +0200
Address imbris feedback.
Temporarily disables shiny water, lowers max VD.
These restrictions will be lifted soon after merging.
commit 561e25778a108ac3712f5ec2ce3a51234c4430d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 08:31:13 2020 +0200
Tweaking shaders a bit.
commit 7d19259078ce0dd7b3742ad7d0cb3fab3ece3fdc
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:59:43 2020 +0200
Fix view example as well.
commit 051cd4934e0fad2c0b15db4380a4189fa318679f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:29:06 2020 +0200
Fix meshing benchmark.
commit c95e07db3b4dcca285678985e65e31b927cb1c61
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 05:46:22 2020 +0200
Address MR feedback, fix scene clouds.
commit 1bfb816cabdb3ffc1e507a009c2d98696b4b573a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:39:36 2020 +0200
Incorporating Pfau's figure color changes.
New eyes and new humanoid colors.
commit 3f9b89a3ac7b3356b1dba0d1a8f6541357f81469
Merge: e2f5162e4 62c53963a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:29:41 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit e2f5162e4f96f4124aa43488f7245d341b3dcfd4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:28:38 2020 +0200
World colors are all hotloadable.
They live in assets/world/style/colors.ron.
Only a small handful of hardcoed colors remain in World; they are either
part of the map, or difficult to disentangle from the rest of the
computation. Comments are made where appropriate.
commit 62c53963abe1975009d34a8f9515a355bef24f31
Author: Marcel Märtens <marcel.cochem@googlemail.com>
Date: Wed Aug 19 15:59:00 2020 +0200
replace pretty_env_logger with tracing
commit 5b1625f99d9586fe80e2232f583ec5af9f953099
Merge: d71003acd 4942b5b39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:15:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit d71003acdabeff970b3928e97c26af6847b5b78e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:14:34 2020 +0200
Hotloading colors, part 1: colors in common.
Currently, this just entails humanoid colors. There are only three
colors not handled; the light emitter colors in
common/src/comp/inventory/item/tool.rs. These don't seem important
enough to me to warrant making hotloadable, at least not right now, but
if it's needed later we can always add them to the file.
commit 63b5e0e553eb2ea49276f192a6fc7dd65254270d
Merge: c32b337a4 6d2c4b9c1
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 13:05:37 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c32b337a46e10d9de473d178a94a3ccd61c39bb3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:52:04 2020 +0200
Fixing LOD grid, for real.
commit a166ae0360395387e09fb35a1f84210c2ce5ec24
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:28:05 2020 +0200
Addressing imbris's initial feedback.
Fixes two minor bugs: explosion particles were no longer spawning
randomly, and LOD grids were not perfectly even.
commit 4cbad004f44060994252dd3d38647a14a589712f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:27:58 2020 +0200
Bumping nightly per request.
commit 548680276aac77c25d43d16b5622f847d474dbef
Merge: acc098604 8f8b20c91
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:26:06 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit acc0986040589a3492f88a740bc3c3fc693b26d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:28:32 2020 +0200
Lower resolution due to lying drivers.
commit d3b878de2a52c358d2944a6bbd0555dad7fbdb10
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:15:38 2020 +0200
Fix issues msh encountered with Intel 4600.
commit 10245e0c1b0cb6fae10d86409435364edc6102ef
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 21:15:02 2020 +0200
Merge more models into one mesh than we did previously.
commit 3155c31e663c52ae5c3a53d5fb5665892a1a498a
Merge: 7204cc8a7 3c199280e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:35:22 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7204cc8a7a4f74a30306bd205d9834fee4bb944f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:34:43 2020 +0200
Fix not yet done NPC animations.
This forces them all to be the idle animation if not specified.
This fixes issues where you'd have giant NPCs in water.
commit bc83360f2a08918f19d417b5f772e1ff554dba08
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 19:36:37 2020 +0200
Try to fix some bugs:
- Z fighting with LOD terrain and water.
- Audio SFX not playing.
commit 1fd104aa603bf3781b6526a5cada46aeca3049dd
Merge: 862df3c99 7c2c392a3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 12:02:31 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 862df3c9976c4da9bd7cfd784f1a85973127968a
Merge: 0a4218ed9 75c1d4401
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 05:52:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0a4218ed9d541a2b34c133351bea38a99ddf4ea7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 22:27:14 2020 +0200
Fix particle depth.
commit f51dfdeb442d0dd5243dd2f344fa4be295bd0875
Merge: c6251a956 5e6dc0471
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:19:04 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit c6251a956ad376400dca5c23420cf8d213dc8fdf
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:15:46 2020 +0200
Cache figures more intelligently.
Cache figures for longer, and don't cache character states for the
player except where they actually affect the rendered model.
commit 0ed801d5404982c6fb63b1eaa4567d908b294c9d
Merge: c11b9bdf0 eea64f78f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 16:32:24 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c11b9bdf0a53bf9884d2f5a48fec9b01d582df1a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 11:47:15 2020 +0200
Remove unneeded Clippy annotation.
commit 16aa9ef40af56d69289d00aafb3deadfb8bd4f35
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 8 00:53:02 2020 +0200
Fix hotloading and Clippy.
commit 3dc973e0be5b758da1e9805eb764ad401374cd0c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 23:50:27 2020 +0200
Major speedups with SIMD.
commit fba64a7d93d5a96077ce87287bbce6ab9b7fbcae
Merge: 76429d00e d1e10b178
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:19 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 76429d00eea00d212fbd672a84ee91e75b19b938
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:10 2020 +0200
Add clippy.toml.
commit c79f512f84dbb83cb82b7954db68ff241dfd8e41
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 11:55:20 2020 +0200
Fix all clippy issues, clean up Rust code.
commit 6f90e010b3fbefb53b0d632e819931350015b6b8
Merge: 77a8c7c26 5929cfa5c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:30 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 77a8c7c267d3f44a1a62bd6b2274359973c5e4d4
Merge: b44e44232 44febaabd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:10 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 5929cfa5c713aa392110bbb62407f76caf53c3df
Author: jshipsey <jshipsey18@gmail.com>
Date: Thu Aug 6 20:47:27 2020 -0400
fixed in-hand arrow bug
commit b44e442325d828f1cd564d66908f89d09e80474b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 6 13:40:35 2020 +0200
Miscellaneous performance improvements.
commit be37acf287c1360d8085862526ac3365ffd1d768
Merge: 125d7fc6c c11876547
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 05:49:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 125d7fc6c4dcd8c8c5f27b8268a4d64f409f3644
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 04:55:31 2020 +0200
Abstract over simd vs. repr_c vectors.
Also some minor improvements to Event size.
commit d4d4956e9252e1241ce110b2aa85076c6b1e2a23
Merge: 5f3b7294a aced5f979
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:56:54 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 5f3b7294af1f8533edc2620b58863c248e2b07af
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:43:52 2020 +0200
Fix formatting issues I missed before.
commit a428a3ebba70dcab63dd0f8cd983120c90617271
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:41:51 2020 +0200
Fix clippy warnings, part 1.
There aer still a bunch of type too complex and
function takes too many arguments warnings that I'll fix later
(or ignore, since in the one case I did fix a function takes too
many arguments warning I think it made the code *less* readable).
commit ba54307540ed8a937ac08209730284fc653af85b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 30 13:22:42 2020 +0200
Fix light animations so they are removed when the light turns off.
commit 7e0f4bcbf0f4717145d8beac40d52e3acebbe2aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 21:10:20 2020 +0200
Fix crash in edge case for pixel art.
commit 56da06f7a351e2b949e9b014a90b974d511a0924
Merge: cf74d55f2 9f53a4a19
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:56:52 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:29:52 2020 +0200
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
The first concern was addressed by fixing the dimensions of the map
images drawn from the UI (so that we always use a square source
rectangle, rather than a rectangular one according to the dimensions of
the map). We also fixed the way rotation was done in the fragment
shader for north-facing sources to make it properly handle aspect ratio
(this was already done for north-facing targets). Together, these fix
rendering issues peculiar to rectangular maps.
The second and third concerns were jointly addressed by adding an
optional border color to every 2D image drawn by the UI. This turns
out not to waste extra space even though we hold a full f32 color
(to avoid an extra dependency on gfx's PackedColor), since voxel
images already take up more space than Optiion<[f32; 4]> requires.
This is then implemented automatically using the "border color"
wrapping method in the attached sampler.
Since this is implemented in graphics hardware, it only works (at
least naively) if the actual image bounds match the texture bounds.
Therefore, we altered the way the graphics cache stores images
with a border color to guarantee that they are always in their own
texture, whose size exactly matches their extent. Since the easiest
currently exposed way to set a border color is to do so for an
immutable texture, we went a bit further and added a new "immutable"
texture storage type used for these cases; currently, it is always
and automatically used only when there is a specified border color,
but in theory there's no reason we couldn't provide immutable-only
images that use the default wrapping mdoe (though clamp to border
is admittedly not a great default).
To fix the maps case specifically, we set the border color to a
translucent version of the ocean border color. This may need
tweaking going forward, which shouldn't be hard.
As part of this process, we had to modify graphics replacement to
make sure immutable images are *removed* when invalidated, rather
than just having a validity flag unset (this is normally done by
the UI to try to reuse allocations in place if images are updated
in benign ways, since the texture atlases used for Ui do not
support deallocation; currently this is only used for item images,
so there should be no overlap with immutable image replacement,
so this was purely precautionary).
Since we were already touching the relevant code, we also updated
the image dependency to a newer version that provides more ways
to avoid allocations, and made a few other changes that should
hopefully eliminate redundant most of the intermediate buffer
allocations we were performing for what should be zero-cost
conversions. This may slightly improve performance in some
cases.
commit ad18ce939940a8c697270f6e9b94db9942fd8295
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 13:21:09 2020 +0200
Fix continent scale hack.
commit 36b1cb074f5b195aebd7dbbc3da7f0246a1a18ec
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 12:11:40 2020 +0200
Enable loading different sized maps without a recompile.
We may want to tweak the effects of the continent_scale_hack.
commit 13b6d4d534cc4814b7cb3294ca41bbfea0a6b186
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 10:55:48 2020 +0200
Removing WORLD_SIZE, part 1.
Erased almost every instance of WORLD_SIZE and replaced it with a local
power of two, map_size_lg (which respects certain invariants; see
common/src/terrain/map.rs for more details about MapSizeLg). This also
means we can avoid a dependency on the world crate from client, as
desired.
Now that the rest of the code is not expecting a fixed WORLD_SIZE, the
next step is to arrange for maps to store their world size, and to use
that world size as a basis prior to loading the map (as well, probably,
as prior to configuring some of the noise functions).
commit 30b1d2c6428230a9eaa0d749cdcbbd6f1cbccd78
Merge: 7d56ba31b 1377b369f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:58 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 7d56ba31b445441461b28a07fc495d7d4f047c17
Merge: 2101113b4 598f14b25
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 1377b369f6db2258e910d467a5740f31789e3ded
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sun Jul 19 23:25:38 2020 +0200
more saturated pumpkins
commit ae8d50527f93bb0616c2ad46ce4dacb63bc37c6d
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sat Jul 18 20:29:56 2020 +0200
acacia models
commit 2101113b467e691de787392d7f20f1745f5637bd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 18 18:55:25 2020 +0200
Higher detail LOD.
commit add2cfae04b4385fa5590e11e2bd5229d9dee0aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 16 01:57:39 2020 +0200
Revert some irrelevant stuff.
commit 2e2ab3dc1eaa59a4aef7f8d34a53d8aae4c8553a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 15 13:30:49 2020 +0200
Fixing various things about shadows.
* Correcting optimal LISPSM parameter.
* Figure shadows are cast when they're not visible.
* Chunk shadows stay cast until you look away.
* Seamless cubemaps for point lights.
* Etc.
commit 6c31e6b56217274285b597af297036691ea5d897
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 19:50:26 2020 +0200
Fix shadow creation.
commit 6332cbe006115ae205597529cd8bbccd146c2cca
Merge: be438657c 930e0028b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:47:00 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit be438657c33d7b5bfb0a9582c3ed3fd366637323
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:28:08 2020 +0200
Tweaks to shadows.
Added shadow map resolution configuration, added seamless cubemaps,
documented all existing rendering options, and fixed a few Clippy
errors.
commit 23b4058906013c7d2a40c286e20e32c5fbd897ed
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 10:11:19 2020 +0200
Fix moon, use nonlinear noise for terrain.
Note that the latter has a bit of performance cost.
commit 7fbe5cbfbb9dc29607957b8e62f432a4deed193d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:23:02 2020 +0200
Address lies about max texture size.
commit bcfc62b5e13a1cdd83f57535fde4694720bebfd9
Merge: 75e3626a7 18a08e8fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:22:08 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 75e3626a785919f43fdcf2127c2b10e3e4df2f9f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:21:52 2020 +0200
OpenGL 3.3 minimum.
commit 18a08e8fe2739f02af99a5d2cb4e7c38c49e858b
Author: Monty Marz <m.marzouq@gmx.de>
Date: Tue Jul 7 23:57:52 2020 +0200
settings localization
commit 90c5d1ca3620092bc3ae10b2211489eb1cf6f5e8
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 21:11:48 2020 +0200
Lower near distance.
commit 0e66f02b25aaddaa2dfddbbc89cd67de54a9a7b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 20:09:01 2020 +0200
All sprites sway in the wind now.
commit db1401a6910bf42dcf502462c90038752ff5fbdb
Merge: 69e508d8c e8b4b29d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 19:34:17 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 69e508d8c94d8973033817ca86f357e466fc7c4d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 18:41:37 2020 +0200
Make it easy to switch to SIMD for math.
commit ffe0f5928c7a7e87d00cb5426b3b1d831d7e02fd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 21:21:12 2020 +0200
Fix some issues with underwater rendering.
commit bfda6da42f38fd02c31ee92c81ab785a3e50c2a0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 19:17:59 2020 +0200
Fix some minor display issues.
commit 0ed752e087968cf901301884aaeae698e32ef8a5
Merge: ccc6a06a8 518edcb85
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:14:21 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit ccc6a06a8d4504d6b9f7af7905a414d2ee06ab76
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:04:34 2020 +0200
Some minor changes.
commit 4e020246702889269efe1a191788992164c508d6
Merge: 50a64d927 e05c9267a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 16:17:40 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 50a64d927e6c4f4b0e4688e4cbfca694bc3f922a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 13:07:03 2020 +0200
Fix far plane.
commit 7dd06da34cae8f9ea3b6c889fe965181f3fd3949
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:25:35 2020 +0200
Add shadows.glsl.
commit 618a18c998778bf871b905a74657440fcc384c80
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:10:22 2020 +0200
Adding shadows, greedy meshing, and more.
commit eaea83fe6a5cb1cb0ba8beef888183c718258496
Merge: 267018495 2f89b863e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 22:47:07 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 2670184954a13e4a9e7a4e35ba79aac0c5fac2f7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 21:20:01 2020 +0200
Make civsim and sites deterministic.
For anything in worldgen where you use a HashMap, *please* think
carefully about which hasher you are going to use! This is
especially true if (for some reason) you are depending on hashmap
iteration order remaining stable for some aspect of worldgen.
commit f8376fd5dc72b4a9c2f51a6b4570d59c8b8e9343
Merge: 654f7e049 cdee191dd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 17:53:57 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 654f7e049258d9da27c09608bbe6a46ffa8787e5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed May 20 21:22:30 2020 +0200
Correct backface culling.
commit 560501df05ca725409b0f2e4eb31bdfdc15fd0c7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue May 19 17:22:06 2020 +0200
Greedy messhing for shadows.
commit a4d87e1875ca543436e6bbbeb20348facc5a52d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun May 17 05:59:00 2020 +0200
Shadow maps work for lantern.
commit 243d0837b8a3b08172c9a3c348d964d7ddc2a0a8
Merge: 04382dc28 71dd520cd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:53:13 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 04382dc28632b6c66e8821f6870c0daaa1c1901a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:22:17 2020 +0200
WIP: better graphics config, better LOD, shadow maps.
commit 22ddbad3eb32bfa70f0932176022208fe67ded81
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 18:54:09 2020 +0200
Minor shader fixes.
commit 746a10e8d01ac235f994b0cde78fa48998602a1f
Merge: 0f4a0e763 40ab94673
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 04:02:09 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0f4a0e763db3afbdc4fb0558611f38326ca87151
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 23:03:24 2020 +0200
Switch back to pop-in terrain.
commit dd74fa7e4a53667b38811d7aec58d7f6a68889bb
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 22:58:55 2020 +0200
LOD shading closer to voxel shading.
commit ef67bd58ba0bdaf622b078892d768263b6cba268
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 28 20:49:03 2020 +0200
Experimental underwater lighting.
commit 2c5ad9d07605e80d5fd5679dd3a5d70c605b86a9
Merge: 748279835 303967a6f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 22:35:24 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7482798354eda18c8207950080fc24d443a369de
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 21:59:55 2020 +0200
Replace discard in figure-frag.
commit d83b4ae69be4912f69bf7835f509c68a1c7770a4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:45:57 2020 +0200
Fix sprite lighting, HDR from focus_pos.
commit 0594238004f116274905fa0ed7c2b6c417ed1d29
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:14:10 2020 +0200
Proper HDR from point lights.
commit 48c93d2b41ce5743103d18e76cc228f5ac766492
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 14:01:43 2020 +0200
Brighter ambiance, darker LOD shadows.
commit e0452e895ccfa8a43f368cae3b8b8aedc24dad93
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 13:13:23 2020 +0200
More proper HDR.
commit 4c6da3ed16cfeebb455e40da5f557b4af9a499d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 00:13:10 2020 +0200
Trying LOD noise.
commit 682a3d74c85df5503ffe1fc1cc891bce789df1ad
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 23:11:08 2020 +0200
Fix LOD heights in towns.
commit cc39e5734e8b18f9077bf42e66337c1319dd6b6e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 21:01:23 2020 +0200
More LOD fixes.
commit 8116b21c2e51c836e77894e309ac273caf2917b3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:54:43 2020 +0200
I like this coloring.
commit bc2560ea90b36f4b46190005344232d993043ac3
Merge: 14effdd5d e690efe71
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:48:33 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 14effdd5db8747fcf3eb34f03b46b7792e92d1c5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:24:35 2020 +0200
Re-saturate.
commit 48a643955d4435b78179acba0beb4a979905cc31
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:23:57 2020 +0200
Various fixes.
commit f7b497a0c25f4ad4682c71dd1ed6f608052feb9b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 03:22:49 2020 +0200
Render figures again.
commit 44e4aad48deba8266b9f8bdfd3db096b381f5327
Merge: e6f0a5a98 9ec319a18
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 02:01:04 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit e6f0a5a981a82533ba188fff0a54ce98577bb152
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 24 16:12:20 2020 +0200
Add atmospheric scattering.
commit f2953087f691a8edbc001cb98ebf5059fc6f8ac0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 23 00:01:20 2020 +0200
Fix shadowing for specular reflections.
commit ddd4a67a9799b8d08c7dc0c2bec90621c2bed0e3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Apr 22 22:56:12 2020 +0200
HDR fixes.
commit 1015e60deef3c447381996277df7496707a63bd0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 21 18:25:19 2020 +0200
More lighting changes.
commit 80c264abd111fb237e57843efcb5c071d4f84613
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 13 00:29:59 2020 +0200
Lighting experiments.
commit 8414987e589dd5102bad89762a3adaccc0bfe957
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 9 02:38:40 2020 +0200
WIP -- lighting changes and soft shadows.
commit 9cd2b3fb0d6b49776c6dfe463e4169637250b11a
Merge: c7ea687eb 8b149ad11
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:29 2020 +0200
Merge branch 'sharp/new-lighting' into sharp/small-fixes
commit c7ea687ebbc5aace1b455f134a5bf49ce2c7434a
Merge: 476441531 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:02 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 8b149ad11ad4bb75018fcf9519baec27d1c95951
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:32:39 2020 +0200
Trying out a new lighting model.
commit b0ac9f36f755dd06f7c17c46150568064790864f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 07:56:11 2020 +0200
Use bicubic interpolation for terrain.
commit f6fc9307a121514b614bc50ef8eb055953e7da8a
Merge: 33140a295 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 05:01:41 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 4764415312aae6e9ac2d00e86e84577cb958f1ab
Merge: ed2d0111d 13388ee6a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 04:54:48 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 13388ee6a42943f3f79a9cb488346cef18e272fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 20:30:08 2020 +0200
Various fixes (to coloring and to soft shadows).
commit fbd084a94a067082a87cd6d28b82054709bc9265
Merge: 5a089863b 4fdf6896a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 18:50:38 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/map-colors
commit ed2d0111d994262ae836d84d1fe5a45e4de72a0b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 06:49:27 2020 +0200
Combining colors and LOD.
commit 88342640c6b835114d01c797b89fdede3b0a2108
Merge: 33140a295 5a089863b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:49:20 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 33140a2951b8212725f42c758b277aaec4d888f7
Merge: 4c65a5aed f34d4b379
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:36:21 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 5a089863beb01d4794bbe3580ada47b278715ea2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 03:17:49 2020 +0200
Making maps brighter.
This is probably not the right way to do it, but oh well!
commit 32b2c99109dd486aa922886081068f9c550c83f2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 02:46:36 2020 +0200
Horizon mapping and "layered" map generation.
Horizon mapping is a method of shadow mapping specific to height maps.
It can handle any angle between 0 and 90 degrees from the ground, as
long as know the horizontal direction in advance, by remembering only a
single angle (the "horizon angle" of the shadow map). More is explained
in common/src/msg/server.rs. We also remember the approximate height of
the largest occluder, to try to be able to generate soft shadows and
create a vertical position where the shadows can't go higher.
Additionally, map generation has been reworked. Instead of computing
everything from explicit samples, we pass in sampling functions that
return exactly what the map generator needs. This allows us to cleanly
separate the way we sample things like altitudes and colors from the map
generation process. We exploit this to generate maps *partially* on the
server (with colors and rivers, but not shading). We can then send the
partially completed map to the client, which can combine it with shadow
information to generate the final map. This is useful for two reasons:
first, it makes sure the client can apply shadow information by itself,
and second, it lets us pass the unshaded map for use with level of
detail functionality.
For similar reasons, river generation is split
out into its own layer, but for now we opt to still generate rivers on
the server (since the river wire format is more complicated to compress
and may require some extra work to make sure we have enough precision to
draw rivers well enough for LoD).
Finally, the mostly ad-hoc lighting we were performing has been (mostly)
replaced with explicit Phong reflection shading (including specular
highlights). Regularizing this seems useful and helps clarify the
"meaning" of the various light intensities, and helps us keep a more
physically plausible basis. However, its interaction with soft shadows
is still imperfect, and it's not yet clear to me what we need to do to
turn this into something useful for LoD.
commit f8926a5737ddc51f3d585c651a64c43677aae0f4
Merge: a1aee931e 875ae6ced
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Mar 13 13:32:42 2020 +0100
Merge remote-tracking branch 'origin/master' into sharp/map-colors
commit 4c65a5aed353b119aea65a2aaeb94549b67beb42
Author: Treeco <5021038-Treeco@users.noreply.gitlab.com>
Date: Mon Feb 24 16:48:05 2020 +0000
Made LOD setting slider exponential
commit 2fa7b2d20d7233dc8bfd64f9f7f54617575248f1
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 17:49:53 2020 +0000
Added mist to LoD
commit aab059a450b5f635777129ff82cc15b662965c3c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 15:14:06 2020 +0000
Added LoD slider
commit 779c36b538121c5ade3633ae5cb67bb14c8c3877
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:54:55 2020 +0000
Reduced cost of vertex pushing
commit 9fea150473906b166365b738ebcea07c697daf3d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:38:53 2020 +0000
Fixed maths, improved LoD resolution
commit 5481df38fea5bf183ff376a3337179cfaa5233dc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 11:22:50 2020 +0000
Dynamically relocate LoD vertices to enhance details
commit a3e36a50ababd615da7db1b26158c7906a5def01
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 18:13:51 2020 +0000
Simpler terrain spiral rendering
commit 255f450ae9ac8763db4bede075fb409161ed57cc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:53:17 2020 +0000
Better LoD precision
commit 3d027aebe812a5b8658a4eb8123dc9f61b3776d2
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:04:03 2020 +0000
Better falloff
commit be775c9484b457b2c0b1a494aec03392d0c70e76
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 15:30:45 2020 +0000
Applied good ideas from experimental branch
commit 58587b68545a23c5c04ab4574a4b94b3bc982246
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 16:15:13 2020 +0000
Minor fixes to LoD merging
commit 7b42aebd709c14df2db766aad61d9280ad24d84d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 15:04:44 2020 +0000
Capped LoD dragging
commit 8aafc559f87124e1ea5ca6e3ddc2aa0c242d793c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:54:37 2020 +0000
Better blending between LoD and terrain border
commit edd3455d5161792d87ddc8eadc0ecbad5532b284
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:40:19 2020 +0000
Fixed LoD z depth, added sea level offset
commit b9b06744620114dd5556e73f64fa93c145503a7c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:27:43 2020 +0000
Better LoD smoothing
commit a1aee931e790431560cd2d953ad61d9497072afd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Feb 21 14:52:17 2020 +0100
Adding shadows.
commit 2400786c13dd891c131ed86d48d05df516a8a778
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 13:48:40 2020 +0000
Use world map as LoD source
commit dbf650f504a4c25fbbc2096ac3616c736bf52d23
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Jan 20 00:48:14 2020 +0000
Better clouds at distance
commit 5e6f81b86cdb9730b9b056877b19257075fd5fa8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Jan 19 23:59:02 2020 +0000
sync
commit 745e7540ddb000cc645f612767b337c2ddc3f7c0
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 12:40:48 2019 +0000
Improved cloud falloff mist, faster noise sampling
commit f6a200d0cb866196ba57697466755f9e0c7ea5d8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 10:09:00 2019 +0000
Improved long-range depth precision, removed unnecessary LoD polygons
commit 63d1b2bb2292898d59fb4f4e502201103dfeb86f
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 20:57:46 2019 +0000
Working LoD shader
commit f13d98ee3e58f881e8b978861a67663b59ed91ec
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 11:03:40 2019 +0000
LoD first attempt (stack overflow issue)
2020-08-20 18:34:59 +00:00
|
|
|
|
//
|
|
|
|
|
// FIXME: This is a hack! At some point we will hae a more principled way of
|
|
|
|
|
// dealing with this.
|
|
|
|
|
let continent_scale_hack = 1.0/*4.0*/;
|
|
|
|
|
let (parsed_world_file, map_size_lg) = parsed_world_file
|
|
|
|
|
.and_then(|map| match MapSizeLg::new(map.map_size_lg) {
|
|
|
|
|
Ok(map_size_lg) => Some((Some(map), map_size_lg)),
|
|
|
|
|
Err(e) => {
|
|
|
|
|
warn!("World size of map does not satisfy invariants: {:?}", e);
|
|
|
|
|
None
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
.unwrap_or((None, DEFAULT_WORLD_CHUNKS_LG));
|
|
|
|
|
let continent_scale_hack = if let Some(map) = &parsed_world_file {
|
|
|
|
|
map.continent_scale_hack
|
|
|
|
|
} else {
|
|
|
|
|
continent_scale_hack
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
let mut rng = ChaChaRng::from_seed(seed_expan::rng_state(seed));
|
|
|
|
|
let continent_scale = continent_scale_hack
|
2020-01-22 14:31:10 +00:00
|
|
|
|
* 5_000.0f64
|
2020-01-22 09:41:10 +00:00
|
|
|
|
.div(32.0)
|
|
|
|
|
.mul(TerrainChunkSize::RECT_SIZE.x as f64);
|
2020-01-22 14:31:10 +00:00
|
|
|
|
let rock_lacunarity = 2.0;
|
|
|
|
|
let uplift_scale = 128.0;
|
|
|
|
|
let uplift_turb_scale = uplift_scale / 4.0;
|
2019-08-11 11:35:04 +00:00
|
|
|
|
|
2020-01-16 21:42:51 +00:00
|
|
|
|
// NOTE: Changing order will significantly change WorldGen, so try not to!
|
2019-10-16 11:39:41 +00:00
|
|
|
|
let gen_ctx = GenCtx {
|
2019-09-17 14:05:08 +00:00
|
|
|
|
turb_x_nz: SuperSimplex::new().set_seed(rng.gen()),
|
|
|
|
|
turb_y_nz: SuperSimplex::new().set_seed(rng.gen()),
|
2019-11-11 17:14:58 +00:00
|
|
|
|
chaos_nz: RidgedMulti::new()
|
2020-01-22 14:31:10 +00:00
|
|
|
|
.set_octaves(7)
|
|
|
|
|
.set_frequency(RidgedMulti::DEFAULT_FREQUENCY * (5_000.0 / continent_scale))
|
2019-11-11 17:14:58 +00:00
|
|
|
|
.set_seed(rng.gen()),
|
2019-09-17 14:05:08 +00:00
|
|
|
|
hill_nz: SuperSimplex::new().set_seed(rng.gen()),
|
2020-01-24 02:45:29 +00:00
|
|
|
|
alt_nz: util::HybridMulti::new()
|
2020-01-22 14:31:10 +00:00
|
|
|
|
.set_octaves(8)
|
|
|
|
|
.set_frequency((10_000.0 / continent_scale) as f64)
|
2019-11-19 18:34:52 +00:00
|
|
|
|
// persistence = lacunarity^(-(1.0 - fractal increment))
|
2020-01-24 02:45:29 +00:00
|
|
|
|
.set_lacunarity(util::HybridMulti::DEFAULT_LACUNARITY)
|
|
|
|
|
.set_persistence(util::HybridMulti::DEFAULT_LACUNARITY.powf(-(1.0 - 0.0)))
|
2020-01-22 14:31:10 +00:00
|
|
|
|
.set_offset(0.0)
|
2019-09-17 14:05:08 +00:00
|
|
|
|
.set_seed(rng.gen()),
|
2019-11-11 17:14:58 +00:00
|
|
|
|
temp_nz: Fbm::new()
|
|
|
|
|
.set_octaves(6)
|
|
|
|
|
.set_persistence(0.5)
|
2020-01-22 14:31:10 +00:00
|
|
|
|
.set_frequency(1.0 / (((1 << 6) * 64) as f64))
|
2019-11-11 17:14:58 +00:00
|
|
|
|
.set_lacunarity(2.0)
|
|
|
|
|
.set_seed(rng.gen()),
|
2019-11-06 11:19:50 +00:00
|
|
|
|
|
2019-11-07 20:25:30 +00:00
|
|
|
|
small_nz: BasicMulti::new().set_octaves(2).set_seed(rng.gen()),
|
2019-09-17 14:05:08 +00:00
|
|
|
|
rock_nz: HybridMulti::new().set_persistence(0.3).set_seed(rng.gen()),
|
2019-11-07 20:25:30 +00:00
|
|
|
|
cliff_nz: HybridMulti::new().set_persistence(0.3).set_seed(rng.gen()),
|
2020-01-22 14:31:10 +00:00
|
|
|
|
warp_nz: FastNoise::new(rng.gen()),
|
2019-05-25 07:36:11 +00:00
|
|
|
|
tree_nz: BasicMulti::new()
|
2019-11-07 20:25:30 +00:00
|
|
|
|
.set_octaves(12)
|
|
|
|
|
.set_persistence(0.75)
|
2019-09-17 14:05:08 +00:00
|
|
|
|
.set_seed(rng.gen()),
|
|
|
|
|
cave_0_nz: SuperSimplex::new().set_seed(rng.gen()),
|
|
|
|
|
cave_1_nz: SuperSimplex::new().set_seed(rng.gen()),
|
2019-06-09 10:24:18 +00:00
|
|
|
|
|
2019-09-25 22:53:43 +00:00
|
|
|
|
structure_gen: StructureGen2d::new(rng.gen(), 32, 16),
|
2019-09-17 14:05:08 +00:00
|
|
|
|
region_gen: StructureGen2d::new(rng.gen(), 400, 96),
|
|
|
|
|
cliff_gen: StructureGen2d::new(rng.gen(), 80, 56),
|
2019-08-18 23:52:26 +00:00
|
|
|
|
humid_nz: Billow::new()
|
2019-11-06 11:19:50 +00:00
|
|
|
|
.set_octaves(9)
|
2019-11-07 20:25:30 +00:00
|
|
|
|
.set_persistence(0.4)
|
2019-11-06 11:19:50 +00:00
|
|
|
|
.set_frequency(0.2)
|
2019-09-17 14:05:08 +00:00
|
|
|
|
.set_seed(rng.gen()),
|
2019-08-23 23:25:01 +00:00
|
|
|
|
|
2019-09-17 14:05:08 +00:00
|
|
|
|
fast_turb_x_nz: FastNoise::new(rng.gen()),
|
|
|
|
|
fast_turb_y_nz: FastNoise::new(rng.gen()),
|
2019-08-24 13:23:42 +00:00
|
|
|
|
|
2019-09-17 14:05:08 +00:00
|
|
|
|
town_gen: StructureGen2d::new(rng.gen(), 2048, 1024),
|
2019-11-22 02:55:19 +00:00
|
|
|
|
river_seed: RandomField::new(rng.gen()),
|
2020-01-22 14:31:10 +00:00
|
|
|
|
rock_strength_nz: Fbm::new()
|
|
|
|
|
.set_octaves(10)
|
|
|
|
|
.set_lacunarity(rock_lacunarity)
|
|
|
|
|
// persistence = lacunarity^(-(1.0 - fractal increment))
|
|
|
|
|
// NOTE: In paper, fractal increment is roughly 0.25.
|
|
|
|
|
.set_persistence(rock_lacunarity.powf(-(1.0 - 0.25)))
|
|
|
|
|
.set_frequency(
|
|
|
|
|
1.0 * (5_000.0 / continent_scale)
|
|
|
|
|
/ (2.0 * TerrainChunkSize::RECT_SIZE.x as f64 * 2.0.powi(10 - 1)),
|
|
|
|
|
)
|
|
|
|
|
.set_seed(rng.gen()),
|
2019-11-25 03:47:33 +00:00
|
|
|
|
uplift_nz: Worley::new()
|
|
|
|
|
.set_seed(rng.gen())
|
2020-01-11 19:53:58 +00:00
|
|
|
|
.set_frequency(1.0 / (TerrainChunkSize::RECT_SIZE.x as f64 * uplift_scale))
|
2020-01-22 14:31:10 +00:00
|
|
|
|
.set_displacement(1.0)
|
2020-01-16 21:42:51 +00:00
|
|
|
|
.set_range_function(RangeFunction::Euclidean),
|
2019-11-22 02:55:19 +00:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
let river_seed = &gen_ctx.river_seed;
|
|
|
|
|
let rock_strength_nz = &gen_ctx.rock_strength_nz;
|
2019-11-19 18:34:52 +00:00
|
|
|
|
|
2020-01-18 18:41:37 +00:00
|
|
|
|
// Suppose the old world has grid spacing Δx' = Δy', new Δx = Δy.
|
|
|
|
|
// We define grid_scale such that Δx = height_scale * Δx' ⇒
|
|
|
|
|
// grid_scale = Δx / Δx'.
|
(See sharp/lod-history) LOD, shadows, greedy meshing, new lighting, perf
---
Pretty much a Veloren fork at this point. Here's a high level overview of the changes (will be added to CHANGELOG just before merge).
At a high level this MR incorporates roughly two groups of changes.
The first group consists of new game features: more flexible map sizes, level of detail terrain, shadow maps, and a new lighting
engine. This is "feature work" that (mostly) only adds new things to Veloren, and mostly shouldn't affect old stuff.
The second big group of changes are those addressing the fallout from all the new features. These include performance fixes of
various sorts: the addition of multiple graphics options and optimization of the cheap ones to avoid work, switching all voxel
models to use some variant of greedy meshing, switching over much of our CPU-side vector math to exploit SIMD instructions
(coinciding with a fork of `vek`), and a rewrite of how the UI handles text rendering (coinciding with updates to our fork
of `conrod`). Making Veloren's hardcoded colors appear correct under the new lighting engine also required considerably
changes (TODO: Fill in this section when it's complete).
The second category of changes often heavily touches code owned by other people, including frequently modified code "owned" by a
handful of people, so I recommend that this code be reviewed particularly carefully.
---
At a high level (each will be described in more detail below):
- The world map has been refactored.
- The world size is no longer hardcoded (@zesterer).
- The map generation code was made generic to allow using it outside of the `world` crate (@zesterer).
- On world creation, we now compute *horizon maps* (@zesterer).
- The way we pass the world from the server to the client has been updated (@xMAC94x).
- Artifacts related to image rotation were fixed (@imbris).
- Multiflow rivers were enabled (@zesterer).
- In the process of making changes related to the world map, various incidental fixes and optimizations were required.
- The new *level of detail* feature was added (@zesterer wrote part of this and has checked out the rest).
- A new LOD terrain rendering step was added to the pipeline.
- The LOD terrain quality was made configurable via a graphics setting.
- Horizon maps were used to cast shadows from LOD chunks on both LOD and non-LOD terrain.
- A "voxelization" effect was incorporated into rendered LOD terrain to make it blend better into the world.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Veloren's lighting has been completely overhauled (@zesterer has already checked most of this out).
- A semi-accurate index of refraction was assigned to our materials.
- A new, more realistic, physically based approach to lighting was used using the *Ashikhmin Shirley* BRDF.
- We emulate *atmospheric scattering* using equations designed for measuring solar panel light exposure.
- We attempt to compute *realistic light attenuation* in water using its real material properties.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Point and directional lights now cast realistic shadows, using *shadow mapping.* (@imbris, @zesterer, @Treeco, @YuriMomo)
- Point light shadow maps were added to the rendering pipeline, using geometry shaders and *seamless cube maps*.
- Directional light shadows were added to the rendering pipeline, using LISPSM together with disabling *depth clamping*.
- "Shadow-only" chunks and NPCs were added to prevent shadows from models behind you from disappearing.
- In the process of making changes related to shadow maps, various incidental fixes and optimizations were required.
The addition of shadow maps, LOD terrain, and the new lighting all led to significant performance degradation, on top of other
changes happening in master. Therefore, a large number of performance improvements were also needed:
- The graphics options were made much more flexible and configurable, and shaders were optimize.
- New options were provided for how to render lights and shadows (@Pfauenauge, @zesterer).
- Graphic setting storage and configuration were overhauled to make adding new features easier (@Pfauenauge, @imbris).
- Shaders were rewritten to utilize GLSL's preprocessor to avoid overhead (@zesterer, @YuriMomo).
- In the process of making changes related to providing additional rendering options, various incidental fixes and optimizations were required.
- Voxel model creation was switched to use *greedy meshing.*
- A new voxel meshing method, greedy meshing, was added (@imbris).
- Uses of the older meshing methods were migrated to use greedy meshing (@imbris, @jshipsey, @Pfauenauge).
- New restrictions were added to terrain, figure, and sprites to future proof them for further optimizations (@jshipsey, @Pfauenauge, @zesterer).
- Most positions are now relative to either chunk or player position for better precision (@imbris, @zesterer, @scottc).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- Animation and terrain math were switched to use SIMD where possible.
- Fixes were made to vek to make its SIMD feature usable for us (@zesterer, @imbris).
- The interface and types used in bone animation were changed in various ways (@jshipsey, @Snowram, @Pfauenauge).
- Redundant code generation for body animation is now partly taken care of by a macro (@jshipsey, @Snowram, @Pfauenauge).
- Animation code was modified to to use vek's SIMD representation where possible (@jshipsey, @Snowram, @Pfauenauge).
- Terrain meshing code and shadow map math were also modified to use vek's SIMD representation (@imbris).
- SIMD instruction generation was enabled (@YuriMomo, @jshipsey, @Snowram, @imbris, @Angelonfira, @xMAC94x).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- The way we cache glyphs was completely refactored, fixed, and optimized.
- Our fork of `conrod` was optimized in various ways (@imbris).
- Our fork of `conrod` now exposes whether a widget was updated during the current frame (@imbris).
- Our use of the glyph cache was rewritten for correctness (@imbris).
- A *text cache* was introduced that lets us skip remeshing glyphs that have not changed (@imbris).
- Various changes were made to reduce pressure on the glyph cache, with more planned (@imbris, @Pfauenauge).
- In the process of making changes related to the glyph cache, various incidental fixes and optimizations were required.
- Colors were changed to keep Veloren's look consistent with master.
- Some older tree models were brought back (@Pfauenauge).
- TODO(@Sharp): All hardcoded colors were extracted and made hotloadable.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Hardcoded colors were fixed to conform to Veloren's style.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Color models were fixed to conform to Veloren's style.
A detailed description of the involved changes follows.
---
- The world size is no longer hardcoded. All functions dependent on world size now take a `WorldSizeLg`, which holds the base 2 logarithm of each actual world dimension and is guaranteed to maintain certain properties (outlined in `common/src/terrain/map.rs`). Additionally, many utility functions that utilize the world size were moved into `common` as well (mostly `common/src/terrain/mod.rs`). Finally, the world map format was updated in order to store its size explicitly, with a migration path from the old format that should work whenever the old formatted map was a square (practically always). See `world/src/sim/mod.rs` for these changes.
- The map generation code was made generic to allow using it outside of the `world` crate. The parts of the map generating code that do not need to query the world were moved over to `common/src/terrain/map.rs`, allowing them to be used from the client without creating a dependency on `world`. The rest of it was turned into helper functions in `world/src/sim/map.rs`, which can be passed as closures to the generic map generation code to complete its construction. This also means that colors are now passed in separately to the map generation function. See <https://veloren.net/devblog-78/> for more details.
- On world creation, we now compute *horizon maps*. See the function in `world/src/sim/util.rs`.
Given a height map and a plane intersecting that height map, our horizon maps allow us to encode enough information to reconstruct shadows for each point on the height map using only the *horizon angle* (the angle at which the sun starts to become visible). As Veloren's sun only covers one plane, this is sufficient for encoding sun shadows for LOD terrain, by encoding two angles per chunk (one for each 90 degrees the sun covers). We can also use this for the moon, if we want, since the moon follows the same path. Additionally, we store the *height* of the furthest occluder, to try to make the shadows volumetric; so this means 4 bytes in total for each chunk.
Support for horizon maps has been merged into the map functionality in common as well.
- The way we pass the world from the server to the client has been updated. Rather than passing the prerendered map, we instead pass three maps with values for each chunk; one with the color information, a second with altitude information, and a third with horizon map information. We then reconstruct the map on the client, together with some additional information we send from the server (like the sea level and maximum height). See `common/src/msg/server.rs` for a detailed description of the format of `WorldMapMsg`, and `server/src/libr.rs` and `client/src/lib.rs` for details of the map construction and parsing.
- Artifacts related to image rotation were fixed. See the commit message for commit SHA `cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e` for a detailed explanation. This involved changes to shaders, the addition of a new type of graphic (also reflected in the graphic cache) that allows specifying a border color (which automatically makes the associated texture immutable), and some related fixes. I reproduce the first two paragraphs of the MR description as well:
```
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
```
- Multiflow rivers were enabled.
This does not really need to be part of this MR, and would be easy to revert, but since it seemed to provide a nice improvement it's currently packaged with it.
We already computed multiple outflows from each chunk for erosion purposes long before this MR.
However, we never modified river rendering to be able to handle this case (just a single downhill river flow is complex enough!) so this was not exposed when deciding which chunks were rivers.
Now that
- In the process of making changes related to the world map, various incidental fixes and optimizations were required. Some examples of fixes include making sure terrain is never lowered to below sea level (to make the shadow maps report correct values), fixing map altitudes and colors to understand things like cliffs and "block level" coloring (that doesn'te xist on the column level), and fixing a crashbug when rendering images for the UI where source pixels are strongly rectangular. Some examples of related performance fixes include avoiding allocating a fresh vector for all the maps (i.e. copying it over to change the format from `[u32; n]` to `DynamicImage` and then copying again to convert to `RgbaImage`), and instead using the `gfx::memory::slice` function to accomplish the same thing. These sorts of changes are spread all arond the code.
This includes the additon of a new scene, `voxygen/src/scene/lod.rs`, a new pipeline `voxygen/src/render/pipeline/lod_terrain.rs`, and new shaders `assets/vxygen/shaders/lod-terrain-vert.glsl` and `assets/vxygen/shaders/lod-terrain-frag.glsl`, as well as associated changes to the renderer in `voxygen/src/render/renderer.rs`.
The main idea behind our initial approach to LOD was to take the world data we now get from the server (altitude, color, and horizon mapping).
- Some previously computed values were turned into shader uniforms for better prediction on weak processors. (@zesterer)
- Calls to power or trig functions were removed or replaced with multiplications, where possible.
- After some deliberation
- To properly handle sprite "waving" for nearby sprites,
We explicitly designed the greedy meshing system with figures and sprites in mind.
In both cases, we want to be able to *efficiently* pack many different models into the same texture, especially in cases where we know
we will either not be removing any of the grouped-together from the models from the texture, or will remove all of them at once (so
they can be packed into some specific subtexture).
For sprites, since we know every model in advance and never intend to deallocate them, we currently pack them all as efficiently as
possible into one giant tetxure atlas. However, in the future we might opt to pack them slightly less efficiently in exchange for
shrinking the sprite vertex size.
For figures, we pack all the textures for each *model* into the same atlas.
is a global texture atlas used for every sprite, and for figures which is why we have the ability to mesh multiple
models to the same texture area (using the simple texture atlas allocator) without requiring intermediate vector allocations.
This is accomplished by delaying the time when we actually write the color and light data to the texture until *after* all the
model vertices have been meshed; then, we can just allocate the whole color/light array at once, making the atlas we use an
exact fit. In computer science-y terms, we accomplish this delay by, after we perform the initial greedy meshing (without
texture information), not continuing to create the texture data, but instead constructing a *continuation*--that is, a function
that, when called, will execute the rest of the computation. We push this continuation (which in Rust terms is a `FnOnce` closure
that takes the `ColLightsInfo` that it is supposed to write to as context) onto a
onto a vector
resizing. To allow for suspended writes to texture data, Rust pointed out to me that the continuation that would eventually write the color and light data to the texture atlas (the one that is shared by all models sharing the same greedy mesher) would have to *own* whatever data it mshed. Because we often generate the model data to mesh as a temporary in `voxygen/src/load.rs`, the
- Matrix multiplications in the shader were reduced for figure data (@zesterer).
- Vertex "waves" for fluid data were removed.
- Terrain "bending" near edges was removed.
- Scaling was fixed to make sure empty space was not introduced in a space previously occupied by a block. It was also changed to take ownership of its voxel data,
rather than sharing it, to let it be used with meshing.
- Rust's nightly version was bumped in order to use the `array_map` function, which lets us reuse more code between the simple map and `FigureModelCache`.
- PositionedGlyph::standalone.
---
I tried to cite sources in many cases[^realtime],[^lloyd],[^lispsm],[^pbrt],[^greedy],[^tjunctions]
where I needed features from elsewhere but I am particularly grateful for the following resources,
esepcially where they have accompanying source code. I linked all of them that are accessible to the public (those that are not were
obtained through legal means).
[^realtime]: Eisemann, Elmar, Michael Schwarz, Ulf Assarsson, Michael Wimmer. Real-Time Shadows. A K Peters/CRC Press (T&F), 20160419.
[^lloyd]: Lloyd,B. 2007. [Logarithmic perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). PhD thesis, University of North Carolina.
[^lispsm]: Wimmer, M., Scherzer, D., and Purgathofer, W. 2004. [Light space perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). In Proceedings of Eurographics Symposium on Rendering 2004, pp. 143– 152.
[^pbrt]: Pharr, Matt, et al. [http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf](Physically Based Rendering: From Theory to Implementation). Third edition, Morgan Kaufmann Publishers/Elsevier, 2017.
[^greedy]: mikolalysenko. “Meshing in a Minecraft Game.” 0 FPS, 30 June 2012, <https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/>.
[^tjunctions]: blackflux. “Meshing in Voxel Engines – Part 1.” Blackflux.Com, 23 Feb. 2014, <https://blackflux.wordpress.com/2014/02/23/meshing-in-voxel-engines-part-1/>.
I am also especially grateful to Khronos, Wikiepdia, and stackoverflow for answering many of my specific questions while writing the MR.
---
Squashed commit of the following:
commit 300505e7305a2fdac722a808ee8538323f215f39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 18:46:25 2020 +0200
Fixing cargo doc and typo in CHANGELOG.
commit ec0aeb18e8499d7d84ef818331b4b65c3d76cea6
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 15:38:50 2020 +0200
Hopefully final commit for the LOD branch.
commit 5e8ea0b1eaac02903a02feb2eb038d195de4872f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 10:14:26 2020 +0200
Falling back to power as stopgap.
commit e44a1cbf46504ee9931a01bdc9033e145500d557
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 09:25:41 2020 +0200
Address imbris feedback.
Temporarily disables shiny water, lowers max VD.
These restrictions will be lifted soon after merging.
commit 561e25778a108ac3712f5ec2ce3a51234c4430d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 08:31:13 2020 +0200
Tweaking shaders a bit.
commit 7d19259078ce0dd7b3742ad7d0cb3fab3ece3fdc
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:59:43 2020 +0200
Fix view example as well.
commit 051cd4934e0fad2c0b15db4380a4189fa318679f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:29:06 2020 +0200
Fix meshing benchmark.
commit c95e07db3b4dcca285678985e65e31b927cb1c61
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 05:46:22 2020 +0200
Address MR feedback, fix scene clouds.
commit 1bfb816cabdb3ffc1e507a009c2d98696b4b573a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:39:36 2020 +0200
Incorporating Pfau's figure color changes.
New eyes and new humanoid colors.
commit 3f9b89a3ac7b3356b1dba0d1a8f6541357f81469
Merge: e2f5162e4 62c53963a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:29:41 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit e2f5162e4f96f4124aa43488f7245d341b3dcfd4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:28:38 2020 +0200
World colors are all hotloadable.
They live in assets/world/style/colors.ron.
Only a small handful of hardcoed colors remain in World; they are either
part of the map, or difficult to disentangle from the rest of the
computation. Comments are made where appropriate.
commit 62c53963abe1975009d34a8f9515a355bef24f31
Author: Marcel Märtens <marcel.cochem@googlemail.com>
Date: Wed Aug 19 15:59:00 2020 +0200
replace pretty_env_logger with tracing
commit 5b1625f99d9586fe80e2232f583ec5af9f953099
Merge: d71003acd 4942b5b39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:15:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit d71003acdabeff970b3928e97c26af6847b5b78e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:14:34 2020 +0200
Hotloading colors, part 1: colors in common.
Currently, this just entails humanoid colors. There are only three
colors not handled; the light emitter colors in
common/src/comp/inventory/item/tool.rs. These don't seem important
enough to me to warrant making hotloadable, at least not right now, but
if it's needed later we can always add them to the file.
commit 63b5e0e553eb2ea49276f192a6fc7dd65254270d
Merge: c32b337a4 6d2c4b9c1
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 13:05:37 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c32b337a46e10d9de473d178a94a3ccd61c39bb3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:52:04 2020 +0200
Fixing LOD grid, for real.
commit a166ae0360395387e09fb35a1f84210c2ce5ec24
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:28:05 2020 +0200
Addressing imbris's initial feedback.
Fixes two minor bugs: explosion particles were no longer spawning
randomly, and LOD grids were not perfectly even.
commit 4cbad004f44060994252dd3d38647a14a589712f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:27:58 2020 +0200
Bumping nightly per request.
commit 548680276aac77c25d43d16b5622f847d474dbef
Merge: acc098604 8f8b20c91
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:26:06 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit acc0986040589a3492f88a740bc3c3fc693b26d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:28:32 2020 +0200
Lower resolution due to lying drivers.
commit d3b878de2a52c358d2944a6bbd0555dad7fbdb10
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:15:38 2020 +0200
Fix issues msh encountered with Intel 4600.
commit 10245e0c1b0cb6fae10d86409435364edc6102ef
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 21:15:02 2020 +0200
Merge more models into one mesh than we did previously.
commit 3155c31e663c52ae5c3a53d5fb5665892a1a498a
Merge: 7204cc8a7 3c199280e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:35:22 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7204cc8a7a4f74a30306bd205d9834fee4bb944f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:34:43 2020 +0200
Fix not yet done NPC animations.
This forces them all to be the idle animation if not specified.
This fixes issues where you'd have giant NPCs in water.
commit bc83360f2a08918f19d417b5f772e1ff554dba08
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 19:36:37 2020 +0200
Try to fix some bugs:
- Z fighting with LOD terrain and water.
- Audio SFX not playing.
commit 1fd104aa603bf3781b6526a5cada46aeca3049dd
Merge: 862df3c99 7c2c392a3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 12:02:31 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 862df3c9976c4da9bd7cfd784f1a85973127968a
Merge: 0a4218ed9 75c1d4401
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 05:52:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0a4218ed9d541a2b34c133351bea38a99ddf4ea7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 22:27:14 2020 +0200
Fix particle depth.
commit f51dfdeb442d0dd5243dd2f344fa4be295bd0875
Merge: c6251a956 5e6dc0471
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:19:04 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit c6251a956ad376400dca5c23420cf8d213dc8fdf
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:15:46 2020 +0200
Cache figures more intelligently.
Cache figures for longer, and don't cache character states for the
player except where they actually affect the rendered model.
commit 0ed801d5404982c6fb63b1eaa4567d908b294c9d
Merge: c11b9bdf0 eea64f78f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 16:32:24 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c11b9bdf0a53bf9884d2f5a48fec9b01d582df1a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 11:47:15 2020 +0200
Remove unneeded Clippy annotation.
commit 16aa9ef40af56d69289d00aafb3deadfb8bd4f35
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 8 00:53:02 2020 +0200
Fix hotloading and Clippy.
commit 3dc973e0be5b758da1e9805eb764ad401374cd0c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 23:50:27 2020 +0200
Major speedups with SIMD.
commit fba64a7d93d5a96077ce87287bbce6ab9b7fbcae
Merge: 76429d00e d1e10b178
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:19 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 76429d00eea00d212fbd672a84ee91e75b19b938
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:10 2020 +0200
Add clippy.toml.
commit c79f512f84dbb83cb82b7954db68ff241dfd8e41
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 11:55:20 2020 +0200
Fix all clippy issues, clean up Rust code.
commit 6f90e010b3fbefb53b0d632e819931350015b6b8
Merge: 77a8c7c26 5929cfa5c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:30 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 77a8c7c267d3f44a1a62bd6b2274359973c5e4d4
Merge: b44e44232 44febaabd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:10 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 5929cfa5c713aa392110bbb62407f76caf53c3df
Author: jshipsey <jshipsey18@gmail.com>
Date: Thu Aug 6 20:47:27 2020 -0400
fixed in-hand arrow bug
commit b44e442325d828f1cd564d66908f89d09e80474b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 6 13:40:35 2020 +0200
Miscellaneous performance improvements.
commit be37acf287c1360d8085862526ac3365ffd1d768
Merge: 125d7fc6c c11876547
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 05:49:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 125d7fc6c4dcd8c8c5f27b8268a4d64f409f3644
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 04:55:31 2020 +0200
Abstract over simd vs. repr_c vectors.
Also some minor improvements to Event size.
commit d4d4956e9252e1241ce110b2aa85076c6b1e2a23
Merge: 5f3b7294a aced5f979
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:56:54 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 5f3b7294af1f8533edc2620b58863c248e2b07af
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:43:52 2020 +0200
Fix formatting issues I missed before.
commit a428a3ebba70dcab63dd0f8cd983120c90617271
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:41:51 2020 +0200
Fix clippy warnings, part 1.
There aer still a bunch of type too complex and
function takes too many arguments warnings that I'll fix later
(or ignore, since in the one case I did fix a function takes too
many arguments warning I think it made the code *less* readable).
commit ba54307540ed8a937ac08209730284fc653af85b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 30 13:22:42 2020 +0200
Fix light animations so they are removed when the light turns off.
commit 7e0f4bcbf0f4717145d8beac40d52e3acebbe2aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 21:10:20 2020 +0200
Fix crash in edge case for pixel art.
commit 56da06f7a351e2b949e9b014a90b974d511a0924
Merge: cf74d55f2 9f53a4a19
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:56:52 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:29:52 2020 +0200
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
The first concern was addressed by fixing the dimensions of the map
images drawn from the UI (so that we always use a square source
rectangle, rather than a rectangular one according to the dimensions of
the map). We also fixed the way rotation was done in the fragment
shader for north-facing sources to make it properly handle aspect ratio
(this was already done for north-facing targets). Together, these fix
rendering issues peculiar to rectangular maps.
The second and third concerns were jointly addressed by adding an
optional border color to every 2D image drawn by the UI. This turns
out not to waste extra space even though we hold a full f32 color
(to avoid an extra dependency on gfx's PackedColor), since voxel
images already take up more space than Optiion<[f32; 4]> requires.
This is then implemented automatically using the "border color"
wrapping method in the attached sampler.
Since this is implemented in graphics hardware, it only works (at
least naively) if the actual image bounds match the texture bounds.
Therefore, we altered the way the graphics cache stores images
with a border color to guarantee that they are always in their own
texture, whose size exactly matches their extent. Since the easiest
currently exposed way to set a border color is to do so for an
immutable texture, we went a bit further and added a new "immutable"
texture storage type used for these cases; currently, it is always
and automatically used only when there is a specified border color,
but in theory there's no reason we couldn't provide immutable-only
images that use the default wrapping mdoe (though clamp to border
is admittedly not a great default).
To fix the maps case specifically, we set the border color to a
translucent version of the ocean border color. This may need
tweaking going forward, which shouldn't be hard.
As part of this process, we had to modify graphics replacement to
make sure immutable images are *removed* when invalidated, rather
than just having a validity flag unset (this is normally done by
the UI to try to reuse allocations in place if images are updated
in benign ways, since the texture atlases used for Ui do not
support deallocation; currently this is only used for item images,
so there should be no overlap with immutable image replacement,
so this was purely precautionary).
Since we were already touching the relevant code, we also updated
the image dependency to a newer version that provides more ways
to avoid allocations, and made a few other changes that should
hopefully eliminate redundant most of the intermediate buffer
allocations we were performing for what should be zero-cost
conversions. This may slightly improve performance in some
cases.
commit ad18ce939940a8c697270f6e9b94db9942fd8295
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 13:21:09 2020 +0200
Fix continent scale hack.
commit 36b1cb074f5b195aebd7dbbc3da7f0246a1a18ec
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 12:11:40 2020 +0200
Enable loading different sized maps without a recompile.
We may want to tweak the effects of the continent_scale_hack.
commit 13b6d4d534cc4814b7cb3294ca41bbfea0a6b186
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 10:55:48 2020 +0200
Removing WORLD_SIZE, part 1.
Erased almost every instance of WORLD_SIZE and replaced it with a local
power of two, map_size_lg (which respects certain invariants; see
common/src/terrain/map.rs for more details about MapSizeLg). This also
means we can avoid a dependency on the world crate from client, as
desired.
Now that the rest of the code is not expecting a fixed WORLD_SIZE, the
next step is to arrange for maps to store their world size, and to use
that world size as a basis prior to loading the map (as well, probably,
as prior to configuring some of the noise functions).
commit 30b1d2c6428230a9eaa0d749cdcbbd6f1cbccd78
Merge: 7d56ba31b 1377b369f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:58 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 7d56ba31b445441461b28a07fc495d7d4f047c17
Merge: 2101113b4 598f14b25
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 1377b369f6db2258e910d467a5740f31789e3ded
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sun Jul 19 23:25:38 2020 +0200
more saturated pumpkins
commit ae8d50527f93bb0616c2ad46ce4dacb63bc37c6d
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sat Jul 18 20:29:56 2020 +0200
acacia models
commit 2101113b467e691de787392d7f20f1745f5637bd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 18 18:55:25 2020 +0200
Higher detail LOD.
commit add2cfae04b4385fa5590e11e2bd5229d9dee0aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 16 01:57:39 2020 +0200
Revert some irrelevant stuff.
commit 2e2ab3dc1eaa59a4aef7f8d34a53d8aae4c8553a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 15 13:30:49 2020 +0200
Fixing various things about shadows.
* Correcting optimal LISPSM parameter.
* Figure shadows are cast when they're not visible.
* Chunk shadows stay cast until you look away.
* Seamless cubemaps for point lights.
* Etc.
commit 6c31e6b56217274285b597af297036691ea5d897
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 19:50:26 2020 +0200
Fix shadow creation.
commit 6332cbe006115ae205597529cd8bbccd146c2cca
Merge: be438657c 930e0028b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:47:00 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit be438657c33d7b5bfb0a9582c3ed3fd366637323
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:28:08 2020 +0200
Tweaks to shadows.
Added shadow map resolution configuration, added seamless cubemaps,
documented all existing rendering options, and fixed a few Clippy
errors.
commit 23b4058906013c7d2a40c286e20e32c5fbd897ed
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 10:11:19 2020 +0200
Fix moon, use nonlinear noise for terrain.
Note that the latter has a bit of performance cost.
commit 7fbe5cbfbb9dc29607957b8e62f432a4deed193d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:23:02 2020 +0200
Address lies about max texture size.
commit bcfc62b5e13a1cdd83f57535fde4694720bebfd9
Merge: 75e3626a7 18a08e8fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:22:08 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 75e3626a785919f43fdcf2127c2b10e3e4df2f9f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:21:52 2020 +0200
OpenGL 3.3 minimum.
commit 18a08e8fe2739f02af99a5d2cb4e7c38c49e858b
Author: Monty Marz <m.marzouq@gmx.de>
Date: Tue Jul 7 23:57:52 2020 +0200
settings localization
commit 90c5d1ca3620092bc3ae10b2211489eb1cf6f5e8
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 21:11:48 2020 +0200
Lower near distance.
commit 0e66f02b25aaddaa2dfddbbc89cd67de54a9a7b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 20:09:01 2020 +0200
All sprites sway in the wind now.
commit db1401a6910bf42dcf502462c90038752ff5fbdb
Merge: 69e508d8c e8b4b29d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 19:34:17 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 69e508d8c94d8973033817ca86f357e466fc7c4d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 18:41:37 2020 +0200
Make it easy to switch to SIMD for math.
commit ffe0f5928c7a7e87d00cb5426b3b1d831d7e02fd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 21:21:12 2020 +0200
Fix some issues with underwater rendering.
commit bfda6da42f38fd02c31ee92c81ab785a3e50c2a0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 19:17:59 2020 +0200
Fix some minor display issues.
commit 0ed752e087968cf901301884aaeae698e32ef8a5
Merge: ccc6a06a8 518edcb85
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:14:21 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit ccc6a06a8d4504d6b9f7af7905a414d2ee06ab76
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:04:34 2020 +0200
Some minor changes.
commit 4e020246702889269efe1a191788992164c508d6
Merge: 50a64d927 e05c9267a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 16:17:40 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 50a64d927e6c4f4b0e4688e4cbfca694bc3f922a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 13:07:03 2020 +0200
Fix far plane.
commit 7dd06da34cae8f9ea3b6c889fe965181f3fd3949
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:25:35 2020 +0200
Add shadows.glsl.
commit 618a18c998778bf871b905a74657440fcc384c80
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:10:22 2020 +0200
Adding shadows, greedy meshing, and more.
commit eaea83fe6a5cb1cb0ba8beef888183c718258496
Merge: 267018495 2f89b863e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 22:47:07 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 2670184954a13e4a9e7a4e35ba79aac0c5fac2f7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 21:20:01 2020 +0200
Make civsim and sites deterministic.
For anything in worldgen where you use a HashMap, *please* think
carefully about which hasher you are going to use! This is
especially true if (for some reason) you are depending on hashmap
iteration order remaining stable for some aspect of worldgen.
commit f8376fd5dc72b4a9c2f51a6b4570d59c8b8e9343
Merge: 654f7e049 cdee191dd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 17:53:57 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 654f7e049258d9da27c09608bbe6a46ffa8787e5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed May 20 21:22:30 2020 +0200
Correct backface culling.
commit 560501df05ca725409b0f2e4eb31bdfdc15fd0c7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue May 19 17:22:06 2020 +0200
Greedy messhing for shadows.
commit a4d87e1875ca543436e6bbbeb20348facc5a52d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun May 17 05:59:00 2020 +0200
Shadow maps work for lantern.
commit 243d0837b8a3b08172c9a3c348d964d7ddc2a0a8
Merge: 04382dc28 71dd520cd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:53:13 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 04382dc28632b6c66e8821f6870c0daaa1c1901a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:22:17 2020 +0200
WIP: better graphics config, better LOD, shadow maps.
commit 22ddbad3eb32bfa70f0932176022208fe67ded81
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 18:54:09 2020 +0200
Minor shader fixes.
commit 746a10e8d01ac235f994b0cde78fa48998602a1f
Merge: 0f4a0e763 40ab94673
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 04:02:09 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0f4a0e763db3afbdc4fb0558611f38326ca87151
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 23:03:24 2020 +0200
Switch back to pop-in terrain.
commit dd74fa7e4a53667b38811d7aec58d7f6a68889bb
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 22:58:55 2020 +0200
LOD shading closer to voxel shading.
commit ef67bd58ba0bdaf622b078892d768263b6cba268
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 28 20:49:03 2020 +0200
Experimental underwater lighting.
commit 2c5ad9d07605e80d5fd5679dd3a5d70c605b86a9
Merge: 748279835 303967a6f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 22:35:24 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7482798354eda18c8207950080fc24d443a369de
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 21:59:55 2020 +0200
Replace discard in figure-frag.
commit d83b4ae69be4912f69bf7835f509c68a1c7770a4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:45:57 2020 +0200
Fix sprite lighting, HDR from focus_pos.
commit 0594238004f116274905fa0ed7c2b6c417ed1d29
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:14:10 2020 +0200
Proper HDR from point lights.
commit 48c93d2b41ce5743103d18e76cc228f5ac766492
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 14:01:43 2020 +0200
Brighter ambiance, darker LOD shadows.
commit e0452e895ccfa8a43f368cae3b8b8aedc24dad93
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 13:13:23 2020 +0200
More proper HDR.
commit 4c6da3ed16cfeebb455e40da5f557b4af9a499d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 00:13:10 2020 +0200
Trying LOD noise.
commit 682a3d74c85df5503ffe1fc1cc891bce789df1ad
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 23:11:08 2020 +0200
Fix LOD heights in towns.
commit cc39e5734e8b18f9077bf42e66337c1319dd6b6e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 21:01:23 2020 +0200
More LOD fixes.
commit 8116b21c2e51c836e77894e309ac273caf2917b3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:54:43 2020 +0200
I like this coloring.
commit bc2560ea90b36f4b46190005344232d993043ac3
Merge: 14effdd5d e690efe71
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:48:33 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 14effdd5db8747fcf3eb34f03b46b7792e92d1c5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:24:35 2020 +0200
Re-saturate.
commit 48a643955d4435b78179acba0beb4a979905cc31
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:23:57 2020 +0200
Various fixes.
commit f7b497a0c25f4ad4682c71dd1ed6f608052feb9b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 03:22:49 2020 +0200
Render figures again.
commit 44e4aad48deba8266b9f8bdfd3db096b381f5327
Merge: e6f0a5a98 9ec319a18
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 02:01:04 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit e6f0a5a981a82533ba188fff0a54ce98577bb152
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 24 16:12:20 2020 +0200
Add atmospheric scattering.
commit f2953087f691a8edbc001cb98ebf5059fc6f8ac0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 23 00:01:20 2020 +0200
Fix shadowing for specular reflections.
commit ddd4a67a9799b8d08c7dc0c2bec90621c2bed0e3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Apr 22 22:56:12 2020 +0200
HDR fixes.
commit 1015e60deef3c447381996277df7496707a63bd0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 21 18:25:19 2020 +0200
More lighting changes.
commit 80c264abd111fb237e57843efcb5c071d4f84613
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 13 00:29:59 2020 +0200
Lighting experiments.
commit 8414987e589dd5102bad89762a3adaccc0bfe957
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 9 02:38:40 2020 +0200
WIP -- lighting changes and soft shadows.
commit 9cd2b3fb0d6b49776c6dfe463e4169637250b11a
Merge: c7ea687eb 8b149ad11
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:29 2020 +0200
Merge branch 'sharp/new-lighting' into sharp/small-fixes
commit c7ea687ebbc5aace1b455f134a5bf49ce2c7434a
Merge: 476441531 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:02 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 8b149ad11ad4bb75018fcf9519baec27d1c95951
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:32:39 2020 +0200
Trying out a new lighting model.
commit b0ac9f36f755dd06f7c17c46150568064790864f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 07:56:11 2020 +0200
Use bicubic interpolation for terrain.
commit f6fc9307a121514b614bc50ef8eb055953e7da8a
Merge: 33140a295 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 05:01:41 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 4764415312aae6e9ac2d00e86e84577cb958f1ab
Merge: ed2d0111d 13388ee6a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 04:54:48 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 13388ee6a42943f3f79a9cb488346cef18e272fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 20:30:08 2020 +0200
Various fixes (to coloring and to soft shadows).
commit fbd084a94a067082a87cd6d28b82054709bc9265
Merge: 5a089863b 4fdf6896a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 18:50:38 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/map-colors
commit ed2d0111d994262ae836d84d1fe5a45e4de72a0b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 06:49:27 2020 +0200
Combining colors and LOD.
commit 88342640c6b835114d01c797b89fdede3b0a2108
Merge: 33140a295 5a089863b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:49:20 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 33140a2951b8212725f42c758b277aaec4d888f7
Merge: 4c65a5aed f34d4b379
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:36:21 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 5a089863beb01d4794bbe3580ada47b278715ea2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 03:17:49 2020 +0200
Making maps brighter.
This is probably not the right way to do it, but oh well!
commit 32b2c99109dd486aa922886081068f9c550c83f2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 02:46:36 2020 +0200
Horizon mapping and "layered" map generation.
Horizon mapping is a method of shadow mapping specific to height maps.
It can handle any angle between 0 and 90 degrees from the ground, as
long as know the horizontal direction in advance, by remembering only a
single angle (the "horizon angle" of the shadow map). More is explained
in common/src/msg/server.rs. We also remember the approximate height of
the largest occluder, to try to be able to generate soft shadows and
create a vertical position where the shadows can't go higher.
Additionally, map generation has been reworked. Instead of computing
everything from explicit samples, we pass in sampling functions that
return exactly what the map generator needs. This allows us to cleanly
separate the way we sample things like altitudes and colors from the map
generation process. We exploit this to generate maps *partially* on the
server (with colors and rivers, but not shading). We can then send the
partially completed map to the client, which can combine it with shadow
information to generate the final map. This is useful for two reasons:
first, it makes sure the client can apply shadow information by itself,
and second, it lets us pass the unshaded map for use with level of
detail functionality.
For similar reasons, river generation is split
out into its own layer, but for now we opt to still generate rivers on
the server (since the river wire format is more complicated to compress
and may require some extra work to make sure we have enough precision to
draw rivers well enough for LoD).
Finally, the mostly ad-hoc lighting we were performing has been (mostly)
replaced with explicit Phong reflection shading (including specular
highlights). Regularizing this seems useful and helps clarify the
"meaning" of the various light intensities, and helps us keep a more
physically plausible basis. However, its interaction with soft shadows
is still imperfect, and it's not yet clear to me what we need to do to
turn this into something useful for LoD.
commit f8926a5737ddc51f3d585c651a64c43677aae0f4
Merge: a1aee931e 875ae6ced
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Mar 13 13:32:42 2020 +0100
Merge remote-tracking branch 'origin/master' into sharp/map-colors
commit 4c65a5aed353b119aea65a2aaeb94549b67beb42
Author: Treeco <5021038-Treeco@users.noreply.gitlab.com>
Date: Mon Feb 24 16:48:05 2020 +0000
Made LOD setting slider exponential
commit 2fa7b2d20d7233dc8bfd64f9f7f54617575248f1
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 17:49:53 2020 +0000
Added mist to LoD
commit aab059a450b5f635777129ff82cc15b662965c3c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 15:14:06 2020 +0000
Added LoD slider
commit 779c36b538121c5ade3633ae5cb67bb14c8c3877
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:54:55 2020 +0000
Reduced cost of vertex pushing
commit 9fea150473906b166365b738ebcea07c697daf3d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:38:53 2020 +0000
Fixed maths, improved LoD resolution
commit 5481df38fea5bf183ff376a3337179cfaa5233dc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 11:22:50 2020 +0000
Dynamically relocate LoD vertices to enhance details
commit a3e36a50ababd615da7db1b26158c7906a5def01
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 18:13:51 2020 +0000
Simpler terrain spiral rendering
commit 255f450ae9ac8763db4bede075fb409161ed57cc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:53:17 2020 +0000
Better LoD precision
commit 3d027aebe812a5b8658a4eb8123dc9f61b3776d2
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:04:03 2020 +0000
Better falloff
commit be775c9484b457b2c0b1a494aec03392d0c70e76
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 15:30:45 2020 +0000
Applied good ideas from experimental branch
commit 58587b68545a23c5c04ab4574a4b94b3bc982246
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 16:15:13 2020 +0000
Minor fixes to LoD merging
commit 7b42aebd709c14df2db766aad61d9280ad24d84d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 15:04:44 2020 +0000
Capped LoD dragging
commit 8aafc559f87124e1ea5ca6e3ddc2aa0c242d793c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:54:37 2020 +0000
Better blending between LoD and terrain border
commit edd3455d5161792d87ddc8eadc0ecbad5532b284
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:40:19 2020 +0000
Fixed LoD z depth, added sea level offset
commit b9b06744620114dd5556e73f64fa93c145503a7c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:27:43 2020 +0000
Better LoD smoothing
commit a1aee931e790431560cd2d953ad61d9497072afd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Feb 21 14:52:17 2020 +0100
Adding shadows.
commit 2400786c13dd891c131ed86d48d05df516a8a778
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 13:48:40 2020 +0000
Use world map as LoD source
commit dbf650f504a4c25fbbc2096ac3616c736bf52d23
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Jan 20 00:48:14 2020 +0000
Better clouds at distance
commit 5e6f81b86cdb9730b9b056877b19257075fd5fa8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Jan 19 23:59:02 2020 +0000
sync
commit 745e7540ddb000cc645f612767b337c2ddc3f7c0
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 12:40:48 2019 +0000
Improved cloud falloff mist, faster noise sampling
commit f6a200d0cb866196ba57697466755f9e0c7ea5d8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 10:09:00 2019 +0000
Improved long-range depth precision, removed unnecessary LoD polygons
commit 63d1b2bb2292898d59fb4f4e502201103dfeb86f
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 20:57:46 2019 +0000
Working LoD shader
commit f13d98ee3e58f881e8b978861a67663b59ed91ec
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 11:03:40 2019 +0000
LoD first attempt (stack overflow issue)
2020-08-20 18:34:59 +00:00
|
|
|
|
let grid_scale = 1.0f64 / (4.0 / continent_scale_hack)/*1.0*/;
|
2020-01-22 09:41:10 +00:00
|
|
|
|
|
2020-02-01 20:39:39 +00:00
|
|
|
|
// Now, suppose we want to generate a world with "similar" topography, defined
|
|
|
|
|
// in this case as having roughly equal slopes at steady state, with the
|
|
|
|
|
// simulation taking roughly as many steps to get to the point the
|
|
|
|
|
// previous world was at when it finished being simulated.
|
2020-01-18 18:41:37 +00:00
|
|
|
|
//
|
2020-02-01 20:39:39 +00:00
|
|
|
|
// Some computations with our coupled SPL/debris flow give us (for slope S
|
|
|
|
|
// constant) the following suggested scaling parameters to make this
|
|
|
|
|
// work: k_fs_scale ≡ (K𝑓 / K𝑓') = grid_scale^(-2m) =
|
|
|
|
|
// grid_scale^(-2θn)
|
2020-01-18 18:41:37 +00:00
|
|
|
|
let k_fs_scale = |theta, n| grid_scale.powf(-2.0 * (theta * n) as f64);
|
|
|
|
|
|
|
|
|
|
// k_da_scale ≡ (K_da / K_da') = grid_scale^(-2q)
|
|
|
|
|
let k_da_scale = |q| grid_scale.powf(-2.0 * q);
|
|
|
|
|
//
|
2020-02-01 20:39:39 +00:00
|
|
|
|
// Some other estimated parameters are harder to come by and *much* more
|
|
|
|
|
// dubious, not being accurate for the coupled equation. But for the SPL
|
|
|
|
|
// only one we roughly find, for h the height at steady state and time τ
|
|
|
|
|
// = time to steady state, with Hack's Law estimated b = 2.0 and various other
|
2020-01-18 18:41:37 +00:00
|
|
|
|
// simplifying assumptions, the estimate:
|
|
|
|
|
// height_scale ≡ (h / h') = grid_scale^(n)
|
|
|
|
|
let height_scale = |n: f32| grid_scale.powf(n as f64) as Alt;
|
|
|
|
|
// time_scale ≡ (τ / τ') = grid_scale^(n)
|
|
|
|
|
let time_scale = |n: f32| grid_scale.powf(n as f64);
|
|
|
|
|
//
|
|
|
|
|
// Based on this estimate, we have:
|
|
|
|
|
// delta_t_scale ≡ (Δt / Δt') = time_scale
|
|
|
|
|
let delta_t_scale = |n: f32| time_scale(n);
|
|
|
|
|
// alpha_scale ≡ (α / α') = height_scale^(-1)
|
|
|
|
|
let alpha_scale = |n: f32| height_scale(n).recip() as f32;
|
|
|
|
|
//
|
|
|
|
|
// Slightly more dubiously (need to work out the math better) we find:
|
2020-01-22 14:31:10 +00:00
|
|
|
|
// k_d_scale ≡ (K_d / K_d') = grid_scale^2 / (/*height_scale * */ time_scale)
|
2020-02-01 20:39:39 +00:00
|
|
|
|
let k_d_scale = |n: f32| grid_scale.powi(2) / (/* height_scale(n) * */time_scale(n));
|
2020-01-18 18:41:37 +00:00
|
|
|
|
// epsilon_0_scale ≡ (ε₀ / ε₀') = height_scale(n) / time_scale(n)
|
2020-01-22 14:45:05 +00:00
|
|
|
|
let epsilon_0_scale = |n| (height_scale(n) / time_scale(n) as Alt) as f32;
|
2020-01-18 18:41:37 +00:00
|
|
|
|
|
2020-02-01 20:39:39 +00:00
|
|
|
|
// Approximate n for purposes of computation of parameters above over the whole
|
|
|
|
|
// grid (when a chunk isn't available).
|
2020-01-18 18:41:37 +00:00
|
|
|
|
let n_approx = 1.0;
|
2020-01-22 14:31:10 +00:00
|
|
|
|
let max_erosion_per_delta_t = 64.0 * delta_t_scale(n_approx);
|
|
|
|
|
let n_steps = 100;
|
|
|
|
|
let n_small_steps = 0;
|
|
|
|
|
let n_post_load_steps = 0;
|
2019-12-03 01:07:44 +00:00
|
|
|
|
|
|
|
|
|
// Logistic regression. Make sure x ∈ (0, 1).
|
|
|
|
|
let logit = |x: f64| x.ln() - (-x).ln_1p();
|
|
|
|
|
// 0.5 + 0.5 * tanh(ln(1 / (1 - 0.1) - 1) / (2 * (sqrt(3)/pi)))
|
|
|
|
|
let logistic_2_base = 3.0f64.sqrt() * f64::consts::FRAC_2_PI;
|
|
|
|
|
// Assumes μ = 0, σ = 1
|
|
|
|
|
let logistic_cdf = |x: f64| (x / logistic_2_base).tanh() * 0.5 + 0.5;
|
|
|
|
|
|
(See sharp/lod-history) LOD, shadows, greedy meshing, new lighting, perf
---
Pretty much a Veloren fork at this point. Here's a high level overview of the changes (will be added to CHANGELOG just before merge).
At a high level this MR incorporates roughly two groups of changes.
The first group consists of new game features: more flexible map sizes, level of detail terrain, shadow maps, and a new lighting
engine. This is "feature work" that (mostly) only adds new things to Veloren, and mostly shouldn't affect old stuff.
The second big group of changes are those addressing the fallout from all the new features. These include performance fixes of
various sorts: the addition of multiple graphics options and optimization of the cheap ones to avoid work, switching all voxel
models to use some variant of greedy meshing, switching over much of our CPU-side vector math to exploit SIMD instructions
(coinciding with a fork of `vek`), and a rewrite of how the UI handles text rendering (coinciding with updates to our fork
of `conrod`). Making Veloren's hardcoded colors appear correct under the new lighting engine also required considerably
changes (TODO: Fill in this section when it's complete).
The second category of changes often heavily touches code owned by other people, including frequently modified code "owned" by a
handful of people, so I recommend that this code be reviewed particularly carefully.
---
At a high level (each will be described in more detail below):
- The world map has been refactored.
- The world size is no longer hardcoded (@zesterer).
- The map generation code was made generic to allow using it outside of the `world` crate (@zesterer).
- On world creation, we now compute *horizon maps* (@zesterer).
- The way we pass the world from the server to the client has been updated (@xMAC94x).
- Artifacts related to image rotation were fixed (@imbris).
- Multiflow rivers were enabled (@zesterer).
- In the process of making changes related to the world map, various incidental fixes and optimizations were required.
- The new *level of detail* feature was added (@zesterer wrote part of this and has checked out the rest).
- A new LOD terrain rendering step was added to the pipeline.
- The LOD terrain quality was made configurable via a graphics setting.
- Horizon maps were used to cast shadows from LOD chunks on both LOD and non-LOD terrain.
- A "voxelization" effect was incorporated into rendered LOD terrain to make it blend better into the world.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Veloren's lighting has been completely overhauled (@zesterer has already checked most of this out).
- A semi-accurate index of refraction was assigned to our materials.
- A new, more realistic, physically based approach to lighting was used using the *Ashikhmin Shirley* BRDF.
- We emulate *atmospheric scattering* using equations designed for measuring solar panel light exposure.
- We attempt to compute *realistic light attenuation* in water using its real material properties.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Point and directional lights now cast realistic shadows, using *shadow mapping.* (@imbris, @zesterer, @Treeco, @YuriMomo)
- Point light shadow maps were added to the rendering pipeline, using geometry shaders and *seamless cube maps*.
- Directional light shadows were added to the rendering pipeline, using LISPSM together with disabling *depth clamping*.
- "Shadow-only" chunks and NPCs were added to prevent shadows from models behind you from disappearing.
- In the process of making changes related to shadow maps, various incidental fixes and optimizations were required.
The addition of shadow maps, LOD terrain, and the new lighting all led to significant performance degradation, on top of other
changes happening in master. Therefore, a large number of performance improvements were also needed:
- The graphics options were made much more flexible and configurable, and shaders were optimize.
- New options were provided for how to render lights and shadows (@Pfauenauge, @zesterer).
- Graphic setting storage and configuration were overhauled to make adding new features easier (@Pfauenauge, @imbris).
- Shaders were rewritten to utilize GLSL's preprocessor to avoid overhead (@zesterer, @YuriMomo).
- In the process of making changes related to providing additional rendering options, various incidental fixes and optimizations were required.
- Voxel model creation was switched to use *greedy meshing.*
- A new voxel meshing method, greedy meshing, was added (@imbris).
- Uses of the older meshing methods were migrated to use greedy meshing (@imbris, @jshipsey, @Pfauenauge).
- New restrictions were added to terrain, figure, and sprites to future proof them for further optimizations (@jshipsey, @Pfauenauge, @zesterer).
- Most positions are now relative to either chunk or player position for better precision (@imbris, @zesterer, @scottc).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- Animation and terrain math were switched to use SIMD where possible.
- Fixes were made to vek to make its SIMD feature usable for us (@zesterer, @imbris).
- The interface and types used in bone animation were changed in various ways (@jshipsey, @Snowram, @Pfauenauge).
- Redundant code generation for body animation is now partly taken care of by a macro (@jshipsey, @Snowram, @Pfauenauge).
- Animation code was modified to to use vek's SIMD representation where possible (@jshipsey, @Snowram, @Pfauenauge).
- Terrain meshing code and shadow map math were also modified to use vek's SIMD representation (@imbris).
- SIMD instruction generation was enabled (@YuriMomo, @jshipsey, @Snowram, @imbris, @Angelonfira, @xMAC94x).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- The way we cache glyphs was completely refactored, fixed, and optimized.
- Our fork of `conrod` was optimized in various ways (@imbris).
- Our fork of `conrod` now exposes whether a widget was updated during the current frame (@imbris).
- Our use of the glyph cache was rewritten for correctness (@imbris).
- A *text cache* was introduced that lets us skip remeshing glyphs that have not changed (@imbris).
- Various changes were made to reduce pressure on the glyph cache, with more planned (@imbris, @Pfauenauge).
- In the process of making changes related to the glyph cache, various incidental fixes and optimizations were required.
- Colors were changed to keep Veloren's look consistent with master.
- Some older tree models were brought back (@Pfauenauge).
- TODO(@Sharp): All hardcoded colors were extracted and made hotloadable.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Hardcoded colors were fixed to conform to Veloren's style.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Color models were fixed to conform to Veloren's style.
A detailed description of the involved changes follows.
---
- The world size is no longer hardcoded. All functions dependent on world size now take a `WorldSizeLg`, which holds the base 2 logarithm of each actual world dimension and is guaranteed to maintain certain properties (outlined in `common/src/terrain/map.rs`). Additionally, many utility functions that utilize the world size were moved into `common` as well (mostly `common/src/terrain/mod.rs`). Finally, the world map format was updated in order to store its size explicitly, with a migration path from the old format that should work whenever the old formatted map was a square (practically always). See `world/src/sim/mod.rs` for these changes.
- The map generation code was made generic to allow using it outside of the `world` crate. The parts of the map generating code that do not need to query the world were moved over to `common/src/terrain/map.rs`, allowing them to be used from the client without creating a dependency on `world`. The rest of it was turned into helper functions in `world/src/sim/map.rs`, which can be passed as closures to the generic map generation code to complete its construction. This also means that colors are now passed in separately to the map generation function. See <https://veloren.net/devblog-78/> for more details.
- On world creation, we now compute *horizon maps*. See the function in `world/src/sim/util.rs`.
Given a height map and a plane intersecting that height map, our horizon maps allow us to encode enough information to reconstruct shadows for each point on the height map using only the *horizon angle* (the angle at which the sun starts to become visible). As Veloren's sun only covers one plane, this is sufficient for encoding sun shadows for LOD terrain, by encoding two angles per chunk (one for each 90 degrees the sun covers). We can also use this for the moon, if we want, since the moon follows the same path. Additionally, we store the *height* of the furthest occluder, to try to make the shadows volumetric; so this means 4 bytes in total for each chunk.
Support for horizon maps has been merged into the map functionality in common as well.
- The way we pass the world from the server to the client has been updated. Rather than passing the prerendered map, we instead pass three maps with values for each chunk; one with the color information, a second with altitude information, and a third with horizon map information. We then reconstruct the map on the client, together with some additional information we send from the server (like the sea level and maximum height). See `common/src/msg/server.rs` for a detailed description of the format of `WorldMapMsg`, and `server/src/libr.rs` and `client/src/lib.rs` for details of the map construction and parsing.
- Artifacts related to image rotation were fixed. See the commit message for commit SHA `cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e` for a detailed explanation. This involved changes to shaders, the addition of a new type of graphic (also reflected in the graphic cache) that allows specifying a border color (which automatically makes the associated texture immutable), and some related fixes. I reproduce the first two paragraphs of the MR description as well:
```
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
```
- Multiflow rivers were enabled.
This does not really need to be part of this MR, and would be easy to revert, but since it seemed to provide a nice improvement it's currently packaged with it.
We already computed multiple outflows from each chunk for erosion purposes long before this MR.
However, we never modified river rendering to be able to handle this case (just a single downhill river flow is complex enough!) so this was not exposed when deciding which chunks were rivers.
Now that
- In the process of making changes related to the world map, various incidental fixes and optimizations were required. Some examples of fixes include making sure terrain is never lowered to below sea level (to make the shadow maps report correct values), fixing map altitudes and colors to understand things like cliffs and "block level" coloring (that doesn'te xist on the column level), and fixing a crashbug when rendering images for the UI where source pixels are strongly rectangular. Some examples of related performance fixes include avoiding allocating a fresh vector for all the maps (i.e. copying it over to change the format from `[u32; n]` to `DynamicImage` and then copying again to convert to `RgbaImage`), and instead using the `gfx::memory::slice` function to accomplish the same thing. These sorts of changes are spread all arond the code.
This includes the additon of a new scene, `voxygen/src/scene/lod.rs`, a new pipeline `voxygen/src/render/pipeline/lod_terrain.rs`, and new shaders `assets/vxygen/shaders/lod-terrain-vert.glsl` and `assets/vxygen/shaders/lod-terrain-frag.glsl`, as well as associated changes to the renderer in `voxygen/src/render/renderer.rs`.
The main idea behind our initial approach to LOD was to take the world data we now get from the server (altitude, color, and horizon mapping).
- Some previously computed values were turned into shader uniforms for better prediction on weak processors. (@zesterer)
- Calls to power or trig functions were removed or replaced with multiplications, where possible.
- After some deliberation
- To properly handle sprite "waving" for nearby sprites,
We explicitly designed the greedy meshing system with figures and sprites in mind.
In both cases, we want to be able to *efficiently* pack many different models into the same texture, especially in cases where we know
we will either not be removing any of the grouped-together from the models from the texture, or will remove all of them at once (so
they can be packed into some specific subtexture).
For sprites, since we know every model in advance and never intend to deallocate them, we currently pack them all as efficiently as
possible into one giant tetxure atlas. However, in the future we might opt to pack them slightly less efficiently in exchange for
shrinking the sprite vertex size.
For figures, we pack all the textures for each *model* into the same atlas.
is a global texture atlas used for every sprite, and for figures which is why we have the ability to mesh multiple
models to the same texture area (using the simple texture atlas allocator) without requiring intermediate vector allocations.
This is accomplished by delaying the time when we actually write the color and light data to the texture until *after* all the
model vertices have been meshed; then, we can just allocate the whole color/light array at once, making the atlas we use an
exact fit. In computer science-y terms, we accomplish this delay by, after we perform the initial greedy meshing (without
texture information), not continuing to create the texture data, but instead constructing a *continuation*--that is, a function
that, when called, will execute the rest of the computation. We push this continuation (which in Rust terms is a `FnOnce` closure
that takes the `ColLightsInfo` that it is supposed to write to as context) onto a
onto a vector
resizing. To allow for suspended writes to texture data, Rust pointed out to me that the continuation that would eventually write the color and light data to the texture atlas (the one that is shared by all models sharing the same greedy mesher) would have to *own* whatever data it mshed. Because we often generate the model data to mesh as a temporary in `voxygen/src/load.rs`, the
- Matrix multiplications in the shader were reduced for figure data (@zesterer).
- Vertex "waves" for fluid data were removed.
- Terrain "bending" near edges was removed.
- Scaling was fixed to make sure empty space was not introduced in a space previously occupied by a block. It was also changed to take ownership of its voxel data,
rather than sharing it, to let it be used with meshing.
- Rust's nightly version was bumped in order to use the `array_map` function, which lets us reuse more code between the simple map and `FigureModelCache`.
- PositionedGlyph::standalone.
---
I tried to cite sources in many cases[^realtime],[^lloyd],[^lispsm],[^pbrt],[^greedy],[^tjunctions]
where I needed features from elsewhere but I am particularly grateful for the following resources,
esepcially where they have accompanying source code. I linked all of them that are accessible to the public (those that are not were
obtained through legal means).
[^realtime]: Eisemann, Elmar, Michael Schwarz, Ulf Assarsson, Michael Wimmer. Real-Time Shadows. A K Peters/CRC Press (T&F), 20160419.
[^lloyd]: Lloyd,B. 2007. [Logarithmic perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). PhD thesis, University of North Carolina.
[^lispsm]: Wimmer, M., Scherzer, D., and Purgathofer, W. 2004. [Light space perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). In Proceedings of Eurographics Symposium on Rendering 2004, pp. 143– 152.
[^pbrt]: Pharr, Matt, et al. [http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf](Physically Based Rendering: From Theory to Implementation). Third edition, Morgan Kaufmann Publishers/Elsevier, 2017.
[^greedy]: mikolalysenko. “Meshing in a Minecraft Game.” 0 FPS, 30 June 2012, <https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/>.
[^tjunctions]: blackflux. “Meshing in Voxel Engines – Part 1.” Blackflux.Com, 23 Feb. 2014, <https://blackflux.wordpress.com/2014/02/23/meshing-in-voxel-engines-part-1/>.
I am also especially grateful to Khronos, Wikiepdia, and stackoverflow for answering many of my specific questions while writing the MR.
---
Squashed commit of the following:
commit 300505e7305a2fdac722a808ee8538323f215f39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 18:46:25 2020 +0200
Fixing cargo doc and typo in CHANGELOG.
commit ec0aeb18e8499d7d84ef818331b4b65c3d76cea6
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 15:38:50 2020 +0200
Hopefully final commit for the LOD branch.
commit 5e8ea0b1eaac02903a02feb2eb038d195de4872f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 10:14:26 2020 +0200
Falling back to power as stopgap.
commit e44a1cbf46504ee9931a01bdc9033e145500d557
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 09:25:41 2020 +0200
Address imbris feedback.
Temporarily disables shiny water, lowers max VD.
These restrictions will be lifted soon after merging.
commit 561e25778a108ac3712f5ec2ce3a51234c4430d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 08:31:13 2020 +0200
Tweaking shaders a bit.
commit 7d19259078ce0dd7b3742ad7d0cb3fab3ece3fdc
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:59:43 2020 +0200
Fix view example as well.
commit 051cd4934e0fad2c0b15db4380a4189fa318679f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:29:06 2020 +0200
Fix meshing benchmark.
commit c95e07db3b4dcca285678985e65e31b927cb1c61
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 05:46:22 2020 +0200
Address MR feedback, fix scene clouds.
commit 1bfb816cabdb3ffc1e507a009c2d98696b4b573a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:39:36 2020 +0200
Incorporating Pfau's figure color changes.
New eyes and new humanoid colors.
commit 3f9b89a3ac7b3356b1dba0d1a8f6541357f81469
Merge: e2f5162e4 62c53963a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:29:41 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit e2f5162e4f96f4124aa43488f7245d341b3dcfd4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:28:38 2020 +0200
World colors are all hotloadable.
They live in assets/world/style/colors.ron.
Only a small handful of hardcoed colors remain in World; they are either
part of the map, or difficult to disentangle from the rest of the
computation. Comments are made where appropriate.
commit 62c53963abe1975009d34a8f9515a355bef24f31
Author: Marcel Märtens <marcel.cochem@googlemail.com>
Date: Wed Aug 19 15:59:00 2020 +0200
replace pretty_env_logger with tracing
commit 5b1625f99d9586fe80e2232f583ec5af9f953099
Merge: d71003acd 4942b5b39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:15:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit d71003acdabeff970b3928e97c26af6847b5b78e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:14:34 2020 +0200
Hotloading colors, part 1: colors in common.
Currently, this just entails humanoid colors. There are only three
colors not handled; the light emitter colors in
common/src/comp/inventory/item/tool.rs. These don't seem important
enough to me to warrant making hotloadable, at least not right now, but
if it's needed later we can always add them to the file.
commit 63b5e0e553eb2ea49276f192a6fc7dd65254270d
Merge: c32b337a4 6d2c4b9c1
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 13:05:37 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c32b337a46e10d9de473d178a94a3ccd61c39bb3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:52:04 2020 +0200
Fixing LOD grid, for real.
commit a166ae0360395387e09fb35a1f84210c2ce5ec24
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:28:05 2020 +0200
Addressing imbris's initial feedback.
Fixes two minor bugs: explosion particles were no longer spawning
randomly, and LOD grids were not perfectly even.
commit 4cbad004f44060994252dd3d38647a14a589712f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:27:58 2020 +0200
Bumping nightly per request.
commit 548680276aac77c25d43d16b5622f847d474dbef
Merge: acc098604 8f8b20c91
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:26:06 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit acc0986040589a3492f88a740bc3c3fc693b26d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:28:32 2020 +0200
Lower resolution due to lying drivers.
commit d3b878de2a52c358d2944a6bbd0555dad7fbdb10
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:15:38 2020 +0200
Fix issues msh encountered with Intel 4600.
commit 10245e0c1b0cb6fae10d86409435364edc6102ef
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 21:15:02 2020 +0200
Merge more models into one mesh than we did previously.
commit 3155c31e663c52ae5c3a53d5fb5665892a1a498a
Merge: 7204cc8a7 3c199280e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:35:22 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7204cc8a7a4f74a30306bd205d9834fee4bb944f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:34:43 2020 +0200
Fix not yet done NPC animations.
This forces them all to be the idle animation if not specified.
This fixes issues where you'd have giant NPCs in water.
commit bc83360f2a08918f19d417b5f772e1ff554dba08
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 19:36:37 2020 +0200
Try to fix some bugs:
- Z fighting with LOD terrain and water.
- Audio SFX not playing.
commit 1fd104aa603bf3781b6526a5cada46aeca3049dd
Merge: 862df3c99 7c2c392a3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 12:02:31 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 862df3c9976c4da9bd7cfd784f1a85973127968a
Merge: 0a4218ed9 75c1d4401
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 05:52:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0a4218ed9d541a2b34c133351bea38a99ddf4ea7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 22:27:14 2020 +0200
Fix particle depth.
commit f51dfdeb442d0dd5243dd2f344fa4be295bd0875
Merge: c6251a956 5e6dc0471
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:19:04 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit c6251a956ad376400dca5c23420cf8d213dc8fdf
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:15:46 2020 +0200
Cache figures more intelligently.
Cache figures for longer, and don't cache character states for the
player except where they actually affect the rendered model.
commit 0ed801d5404982c6fb63b1eaa4567d908b294c9d
Merge: c11b9bdf0 eea64f78f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 16:32:24 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c11b9bdf0a53bf9884d2f5a48fec9b01d582df1a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 11:47:15 2020 +0200
Remove unneeded Clippy annotation.
commit 16aa9ef40af56d69289d00aafb3deadfb8bd4f35
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 8 00:53:02 2020 +0200
Fix hotloading and Clippy.
commit 3dc973e0be5b758da1e9805eb764ad401374cd0c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 23:50:27 2020 +0200
Major speedups with SIMD.
commit fba64a7d93d5a96077ce87287bbce6ab9b7fbcae
Merge: 76429d00e d1e10b178
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:19 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 76429d00eea00d212fbd672a84ee91e75b19b938
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:10 2020 +0200
Add clippy.toml.
commit c79f512f84dbb83cb82b7954db68ff241dfd8e41
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 11:55:20 2020 +0200
Fix all clippy issues, clean up Rust code.
commit 6f90e010b3fbefb53b0d632e819931350015b6b8
Merge: 77a8c7c26 5929cfa5c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:30 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 77a8c7c267d3f44a1a62bd6b2274359973c5e4d4
Merge: b44e44232 44febaabd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:10 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 5929cfa5c713aa392110bbb62407f76caf53c3df
Author: jshipsey <jshipsey18@gmail.com>
Date: Thu Aug 6 20:47:27 2020 -0400
fixed in-hand arrow bug
commit b44e442325d828f1cd564d66908f89d09e80474b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 6 13:40:35 2020 +0200
Miscellaneous performance improvements.
commit be37acf287c1360d8085862526ac3365ffd1d768
Merge: 125d7fc6c c11876547
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 05:49:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 125d7fc6c4dcd8c8c5f27b8268a4d64f409f3644
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 04:55:31 2020 +0200
Abstract over simd vs. repr_c vectors.
Also some minor improvements to Event size.
commit d4d4956e9252e1241ce110b2aa85076c6b1e2a23
Merge: 5f3b7294a aced5f979
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:56:54 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 5f3b7294af1f8533edc2620b58863c248e2b07af
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:43:52 2020 +0200
Fix formatting issues I missed before.
commit a428a3ebba70dcab63dd0f8cd983120c90617271
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:41:51 2020 +0200
Fix clippy warnings, part 1.
There aer still a bunch of type too complex and
function takes too many arguments warnings that I'll fix later
(or ignore, since in the one case I did fix a function takes too
many arguments warning I think it made the code *less* readable).
commit ba54307540ed8a937ac08209730284fc653af85b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 30 13:22:42 2020 +0200
Fix light animations so they are removed when the light turns off.
commit 7e0f4bcbf0f4717145d8beac40d52e3acebbe2aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 21:10:20 2020 +0200
Fix crash in edge case for pixel art.
commit 56da06f7a351e2b949e9b014a90b974d511a0924
Merge: cf74d55f2 9f53a4a19
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:56:52 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:29:52 2020 +0200
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
The first concern was addressed by fixing the dimensions of the map
images drawn from the UI (so that we always use a square source
rectangle, rather than a rectangular one according to the dimensions of
the map). We also fixed the way rotation was done in the fragment
shader for north-facing sources to make it properly handle aspect ratio
(this was already done for north-facing targets). Together, these fix
rendering issues peculiar to rectangular maps.
The second and third concerns were jointly addressed by adding an
optional border color to every 2D image drawn by the UI. This turns
out not to waste extra space even though we hold a full f32 color
(to avoid an extra dependency on gfx's PackedColor), since voxel
images already take up more space than Optiion<[f32; 4]> requires.
This is then implemented automatically using the "border color"
wrapping method in the attached sampler.
Since this is implemented in graphics hardware, it only works (at
least naively) if the actual image bounds match the texture bounds.
Therefore, we altered the way the graphics cache stores images
with a border color to guarantee that they are always in their own
texture, whose size exactly matches their extent. Since the easiest
currently exposed way to set a border color is to do so for an
immutable texture, we went a bit further and added a new "immutable"
texture storage type used for these cases; currently, it is always
and automatically used only when there is a specified border color,
but in theory there's no reason we couldn't provide immutable-only
images that use the default wrapping mdoe (though clamp to border
is admittedly not a great default).
To fix the maps case specifically, we set the border color to a
translucent version of the ocean border color. This may need
tweaking going forward, which shouldn't be hard.
As part of this process, we had to modify graphics replacement to
make sure immutable images are *removed* when invalidated, rather
than just having a validity flag unset (this is normally done by
the UI to try to reuse allocations in place if images are updated
in benign ways, since the texture atlases used for Ui do not
support deallocation; currently this is only used for item images,
so there should be no overlap with immutable image replacement,
so this was purely precautionary).
Since we were already touching the relevant code, we also updated
the image dependency to a newer version that provides more ways
to avoid allocations, and made a few other changes that should
hopefully eliminate redundant most of the intermediate buffer
allocations we were performing for what should be zero-cost
conversions. This may slightly improve performance in some
cases.
commit ad18ce939940a8c697270f6e9b94db9942fd8295
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 13:21:09 2020 +0200
Fix continent scale hack.
commit 36b1cb074f5b195aebd7dbbc3da7f0246a1a18ec
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 12:11:40 2020 +0200
Enable loading different sized maps without a recompile.
We may want to tweak the effects of the continent_scale_hack.
commit 13b6d4d534cc4814b7cb3294ca41bbfea0a6b186
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 10:55:48 2020 +0200
Removing WORLD_SIZE, part 1.
Erased almost every instance of WORLD_SIZE and replaced it with a local
power of two, map_size_lg (which respects certain invariants; see
common/src/terrain/map.rs for more details about MapSizeLg). This also
means we can avoid a dependency on the world crate from client, as
desired.
Now that the rest of the code is not expecting a fixed WORLD_SIZE, the
next step is to arrange for maps to store their world size, and to use
that world size as a basis prior to loading the map (as well, probably,
as prior to configuring some of the noise functions).
commit 30b1d2c6428230a9eaa0d749cdcbbd6f1cbccd78
Merge: 7d56ba31b 1377b369f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:58 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 7d56ba31b445441461b28a07fc495d7d4f047c17
Merge: 2101113b4 598f14b25
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 1377b369f6db2258e910d467a5740f31789e3ded
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sun Jul 19 23:25:38 2020 +0200
more saturated pumpkins
commit ae8d50527f93bb0616c2ad46ce4dacb63bc37c6d
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sat Jul 18 20:29:56 2020 +0200
acacia models
commit 2101113b467e691de787392d7f20f1745f5637bd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 18 18:55:25 2020 +0200
Higher detail LOD.
commit add2cfae04b4385fa5590e11e2bd5229d9dee0aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 16 01:57:39 2020 +0200
Revert some irrelevant stuff.
commit 2e2ab3dc1eaa59a4aef7f8d34a53d8aae4c8553a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 15 13:30:49 2020 +0200
Fixing various things about shadows.
* Correcting optimal LISPSM parameter.
* Figure shadows are cast when they're not visible.
* Chunk shadows stay cast until you look away.
* Seamless cubemaps for point lights.
* Etc.
commit 6c31e6b56217274285b597af297036691ea5d897
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 19:50:26 2020 +0200
Fix shadow creation.
commit 6332cbe006115ae205597529cd8bbccd146c2cca
Merge: be438657c 930e0028b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:47:00 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit be438657c33d7b5bfb0a9582c3ed3fd366637323
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:28:08 2020 +0200
Tweaks to shadows.
Added shadow map resolution configuration, added seamless cubemaps,
documented all existing rendering options, and fixed a few Clippy
errors.
commit 23b4058906013c7d2a40c286e20e32c5fbd897ed
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 10:11:19 2020 +0200
Fix moon, use nonlinear noise for terrain.
Note that the latter has a bit of performance cost.
commit 7fbe5cbfbb9dc29607957b8e62f432a4deed193d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:23:02 2020 +0200
Address lies about max texture size.
commit bcfc62b5e13a1cdd83f57535fde4694720bebfd9
Merge: 75e3626a7 18a08e8fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:22:08 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 75e3626a785919f43fdcf2127c2b10e3e4df2f9f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:21:52 2020 +0200
OpenGL 3.3 minimum.
commit 18a08e8fe2739f02af99a5d2cb4e7c38c49e858b
Author: Monty Marz <m.marzouq@gmx.de>
Date: Tue Jul 7 23:57:52 2020 +0200
settings localization
commit 90c5d1ca3620092bc3ae10b2211489eb1cf6f5e8
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 21:11:48 2020 +0200
Lower near distance.
commit 0e66f02b25aaddaa2dfddbbc89cd67de54a9a7b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 20:09:01 2020 +0200
All sprites sway in the wind now.
commit db1401a6910bf42dcf502462c90038752ff5fbdb
Merge: 69e508d8c e8b4b29d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 19:34:17 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 69e508d8c94d8973033817ca86f357e466fc7c4d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 18:41:37 2020 +0200
Make it easy to switch to SIMD for math.
commit ffe0f5928c7a7e87d00cb5426b3b1d831d7e02fd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 21:21:12 2020 +0200
Fix some issues with underwater rendering.
commit bfda6da42f38fd02c31ee92c81ab785a3e50c2a0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 19:17:59 2020 +0200
Fix some minor display issues.
commit 0ed752e087968cf901301884aaeae698e32ef8a5
Merge: ccc6a06a8 518edcb85
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:14:21 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit ccc6a06a8d4504d6b9f7af7905a414d2ee06ab76
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:04:34 2020 +0200
Some minor changes.
commit 4e020246702889269efe1a191788992164c508d6
Merge: 50a64d927 e05c9267a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 16:17:40 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 50a64d927e6c4f4b0e4688e4cbfca694bc3f922a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 13:07:03 2020 +0200
Fix far plane.
commit 7dd06da34cae8f9ea3b6c889fe965181f3fd3949
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:25:35 2020 +0200
Add shadows.glsl.
commit 618a18c998778bf871b905a74657440fcc384c80
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:10:22 2020 +0200
Adding shadows, greedy meshing, and more.
commit eaea83fe6a5cb1cb0ba8beef888183c718258496
Merge: 267018495 2f89b863e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 22:47:07 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 2670184954a13e4a9e7a4e35ba79aac0c5fac2f7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 21:20:01 2020 +0200
Make civsim and sites deterministic.
For anything in worldgen where you use a HashMap, *please* think
carefully about which hasher you are going to use! This is
especially true if (for some reason) you are depending on hashmap
iteration order remaining stable for some aspect of worldgen.
commit f8376fd5dc72b4a9c2f51a6b4570d59c8b8e9343
Merge: 654f7e049 cdee191dd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 17:53:57 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 654f7e049258d9da27c09608bbe6a46ffa8787e5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed May 20 21:22:30 2020 +0200
Correct backface culling.
commit 560501df05ca725409b0f2e4eb31bdfdc15fd0c7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue May 19 17:22:06 2020 +0200
Greedy messhing for shadows.
commit a4d87e1875ca543436e6bbbeb20348facc5a52d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun May 17 05:59:00 2020 +0200
Shadow maps work for lantern.
commit 243d0837b8a3b08172c9a3c348d964d7ddc2a0a8
Merge: 04382dc28 71dd520cd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:53:13 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 04382dc28632b6c66e8821f6870c0daaa1c1901a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:22:17 2020 +0200
WIP: better graphics config, better LOD, shadow maps.
commit 22ddbad3eb32bfa70f0932176022208fe67ded81
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 18:54:09 2020 +0200
Minor shader fixes.
commit 746a10e8d01ac235f994b0cde78fa48998602a1f
Merge: 0f4a0e763 40ab94673
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 04:02:09 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0f4a0e763db3afbdc4fb0558611f38326ca87151
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 23:03:24 2020 +0200
Switch back to pop-in terrain.
commit dd74fa7e4a53667b38811d7aec58d7f6a68889bb
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 22:58:55 2020 +0200
LOD shading closer to voxel shading.
commit ef67bd58ba0bdaf622b078892d768263b6cba268
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 28 20:49:03 2020 +0200
Experimental underwater lighting.
commit 2c5ad9d07605e80d5fd5679dd3a5d70c605b86a9
Merge: 748279835 303967a6f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 22:35:24 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7482798354eda18c8207950080fc24d443a369de
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 21:59:55 2020 +0200
Replace discard in figure-frag.
commit d83b4ae69be4912f69bf7835f509c68a1c7770a4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:45:57 2020 +0200
Fix sprite lighting, HDR from focus_pos.
commit 0594238004f116274905fa0ed7c2b6c417ed1d29
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:14:10 2020 +0200
Proper HDR from point lights.
commit 48c93d2b41ce5743103d18e76cc228f5ac766492
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 14:01:43 2020 +0200
Brighter ambiance, darker LOD shadows.
commit e0452e895ccfa8a43f368cae3b8b8aedc24dad93
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 13:13:23 2020 +0200
More proper HDR.
commit 4c6da3ed16cfeebb455e40da5f557b4af9a499d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 00:13:10 2020 +0200
Trying LOD noise.
commit 682a3d74c85df5503ffe1fc1cc891bce789df1ad
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 23:11:08 2020 +0200
Fix LOD heights in towns.
commit cc39e5734e8b18f9077bf42e66337c1319dd6b6e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 21:01:23 2020 +0200
More LOD fixes.
commit 8116b21c2e51c836e77894e309ac273caf2917b3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:54:43 2020 +0200
I like this coloring.
commit bc2560ea90b36f4b46190005344232d993043ac3
Merge: 14effdd5d e690efe71
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:48:33 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 14effdd5db8747fcf3eb34f03b46b7792e92d1c5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:24:35 2020 +0200
Re-saturate.
commit 48a643955d4435b78179acba0beb4a979905cc31
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:23:57 2020 +0200
Various fixes.
commit f7b497a0c25f4ad4682c71dd1ed6f608052feb9b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 03:22:49 2020 +0200
Render figures again.
commit 44e4aad48deba8266b9f8bdfd3db096b381f5327
Merge: e6f0a5a98 9ec319a18
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 02:01:04 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit e6f0a5a981a82533ba188fff0a54ce98577bb152
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 24 16:12:20 2020 +0200
Add atmospheric scattering.
commit f2953087f691a8edbc001cb98ebf5059fc6f8ac0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 23 00:01:20 2020 +0200
Fix shadowing for specular reflections.
commit ddd4a67a9799b8d08c7dc0c2bec90621c2bed0e3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Apr 22 22:56:12 2020 +0200
HDR fixes.
commit 1015e60deef3c447381996277df7496707a63bd0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 21 18:25:19 2020 +0200
More lighting changes.
commit 80c264abd111fb237e57843efcb5c071d4f84613
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 13 00:29:59 2020 +0200
Lighting experiments.
commit 8414987e589dd5102bad89762a3adaccc0bfe957
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 9 02:38:40 2020 +0200
WIP -- lighting changes and soft shadows.
commit 9cd2b3fb0d6b49776c6dfe463e4169637250b11a
Merge: c7ea687eb 8b149ad11
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:29 2020 +0200
Merge branch 'sharp/new-lighting' into sharp/small-fixes
commit c7ea687ebbc5aace1b455f134a5bf49ce2c7434a
Merge: 476441531 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:02 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 8b149ad11ad4bb75018fcf9519baec27d1c95951
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:32:39 2020 +0200
Trying out a new lighting model.
commit b0ac9f36f755dd06f7c17c46150568064790864f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 07:56:11 2020 +0200
Use bicubic interpolation for terrain.
commit f6fc9307a121514b614bc50ef8eb055953e7da8a
Merge: 33140a295 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 05:01:41 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 4764415312aae6e9ac2d00e86e84577cb958f1ab
Merge: ed2d0111d 13388ee6a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 04:54:48 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 13388ee6a42943f3f79a9cb488346cef18e272fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 20:30:08 2020 +0200
Various fixes (to coloring and to soft shadows).
commit fbd084a94a067082a87cd6d28b82054709bc9265
Merge: 5a089863b 4fdf6896a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 18:50:38 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/map-colors
commit ed2d0111d994262ae836d84d1fe5a45e4de72a0b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 06:49:27 2020 +0200
Combining colors and LOD.
commit 88342640c6b835114d01c797b89fdede3b0a2108
Merge: 33140a295 5a089863b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:49:20 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 33140a2951b8212725f42c758b277aaec4d888f7
Merge: 4c65a5aed f34d4b379
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:36:21 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 5a089863beb01d4794bbe3580ada47b278715ea2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 03:17:49 2020 +0200
Making maps brighter.
This is probably not the right way to do it, but oh well!
commit 32b2c99109dd486aa922886081068f9c550c83f2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 02:46:36 2020 +0200
Horizon mapping and "layered" map generation.
Horizon mapping is a method of shadow mapping specific to height maps.
It can handle any angle between 0 and 90 degrees from the ground, as
long as know the horizontal direction in advance, by remembering only a
single angle (the "horizon angle" of the shadow map). More is explained
in common/src/msg/server.rs. We also remember the approximate height of
the largest occluder, to try to be able to generate soft shadows and
create a vertical position where the shadows can't go higher.
Additionally, map generation has been reworked. Instead of computing
everything from explicit samples, we pass in sampling functions that
return exactly what the map generator needs. This allows us to cleanly
separate the way we sample things like altitudes and colors from the map
generation process. We exploit this to generate maps *partially* on the
server (with colors and rivers, but not shading). We can then send the
partially completed map to the client, which can combine it with shadow
information to generate the final map. This is useful for two reasons:
first, it makes sure the client can apply shadow information by itself,
and second, it lets us pass the unshaded map for use with level of
detail functionality.
For similar reasons, river generation is split
out into its own layer, but for now we opt to still generate rivers on
the server (since the river wire format is more complicated to compress
and may require some extra work to make sure we have enough precision to
draw rivers well enough for LoD).
Finally, the mostly ad-hoc lighting we were performing has been (mostly)
replaced with explicit Phong reflection shading (including specular
highlights). Regularizing this seems useful and helps clarify the
"meaning" of the various light intensities, and helps us keep a more
physically plausible basis. However, its interaction with soft shadows
is still imperfect, and it's not yet clear to me what we need to do to
turn this into something useful for LoD.
commit f8926a5737ddc51f3d585c651a64c43677aae0f4
Merge: a1aee931e 875ae6ced
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Mar 13 13:32:42 2020 +0100
Merge remote-tracking branch 'origin/master' into sharp/map-colors
commit 4c65a5aed353b119aea65a2aaeb94549b67beb42
Author: Treeco <5021038-Treeco@users.noreply.gitlab.com>
Date: Mon Feb 24 16:48:05 2020 +0000
Made LOD setting slider exponential
commit 2fa7b2d20d7233dc8bfd64f9f7f54617575248f1
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 17:49:53 2020 +0000
Added mist to LoD
commit aab059a450b5f635777129ff82cc15b662965c3c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 15:14:06 2020 +0000
Added LoD slider
commit 779c36b538121c5ade3633ae5cb67bb14c8c3877
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:54:55 2020 +0000
Reduced cost of vertex pushing
commit 9fea150473906b166365b738ebcea07c697daf3d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:38:53 2020 +0000
Fixed maths, improved LoD resolution
commit 5481df38fea5bf183ff376a3337179cfaa5233dc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 11:22:50 2020 +0000
Dynamically relocate LoD vertices to enhance details
commit a3e36a50ababd615da7db1b26158c7906a5def01
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 18:13:51 2020 +0000
Simpler terrain spiral rendering
commit 255f450ae9ac8763db4bede075fb409161ed57cc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:53:17 2020 +0000
Better LoD precision
commit 3d027aebe812a5b8658a4eb8123dc9f61b3776d2
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:04:03 2020 +0000
Better falloff
commit be775c9484b457b2c0b1a494aec03392d0c70e76
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 15:30:45 2020 +0000
Applied good ideas from experimental branch
commit 58587b68545a23c5c04ab4574a4b94b3bc982246
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 16:15:13 2020 +0000
Minor fixes to LoD merging
commit 7b42aebd709c14df2db766aad61d9280ad24d84d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 15:04:44 2020 +0000
Capped LoD dragging
commit 8aafc559f87124e1ea5ca6e3ddc2aa0c242d793c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:54:37 2020 +0000
Better blending between LoD and terrain border
commit edd3455d5161792d87ddc8eadc0ecbad5532b284
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:40:19 2020 +0000
Fixed LoD z depth, added sea level offset
commit b9b06744620114dd5556e73f64fa93c145503a7c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:27:43 2020 +0000
Better LoD smoothing
commit a1aee931e790431560cd2d953ad61d9497072afd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Feb 21 14:52:17 2020 +0100
Adding shadows.
commit 2400786c13dd891c131ed86d48d05df516a8a778
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 13:48:40 2020 +0000
Use world map as LoD source
commit dbf650f504a4c25fbbc2096ac3616c736bf52d23
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Jan 20 00:48:14 2020 +0000
Better clouds at distance
commit 5e6f81b86cdb9730b9b056877b19257075fd5fa8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Jan 19 23:59:02 2020 +0000
sync
commit 745e7540ddb000cc645f612767b337c2ddc3f7c0
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 12:40:48 2019 +0000
Improved cloud falloff mist, faster noise sampling
commit f6a200d0cb866196ba57697466755f9e0c7ea5d8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 10:09:00 2019 +0000
Improved long-range depth precision, removed unnecessary LoD polygons
commit 63d1b2bb2292898d59fb4f4e502201103dfeb86f
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 20:57:46 2019 +0000
Working LoD shader
commit f13d98ee3e58f881e8b978861a67663b59ed91ec
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 11:03:40 2019 +0000
LoD first attempt (stack overflow issue)
2020-08-20 18:34:59 +00:00
|
|
|
|
let map_size_chunks_len_f64 = map_size_lg.chunks().map(f64::from).product();
|
|
|
|
|
let min_epsilon = 1.0 / map_size_chunks_len_f64.max(f64::EPSILON as f64 * 0.5);
|
|
|
|
|
let max_epsilon =
|
|
|
|
|
(1.0 - 1.0 / map_size_chunks_len_f64).min(1.0 - f64::EPSILON as f64 * 0.5);
|
2019-11-19 18:34:52 +00:00
|
|
|
|
|
2020-02-01 20:39:39 +00:00
|
|
|
|
// No NaNs in these uniform vectors, since the original noise value always
|
|
|
|
|
// returns Some.
|
2019-10-16 11:39:41 +00:00
|
|
|
|
let ((alt_base, _), (chaos, _)) = rayon::join(
|
|
|
|
|
|| {
|
(See sharp/lod-history) LOD, shadows, greedy meshing, new lighting, perf
---
Pretty much a Veloren fork at this point. Here's a high level overview of the changes (will be added to CHANGELOG just before merge).
At a high level this MR incorporates roughly two groups of changes.
The first group consists of new game features: more flexible map sizes, level of detail terrain, shadow maps, and a new lighting
engine. This is "feature work" that (mostly) only adds new things to Veloren, and mostly shouldn't affect old stuff.
The second big group of changes are those addressing the fallout from all the new features. These include performance fixes of
various sorts: the addition of multiple graphics options and optimization of the cheap ones to avoid work, switching all voxel
models to use some variant of greedy meshing, switching over much of our CPU-side vector math to exploit SIMD instructions
(coinciding with a fork of `vek`), and a rewrite of how the UI handles text rendering (coinciding with updates to our fork
of `conrod`). Making Veloren's hardcoded colors appear correct under the new lighting engine also required considerably
changes (TODO: Fill in this section when it's complete).
The second category of changes often heavily touches code owned by other people, including frequently modified code "owned" by a
handful of people, so I recommend that this code be reviewed particularly carefully.
---
At a high level (each will be described in more detail below):
- The world map has been refactored.
- The world size is no longer hardcoded (@zesterer).
- The map generation code was made generic to allow using it outside of the `world` crate (@zesterer).
- On world creation, we now compute *horizon maps* (@zesterer).
- The way we pass the world from the server to the client has been updated (@xMAC94x).
- Artifacts related to image rotation were fixed (@imbris).
- Multiflow rivers were enabled (@zesterer).
- In the process of making changes related to the world map, various incidental fixes and optimizations were required.
- The new *level of detail* feature was added (@zesterer wrote part of this and has checked out the rest).
- A new LOD terrain rendering step was added to the pipeline.
- The LOD terrain quality was made configurable via a graphics setting.
- Horizon maps were used to cast shadows from LOD chunks on both LOD and non-LOD terrain.
- A "voxelization" effect was incorporated into rendered LOD terrain to make it blend better into the world.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Veloren's lighting has been completely overhauled (@zesterer has already checked most of this out).
- A semi-accurate index of refraction was assigned to our materials.
- A new, more realistic, physically based approach to lighting was used using the *Ashikhmin Shirley* BRDF.
- We emulate *atmospheric scattering* using equations designed for measuring solar panel light exposure.
- We attempt to compute *realistic light attenuation* in water using its real material properties.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Point and directional lights now cast realistic shadows, using *shadow mapping.* (@imbris, @zesterer, @Treeco, @YuriMomo)
- Point light shadow maps were added to the rendering pipeline, using geometry shaders and *seamless cube maps*.
- Directional light shadows were added to the rendering pipeline, using LISPSM together with disabling *depth clamping*.
- "Shadow-only" chunks and NPCs were added to prevent shadows from models behind you from disappearing.
- In the process of making changes related to shadow maps, various incidental fixes and optimizations were required.
The addition of shadow maps, LOD terrain, and the new lighting all led to significant performance degradation, on top of other
changes happening in master. Therefore, a large number of performance improvements were also needed:
- The graphics options were made much more flexible and configurable, and shaders were optimize.
- New options were provided for how to render lights and shadows (@Pfauenauge, @zesterer).
- Graphic setting storage and configuration were overhauled to make adding new features easier (@Pfauenauge, @imbris).
- Shaders were rewritten to utilize GLSL's preprocessor to avoid overhead (@zesterer, @YuriMomo).
- In the process of making changes related to providing additional rendering options, various incidental fixes and optimizations were required.
- Voxel model creation was switched to use *greedy meshing.*
- A new voxel meshing method, greedy meshing, was added (@imbris).
- Uses of the older meshing methods were migrated to use greedy meshing (@imbris, @jshipsey, @Pfauenauge).
- New restrictions were added to terrain, figure, and sprites to future proof them for further optimizations (@jshipsey, @Pfauenauge, @zesterer).
- Most positions are now relative to either chunk or player position for better precision (@imbris, @zesterer, @scottc).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- Animation and terrain math were switched to use SIMD where possible.
- Fixes were made to vek to make its SIMD feature usable for us (@zesterer, @imbris).
- The interface and types used in bone animation were changed in various ways (@jshipsey, @Snowram, @Pfauenauge).
- Redundant code generation for body animation is now partly taken care of by a macro (@jshipsey, @Snowram, @Pfauenauge).
- Animation code was modified to to use vek's SIMD representation where possible (@jshipsey, @Snowram, @Pfauenauge).
- Terrain meshing code and shadow map math were also modified to use vek's SIMD representation (@imbris).
- SIMD instruction generation was enabled (@YuriMomo, @jshipsey, @Snowram, @imbris, @Angelonfira, @xMAC94x).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- The way we cache glyphs was completely refactored, fixed, and optimized.
- Our fork of `conrod` was optimized in various ways (@imbris).
- Our fork of `conrod` now exposes whether a widget was updated during the current frame (@imbris).
- Our use of the glyph cache was rewritten for correctness (@imbris).
- A *text cache* was introduced that lets us skip remeshing glyphs that have not changed (@imbris).
- Various changes were made to reduce pressure on the glyph cache, with more planned (@imbris, @Pfauenauge).
- In the process of making changes related to the glyph cache, various incidental fixes and optimizations were required.
- Colors were changed to keep Veloren's look consistent with master.
- Some older tree models were brought back (@Pfauenauge).
- TODO(@Sharp): All hardcoded colors were extracted and made hotloadable.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Hardcoded colors were fixed to conform to Veloren's style.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Color models were fixed to conform to Veloren's style.
A detailed description of the involved changes follows.
---
- The world size is no longer hardcoded. All functions dependent on world size now take a `WorldSizeLg`, which holds the base 2 logarithm of each actual world dimension and is guaranteed to maintain certain properties (outlined in `common/src/terrain/map.rs`). Additionally, many utility functions that utilize the world size were moved into `common` as well (mostly `common/src/terrain/mod.rs`). Finally, the world map format was updated in order to store its size explicitly, with a migration path from the old format that should work whenever the old formatted map was a square (practically always). See `world/src/sim/mod.rs` for these changes.
- The map generation code was made generic to allow using it outside of the `world` crate. The parts of the map generating code that do not need to query the world were moved over to `common/src/terrain/map.rs`, allowing them to be used from the client without creating a dependency on `world`. The rest of it was turned into helper functions in `world/src/sim/map.rs`, which can be passed as closures to the generic map generation code to complete its construction. This also means that colors are now passed in separately to the map generation function. See <https://veloren.net/devblog-78/> for more details.
- On world creation, we now compute *horizon maps*. See the function in `world/src/sim/util.rs`.
Given a height map and a plane intersecting that height map, our horizon maps allow us to encode enough information to reconstruct shadows for each point on the height map using only the *horizon angle* (the angle at which the sun starts to become visible). As Veloren's sun only covers one plane, this is sufficient for encoding sun shadows for LOD terrain, by encoding two angles per chunk (one for each 90 degrees the sun covers). We can also use this for the moon, if we want, since the moon follows the same path. Additionally, we store the *height* of the furthest occluder, to try to make the shadows volumetric; so this means 4 bytes in total for each chunk.
Support for horizon maps has been merged into the map functionality in common as well.
- The way we pass the world from the server to the client has been updated. Rather than passing the prerendered map, we instead pass three maps with values for each chunk; one with the color information, a second with altitude information, and a third with horizon map information. We then reconstruct the map on the client, together with some additional information we send from the server (like the sea level and maximum height). See `common/src/msg/server.rs` for a detailed description of the format of `WorldMapMsg`, and `server/src/libr.rs` and `client/src/lib.rs` for details of the map construction and parsing.
- Artifacts related to image rotation were fixed. See the commit message for commit SHA `cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e` for a detailed explanation. This involved changes to shaders, the addition of a new type of graphic (also reflected in the graphic cache) that allows specifying a border color (which automatically makes the associated texture immutable), and some related fixes. I reproduce the first two paragraphs of the MR description as well:
```
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
```
- Multiflow rivers were enabled.
This does not really need to be part of this MR, and would be easy to revert, but since it seemed to provide a nice improvement it's currently packaged with it.
We already computed multiple outflows from each chunk for erosion purposes long before this MR.
However, we never modified river rendering to be able to handle this case (just a single downhill river flow is complex enough!) so this was not exposed when deciding which chunks were rivers.
Now that
- In the process of making changes related to the world map, various incidental fixes and optimizations were required. Some examples of fixes include making sure terrain is never lowered to below sea level (to make the shadow maps report correct values), fixing map altitudes and colors to understand things like cliffs and "block level" coloring (that doesn'te xist on the column level), and fixing a crashbug when rendering images for the UI where source pixels are strongly rectangular. Some examples of related performance fixes include avoiding allocating a fresh vector for all the maps (i.e. copying it over to change the format from `[u32; n]` to `DynamicImage` and then copying again to convert to `RgbaImage`), and instead using the `gfx::memory::slice` function to accomplish the same thing. These sorts of changes are spread all arond the code.
This includes the additon of a new scene, `voxygen/src/scene/lod.rs`, a new pipeline `voxygen/src/render/pipeline/lod_terrain.rs`, and new shaders `assets/vxygen/shaders/lod-terrain-vert.glsl` and `assets/vxygen/shaders/lod-terrain-frag.glsl`, as well as associated changes to the renderer in `voxygen/src/render/renderer.rs`.
The main idea behind our initial approach to LOD was to take the world data we now get from the server (altitude, color, and horizon mapping).
- Some previously computed values were turned into shader uniforms for better prediction on weak processors. (@zesterer)
- Calls to power or trig functions were removed or replaced with multiplications, where possible.
- After some deliberation
- To properly handle sprite "waving" for nearby sprites,
We explicitly designed the greedy meshing system with figures and sprites in mind.
In both cases, we want to be able to *efficiently* pack many different models into the same texture, especially in cases where we know
we will either not be removing any of the grouped-together from the models from the texture, or will remove all of them at once (so
they can be packed into some specific subtexture).
For sprites, since we know every model in advance and never intend to deallocate them, we currently pack them all as efficiently as
possible into one giant tetxure atlas. However, in the future we might opt to pack them slightly less efficiently in exchange for
shrinking the sprite vertex size.
For figures, we pack all the textures for each *model* into the same atlas.
is a global texture atlas used for every sprite, and for figures which is why we have the ability to mesh multiple
models to the same texture area (using the simple texture atlas allocator) without requiring intermediate vector allocations.
This is accomplished by delaying the time when we actually write the color and light data to the texture until *after* all the
model vertices have been meshed; then, we can just allocate the whole color/light array at once, making the atlas we use an
exact fit. In computer science-y terms, we accomplish this delay by, after we perform the initial greedy meshing (without
texture information), not continuing to create the texture data, but instead constructing a *continuation*--that is, a function
that, when called, will execute the rest of the computation. We push this continuation (which in Rust terms is a `FnOnce` closure
that takes the `ColLightsInfo` that it is supposed to write to as context) onto a
onto a vector
resizing. To allow for suspended writes to texture data, Rust pointed out to me that the continuation that would eventually write the color and light data to the texture atlas (the one that is shared by all models sharing the same greedy mesher) would have to *own* whatever data it mshed. Because we often generate the model data to mesh as a temporary in `voxygen/src/load.rs`, the
- Matrix multiplications in the shader were reduced for figure data (@zesterer).
- Vertex "waves" for fluid data were removed.
- Terrain "bending" near edges was removed.
- Scaling was fixed to make sure empty space was not introduced in a space previously occupied by a block. It was also changed to take ownership of its voxel data,
rather than sharing it, to let it be used with meshing.
- Rust's nightly version was bumped in order to use the `array_map` function, which lets us reuse more code between the simple map and `FigureModelCache`.
- PositionedGlyph::standalone.
---
I tried to cite sources in many cases[^realtime],[^lloyd],[^lispsm],[^pbrt],[^greedy],[^tjunctions]
where I needed features from elsewhere but I am particularly grateful for the following resources,
esepcially where they have accompanying source code. I linked all of them that are accessible to the public (those that are not were
obtained through legal means).
[^realtime]: Eisemann, Elmar, Michael Schwarz, Ulf Assarsson, Michael Wimmer. Real-Time Shadows. A K Peters/CRC Press (T&F), 20160419.
[^lloyd]: Lloyd,B. 2007. [Logarithmic perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). PhD thesis, University of North Carolina.
[^lispsm]: Wimmer, M., Scherzer, D., and Purgathofer, W. 2004. [Light space perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). In Proceedings of Eurographics Symposium on Rendering 2004, pp. 143– 152.
[^pbrt]: Pharr, Matt, et al. [http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf](Physically Based Rendering: From Theory to Implementation). Third edition, Morgan Kaufmann Publishers/Elsevier, 2017.
[^greedy]: mikolalysenko. “Meshing in a Minecraft Game.” 0 FPS, 30 June 2012, <https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/>.
[^tjunctions]: blackflux. “Meshing in Voxel Engines – Part 1.” Blackflux.Com, 23 Feb. 2014, <https://blackflux.wordpress.com/2014/02/23/meshing-in-voxel-engines-part-1/>.
I am also especially grateful to Khronos, Wikiepdia, and stackoverflow for answering many of my specific questions while writing the MR.
---
Squashed commit of the following:
commit 300505e7305a2fdac722a808ee8538323f215f39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 18:46:25 2020 +0200
Fixing cargo doc and typo in CHANGELOG.
commit ec0aeb18e8499d7d84ef818331b4b65c3d76cea6
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 15:38:50 2020 +0200
Hopefully final commit for the LOD branch.
commit 5e8ea0b1eaac02903a02feb2eb038d195de4872f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 10:14:26 2020 +0200
Falling back to power as stopgap.
commit e44a1cbf46504ee9931a01bdc9033e145500d557
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 09:25:41 2020 +0200
Address imbris feedback.
Temporarily disables shiny water, lowers max VD.
These restrictions will be lifted soon after merging.
commit 561e25778a108ac3712f5ec2ce3a51234c4430d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 08:31:13 2020 +0200
Tweaking shaders a bit.
commit 7d19259078ce0dd7b3742ad7d0cb3fab3ece3fdc
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:59:43 2020 +0200
Fix view example as well.
commit 051cd4934e0fad2c0b15db4380a4189fa318679f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:29:06 2020 +0200
Fix meshing benchmark.
commit c95e07db3b4dcca285678985e65e31b927cb1c61
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 05:46:22 2020 +0200
Address MR feedback, fix scene clouds.
commit 1bfb816cabdb3ffc1e507a009c2d98696b4b573a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:39:36 2020 +0200
Incorporating Pfau's figure color changes.
New eyes and new humanoid colors.
commit 3f9b89a3ac7b3356b1dba0d1a8f6541357f81469
Merge: e2f5162e4 62c53963a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:29:41 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit e2f5162e4f96f4124aa43488f7245d341b3dcfd4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:28:38 2020 +0200
World colors are all hotloadable.
They live in assets/world/style/colors.ron.
Only a small handful of hardcoed colors remain in World; they are either
part of the map, or difficult to disentangle from the rest of the
computation. Comments are made where appropriate.
commit 62c53963abe1975009d34a8f9515a355bef24f31
Author: Marcel Märtens <marcel.cochem@googlemail.com>
Date: Wed Aug 19 15:59:00 2020 +0200
replace pretty_env_logger with tracing
commit 5b1625f99d9586fe80e2232f583ec5af9f953099
Merge: d71003acd 4942b5b39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:15:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit d71003acdabeff970b3928e97c26af6847b5b78e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:14:34 2020 +0200
Hotloading colors, part 1: colors in common.
Currently, this just entails humanoid colors. There are only three
colors not handled; the light emitter colors in
common/src/comp/inventory/item/tool.rs. These don't seem important
enough to me to warrant making hotloadable, at least not right now, but
if it's needed later we can always add them to the file.
commit 63b5e0e553eb2ea49276f192a6fc7dd65254270d
Merge: c32b337a4 6d2c4b9c1
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 13:05:37 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c32b337a46e10d9de473d178a94a3ccd61c39bb3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:52:04 2020 +0200
Fixing LOD grid, for real.
commit a166ae0360395387e09fb35a1f84210c2ce5ec24
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:28:05 2020 +0200
Addressing imbris's initial feedback.
Fixes two minor bugs: explosion particles were no longer spawning
randomly, and LOD grids were not perfectly even.
commit 4cbad004f44060994252dd3d38647a14a589712f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:27:58 2020 +0200
Bumping nightly per request.
commit 548680276aac77c25d43d16b5622f847d474dbef
Merge: acc098604 8f8b20c91
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:26:06 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit acc0986040589a3492f88a740bc3c3fc693b26d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:28:32 2020 +0200
Lower resolution due to lying drivers.
commit d3b878de2a52c358d2944a6bbd0555dad7fbdb10
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:15:38 2020 +0200
Fix issues msh encountered with Intel 4600.
commit 10245e0c1b0cb6fae10d86409435364edc6102ef
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 21:15:02 2020 +0200
Merge more models into one mesh than we did previously.
commit 3155c31e663c52ae5c3a53d5fb5665892a1a498a
Merge: 7204cc8a7 3c199280e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:35:22 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7204cc8a7a4f74a30306bd205d9834fee4bb944f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:34:43 2020 +0200
Fix not yet done NPC animations.
This forces them all to be the idle animation if not specified.
This fixes issues where you'd have giant NPCs in water.
commit bc83360f2a08918f19d417b5f772e1ff554dba08
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 19:36:37 2020 +0200
Try to fix some bugs:
- Z fighting with LOD terrain and water.
- Audio SFX not playing.
commit 1fd104aa603bf3781b6526a5cada46aeca3049dd
Merge: 862df3c99 7c2c392a3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 12:02:31 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 862df3c9976c4da9bd7cfd784f1a85973127968a
Merge: 0a4218ed9 75c1d4401
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 05:52:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0a4218ed9d541a2b34c133351bea38a99ddf4ea7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 22:27:14 2020 +0200
Fix particle depth.
commit f51dfdeb442d0dd5243dd2f344fa4be295bd0875
Merge: c6251a956 5e6dc0471
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:19:04 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit c6251a956ad376400dca5c23420cf8d213dc8fdf
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:15:46 2020 +0200
Cache figures more intelligently.
Cache figures for longer, and don't cache character states for the
player except where they actually affect the rendered model.
commit 0ed801d5404982c6fb63b1eaa4567d908b294c9d
Merge: c11b9bdf0 eea64f78f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 16:32:24 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c11b9bdf0a53bf9884d2f5a48fec9b01d582df1a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 11:47:15 2020 +0200
Remove unneeded Clippy annotation.
commit 16aa9ef40af56d69289d00aafb3deadfb8bd4f35
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 8 00:53:02 2020 +0200
Fix hotloading and Clippy.
commit 3dc973e0be5b758da1e9805eb764ad401374cd0c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 23:50:27 2020 +0200
Major speedups with SIMD.
commit fba64a7d93d5a96077ce87287bbce6ab9b7fbcae
Merge: 76429d00e d1e10b178
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:19 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 76429d00eea00d212fbd672a84ee91e75b19b938
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:10 2020 +0200
Add clippy.toml.
commit c79f512f84dbb83cb82b7954db68ff241dfd8e41
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 11:55:20 2020 +0200
Fix all clippy issues, clean up Rust code.
commit 6f90e010b3fbefb53b0d632e819931350015b6b8
Merge: 77a8c7c26 5929cfa5c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:30 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 77a8c7c267d3f44a1a62bd6b2274359973c5e4d4
Merge: b44e44232 44febaabd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:10 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 5929cfa5c713aa392110bbb62407f76caf53c3df
Author: jshipsey <jshipsey18@gmail.com>
Date: Thu Aug 6 20:47:27 2020 -0400
fixed in-hand arrow bug
commit b44e442325d828f1cd564d66908f89d09e80474b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 6 13:40:35 2020 +0200
Miscellaneous performance improvements.
commit be37acf287c1360d8085862526ac3365ffd1d768
Merge: 125d7fc6c c11876547
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 05:49:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 125d7fc6c4dcd8c8c5f27b8268a4d64f409f3644
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 04:55:31 2020 +0200
Abstract over simd vs. repr_c vectors.
Also some minor improvements to Event size.
commit d4d4956e9252e1241ce110b2aa85076c6b1e2a23
Merge: 5f3b7294a aced5f979
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:56:54 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 5f3b7294af1f8533edc2620b58863c248e2b07af
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:43:52 2020 +0200
Fix formatting issues I missed before.
commit a428a3ebba70dcab63dd0f8cd983120c90617271
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:41:51 2020 +0200
Fix clippy warnings, part 1.
There aer still a bunch of type too complex and
function takes too many arguments warnings that I'll fix later
(or ignore, since in the one case I did fix a function takes too
many arguments warning I think it made the code *less* readable).
commit ba54307540ed8a937ac08209730284fc653af85b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 30 13:22:42 2020 +0200
Fix light animations so they are removed when the light turns off.
commit 7e0f4bcbf0f4717145d8beac40d52e3acebbe2aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 21:10:20 2020 +0200
Fix crash in edge case for pixel art.
commit 56da06f7a351e2b949e9b014a90b974d511a0924
Merge: cf74d55f2 9f53a4a19
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:56:52 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:29:52 2020 +0200
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
The first concern was addressed by fixing the dimensions of the map
images drawn from the UI (so that we always use a square source
rectangle, rather than a rectangular one according to the dimensions of
the map). We also fixed the way rotation was done in the fragment
shader for north-facing sources to make it properly handle aspect ratio
(this was already done for north-facing targets). Together, these fix
rendering issues peculiar to rectangular maps.
The second and third concerns were jointly addressed by adding an
optional border color to every 2D image drawn by the UI. This turns
out not to waste extra space even though we hold a full f32 color
(to avoid an extra dependency on gfx's PackedColor), since voxel
images already take up more space than Optiion<[f32; 4]> requires.
This is then implemented automatically using the "border color"
wrapping method in the attached sampler.
Since this is implemented in graphics hardware, it only works (at
least naively) if the actual image bounds match the texture bounds.
Therefore, we altered the way the graphics cache stores images
with a border color to guarantee that they are always in their own
texture, whose size exactly matches their extent. Since the easiest
currently exposed way to set a border color is to do so for an
immutable texture, we went a bit further and added a new "immutable"
texture storage type used for these cases; currently, it is always
and automatically used only when there is a specified border color,
but in theory there's no reason we couldn't provide immutable-only
images that use the default wrapping mdoe (though clamp to border
is admittedly not a great default).
To fix the maps case specifically, we set the border color to a
translucent version of the ocean border color. This may need
tweaking going forward, which shouldn't be hard.
As part of this process, we had to modify graphics replacement to
make sure immutable images are *removed* when invalidated, rather
than just having a validity flag unset (this is normally done by
the UI to try to reuse allocations in place if images are updated
in benign ways, since the texture atlases used for Ui do not
support deallocation; currently this is only used for item images,
so there should be no overlap with immutable image replacement,
so this was purely precautionary).
Since we were already touching the relevant code, we also updated
the image dependency to a newer version that provides more ways
to avoid allocations, and made a few other changes that should
hopefully eliminate redundant most of the intermediate buffer
allocations we were performing for what should be zero-cost
conversions. This may slightly improve performance in some
cases.
commit ad18ce939940a8c697270f6e9b94db9942fd8295
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 13:21:09 2020 +0200
Fix continent scale hack.
commit 36b1cb074f5b195aebd7dbbc3da7f0246a1a18ec
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 12:11:40 2020 +0200
Enable loading different sized maps without a recompile.
We may want to tweak the effects of the continent_scale_hack.
commit 13b6d4d534cc4814b7cb3294ca41bbfea0a6b186
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 10:55:48 2020 +0200
Removing WORLD_SIZE, part 1.
Erased almost every instance of WORLD_SIZE and replaced it with a local
power of two, map_size_lg (which respects certain invariants; see
common/src/terrain/map.rs for more details about MapSizeLg). This also
means we can avoid a dependency on the world crate from client, as
desired.
Now that the rest of the code is not expecting a fixed WORLD_SIZE, the
next step is to arrange for maps to store their world size, and to use
that world size as a basis prior to loading the map (as well, probably,
as prior to configuring some of the noise functions).
commit 30b1d2c6428230a9eaa0d749cdcbbd6f1cbccd78
Merge: 7d56ba31b 1377b369f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:58 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 7d56ba31b445441461b28a07fc495d7d4f047c17
Merge: 2101113b4 598f14b25
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 1377b369f6db2258e910d467a5740f31789e3ded
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sun Jul 19 23:25:38 2020 +0200
more saturated pumpkins
commit ae8d50527f93bb0616c2ad46ce4dacb63bc37c6d
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sat Jul 18 20:29:56 2020 +0200
acacia models
commit 2101113b467e691de787392d7f20f1745f5637bd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 18 18:55:25 2020 +0200
Higher detail LOD.
commit add2cfae04b4385fa5590e11e2bd5229d9dee0aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 16 01:57:39 2020 +0200
Revert some irrelevant stuff.
commit 2e2ab3dc1eaa59a4aef7f8d34a53d8aae4c8553a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 15 13:30:49 2020 +0200
Fixing various things about shadows.
* Correcting optimal LISPSM parameter.
* Figure shadows are cast when they're not visible.
* Chunk shadows stay cast until you look away.
* Seamless cubemaps for point lights.
* Etc.
commit 6c31e6b56217274285b597af297036691ea5d897
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 19:50:26 2020 +0200
Fix shadow creation.
commit 6332cbe006115ae205597529cd8bbccd146c2cca
Merge: be438657c 930e0028b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:47:00 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit be438657c33d7b5bfb0a9582c3ed3fd366637323
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:28:08 2020 +0200
Tweaks to shadows.
Added shadow map resolution configuration, added seamless cubemaps,
documented all existing rendering options, and fixed a few Clippy
errors.
commit 23b4058906013c7d2a40c286e20e32c5fbd897ed
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 10:11:19 2020 +0200
Fix moon, use nonlinear noise for terrain.
Note that the latter has a bit of performance cost.
commit 7fbe5cbfbb9dc29607957b8e62f432a4deed193d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:23:02 2020 +0200
Address lies about max texture size.
commit bcfc62b5e13a1cdd83f57535fde4694720bebfd9
Merge: 75e3626a7 18a08e8fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:22:08 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 75e3626a785919f43fdcf2127c2b10e3e4df2f9f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:21:52 2020 +0200
OpenGL 3.3 minimum.
commit 18a08e8fe2739f02af99a5d2cb4e7c38c49e858b
Author: Monty Marz <m.marzouq@gmx.de>
Date: Tue Jul 7 23:57:52 2020 +0200
settings localization
commit 90c5d1ca3620092bc3ae10b2211489eb1cf6f5e8
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 21:11:48 2020 +0200
Lower near distance.
commit 0e66f02b25aaddaa2dfddbbc89cd67de54a9a7b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 20:09:01 2020 +0200
All sprites sway in the wind now.
commit db1401a6910bf42dcf502462c90038752ff5fbdb
Merge: 69e508d8c e8b4b29d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 19:34:17 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 69e508d8c94d8973033817ca86f357e466fc7c4d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 18:41:37 2020 +0200
Make it easy to switch to SIMD for math.
commit ffe0f5928c7a7e87d00cb5426b3b1d831d7e02fd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 21:21:12 2020 +0200
Fix some issues with underwater rendering.
commit bfda6da42f38fd02c31ee92c81ab785a3e50c2a0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 19:17:59 2020 +0200
Fix some minor display issues.
commit 0ed752e087968cf901301884aaeae698e32ef8a5
Merge: ccc6a06a8 518edcb85
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:14:21 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit ccc6a06a8d4504d6b9f7af7905a414d2ee06ab76
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:04:34 2020 +0200
Some minor changes.
commit 4e020246702889269efe1a191788992164c508d6
Merge: 50a64d927 e05c9267a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 16:17:40 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 50a64d927e6c4f4b0e4688e4cbfca694bc3f922a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 13:07:03 2020 +0200
Fix far plane.
commit 7dd06da34cae8f9ea3b6c889fe965181f3fd3949
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:25:35 2020 +0200
Add shadows.glsl.
commit 618a18c998778bf871b905a74657440fcc384c80
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:10:22 2020 +0200
Adding shadows, greedy meshing, and more.
commit eaea83fe6a5cb1cb0ba8beef888183c718258496
Merge: 267018495 2f89b863e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 22:47:07 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 2670184954a13e4a9e7a4e35ba79aac0c5fac2f7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 21:20:01 2020 +0200
Make civsim and sites deterministic.
For anything in worldgen where you use a HashMap, *please* think
carefully about which hasher you are going to use! This is
especially true if (for some reason) you are depending on hashmap
iteration order remaining stable for some aspect of worldgen.
commit f8376fd5dc72b4a9c2f51a6b4570d59c8b8e9343
Merge: 654f7e049 cdee191dd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 17:53:57 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 654f7e049258d9da27c09608bbe6a46ffa8787e5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed May 20 21:22:30 2020 +0200
Correct backface culling.
commit 560501df05ca725409b0f2e4eb31bdfdc15fd0c7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue May 19 17:22:06 2020 +0200
Greedy messhing for shadows.
commit a4d87e1875ca543436e6bbbeb20348facc5a52d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun May 17 05:59:00 2020 +0200
Shadow maps work for lantern.
commit 243d0837b8a3b08172c9a3c348d964d7ddc2a0a8
Merge: 04382dc28 71dd520cd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:53:13 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 04382dc28632b6c66e8821f6870c0daaa1c1901a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:22:17 2020 +0200
WIP: better graphics config, better LOD, shadow maps.
commit 22ddbad3eb32bfa70f0932176022208fe67ded81
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 18:54:09 2020 +0200
Minor shader fixes.
commit 746a10e8d01ac235f994b0cde78fa48998602a1f
Merge: 0f4a0e763 40ab94673
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 04:02:09 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0f4a0e763db3afbdc4fb0558611f38326ca87151
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 23:03:24 2020 +0200
Switch back to pop-in terrain.
commit dd74fa7e4a53667b38811d7aec58d7f6a68889bb
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 22:58:55 2020 +0200
LOD shading closer to voxel shading.
commit ef67bd58ba0bdaf622b078892d768263b6cba268
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 28 20:49:03 2020 +0200
Experimental underwater lighting.
commit 2c5ad9d07605e80d5fd5679dd3a5d70c605b86a9
Merge: 748279835 303967a6f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 22:35:24 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7482798354eda18c8207950080fc24d443a369de
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 21:59:55 2020 +0200
Replace discard in figure-frag.
commit d83b4ae69be4912f69bf7835f509c68a1c7770a4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:45:57 2020 +0200
Fix sprite lighting, HDR from focus_pos.
commit 0594238004f116274905fa0ed7c2b6c417ed1d29
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:14:10 2020 +0200
Proper HDR from point lights.
commit 48c93d2b41ce5743103d18e76cc228f5ac766492
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 14:01:43 2020 +0200
Brighter ambiance, darker LOD shadows.
commit e0452e895ccfa8a43f368cae3b8b8aedc24dad93
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 13:13:23 2020 +0200
More proper HDR.
commit 4c6da3ed16cfeebb455e40da5f557b4af9a499d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 00:13:10 2020 +0200
Trying LOD noise.
commit 682a3d74c85df5503ffe1fc1cc891bce789df1ad
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 23:11:08 2020 +0200
Fix LOD heights in towns.
commit cc39e5734e8b18f9077bf42e66337c1319dd6b6e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 21:01:23 2020 +0200
More LOD fixes.
commit 8116b21c2e51c836e77894e309ac273caf2917b3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:54:43 2020 +0200
I like this coloring.
commit bc2560ea90b36f4b46190005344232d993043ac3
Merge: 14effdd5d e690efe71
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:48:33 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 14effdd5db8747fcf3eb34f03b46b7792e92d1c5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:24:35 2020 +0200
Re-saturate.
commit 48a643955d4435b78179acba0beb4a979905cc31
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:23:57 2020 +0200
Various fixes.
commit f7b497a0c25f4ad4682c71dd1ed6f608052feb9b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 03:22:49 2020 +0200
Render figures again.
commit 44e4aad48deba8266b9f8bdfd3db096b381f5327
Merge: e6f0a5a98 9ec319a18
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 02:01:04 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit e6f0a5a981a82533ba188fff0a54ce98577bb152
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 24 16:12:20 2020 +0200
Add atmospheric scattering.
commit f2953087f691a8edbc001cb98ebf5059fc6f8ac0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 23 00:01:20 2020 +0200
Fix shadowing for specular reflections.
commit ddd4a67a9799b8d08c7dc0c2bec90621c2bed0e3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Apr 22 22:56:12 2020 +0200
HDR fixes.
commit 1015e60deef3c447381996277df7496707a63bd0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 21 18:25:19 2020 +0200
More lighting changes.
commit 80c264abd111fb237e57843efcb5c071d4f84613
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 13 00:29:59 2020 +0200
Lighting experiments.
commit 8414987e589dd5102bad89762a3adaccc0bfe957
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 9 02:38:40 2020 +0200
WIP -- lighting changes and soft shadows.
commit 9cd2b3fb0d6b49776c6dfe463e4169637250b11a
Merge: c7ea687eb 8b149ad11
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:29 2020 +0200
Merge branch 'sharp/new-lighting' into sharp/small-fixes
commit c7ea687ebbc5aace1b455f134a5bf49ce2c7434a
Merge: 476441531 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:02 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 8b149ad11ad4bb75018fcf9519baec27d1c95951
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:32:39 2020 +0200
Trying out a new lighting model.
commit b0ac9f36f755dd06f7c17c46150568064790864f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 07:56:11 2020 +0200
Use bicubic interpolation for terrain.
commit f6fc9307a121514b614bc50ef8eb055953e7da8a
Merge: 33140a295 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 05:01:41 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 4764415312aae6e9ac2d00e86e84577cb958f1ab
Merge: ed2d0111d 13388ee6a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 04:54:48 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 13388ee6a42943f3f79a9cb488346cef18e272fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 20:30:08 2020 +0200
Various fixes (to coloring and to soft shadows).
commit fbd084a94a067082a87cd6d28b82054709bc9265
Merge: 5a089863b 4fdf6896a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 18:50:38 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/map-colors
commit ed2d0111d994262ae836d84d1fe5a45e4de72a0b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 06:49:27 2020 +0200
Combining colors and LOD.
commit 88342640c6b835114d01c797b89fdede3b0a2108
Merge: 33140a295 5a089863b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:49:20 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 33140a2951b8212725f42c758b277aaec4d888f7
Merge: 4c65a5aed f34d4b379
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:36:21 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 5a089863beb01d4794bbe3580ada47b278715ea2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 03:17:49 2020 +0200
Making maps brighter.
This is probably not the right way to do it, but oh well!
commit 32b2c99109dd486aa922886081068f9c550c83f2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 02:46:36 2020 +0200
Horizon mapping and "layered" map generation.
Horizon mapping is a method of shadow mapping specific to height maps.
It can handle any angle between 0 and 90 degrees from the ground, as
long as know the horizontal direction in advance, by remembering only a
single angle (the "horizon angle" of the shadow map). More is explained
in common/src/msg/server.rs. We also remember the approximate height of
the largest occluder, to try to be able to generate soft shadows and
create a vertical position where the shadows can't go higher.
Additionally, map generation has been reworked. Instead of computing
everything from explicit samples, we pass in sampling functions that
return exactly what the map generator needs. This allows us to cleanly
separate the way we sample things like altitudes and colors from the map
generation process. We exploit this to generate maps *partially* on the
server (with colors and rivers, but not shading). We can then send the
partially completed map to the client, which can combine it with shadow
information to generate the final map. This is useful for two reasons:
first, it makes sure the client can apply shadow information by itself,
and second, it lets us pass the unshaded map for use with level of
detail functionality.
For similar reasons, river generation is split
out into its own layer, but for now we opt to still generate rivers on
the server (since the river wire format is more complicated to compress
and may require some extra work to make sure we have enough precision to
draw rivers well enough for LoD).
Finally, the mostly ad-hoc lighting we were performing has been (mostly)
replaced with explicit Phong reflection shading (including specular
highlights). Regularizing this seems useful and helps clarify the
"meaning" of the various light intensities, and helps us keep a more
physically plausible basis. However, its interaction with soft shadows
is still imperfect, and it's not yet clear to me what we need to do to
turn this into something useful for LoD.
commit f8926a5737ddc51f3d585c651a64c43677aae0f4
Merge: a1aee931e 875ae6ced
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Mar 13 13:32:42 2020 +0100
Merge remote-tracking branch 'origin/master' into sharp/map-colors
commit 4c65a5aed353b119aea65a2aaeb94549b67beb42
Author: Treeco <5021038-Treeco@users.noreply.gitlab.com>
Date: Mon Feb 24 16:48:05 2020 +0000
Made LOD setting slider exponential
commit 2fa7b2d20d7233dc8bfd64f9f7f54617575248f1
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 17:49:53 2020 +0000
Added mist to LoD
commit aab059a450b5f635777129ff82cc15b662965c3c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 15:14:06 2020 +0000
Added LoD slider
commit 779c36b538121c5ade3633ae5cb67bb14c8c3877
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:54:55 2020 +0000
Reduced cost of vertex pushing
commit 9fea150473906b166365b738ebcea07c697daf3d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:38:53 2020 +0000
Fixed maths, improved LoD resolution
commit 5481df38fea5bf183ff376a3337179cfaa5233dc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 11:22:50 2020 +0000
Dynamically relocate LoD vertices to enhance details
commit a3e36a50ababd615da7db1b26158c7906a5def01
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 18:13:51 2020 +0000
Simpler terrain spiral rendering
commit 255f450ae9ac8763db4bede075fb409161ed57cc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:53:17 2020 +0000
Better LoD precision
commit 3d027aebe812a5b8658a4eb8123dc9f61b3776d2
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:04:03 2020 +0000
Better falloff
commit be775c9484b457b2c0b1a494aec03392d0c70e76
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 15:30:45 2020 +0000
Applied good ideas from experimental branch
commit 58587b68545a23c5c04ab4574a4b94b3bc982246
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 16:15:13 2020 +0000
Minor fixes to LoD merging
commit 7b42aebd709c14df2db766aad61d9280ad24d84d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 15:04:44 2020 +0000
Capped LoD dragging
commit 8aafc559f87124e1ea5ca6e3ddc2aa0c242d793c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:54:37 2020 +0000
Better blending between LoD and terrain border
commit edd3455d5161792d87ddc8eadc0ecbad5532b284
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:40:19 2020 +0000
Fixed LoD z depth, added sea level offset
commit b9b06744620114dd5556e73f64fa93c145503a7c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:27:43 2020 +0000
Better LoD smoothing
commit a1aee931e790431560cd2d953ad61d9497072afd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Feb 21 14:52:17 2020 +0100
Adding shadows.
commit 2400786c13dd891c131ed86d48d05df516a8a778
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 13:48:40 2020 +0000
Use world map as LoD source
commit dbf650f504a4c25fbbc2096ac3616c736bf52d23
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Jan 20 00:48:14 2020 +0000
Better clouds at distance
commit 5e6f81b86cdb9730b9b056877b19257075fd5fa8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Jan 19 23:59:02 2020 +0000
sync
commit 745e7540ddb000cc645f612767b337c2ddc3f7c0
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 12:40:48 2019 +0000
Improved cloud falloff mist, faster noise sampling
commit f6a200d0cb866196ba57697466755f9e0c7ea5d8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 10:09:00 2019 +0000
Improved long-range depth precision, removed unnecessary LoD polygons
commit 63d1b2bb2292898d59fb4f4e502201103dfeb86f
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 20:57:46 2019 +0000
Working LoD shader
commit f13d98ee3e58f881e8b978861a67663b59ed91ec
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 11:03:40 2019 +0000
LoD first attempt (stack overflow issue)
2020-08-20 18:34:59 +00:00
|
|
|
|
uniform_noise(map_size_lg, |_, wposf| {
|
2020-02-01 20:39:39 +00:00
|
|
|
|
// "Base" of the chunk, to be multiplied by CONFIG.mountain_scale (multiplied
|
|
|
|
|
// value is from -0.35 * (CONFIG.mountain_scale * 1.05) to
|
|
|
|
|
// 0.35 * (CONFIG.mountain_scale * 0.95), but value here is from -0.3675 to
|
|
|
|
|
// 0.3325).
|
2019-10-16 11:39:41 +00:00
|
|
|
|
Some(
|
|
|
|
|
(gen_ctx
|
|
|
|
|
.alt_nz
|
|
|
|
|
.get((wposf.div(10_000.0)).into_array())
|
|
|
|
|
.min(1.0)
|
2020-01-22 14:31:10 +00:00
|
|
|
|
.max(-1.0))
|
2019-12-03 01:07:44 +00:00
|
|
|
|
.sub(0.05)
|
2020-01-22 14:31:10 +00:00
|
|
|
|
.mul(0.35),
|
2019-10-16 11:39:41 +00:00
|
|
|
|
)
|
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
|| {
|
(See sharp/lod-history) LOD, shadows, greedy meshing, new lighting, perf
---
Pretty much a Veloren fork at this point. Here's a high level overview of the changes (will be added to CHANGELOG just before merge).
At a high level this MR incorporates roughly two groups of changes.
The first group consists of new game features: more flexible map sizes, level of detail terrain, shadow maps, and a new lighting
engine. This is "feature work" that (mostly) only adds new things to Veloren, and mostly shouldn't affect old stuff.
The second big group of changes are those addressing the fallout from all the new features. These include performance fixes of
various sorts: the addition of multiple graphics options and optimization of the cheap ones to avoid work, switching all voxel
models to use some variant of greedy meshing, switching over much of our CPU-side vector math to exploit SIMD instructions
(coinciding with a fork of `vek`), and a rewrite of how the UI handles text rendering (coinciding with updates to our fork
of `conrod`). Making Veloren's hardcoded colors appear correct under the new lighting engine also required considerably
changes (TODO: Fill in this section when it's complete).
The second category of changes often heavily touches code owned by other people, including frequently modified code "owned" by a
handful of people, so I recommend that this code be reviewed particularly carefully.
---
At a high level (each will be described in more detail below):
- The world map has been refactored.
- The world size is no longer hardcoded (@zesterer).
- The map generation code was made generic to allow using it outside of the `world` crate (@zesterer).
- On world creation, we now compute *horizon maps* (@zesterer).
- The way we pass the world from the server to the client has been updated (@xMAC94x).
- Artifacts related to image rotation were fixed (@imbris).
- Multiflow rivers were enabled (@zesterer).
- In the process of making changes related to the world map, various incidental fixes and optimizations were required.
- The new *level of detail* feature was added (@zesterer wrote part of this and has checked out the rest).
- A new LOD terrain rendering step was added to the pipeline.
- The LOD terrain quality was made configurable via a graphics setting.
- Horizon maps were used to cast shadows from LOD chunks on both LOD and non-LOD terrain.
- A "voxelization" effect was incorporated into rendered LOD terrain to make it blend better into the world.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Veloren's lighting has been completely overhauled (@zesterer has already checked most of this out).
- A semi-accurate index of refraction was assigned to our materials.
- A new, more realistic, physically based approach to lighting was used using the *Ashikhmin Shirley* BRDF.
- We emulate *atmospheric scattering* using equations designed for measuring solar panel light exposure.
- We attempt to compute *realistic light attenuation* in water using its real material properties.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Point and directional lights now cast realistic shadows, using *shadow mapping.* (@imbris, @zesterer, @Treeco, @YuriMomo)
- Point light shadow maps were added to the rendering pipeline, using geometry shaders and *seamless cube maps*.
- Directional light shadows were added to the rendering pipeline, using LISPSM together with disabling *depth clamping*.
- "Shadow-only" chunks and NPCs were added to prevent shadows from models behind you from disappearing.
- In the process of making changes related to shadow maps, various incidental fixes and optimizations were required.
The addition of shadow maps, LOD terrain, and the new lighting all led to significant performance degradation, on top of other
changes happening in master. Therefore, a large number of performance improvements were also needed:
- The graphics options were made much more flexible and configurable, and shaders were optimize.
- New options were provided for how to render lights and shadows (@Pfauenauge, @zesterer).
- Graphic setting storage and configuration were overhauled to make adding new features easier (@Pfauenauge, @imbris).
- Shaders were rewritten to utilize GLSL's preprocessor to avoid overhead (@zesterer, @YuriMomo).
- In the process of making changes related to providing additional rendering options, various incidental fixes and optimizations were required.
- Voxel model creation was switched to use *greedy meshing.*
- A new voxel meshing method, greedy meshing, was added (@imbris).
- Uses of the older meshing methods were migrated to use greedy meshing (@imbris, @jshipsey, @Pfauenauge).
- New restrictions were added to terrain, figure, and sprites to future proof them for further optimizations (@jshipsey, @Pfauenauge, @zesterer).
- Most positions are now relative to either chunk or player position for better precision (@imbris, @zesterer, @scottc).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- Animation and terrain math were switched to use SIMD where possible.
- Fixes were made to vek to make its SIMD feature usable for us (@zesterer, @imbris).
- The interface and types used in bone animation were changed in various ways (@jshipsey, @Snowram, @Pfauenauge).
- Redundant code generation for body animation is now partly taken care of by a macro (@jshipsey, @Snowram, @Pfauenauge).
- Animation code was modified to to use vek's SIMD representation where possible (@jshipsey, @Snowram, @Pfauenauge).
- Terrain meshing code and shadow map math were also modified to use vek's SIMD representation (@imbris).
- SIMD instruction generation was enabled (@YuriMomo, @jshipsey, @Snowram, @imbris, @Angelonfira, @xMAC94x).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- The way we cache glyphs was completely refactored, fixed, and optimized.
- Our fork of `conrod` was optimized in various ways (@imbris).
- Our fork of `conrod` now exposes whether a widget was updated during the current frame (@imbris).
- Our use of the glyph cache was rewritten for correctness (@imbris).
- A *text cache* was introduced that lets us skip remeshing glyphs that have not changed (@imbris).
- Various changes were made to reduce pressure on the glyph cache, with more planned (@imbris, @Pfauenauge).
- In the process of making changes related to the glyph cache, various incidental fixes and optimizations were required.
- Colors were changed to keep Veloren's look consistent with master.
- Some older tree models were brought back (@Pfauenauge).
- TODO(@Sharp): All hardcoded colors were extracted and made hotloadable.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Hardcoded colors were fixed to conform to Veloren's style.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Color models were fixed to conform to Veloren's style.
A detailed description of the involved changes follows.
---
- The world size is no longer hardcoded. All functions dependent on world size now take a `WorldSizeLg`, which holds the base 2 logarithm of each actual world dimension and is guaranteed to maintain certain properties (outlined in `common/src/terrain/map.rs`). Additionally, many utility functions that utilize the world size were moved into `common` as well (mostly `common/src/terrain/mod.rs`). Finally, the world map format was updated in order to store its size explicitly, with a migration path from the old format that should work whenever the old formatted map was a square (practically always). See `world/src/sim/mod.rs` for these changes.
- The map generation code was made generic to allow using it outside of the `world` crate. The parts of the map generating code that do not need to query the world were moved over to `common/src/terrain/map.rs`, allowing them to be used from the client without creating a dependency on `world`. The rest of it was turned into helper functions in `world/src/sim/map.rs`, which can be passed as closures to the generic map generation code to complete its construction. This also means that colors are now passed in separately to the map generation function. See <https://veloren.net/devblog-78/> for more details.
- On world creation, we now compute *horizon maps*. See the function in `world/src/sim/util.rs`.
Given a height map and a plane intersecting that height map, our horizon maps allow us to encode enough information to reconstruct shadows for each point on the height map using only the *horizon angle* (the angle at which the sun starts to become visible). As Veloren's sun only covers one plane, this is sufficient for encoding sun shadows for LOD terrain, by encoding two angles per chunk (one for each 90 degrees the sun covers). We can also use this for the moon, if we want, since the moon follows the same path. Additionally, we store the *height* of the furthest occluder, to try to make the shadows volumetric; so this means 4 bytes in total for each chunk.
Support for horizon maps has been merged into the map functionality in common as well.
- The way we pass the world from the server to the client has been updated. Rather than passing the prerendered map, we instead pass three maps with values for each chunk; one with the color information, a second with altitude information, and a third with horizon map information. We then reconstruct the map on the client, together with some additional information we send from the server (like the sea level and maximum height). See `common/src/msg/server.rs` for a detailed description of the format of `WorldMapMsg`, and `server/src/libr.rs` and `client/src/lib.rs` for details of the map construction and parsing.
- Artifacts related to image rotation were fixed. See the commit message for commit SHA `cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e` for a detailed explanation. This involved changes to shaders, the addition of a new type of graphic (also reflected in the graphic cache) that allows specifying a border color (which automatically makes the associated texture immutable), and some related fixes. I reproduce the first two paragraphs of the MR description as well:
```
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
```
- Multiflow rivers were enabled.
This does not really need to be part of this MR, and would be easy to revert, but since it seemed to provide a nice improvement it's currently packaged with it.
We already computed multiple outflows from each chunk for erosion purposes long before this MR.
However, we never modified river rendering to be able to handle this case (just a single downhill river flow is complex enough!) so this was not exposed when deciding which chunks were rivers.
Now that
- In the process of making changes related to the world map, various incidental fixes and optimizations were required. Some examples of fixes include making sure terrain is never lowered to below sea level (to make the shadow maps report correct values), fixing map altitudes and colors to understand things like cliffs and "block level" coloring (that doesn'te xist on the column level), and fixing a crashbug when rendering images for the UI where source pixels are strongly rectangular. Some examples of related performance fixes include avoiding allocating a fresh vector for all the maps (i.e. copying it over to change the format from `[u32; n]` to `DynamicImage` and then copying again to convert to `RgbaImage`), and instead using the `gfx::memory::slice` function to accomplish the same thing. These sorts of changes are spread all arond the code.
This includes the additon of a new scene, `voxygen/src/scene/lod.rs`, a new pipeline `voxygen/src/render/pipeline/lod_terrain.rs`, and new shaders `assets/vxygen/shaders/lod-terrain-vert.glsl` and `assets/vxygen/shaders/lod-terrain-frag.glsl`, as well as associated changes to the renderer in `voxygen/src/render/renderer.rs`.
The main idea behind our initial approach to LOD was to take the world data we now get from the server (altitude, color, and horizon mapping).
- Some previously computed values were turned into shader uniforms for better prediction on weak processors. (@zesterer)
- Calls to power or trig functions were removed or replaced with multiplications, where possible.
- After some deliberation
- To properly handle sprite "waving" for nearby sprites,
We explicitly designed the greedy meshing system with figures and sprites in mind.
In both cases, we want to be able to *efficiently* pack many different models into the same texture, especially in cases where we know
we will either not be removing any of the grouped-together from the models from the texture, or will remove all of them at once (so
they can be packed into some specific subtexture).
For sprites, since we know every model in advance and never intend to deallocate them, we currently pack them all as efficiently as
possible into one giant tetxure atlas. However, in the future we might opt to pack them slightly less efficiently in exchange for
shrinking the sprite vertex size.
For figures, we pack all the textures for each *model* into the same atlas.
is a global texture atlas used for every sprite, and for figures which is why we have the ability to mesh multiple
models to the same texture area (using the simple texture atlas allocator) without requiring intermediate vector allocations.
This is accomplished by delaying the time when we actually write the color and light data to the texture until *after* all the
model vertices have been meshed; then, we can just allocate the whole color/light array at once, making the atlas we use an
exact fit. In computer science-y terms, we accomplish this delay by, after we perform the initial greedy meshing (without
texture information), not continuing to create the texture data, but instead constructing a *continuation*--that is, a function
that, when called, will execute the rest of the computation. We push this continuation (which in Rust terms is a `FnOnce` closure
that takes the `ColLightsInfo` that it is supposed to write to as context) onto a
onto a vector
resizing. To allow for suspended writes to texture data, Rust pointed out to me that the continuation that would eventually write the color and light data to the texture atlas (the one that is shared by all models sharing the same greedy mesher) would have to *own* whatever data it mshed. Because we often generate the model data to mesh as a temporary in `voxygen/src/load.rs`, the
- Matrix multiplications in the shader were reduced for figure data (@zesterer).
- Vertex "waves" for fluid data were removed.
- Terrain "bending" near edges was removed.
- Scaling was fixed to make sure empty space was not introduced in a space previously occupied by a block. It was also changed to take ownership of its voxel data,
rather than sharing it, to let it be used with meshing.
- Rust's nightly version was bumped in order to use the `array_map` function, which lets us reuse more code between the simple map and `FigureModelCache`.
- PositionedGlyph::standalone.
---
I tried to cite sources in many cases[^realtime],[^lloyd],[^lispsm],[^pbrt],[^greedy],[^tjunctions]
where I needed features from elsewhere but I am particularly grateful for the following resources,
esepcially where they have accompanying source code. I linked all of them that are accessible to the public (those that are not were
obtained through legal means).
[^realtime]: Eisemann, Elmar, Michael Schwarz, Ulf Assarsson, Michael Wimmer. Real-Time Shadows. A K Peters/CRC Press (T&F), 20160419.
[^lloyd]: Lloyd,B. 2007. [Logarithmic perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). PhD thesis, University of North Carolina.
[^lispsm]: Wimmer, M., Scherzer, D., and Purgathofer, W. 2004. [Light space perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). In Proceedings of Eurographics Symposium on Rendering 2004, pp. 143– 152.
[^pbrt]: Pharr, Matt, et al. [http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf](Physically Based Rendering: From Theory to Implementation). Third edition, Morgan Kaufmann Publishers/Elsevier, 2017.
[^greedy]: mikolalysenko. “Meshing in a Minecraft Game.” 0 FPS, 30 June 2012, <https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/>.
[^tjunctions]: blackflux. “Meshing in Voxel Engines – Part 1.” Blackflux.Com, 23 Feb. 2014, <https://blackflux.wordpress.com/2014/02/23/meshing-in-voxel-engines-part-1/>.
I am also especially grateful to Khronos, Wikiepdia, and stackoverflow for answering many of my specific questions while writing the MR.
---
Squashed commit of the following:
commit 300505e7305a2fdac722a808ee8538323f215f39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 18:46:25 2020 +0200
Fixing cargo doc and typo in CHANGELOG.
commit ec0aeb18e8499d7d84ef818331b4b65c3d76cea6
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 15:38:50 2020 +0200
Hopefully final commit for the LOD branch.
commit 5e8ea0b1eaac02903a02feb2eb038d195de4872f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 10:14:26 2020 +0200
Falling back to power as stopgap.
commit e44a1cbf46504ee9931a01bdc9033e145500d557
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 09:25:41 2020 +0200
Address imbris feedback.
Temporarily disables shiny water, lowers max VD.
These restrictions will be lifted soon after merging.
commit 561e25778a108ac3712f5ec2ce3a51234c4430d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 08:31:13 2020 +0200
Tweaking shaders a bit.
commit 7d19259078ce0dd7b3742ad7d0cb3fab3ece3fdc
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:59:43 2020 +0200
Fix view example as well.
commit 051cd4934e0fad2c0b15db4380a4189fa318679f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:29:06 2020 +0200
Fix meshing benchmark.
commit c95e07db3b4dcca285678985e65e31b927cb1c61
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 05:46:22 2020 +0200
Address MR feedback, fix scene clouds.
commit 1bfb816cabdb3ffc1e507a009c2d98696b4b573a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:39:36 2020 +0200
Incorporating Pfau's figure color changes.
New eyes and new humanoid colors.
commit 3f9b89a3ac7b3356b1dba0d1a8f6541357f81469
Merge: e2f5162e4 62c53963a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:29:41 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit e2f5162e4f96f4124aa43488f7245d341b3dcfd4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:28:38 2020 +0200
World colors are all hotloadable.
They live in assets/world/style/colors.ron.
Only a small handful of hardcoed colors remain in World; they are either
part of the map, or difficult to disentangle from the rest of the
computation. Comments are made where appropriate.
commit 62c53963abe1975009d34a8f9515a355bef24f31
Author: Marcel Märtens <marcel.cochem@googlemail.com>
Date: Wed Aug 19 15:59:00 2020 +0200
replace pretty_env_logger with tracing
commit 5b1625f99d9586fe80e2232f583ec5af9f953099
Merge: d71003acd 4942b5b39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:15:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit d71003acdabeff970b3928e97c26af6847b5b78e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:14:34 2020 +0200
Hotloading colors, part 1: colors in common.
Currently, this just entails humanoid colors. There are only three
colors not handled; the light emitter colors in
common/src/comp/inventory/item/tool.rs. These don't seem important
enough to me to warrant making hotloadable, at least not right now, but
if it's needed later we can always add them to the file.
commit 63b5e0e553eb2ea49276f192a6fc7dd65254270d
Merge: c32b337a4 6d2c4b9c1
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 13:05:37 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c32b337a46e10d9de473d178a94a3ccd61c39bb3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:52:04 2020 +0200
Fixing LOD grid, for real.
commit a166ae0360395387e09fb35a1f84210c2ce5ec24
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:28:05 2020 +0200
Addressing imbris's initial feedback.
Fixes two minor bugs: explosion particles were no longer spawning
randomly, and LOD grids were not perfectly even.
commit 4cbad004f44060994252dd3d38647a14a589712f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:27:58 2020 +0200
Bumping nightly per request.
commit 548680276aac77c25d43d16b5622f847d474dbef
Merge: acc098604 8f8b20c91
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:26:06 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit acc0986040589a3492f88a740bc3c3fc693b26d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:28:32 2020 +0200
Lower resolution due to lying drivers.
commit d3b878de2a52c358d2944a6bbd0555dad7fbdb10
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:15:38 2020 +0200
Fix issues msh encountered with Intel 4600.
commit 10245e0c1b0cb6fae10d86409435364edc6102ef
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 21:15:02 2020 +0200
Merge more models into one mesh than we did previously.
commit 3155c31e663c52ae5c3a53d5fb5665892a1a498a
Merge: 7204cc8a7 3c199280e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:35:22 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7204cc8a7a4f74a30306bd205d9834fee4bb944f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:34:43 2020 +0200
Fix not yet done NPC animations.
This forces them all to be the idle animation if not specified.
This fixes issues where you'd have giant NPCs in water.
commit bc83360f2a08918f19d417b5f772e1ff554dba08
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 19:36:37 2020 +0200
Try to fix some bugs:
- Z fighting with LOD terrain and water.
- Audio SFX not playing.
commit 1fd104aa603bf3781b6526a5cada46aeca3049dd
Merge: 862df3c99 7c2c392a3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 12:02:31 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 862df3c9976c4da9bd7cfd784f1a85973127968a
Merge: 0a4218ed9 75c1d4401
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 05:52:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0a4218ed9d541a2b34c133351bea38a99ddf4ea7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 22:27:14 2020 +0200
Fix particle depth.
commit f51dfdeb442d0dd5243dd2f344fa4be295bd0875
Merge: c6251a956 5e6dc0471
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:19:04 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit c6251a956ad376400dca5c23420cf8d213dc8fdf
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:15:46 2020 +0200
Cache figures more intelligently.
Cache figures for longer, and don't cache character states for the
player except where they actually affect the rendered model.
commit 0ed801d5404982c6fb63b1eaa4567d908b294c9d
Merge: c11b9bdf0 eea64f78f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 16:32:24 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c11b9bdf0a53bf9884d2f5a48fec9b01d582df1a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 11:47:15 2020 +0200
Remove unneeded Clippy annotation.
commit 16aa9ef40af56d69289d00aafb3deadfb8bd4f35
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 8 00:53:02 2020 +0200
Fix hotloading and Clippy.
commit 3dc973e0be5b758da1e9805eb764ad401374cd0c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 23:50:27 2020 +0200
Major speedups with SIMD.
commit fba64a7d93d5a96077ce87287bbce6ab9b7fbcae
Merge: 76429d00e d1e10b178
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:19 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 76429d00eea00d212fbd672a84ee91e75b19b938
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:10 2020 +0200
Add clippy.toml.
commit c79f512f84dbb83cb82b7954db68ff241dfd8e41
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 11:55:20 2020 +0200
Fix all clippy issues, clean up Rust code.
commit 6f90e010b3fbefb53b0d632e819931350015b6b8
Merge: 77a8c7c26 5929cfa5c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:30 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 77a8c7c267d3f44a1a62bd6b2274359973c5e4d4
Merge: b44e44232 44febaabd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:10 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 5929cfa5c713aa392110bbb62407f76caf53c3df
Author: jshipsey <jshipsey18@gmail.com>
Date: Thu Aug 6 20:47:27 2020 -0400
fixed in-hand arrow bug
commit b44e442325d828f1cd564d66908f89d09e80474b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 6 13:40:35 2020 +0200
Miscellaneous performance improvements.
commit be37acf287c1360d8085862526ac3365ffd1d768
Merge: 125d7fc6c c11876547
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 05:49:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 125d7fc6c4dcd8c8c5f27b8268a4d64f409f3644
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 04:55:31 2020 +0200
Abstract over simd vs. repr_c vectors.
Also some minor improvements to Event size.
commit d4d4956e9252e1241ce110b2aa85076c6b1e2a23
Merge: 5f3b7294a aced5f979
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:56:54 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 5f3b7294af1f8533edc2620b58863c248e2b07af
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:43:52 2020 +0200
Fix formatting issues I missed before.
commit a428a3ebba70dcab63dd0f8cd983120c90617271
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:41:51 2020 +0200
Fix clippy warnings, part 1.
There aer still a bunch of type too complex and
function takes too many arguments warnings that I'll fix later
(or ignore, since in the one case I did fix a function takes too
many arguments warning I think it made the code *less* readable).
commit ba54307540ed8a937ac08209730284fc653af85b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 30 13:22:42 2020 +0200
Fix light animations so they are removed when the light turns off.
commit 7e0f4bcbf0f4717145d8beac40d52e3acebbe2aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 21:10:20 2020 +0200
Fix crash in edge case for pixel art.
commit 56da06f7a351e2b949e9b014a90b974d511a0924
Merge: cf74d55f2 9f53a4a19
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:56:52 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:29:52 2020 +0200
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
The first concern was addressed by fixing the dimensions of the map
images drawn from the UI (so that we always use a square source
rectangle, rather than a rectangular one according to the dimensions of
the map). We also fixed the way rotation was done in the fragment
shader for north-facing sources to make it properly handle aspect ratio
(this was already done for north-facing targets). Together, these fix
rendering issues peculiar to rectangular maps.
The second and third concerns were jointly addressed by adding an
optional border color to every 2D image drawn by the UI. This turns
out not to waste extra space even though we hold a full f32 color
(to avoid an extra dependency on gfx's PackedColor), since voxel
images already take up more space than Optiion<[f32; 4]> requires.
This is then implemented automatically using the "border color"
wrapping method in the attached sampler.
Since this is implemented in graphics hardware, it only works (at
least naively) if the actual image bounds match the texture bounds.
Therefore, we altered the way the graphics cache stores images
with a border color to guarantee that they are always in their own
texture, whose size exactly matches their extent. Since the easiest
currently exposed way to set a border color is to do so for an
immutable texture, we went a bit further and added a new "immutable"
texture storage type used for these cases; currently, it is always
and automatically used only when there is a specified border color,
but in theory there's no reason we couldn't provide immutable-only
images that use the default wrapping mdoe (though clamp to border
is admittedly not a great default).
To fix the maps case specifically, we set the border color to a
translucent version of the ocean border color. This may need
tweaking going forward, which shouldn't be hard.
As part of this process, we had to modify graphics replacement to
make sure immutable images are *removed* when invalidated, rather
than just having a validity flag unset (this is normally done by
the UI to try to reuse allocations in place if images are updated
in benign ways, since the texture atlases used for Ui do not
support deallocation; currently this is only used for item images,
so there should be no overlap with immutable image replacement,
so this was purely precautionary).
Since we were already touching the relevant code, we also updated
the image dependency to a newer version that provides more ways
to avoid allocations, and made a few other changes that should
hopefully eliminate redundant most of the intermediate buffer
allocations we were performing for what should be zero-cost
conversions. This may slightly improve performance in some
cases.
commit ad18ce939940a8c697270f6e9b94db9942fd8295
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 13:21:09 2020 +0200
Fix continent scale hack.
commit 36b1cb074f5b195aebd7dbbc3da7f0246a1a18ec
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 12:11:40 2020 +0200
Enable loading different sized maps without a recompile.
We may want to tweak the effects of the continent_scale_hack.
commit 13b6d4d534cc4814b7cb3294ca41bbfea0a6b186
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 10:55:48 2020 +0200
Removing WORLD_SIZE, part 1.
Erased almost every instance of WORLD_SIZE and replaced it with a local
power of two, map_size_lg (which respects certain invariants; see
common/src/terrain/map.rs for more details about MapSizeLg). This also
means we can avoid a dependency on the world crate from client, as
desired.
Now that the rest of the code is not expecting a fixed WORLD_SIZE, the
next step is to arrange for maps to store their world size, and to use
that world size as a basis prior to loading the map (as well, probably,
as prior to configuring some of the noise functions).
commit 30b1d2c6428230a9eaa0d749cdcbbd6f1cbccd78
Merge: 7d56ba31b 1377b369f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:58 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 7d56ba31b445441461b28a07fc495d7d4f047c17
Merge: 2101113b4 598f14b25
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 1377b369f6db2258e910d467a5740f31789e3ded
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sun Jul 19 23:25:38 2020 +0200
more saturated pumpkins
commit ae8d50527f93bb0616c2ad46ce4dacb63bc37c6d
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sat Jul 18 20:29:56 2020 +0200
acacia models
commit 2101113b467e691de787392d7f20f1745f5637bd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 18 18:55:25 2020 +0200
Higher detail LOD.
commit add2cfae04b4385fa5590e11e2bd5229d9dee0aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 16 01:57:39 2020 +0200
Revert some irrelevant stuff.
commit 2e2ab3dc1eaa59a4aef7f8d34a53d8aae4c8553a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 15 13:30:49 2020 +0200
Fixing various things about shadows.
* Correcting optimal LISPSM parameter.
* Figure shadows are cast when they're not visible.
* Chunk shadows stay cast until you look away.
* Seamless cubemaps for point lights.
* Etc.
commit 6c31e6b56217274285b597af297036691ea5d897
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 19:50:26 2020 +0200
Fix shadow creation.
commit 6332cbe006115ae205597529cd8bbccd146c2cca
Merge: be438657c 930e0028b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:47:00 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit be438657c33d7b5bfb0a9582c3ed3fd366637323
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:28:08 2020 +0200
Tweaks to shadows.
Added shadow map resolution configuration, added seamless cubemaps,
documented all existing rendering options, and fixed a few Clippy
errors.
commit 23b4058906013c7d2a40c286e20e32c5fbd897ed
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 10:11:19 2020 +0200
Fix moon, use nonlinear noise for terrain.
Note that the latter has a bit of performance cost.
commit 7fbe5cbfbb9dc29607957b8e62f432a4deed193d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:23:02 2020 +0200
Address lies about max texture size.
commit bcfc62b5e13a1cdd83f57535fde4694720bebfd9
Merge: 75e3626a7 18a08e8fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:22:08 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 75e3626a785919f43fdcf2127c2b10e3e4df2f9f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:21:52 2020 +0200
OpenGL 3.3 minimum.
commit 18a08e8fe2739f02af99a5d2cb4e7c38c49e858b
Author: Monty Marz <m.marzouq@gmx.de>
Date: Tue Jul 7 23:57:52 2020 +0200
settings localization
commit 90c5d1ca3620092bc3ae10b2211489eb1cf6f5e8
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 21:11:48 2020 +0200
Lower near distance.
commit 0e66f02b25aaddaa2dfddbbc89cd67de54a9a7b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 20:09:01 2020 +0200
All sprites sway in the wind now.
commit db1401a6910bf42dcf502462c90038752ff5fbdb
Merge: 69e508d8c e8b4b29d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 19:34:17 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 69e508d8c94d8973033817ca86f357e466fc7c4d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 18:41:37 2020 +0200
Make it easy to switch to SIMD for math.
commit ffe0f5928c7a7e87d00cb5426b3b1d831d7e02fd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 21:21:12 2020 +0200
Fix some issues with underwater rendering.
commit bfda6da42f38fd02c31ee92c81ab785a3e50c2a0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 19:17:59 2020 +0200
Fix some minor display issues.
commit 0ed752e087968cf901301884aaeae698e32ef8a5
Merge: ccc6a06a8 518edcb85
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:14:21 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit ccc6a06a8d4504d6b9f7af7905a414d2ee06ab76
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:04:34 2020 +0200
Some minor changes.
commit 4e020246702889269efe1a191788992164c508d6
Merge: 50a64d927 e05c9267a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 16:17:40 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 50a64d927e6c4f4b0e4688e4cbfca694bc3f922a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 13:07:03 2020 +0200
Fix far plane.
commit 7dd06da34cae8f9ea3b6c889fe965181f3fd3949
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:25:35 2020 +0200
Add shadows.glsl.
commit 618a18c998778bf871b905a74657440fcc384c80
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:10:22 2020 +0200
Adding shadows, greedy meshing, and more.
commit eaea83fe6a5cb1cb0ba8beef888183c718258496
Merge: 267018495 2f89b863e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 22:47:07 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 2670184954a13e4a9e7a4e35ba79aac0c5fac2f7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 21:20:01 2020 +0200
Make civsim and sites deterministic.
For anything in worldgen where you use a HashMap, *please* think
carefully about which hasher you are going to use! This is
especially true if (for some reason) you are depending on hashmap
iteration order remaining stable for some aspect of worldgen.
commit f8376fd5dc72b4a9c2f51a6b4570d59c8b8e9343
Merge: 654f7e049 cdee191dd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 17:53:57 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 654f7e049258d9da27c09608bbe6a46ffa8787e5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed May 20 21:22:30 2020 +0200
Correct backface culling.
commit 560501df05ca725409b0f2e4eb31bdfdc15fd0c7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue May 19 17:22:06 2020 +0200
Greedy messhing for shadows.
commit a4d87e1875ca543436e6bbbeb20348facc5a52d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun May 17 05:59:00 2020 +0200
Shadow maps work for lantern.
commit 243d0837b8a3b08172c9a3c348d964d7ddc2a0a8
Merge: 04382dc28 71dd520cd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:53:13 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 04382dc28632b6c66e8821f6870c0daaa1c1901a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:22:17 2020 +0200
WIP: better graphics config, better LOD, shadow maps.
commit 22ddbad3eb32bfa70f0932176022208fe67ded81
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 18:54:09 2020 +0200
Minor shader fixes.
commit 746a10e8d01ac235f994b0cde78fa48998602a1f
Merge: 0f4a0e763 40ab94673
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 04:02:09 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0f4a0e763db3afbdc4fb0558611f38326ca87151
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 23:03:24 2020 +0200
Switch back to pop-in terrain.
commit dd74fa7e4a53667b38811d7aec58d7f6a68889bb
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 22:58:55 2020 +0200
LOD shading closer to voxel shading.
commit ef67bd58ba0bdaf622b078892d768263b6cba268
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 28 20:49:03 2020 +0200
Experimental underwater lighting.
commit 2c5ad9d07605e80d5fd5679dd3a5d70c605b86a9
Merge: 748279835 303967a6f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 22:35:24 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7482798354eda18c8207950080fc24d443a369de
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 21:59:55 2020 +0200
Replace discard in figure-frag.
commit d83b4ae69be4912f69bf7835f509c68a1c7770a4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:45:57 2020 +0200
Fix sprite lighting, HDR from focus_pos.
commit 0594238004f116274905fa0ed7c2b6c417ed1d29
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:14:10 2020 +0200
Proper HDR from point lights.
commit 48c93d2b41ce5743103d18e76cc228f5ac766492
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 14:01:43 2020 +0200
Brighter ambiance, darker LOD shadows.
commit e0452e895ccfa8a43f368cae3b8b8aedc24dad93
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 13:13:23 2020 +0200
More proper HDR.
commit 4c6da3ed16cfeebb455e40da5f557b4af9a499d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 00:13:10 2020 +0200
Trying LOD noise.
commit 682a3d74c85df5503ffe1fc1cc891bce789df1ad
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 23:11:08 2020 +0200
Fix LOD heights in towns.
commit cc39e5734e8b18f9077bf42e66337c1319dd6b6e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 21:01:23 2020 +0200
More LOD fixes.
commit 8116b21c2e51c836e77894e309ac273caf2917b3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:54:43 2020 +0200
I like this coloring.
commit bc2560ea90b36f4b46190005344232d993043ac3
Merge: 14effdd5d e690efe71
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:48:33 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 14effdd5db8747fcf3eb34f03b46b7792e92d1c5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:24:35 2020 +0200
Re-saturate.
commit 48a643955d4435b78179acba0beb4a979905cc31
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:23:57 2020 +0200
Various fixes.
commit f7b497a0c25f4ad4682c71dd1ed6f608052feb9b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 03:22:49 2020 +0200
Render figures again.
commit 44e4aad48deba8266b9f8bdfd3db096b381f5327
Merge: e6f0a5a98 9ec319a18
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 02:01:04 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit e6f0a5a981a82533ba188fff0a54ce98577bb152
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 24 16:12:20 2020 +0200
Add atmospheric scattering.
commit f2953087f691a8edbc001cb98ebf5059fc6f8ac0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 23 00:01:20 2020 +0200
Fix shadowing for specular reflections.
commit ddd4a67a9799b8d08c7dc0c2bec90621c2bed0e3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Apr 22 22:56:12 2020 +0200
HDR fixes.
commit 1015e60deef3c447381996277df7496707a63bd0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 21 18:25:19 2020 +0200
More lighting changes.
commit 80c264abd111fb237e57843efcb5c071d4f84613
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 13 00:29:59 2020 +0200
Lighting experiments.
commit 8414987e589dd5102bad89762a3adaccc0bfe957
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 9 02:38:40 2020 +0200
WIP -- lighting changes and soft shadows.
commit 9cd2b3fb0d6b49776c6dfe463e4169637250b11a
Merge: c7ea687eb 8b149ad11
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:29 2020 +0200
Merge branch 'sharp/new-lighting' into sharp/small-fixes
commit c7ea687ebbc5aace1b455f134a5bf49ce2c7434a
Merge: 476441531 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:02 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 8b149ad11ad4bb75018fcf9519baec27d1c95951
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:32:39 2020 +0200
Trying out a new lighting model.
commit b0ac9f36f755dd06f7c17c46150568064790864f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 07:56:11 2020 +0200
Use bicubic interpolation for terrain.
commit f6fc9307a121514b614bc50ef8eb055953e7da8a
Merge: 33140a295 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 05:01:41 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 4764415312aae6e9ac2d00e86e84577cb958f1ab
Merge: ed2d0111d 13388ee6a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 04:54:48 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 13388ee6a42943f3f79a9cb488346cef18e272fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 20:30:08 2020 +0200
Various fixes (to coloring and to soft shadows).
commit fbd084a94a067082a87cd6d28b82054709bc9265
Merge: 5a089863b 4fdf6896a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 18:50:38 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/map-colors
commit ed2d0111d994262ae836d84d1fe5a45e4de72a0b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 06:49:27 2020 +0200
Combining colors and LOD.
commit 88342640c6b835114d01c797b89fdede3b0a2108
Merge: 33140a295 5a089863b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:49:20 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 33140a2951b8212725f42c758b277aaec4d888f7
Merge: 4c65a5aed f34d4b379
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:36:21 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 5a089863beb01d4794bbe3580ada47b278715ea2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 03:17:49 2020 +0200
Making maps brighter.
This is probably not the right way to do it, but oh well!
commit 32b2c99109dd486aa922886081068f9c550c83f2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 02:46:36 2020 +0200
Horizon mapping and "layered" map generation.
Horizon mapping is a method of shadow mapping specific to height maps.
It can handle any angle between 0 and 90 degrees from the ground, as
long as know the horizontal direction in advance, by remembering only a
single angle (the "horizon angle" of the shadow map). More is explained
in common/src/msg/server.rs. We also remember the approximate height of
the largest occluder, to try to be able to generate soft shadows and
create a vertical position where the shadows can't go higher.
Additionally, map generation has been reworked. Instead of computing
everything from explicit samples, we pass in sampling functions that
return exactly what the map generator needs. This allows us to cleanly
separate the way we sample things like altitudes and colors from the map
generation process. We exploit this to generate maps *partially* on the
server (with colors and rivers, but not shading). We can then send the
partially completed map to the client, which can combine it with shadow
information to generate the final map. This is useful for two reasons:
first, it makes sure the client can apply shadow information by itself,
and second, it lets us pass the unshaded map for use with level of
detail functionality.
For similar reasons, river generation is split
out into its own layer, but for now we opt to still generate rivers on
the server (since the river wire format is more complicated to compress
and may require some extra work to make sure we have enough precision to
draw rivers well enough for LoD).
Finally, the mostly ad-hoc lighting we were performing has been (mostly)
replaced with explicit Phong reflection shading (including specular
highlights). Regularizing this seems useful and helps clarify the
"meaning" of the various light intensities, and helps us keep a more
physically plausible basis. However, its interaction with soft shadows
is still imperfect, and it's not yet clear to me what we need to do to
turn this into something useful for LoD.
commit f8926a5737ddc51f3d585c651a64c43677aae0f4
Merge: a1aee931e 875ae6ced
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Mar 13 13:32:42 2020 +0100
Merge remote-tracking branch 'origin/master' into sharp/map-colors
commit 4c65a5aed353b119aea65a2aaeb94549b67beb42
Author: Treeco <5021038-Treeco@users.noreply.gitlab.com>
Date: Mon Feb 24 16:48:05 2020 +0000
Made LOD setting slider exponential
commit 2fa7b2d20d7233dc8bfd64f9f7f54617575248f1
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 17:49:53 2020 +0000
Added mist to LoD
commit aab059a450b5f635777129ff82cc15b662965c3c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 15:14:06 2020 +0000
Added LoD slider
commit 779c36b538121c5ade3633ae5cb67bb14c8c3877
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:54:55 2020 +0000
Reduced cost of vertex pushing
commit 9fea150473906b166365b738ebcea07c697daf3d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:38:53 2020 +0000
Fixed maths, improved LoD resolution
commit 5481df38fea5bf183ff376a3337179cfaa5233dc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 11:22:50 2020 +0000
Dynamically relocate LoD vertices to enhance details
commit a3e36a50ababd615da7db1b26158c7906a5def01
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 18:13:51 2020 +0000
Simpler terrain spiral rendering
commit 255f450ae9ac8763db4bede075fb409161ed57cc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:53:17 2020 +0000
Better LoD precision
commit 3d027aebe812a5b8658a4eb8123dc9f61b3776d2
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:04:03 2020 +0000
Better falloff
commit be775c9484b457b2c0b1a494aec03392d0c70e76
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 15:30:45 2020 +0000
Applied good ideas from experimental branch
commit 58587b68545a23c5c04ab4574a4b94b3bc982246
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 16:15:13 2020 +0000
Minor fixes to LoD merging
commit 7b42aebd709c14df2db766aad61d9280ad24d84d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 15:04:44 2020 +0000
Capped LoD dragging
commit 8aafc559f87124e1ea5ca6e3ddc2aa0c242d793c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:54:37 2020 +0000
Better blending between LoD and terrain border
commit edd3455d5161792d87ddc8eadc0ecbad5532b284
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:40:19 2020 +0000
Fixed LoD z depth, added sea level offset
commit b9b06744620114dd5556e73f64fa93c145503a7c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:27:43 2020 +0000
Better LoD smoothing
commit a1aee931e790431560cd2d953ad61d9497072afd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Feb 21 14:52:17 2020 +0100
Adding shadows.
commit 2400786c13dd891c131ed86d48d05df516a8a778
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 13:48:40 2020 +0000
Use world map as LoD source
commit dbf650f504a4c25fbbc2096ac3616c736bf52d23
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Jan 20 00:48:14 2020 +0000
Better clouds at distance
commit 5e6f81b86cdb9730b9b056877b19257075fd5fa8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Jan 19 23:59:02 2020 +0000
sync
commit 745e7540ddb000cc645f612767b337c2ddc3f7c0
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 12:40:48 2019 +0000
Improved cloud falloff mist, faster noise sampling
commit f6a200d0cb866196ba57697466755f9e0c7ea5d8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 10:09:00 2019 +0000
Improved long-range depth precision, removed unnecessary LoD polygons
commit 63d1b2bb2292898d59fb4f4e502201103dfeb86f
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 20:57:46 2019 +0000
Working LoD shader
commit f13d98ee3e58f881e8b978861a67663b59ed91ec
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 11:03:40 2019 +0000
LoD first attempt (stack overflow issue)
2020-08-20 18:34:59 +00:00
|
|
|
|
uniform_noise(map_size_lg, |_, wposf| {
|
2020-02-01 20:39:39 +00:00
|
|
|
|
// From 0 to 1.6, but the distribution before the max is from -1 and 1.6, so
|
|
|
|
|
// there is a 50% chance that hill will end up at 0.3 or
|
|
|
|
|
// lower, and probably a very high change it will be exactly
|
|
|
|
|
// 0.
|
2019-11-11 17:14:58 +00:00
|
|
|
|
let hill = (0.0f64
|
2019-10-16 11:39:41 +00:00
|
|
|
|
+ gen_ctx
|
|
|
|
|
.hill_nz
|
2020-01-22 14:31:10 +00:00
|
|
|
|
.get(
|
|
|
|
|
(wposf
|
|
|
|
|
.mul(32.0)
|
|
|
|
|
.div(TerrainChunkSize::RECT_SIZE.map(|e| e as f64))
|
|
|
|
|
.div(1_500.0))
|
|
|
|
|
.into_array(),
|
|
|
|
|
)
|
2019-10-16 11:39:41 +00:00
|
|
|
|
.min(1.0)
|
|
|
|
|
.max(-1.0)
|
|
|
|
|
.mul(1.0)
|
|
|
|
|
+ gen_ctx
|
|
|
|
|
.hill_nz
|
2020-01-22 14:31:10 +00:00
|
|
|
|
.get(
|
|
|
|
|
(wposf
|
|
|
|
|
.mul(32.0)
|
|
|
|
|
.div(TerrainChunkSize::RECT_SIZE.map(|e| e as f64))
|
|
|
|
|
.div(400.0))
|
|
|
|
|
.into_array(),
|
|
|
|
|
)
|
2019-10-16 11:39:41 +00:00
|
|
|
|
.min(1.0)
|
|
|
|
|
.max(-1.0)
|
2019-11-07 20:25:30 +00:00
|
|
|
|
.mul(0.3))
|
2019-10-16 11:39:41 +00:00
|
|
|
|
.add(0.3)
|
|
|
|
|
.max(0.0);
|
|
|
|
|
|
2020-02-01 20:39:39 +00:00
|
|
|
|
// chaos produces a value in [0.12, 1.32]. It is a meta-level factor intended
|
|
|
|
|
// to reflect how "chaotic" the region is--how much weird
|
|
|
|
|
// stuff is going on on this terrain.
|
2019-10-16 11:39:41 +00:00
|
|
|
|
Some(
|
|
|
|
|
((gen_ctx
|
|
|
|
|
.chaos_nz
|
|
|
|
|
.get((wposf.div(3_000.0)).into_array())
|
|
|
|
|
.min(1.0)
|
|
|
|
|
.max(-1.0))
|
|
|
|
|
.add(1.0)
|
|
|
|
|
.mul(0.5)
|
|
|
|
|
// [0, 1] * [0.4, 1] = [0, 1] (but probably towards the lower end)
|
|
|
|
|
.mul(
|
|
|
|
|
(gen_ctx
|
|
|
|
|
.chaos_nz
|
|
|
|
|
.get((wposf.div(6_000.0)).into_array())
|
|
|
|
|
.min(1.0)
|
|
|
|
|
.max(-1.0))
|
2019-08-24 19:32:07 +00:00
|
|
|
|
.abs()
|
2019-09-24 17:56:51 +00:00
|
|
|
|
.max(0.4)
|
2019-08-24 19:32:07 +00:00
|
|
|
|
.min(1.0),
|
2019-10-16 11:39:41 +00:00
|
|
|
|
)
|
|
|
|
|
// Chaos is always increased by a little when we're on a hill (but remember
|
2019-11-11 17:14:58 +00:00
|
|
|
|
// that hill is 0.3 or less about 50% of the time).
|
2019-12-11 09:14:50 +00:00
|
|
|
|
// [0, 1] + 0.2 * [0, 1.6] = [0, 1.32]
|
2019-10-16 11:39:41 +00:00
|
|
|
|
.add(0.2 * hill)
|
|
|
|
|
// We can't have *no* chaos!
|
|
|
|
|
.max(0.12)) as f32,
|
2019-08-24 19:32:07 +00:00
|
|
|
|
)
|
2019-10-16 11:39:41 +00:00
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
);
|
2019-08-21 18:41:32 +00:00
|
|
|
|
|
2020-02-01 20:39:39 +00:00
|
|
|
|
// We ignore sea level because we actually want to be relative to sea level here
|
|
|
|
|
// and want things in CONFIG.mountain_scale units, but otherwise this is
|
|
|
|
|
// a correct altitude calculation. Note that this is using the
|
|
|
|
|
// "unadjusted" temperature.
|
2019-11-07 20:25:30 +00:00
|
|
|
|
//
|
2020-02-01 20:39:39 +00:00
|
|
|
|
// No NaNs in these uniform vectors, since the original noise value always
|
|
|
|
|
// returns Some.
|
(See sharp/lod-history) LOD, shadows, greedy meshing, new lighting, perf
---
Pretty much a Veloren fork at this point. Here's a high level overview of the changes (will be added to CHANGELOG just before merge).
At a high level this MR incorporates roughly two groups of changes.
The first group consists of new game features: more flexible map sizes, level of detail terrain, shadow maps, and a new lighting
engine. This is "feature work" that (mostly) only adds new things to Veloren, and mostly shouldn't affect old stuff.
The second big group of changes are those addressing the fallout from all the new features. These include performance fixes of
various sorts: the addition of multiple graphics options and optimization of the cheap ones to avoid work, switching all voxel
models to use some variant of greedy meshing, switching over much of our CPU-side vector math to exploit SIMD instructions
(coinciding with a fork of `vek`), and a rewrite of how the UI handles text rendering (coinciding with updates to our fork
of `conrod`). Making Veloren's hardcoded colors appear correct under the new lighting engine also required considerably
changes (TODO: Fill in this section when it's complete).
The second category of changes often heavily touches code owned by other people, including frequently modified code "owned" by a
handful of people, so I recommend that this code be reviewed particularly carefully.
---
At a high level (each will be described in more detail below):
- The world map has been refactored.
- The world size is no longer hardcoded (@zesterer).
- The map generation code was made generic to allow using it outside of the `world` crate (@zesterer).
- On world creation, we now compute *horizon maps* (@zesterer).
- The way we pass the world from the server to the client has been updated (@xMAC94x).
- Artifacts related to image rotation were fixed (@imbris).
- Multiflow rivers were enabled (@zesterer).
- In the process of making changes related to the world map, various incidental fixes and optimizations were required.
- The new *level of detail* feature was added (@zesterer wrote part of this and has checked out the rest).
- A new LOD terrain rendering step was added to the pipeline.
- The LOD terrain quality was made configurable via a graphics setting.
- Horizon maps were used to cast shadows from LOD chunks on both LOD and non-LOD terrain.
- A "voxelization" effect was incorporated into rendered LOD terrain to make it blend better into the world.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Veloren's lighting has been completely overhauled (@zesterer has already checked most of this out).
- A semi-accurate index of refraction was assigned to our materials.
- A new, more realistic, physically based approach to lighting was used using the *Ashikhmin Shirley* BRDF.
- We emulate *atmospheric scattering* using equations designed for measuring solar panel light exposure.
- We attempt to compute *realistic light attenuation* in water using its real material properties.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Point and directional lights now cast realistic shadows, using *shadow mapping.* (@imbris, @zesterer, @Treeco, @YuriMomo)
- Point light shadow maps were added to the rendering pipeline, using geometry shaders and *seamless cube maps*.
- Directional light shadows were added to the rendering pipeline, using LISPSM together with disabling *depth clamping*.
- "Shadow-only" chunks and NPCs were added to prevent shadows from models behind you from disappearing.
- In the process of making changes related to shadow maps, various incidental fixes and optimizations were required.
The addition of shadow maps, LOD terrain, and the new lighting all led to significant performance degradation, on top of other
changes happening in master. Therefore, a large number of performance improvements were also needed:
- The graphics options were made much more flexible and configurable, and shaders were optimize.
- New options were provided for how to render lights and shadows (@Pfauenauge, @zesterer).
- Graphic setting storage and configuration were overhauled to make adding new features easier (@Pfauenauge, @imbris).
- Shaders were rewritten to utilize GLSL's preprocessor to avoid overhead (@zesterer, @YuriMomo).
- In the process of making changes related to providing additional rendering options, various incidental fixes and optimizations were required.
- Voxel model creation was switched to use *greedy meshing.*
- A new voxel meshing method, greedy meshing, was added (@imbris).
- Uses of the older meshing methods were migrated to use greedy meshing (@imbris, @jshipsey, @Pfauenauge).
- New restrictions were added to terrain, figure, and sprites to future proof them for further optimizations (@jshipsey, @Pfauenauge, @zesterer).
- Most positions are now relative to either chunk or player position for better precision (@imbris, @zesterer, @scottc).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- Animation and terrain math were switched to use SIMD where possible.
- Fixes were made to vek to make its SIMD feature usable for us (@zesterer, @imbris).
- The interface and types used in bone animation were changed in various ways (@jshipsey, @Snowram, @Pfauenauge).
- Redundant code generation for body animation is now partly taken care of by a macro (@jshipsey, @Snowram, @Pfauenauge).
- Animation code was modified to to use vek's SIMD representation where possible (@jshipsey, @Snowram, @Pfauenauge).
- Terrain meshing code and shadow map math were also modified to use vek's SIMD representation (@imbris).
- SIMD instruction generation was enabled (@YuriMomo, @jshipsey, @Snowram, @imbris, @Angelonfira, @xMAC94x).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- The way we cache glyphs was completely refactored, fixed, and optimized.
- Our fork of `conrod` was optimized in various ways (@imbris).
- Our fork of `conrod` now exposes whether a widget was updated during the current frame (@imbris).
- Our use of the glyph cache was rewritten for correctness (@imbris).
- A *text cache* was introduced that lets us skip remeshing glyphs that have not changed (@imbris).
- Various changes were made to reduce pressure on the glyph cache, with more planned (@imbris, @Pfauenauge).
- In the process of making changes related to the glyph cache, various incidental fixes and optimizations were required.
- Colors were changed to keep Veloren's look consistent with master.
- Some older tree models were brought back (@Pfauenauge).
- TODO(@Sharp): All hardcoded colors were extracted and made hotloadable.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Hardcoded colors were fixed to conform to Veloren's style.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Color models were fixed to conform to Veloren's style.
A detailed description of the involved changes follows.
---
- The world size is no longer hardcoded. All functions dependent on world size now take a `WorldSizeLg`, which holds the base 2 logarithm of each actual world dimension and is guaranteed to maintain certain properties (outlined in `common/src/terrain/map.rs`). Additionally, many utility functions that utilize the world size were moved into `common` as well (mostly `common/src/terrain/mod.rs`). Finally, the world map format was updated in order to store its size explicitly, with a migration path from the old format that should work whenever the old formatted map was a square (practically always). See `world/src/sim/mod.rs` for these changes.
- The map generation code was made generic to allow using it outside of the `world` crate. The parts of the map generating code that do not need to query the world were moved over to `common/src/terrain/map.rs`, allowing them to be used from the client without creating a dependency on `world`. The rest of it was turned into helper functions in `world/src/sim/map.rs`, which can be passed as closures to the generic map generation code to complete its construction. This also means that colors are now passed in separately to the map generation function. See <https://veloren.net/devblog-78/> for more details.
- On world creation, we now compute *horizon maps*. See the function in `world/src/sim/util.rs`.
Given a height map and a plane intersecting that height map, our horizon maps allow us to encode enough information to reconstruct shadows for each point on the height map using only the *horizon angle* (the angle at which the sun starts to become visible). As Veloren's sun only covers one plane, this is sufficient for encoding sun shadows for LOD terrain, by encoding two angles per chunk (one for each 90 degrees the sun covers). We can also use this for the moon, if we want, since the moon follows the same path. Additionally, we store the *height* of the furthest occluder, to try to make the shadows volumetric; so this means 4 bytes in total for each chunk.
Support for horizon maps has been merged into the map functionality in common as well.
- The way we pass the world from the server to the client has been updated. Rather than passing the prerendered map, we instead pass three maps with values for each chunk; one with the color information, a second with altitude information, and a third with horizon map information. We then reconstruct the map on the client, together with some additional information we send from the server (like the sea level and maximum height). See `common/src/msg/server.rs` for a detailed description of the format of `WorldMapMsg`, and `server/src/libr.rs` and `client/src/lib.rs` for details of the map construction and parsing.
- Artifacts related to image rotation were fixed. See the commit message for commit SHA `cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e` for a detailed explanation. This involved changes to shaders, the addition of a new type of graphic (also reflected in the graphic cache) that allows specifying a border color (which automatically makes the associated texture immutable), and some related fixes. I reproduce the first two paragraphs of the MR description as well:
```
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
```
- Multiflow rivers were enabled.
This does not really need to be part of this MR, and would be easy to revert, but since it seemed to provide a nice improvement it's currently packaged with it.
We already computed multiple outflows from each chunk for erosion purposes long before this MR.
However, we never modified river rendering to be able to handle this case (just a single downhill river flow is complex enough!) so this was not exposed when deciding which chunks were rivers.
Now that
- In the process of making changes related to the world map, various incidental fixes and optimizations were required. Some examples of fixes include making sure terrain is never lowered to below sea level (to make the shadow maps report correct values), fixing map altitudes and colors to understand things like cliffs and "block level" coloring (that doesn'te xist on the column level), and fixing a crashbug when rendering images for the UI where source pixels are strongly rectangular. Some examples of related performance fixes include avoiding allocating a fresh vector for all the maps (i.e. copying it over to change the format from `[u32; n]` to `DynamicImage` and then copying again to convert to `RgbaImage`), and instead using the `gfx::memory::slice` function to accomplish the same thing. These sorts of changes are spread all arond the code.
This includes the additon of a new scene, `voxygen/src/scene/lod.rs`, a new pipeline `voxygen/src/render/pipeline/lod_terrain.rs`, and new shaders `assets/vxygen/shaders/lod-terrain-vert.glsl` and `assets/vxygen/shaders/lod-terrain-frag.glsl`, as well as associated changes to the renderer in `voxygen/src/render/renderer.rs`.
The main idea behind our initial approach to LOD was to take the world data we now get from the server (altitude, color, and horizon mapping).
- Some previously computed values were turned into shader uniforms for better prediction on weak processors. (@zesterer)
- Calls to power or trig functions were removed or replaced with multiplications, where possible.
- After some deliberation
- To properly handle sprite "waving" for nearby sprites,
We explicitly designed the greedy meshing system with figures and sprites in mind.
In both cases, we want to be able to *efficiently* pack many different models into the same texture, especially in cases where we know
we will either not be removing any of the grouped-together from the models from the texture, or will remove all of them at once (so
they can be packed into some specific subtexture).
For sprites, since we know every model in advance and never intend to deallocate them, we currently pack them all as efficiently as
possible into one giant tetxure atlas. However, in the future we might opt to pack them slightly less efficiently in exchange for
shrinking the sprite vertex size.
For figures, we pack all the textures for each *model* into the same atlas.
is a global texture atlas used for every sprite, and for figures which is why we have the ability to mesh multiple
models to the same texture area (using the simple texture atlas allocator) without requiring intermediate vector allocations.
This is accomplished by delaying the time when we actually write the color and light data to the texture until *after* all the
model vertices have been meshed; then, we can just allocate the whole color/light array at once, making the atlas we use an
exact fit. In computer science-y terms, we accomplish this delay by, after we perform the initial greedy meshing (without
texture information), not continuing to create the texture data, but instead constructing a *continuation*--that is, a function
that, when called, will execute the rest of the computation. We push this continuation (which in Rust terms is a `FnOnce` closure
that takes the `ColLightsInfo` that it is supposed to write to as context) onto a
onto a vector
resizing. To allow for suspended writes to texture data, Rust pointed out to me that the continuation that would eventually write the color and light data to the texture atlas (the one that is shared by all models sharing the same greedy mesher) would have to *own* whatever data it mshed. Because we often generate the model data to mesh as a temporary in `voxygen/src/load.rs`, the
- Matrix multiplications in the shader were reduced for figure data (@zesterer).
- Vertex "waves" for fluid data were removed.
- Terrain "bending" near edges was removed.
- Scaling was fixed to make sure empty space was not introduced in a space previously occupied by a block. It was also changed to take ownership of its voxel data,
rather than sharing it, to let it be used with meshing.
- Rust's nightly version was bumped in order to use the `array_map` function, which lets us reuse more code between the simple map and `FigureModelCache`.
- PositionedGlyph::standalone.
---
I tried to cite sources in many cases[^realtime],[^lloyd],[^lispsm],[^pbrt],[^greedy],[^tjunctions]
where I needed features from elsewhere but I am particularly grateful for the following resources,
esepcially where they have accompanying source code. I linked all of them that are accessible to the public (those that are not were
obtained through legal means).
[^realtime]: Eisemann, Elmar, Michael Schwarz, Ulf Assarsson, Michael Wimmer. Real-Time Shadows. A K Peters/CRC Press (T&F), 20160419.
[^lloyd]: Lloyd,B. 2007. [Logarithmic perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). PhD thesis, University of North Carolina.
[^lispsm]: Wimmer, M., Scherzer, D., and Purgathofer, W. 2004. [Light space perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). In Proceedings of Eurographics Symposium on Rendering 2004, pp. 143– 152.
[^pbrt]: Pharr, Matt, et al. [http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf](Physically Based Rendering: From Theory to Implementation). Third edition, Morgan Kaufmann Publishers/Elsevier, 2017.
[^greedy]: mikolalysenko. “Meshing in a Minecraft Game.” 0 FPS, 30 June 2012, <https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/>.
[^tjunctions]: blackflux. “Meshing in Voxel Engines – Part 1.” Blackflux.Com, 23 Feb. 2014, <https://blackflux.wordpress.com/2014/02/23/meshing-in-voxel-engines-part-1/>.
I am also especially grateful to Khronos, Wikiepdia, and stackoverflow for answering many of my specific questions while writing the MR.
---
Squashed commit of the following:
commit 300505e7305a2fdac722a808ee8538323f215f39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 18:46:25 2020 +0200
Fixing cargo doc and typo in CHANGELOG.
commit ec0aeb18e8499d7d84ef818331b4b65c3d76cea6
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 15:38:50 2020 +0200
Hopefully final commit for the LOD branch.
commit 5e8ea0b1eaac02903a02feb2eb038d195de4872f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 10:14:26 2020 +0200
Falling back to power as stopgap.
commit e44a1cbf46504ee9931a01bdc9033e145500d557
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 09:25:41 2020 +0200
Address imbris feedback.
Temporarily disables shiny water, lowers max VD.
These restrictions will be lifted soon after merging.
commit 561e25778a108ac3712f5ec2ce3a51234c4430d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 08:31:13 2020 +0200
Tweaking shaders a bit.
commit 7d19259078ce0dd7b3742ad7d0cb3fab3ece3fdc
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:59:43 2020 +0200
Fix view example as well.
commit 051cd4934e0fad2c0b15db4380a4189fa318679f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:29:06 2020 +0200
Fix meshing benchmark.
commit c95e07db3b4dcca285678985e65e31b927cb1c61
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 05:46:22 2020 +0200
Address MR feedback, fix scene clouds.
commit 1bfb816cabdb3ffc1e507a009c2d98696b4b573a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:39:36 2020 +0200
Incorporating Pfau's figure color changes.
New eyes and new humanoid colors.
commit 3f9b89a3ac7b3356b1dba0d1a8f6541357f81469
Merge: e2f5162e4 62c53963a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:29:41 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit e2f5162e4f96f4124aa43488f7245d341b3dcfd4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:28:38 2020 +0200
World colors are all hotloadable.
They live in assets/world/style/colors.ron.
Only a small handful of hardcoed colors remain in World; they are either
part of the map, or difficult to disentangle from the rest of the
computation. Comments are made where appropriate.
commit 62c53963abe1975009d34a8f9515a355bef24f31
Author: Marcel Märtens <marcel.cochem@googlemail.com>
Date: Wed Aug 19 15:59:00 2020 +0200
replace pretty_env_logger with tracing
commit 5b1625f99d9586fe80e2232f583ec5af9f953099
Merge: d71003acd 4942b5b39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:15:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit d71003acdabeff970b3928e97c26af6847b5b78e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:14:34 2020 +0200
Hotloading colors, part 1: colors in common.
Currently, this just entails humanoid colors. There are only three
colors not handled; the light emitter colors in
common/src/comp/inventory/item/tool.rs. These don't seem important
enough to me to warrant making hotloadable, at least not right now, but
if it's needed later we can always add them to the file.
commit 63b5e0e553eb2ea49276f192a6fc7dd65254270d
Merge: c32b337a4 6d2c4b9c1
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 13:05:37 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c32b337a46e10d9de473d178a94a3ccd61c39bb3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:52:04 2020 +0200
Fixing LOD grid, for real.
commit a166ae0360395387e09fb35a1f84210c2ce5ec24
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:28:05 2020 +0200
Addressing imbris's initial feedback.
Fixes two minor bugs: explosion particles were no longer spawning
randomly, and LOD grids were not perfectly even.
commit 4cbad004f44060994252dd3d38647a14a589712f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:27:58 2020 +0200
Bumping nightly per request.
commit 548680276aac77c25d43d16b5622f847d474dbef
Merge: acc098604 8f8b20c91
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:26:06 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit acc0986040589a3492f88a740bc3c3fc693b26d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:28:32 2020 +0200
Lower resolution due to lying drivers.
commit d3b878de2a52c358d2944a6bbd0555dad7fbdb10
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:15:38 2020 +0200
Fix issues msh encountered with Intel 4600.
commit 10245e0c1b0cb6fae10d86409435364edc6102ef
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 21:15:02 2020 +0200
Merge more models into one mesh than we did previously.
commit 3155c31e663c52ae5c3a53d5fb5665892a1a498a
Merge: 7204cc8a7 3c199280e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:35:22 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7204cc8a7a4f74a30306bd205d9834fee4bb944f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:34:43 2020 +0200
Fix not yet done NPC animations.
This forces them all to be the idle animation if not specified.
This fixes issues where you'd have giant NPCs in water.
commit bc83360f2a08918f19d417b5f772e1ff554dba08
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 19:36:37 2020 +0200
Try to fix some bugs:
- Z fighting with LOD terrain and water.
- Audio SFX not playing.
commit 1fd104aa603bf3781b6526a5cada46aeca3049dd
Merge: 862df3c99 7c2c392a3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 12:02:31 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 862df3c9976c4da9bd7cfd784f1a85973127968a
Merge: 0a4218ed9 75c1d4401
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 05:52:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0a4218ed9d541a2b34c133351bea38a99ddf4ea7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 22:27:14 2020 +0200
Fix particle depth.
commit f51dfdeb442d0dd5243dd2f344fa4be295bd0875
Merge: c6251a956 5e6dc0471
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:19:04 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit c6251a956ad376400dca5c23420cf8d213dc8fdf
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:15:46 2020 +0200
Cache figures more intelligently.
Cache figures for longer, and don't cache character states for the
player except where they actually affect the rendered model.
commit 0ed801d5404982c6fb63b1eaa4567d908b294c9d
Merge: c11b9bdf0 eea64f78f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 16:32:24 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c11b9bdf0a53bf9884d2f5a48fec9b01d582df1a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 11:47:15 2020 +0200
Remove unneeded Clippy annotation.
commit 16aa9ef40af56d69289d00aafb3deadfb8bd4f35
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 8 00:53:02 2020 +0200
Fix hotloading and Clippy.
commit 3dc973e0be5b758da1e9805eb764ad401374cd0c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 23:50:27 2020 +0200
Major speedups with SIMD.
commit fba64a7d93d5a96077ce87287bbce6ab9b7fbcae
Merge: 76429d00e d1e10b178
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:19 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 76429d00eea00d212fbd672a84ee91e75b19b938
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:10 2020 +0200
Add clippy.toml.
commit c79f512f84dbb83cb82b7954db68ff241dfd8e41
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 11:55:20 2020 +0200
Fix all clippy issues, clean up Rust code.
commit 6f90e010b3fbefb53b0d632e819931350015b6b8
Merge: 77a8c7c26 5929cfa5c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:30 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 77a8c7c267d3f44a1a62bd6b2274359973c5e4d4
Merge: b44e44232 44febaabd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:10 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 5929cfa5c713aa392110bbb62407f76caf53c3df
Author: jshipsey <jshipsey18@gmail.com>
Date: Thu Aug 6 20:47:27 2020 -0400
fixed in-hand arrow bug
commit b44e442325d828f1cd564d66908f89d09e80474b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 6 13:40:35 2020 +0200
Miscellaneous performance improvements.
commit be37acf287c1360d8085862526ac3365ffd1d768
Merge: 125d7fc6c c11876547
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 05:49:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 125d7fc6c4dcd8c8c5f27b8268a4d64f409f3644
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 04:55:31 2020 +0200
Abstract over simd vs. repr_c vectors.
Also some minor improvements to Event size.
commit d4d4956e9252e1241ce110b2aa85076c6b1e2a23
Merge: 5f3b7294a aced5f979
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:56:54 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 5f3b7294af1f8533edc2620b58863c248e2b07af
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:43:52 2020 +0200
Fix formatting issues I missed before.
commit a428a3ebba70dcab63dd0f8cd983120c90617271
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:41:51 2020 +0200
Fix clippy warnings, part 1.
There aer still a bunch of type too complex and
function takes too many arguments warnings that I'll fix later
(or ignore, since in the one case I did fix a function takes too
many arguments warning I think it made the code *less* readable).
commit ba54307540ed8a937ac08209730284fc653af85b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 30 13:22:42 2020 +0200
Fix light animations so they are removed when the light turns off.
commit 7e0f4bcbf0f4717145d8beac40d52e3acebbe2aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 21:10:20 2020 +0200
Fix crash in edge case for pixel art.
commit 56da06f7a351e2b949e9b014a90b974d511a0924
Merge: cf74d55f2 9f53a4a19
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:56:52 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:29:52 2020 +0200
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
The first concern was addressed by fixing the dimensions of the map
images drawn from the UI (so that we always use a square source
rectangle, rather than a rectangular one according to the dimensions of
the map). We also fixed the way rotation was done in the fragment
shader for north-facing sources to make it properly handle aspect ratio
(this was already done for north-facing targets). Together, these fix
rendering issues peculiar to rectangular maps.
The second and third concerns were jointly addressed by adding an
optional border color to every 2D image drawn by the UI. This turns
out not to waste extra space even though we hold a full f32 color
(to avoid an extra dependency on gfx's PackedColor), since voxel
images already take up more space than Optiion<[f32; 4]> requires.
This is then implemented automatically using the "border color"
wrapping method in the attached sampler.
Since this is implemented in graphics hardware, it only works (at
least naively) if the actual image bounds match the texture bounds.
Therefore, we altered the way the graphics cache stores images
with a border color to guarantee that they are always in their own
texture, whose size exactly matches their extent. Since the easiest
currently exposed way to set a border color is to do so for an
immutable texture, we went a bit further and added a new "immutable"
texture storage type used for these cases; currently, it is always
and automatically used only when there is a specified border color,
but in theory there's no reason we couldn't provide immutable-only
images that use the default wrapping mdoe (though clamp to border
is admittedly not a great default).
To fix the maps case specifically, we set the border color to a
translucent version of the ocean border color. This may need
tweaking going forward, which shouldn't be hard.
As part of this process, we had to modify graphics replacement to
make sure immutable images are *removed* when invalidated, rather
than just having a validity flag unset (this is normally done by
the UI to try to reuse allocations in place if images are updated
in benign ways, since the texture atlases used for Ui do not
support deallocation; currently this is only used for item images,
so there should be no overlap with immutable image replacement,
so this was purely precautionary).
Since we were already touching the relevant code, we also updated
the image dependency to a newer version that provides more ways
to avoid allocations, and made a few other changes that should
hopefully eliminate redundant most of the intermediate buffer
allocations we were performing for what should be zero-cost
conversions. This may slightly improve performance in some
cases.
commit ad18ce939940a8c697270f6e9b94db9942fd8295
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 13:21:09 2020 +0200
Fix continent scale hack.
commit 36b1cb074f5b195aebd7dbbc3da7f0246a1a18ec
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 12:11:40 2020 +0200
Enable loading different sized maps without a recompile.
We may want to tweak the effects of the continent_scale_hack.
commit 13b6d4d534cc4814b7cb3294ca41bbfea0a6b186
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 10:55:48 2020 +0200
Removing WORLD_SIZE, part 1.
Erased almost every instance of WORLD_SIZE and replaced it with a local
power of two, map_size_lg (which respects certain invariants; see
common/src/terrain/map.rs for more details about MapSizeLg). This also
means we can avoid a dependency on the world crate from client, as
desired.
Now that the rest of the code is not expecting a fixed WORLD_SIZE, the
next step is to arrange for maps to store their world size, and to use
that world size as a basis prior to loading the map (as well, probably,
as prior to configuring some of the noise functions).
commit 30b1d2c6428230a9eaa0d749cdcbbd6f1cbccd78
Merge: 7d56ba31b 1377b369f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:58 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 7d56ba31b445441461b28a07fc495d7d4f047c17
Merge: 2101113b4 598f14b25
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 1377b369f6db2258e910d467a5740f31789e3ded
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sun Jul 19 23:25:38 2020 +0200
more saturated pumpkins
commit ae8d50527f93bb0616c2ad46ce4dacb63bc37c6d
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sat Jul 18 20:29:56 2020 +0200
acacia models
commit 2101113b467e691de787392d7f20f1745f5637bd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 18 18:55:25 2020 +0200
Higher detail LOD.
commit add2cfae04b4385fa5590e11e2bd5229d9dee0aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 16 01:57:39 2020 +0200
Revert some irrelevant stuff.
commit 2e2ab3dc1eaa59a4aef7f8d34a53d8aae4c8553a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 15 13:30:49 2020 +0200
Fixing various things about shadows.
* Correcting optimal LISPSM parameter.
* Figure shadows are cast when they're not visible.
* Chunk shadows stay cast until you look away.
* Seamless cubemaps for point lights.
* Etc.
commit 6c31e6b56217274285b597af297036691ea5d897
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 19:50:26 2020 +0200
Fix shadow creation.
commit 6332cbe006115ae205597529cd8bbccd146c2cca
Merge: be438657c 930e0028b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:47:00 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit be438657c33d7b5bfb0a9582c3ed3fd366637323
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:28:08 2020 +0200
Tweaks to shadows.
Added shadow map resolution configuration, added seamless cubemaps,
documented all existing rendering options, and fixed a few Clippy
errors.
commit 23b4058906013c7d2a40c286e20e32c5fbd897ed
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 10:11:19 2020 +0200
Fix moon, use nonlinear noise for terrain.
Note that the latter has a bit of performance cost.
commit 7fbe5cbfbb9dc29607957b8e62f432a4deed193d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:23:02 2020 +0200
Address lies about max texture size.
commit bcfc62b5e13a1cdd83f57535fde4694720bebfd9
Merge: 75e3626a7 18a08e8fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:22:08 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 75e3626a785919f43fdcf2127c2b10e3e4df2f9f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:21:52 2020 +0200
OpenGL 3.3 minimum.
commit 18a08e8fe2739f02af99a5d2cb4e7c38c49e858b
Author: Monty Marz <m.marzouq@gmx.de>
Date: Tue Jul 7 23:57:52 2020 +0200
settings localization
commit 90c5d1ca3620092bc3ae10b2211489eb1cf6f5e8
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 21:11:48 2020 +0200
Lower near distance.
commit 0e66f02b25aaddaa2dfddbbc89cd67de54a9a7b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 20:09:01 2020 +0200
All sprites sway in the wind now.
commit db1401a6910bf42dcf502462c90038752ff5fbdb
Merge: 69e508d8c e8b4b29d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 19:34:17 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 69e508d8c94d8973033817ca86f357e466fc7c4d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 18:41:37 2020 +0200
Make it easy to switch to SIMD for math.
commit ffe0f5928c7a7e87d00cb5426b3b1d831d7e02fd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 21:21:12 2020 +0200
Fix some issues with underwater rendering.
commit bfda6da42f38fd02c31ee92c81ab785a3e50c2a0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 19:17:59 2020 +0200
Fix some minor display issues.
commit 0ed752e087968cf901301884aaeae698e32ef8a5
Merge: ccc6a06a8 518edcb85
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:14:21 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit ccc6a06a8d4504d6b9f7af7905a414d2ee06ab76
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:04:34 2020 +0200
Some minor changes.
commit 4e020246702889269efe1a191788992164c508d6
Merge: 50a64d927 e05c9267a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 16:17:40 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 50a64d927e6c4f4b0e4688e4cbfca694bc3f922a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 13:07:03 2020 +0200
Fix far plane.
commit 7dd06da34cae8f9ea3b6c889fe965181f3fd3949
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:25:35 2020 +0200
Add shadows.glsl.
commit 618a18c998778bf871b905a74657440fcc384c80
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:10:22 2020 +0200
Adding shadows, greedy meshing, and more.
commit eaea83fe6a5cb1cb0ba8beef888183c718258496
Merge: 267018495 2f89b863e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 22:47:07 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 2670184954a13e4a9e7a4e35ba79aac0c5fac2f7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 21:20:01 2020 +0200
Make civsim and sites deterministic.
For anything in worldgen where you use a HashMap, *please* think
carefully about which hasher you are going to use! This is
especially true if (for some reason) you are depending on hashmap
iteration order remaining stable for some aspect of worldgen.
commit f8376fd5dc72b4a9c2f51a6b4570d59c8b8e9343
Merge: 654f7e049 cdee191dd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 17:53:57 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 654f7e049258d9da27c09608bbe6a46ffa8787e5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed May 20 21:22:30 2020 +0200
Correct backface culling.
commit 560501df05ca725409b0f2e4eb31bdfdc15fd0c7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue May 19 17:22:06 2020 +0200
Greedy messhing for shadows.
commit a4d87e1875ca543436e6bbbeb20348facc5a52d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun May 17 05:59:00 2020 +0200
Shadow maps work for lantern.
commit 243d0837b8a3b08172c9a3c348d964d7ddc2a0a8
Merge: 04382dc28 71dd520cd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:53:13 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 04382dc28632b6c66e8821f6870c0daaa1c1901a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:22:17 2020 +0200
WIP: better graphics config, better LOD, shadow maps.
commit 22ddbad3eb32bfa70f0932176022208fe67ded81
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 18:54:09 2020 +0200
Minor shader fixes.
commit 746a10e8d01ac235f994b0cde78fa48998602a1f
Merge: 0f4a0e763 40ab94673
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 04:02:09 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0f4a0e763db3afbdc4fb0558611f38326ca87151
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 23:03:24 2020 +0200
Switch back to pop-in terrain.
commit dd74fa7e4a53667b38811d7aec58d7f6a68889bb
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 22:58:55 2020 +0200
LOD shading closer to voxel shading.
commit ef67bd58ba0bdaf622b078892d768263b6cba268
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 28 20:49:03 2020 +0200
Experimental underwater lighting.
commit 2c5ad9d07605e80d5fd5679dd3a5d70c605b86a9
Merge: 748279835 303967a6f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 22:35:24 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7482798354eda18c8207950080fc24d443a369de
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 21:59:55 2020 +0200
Replace discard in figure-frag.
commit d83b4ae69be4912f69bf7835f509c68a1c7770a4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:45:57 2020 +0200
Fix sprite lighting, HDR from focus_pos.
commit 0594238004f116274905fa0ed7c2b6c417ed1d29
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:14:10 2020 +0200
Proper HDR from point lights.
commit 48c93d2b41ce5743103d18e76cc228f5ac766492
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 14:01:43 2020 +0200
Brighter ambiance, darker LOD shadows.
commit e0452e895ccfa8a43f368cae3b8b8aedc24dad93
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 13:13:23 2020 +0200
More proper HDR.
commit 4c6da3ed16cfeebb455e40da5f557b4af9a499d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 00:13:10 2020 +0200
Trying LOD noise.
commit 682a3d74c85df5503ffe1fc1cc891bce789df1ad
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 23:11:08 2020 +0200
Fix LOD heights in towns.
commit cc39e5734e8b18f9077bf42e66337c1319dd6b6e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 21:01:23 2020 +0200
More LOD fixes.
commit 8116b21c2e51c836e77894e309ac273caf2917b3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:54:43 2020 +0200
I like this coloring.
commit bc2560ea90b36f4b46190005344232d993043ac3
Merge: 14effdd5d e690efe71
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:48:33 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 14effdd5db8747fcf3eb34f03b46b7792e92d1c5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:24:35 2020 +0200
Re-saturate.
commit 48a643955d4435b78179acba0beb4a979905cc31
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:23:57 2020 +0200
Various fixes.
commit f7b497a0c25f4ad4682c71dd1ed6f608052feb9b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 03:22:49 2020 +0200
Render figures again.
commit 44e4aad48deba8266b9f8bdfd3db096b381f5327
Merge: e6f0a5a98 9ec319a18
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 02:01:04 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit e6f0a5a981a82533ba188fff0a54ce98577bb152
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 24 16:12:20 2020 +0200
Add atmospheric scattering.
commit f2953087f691a8edbc001cb98ebf5059fc6f8ac0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 23 00:01:20 2020 +0200
Fix shadowing for specular reflections.
commit ddd4a67a9799b8d08c7dc0c2bec90621c2bed0e3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Apr 22 22:56:12 2020 +0200
HDR fixes.
commit 1015e60deef3c447381996277df7496707a63bd0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 21 18:25:19 2020 +0200
More lighting changes.
commit 80c264abd111fb237e57843efcb5c071d4f84613
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 13 00:29:59 2020 +0200
Lighting experiments.
commit 8414987e589dd5102bad89762a3adaccc0bfe957
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 9 02:38:40 2020 +0200
WIP -- lighting changes and soft shadows.
commit 9cd2b3fb0d6b49776c6dfe463e4169637250b11a
Merge: c7ea687eb 8b149ad11
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:29 2020 +0200
Merge branch 'sharp/new-lighting' into sharp/small-fixes
commit c7ea687ebbc5aace1b455f134a5bf49ce2c7434a
Merge: 476441531 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:02 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 8b149ad11ad4bb75018fcf9519baec27d1c95951
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:32:39 2020 +0200
Trying out a new lighting model.
commit b0ac9f36f755dd06f7c17c46150568064790864f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 07:56:11 2020 +0200
Use bicubic interpolation for terrain.
commit f6fc9307a121514b614bc50ef8eb055953e7da8a
Merge: 33140a295 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 05:01:41 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 4764415312aae6e9ac2d00e86e84577cb958f1ab
Merge: ed2d0111d 13388ee6a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 04:54:48 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 13388ee6a42943f3f79a9cb488346cef18e272fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 20:30:08 2020 +0200
Various fixes (to coloring and to soft shadows).
commit fbd084a94a067082a87cd6d28b82054709bc9265
Merge: 5a089863b 4fdf6896a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 18:50:38 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/map-colors
commit ed2d0111d994262ae836d84d1fe5a45e4de72a0b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 06:49:27 2020 +0200
Combining colors and LOD.
commit 88342640c6b835114d01c797b89fdede3b0a2108
Merge: 33140a295 5a089863b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:49:20 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 33140a2951b8212725f42c758b277aaec4d888f7
Merge: 4c65a5aed f34d4b379
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:36:21 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 5a089863beb01d4794bbe3580ada47b278715ea2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 03:17:49 2020 +0200
Making maps brighter.
This is probably not the right way to do it, but oh well!
commit 32b2c99109dd486aa922886081068f9c550c83f2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 02:46:36 2020 +0200
Horizon mapping and "layered" map generation.
Horizon mapping is a method of shadow mapping specific to height maps.
It can handle any angle between 0 and 90 degrees from the ground, as
long as know the horizontal direction in advance, by remembering only a
single angle (the "horizon angle" of the shadow map). More is explained
in common/src/msg/server.rs. We also remember the approximate height of
the largest occluder, to try to be able to generate soft shadows and
create a vertical position where the shadows can't go higher.
Additionally, map generation has been reworked. Instead of computing
everything from explicit samples, we pass in sampling functions that
return exactly what the map generator needs. This allows us to cleanly
separate the way we sample things like altitudes and colors from the map
generation process. We exploit this to generate maps *partially* on the
server (with colors and rivers, but not shading). We can then send the
partially completed map to the client, which can combine it with shadow
information to generate the final map. This is useful for two reasons:
first, it makes sure the client can apply shadow information by itself,
and second, it lets us pass the unshaded map for use with level of
detail functionality.
For similar reasons, river generation is split
out into its own layer, but for now we opt to still generate rivers on
the server (since the river wire format is more complicated to compress
and may require some extra work to make sure we have enough precision to
draw rivers well enough for LoD).
Finally, the mostly ad-hoc lighting we were performing has been (mostly)
replaced with explicit Phong reflection shading (including specular
highlights). Regularizing this seems useful and helps clarify the
"meaning" of the various light intensities, and helps us keep a more
physically plausible basis. However, its interaction with soft shadows
is still imperfect, and it's not yet clear to me what we need to do to
turn this into something useful for LoD.
commit f8926a5737ddc51f3d585c651a64c43677aae0f4
Merge: a1aee931e 875ae6ced
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Mar 13 13:32:42 2020 +0100
Merge remote-tracking branch 'origin/master' into sharp/map-colors
commit 4c65a5aed353b119aea65a2aaeb94549b67beb42
Author: Treeco <5021038-Treeco@users.noreply.gitlab.com>
Date: Mon Feb 24 16:48:05 2020 +0000
Made LOD setting slider exponential
commit 2fa7b2d20d7233dc8bfd64f9f7f54617575248f1
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 17:49:53 2020 +0000
Added mist to LoD
commit aab059a450b5f635777129ff82cc15b662965c3c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 15:14:06 2020 +0000
Added LoD slider
commit 779c36b538121c5ade3633ae5cb67bb14c8c3877
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:54:55 2020 +0000
Reduced cost of vertex pushing
commit 9fea150473906b166365b738ebcea07c697daf3d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:38:53 2020 +0000
Fixed maths, improved LoD resolution
commit 5481df38fea5bf183ff376a3337179cfaa5233dc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 11:22:50 2020 +0000
Dynamically relocate LoD vertices to enhance details
commit a3e36a50ababd615da7db1b26158c7906a5def01
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 18:13:51 2020 +0000
Simpler terrain spiral rendering
commit 255f450ae9ac8763db4bede075fb409161ed57cc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:53:17 2020 +0000
Better LoD precision
commit 3d027aebe812a5b8658a4eb8123dc9f61b3776d2
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:04:03 2020 +0000
Better falloff
commit be775c9484b457b2c0b1a494aec03392d0c70e76
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 15:30:45 2020 +0000
Applied good ideas from experimental branch
commit 58587b68545a23c5c04ab4574a4b94b3bc982246
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 16:15:13 2020 +0000
Minor fixes to LoD merging
commit 7b42aebd709c14df2db766aad61d9280ad24d84d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 15:04:44 2020 +0000
Capped LoD dragging
commit 8aafc559f87124e1ea5ca6e3ddc2aa0c242d793c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:54:37 2020 +0000
Better blending between LoD and terrain border
commit edd3455d5161792d87ddc8eadc0ecbad5532b284
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:40:19 2020 +0000
Fixed LoD z depth, added sea level offset
commit b9b06744620114dd5556e73f64fa93c145503a7c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:27:43 2020 +0000
Better LoD smoothing
commit a1aee931e790431560cd2d953ad61d9497072afd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Feb 21 14:52:17 2020 +0100
Adding shadows.
commit 2400786c13dd891c131ed86d48d05df516a8a778
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 13:48:40 2020 +0000
Use world map as LoD source
commit dbf650f504a4c25fbbc2096ac3616c736bf52d23
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Jan 20 00:48:14 2020 +0000
Better clouds at distance
commit 5e6f81b86cdb9730b9b056877b19257075fd5fa8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Jan 19 23:59:02 2020 +0000
sync
commit 745e7540ddb000cc645f612767b337c2ddc3f7c0
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 12:40:48 2019 +0000
Improved cloud falloff mist, faster noise sampling
commit f6a200d0cb866196ba57697466755f9e0c7ea5d8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 10:09:00 2019 +0000
Improved long-range depth precision, removed unnecessary LoD polygons
commit 63d1b2bb2292898d59fb4f4e502201103dfeb86f
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 20:57:46 2019 +0000
Working LoD shader
commit f13d98ee3e58f881e8b978861a67663b59ed91ec
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 11:03:40 2019 +0000
LoD first attempt (stack overflow issue)
2020-08-20 18:34:59 +00:00
|
|
|
|
let (alt_old, _) = uniform_noise(map_size_lg, |posi, wposf| {
|
2020-02-01 20:39:39 +00:00
|
|
|
|
// This is the extension upwards from the base added to some extra noise from -1
|
|
|
|
|
// to 1.
|
2019-10-16 11:39:41 +00:00
|
|
|
|
//
|
2020-02-01 20:39:39 +00:00
|
|
|
|
// The extra noise is multiplied by alt_main (the mountain part of the
|
|
|
|
|
// extension) powered to 0.8 and clamped to [0.15, 1], to get a
|
|
|
|
|
// value between [-1, 1] again.
|
2019-10-16 11:39:41 +00:00
|
|
|
|
//
|
|
|
|
|
// The sides then receive the sequence (y * 0.3 + 1.0) * 0.4, so we have
|
|
|
|
|
// [-1*1*(1*0.3+1)*0.4, 1*(1*0.3+1)*0.4] = [-0.52, 0.52].
|
|
|
|
|
//
|
2019-08-22 22:57:42 +00:00
|
|
|
|
// Adding this to alt_main thus yields a value between -0.4 (if alt_main = 0 and
|
2019-10-16 11:39:41 +00:00
|
|
|
|
// gen_ctx = -1, 0+-1*(0*.3+1)*0.4) and 1.52 (if alt_main = 1 and gen_ctx = 1).
|
|
|
|
|
// Most of the points are above 0.
|
2019-08-22 22:57:42 +00:00
|
|
|
|
//
|
2019-10-16 11:39:41 +00:00
|
|
|
|
// Next, we add again by a sin of alt_main (between [-1, 1])^pow, getting
|
|
|
|
|
// us (after adjusting for sign) another value between [-1, 1], and then this is
|
2020-02-01 20:39:39 +00:00
|
|
|
|
// multiplied by 0.045 to get [-0.045, 0.045], which is added to [-0.4, 0.52] to
|
|
|
|
|
// get [-0.445, 0.565].
|
2019-08-22 22:57:42 +00:00
|
|
|
|
let alt_main = {
|
|
|
|
|
// Extension upwards from the base. A positive number from 0 to 1 curved to be
|
|
|
|
|
// maximal at 0. Also to be multiplied by CONFIG.mountain_scale.
|
2019-10-16 11:39:41 +00:00
|
|
|
|
let alt_main = (gen_ctx
|
|
|
|
|
.alt_nz
|
|
|
|
|
.get((wposf.div(2_000.0)).into_array())
|
|
|
|
|
.min(1.0)
|
|
|
|
|
.max(-1.0))
|
|
|
|
|
.abs()
|
|
|
|
|
.powf(1.35);
|
|
|
|
|
|
2020-02-01 20:39:39 +00:00
|
|
|
|
fn spring(x: f64, pow: f64) -> f64 { x.abs().powf(pow) * x.signum() }
|
2019-09-24 17:56:51 +00:00
|
|
|
|
|
2020-02-09 21:15:10 +00:00
|
|
|
|
0.0 + alt_main
|
2019-10-16 11:39:41 +00:00
|
|
|
|
+ (gen_ctx
|
|
|
|
|
.small_nz
|
2020-01-22 14:31:10 +00:00
|
|
|
|
.get(
|
|
|
|
|
(wposf
|
|
|
|
|
.mul(32.0)
|
|
|
|
|
.div(TerrainChunkSize::RECT_SIZE.map(|e| e as f64))
|
|
|
|
|
.div(300.0))
|
|
|
|
|
.into_array(),
|
|
|
|
|
)
|
2019-10-16 11:39:41 +00:00
|
|
|
|
.min(1.0)
|
|
|
|
|
.max(-1.0))
|
2020-02-01 20:39:39 +00:00
|
|
|
|
.mul(alt_main.powf(0.8).max(/* 0.25 */ 0.15))
|
2019-10-16 11:39:41 +00:00
|
|
|
|
.mul(0.3)
|
|
|
|
|
.add(1.0)
|
|
|
|
|
.mul(0.4)
|
2020-02-09 21:15:10 +00:00
|
|
|
|
+ spring(alt_main.abs().powf(0.5).min(0.75).mul(60.0).sin(), 4.0).mul(0.045)
|
2019-08-22 22:57:42 +00:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// Now we can compute the final altitude using chaos.
|
2020-02-01 20:39:39 +00:00
|
|
|
|
// We multiply by chaos clamped to [0.1, 1.32] to get a value between [0.03,
|
|
|
|
|
// 2.232] for alt_pre, then multiply by CONFIG.mountain_scale and
|
|
|
|
|
// add to the base and sea level to get an adjusted value, then
|
|
|
|
|
// multiply the whole thing by map_edge_factor (TODO: compute final
|
|
|
|
|
// bounds).
|
2019-10-16 11:39:41 +00:00
|
|
|
|
//
|
2019-12-11 09:14:50 +00:00
|
|
|
|
// [-.3675, .3325] + [-0.445, 0.565] * [0.12, 1.32]^1.2
|
|
|
|
|
// ~ [-.3675, .3325] + [-0.445, 0.565] * [0.07, 1.40]
|
2019-10-16 11:39:41 +00:00
|
|
|
|
// = [-.3675, .3325] + ([-0.5785, 0.7345])
|
|
|
|
|
// = [-0.946, 1.067]
|
2019-09-24 17:56:51 +00:00
|
|
|
|
Some(
|
2020-01-22 14:31:10 +00:00
|
|
|
|
((alt_base[posi].1 + alt_main.mul((chaos[posi].1 as f64).powf(1.2)))
|
(See sharp/lod-history) LOD, shadows, greedy meshing, new lighting, perf
---
Pretty much a Veloren fork at this point. Here's a high level overview of the changes (will be added to CHANGELOG just before merge).
At a high level this MR incorporates roughly two groups of changes.
The first group consists of new game features: more flexible map sizes, level of detail terrain, shadow maps, and a new lighting
engine. This is "feature work" that (mostly) only adds new things to Veloren, and mostly shouldn't affect old stuff.
The second big group of changes are those addressing the fallout from all the new features. These include performance fixes of
various sorts: the addition of multiple graphics options and optimization of the cheap ones to avoid work, switching all voxel
models to use some variant of greedy meshing, switching over much of our CPU-side vector math to exploit SIMD instructions
(coinciding with a fork of `vek`), and a rewrite of how the UI handles text rendering (coinciding with updates to our fork
of `conrod`). Making Veloren's hardcoded colors appear correct under the new lighting engine also required considerably
changes (TODO: Fill in this section when it's complete).
The second category of changes often heavily touches code owned by other people, including frequently modified code "owned" by a
handful of people, so I recommend that this code be reviewed particularly carefully.
---
At a high level (each will be described in more detail below):
- The world map has been refactored.
- The world size is no longer hardcoded (@zesterer).
- The map generation code was made generic to allow using it outside of the `world` crate (@zesterer).
- On world creation, we now compute *horizon maps* (@zesterer).
- The way we pass the world from the server to the client has been updated (@xMAC94x).
- Artifacts related to image rotation were fixed (@imbris).
- Multiflow rivers were enabled (@zesterer).
- In the process of making changes related to the world map, various incidental fixes and optimizations were required.
- The new *level of detail* feature was added (@zesterer wrote part of this and has checked out the rest).
- A new LOD terrain rendering step was added to the pipeline.
- The LOD terrain quality was made configurable via a graphics setting.
- Horizon maps were used to cast shadows from LOD chunks on both LOD and non-LOD terrain.
- A "voxelization" effect was incorporated into rendered LOD terrain to make it blend better into the world.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Veloren's lighting has been completely overhauled (@zesterer has already checked most of this out).
- A semi-accurate index of refraction was assigned to our materials.
- A new, more realistic, physically based approach to lighting was used using the *Ashikhmin Shirley* BRDF.
- We emulate *atmospheric scattering* using equations designed for measuring solar panel light exposure.
- We attempt to compute *realistic light attenuation* in water using its real material properties.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Point and directional lights now cast realistic shadows, using *shadow mapping.* (@imbris, @zesterer, @Treeco, @YuriMomo)
- Point light shadow maps were added to the rendering pipeline, using geometry shaders and *seamless cube maps*.
- Directional light shadows were added to the rendering pipeline, using LISPSM together with disabling *depth clamping*.
- "Shadow-only" chunks and NPCs were added to prevent shadows from models behind you from disappearing.
- In the process of making changes related to shadow maps, various incidental fixes and optimizations were required.
The addition of shadow maps, LOD terrain, and the new lighting all led to significant performance degradation, on top of other
changes happening in master. Therefore, a large number of performance improvements were also needed:
- The graphics options were made much more flexible and configurable, and shaders were optimize.
- New options were provided for how to render lights and shadows (@Pfauenauge, @zesterer).
- Graphic setting storage and configuration were overhauled to make adding new features easier (@Pfauenauge, @imbris).
- Shaders were rewritten to utilize GLSL's preprocessor to avoid overhead (@zesterer, @YuriMomo).
- In the process of making changes related to providing additional rendering options, various incidental fixes and optimizations were required.
- Voxel model creation was switched to use *greedy meshing.*
- A new voxel meshing method, greedy meshing, was added (@imbris).
- Uses of the older meshing methods were migrated to use greedy meshing (@imbris, @jshipsey, @Pfauenauge).
- New restrictions were added to terrain, figure, and sprites to future proof them for further optimizations (@jshipsey, @Pfauenauge, @zesterer).
- Most positions are now relative to either chunk or player position for better precision (@imbris, @zesterer, @scottc).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- Animation and terrain math were switched to use SIMD where possible.
- Fixes were made to vek to make its SIMD feature usable for us (@zesterer, @imbris).
- The interface and types used in bone animation were changed in various ways (@jshipsey, @Snowram, @Pfauenauge).
- Redundant code generation for body animation is now partly taken care of by a macro (@jshipsey, @Snowram, @Pfauenauge).
- Animation code was modified to to use vek's SIMD representation where possible (@jshipsey, @Snowram, @Pfauenauge).
- Terrain meshing code and shadow map math were also modified to use vek's SIMD representation (@imbris).
- SIMD instruction generation was enabled (@YuriMomo, @jshipsey, @Snowram, @imbris, @Angelonfira, @xMAC94x).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- The way we cache glyphs was completely refactored, fixed, and optimized.
- Our fork of `conrod` was optimized in various ways (@imbris).
- Our fork of `conrod` now exposes whether a widget was updated during the current frame (@imbris).
- Our use of the glyph cache was rewritten for correctness (@imbris).
- A *text cache* was introduced that lets us skip remeshing glyphs that have not changed (@imbris).
- Various changes were made to reduce pressure on the glyph cache, with more planned (@imbris, @Pfauenauge).
- In the process of making changes related to the glyph cache, various incidental fixes and optimizations were required.
- Colors were changed to keep Veloren's look consistent with master.
- Some older tree models were brought back (@Pfauenauge).
- TODO(@Sharp): All hardcoded colors were extracted and made hotloadable.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Hardcoded colors were fixed to conform to Veloren's style.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Color models were fixed to conform to Veloren's style.
A detailed description of the involved changes follows.
---
- The world size is no longer hardcoded. All functions dependent on world size now take a `WorldSizeLg`, which holds the base 2 logarithm of each actual world dimension and is guaranteed to maintain certain properties (outlined in `common/src/terrain/map.rs`). Additionally, many utility functions that utilize the world size were moved into `common` as well (mostly `common/src/terrain/mod.rs`). Finally, the world map format was updated in order to store its size explicitly, with a migration path from the old format that should work whenever the old formatted map was a square (practically always). See `world/src/sim/mod.rs` for these changes.
- The map generation code was made generic to allow using it outside of the `world` crate. The parts of the map generating code that do not need to query the world were moved over to `common/src/terrain/map.rs`, allowing them to be used from the client without creating a dependency on `world`. The rest of it was turned into helper functions in `world/src/sim/map.rs`, which can be passed as closures to the generic map generation code to complete its construction. This also means that colors are now passed in separately to the map generation function. See <https://veloren.net/devblog-78/> for more details.
- On world creation, we now compute *horizon maps*. See the function in `world/src/sim/util.rs`.
Given a height map and a plane intersecting that height map, our horizon maps allow us to encode enough information to reconstruct shadows for each point on the height map using only the *horizon angle* (the angle at which the sun starts to become visible). As Veloren's sun only covers one plane, this is sufficient for encoding sun shadows for LOD terrain, by encoding two angles per chunk (one for each 90 degrees the sun covers). We can also use this for the moon, if we want, since the moon follows the same path. Additionally, we store the *height* of the furthest occluder, to try to make the shadows volumetric; so this means 4 bytes in total for each chunk.
Support for horizon maps has been merged into the map functionality in common as well.
- The way we pass the world from the server to the client has been updated. Rather than passing the prerendered map, we instead pass three maps with values for each chunk; one with the color information, a second with altitude information, and a third with horizon map information. We then reconstruct the map on the client, together with some additional information we send from the server (like the sea level and maximum height). See `common/src/msg/server.rs` for a detailed description of the format of `WorldMapMsg`, and `server/src/libr.rs` and `client/src/lib.rs` for details of the map construction and parsing.
- Artifacts related to image rotation were fixed. See the commit message for commit SHA `cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e` for a detailed explanation. This involved changes to shaders, the addition of a new type of graphic (also reflected in the graphic cache) that allows specifying a border color (which automatically makes the associated texture immutable), and some related fixes. I reproduce the first two paragraphs of the MR description as well:
```
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
```
- Multiflow rivers were enabled.
This does not really need to be part of this MR, and would be easy to revert, but since it seemed to provide a nice improvement it's currently packaged with it.
We already computed multiple outflows from each chunk for erosion purposes long before this MR.
However, we never modified river rendering to be able to handle this case (just a single downhill river flow is complex enough!) so this was not exposed when deciding which chunks were rivers.
Now that
- In the process of making changes related to the world map, various incidental fixes and optimizations were required. Some examples of fixes include making sure terrain is never lowered to below sea level (to make the shadow maps report correct values), fixing map altitudes and colors to understand things like cliffs and "block level" coloring (that doesn'te xist on the column level), and fixing a crashbug when rendering images for the UI where source pixels are strongly rectangular. Some examples of related performance fixes include avoiding allocating a fresh vector for all the maps (i.e. copying it over to change the format from `[u32; n]` to `DynamicImage` and then copying again to convert to `RgbaImage`), and instead using the `gfx::memory::slice` function to accomplish the same thing. These sorts of changes are spread all arond the code.
This includes the additon of a new scene, `voxygen/src/scene/lod.rs`, a new pipeline `voxygen/src/render/pipeline/lod_terrain.rs`, and new shaders `assets/vxygen/shaders/lod-terrain-vert.glsl` and `assets/vxygen/shaders/lod-terrain-frag.glsl`, as well as associated changes to the renderer in `voxygen/src/render/renderer.rs`.
The main idea behind our initial approach to LOD was to take the world data we now get from the server (altitude, color, and horizon mapping).
- Some previously computed values were turned into shader uniforms for better prediction on weak processors. (@zesterer)
- Calls to power or trig functions were removed or replaced with multiplications, where possible.
- After some deliberation
- To properly handle sprite "waving" for nearby sprites,
We explicitly designed the greedy meshing system with figures and sprites in mind.
In both cases, we want to be able to *efficiently* pack many different models into the same texture, especially in cases where we know
we will either not be removing any of the grouped-together from the models from the texture, or will remove all of them at once (so
they can be packed into some specific subtexture).
For sprites, since we know every model in advance and never intend to deallocate them, we currently pack them all as efficiently as
possible into one giant tetxure atlas. However, in the future we might opt to pack them slightly less efficiently in exchange for
shrinking the sprite vertex size.
For figures, we pack all the textures for each *model* into the same atlas.
is a global texture atlas used for every sprite, and for figures which is why we have the ability to mesh multiple
models to the same texture area (using the simple texture atlas allocator) without requiring intermediate vector allocations.
This is accomplished by delaying the time when we actually write the color and light data to the texture until *after* all the
model vertices have been meshed; then, we can just allocate the whole color/light array at once, making the atlas we use an
exact fit. In computer science-y terms, we accomplish this delay by, after we perform the initial greedy meshing (without
texture information), not continuing to create the texture data, but instead constructing a *continuation*--that is, a function
that, when called, will execute the rest of the computation. We push this continuation (which in Rust terms is a `FnOnce` closure
that takes the `ColLightsInfo` that it is supposed to write to as context) onto a
onto a vector
resizing. To allow for suspended writes to texture data, Rust pointed out to me that the continuation that would eventually write the color and light data to the texture atlas (the one that is shared by all models sharing the same greedy mesher) would have to *own* whatever data it mshed. Because we often generate the model data to mesh as a temporary in `voxygen/src/load.rs`, the
- Matrix multiplications in the shader were reduced for figure data (@zesterer).
- Vertex "waves" for fluid data were removed.
- Terrain "bending" near edges was removed.
- Scaling was fixed to make sure empty space was not introduced in a space previously occupied by a block. It was also changed to take ownership of its voxel data,
rather than sharing it, to let it be used with meshing.
- Rust's nightly version was bumped in order to use the `array_map` function, which lets us reuse more code between the simple map and `FigureModelCache`.
- PositionedGlyph::standalone.
---
I tried to cite sources in many cases[^realtime],[^lloyd],[^lispsm],[^pbrt],[^greedy],[^tjunctions]
where I needed features from elsewhere but I am particularly grateful for the following resources,
esepcially where they have accompanying source code. I linked all of them that are accessible to the public (those that are not were
obtained through legal means).
[^realtime]: Eisemann, Elmar, Michael Schwarz, Ulf Assarsson, Michael Wimmer. Real-Time Shadows. A K Peters/CRC Press (T&F), 20160419.
[^lloyd]: Lloyd,B. 2007. [Logarithmic perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). PhD thesis, University of North Carolina.
[^lispsm]: Wimmer, M., Scherzer, D., and Purgathofer, W. 2004. [Light space perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). In Proceedings of Eurographics Symposium on Rendering 2004, pp. 143– 152.
[^pbrt]: Pharr, Matt, et al. [http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf](Physically Based Rendering: From Theory to Implementation). Third edition, Morgan Kaufmann Publishers/Elsevier, 2017.
[^greedy]: mikolalysenko. “Meshing in a Minecraft Game.” 0 FPS, 30 June 2012, <https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/>.
[^tjunctions]: blackflux. “Meshing in Voxel Engines – Part 1.” Blackflux.Com, 23 Feb. 2014, <https://blackflux.wordpress.com/2014/02/23/meshing-in-voxel-engines-part-1/>.
I am also especially grateful to Khronos, Wikiepdia, and stackoverflow for answering many of my specific questions while writing the MR.
---
Squashed commit of the following:
commit 300505e7305a2fdac722a808ee8538323f215f39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 18:46:25 2020 +0200
Fixing cargo doc and typo in CHANGELOG.
commit ec0aeb18e8499d7d84ef818331b4b65c3d76cea6
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 15:38:50 2020 +0200
Hopefully final commit for the LOD branch.
commit 5e8ea0b1eaac02903a02feb2eb038d195de4872f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 10:14:26 2020 +0200
Falling back to power as stopgap.
commit e44a1cbf46504ee9931a01bdc9033e145500d557
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 09:25:41 2020 +0200
Address imbris feedback.
Temporarily disables shiny water, lowers max VD.
These restrictions will be lifted soon after merging.
commit 561e25778a108ac3712f5ec2ce3a51234c4430d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 08:31:13 2020 +0200
Tweaking shaders a bit.
commit 7d19259078ce0dd7b3742ad7d0cb3fab3ece3fdc
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:59:43 2020 +0200
Fix view example as well.
commit 051cd4934e0fad2c0b15db4380a4189fa318679f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:29:06 2020 +0200
Fix meshing benchmark.
commit c95e07db3b4dcca285678985e65e31b927cb1c61
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 05:46:22 2020 +0200
Address MR feedback, fix scene clouds.
commit 1bfb816cabdb3ffc1e507a009c2d98696b4b573a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:39:36 2020 +0200
Incorporating Pfau's figure color changes.
New eyes and new humanoid colors.
commit 3f9b89a3ac7b3356b1dba0d1a8f6541357f81469
Merge: e2f5162e4 62c53963a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:29:41 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit e2f5162e4f96f4124aa43488f7245d341b3dcfd4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:28:38 2020 +0200
World colors are all hotloadable.
They live in assets/world/style/colors.ron.
Only a small handful of hardcoed colors remain in World; they are either
part of the map, or difficult to disentangle from the rest of the
computation. Comments are made where appropriate.
commit 62c53963abe1975009d34a8f9515a355bef24f31
Author: Marcel Märtens <marcel.cochem@googlemail.com>
Date: Wed Aug 19 15:59:00 2020 +0200
replace pretty_env_logger with tracing
commit 5b1625f99d9586fe80e2232f583ec5af9f953099
Merge: d71003acd 4942b5b39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:15:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit d71003acdabeff970b3928e97c26af6847b5b78e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:14:34 2020 +0200
Hotloading colors, part 1: colors in common.
Currently, this just entails humanoid colors. There are only three
colors not handled; the light emitter colors in
common/src/comp/inventory/item/tool.rs. These don't seem important
enough to me to warrant making hotloadable, at least not right now, but
if it's needed later we can always add them to the file.
commit 63b5e0e553eb2ea49276f192a6fc7dd65254270d
Merge: c32b337a4 6d2c4b9c1
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 13:05:37 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c32b337a46e10d9de473d178a94a3ccd61c39bb3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:52:04 2020 +0200
Fixing LOD grid, for real.
commit a166ae0360395387e09fb35a1f84210c2ce5ec24
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:28:05 2020 +0200
Addressing imbris's initial feedback.
Fixes two minor bugs: explosion particles were no longer spawning
randomly, and LOD grids were not perfectly even.
commit 4cbad004f44060994252dd3d38647a14a589712f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:27:58 2020 +0200
Bumping nightly per request.
commit 548680276aac77c25d43d16b5622f847d474dbef
Merge: acc098604 8f8b20c91
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:26:06 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit acc0986040589a3492f88a740bc3c3fc693b26d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:28:32 2020 +0200
Lower resolution due to lying drivers.
commit d3b878de2a52c358d2944a6bbd0555dad7fbdb10
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:15:38 2020 +0200
Fix issues msh encountered with Intel 4600.
commit 10245e0c1b0cb6fae10d86409435364edc6102ef
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 21:15:02 2020 +0200
Merge more models into one mesh than we did previously.
commit 3155c31e663c52ae5c3a53d5fb5665892a1a498a
Merge: 7204cc8a7 3c199280e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:35:22 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7204cc8a7a4f74a30306bd205d9834fee4bb944f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:34:43 2020 +0200
Fix not yet done NPC animations.
This forces them all to be the idle animation if not specified.
This fixes issues where you'd have giant NPCs in water.
commit bc83360f2a08918f19d417b5f772e1ff554dba08
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 19:36:37 2020 +0200
Try to fix some bugs:
- Z fighting with LOD terrain and water.
- Audio SFX not playing.
commit 1fd104aa603bf3781b6526a5cada46aeca3049dd
Merge: 862df3c99 7c2c392a3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 12:02:31 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 862df3c9976c4da9bd7cfd784f1a85973127968a
Merge: 0a4218ed9 75c1d4401
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 05:52:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0a4218ed9d541a2b34c133351bea38a99ddf4ea7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 22:27:14 2020 +0200
Fix particle depth.
commit f51dfdeb442d0dd5243dd2f344fa4be295bd0875
Merge: c6251a956 5e6dc0471
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:19:04 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit c6251a956ad376400dca5c23420cf8d213dc8fdf
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:15:46 2020 +0200
Cache figures more intelligently.
Cache figures for longer, and don't cache character states for the
player except where they actually affect the rendered model.
commit 0ed801d5404982c6fb63b1eaa4567d908b294c9d
Merge: c11b9bdf0 eea64f78f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 16:32:24 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c11b9bdf0a53bf9884d2f5a48fec9b01d582df1a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 11:47:15 2020 +0200
Remove unneeded Clippy annotation.
commit 16aa9ef40af56d69289d00aafb3deadfb8bd4f35
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 8 00:53:02 2020 +0200
Fix hotloading and Clippy.
commit 3dc973e0be5b758da1e9805eb764ad401374cd0c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 23:50:27 2020 +0200
Major speedups with SIMD.
commit fba64a7d93d5a96077ce87287bbce6ab9b7fbcae
Merge: 76429d00e d1e10b178
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:19 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 76429d00eea00d212fbd672a84ee91e75b19b938
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:10 2020 +0200
Add clippy.toml.
commit c79f512f84dbb83cb82b7954db68ff241dfd8e41
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 11:55:20 2020 +0200
Fix all clippy issues, clean up Rust code.
commit 6f90e010b3fbefb53b0d632e819931350015b6b8
Merge: 77a8c7c26 5929cfa5c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:30 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 77a8c7c267d3f44a1a62bd6b2274359973c5e4d4
Merge: b44e44232 44febaabd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:10 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 5929cfa5c713aa392110bbb62407f76caf53c3df
Author: jshipsey <jshipsey18@gmail.com>
Date: Thu Aug 6 20:47:27 2020 -0400
fixed in-hand arrow bug
commit b44e442325d828f1cd564d66908f89d09e80474b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 6 13:40:35 2020 +0200
Miscellaneous performance improvements.
commit be37acf287c1360d8085862526ac3365ffd1d768
Merge: 125d7fc6c c11876547
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 05:49:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 125d7fc6c4dcd8c8c5f27b8268a4d64f409f3644
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 04:55:31 2020 +0200
Abstract over simd vs. repr_c vectors.
Also some minor improvements to Event size.
commit d4d4956e9252e1241ce110b2aa85076c6b1e2a23
Merge: 5f3b7294a aced5f979
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:56:54 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 5f3b7294af1f8533edc2620b58863c248e2b07af
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:43:52 2020 +0200
Fix formatting issues I missed before.
commit a428a3ebba70dcab63dd0f8cd983120c90617271
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:41:51 2020 +0200
Fix clippy warnings, part 1.
There aer still a bunch of type too complex and
function takes too many arguments warnings that I'll fix later
(or ignore, since in the one case I did fix a function takes too
many arguments warning I think it made the code *less* readable).
commit ba54307540ed8a937ac08209730284fc653af85b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 30 13:22:42 2020 +0200
Fix light animations so they are removed when the light turns off.
commit 7e0f4bcbf0f4717145d8beac40d52e3acebbe2aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 21:10:20 2020 +0200
Fix crash in edge case for pixel art.
commit 56da06f7a351e2b949e9b014a90b974d511a0924
Merge: cf74d55f2 9f53a4a19
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:56:52 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:29:52 2020 +0200
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
The first concern was addressed by fixing the dimensions of the map
images drawn from the UI (so that we always use a square source
rectangle, rather than a rectangular one according to the dimensions of
the map). We also fixed the way rotation was done in the fragment
shader for north-facing sources to make it properly handle aspect ratio
(this was already done for north-facing targets). Together, these fix
rendering issues peculiar to rectangular maps.
The second and third concerns were jointly addressed by adding an
optional border color to every 2D image drawn by the UI. This turns
out not to waste extra space even though we hold a full f32 color
(to avoid an extra dependency on gfx's PackedColor), since voxel
images already take up more space than Optiion<[f32; 4]> requires.
This is then implemented automatically using the "border color"
wrapping method in the attached sampler.
Since this is implemented in graphics hardware, it only works (at
least naively) if the actual image bounds match the texture bounds.
Therefore, we altered the way the graphics cache stores images
with a border color to guarantee that they are always in their own
texture, whose size exactly matches their extent. Since the easiest
currently exposed way to set a border color is to do so for an
immutable texture, we went a bit further and added a new "immutable"
texture storage type used for these cases; currently, it is always
and automatically used only when there is a specified border color,
but in theory there's no reason we couldn't provide immutable-only
images that use the default wrapping mdoe (though clamp to border
is admittedly not a great default).
To fix the maps case specifically, we set the border color to a
translucent version of the ocean border color. This may need
tweaking going forward, which shouldn't be hard.
As part of this process, we had to modify graphics replacement to
make sure immutable images are *removed* when invalidated, rather
than just having a validity flag unset (this is normally done by
the UI to try to reuse allocations in place if images are updated
in benign ways, since the texture atlases used for Ui do not
support deallocation; currently this is only used for item images,
so there should be no overlap with immutable image replacement,
so this was purely precautionary).
Since we were already touching the relevant code, we also updated
the image dependency to a newer version that provides more ways
to avoid allocations, and made a few other changes that should
hopefully eliminate redundant most of the intermediate buffer
allocations we were performing for what should be zero-cost
conversions. This may slightly improve performance in some
cases.
commit ad18ce939940a8c697270f6e9b94db9942fd8295
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 13:21:09 2020 +0200
Fix continent scale hack.
commit 36b1cb074f5b195aebd7dbbc3da7f0246a1a18ec
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 12:11:40 2020 +0200
Enable loading different sized maps without a recompile.
We may want to tweak the effects of the continent_scale_hack.
commit 13b6d4d534cc4814b7cb3294ca41bbfea0a6b186
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 10:55:48 2020 +0200
Removing WORLD_SIZE, part 1.
Erased almost every instance of WORLD_SIZE and replaced it with a local
power of two, map_size_lg (which respects certain invariants; see
common/src/terrain/map.rs for more details about MapSizeLg). This also
means we can avoid a dependency on the world crate from client, as
desired.
Now that the rest of the code is not expecting a fixed WORLD_SIZE, the
next step is to arrange for maps to store their world size, and to use
that world size as a basis prior to loading the map (as well, probably,
as prior to configuring some of the noise functions).
commit 30b1d2c6428230a9eaa0d749cdcbbd6f1cbccd78
Merge: 7d56ba31b 1377b369f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:58 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 7d56ba31b445441461b28a07fc495d7d4f047c17
Merge: 2101113b4 598f14b25
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 1377b369f6db2258e910d467a5740f31789e3ded
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sun Jul 19 23:25:38 2020 +0200
more saturated pumpkins
commit ae8d50527f93bb0616c2ad46ce4dacb63bc37c6d
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sat Jul 18 20:29:56 2020 +0200
acacia models
commit 2101113b467e691de787392d7f20f1745f5637bd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 18 18:55:25 2020 +0200
Higher detail LOD.
commit add2cfae04b4385fa5590e11e2bd5229d9dee0aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 16 01:57:39 2020 +0200
Revert some irrelevant stuff.
commit 2e2ab3dc1eaa59a4aef7f8d34a53d8aae4c8553a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 15 13:30:49 2020 +0200
Fixing various things about shadows.
* Correcting optimal LISPSM parameter.
* Figure shadows are cast when they're not visible.
* Chunk shadows stay cast until you look away.
* Seamless cubemaps for point lights.
* Etc.
commit 6c31e6b56217274285b597af297036691ea5d897
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 19:50:26 2020 +0200
Fix shadow creation.
commit 6332cbe006115ae205597529cd8bbccd146c2cca
Merge: be438657c 930e0028b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:47:00 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit be438657c33d7b5bfb0a9582c3ed3fd366637323
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:28:08 2020 +0200
Tweaks to shadows.
Added shadow map resolution configuration, added seamless cubemaps,
documented all existing rendering options, and fixed a few Clippy
errors.
commit 23b4058906013c7d2a40c286e20e32c5fbd897ed
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 10:11:19 2020 +0200
Fix moon, use nonlinear noise for terrain.
Note that the latter has a bit of performance cost.
commit 7fbe5cbfbb9dc29607957b8e62f432a4deed193d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:23:02 2020 +0200
Address lies about max texture size.
commit bcfc62b5e13a1cdd83f57535fde4694720bebfd9
Merge: 75e3626a7 18a08e8fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:22:08 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 75e3626a785919f43fdcf2127c2b10e3e4df2f9f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:21:52 2020 +0200
OpenGL 3.3 minimum.
commit 18a08e8fe2739f02af99a5d2cb4e7c38c49e858b
Author: Monty Marz <m.marzouq@gmx.de>
Date: Tue Jul 7 23:57:52 2020 +0200
settings localization
commit 90c5d1ca3620092bc3ae10b2211489eb1cf6f5e8
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 21:11:48 2020 +0200
Lower near distance.
commit 0e66f02b25aaddaa2dfddbbc89cd67de54a9a7b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 20:09:01 2020 +0200
All sprites sway in the wind now.
commit db1401a6910bf42dcf502462c90038752ff5fbdb
Merge: 69e508d8c e8b4b29d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 19:34:17 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 69e508d8c94d8973033817ca86f357e466fc7c4d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 18:41:37 2020 +0200
Make it easy to switch to SIMD for math.
commit ffe0f5928c7a7e87d00cb5426b3b1d831d7e02fd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 21:21:12 2020 +0200
Fix some issues with underwater rendering.
commit bfda6da42f38fd02c31ee92c81ab785a3e50c2a0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 19:17:59 2020 +0200
Fix some minor display issues.
commit 0ed752e087968cf901301884aaeae698e32ef8a5
Merge: ccc6a06a8 518edcb85
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:14:21 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit ccc6a06a8d4504d6b9f7af7905a414d2ee06ab76
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:04:34 2020 +0200
Some minor changes.
commit 4e020246702889269efe1a191788992164c508d6
Merge: 50a64d927 e05c9267a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 16:17:40 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 50a64d927e6c4f4b0e4688e4cbfca694bc3f922a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 13:07:03 2020 +0200
Fix far plane.
commit 7dd06da34cae8f9ea3b6c889fe965181f3fd3949
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:25:35 2020 +0200
Add shadows.glsl.
commit 618a18c998778bf871b905a74657440fcc384c80
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:10:22 2020 +0200
Adding shadows, greedy meshing, and more.
commit eaea83fe6a5cb1cb0ba8beef888183c718258496
Merge: 267018495 2f89b863e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 22:47:07 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 2670184954a13e4a9e7a4e35ba79aac0c5fac2f7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 21:20:01 2020 +0200
Make civsim and sites deterministic.
For anything in worldgen where you use a HashMap, *please* think
carefully about which hasher you are going to use! This is
especially true if (for some reason) you are depending on hashmap
iteration order remaining stable for some aspect of worldgen.
commit f8376fd5dc72b4a9c2f51a6b4570d59c8b8e9343
Merge: 654f7e049 cdee191dd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 17:53:57 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 654f7e049258d9da27c09608bbe6a46ffa8787e5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed May 20 21:22:30 2020 +0200
Correct backface culling.
commit 560501df05ca725409b0f2e4eb31bdfdc15fd0c7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue May 19 17:22:06 2020 +0200
Greedy messhing for shadows.
commit a4d87e1875ca543436e6bbbeb20348facc5a52d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun May 17 05:59:00 2020 +0200
Shadow maps work for lantern.
commit 243d0837b8a3b08172c9a3c348d964d7ddc2a0a8
Merge: 04382dc28 71dd520cd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:53:13 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 04382dc28632b6c66e8821f6870c0daaa1c1901a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:22:17 2020 +0200
WIP: better graphics config, better LOD, shadow maps.
commit 22ddbad3eb32bfa70f0932176022208fe67ded81
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 18:54:09 2020 +0200
Minor shader fixes.
commit 746a10e8d01ac235f994b0cde78fa48998602a1f
Merge: 0f4a0e763 40ab94673
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 04:02:09 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0f4a0e763db3afbdc4fb0558611f38326ca87151
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 23:03:24 2020 +0200
Switch back to pop-in terrain.
commit dd74fa7e4a53667b38811d7aec58d7f6a68889bb
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 22:58:55 2020 +0200
LOD shading closer to voxel shading.
commit ef67bd58ba0bdaf622b078892d768263b6cba268
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 28 20:49:03 2020 +0200
Experimental underwater lighting.
commit 2c5ad9d07605e80d5fd5679dd3a5d70c605b86a9
Merge: 748279835 303967a6f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 22:35:24 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7482798354eda18c8207950080fc24d443a369de
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 21:59:55 2020 +0200
Replace discard in figure-frag.
commit d83b4ae69be4912f69bf7835f509c68a1c7770a4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:45:57 2020 +0200
Fix sprite lighting, HDR from focus_pos.
commit 0594238004f116274905fa0ed7c2b6c417ed1d29
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:14:10 2020 +0200
Proper HDR from point lights.
commit 48c93d2b41ce5743103d18e76cc228f5ac766492
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 14:01:43 2020 +0200
Brighter ambiance, darker LOD shadows.
commit e0452e895ccfa8a43f368cae3b8b8aedc24dad93
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 13:13:23 2020 +0200
More proper HDR.
commit 4c6da3ed16cfeebb455e40da5f557b4af9a499d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 00:13:10 2020 +0200
Trying LOD noise.
commit 682a3d74c85df5503ffe1fc1cc891bce789df1ad
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 23:11:08 2020 +0200
Fix LOD heights in towns.
commit cc39e5734e8b18f9077bf42e66337c1319dd6b6e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 21:01:23 2020 +0200
More LOD fixes.
commit 8116b21c2e51c836e77894e309ac273caf2917b3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:54:43 2020 +0200
I like this coloring.
commit bc2560ea90b36f4b46190005344232d993043ac3
Merge: 14effdd5d e690efe71
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:48:33 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 14effdd5db8747fcf3eb34f03b46b7792e92d1c5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:24:35 2020 +0200
Re-saturate.
commit 48a643955d4435b78179acba0beb4a979905cc31
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:23:57 2020 +0200
Various fixes.
commit f7b497a0c25f4ad4682c71dd1ed6f608052feb9b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 03:22:49 2020 +0200
Render figures again.
commit 44e4aad48deba8266b9f8bdfd3db096b381f5327
Merge: e6f0a5a98 9ec319a18
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 02:01:04 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit e6f0a5a981a82533ba188fff0a54ce98577bb152
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 24 16:12:20 2020 +0200
Add atmospheric scattering.
commit f2953087f691a8edbc001cb98ebf5059fc6f8ac0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 23 00:01:20 2020 +0200
Fix shadowing for specular reflections.
commit ddd4a67a9799b8d08c7dc0c2bec90621c2bed0e3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Apr 22 22:56:12 2020 +0200
HDR fixes.
commit 1015e60deef3c447381996277df7496707a63bd0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 21 18:25:19 2020 +0200
More lighting changes.
commit 80c264abd111fb237e57843efcb5c071d4f84613
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 13 00:29:59 2020 +0200
Lighting experiments.
commit 8414987e589dd5102bad89762a3adaccc0bfe957
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 9 02:38:40 2020 +0200
WIP -- lighting changes and soft shadows.
commit 9cd2b3fb0d6b49776c6dfe463e4169637250b11a
Merge: c7ea687eb 8b149ad11
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:29 2020 +0200
Merge branch 'sharp/new-lighting' into sharp/small-fixes
commit c7ea687ebbc5aace1b455f134a5bf49ce2c7434a
Merge: 476441531 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:02 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 8b149ad11ad4bb75018fcf9519baec27d1c95951
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:32:39 2020 +0200
Trying out a new lighting model.
commit b0ac9f36f755dd06f7c17c46150568064790864f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 07:56:11 2020 +0200
Use bicubic interpolation for terrain.
commit f6fc9307a121514b614bc50ef8eb055953e7da8a
Merge: 33140a295 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 05:01:41 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 4764415312aae6e9ac2d00e86e84577cb958f1ab
Merge: ed2d0111d 13388ee6a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 04:54:48 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 13388ee6a42943f3f79a9cb488346cef18e272fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 20:30:08 2020 +0200
Various fixes (to coloring and to soft shadows).
commit fbd084a94a067082a87cd6d28b82054709bc9265
Merge: 5a089863b 4fdf6896a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 18:50:38 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/map-colors
commit ed2d0111d994262ae836d84d1fe5a45e4de72a0b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 06:49:27 2020 +0200
Combining colors and LOD.
commit 88342640c6b835114d01c797b89fdede3b0a2108
Merge: 33140a295 5a089863b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:49:20 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 33140a2951b8212725f42c758b277aaec4d888f7
Merge: 4c65a5aed f34d4b379
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:36:21 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 5a089863beb01d4794bbe3580ada47b278715ea2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 03:17:49 2020 +0200
Making maps brighter.
This is probably not the right way to do it, but oh well!
commit 32b2c99109dd486aa922886081068f9c550c83f2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 02:46:36 2020 +0200
Horizon mapping and "layered" map generation.
Horizon mapping is a method of shadow mapping specific to height maps.
It can handle any angle between 0 and 90 degrees from the ground, as
long as know the horizontal direction in advance, by remembering only a
single angle (the "horizon angle" of the shadow map). More is explained
in common/src/msg/server.rs. We also remember the approximate height of
the largest occluder, to try to be able to generate soft shadows and
create a vertical position where the shadows can't go higher.
Additionally, map generation has been reworked. Instead of computing
everything from explicit samples, we pass in sampling functions that
return exactly what the map generator needs. This allows us to cleanly
separate the way we sample things like altitudes and colors from the map
generation process. We exploit this to generate maps *partially* on the
server (with colors and rivers, but not shading). We can then send the
partially completed map to the client, which can combine it with shadow
information to generate the final map. This is useful for two reasons:
first, it makes sure the client can apply shadow information by itself,
and second, it lets us pass the unshaded map for use with level of
detail functionality.
For similar reasons, river generation is split
out into its own layer, but for now we opt to still generate rivers on
the server (since the river wire format is more complicated to compress
and may require some extra work to make sure we have enough precision to
draw rivers well enough for LoD).
Finally, the mostly ad-hoc lighting we were performing has been (mostly)
replaced with explicit Phong reflection shading (including specular
highlights). Regularizing this seems useful and helps clarify the
"meaning" of the various light intensities, and helps us keep a more
physically plausible basis. However, its interaction with soft shadows
is still imperfect, and it's not yet clear to me what we need to do to
turn this into something useful for LoD.
commit f8926a5737ddc51f3d585c651a64c43677aae0f4
Merge: a1aee931e 875ae6ced
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Mar 13 13:32:42 2020 +0100
Merge remote-tracking branch 'origin/master' into sharp/map-colors
commit 4c65a5aed353b119aea65a2aaeb94549b67beb42
Author: Treeco <5021038-Treeco@users.noreply.gitlab.com>
Date: Mon Feb 24 16:48:05 2020 +0000
Made LOD setting slider exponential
commit 2fa7b2d20d7233dc8bfd64f9f7f54617575248f1
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 17:49:53 2020 +0000
Added mist to LoD
commit aab059a450b5f635777129ff82cc15b662965c3c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 15:14:06 2020 +0000
Added LoD slider
commit 779c36b538121c5ade3633ae5cb67bb14c8c3877
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:54:55 2020 +0000
Reduced cost of vertex pushing
commit 9fea150473906b166365b738ebcea07c697daf3d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:38:53 2020 +0000
Fixed maths, improved LoD resolution
commit 5481df38fea5bf183ff376a3337179cfaa5233dc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 11:22:50 2020 +0000
Dynamically relocate LoD vertices to enhance details
commit a3e36a50ababd615da7db1b26158c7906a5def01
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 18:13:51 2020 +0000
Simpler terrain spiral rendering
commit 255f450ae9ac8763db4bede075fb409161ed57cc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:53:17 2020 +0000
Better LoD precision
commit 3d027aebe812a5b8658a4eb8123dc9f61b3776d2
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:04:03 2020 +0000
Better falloff
commit be775c9484b457b2c0b1a494aec03392d0c70e76
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 15:30:45 2020 +0000
Applied good ideas from experimental branch
commit 58587b68545a23c5c04ab4574a4b94b3bc982246
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 16:15:13 2020 +0000
Minor fixes to LoD merging
commit 7b42aebd709c14df2db766aad61d9280ad24d84d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 15:04:44 2020 +0000
Capped LoD dragging
commit 8aafc559f87124e1ea5ca6e3ddc2aa0c242d793c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:54:37 2020 +0000
Better blending between LoD and terrain border
commit edd3455d5161792d87ddc8eadc0ecbad5532b284
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:40:19 2020 +0000
Fixed LoD z depth, added sea level offset
commit b9b06744620114dd5556e73f64fa93c145503a7c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:27:43 2020 +0000
Better LoD smoothing
commit a1aee931e790431560cd2d953ad61d9497072afd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Feb 21 14:52:17 2020 +0100
Adding shadows.
commit 2400786c13dd891c131ed86d48d05df516a8a778
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 13:48:40 2020 +0000
Use world map as LoD source
commit dbf650f504a4c25fbbc2096ac3616c736bf52d23
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Jan 20 00:48:14 2020 +0000
Better clouds at distance
commit 5e6f81b86cdb9730b9b056877b19257075fd5fa8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Jan 19 23:59:02 2020 +0000
sync
commit 745e7540ddb000cc645f612767b337c2ddc3f7c0
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 12:40:48 2019 +0000
Improved cloud falloff mist, faster noise sampling
commit f6a200d0cb866196ba57697466755f9e0c7ea5d8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 10:09:00 2019 +0000
Improved long-range depth precision, removed unnecessary LoD polygons
commit 63d1b2bb2292898d59fb4f4e502201103dfeb86f
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 20:57:46 2019 +0000
Working LoD shader
commit f13d98ee3e58f881e8b978861a67663b59ed91ec
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 11:03:40 2019 +0000
LoD first attempt (stack overflow issue)
2020-08-20 18:34:59 +00:00
|
|
|
|
.mul(map_edge_factor(map_size_lg, posi) as f64)
|
2019-10-16 11:39:41 +00:00
|
|
|
|
.add(
|
|
|
|
|
(CONFIG.sea_level as f64)
|
|
|
|
|
.div(CONFIG.mountain_scale as f64)
|
(See sharp/lod-history) LOD, shadows, greedy meshing, new lighting, perf
---
Pretty much a Veloren fork at this point. Here's a high level overview of the changes (will be added to CHANGELOG just before merge).
At a high level this MR incorporates roughly two groups of changes.
The first group consists of new game features: more flexible map sizes, level of detail terrain, shadow maps, and a new lighting
engine. This is "feature work" that (mostly) only adds new things to Veloren, and mostly shouldn't affect old stuff.
The second big group of changes are those addressing the fallout from all the new features. These include performance fixes of
various sorts: the addition of multiple graphics options and optimization of the cheap ones to avoid work, switching all voxel
models to use some variant of greedy meshing, switching over much of our CPU-side vector math to exploit SIMD instructions
(coinciding with a fork of `vek`), and a rewrite of how the UI handles text rendering (coinciding with updates to our fork
of `conrod`). Making Veloren's hardcoded colors appear correct under the new lighting engine also required considerably
changes (TODO: Fill in this section when it's complete).
The second category of changes often heavily touches code owned by other people, including frequently modified code "owned" by a
handful of people, so I recommend that this code be reviewed particularly carefully.
---
At a high level (each will be described in more detail below):
- The world map has been refactored.
- The world size is no longer hardcoded (@zesterer).
- The map generation code was made generic to allow using it outside of the `world` crate (@zesterer).
- On world creation, we now compute *horizon maps* (@zesterer).
- The way we pass the world from the server to the client has been updated (@xMAC94x).
- Artifacts related to image rotation were fixed (@imbris).
- Multiflow rivers were enabled (@zesterer).
- In the process of making changes related to the world map, various incidental fixes and optimizations were required.
- The new *level of detail* feature was added (@zesterer wrote part of this and has checked out the rest).
- A new LOD terrain rendering step was added to the pipeline.
- The LOD terrain quality was made configurable via a graphics setting.
- Horizon maps were used to cast shadows from LOD chunks on both LOD and non-LOD terrain.
- A "voxelization" effect was incorporated into rendered LOD terrain to make it blend better into the world.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Veloren's lighting has been completely overhauled (@zesterer has already checked most of this out).
- A semi-accurate index of refraction was assigned to our materials.
- A new, more realistic, physically based approach to lighting was used using the *Ashikhmin Shirley* BRDF.
- We emulate *atmospheric scattering* using equations designed for measuring solar panel light exposure.
- We attempt to compute *realistic light attenuation* in water using its real material properties.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Point and directional lights now cast realistic shadows, using *shadow mapping.* (@imbris, @zesterer, @Treeco, @YuriMomo)
- Point light shadow maps were added to the rendering pipeline, using geometry shaders and *seamless cube maps*.
- Directional light shadows were added to the rendering pipeline, using LISPSM together with disabling *depth clamping*.
- "Shadow-only" chunks and NPCs were added to prevent shadows from models behind you from disappearing.
- In the process of making changes related to shadow maps, various incidental fixes and optimizations were required.
The addition of shadow maps, LOD terrain, and the new lighting all led to significant performance degradation, on top of other
changes happening in master. Therefore, a large number of performance improvements were also needed:
- The graphics options were made much more flexible and configurable, and shaders were optimize.
- New options were provided for how to render lights and shadows (@Pfauenauge, @zesterer).
- Graphic setting storage and configuration were overhauled to make adding new features easier (@Pfauenauge, @imbris).
- Shaders were rewritten to utilize GLSL's preprocessor to avoid overhead (@zesterer, @YuriMomo).
- In the process of making changes related to providing additional rendering options, various incidental fixes and optimizations were required.
- Voxel model creation was switched to use *greedy meshing.*
- A new voxel meshing method, greedy meshing, was added (@imbris).
- Uses of the older meshing methods were migrated to use greedy meshing (@imbris, @jshipsey, @Pfauenauge).
- New restrictions were added to terrain, figure, and sprites to future proof them for further optimizations (@jshipsey, @Pfauenauge, @zesterer).
- Most positions are now relative to either chunk or player position for better precision (@imbris, @zesterer, @scottc).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- Animation and terrain math were switched to use SIMD where possible.
- Fixes were made to vek to make its SIMD feature usable for us (@zesterer, @imbris).
- The interface and types used in bone animation were changed in various ways (@jshipsey, @Snowram, @Pfauenauge).
- Redundant code generation for body animation is now partly taken care of by a macro (@jshipsey, @Snowram, @Pfauenauge).
- Animation code was modified to to use vek's SIMD representation where possible (@jshipsey, @Snowram, @Pfauenauge).
- Terrain meshing code and shadow map math were also modified to use vek's SIMD representation (@imbris).
- SIMD instruction generation was enabled (@YuriMomo, @jshipsey, @Snowram, @imbris, @Angelonfira, @xMAC94x).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- The way we cache glyphs was completely refactored, fixed, and optimized.
- Our fork of `conrod` was optimized in various ways (@imbris).
- Our fork of `conrod` now exposes whether a widget was updated during the current frame (@imbris).
- Our use of the glyph cache was rewritten for correctness (@imbris).
- A *text cache* was introduced that lets us skip remeshing glyphs that have not changed (@imbris).
- Various changes were made to reduce pressure on the glyph cache, with more planned (@imbris, @Pfauenauge).
- In the process of making changes related to the glyph cache, various incidental fixes and optimizations were required.
- Colors were changed to keep Veloren's look consistent with master.
- Some older tree models were brought back (@Pfauenauge).
- TODO(@Sharp): All hardcoded colors were extracted and made hotloadable.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Hardcoded colors were fixed to conform to Veloren's style.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Color models were fixed to conform to Veloren's style.
A detailed description of the involved changes follows.
---
- The world size is no longer hardcoded. All functions dependent on world size now take a `WorldSizeLg`, which holds the base 2 logarithm of each actual world dimension and is guaranteed to maintain certain properties (outlined in `common/src/terrain/map.rs`). Additionally, many utility functions that utilize the world size were moved into `common` as well (mostly `common/src/terrain/mod.rs`). Finally, the world map format was updated in order to store its size explicitly, with a migration path from the old format that should work whenever the old formatted map was a square (practically always). See `world/src/sim/mod.rs` for these changes.
- The map generation code was made generic to allow using it outside of the `world` crate. The parts of the map generating code that do not need to query the world were moved over to `common/src/terrain/map.rs`, allowing them to be used from the client without creating a dependency on `world`. The rest of it was turned into helper functions in `world/src/sim/map.rs`, which can be passed as closures to the generic map generation code to complete its construction. This also means that colors are now passed in separately to the map generation function. See <https://veloren.net/devblog-78/> for more details.
- On world creation, we now compute *horizon maps*. See the function in `world/src/sim/util.rs`.
Given a height map and a plane intersecting that height map, our horizon maps allow us to encode enough information to reconstruct shadows for each point on the height map using only the *horizon angle* (the angle at which the sun starts to become visible). As Veloren's sun only covers one plane, this is sufficient for encoding sun shadows for LOD terrain, by encoding two angles per chunk (one for each 90 degrees the sun covers). We can also use this for the moon, if we want, since the moon follows the same path. Additionally, we store the *height* of the furthest occluder, to try to make the shadows volumetric; so this means 4 bytes in total for each chunk.
Support for horizon maps has been merged into the map functionality in common as well.
- The way we pass the world from the server to the client has been updated. Rather than passing the prerendered map, we instead pass three maps with values for each chunk; one with the color information, a second with altitude information, and a third with horizon map information. We then reconstruct the map on the client, together with some additional information we send from the server (like the sea level and maximum height). See `common/src/msg/server.rs` for a detailed description of the format of `WorldMapMsg`, and `server/src/libr.rs` and `client/src/lib.rs` for details of the map construction and parsing.
- Artifacts related to image rotation were fixed. See the commit message for commit SHA `cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e` for a detailed explanation. This involved changes to shaders, the addition of a new type of graphic (also reflected in the graphic cache) that allows specifying a border color (which automatically makes the associated texture immutable), and some related fixes. I reproduce the first two paragraphs of the MR description as well:
```
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
```
- Multiflow rivers were enabled.
This does not really need to be part of this MR, and would be easy to revert, but since it seemed to provide a nice improvement it's currently packaged with it.
We already computed multiple outflows from each chunk for erosion purposes long before this MR.
However, we never modified river rendering to be able to handle this case (just a single downhill river flow is complex enough!) so this was not exposed when deciding which chunks were rivers.
Now that
- In the process of making changes related to the world map, various incidental fixes and optimizations were required. Some examples of fixes include making sure terrain is never lowered to below sea level (to make the shadow maps report correct values), fixing map altitudes and colors to understand things like cliffs and "block level" coloring (that doesn'te xist on the column level), and fixing a crashbug when rendering images for the UI where source pixels are strongly rectangular. Some examples of related performance fixes include avoiding allocating a fresh vector for all the maps (i.e. copying it over to change the format from `[u32; n]` to `DynamicImage` and then copying again to convert to `RgbaImage`), and instead using the `gfx::memory::slice` function to accomplish the same thing. These sorts of changes are spread all arond the code.
This includes the additon of a new scene, `voxygen/src/scene/lod.rs`, a new pipeline `voxygen/src/render/pipeline/lod_terrain.rs`, and new shaders `assets/vxygen/shaders/lod-terrain-vert.glsl` and `assets/vxygen/shaders/lod-terrain-frag.glsl`, as well as associated changes to the renderer in `voxygen/src/render/renderer.rs`.
The main idea behind our initial approach to LOD was to take the world data we now get from the server (altitude, color, and horizon mapping).
- Some previously computed values were turned into shader uniforms for better prediction on weak processors. (@zesterer)
- Calls to power or trig functions were removed or replaced with multiplications, where possible.
- After some deliberation
- To properly handle sprite "waving" for nearby sprites,
We explicitly designed the greedy meshing system with figures and sprites in mind.
In both cases, we want to be able to *efficiently* pack many different models into the same texture, especially in cases where we know
we will either not be removing any of the grouped-together from the models from the texture, or will remove all of them at once (so
they can be packed into some specific subtexture).
For sprites, since we know every model in advance and never intend to deallocate them, we currently pack them all as efficiently as
possible into one giant tetxure atlas. However, in the future we might opt to pack them slightly less efficiently in exchange for
shrinking the sprite vertex size.
For figures, we pack all the textures for each *model* into the same atlas.
is a global texture atlas used for every sprite, and for figures which is why we have the ability to mesh multiple
models to the same texture area (using the simple texture atlas allocator) without requiring intermediate vector allocations.
This is accomplished by delaying the time when we actually write the color and light data to the texture until *after* all the
model vertices have been meshed; then, we can just allocate the whole color/light array at once, making the atlas we use an
exact fit. In computer science-y terms, we accomplish this delay by, after we perform the initial greedy meshing (without
texture information), not continuing to create the texture data, but instead constructing a *continuation*--that is, a function
that, when called, will execute the rest of the computation. We push this continuation (which in Rust terms is a `FnOnce` closure
that takes the `ColLightsInfo` that it is supposed to write to as context) onto a
onto a vector
resizing. To allow for suspended writes to texture data, Rust pointed out to me that the continuation that would eventually write the color and light data to the texture atlas (the one that is shared by all models sharing the same greedy mesher) would have to *own* whatever data it mshed. Because we often generate the model data to mesh as a temporary in `voxygen/src/load.rs`, the
- Matrix multiplications in the shader were reduced for figure data (@zesterer).
- Vertex "waves" for fluid data were removed.
- Terrain "bending" near edges was removed.
- Scaling was fixed to make sure empty space was not introduced in a space previously occupied by a block. It was also changed to take ownership of its voxel data,
rather than sharing it, to let it be used with meshing.
- Rust's nightly version was bumped in order to use the `array_map` function, which lets us reuse more code between the simple map and `FigureModelCache`.
- PositionedGlyph::standalone.
---
I tried to cite sources in many cases[^realtime],[^lloyd],[^lispsm],[^pbrt],[^greedy],[^tjunctions]
where I needed features from elsewhere but I am particularly grateful for the following resources,
esepcially where they have accompanying source code. I linked all of them that are accessible to the public (those that are not were
obtained through legal means).
[^realtime]: Eisemann, Elmar, Michael Schwarz, Ulf Assarsson, Michael Wimmer. Real-Time Shadows. A K Peters/CRC Press (T&F), 20160419.
[^lloyd]: Lloyd,B. 2007. [Logarithmic perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). PhD thesis, University of North Carolina.
[^lispsm]: Wimmer, M., Scherzer, D., and Purgathofer, W. 2004. [Light space perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). In Proceedings of Eurographics Symposium on Rendering 2004, pp. 143– 152.
[^pbrt]: Pharr, Matt, et al. [http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf](Physically Based Rendering: From Theory to Implementation). Third edition, Morgan Kaufmann Publishers/Elsevier, 2017.
[^greedy]: mikolalysenko. “Meshing in a Minecraft Game.” 0 FPS, 30 June 2012, <https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/>.
[^tjunctions]: blackflux. “Meshing in Voxel Engines – Part 1.” Blackflux.Com, 23 Feb. 2014, <https://blackflux.wordpress.com/2014/02/23/meshing-in-voxel-engines-part-1/>.
I am also especially grateful to Khronos, Wikiepdia, and stackoverflow for answering many of my specific questions while writing the MR.
---
Squashed commit of the following:
commit 300505e7305a2fdac722a808ee8538323f215f39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 18:46:25 2020 +0200
Fixing cargo doc and typo in CHANGELOG.
commit ec0aeb18e8499d7d84ef818331b4b65c3d76cea6
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 15:38:50 2020 +0200
Hopefully final commit for the LOD branch.
commit 5e8ea0b1eaac02903a02feb2eb038d195de4872f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 10:14:26 2020 +0200
Falling back to power as stopgap.
commit e44a1cbf46504ee9931a01bdc9033e145500d557
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 09:25:41 2020 +0200
Address imbris feedback.
Temporarily disables shiny water, lowers max VD.
These restrictions will be lifted soon after merging.
commit 561e25778a108ac3712f5ec2ce3a51234c4430d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 08:31:13 2020 +0200
Tweaking shaders a bit.
commit 7d19259078ce0dd7b3742ad7d0cb3fab3ece3fdc
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:59:43 2020 +0200
Fix view example as well.
commit 051cd4934e0fad2c0b15db4380a4189fa318679f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:29:06 2020 +0200
Fix meshing benchmark.
commit c95e07db3b4dcca285678985e65e31b927cb1c61
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 05:46:22 2020 +0200
Address MR feedback, fix scene clouds.
commit 1bfb816cabdb3ffc1e507a009c2d98696b4b573a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:39:36 2020 +0200
Incorporating Pfau's figure color changes.
New eyes and new humanoid colors.
commit 3f9b89a3ac7b3356b1dba0d1a8f6541357f81469
Merge: e2f5162e4 62c53963a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:29:41 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit e2f5162e4f96f4124aa43488f7245d341b3dcfd4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:28:38 2020 +0200
World colors are all hotloadable.
They live in assets/world/style/colors.ron.
Only a small handful of hardcoed colors remain in World; they are either
part of the map, or difficult to disentangle from the rest of the
computation. Comments are made where appropriate.
commit 62c53963abe1975009d34a8f9515a355bef24f31
Author: Marcel Märtens <marcel.cochem@googlemail.com>
Date: Wed Aug 19 15:59:00 2020 +0200
replace pretty_env_logger with tracing
commit 5b1625f99d9586fe80e2232f583ec5af9f953099
Merge: d71003acd 4942b5b39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:15:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit d71003acdabeff970b3928e97c26af6847b5b78e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:14:34 2020 +0200
Hotloading colors, part 1: colors in common.
Currently, this just entails humanoid colors. There are only three
colors not handled; the light emitter colors in
common/src/comp/inventory/item/tool.rs. These don't seem important
enough to me to warrant making hotloadable, at least not right now, but
if it's needed later we can always add them to the file.
commit 63b5e0e553eb2ea49276f192a6fc7dd65254270d
Merge: c32b337a4 6d2c4b9c1
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 13:05:37 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c32b337a46e10d9de473d178a94a3ccd61c39bb3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:52:04 2020 +0200
Fixing LOD grid, for real.
commit a166ae0360395387e09fb35a1f84210c2ce5ec24
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:28:05 2020 +0200
Addressing imbris's initial feedback.
Fixes two minor bugs: explosion particles were no longer spawning
randomly, and LOD grids were not perfectly even.
commit 4cbad004f44060994252dd3d38647a14a589712f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:27:58 2020 +0200
Bumping nightly per request.
commit 548680276aac77c25d43d16b5622f847d474dbef
Merge: acc098604 8f8b20c91
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:26:06 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit acc0986040589a3492f88a740bc3c3fc693b26d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:28:32 2020 +0200
Lower resolution due to lying drivers.
commit d3b878de2a52c358d2944a6bbd0555dad7fbdb10
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:15:38 2020 +0200
Fix issues msh encountered with Intel 4600.
commit 10245e0c1b0cb6fae10d86409435364edc6102ef
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 21:15:02 2020 +0200
Merge more models into one mesh than we did previously.
commit 3155c31e663c52ae5c3a53d5fb5665892a1a498a
Merge: 7204cc8a7 3c199280e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:35:22 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7204cc8a7a4f74a30306bd205d9834fee4bb944f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:34:43 2020 +0200
Fix not yet done NPC animations.
This forces them all to be the idle animation if not specified.
This fixes issues where you'd have giant NPCs in water.
commit bc83360f2a08918f19d417b5f772e1ff554dba08
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 19:36:37 2020 +0200
Try to fix some bugs:
- Z fighting with LOD terrain and water.
- Audio SFX not playing.
commit 1fd104aa603bf3781b6526a5cada46aeca3049dd
Merge: 862df3c99 7c2c392a3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 12:02:31 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 862df3c9976c4da9bd7cfd784f1a85973127968a
Merge: 0a4218ed9 75c1d4401
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 05:52:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0a4218ed9d541a2b34c133351bea38a99ddf4ea7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 22:27:14 2020 +0200
Fix particle depth.
commit f51dfdeb442d0dd5243dd2f344fa4be295bd0875
Merge: c6251a956 5e6dc0471
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:19:04 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit c6251a956ad376400dca5c23420cf8d213dc8fdf
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:15:46 2020 +0200
Cache figures more intelligently.
Cache figures for longer, and don't cache character states for the
player except where they actually affect the rendered model.
commit 0ed801d5404982c6fb63b1eaa4567d908b294c9d
Merge: c11b9bdf0 eea64f78f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 16:32:24 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c11b9bdf0a53bf9884d2f5a48fec9b01d582df1a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 11:47:15 2020 +0200
Remove unneeded Clippy annotation.
commit 16aa9ef40af56d69289d00aafb3deadfb8bd4f35
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 8 00:53:02 2020 +0200
Fix hotloading and Clippy.
commit 3dc973e0be5b758da1e9805eb764ad401374cd0c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 23:50:27 2020 +0200
Major speedups with SIMD.
commit fba64a7d93d5a96077ce87287bbce6ab9b7fbcae
Merge: 76429d00e d1e10b178
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:19 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 76429d00eea00d212fbd672a84ee91e75b19b938
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:10 2020 +0200
Add clippy.toml.
commit c79f512f84dbb83cb82b7954db68ff241dfd8e41
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 11:55:20 2020 +0200
Fix all clippy issues, clean up Rust code.
commit 6f90e010b3fbefb53b0d632e819931350015b6b8
Merge: 77a8c7c26 5929cfa5c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:30 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 77a8c7c267d3f44a1a62bd6b2274359973c5e4d4
Merge: b44e44232 44febaabd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:10 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 5929cfa5c713aa392110bbb62407f76caf53c3df
Author: jshipsey <jshipsey18@gmail.com>
Date: Thu Aug 6 20:47:27 2020 -0400
fixed in-hand arrow bug
commit b44e442325d828f1cd564d66908f89d09e80474b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 6 13:40:35 2020 +0200
Miscellaneous performance improvements.
commit be37acf287c1360d8085862526ac3365ffd1d768
Merge: 125d7fc6c c11876547
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 05:49:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 125d7fc6c4dcd8c8c5f27b8268a4d64f409f3644
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 04:55:31 2020 +0200
Abstract over simd vs. repr_c vectors.
Also some minor improvements to Event size.
commit d4d4956e9252e1241ce110b2aa85076c6b1e2a23
Merge: 5f3b7294a aced5f979
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:56:54 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 5f3b7294af1f8533edc2620b58863c248e2b07af
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:43:52 2020 +0200
Fix formatting issues I missed before.
commit a428a3ebba70dcab63dd0f8cd983120c90617271
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:41:51 2020 +0200
Fix clippy warnings, part 1.
There aer still a bunch of type too complex and
function takes too many arguments warnings that I'll fix later
(or ignore, since in the one case I did fix a function takes too
many arguments warning I think it made the code *less* readable).
commit ba54307540ed8a937ac08209730284fc653af85b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 30 13:22:42 2020 +0200
Fix light animations so they are removed when the light turns off.
commit 7e0f4bcbf0f4717145d8beac40d52e3acebbe2aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 21:10:20 2020 +0200
Fix crash in edge case for pixel art.
commit 56da06f7a351e2b949e9b014a90b974d511a0924
Merge: cf74d55f2 9f53a4a19
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:56:52 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:29:52 2020 +0200
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
The first concern was addressed by fixing the dimensions of the map
images drawn from the UI (so that we always use a square source
rectangle, rather than a rectangular one according to the dimensions of
the map). We also fixed the way rotation was done in the fragment
shader for north-facing sources to make it properly handle aspect ratio
(this was already done for north-facing targets). Together, these fix
rendering issues peculiar to rectangular maps.
The second and third concerns were jointly addressed by adding an
optional border color to every 2D image drawn by the UI. This turns
out not to waste extra space even though we hold a full f32 color
(to avoid an extra dependency on gfx's PackedColor), since voxel
images already take up more space than Optiion<[f32; 4]> requires.
This is then implemented automatically using the "border color"
wrapping method in the attached sampler.
Since this is implemented in graphics hardware, it only works (at
least naively) if the actual image bounds match the texture bounds.
Therefore, we altered the way the graphics cache stores images
with a border color to guarantee that they are always in their own
texture, whose size exactly matches their extent. Since the easiest
currently exposed way to set a border color is to do so for an
immutable texture, we went a bit further and added a new "immutable"
texture storage type used for these cases; currently, it is always
and automatically used only when there is a specified border color,
but in theory there's no reason we couldn't provide immutable-only
images that use the default wrapping mdoe (though clamp to border
is admittedly not a great default).
To fix the maps case specifically, we set the border color to a
translucent version of the ocean border color. This may need
tweaking going forward, which shouldn't be hard.
As part of this process, we had to modify graphics replacement to
make sure immutable images are *removed* when invalidated, rather
than just having a validity flag unset (this is normally done by
the UI to try to reuse allocations in place if images are updated
in benign ways, since the texture atlases used for Ui do not
support deallocation; currently this is only used for item images,
so there should be no overlap with immutable image replacement,
so this was purely precautionary).
Since we were already touching the relevant code, we also updated
the image dependency to a newer version that provides more ways
to avoid allocations, and made a few other changes that should
hopefully eliminate redundant most of the intermediate buffer
allocations we were performing for what should be zero-cost
conversions. This may slightly improve performance in some
cases.
commit ad18ce939940a8c697270f6e9b94db9942fd8295
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 13:21:09 2020 +0200
Fix continent scale hack.
commit 36b1cb074f5b195aebd7dbbc3da7f0246a1a18ec
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 12:11:40 2020 +0200
Enable loading different sized maps without a recompile.
We may want to tweak the effects of the continent_scale_hack.
commit 13b6d4d534cc4814b7cb3294ca41bbfea0a6b186
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 10:55:48 2020 +0200
Removing WORLD_SIZE, part 1.
Erased almost every instance of WORLD_SIZE and replaced it with a local
power of two, map_size_lg (which respects certain invariants; see
common/src/terrain/map.rs for more details about MapSizeLg). This also
means we can avoid a dependency on the world crate from client, as
desired.
Now that the rest of the code is not expecting a fixed WORLD_SIZE, the
next step is to arrange for maps to store their world size, and to use
that world size as a basis prior to loading the map (as well, probably,
as prior to configuring some of the noise functions).
commit 30b1d2c6428230a9eaa0d749cdcbbd6f1cbccd78
Merge: 7d56ba31b 1377b369f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:58 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 7d56ba31b445441461b28a07fc495d7d4f047c17
Merge: 2101113b4 598f14b25
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 1377b369f6db2258e910d467a5740f31789e3ded
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sun Jul 19 23:25:38 2020 +0200
more saturated pumpkins
commit ae8d50527f93bb0616c2ad46ce4dacb63bc37c6d
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sat Jul 18 20:29:56 2020 +0200
acacia models
commit 2101113b467e691de787392d7f20f1745f5637bd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 18 18:55:25 2020 +0200
Higher detail LOD.
commit add2cfae04b4385fa5590e11e2bd5229d9dee0aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 16 01:57:39 2020 +0200
Revert some irrelevant stuff.
commit 2e2ab3dc1eaa59a4aef7f8d34a53d8aae4c8553a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 15 13:30:49 2020 +0200
Fixing various things about shadows.
* Correcting optimal LISPSM parameter.
* Figure shadows are cast when they're not visible.
* Chunk shadows stay cast until you look away.
* Seamless cubemaps for point lights.
* Etc.
commit 6c31e6b56217274285b597af297036691ea5d897
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 19:50:26 2020 +0200
Fix shadow creation.
commit 6332cbe006115ae205597529cd8bbccd146c2cca
Merge: be438657c 930e0028b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:47:00 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit be438657c33d7b5bfb0a9582c3ed3fd366637323
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:28:08 2020 +0200
Tweaks to shadows.
Added shadow map resolution configuration, added seamless cubemaps,
documented all existing rendering options, and fixed a few Clippy
errors.
commit 23b4058906013c7d2a40c286e20e32c5fbd897ed
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 10:11:19 2020 +0200
Fix moon, use nonlinear noise for terrain.
Note that the latter has a bit of performance cost.
commit 7fbe5cbfbb9dc29607957b8e62f432a4deed193d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:23:02 2020 +0200
Address lies about max texture size.
commit bcfc62b5e13a1cdd83f57535fde4694720bebfd9
Merge: 75e3626a7 18a08e8fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:22:08 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 75e3626a785919f43fdcf2127c2b10e3e4df2f9f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:21:52 2020 +0200
OpenGL 3.3 minimum.
commit 18a08e8fe2739f02af99a5d2cb4e7c38c49e858b
Author: Monty Marz <m.marzouq@gmx.de>
Date: Tue Jul 7 23:57:52 2020 +0200
settings localization
commit 90c5d1ca3620092bc3ae10b2211489eb1cf6f5e8
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 21:11:48 2020 +0200
Lower near distance.
commit 0e66f02b25aaddaa2dfddbbc89cd67de54a9a7b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 20:09:01 2020 +0200
All sprites sway in the wind now.
commit db1401a6910bf42dcf502462c90038752ff5fbdb
Merge: 69e508d8c e8b4b29d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 19:34:17 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 69e508d8c94d8973033817ca86f357e466fc7c4d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 18:41:37 2020 +0200
Make it easy to switch to SIMD for math.
commit ffe0f5928c7a7e87d00cb5426b3b1d831d7e02fd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 21:21:12 2020 +0200
Fix some issues with underwater rendering.
commit bfda6da42f38fd02c31ee92c81ab785a3e50c2a0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 19:17:59 2020 +0200
Fix some minor display issues.
commit 0ed752e087968cf901301884aaeae698e32ef8a5
Merge: ccc6a06a8 518edcb85
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:14:21 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit ccc6a06a8d4504d6b9f7af7905a414d2ee06ab76
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:04:34 2020 +0200
Some minor changes.
commit 4e020246702889269efe1a191788992164c508d6
Merge: 50a64d927 e05c9267a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 16:17:40 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 50a64d927e6c4f4b0e4688e4cbfca694bc3f922a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 13:07:03 2020 +0200
Fix far plane.
commit 7dd06da34cae8f9ea3b6c889fe965181f3fd3949
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:25:35 2020 +0200
Add shadows.glsl.
commit 618a18c998778bf871b905a74657440fcc384c80
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:10:22 2020 +0200
Adding shadows, greedy meshing, and more.
commit eaea83fe6a5cb1cb0ba8beef888183c718258496
Merge: 267018495 2f89b863e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 22:47:07 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 2670184954a13e4a9e7a4e35ba79aac0c5fac2f7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 21:20:01 2020 +0200
Make civsim and sites deterministic.
For anything in worldgen where you use a HashMap, *please* think
carefully about which hasher you are going to use! This is
especially true if (for some reason) you are depending on hashmap
iteration order remaining stable for some aspect of worldgen.
commit f8376fd5dc72b4a9c2f51a6b4570d59c8b8e9343
Merge: 654f7e049 cdee191dd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 17:53:57 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 654f7e049258d9da27c09608bbe6a46ffa8787e5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed May 20 21:22:30 2020 +0200
Correct backface culling.
commit 560501df05ca725409b0f2e4eb31bdfdc15fd0c7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue May 19 17:22:06 2020 +0200
Greedy messhing for shadows.
commit a4d87e1875ca543436e6bbbeb20348facc5a52d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun May 17 05:59:00 2020 +0200
Shadow maps work for lantern.
commit 243d0837b8a3b08172c9a3c348d964d7ddc2a0a8
Merge: 04382dc28 71dd520cd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:53:13 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 04382dc28632b6c66e8821f6870c0daaa1c1901a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:22:17 2020 +0200
WIP: better graphics config, better LOD, shadow maps.
commit 22ddbad3eb32bfa70f0932176022208fe67ded81
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 18:54:09 2020 +0200
Minor shader fixes.
commit 746a10e8d01ac235f994b0cde78fa48998602a1f
Merge: 0f4a0e763 40ab94673
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 04:02:09 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0f4a0e763db3afbdc4fb0558611f38326ca87151
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 23:03:24 2020 +0200
Switch back to pop-in terrain.
commit dd74fa7e4a53667b38811d7aec58d7f6a68889bb
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 22:58:55 2020 +0200
LOD shading closer to voxel shading.
commit ef67bd58ba0bdaf622b078892d768263b6cba268
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 28 20:49:03 2020 +0200
Experimental underwater lighting.
commit 2c5ad9d07605e80d5fd5679dd3a5d70c605b86a9
Merge: 748279835 303967a6f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 22:35:24 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7482798354eda18c8207950080fc24d443a369de
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 21:59:55 2020 +0200
Replace discard in figure-frag.
commit d83b4ae69be4912f69bf7835f509c68a1c7770a4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:45:57 2020 +0200
Fix sprite lighting, HDR from focus_pos.
commit 0594238004f116274905fa0ed7c2b6c417ed1d29
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:14:10 2020 +0200
Proper HDR from point lights.
commit 48c93d2b41ce5743103d18e76cc228f5ac766492
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 14:01:43 2020 +0200
Brighter ambiance, darker LOD shadows.
commit e0452e895ccfa8a43f368cae3b8b8aedc24dad93
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 13:13:23 2020 +0200
More proper HDR.
commit 4c6da3ed16cfeebb455e40da5f557b4af9a499d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 00:13:10 2020 +0200
Trying LOD noise.
commit 682a3d74c85df5503ffe1fc1cc891bce789df1ad
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 23:11:08 2020 +0200
Fix LOD heights in towns.
commit cc39e5734e8b18f9077bf42e66337c1319dd6b6e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 21:01:23 2020 +0200
More LOD fixes.
commit 8116b21c2e51c836e77894e309ac273caf2917b3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:54:43 2020 +0200
I like this coloring.
commit bc2560ea90b36f4b46190005344232d993043ac3
Merge: 14effdd5d e690efe71
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:48:33 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 14effdd5db8747fcf3eb34f03b46b7792e92d1c5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:24:35 2020 +0200
Re-saturate.
commit 48a643955d4435b78179acba0beb4a979905cc31
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:23:57 2020 +0200
Various fixes.
commit f7b497a0c25f4ad4682c71dd1ed6f608052feb9b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 03:22:49 2020 +0200
Render figures again.
commit 44e4aad48deba8266b9f8bdfd3db096b381f5327
Merge: e6f0a5a98 9ec319a18
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 02:01:04 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit e6f0a5a981a82533ba188fff0a54ce98577bb152
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 24 16:12:20 2020 +0200
Add atmospheric scattering.
commit f2953087f691a8edbc001cb98ebf5059fc6f8ac0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 23 00:01:20 2020 +0200
Fix shadowing for specular reflections.
commit ddd4a67a9799b8d08c7dc0c2bec90621c2bed0e3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Apr 22 22:56:12 2020 +0200
HDR fixes.
commit 1015e60deef3c447381996277df7496707a63bd0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 21 18:25:19 2020 +0200
More lighting changes.
commit 80c264abd111fb237e57843efcb5c071d4f84613
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 13 00:29:59 2020 +0200
Lighting experiments.
commit 8414987e589dd5102bad89762a3adaccc0bfe957
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 9 02:38:40 2020 +0200
WIP -- lighting changes and soft shadows.
commit 9cd2b3fb0d6b49776c6dfe463e4169637250b11a
Merge: c7ea687eb 8b149ad11
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:29 2020 +0200
Merge branch 'sharp/new-lighting' into sharp/small-fixes
commit c7ea687ebbc5aace1b455f134a5bf49ce2c7434a
Merge: 476441531 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:02 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 8b149ad11ad4bb75018fcf9519baec27d1c95951
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:32:39 2020 +0200
Trying out a new lighting model.
commit b0ac9f36f755dd06f7c17c46150568064790864f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 07:56:11 2020 +0200
Use bicubic interpolation for terrain.
commit f6fc9307a121514b614bc50ef8eb055953e7da8a
Merge: 33140a295 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 05:01:41 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 4764415312aae6e9ac2d00e86e84577cb958f1ab
Merge: ed2d0111d 13388ee6a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 04:54:48 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 13388ee6a42943f3f79a9cb488346cef18e272fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 20:30:08 2020 +0200
Various fixes (to coloring and to soft shadows).
commit fbd084a94a067082a87cd6d28b82054709bc9265
Merge: 5a089863b 4fdf6896a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 18:50:38 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/map-colors
commit ed2d0111d994262ae836d84d1fe5a45e4de72a0b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 06:49:27 2020 +0200
Combining colors and LOD.
commit 88342640c6b835114d01c797b89fdede3b0a2108
Merge: 33140a295 5a089863b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:49:20 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 33140a2951b8212725f42c758b277aaec4d888f7
Merge: 4c65a5aed f34d4b379
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:36:21 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 5a089863beb01d4794bbe3580ada47b278715ea2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 03:17:49 2020 +0200
Making maps brighter.
This is probably not the right way to do it, but oh well!
commit 32b2c99109dd486aa922886081068f9c550c83f2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 02:46:36 2020 +0200
Horizon mapping and "layered" map generation.
Horizon mapping is a method of shadow mapping specific to height maps.
It can handle any angle between 0 and 90 degrees from the ground, as
long as know the horizontal direction in advance, by remembering only a
single angle (the "horizon angle" of the shadow map). More is explained
in common/src/msg/server.rs. We also remember the approximate height of
the largest occluder, to try to be able to generate soft shadows and
create a vertical position where the shadows can't go higher.
Additionally, map generation has been reworked. Instead of computing
everything from explicit samples, we pass in sampling functions that
return exactly what the map generator needs. This allows us to cleanly
separate the way we sample things like altitudes and colors from the map
generation process. We exploit this to generate maps *partially* on the
server (with colors and rivers, but not shading). We can then send the
partially completed map to the client, which can combine it with shadow
information to generate the final map. This is useful for two reasons:
first, it makes sure the client can apply shadow information by itself,
and second, it lets us pass the unshaded map for use with level of
detail functionality.
For similar reasons, river generation is split
out into its own layer, but for now we opt to still generate rivers on
the server (since the river wire format is more complicated to compress
and may require some extra work to make sure we have enough precision to
draw rivers well enough for LoD).
Finally, the mostly ad-hoc lighting we were performing has been (mostly)
replaced with explicit Phong reflection shading (including specular
highlights). Regularizing this seems useful and helps clarify the
"meaning" of the various light intensities, and helps us keep a more
physically plausible basis. However, its interaction with soft shadows
is still imperfect, and it's not yet clear to me what we need to do to
turn this into something useful for LoD.
commit f8926a5737ddc51f3d585c651a64c43677aae0f4
Merge: a1aee931e 875ae6ced
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Mar 13 13:32:42 2020 +0100
Merge remote-tracking branch 'origin/master' into sharp/map-colors
commit 4c65a5aed353b119aea65a2aaeb94549b67beb42
Author: Treeco <5021038-Treeco@users.noreply.gitlab.com>
Date: Mon Feb 24 16:48:05 2020 +0000
Made LOD setting slider exponential
commit 2fa7b2d20d7233dc8bfd64f9f7f54617575248f1
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 17:49:53 2020 +0000
Added mist to LoD
commit aab059a450b5f635777129ff82cc15b662965c3c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 15:14:06 2020 +0000
Added LoD slider
commit 779c36b538121c5ade3633ae5cb67bb14c8c3877
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:54:55 2020 +0000
Reduced cost of vertex pushing
commit 9fea150473906b166365b738ebcea07c697daf3d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:38:53 2020 +0000
Fixed maths, improved LoD resolution
commit 5481df38fea5bf183ff376a3337179cfaa5233dc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 11:22:50 2020 +0000
Dynamically relocate LoD vertices to enhance details
commit a3e36a50ababd615da7db1b26158c7906a5def01
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 18:13:51 2020 +0000
Simpler terrain spiral rendering
commit 255f450ae9ac8763db4bede075fb409161ed57cc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:53:17 2020 +0000
Better LoD precision
commit 3d027aebe812a5b8658a4eb8123dc9f61b3776d2
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:04:03 2020 +0000
Better falloff
commit be775c9484b457b2c0b1a494aec03392d0c70e76
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 15:30:45 2020 +0000
Applied good ideas from experimental branch
commit 58587b68545a23c5c04ab4574a4b94b3bc982246
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 16:15:13 2020 +0000
Minor fixes to LoD merging
commit 7b42aebd709c14df2db766aad61d9280ad24d84d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 15:04:44 2020 +0000
Capped LoD dragging
commit 8aafc559f87124e1ea5ca6e3ddc2aa0c242d793c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:54:37 2020 +0000
Better blending between LoD and terrain border
commit edd3455d5161792d87ddc8eadc0ecbad5532b284
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:40:19 2020 +0000
Fixed LoD z depth, added sea level offset
commit b9b06744620114dd5556e73f64fa93c145503a7c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:27:43 2020 +0000
Better LoD smoothing
commit a1aee931e790431560cd2d953ad61d9497072afd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Feb 21 14:52:17 2020 +0100
Adding shadows.
commit 2400786c13dd891c131ed86d48d05df516a8a778
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 13:48:40 2020 +0000
Use world map as LoD source
commit dbf650f504a4c25fbbc2096ac3616c736bf52d23
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Jan 20 00:48:14 2020 +0000
Better clouds at distance
commit 5e6f81b86cdb9730b9b056877b19257075fd5fa8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Jan 19 23:59:02 2020 +0000
sync
commit 745e7540ddb000cc645f612767b337c2ddc3f7c0
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 12:40:48 2019 +0000
Improved cloud falloff mist, faster noise sampling
commit f6a200d0cb866196ba57697466755f9e0c7ea5d8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 10:09:00 2019 +0000
Improved long-range depth precision, removed unnecessary LoD polygons
commit 63d1b2bb2292898d59fb4f4e502201103dfeb86f
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 20:57:46 2019 +0000
Working LoD shader
commit f13d98ee3e58f881e8b978861a67663b59ed91ec
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 11:03:40 2019 +0000
LoD first attempt (stack overflow issue)
2020-08-20 18:34:59 +00:00
|
|
|
|
.mul(map_edge_factor(map_size_lg, posi) as f64),
|
2019-10-16 11:39:41 +00:00
|
|
|
|
)
|
|
|
|
|
.sub((CONFIG.sea_level as f64).div(CONFIG.mountain_scale as f64)))
|
|
|
|
|
as f32,
|
2020-01-22 14:31:10 +00:00
|
|
|
|
)
|
2019-08-24 19:13:32 +00:00
|
|
|
|
});
|
|
|
|
|
|
2019-11-07 20:25:30 +00:00
|
|
|
|
// Calculate oceans.
|
(See sharp/lod-history) LOD, shadows, greedy meshing, new lighting, perf
---
Pretty much a Veloren fork at this point. Here's a high level overview of the changes (will be added to CHANGELOG just before merge).
At a high level this MR incorporates roughly two groups of changes.
The first group consists of new game features: more flexible map sizes, level of detail terrain, shadow maps, and a new lighting
engine. This is "feature work" that (mostly) only adds new things to Veloren, and mostly shouldn't affect old stuff.
The second big group of changes are those addressing the fallout from all the new features. These include performance fixes of
various sorts: the addition of multiple graphics options and optimization of the cheap ones to avoid work, switching all voxel
models to use some variant of greedy meshing, switching over much of our CPU-side vector math to exploit SIMD instructions
(coinciding with a fork of `vek`), and a rewrite of how the UI handles text rendering (coinciding with updates to our fork
of `conrod`). Making Veloren's hardcoded colors appear correct under the new lighting engine also required considerably
changes (TODO: Fill in this section when it's complete).
The second category of changes often heavily touches code owned by other people, including frequently modified code "owned" by a
handful of people, so I recommend that this code be reviewed particularly carefully.
---
At a high level (each will be described in more detail below):
- The world map has been refactored.
- The world size is no longer hardcoded (@zesterer).
- The map generation code was made generic to allow using it outside of the `world` crate (@zesterer).
- On world creation, we now compute *horizon maps* (@zesterer).
- The way we pass the world from the server to the client has been updated (@xMAC94x).
- Artifacts related to image rotation were fixed (@imbris).
- Multiflow rivers were enabled (@zesterer).
- In the process of making changes related to the world map, various incidental fixes and optimizations were required.
- The new *level of detail* feature was added (@zesterer wrote part of this and has checked out the rest).
- A new LOD terrain rendering step was added to the pipeline.
- The LOD terrain quality was made configurable via a graphics setting.
- Horizon maps were used to cast shadows from LOD chunks on both LOD and non-LOD terrain.
- A "voxelization" effect was incorporated into rendered LOD terrain to make it blend better into the world.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Veloren's lighting has been completely overhauled (@zesterer has already checked most of this out).
- A semi-accurate index of refraction was assigned to our materials.
- A new, more realistic, physically based approach to lighting was used using the *Ashikhmin Shirley* BRDF.
- We emulate *atmospheric scattering* using equations designed for measuring solar panel light exposure.
- We attempt to compute *realistic light attenuation* in water using its real material properties.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Point and directional lights now cast realistic shadows, using *shadow mapping.* (@imbris, @zesterer, @Treeco, @YuriMomo)
- Point light shadow maps were added to the rendering pipeline, using geometry shaders and *seamless cube maps*.
- Directional light shadows were added to the rendering pipeline, using LISPSM together with disabling *depth clamping*.
- "Shadow-only" chunks and NPCs were added to prevent shadows from models behind you from disappearing.
- In the process of making changes related to shadow maps, various incidental fixes and optimizations were required.
The addition of shadow maps, LOD terrain, and the new lighting all led to significant performance degradation, on top of other
changes happening in master. Therefore, a large number of performance improvements were also needed:
- The graphics options were made much more flexible and configurable, and shaders were optimize.
- New options were provided for how to render lights and shadows (@Pfauenauge, @zesterer).
- Graphic setting storage and configuration were overhauled to make adding new features easier (@Pfauenauge, @imbris).
- Shaders were rewritten to utilize GLSL's preprocessor to avoid overhead (@zesterer, @YuriMomo).
- In the process of making changes related to providing additional rendering options, various incidental fixes and optimizations were required.
- Voxel model creation was switched to use *greedy meshing.*
- A new voxel meshing method, greedy meshing, was added (@imbris).
- Uses of the older meshing methods were migrated to use greedy meshing (@imbris, @jshipsey, @Pfauenauge).
- New restrictions were added to terrain, figure, and sprites to future proof them for further optimizations (@jshipsey, @Pfauenauge, @zesterer).
- Most positions are now relative to either chunk or player position for better precision (@imbris, @zesterer, @scottc).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- Animation and terrain math were switched to use SIMD where possible.
- Fixes were made to vek to make its SIMD feature usable for us (@zesterer, @imbris).
- The interface and types used in bone animation were changed in various ways (@jshipsey, @Snowram, @Pfauenauge).
- Redundant code generation for body animation is now partly taken care of by a macro (@jshipsey, @Snowram, @Pfauenauge).
- Animation code was modified to to use vek's SIMD representation where possible (@jshipsey, @Snowram, @Pfauenauge).
- Terrain meshing code and shadow map math were also modified to use vek's SIMD representation (@imbris).
- SIMD instruction generation was enabled (@YuriMomo, @jshipsey, @Snowram, @imbris, @Angelonfira, @xMAC94x).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- The way we cache glyphs was completely refactored, fixed, and optimized.
- Our fork of `conrod` was optimized in various ways (@imbris).
- Our fork of `conrod` now exposes whether a widget was updated during the current frame (@imbris).
- Our use of the glyph cache was rewritten for correctness (@imbris).
- A *text cache* was introduced that lets us skip remeshing glyphs that have not changed (@imbris).
- Various changes were made to reduce pressure on the glyph cache, with more planned (@imbris, @Pfauenauge).
- In the process of making changes related to the glyph cache, various incidental fixes and optimizations were required.
- Colors were changed to keep Veloren's look consistent with master.
- Some older tree models were brought back (@Pfauenauge).
- TODO(@Sharp): All hardcoded colors were extracted and made hotloadable.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Hardcoded colors were fixed to conform to Veloren's style.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Color models were fixed to conform to Veloren's style.
A detailed description of the involved changes follows.
---
- The world size is no longer hardcoded. All functions dependent on world size now take a `WorldSizeLg`, which holds the base 2 logarithm of each actual world dimension and is guaranteed to maintain certain properties (outlined in `common/src/terrain/map.rs`). Additionally, many utility functions that utilize the world size were moved into `common` as well (mostly `common/src/terrain/mod.rs`). Finally, the world map format was updated in order to store its size explicitly, with a migration path from the old format that should work whenever the old formatted map was a square (practically always). See `world/src/sim/mod.rs` for these changes.
- The map generation code was made generic to allow using it outside of the `world` crate. The parts of the map generating code that do not need to query the world were moved over to `common/src/terrain/map.rs`, allowing them to be used from the client without creating a dependency on `world`. The rest of it was turned into helper functions in `world/src/sim/map.rs`, which can be passed as closures to the generic map generation code to complete its construction. This also means that colors are now passed in separately to the map generation function. See <https://veloren.net/devblog-78/> for more details.
- On world creation, we now compute *horizon maps*. See the function in `world/src/sim/util.rs`.
Given a height map and a plane intersecting that height map, our horizon maps allow us to encode enough information to reconstruct shadows for each point on the height map using only the *horizon angle* (the angle at which the sun starts to become visible). As Veloren's sun only covers one plane, this is sufficient for encoding sun shadows for LOD terrain, by encoding two angles per chunk (one for each 90 degrees the sun covers). We can also use this for the moon, if we want, since the moon follows the same path. Additionally, we store the *height* of the furthest occluder, to try to make the shadows volumetric; so this means 4 bytes in total for each chunk.
Support for horizon maps has been merged into the map functionality in common as well.
- The way we pass the world from the server to the client has been updated. Rather than passing the prerendered map, we instead pass three maps with values for each chunk; one with the color information, a second with altitude information, and a third with horizon map information. We then reconstruct the map on the client, together with some additional information we send from the server (like the sea level and maximum height). See `common/src/msg/server.rs` for a detailed description of the format of `WorldMapMsg`, and `server/src/libr.rs` and `client/src/lib.rs` for details of the map construction and parsing.
- Artifacts related to image rotation were fixed. See the commit message for commit SHA `cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e` for a detailed explanation. This involved changes to shaders, the addition of a new type of graphic (also reflected in the graphic cache) that allows specifying a border color (which automatically makes the associated texture immutable), and some related fixes. I reproduce the first two paragraphs of the MR description as well:
```
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
```
- Multiflow rivers were enabled.
This does not really need to be part of this MR, and would be easy to revert, but since it seemed to provide a nice improvement it's currently packaged with it.
We already computed multiple outflows from each chunk for erosion purposes long before this MR.
However, we never modified river rendering to be able to handle this case (just a single downhill river flow is complex enough!) so this was not exposed when deciding which chunks were rivers.
Now that
- In the process of making changes related to the world map, various incidental fixes and optimizations were required. Some examples of fixes include making sure terrain is never lowered to below sea level (to make the shadow maps report correct values), fixing map altitudes and colors to understand things like cliffs and "block level" coloring (that doesn'te xist on the column level), and fixing a crashbug when rendering images for the UI where source pixels are strongly rectangular. Some examples of related performance fixes include avoiding allocating a fresh vector for all the maps (i.e. copying it over to change the format from `[u32; n]` to `DynamicImage` and then copying again to convert to `RgbaImage`), and instead using the `gfx::memory::slice` function to accomplish the same thing. These sorts of changes are spread all arond the code.
This includes the additon of a new scene, `voxygen/src/scene/lod.rs`, a new pipeline `voxygen/src/render/pipeline/lod_terrain.rs`, and new shaders `assets/vxygen/shaders/lod-terrain-vert.glsl` and `assets/vxygen/shaders/lod-terrain-frag.glsl`, as well as associated changes to the renderer in `voxygen/src/render/renderer.rs`.
The main idea behind our initial approach to LOD was to take the world data we now get from the server (altitude, color, and horizon mapping).
- Some previously computed values were turned into shader uniforms for better prediction on weak processors. (@zesterer)
- Calls to power or trig functions were removed or replaced with multiplications, where possible.
- After some deliberation
- To properly handle sprite "waving" for nearby sprites,
We explicitly designed the greedy meshing system with figures and sprites in mind.
In both cases, we want to be able to *efficiently* pack many different models into the same texture, especially in cases where we know
we will either not be removing any of the grouped-together from the models from the texture, or will remove all of them at once (so
they can be packed into some specific subtexture).
For sprites, since we know every model in advance and never intend to deallocate them, we currently pack them all as efficiently as
possible into one giant tetxure atlas. However, in the future we might opt to pack them slightly less efficiently in exchange for
shrinking the sprite vertex size.
For figures, we pack all the textures for each *model* into the same atlas.
is a global texture atlas used for every sprite, and for figures which is why we have the ability to mesh multiple
models to the same texture area (using the simple texture atlas allocator) without requiring intermediate vector allocations.
This is accomplished by delaying the time when we actually write the color and light data to the texture until *after* all the
model vertices have been meshed; then, we can just allocate the whole color/light array at once, making the atlas we use an
exact fit. In computer science-y terms, we accomplish this delay by, after we perform the initial greedy meshing (without
texture information), not continuing to create the texture data, but instead constructing a *continuation*--that is, a function
that, when called, will execute the rest of the computation. We push this continuation (which in Rust terms is a `FnOnce` closure
that takes the `ColLightsInfo` that it is supposed to write to as context) onto a
onto a vector
resizing. To allow for suspended writes to texture data, Rust pointed out to me that the continuation that would eventually write the color and light data to the texture atlas (the one that is shared by all models sharing the same greedy mesher) would have to *own* whatever data it mshed. Because we often generate the model data to mesh as a temporary in `voxygen/src/load.rs`, the
- Matrix multiplications in the shader were reduced for figure data (@zesterer).
- Vertex "waves" for fluid data were removed.
- Terrain "bending" near edges was removed.
- Scaling was fixed to make sure empty space was not introduced in a space previously occupied by a block. It was also changed to take ownership of its voxel data,
rather than sharing it, to let it be used with meshing.
- Rust's nightly version was bumped in order to use the `array_map` function, which lets us reuse more code between the simple map and `FigureModelCache`.
- PositionedGlyph::standalone.
---
I tried to cite sources in many cases[^realtime],[^lloyd],[^lispsm],[^pbrt],[^greedy],[^tjunctions]
where I needed features from elsewhere but I am particularly grateful for the following resources,
esepcially where they have accompanying source code. I linked all of them that are accessible to the public (those that are not were
obtained through legal means).
[^realtime]: Eisemann, Elmar, Michael Schwarz, Ulf Assarsson, Michael Wimmer. Real-Time Shadows. A K Peters/CRC Press (T&F), 20160419.
[^lloyd]: Lloyd,B. 2007. [Logarithmic perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). PhD thesis, University of North Carolina.
[^lispsm]: Wimmer, M., Scherzer, D., and Purgathofer, W. 2004. [Light space perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). In Proceedings of Eurographics Symposium on Rendering 2004, pp. 143– 152.
[^pbrt]: Pharr, Matt, et al. [http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf](Physically Based Rendering: From Theory to Implementation). Third edition, Morgan Kaufmann Publishers/Elsevier, 2017.
[^greedy]: mikolalysenko. “Meshing in a Minecraft Game.” 0 FPS, 30 June 2012, <https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/>.
[^tjunctions]: blackflux. “Meshing in Voxel Engines – Part 1.” Blackflux.Com, 23 Feb. 2014, <https://blackflux.wordpress.com/2014/02/23/meshing-in-voxel-engines-part-1/>.
I am also especially grateful to Khronos, Wikiepdia, and stackoverflow for answering many of my specific questions while writing the MR.
---
Squashed commit of the following:
commit 300505e7305a2fdac722a808ee8538323f215f39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 18:46:25 2020 +0200
Fixing cargo doc and typo in CHANGELOG.
commit ec0aeb18e8499d7d84ef818331b4b65c3d76cea6
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 15:38:50 2020 +0200
Hopefully final commit for the LOD branch.
commit 5e8ea0b1eaac02903a02feb2eb038d195de4872f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 10:14:26 2020 +0200
Falling back to power as stopgap.
commit e44a1cbf46504ee9931a01bdc9033e145500d557
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 09:25:41 2020 +0200
Address imbris feedback.
Temporarily disables shiny water, lowers max VD.
These restrictions will be lifted soon after merging.
commit 561e25778a108ac3712f5ec2ce3a51234c4430d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 08:31:13 2020 +0200
Tweaking shaders a bit.
commit 7d19259078ce0dd7b3742ad7d0cb3fab3ece3fdc
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:59:43 2020 +0200
Fix view example as well.
commit 051cd4934e0fad2c0b15db4380a4189fa318679f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:29:06 2020 +0200
Fix meshing benchmark.
commit c95e07db3b4dcca285678985e65e31b927cb1c61
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 05:46:22 2020 +0200
Address MR feedback, fix scene clouds.
commit 1bfb816cabdb3ffc1e507a009c2d98696b4b573a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:39:36 2020 +0200
Incorporating Pfau's figure color changes.
New eyes and new humanoid colors.
commit 3f9b89a3ac7b3356b1dba0d1a8f6541357f81469
Merge: e2f5162e4 62c53963a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:29:41 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit e2f5162e4f96f4124aa43488f7245d341b3dcfd4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:28:38 2020 +0200
World colors are all hotloadable.
They live in assets/world/style/colors.ron.
Only a small handful of hardcoed colors remain in World; they are either
part of the map, or difficult to disentangle from the rest of the
computation. Comments are made where appropriate.
commit 62c53963abe1975009d34a8f9515a355bef24f31
Author: Marcel Märtens <marcel.cochem@googlemail.com>
Date: Wed Aug 19 15:59:00 2020 +0200
replace pretty_env_logger with tracing
commit 5b1625f99d9586fe80e2232f583ec5af9f953099
Merge: d71003acd 4942b5b39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:15:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit d71003acdabeff970b3928e97c26af6847b5b78e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:14:34 2020 +0200
Hotloading colors, part 1: colors in common.
Currently, this just entails humanoid colors. There are only three
colors not handled; the light emitter colors in
common/src/comp/inventory/item/tool.rs. These don't seem important
enough to me to warrant making hotloadable, at least not right now, but
if it's needed later we can always add them to the file.
commit 63b5e0e553eb2ea49276f192a6fc7dd65254270d
Merge: c32b337a4 6d2c4b9c1
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 13:05:37 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c32b337a46e10d9de473d178a94a3ccd61c39bb3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:52:04 2020 +0200
Fixing LOD grid, for real.
commit a166ae0360395387e09fb35a1f84210c2ce5ec24
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:28:05 2020 +0200
Addressing imbris's initial feedback.
Fixes two minor bugs: explosion particles were no longer spawning
randomly, and LOD grids were not perfectly even.
commit 4cbad004f44060994252dd3d38647a14a589712f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:27:58 2020 +0200
Bumping nightly per request.
commit 548680276aac77c25d43d16b5622f847d474dbef
Merge: acc098604 8f8b20c91
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:26:06 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit acc0986040589a3492f88a740bc3c3fc693b26d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:28:32 2020 +0200
Lower resolution due to lying drivers.
commit d3b878de2a52c358d2944a6bbd0555dad7fbdb10
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:15:38 2020 +0200
Fix issues msh encountered with Intel 4600.
commit 10245e0c1b0cb6fae10d86409435364edc6102ef
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 21:15:02 2020 +0200
Merge more models into one mesh than we did previously.
commit 3155c31e663c52ae5c3a53d5fb5665892a1a498a
Merge: 7204cc8a7 3c199280e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:35:22 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7204cc8a7a4f74a30306bd205d9834fee4bb944f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:34:43 2020 +0200
Fix not yet done NPC animations.
This forces them all to be the idle animation if not specified.
This fixes issues where you'd have giant NPCs in water.
commit bc83360f2a08918f19d417b5f772e1ff554dba08
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 19:36:37 2020 +0200
Try to fix some bugs:
- Z fighting with LOD terrain and water.
- Audio SFX not playing.
commit 1fd104aa603bf3781b6526a5cada46aeca3049dd
Merge: 862df3c99 7c2c392a3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 12:02:31 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 862df3c9976c4da9bd7cfd784f1a85973127968a
Merge: 0a4218ed9 75c1d4401
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 05:52:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0a4218ed9d541a2b34c133351bea38a99ddf4ea7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 22:27:14 2020 +0200
Fix particle depth.
commit f51dfdeb442d0dd5243dd2f344fa4be295bd0875
Merge: c6251a956 5e6dc0471
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:19:04 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit c6251a956ad376400dca5c23420cf8d213dc8fdf
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:15:46 2020 +0200
Cache figures more intelligently.
Cache figures for longer, and don't cache character states for the
player except where they actually affect the rendered model.
commit 0ed801d5404982c6fb63b1eaa4567d908b294c9d
Merge: c11b9bdf0 eea64f78f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 16:32:24 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c11b9bdf0a53bf9884d2f5a48fec9b01d582df1a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 11:47:15 2020 +0200
Remove unneeded Clippy annotation.
commit 16aa9ef40af56d69289d00aafb3deadfb8bd4f35
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 8 00:53:02 2020 +0200
Fix hotloading and Clippy.
commit 3dc973e0be5b758da1e9805eb764ad401374cd0c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 23:50:27 2020 +0200
Major speedups with SIMD.
commit fba64a7d93d5a96077ce87287bbce6ab9b7fbcae
Merge: 76429d00e d1e10b178
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:19 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 76429d00eea00d212fbd672a84ee91e75b19b938
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:10 2020 +0200
Add clippy.toml.
commit c79f512f84dbb83cb82b7954db68ff241dfd8e41
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 11:55:20 2020 +0200
Fix all clippy issues, clean up Rust code.
commit 6f90e010b3fbefb53b0d632e819931350015b6b8
Merge: 77a8c7c26 5929cfa5c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:30 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 77a8c7c267d3f44a1a62bd6b2274359973c5e4d4
Merge: b44e44232 44febaabd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:10 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 5929cfa5c713aa392110bbb62407f76caf53c3df
Author: jshipsey <jshipsey18@gmail.com>
Date: Thu Aug 6 20:47:27 2020 -0400
fixed in-hand arrow bug
commit b44e442325d828f1cd564d66908f89d09e80474b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 6 13:40:35 2020 +0200
Miscellaneous performance improvements.
commit be37acf287c1360d8085862526ac3365ffd1d768
Merge: 125d7fc6c c11876547
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 05:49:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 125d7fc6c4dcd8c8c5f27b8268a4d64f409f3644
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 04:55:31 2020 +0200
Abstract over simd vs. repr_c vectors.
Also some minor improvements to Event size.
commit d4d4956e9252e1241ce110b2aa85076c6b1e2a23
Merge: 5f3b7294a aced5f979
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:56:54 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 5f3b7294af1f8533edc2620b58863c248e2b07af
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:43:52 2020 +0200
Fix formatting issues I missed before.
commit a428a3ebba70dcab63dd0f8cd983120c90617271
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:41:51 2020 +0200
Fix clippy warnings, part 1.
There aer still a bunch of type too complex and
function takes too many arguments warnings that I'll fix later
(or ignore, since in the one case I did fix a function takes too
many arguments warning I think it made the code *less* readable).
commit ba54307540ed8a937ac08209730284fc653af85b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 30 13:22:42 2020 +0200
Fix light animations so they are removed when the light turns off.
commit 7e0f4bcbf0f4717145d8beac40d52e3acebbe2aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 21:10:20 2020 +0200
Fix crash in edge case for pixel art.
commit 56da06f7a351e2b949e9b014a90b974d511a0924
Merge: cf74d55f2 9f53a4a19
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:56:52 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:29:52 2020 +0200
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
The first concern was addressed by fixing the dimensions of the map
images drawn from the UI (so that we always use a square source
rectangle, rather than a rectangular one according to the dimensions of
the map). We also fixed the way rotation was done in the fragment
shader for north-facing sources to make it properly handle aspect ratio
(this was already done for north-facing targets). Together, these fix
rendering issues peculiar to rectangular maps.
The second and third concerns were jointly addressed by adding an
optional border color to every 2D image drawn by the UI. This turns
out not to waste extra space even though we hold a full f32 color
(to avoid an extra dependency on gfx's PackedColor), since voxel
images already take up more space than Optiion<[f32; 4]> requires.
This is then implemented automatically using the "border color"
wrapping method in the attached sampler.
Since this is implemented in graphics hardware, it only works (at
least naively) if the actual image bounds match the texture bounds.
Therefore, we altered the way the graphics cache stores images
with a border color to guarantee that they are always in their own
texture, whose size exactly matches their extent. Since the easiest
currently exposed way to set a border color is to do so for an
immutable texture, we went a bit further and added a new "immutable"
texture storage type used for these cases; currently, it is always
and automatically used only when there is a specified border color,
but in theory there's no reason we couldn't provide immutable-only
images that use the default wrapping mdoe (though clamp to border
is admittedly not a great default).
To fix the maps case specifically, we set the border color to a
translucent version of the ocean border color. This may need
tweaking going forward, which shouldn't be hard.
As part of this process, we had to modify graphics replacement to
make sure immutable images are *removed* when invalidated, rather
than just having a validity flag unset (this is normally done by
the UI to try to reuse allocations in place if images are updated
in benign ways, since the texture atlases used for Ui do not
support deallocation; currently this is only used for item images,
so there should be no overlap with immutable image replacement,
so this was purely precautionary).
Since we were already touching the relevant code, we also updated
the image dependency to a newer version that provides more ways
to avoid allocations, and made a few other changes that should
hopefully eliminate redundant most of the intermediate buffer
allocations we were performing for what should be zero-cost
conversions. This may slightly improve performance in some
cases.
commit ad18ce939940a8c697270f6e9b94db9942fd8295
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 13:21:09 2020 +0200
Fix continent scale hack.
commit 36b1cb074f5b195aebd7dbbc3da7f0246a1a18ec
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 12:11:40 2020 +0200
Enable loading different sized maps without a recompile.
We may want to tweak the effects of the continent_scale_hack.
commit 13b6d4d534cc4814b7cb3294ca41bbfea0a6b186
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 10:55:48 2020 +0200
Removing WORLD_SIZE, part 1.
Erased almost every instance of WORLD_SIZE and replaced it with a local
power of two, map_size_lg (which respects certain invariants; see
common/src/terrain/map.rs for more details about MapSizeLg). This also
means we can avoid a dependency on the world crate from client, as
desired.
Now that the rest of the code is not expecting a fixed WORLD_SIZE, the
next step is to arrange for maps to store their world size, and to use
that world size as a basis prior to loading the map (as well, probably,
as prior to configuring some of the noise functions).
commit 30b1d2c6428230a9eaa0d749cdcbbd6f1cbccd78
Merge: 7d56ba31b 1377b369f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:58 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 7d56ba31b445441461b28a07fc495d7d4f047c17
Merge: 2101113b4 598f14b25
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 1377b369f6db2258e910d467a5740f31789e3ded
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sun Jul 19 23:25:38 2020 +0200
more saturated pumpkins
commit ae8d50527f93bb0616c2ad46ce4dacb63bc37c6d
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sat Jul 18 20:29:56 2020 +0200
acacia models
commit 2101113b467e691de787392d7f20f1745f5637bd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 18 18:55:25 2020 +0200
Higher detail LOD.
commit add2cfae04b4385fa5590e11e2bd5229d9dee0aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 16 01:57:39 2020 +0200
Revert some irrelevant stuff.
commit 2e2ab3dc1eaa59a4aef7f8d34a53d8aae4c8553a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 15 13:30:49 2020 +0200
Fixing various things about shadows.
* Correcting optimal LISPSM parameter.
* Figure shadows are cast when they're not visible.
* Chunk shadows stay cast until you look away.
* Seamless cubemaps for point lights.
* Etc.
commit 6c31e6b56217274285b597af297036691ea5d897
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 19:50:26 2020 +0200
Fix shadow creation.
commit 6332cbe006115ae205597529cd8bbccd146c2cca
Merge: be438657c 930e0028b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:47:00 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit be438657c33d7b5bfb0a9582c3ed3fd366637323
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:28:08 2020 +0200
Tweaks to shadows.
Added shadow map resolution configuration, added seamless cubemaps,
documented all existing rendering options, and fixed a few Clippy
errors.
commit 23b4058906013c7d2a40c286e20e32c5fbd897ed
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 10:11:19 2020 +0200
Fix moon, use nonlinear noise for terrain.
Note that the latter has a bit of performance cost.
commit 7fbe5cbfbb9dc29607957b8e62f432a4deed193d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:23:02 2020 +0200
Address lies about max texture size.
commit bcfc62b5e13a1cdd83f57535fde4694720bebfd9
Merge: 75e3626a7 18a08e8fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:22:08 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 75e3626a785919f43fdcf2127c2b10e3e4df2f9f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:21:52 2020 +0200
OpenGL 3.3 minimum.
commit 18a08e8fe2739f02af99a5d2cb4e7c38c49e858b
Author: Monty Marz <m.marzouq@gmx.de>
Date: Tue Jul 7 23:57:52 2020 +0200
settings localization
commit 90c5d1ca3620092bc3ae10b2211489eb1cf6f5e8
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 21:11:48 2020 +0200
Lower near distance.
commit 0e66f02b25aaddaa2dfddbbc89cd67de54a9a7b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 20:09:01 2020 +0200
All sprites sway in the wind now.
commit db1401a6910bf42dcf502462c90038752ff5fbdb
Merge: 69e508d8c e8b4b29d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 19:34:17 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 69e508d8c94d8973033817ca86f357e466fc7c4d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 18:41:37 2020 +0200
Make it easy to switch to SIMD for math.
commit ffe0f5928c7a7e87d00cb5426b3b1d831d7e02fd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 21:21:12 2020 +0200
Fix some issues with underwater rendering.
commit bfda6da42f38fd02c31ee92c81ab785a3e50c2a0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 19:17:59 2020 +0200
Fix some minor display issues.
commit 0ed752e087968cf901301884aaeae698e32ef8a5
Merge: ccc6a06a8 518edcb85
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:14:21 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit ccc6a06a8d4504d6b9f7af7905a414d2ee06ab76
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:04:34 2020 +0200
Some minor changes.
commit 4e020246702889269efe1a191788992164c508d6
Merge: 50a64d927 e05c9267a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 16:17:40 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 50a64d927e6c4f4b0e4688e4cbfca694bc3f922a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 13:07:03 2020 +0200
Fix far plane.
commit 7dd06da34cae8f9ea3b6c889fe965181f3fd3949
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:25:35 2020 +0200
Add shadows.glsl.
commit 618a18c998778bf871b905a74657440fcc384c80
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:10:22 2020 +0200
Adding shadows, greedy meshing, and more.
commit eaea83fe6a5cb1cb0ba8beef888183c718258496
Merge: 267018495 2f89b863e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 22:47:07 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 2670184954a13e4a9e7a4e35ba79aac0c5fac2f7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 21:20:01 2020 +0200
Make civsim and sites deterministic.
For anything in worldgen where you use a HashMap, *please* think
carefully about which hasher you are going to use! This is
especially true if (for some reason) you are depending on hashmap
iteration order remaining stable for some aspect of worldgen.
commit f8376fd5dc72b4a9c2f51a6b4570d59c8b8e9343
Merge: 654f7e049 cdee191dd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 17:53:57 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 654f7e049258d9da27c09608bbe6a46ffa8787e5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed May 20 21:22:30 2020 +0200
Correct backface culling.
commit 560501df05ca725409b0f2e4eb31bdfdc15fd0c7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue May 19 17:22:06 2020 +0200
Greedy messhing for shadows.
commit a4d87e1875ca543436e6bbbeb20348facc5a52d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun May 17 05:59:00 2020 +0200
Shadow maps work for lantern.
commit 243d0837b8a3b08172c9a3c348d964d7ddc2a0a8
Merge: 04382dc28 71dd520cd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:53:13 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 04382dc28632b6c66e8821f6870c0daaa1c1901a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:22:17 2020 +0200
WIP: better graphics config, better LOD, shadow maps.
commit 22ddbad3eb32bfa70f0932176022208fe67ded81
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 18:54:09 2020 +0200
Minor shader fixes.
commit 746a10e8d01ac235f994b0cde78fa48998602a1f
Merge: 0f4a0e763 40ab94673
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 04:02:09 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0f4a0e763db3afbdc4fb0558611f38326ca87151
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 23:03:24 2020 +0200
Switch back to pop-in terrain.
commit dd74fa7e4a53667b38811d7aec58d7f6a68889bb
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 22:58:55 2020 +0200
LOD shading closer to voxel shading.
commit ef67bd58ba0bdaf622b078892d768263b6cba268
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 28 20:49:03 2020 +0200
Experimental underwater lighting.
commit 2c5ad9d07605e80d5fd5679dd3a5d70c605b86a9
Merge: 748279835 303967a6f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 22:35:24 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7482798354eda18c8207950080fc24d443a369de
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 21:59:55 2020 +0200
Replace discard in figure-frag.
commit d83b4ae69be4912f69bf7835f509c68a1c7770a4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:45:57 2020 +0200
Fix sprite lighting, HDR from focus_pos.
commit 0594238004f116274905fa0ed7c2b6c417ed1d29
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:14:10 2020 +0200
Proper HDR from point lights.
commit 48c93d2b41ce5743103d18e76cc228f5ac766492
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 14:01:43 2020 +0200
Brighter ambiance, darker LOD shadows.
commit e0452e895ccfa8a43f368cae3b8b8aedc24dad93
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 13:13:23 2020 +0200
More proper HDR.
commit 4c6da3ed16cfeebb455e40da5f557b4af9a499d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 00:13:10 2020 +0200
Trying LOD noise.
commit 682a3d74c85df5503ffe1fc1cc891bce789df1ad
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 23:11:08 2020 +0200
Fix LOD heights in towns.
commit cc39e5734e8b18f9077bf42e66337c1319dd6b6e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 21:01:23 2020 +0200
More LOD fixes.
commit 8116b21c2e51c836e77894e309ac273caf2917b3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:54:43 2020 +0200
I like this coloring.
commit bc2560ea90b36f4b46190005344232d993043ac3
Merge: 14effdd5d e690efe71
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:48:33 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 14effdd5db8747fcf3eb34f03b46b7792e92d1c5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:24:35 2020 +0200
Re-saturate.
commit 48a643955d4435b78179acba0beb4a979905cc31
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:23:57 2020 +0200
Various fixes.
commit f7b497a0c25f4ad4682c71dd1ed6f608052feb9b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 03:22:49 2020 +0200
Render figures again.
commit 44e4aad48deba8266b9f8bdfd3db096b381f5327
Merge: e6f0a5a98 9ec319a18
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 02:01:04 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit e6f0a5a981a82533ba188fff0a54ce98577bb152
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 24 16:12:20 2020 +0200
Add atmospheric scattering.
commit f2953087f691a8edbc001cb98ebf5059fc6f8ac0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 23 00:01:20 2020 +0200
Fix shadowing for specular reflections.
commit ddd4a67a9799b8d08c7dc0c2bec90621c2bed0e3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Apr 22 22:56:12 2020 +0200
HDR fixes.
commit 1015e60deef3c447381996277df7496707a63bd0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 21 18:25:19 2020 +0200
More lighting changes.
commit 80c264abd111fb237e57843efcb5c071d4f84613
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 13 00:29:59 2020 +0200
Lighting experiments.
commit 8414987e589dd5102bad89762a3adaccc0bfe957
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 9 02:38:40 2020 +0200
WIP -- lighting changes and soft shadows.
commit 9cd2b3fb0d6b49776c6dfe463e4169637250b11a
Merge: c7ea687eb 8b149ad11
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:29 2020 +0200
Merge branch 'sharp/new-lighting' into sharp/small-fixes
commit c7ea687ebbc5aace1b455f134a5bf49ce2c7434a
Merge: 476441531 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:02 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 8b149ad11ad4bb75018fcf9519baec27d1c95951
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:32:39 2020 +0200
Trying out a new lighting model.
commit b0ac9f36f755dd06f7c17c46150568064790864f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 07:56:11 2020 +0200
Use bicubic interpolation for terrain.
commit f6fc9307a121514b614bc50ef8eb055953e7da8a
Merge: 33140a295 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 05:01:41 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 4764415312aae6e9ac2d00e86e84577cb958f1ab
Merge: ed2d0111d 13388ee6a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 04:54:48 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 13388ee6a42943f3f79a9cb488346cef18e272fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 20:30:08 2020 +0200
Various fixes (to coloring and to soft shadows).
commit fbd084a94a067082a87cd6d28b82054709bc9265
Merge: 5a089863b 4fdf6896a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 18:50:38 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/map-colors
commit ed2d0111d994262ae836d84d1fe5a45e4de72a0b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 06:49:27 2020 +0200
Combining colors and LOD.
commit 88342640c6b835114d01c797b89fdede3b0a2108
Merge: 33140a295 5a089863b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:49:20 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 33140a2951b8212725f42c758b277aaec4d888f7
Merge: 4c65a5aed f34d4b379
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:36:21 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 5a089863beb01d4794bbe3580ada47b278715ea2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 03:17:49 2020 +0200
Making maps brighter.
This is probably not the right way to do it, but oh well!
commit 32b2c99109dd486aa922886081068f9c550c83f2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 02:46:36 2020 +0200
Horizon mapping and "layered" map generation.
Horizon mapping is a method of shadow mapping specific to height maps.
It can handle any angle between 0 and 90 degrees from the ground, as
long as know the horizontal direction in advance, by remembering only a
single angle (the "horizon angle" of the shadow map). More is explained
in common/src/msg/server.rs. We also remember the approximate height of
the largest occluder, to try to be able to generate soft shadows and
create a vertical position where the shadows can't go higher.
Additionally, map generation has been reworked. Instead of computing
everything from explicit samples, we pass in sampling functions that
return exactly what the map generator needs. This allows us to cleanly
separate the way we sample things like altitudes and colors from the map
generation process. We exploit this to generate maps *partially* on the
server (with colors and rivers, but not shading). We can then send the
partially completed map to the client, which can combine it with shadow
information to generate the final map. This is useful for two reasons:
first, it makes sure the client can apply shadow information by itself,
and second, it lets us pass the unshaded map for use with level of
detail functionality.
For similar reasons, river generation is split
out into its own layer, but for now we opt to still generate rivers on
the server (since the river wire format is more complicated to compress
and may require some extra work to make sure we have enough precision to
draw rivers well enough for LoD).
Finally, the mostly ad-hoc lighting we were performing has been (mostly)
replaced with explicit Phong reflection shading (including specular
highlights). Regularizing this seems useful and helps clarify the
"meaning" of the various light intensities, and helps us keep a more
physically plausible basis. However, its interaction with soft shadows
is still imperfect, and it's not yet clear to me what we need to do to
turn this into something useful for LoD.
commit f8926a5737ddc51f3d585c651a64c43677aae0f4
Merge: a1aee931e 875ae6ced
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Mar 13 13:32:42 2020 +0100
Merge remote-tracking branch 'origin/master' into sharp/map-colors
commit 4c65a5aed353b119aea65a2aaeb94549b67beb42
Author: Treeco <5021038-Treeco@users.noreply.gitlab.com>
Date: Mon Feb 24 16:48:05 2020 +0000
Made LOD setting slider exponential
commit 2fa7b2d20d7233dc8bfd64f9f7f54617575248f1
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 17:49:53 2020 +0000
Added mist to LoD
commit aab059a450b5f635777129ff82cc15b662965c3c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 15:14:06 2020 +0000
Added LoD slider
commit 779c36b538121c5ade3633ae5cb67bb14c8c3877
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:54:55 2020 +0000
Reduced cost of vertex pushing
commit 9fea150473906b166365b738ebcea07c697daf3d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:38:53 2020 +0000
Fixed maths, improved LoD resolution
commit 5481df38fea5bf183ff376a3337179cfaa5233dc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 11:22:50 2020 +0000
Dynamically relocate LoD vertices to enhance details
commit a3e36a50ababd615da7db1b26158c7906a5def01
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 18:13:51 2020 +0000
Simpler terrain spiral rendering
commit 255f450ae9ac8763db4bede075fb409161ed57cc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:53:17 2020 +0000
Better LoD precision
commit 3d027aebe812a5b8658a4eb8123dc9f61b3776d2
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:04:03 2020 +0000
Better falloff
commit be775c9484b457b2c0b1a494aec03392d0c70e76
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 15:30:45 2020 +0000
Applied good ideas from experimental branch
commit 58587b68545a23c5c04ab4574a4b94b3bc982246
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 16:15:13 2020 +0000
Minor fixes to LoD merging
commit 7b42aebd709c14df2db766aad61d9280ad24d84d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 15:04:44 2020 +0000
Capped LoD dragging
commit 8aafc559f87124e1ea5ca6e3ddc2aa0c242d793c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:54:37 2020 +0000
Better blending between LoD and terrain border
commit edd3455d5161792d87ddc8eadc0ecbad5532b284
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:40:19 2020 +0000
Fixed LoD z depth, added sea level offset
commit b9b06744620114dd5556e73f64fa93c145503a7c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:27:43 2020 +0000
Better LoD smoothing
commit a1aee931e790431560cd2d953ad61d9497072afd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Feb 21 14:52:17 2020 +0100
Adding shadows.
commit 2400786c13dd891c131ed86d48d05df516a8a778
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 13:48:40 2020 +0000
Use world map as LoD source
commit dbf650f504a4c25fbbc2096ac3616c736bf52d23
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Jan 20 00:48:14 2020 +0000
Better clouds at distance
commit 5e6f81b86cdb9730b9b056877b19257075fd5fa8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Jan 19 23:59:02 2020 +0000
sync
commit 745e7540ddb000cc645f612767b337c2ddc3f7c0
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 12:40:48 2019 +0000
Improved cloud falloff mist, faster noise sampling
commit f6a200d0cb866196ba57697466755f9e0c7ea5d8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 10:09:00 2019 +0000
Improved long-range depth precision, removed unnecessary LoD polygons
commit 63d1b2bb2292898d59fb4f4e502201103dfeb86f
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 20:57:46 2019 +0000
Working LoD shader
commit f13d98ee3e58f881e8b978861a67663b59ed91ec
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 11:03:40 2019 +0000
LoD first attempt (stack overflow issue)
2020-08-20 18:34:59 +00:00
|
|
|
|
let is_ocean = get_oceans(map_size_lg, |posi: usize| alt_old[posi].1);
|
2020-02-01 20:39:39 +00:00
|
|
|
|
// NOTE: Uncomment if you want oceans to exclusively be on the border of the
|
|
|
|
|
// map.
|
(See sharp/lod-history) LOD, shadows, greedy meshing, new lighting, perf
---
Pretty much a Veloren fork at this point. Here's a high level overview of the changes (will be added to CHANGELOG just before merge).
At a high level this MR incorporates roughly two groups of changes.
The first group consists of new game features: more flexible map sizes, level of detail terrain, shadow maps, and a new lighting
engine. This is "feature work" that (mostly) only adds new things to Veloren, and mostly shouldn't affect old stuff.
The second big group of changes are those addressing the fallout from all the new features. These include performance fixes of
various sorts: the addition of multiple graphics options and optimization of the cheap ones to avoid work, switching all voxel
models to use some variant of greedy meshing, switching over much of our CPU-side vector math to exploit SIMD instructions
(coinciding with a fork of `vek`), and a rewrite of how the UI handles text rendering (coinciding with updates to our fork
of `conrod`). Making Veloren's hardcoded colors appear correct under the new lighting engine also required considerably
changes (TODO: Fill in this section when it's complete).
The second category of changes often heavily touches code owned by other people, including frequently modified code "owned" by a
handful of people, so I recommend that this code be reviewed particularly carefully.
---
At a high level (each will be described in more detail below):
- The world map has been refactored.
- The world size is no longer hardcoded (@zesterer).
- The map generation code was made generic to allow using it outside of the `world` crate (@zesterer).
- On world creation, we now compute *horizon maps* (@zesterer).
- The way we pass the world from the server to the client has been updated (@xMAC94x).
- Artifacts related to image rotation were fixed (@imbris).
- Multiflow rivers were enabled (@zesterer).
- In the process of making changes related to the world map, various incidental fixes and optimizations were required.
- The new *level of detail* feature was added (@zesterer wrote part of this and has checked out the rest).
- A new LOD terrain rendering step was added to the pipeline.
- The LOD terrain quality was made configurable via a graphics setting.
- Horizon maps were used to cast shadows from LOD chunks on both LOD and non-LOD terrain.
- A "voxelization" effect was incorporated into rendered LOD terrain to make it blend better into the world.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Veloren's lighting has been completely overhauled (@zesterer has already checked most of this out).
- A semi-accurate index of refraction was assigned to our materials.
- A new, more realistic, physically based approach to lighting was used using the *Ashikhmin Shirley* BRDF.
- We emulate *atmospheric scattering* using equations designed for measuring solar panel light exposure.
- We attempt to compute *realistic light attenuation* in water using its real material properties.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Point and directional lights now cast realistic shadows, using *shadow mapping.* (@imbris, @zesterer, @Treeco, @YuriMomo)
- Point light shadow maps were added to the rendering pipeline, using geometry shaders and *seamless cube maps*.
- Directional light shadows were added to the rendering pipeline, using LISPSM together with disabling *depth clamping*.
- "Shadow-only" chunks and NPCs were added to prevent shadows from models behind you from disappearing.
- In the process of making changes related to shadow maps, various incidental fixes and optimizations were required.
The addition of shadow maps, LOD terrain, and the new lighting all led to significant performance degradation, on top of other
changes happening in master. Therefore, a large number of performance improvements were also needed:
- The graphics options were made much more flexible and configurable, and shaders were optimize.
- New options were provided for how to render lights and shadows (@Pfauenauge, @zesterer).
- Graphic setting storage and configuration were overhauled to make adding new features easier (@Pfauenauge, @imbris).
- Shaders were rewritten to utilize GLSL's preprocessor to avoid overhead (@zesterer, @YuriMomo).
- In the process of making changes related to providing additional rendering options, various incidental fixes and optimizations were required.
- Voxel model creation was switched to use *greedy meshing.*
- A new voxel meshing method, greedy meshing, was added (@imbris).
- Uses of the older meshing methods were migrated to use greedy meshing (@imbris, @jshipsey, @Pfauenauge).
- New restrictions were added to terrain, figure, and sprites to future proof them for further optimizations (@jshipsey, @Pfauenauge, @zesterer).
- Most positions are now relative to either chunk or player position for better precision (@imbris, @zesterer, @scottc).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- Animation and terrain math were switched to use SIMD where possible.
- Fixes were made to vek to make its SIMD feature usable for us (@zesterer, @imbris).
- The interface and types used in bone animation were changed in various ways (@jshipsey, @Snowram, @Pfauenauge).
- Redundant code generation for body animation is now partly taken care of by a macro (@jshipsey, @Snowram, @Pfauenauge).
- Animation code was modified to to use vek's SIMD representation where possible (@jshipsey, @Snowram, @Pfauenauge).
- Terrain meshing code and shadow map math were also modified to use vek's SIMD representation (@imbris).
- SIMD instruction generation was enabled (@YuriMomo, @jshipsey, @Snowram, @imbris, @Angelonfira, @xMAC94x).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- The way we cache glyphs was completely refactored, fixed, and optimized.
- Our fork of `conrod` was optimized in various ways (@imbris).
- Our fork of `conrod` now exposes whether a widget was updated during the current frame (@imbris).
- Our use of the glyph cache was rewritten for correctness (@imbris).
- A *text cache* was introduced that lets us skip remeshing glyphs that have not changed (@imbris).
- Various changes were made to reduce pressure on the glyph cache, with more planned (@imbris, @Pfauenauge).
- In the process of making changes related to the glyph cache, various incidental fixes and optimizations were required.
- Colors were changed to keep Veloren's look consistent with master.
- Some older tree models were brought back (@Pfauenauge).
- TODO(@Sharp): All hardcoded colors were extracted and made hotloadable.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Hardcoded colors were fixed to conform to Veloren's style.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Color models were fixed to conform to Veloren's style.
A detailed description of the involved changes follows.
---
- The world size is no longer hardcoded. All functions dependent on world size now take a `WorldSizeLg`, which holds the base 2 logarithm of each actual world dimension and is guaranteed to maintain certain properties (outlined in `common/src/terrain/map.rs`). Additionally, many utility functions that utilize the world size were moved into `common` as well (mostly `common/src/terrain/mod.rs`). Finally, the world map format was updated in order to store its size explicitly, with a migration path from the old format that should work whenever the old formatted map was a square (practically always). See `world/src/sim/mod.rs` for these changes.
- The map generation code was made generic to allow using it outside of the `world` crate. The parts of the map generating code that do not need to query the world were moved over to `common/src/terrain/map.rs`, allowing them to be used from the client without creating a dependency on `world`. The rest of it was turned into helper functions in `world/src/sim/map.rs`, which can be passed as closures to the generic map generation code to complete its construction. This also means that colors are now passed in separately to the map generation function. See <https://veloren.net/devblog-78/> for more details.
- On world creation, we now compute *horizon maps*. See the function in `world/src/sim/util.rs`.
Given a height map and a plane intersecting that height map, our horizon maps allow us to encode enough information to reconstruct shadows for each point on the height map using only the *horizon angle* (the angle at which the sun starts to become visible). As Veloren's sun only covers one plane, this is sufficient for encoding sun shadows for LOD terrain, by encoding two angles per chunk (one for each 90 degrees the sun covers). We can also use this for the moon, if we want, since the moon follows the same path. Additionally, we store the *height* of the furthest occluder, to try to make the shadows volumetric; so this means 4 bytes in total for each chunk.
Support for horizon maps has been merged into the map functionality in common as well.
- The way we pass the world from the server to the client has been updated. Rather than passing the prerendered map, we instead pass three maps with values for each chunk; one with the color information, a second with altitude information, and a third with horizon map information. We then reconstruct the map on the client, together with some additional information we send from the server (like the sea level and maximum height). See `common/src/msg/server.rs` for a detailed description of the format of `WorldMapMsg`, and `server/src/libr.rs` and `client/src/lib.rs` for details of the map construction and parsing.
- Artifacts related to image rotation were fixed. See the commit message for commit SHA `cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e` for a detailed explanation. This involved changes to shaders, the addition of a new type of graphic (also reflected in the graphic cache) that allows specifying a border color (which automatically makes the associated texture immutable), and some related fixes. I reproduce the first two paragraphs of the MR description as well:
```
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
```
- Multiflow rivers were enabled.
This does not really need to be part of this MR, and would be easy to revert, but since it seemed to provide a nice improvement it's currently packaged with it.
We already computed multiple outflows from each chunk for erosion purposes long before this MR.
However, we never modified river rendering to be able to handle this case (just a single downhill river flow is complex enough!) so this was not exposed when deciding which chunks were rivers.
Now that
- In the process of making changes related to the world map, various incidental fixes and optimizations were required. Some examples of fixes include making sure terrain is never lowered to below sea level (to make the shadow maps report correct values), fixing map altitudes and colors to understand things like cliffs and "block level" coloring (that doesn'te xist on the column level), and fixing a crashbug when rendering images for the UI where source pixels are strongly rectangular. Some examples of related performance fixes include avoiding allocating a fresh vector for all the maps (i.e. copying it over to change the format from `[u32; n]` to `DynamicImage` and then copying again to convert to `RgbaImage`), and instead using the `gfx::memory::slice` function to accomplish the same thing. These sorts of changes are spread all arond the code.
This includes the additon of a new scene, `voxygen/src/scene/lod.rs`, a new pipeline `voxygen/src/render/pipeline/lod_terrain.rs`, and new shaders `assets/vxygen/shaders/lod-terrain-vert.glsl` and `assets/vxygen/shaders/lod-terrain-frag.glsl`, as well as associated changes to the renderer in `voxygen/src/render/renderer.rs`.
The main idea behind our initial approach to LOD was to take the world data we now get from the server (altitude, color, and horizon mapping).
- Some previously computed values were turned into shader uniforms for better prediction on weak processors. (@zesterer)
- Calls to power or trig functions were removed or replaced with multiplications, where possible.
- After some deliberation
- To properly handle sprite "waving" for nearby sprites,
We explicitly designed the greedy meshing system with figures and sprites in mind.
In both cases, we want to be able to *efficiently* pack many different models into the same texture, especially in cases where we know
we will either not be removing any of the grouped-together from the models from the texture, or will remove all of them at once (so
they can be packed into some specific subtexture).
For sprites, since we know every model in advance and never intend to deallocate them, we currently pack them all as efficiently as
possible into one giant tetxure atlas. However, in the future we might opt to pack them slightly less efficiently in exchange for
shrinking the sprite vertex size.
For figures, we pack all the textures for each *model* into the same atlas.
is a global texture atlas used for every sprite, and for figures which is why we have the ability to mesh multiple
models to the same texture area (using the simple texture atlas allocator) without requiring intermediate vector allocations.
This is accomplished by delaying the time when we actually write the color and light data to the texture until *after* all the
model vertices have been meshed; then, we can just allocate the whole color/light array at once, making the atlas we use an
exact fit. In computer science-y terms, we accomplish this delay by, after we perform the initial greedy meshing (without
texture information), not continuing to create the texture data, but instead constructing a *continuation*--that is, a function
that, when called, will execute the rest of the computation. We push this continuation (which in Rust terms is a `FnOnce` closure
that takes the `ColLightsInfo` that it is supposed to write to as context) onto a
onto a vector
resizing. To allow for suspended writes to texture data, Rust pointed out to me that the continuation that would eventually write the color and light data to the texture atlas (the one that is shared by all models sharing the same greedy mesher) would have to *own* whatever data it mshed. Because we often generate the model data to mesh as a temporary in `voxygen/src/load.rs`, the
- Matrix multiplications in the shader were reduced for figure data (@zesterer).
- Vertex "waves" for fluid data were removed.
- Terrain "bending" near edges was removed.
- Scaling was fixed to make sure empty space was not introduced in a space previously occupied by a block. It was also changed to take ownership of its voxel data,
rather than sharing it, to let it be used with meshing.
- Rust's nightly version was bumped in order to use the `array_map` function, which lets us reuse more code between the simple map and `FigureModelCache`.
- PositionedGlyph::standalone.
---
I tried to cite sources in many cases[^realtime],[^lloyd],[^lispsm],[^pbrt],[^greedy],[^tjunctions]
where I needed features from elsewhere but I am particularly grateful for the following resources,
esepcially where they have accompanying source code. I linked all of them that are accessible to the public (those that are not were
obtained through legal means).
[^realtime]: Eisemann, Elmar, Michael Schwarz, Ulf Assarsson, Michael Wimmer. Real-Time Shadows. A K Peters/CRC Press (T&F), 20160419.
[^lloyd]: Lloyd,B. 2007. [Logarithmic perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). PhD thesis, University of North Carolina.
[^lispsm]: Wimmer, M., Scherzer, D., and Purgathofer, W. 2004. [Light space perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). In Proceedings of Eurographics Symposium on Rendering 2004, pp. 143– 152.
[^pbrt]: Pharr, Matt, et al. [http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf](Physically Based Rendering: From Theory to Implementation). Third edition, Morgan Kaufmann Publishers/Elsevier, 2017.
[^greedy]: mikolalysenko. “Meshing in a Minecraft Game.” 0 FPS, 30 June 2012, <https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/>.
[^tjunctions]: blackflux. “Meshing in Voxel Engines – Part 1.” Blackflux.Com, 23 Feb. 2014, <https://blackflux.wordpress.com/2014/02/23/meshing-in-voxel-engines-part-1/>.
I am also especially grateful to Khronos, Wikiepdia, and stackoverflow for answering many of my specific questions while writing the MR.
---
Squashed commit of the following:
commit 300505e7305a2fdac722a808ee8538323f215f39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 18:46:25 2020 +0200
Fixing cargo doc and typo in CHANGELOG.
commit ec0aeb18e8499d7d84ef818331b4b65c3d76cea6
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 15:38:50 2020 +0200
Hopefully final commit for the LOD branch.
commit 5e8ea0b1eaac02903a02feb2eb038d195de4872f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 10:14:26 2020 +0200
Falling back to power as stopgap.
commit e44a1cbf46504ee9931a01bdc9033e145500d557
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 09:25:41 2020 +0200
Address imbris feedback.
Temporarily disables shiny water, lowers max VD.
These restrictions will be lifted soon after merging.
commit 561e25778a108ac3712f5ec2ce3a51234c4430d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 08:31:13 2020 +0200
Tweaking shaders a bit.
commit 7d19259078ce0dd7b3742ad7d0cb3fab3ece3fdc
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:59:43 2020 +0200
Fix view example as well.
commit 051cd4934e0fad2c0b15db4380a4189fa318679f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:29:06 2020 +0200
Fix meshing benchmark.
commit c95e07db3b4dcca285678985e65e31b927cb1c61
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 05:46:22 2020 +0200
Address MR feedback, fix scene clouds.
commit 1bfb816cabdb3ffc1e507a009c2d98696b4b573a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:39:36 2020 +0200
Incorporating Pfau's figure color changes.
New eyes and new humanoid colors.
commit 3f9b89a3ac7b3356b1dba0d1a8f6541357f81469
Merge: e2f5162e4 62c53963a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:29:41 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit e2f5162e4f96f4124aa43488f7245d341b3dcfd4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:28:38 2020 +0200
World colors are all hotloadable.
They live in assets/world/style/colors.ron.
Only a small handful of hardcoed colors remain in World; they are either
part of the map, or difficult to disentangle from the rest of the
computation. Comments are made where appropriate.
commit 62c53963abe1975009d34a8f9515a355bef24f31
Author: Marcel Märtens <marcel.cochem@googlemail.com>
Date: Wed Aug 19 15:59:00 2020 +0200
replace pretty_env_logger with tracing
commit 5b1625f99d9586fe80e2232f583ec5af9f953099
Merge: d71003acd 4942b5b39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:15:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit d71003acdabeff970b3928e97c26af6847b5b78e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:14:34 2020 +0200
Hotloading colors, part 1: colors in common.
Currently, this just entails humanoid colors. There are only three
colors not handled; the light emitter colors in
common/src/comp/inventory/item/tool.rs. These don't seem important
enough to me to warrant making hotloadable, at least not right now, but
if it's needed later we can always add them to the file.
commit 63b5e0e553eb2ea49276f192a6fc7dd65254270d
Merge: c32b337a4 6d2c4b9c1
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 13:05:37 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c32b337a46e10d9de473d178a94a3ccd61c39bb3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:52:04 2020 +0200
Fixing LOD grid, for real.
commit a166ae0360395387e09fb35a1f84210c2ce5ec24
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:28:05 2020 +0200
Addressing imbris's initial feedback.
Fixes two minor bugs: explosion particles were no longer spawning
randomly, and LOD grids were not perfectly even.
commit 4cbad004f44060994252dd3d38647a14a589712f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:27:58 2020 +0200
Bumping nightly per request.
commit 548680276aac77c25d43d16b5622f847d474dbef
Merge: acc098604 8f8b20c91
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:26:06 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit acc0986040589a3492f88a740bc3c3fc693b26d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:28:32 2020 +0200
Lower resolution due to lying drivers.
commit d3b878de2a52c358d2944a6bbd0555dad7fbdb10
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:15:38 2020 +0200
Fix issues msh encountered with Intel 4600.
commit 10245e0c1b0cb6fae10d86409435364edc6102ef
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 21:15:02 2020 +0200
Merge more models into one mesh than we did previously.
commit 3155c31e663c52ae5c3a53d5fb5665892a1a498a
Merge: 7204cc8a7 3c199280e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:35:22 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7204cc8a7a4f74a30306bd205d9834fee4bb944f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:34:43 2020 +0200
Fix not yet done NPC animations.
This forces them all to be the idle animation if not specified.
This fixes issues where you'd have giant NPCs in water.
commit bc83360f2a08918f19d417b5f772e1ff554dba08
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 19:36:37 2020 +0200
Try to fix some bugs:
- Z fighting with LOD terrain and water.
- Audio SFX not playing.
commit 1fd104aa603bf3781b6526a5cada46aeca3049dd
Merge: 862df3c99 7c2c392a3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 12:02:31 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 862df3c9976c4da9bd7cfd784f1a85973127968a
Merge: 0a4218ed9 75c1d4401
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 05:52:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0a4218ed9d541a2b34c133351bea38a99ddf4ea7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 22:27:14 2020 +0200
Fix particle depth.
commit f51dfdeb442d0dd5243dd2f344fa4be295bd0875
Merge: c6251a956 5e6dc0471
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:19:04 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit c6251a956ad376400dca5c23420cf8d213dc8fdf
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:15:46 2020 +0200
Cache figures more intelligently.
Cache figures for longer, and don't cache character states for the
player except where they actually affect the rendered model.
commit 0ed801d5404982c6fb63b1eaa4567d908b294c9d
Merge: c11b9bdf0 eea64f78f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 16:32:24 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c11b9bdf0a53bf9884d2f5a48fec9b01d582df1a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 11:47:15 2020 +0200
Remove unneeded Clippy annotation.
commit 16aa9ef40af56d69289d00aafb3deadfb8bd4f35
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 8 00:53:02 2020 +0200
Fix hotloading and Clippy.
commit 3dc973e0be5b758da1e9805eb764ad401374cd0c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 23:50:27 2020 +0200
Major speedups with SIMD.
commit fba64a7d93d5a96077ce87287bbce6ab9b7fbcae
Merge: 76429d00e d1e10b178
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:19 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 76429d00eea00d212fbd672a84ee91e75b19b938
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:10 2020 +0200
Add clippy.toml.
commit c79f512f84dbb83cb82b7954db68ff241dfd8e41
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 11:55:20 2020 +0200
Fix all clippy issues, clean up Rust code.
commit 6f90e010b3fbefb53b0d632e819931350015b6b8
Merge: 77a8c7c26 5929cfa5c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:30 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 77a8c7c267d3f44a1a62bd6b2274359973c5e4d4
Merge: b44e44232 44febaabd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:10 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 5929cfa5c713aa392110bbb62407f76caf53c3df
Author: jshipsey <jshipsey18@gmail.com>
Date: Thu Aug 6 20:47:27 2020 -0400
fixed in-hand arrow bug
commit b44e442325d828f1cd564d66908f89d09e80474b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 6 13:40:35 2020 +0200
Miscellaneous performance improvements.
commit be37acf287c1360d8085862526ac3365ffd1d768
Merge: 125d7fc6c c11876547
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 05:49:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 125d7fc6c4dcd8c8c5f27b8268a4d64f409f3644
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 04:55:31 2020 +0200
Abstract over simd vs. repr_c vectors.
Also some minor improvements to Event size.
commit d4d4956e9252e1241ce110b2aa85076c6b1e2a23
Merge: 5f3b7294a aced5f979
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:56:54 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 5f3b7294af1f8533edc2620b58863c248e2b07af
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:43:52 2020 +0200
Fix formatting issues I missed before.
commit a428a3ebba70dcab63dd0f8cd983120c90617271
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:41:51 2020 +0200
Fix clippy warnings, part 1.
There aer still a bunch of type too complex and
function takes too many arguments warnings that I'll fix later
(or ignore, since in the one case I did fix a function takes too
many arguments warning I think it made the code *less* readable).
commit ba54307540ed8a937ac08209730284fc653af85b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 30 13:22:42 2020 +0200
Fix light animations so they are removed when the light turns off.
commit 7e0f4bcbf0f4717145d8beac40d52e3acebbe2aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 21:10:20 2020 +0200
Fix crash in edge case for pixel art.
commit 56da06f7a351e2b949e9b014a90b974d511a0924
Merge: cf74d55f2 9f53a4a19
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:56:52 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:29:52 2020 +0200
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
The first concern was addressed by fixing the dimensions of the map
images drawn from the UI (so that we always use a square source
rectangle, rather than a rectangular one according to the dimensions of
the map). We also fixed the way rotation was done in the fragment
shader for north-facing sources to make it properly handle aspect ratio
(this was already done for north-facing targets). Together, these fix
rendering issues peculiar to rectangular maps.
The second and third concerns were jointly addressed by adding an
optional border color to every 2D image drawn by the UI. This turns
out not to waste extra space even though we hold a full f32 color
(to avoid an extra dependency on gfx's PackedColor), since voxel
images already take up more space than Optiion<[f32; 4]> requires.
This is then implemented automatically using the "border color"
wrapping method in the attached sampler.
Since this is implemented in graphics hardware, it only works (at
least naively) if the actual image bounds match the texture bounds.
Therefore, we altered the way the graphics cache stores images
with a border color to guarantee that they are always in their own
texture, whose size exactly matches their extent. Since the easiest
currently exposed way to set a border color is to do so for an
immutable texture, we went a bit further and added a new "immutable"
texture storage type used for these cases; currently, it is always
and automatically used only when there is a specified border color,
but in theory there's no reason we couldn't provide immutable-only
images that use the default wrapping mdoe (though clamp to border
is admittedly not a great default).
To fix the maps case specifically, we set the border color to a
translucent version of the ocean border color. This may need
tweaking going forward, which shouldn't be hard.
As part of this process, we had to modify graphics replacement to
make sure immutable images are *removed* when invalidated, rather
than just having a validity flag unset (this is normally done by
the UI to try to reuse allocations in place if images are updated
in benign ways, since the texture atlases used for Ui do not
support deallocation; currently this is only used for item images,
so there should be no overlap with immutable image replacement,
so this was purely precautionary).
Since we were already touching the relevant code, we also updated
the image dependency to a newer version that provides more ways
to avoid allocations, and made a few other changes that should
hopefully eliminate redundant most of the intermediate buffer
allocations we were performing for what should be zero-cost
conversions. This may slightly improve performance in some
cases.
commit ad18ce939940a8c697270f6e9b94db9942fd8295
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 13:21:09 2020 +0200
Fix continent scale hack.
commit 36b1cb074f5b195aebd7dbbc3da7f0246a1a18ec
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 12:11:40 2020 +0200
Enable loading different sized maps without a recompile.
We may want to tweak the effects of the continent_scale_hack.
commit 13b6d4d534cc4814b7cb3294ca41bbfea0a6b186
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 10:55:48 2020 +0200
Removing WORLD_SIZE, part 1.
Erased almost every instance of WORLD_SIZE and replaced it with a local
power of two, map_size_lg (which respects certain invariants; see
common/src/terrain/map.rs for more details about MapSizeLg). This also
means we can avoid a dependency on the world crate from client, as
desired.
Now that the rest of the code is not expecting a fixed WORLD_SIZE, the
next step is to arrange for maps to store their world size, and to use
that world size as a basis prior to loading the map (as well, probably,
as prior to configuring some of the noise functions).
commit 30b1d2c6428230a9eaa0d749cdcbbd6f1cbccd78
Merge: 7d56ba31b 1377b369f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:58 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 7d56ba31b445441461b28a07fc495d7d4f047c17
Merge: 2101113b4 598f14b25
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 1377b369f6db2258e910d467a5740f31789e3ded
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sun Jul 19 23:25:38 2020 +0200
more saturated pumpkins
commit ae8d50527f93bb0616c2ad46ce4dacb63bc37c6d
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sat Jul 18 20:29:56 2020 +0200
acacia models
commit 2101113b467e691de787392d7f20f1745f5637bd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 18 18:55:25 2020 +0200
Higher detail LOD.
commit add2cfae04b4385fa5590e11e2bd5229d9dee0aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 16 01:57:39 2020 +0200
Revert some irrelevant stuff.
commit 2e2ab3dc1eaa59a4aef7f8d34a53d8aae4c8553a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 15 13:30:49 2020 +0200
Fixing various things about shadows.
* Correcting optimal LISPSM parameter.
* Figure shadows are cast when they're not visible.
* Chunk shadows stay cast until you look away.
* Seamless cubemaps for point lights.
* Etc.
commit 6c31e6b56217274285b597af297036691ea5d897
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 19:50:26 2020 +0200
Fix shadow creation.
commit 6332cbe006115ae205597529cd8bbccd146c2cca
Merge: be438657c 930e0028b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:47:00 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit be438657c33d7b5bfb0a9582c3ed3fd366637323
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:28:08 2020 +0200
Tweaks to shadows.
Added shadow map resolution configuration, added seamless cubemaps,
documented all existing rendering options, and fixed a few Clippy
errors.
commit 23b4058906013c7d2a40c286e20e32c5fbd897ed
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 10:11:19 2020 +0200
Fix moon, use nonlinear noise for terrain.
Note that the latter has a bit of performance cost.
commit 7fbe5cbfbb9dc29607957b8e62f432a4deed193d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:23:02 2020 +0200
Address lies about max texture size.
commit bcfc62b5e13a1cdd83f57535fde4694720bebfd9
Merge: 75e3626a7 18a08e8fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:22:08 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 75e3626a785919f43fdcf2127c2b10e3e4df2f9f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:21:52 2020 +0200
OpenGL 3.3 minimum.
commit 18a08e8fe2739f02af99a5d2cb4e7c38c49e858b
Author: Monty Marz <m.marzouq@gmx.de>
Date: Tue Jul 7 23:57:52 2020 +0200
settings localization
commit 90c5d1ca3620092bc3ae10b2211489eb1cf6f5e8
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 21:11:48 2020 +0200
Lower near distance.
commit 0e66f02b25aaddaa2dfddbbc89cd67de54a9a7b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 20:09:01 2020 +0200
All sprites sway in the wind now.
commit db1401a6910bf42dcf502462c90038752ff5fbdb
Merge: 69e508d8c e8b4b29d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 19:34:17 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 69e508d8c94d8973033817ca86f357e466fc7c4d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 18:41:37 2020 +0200
Make it easy to switch to SIMD for math.
commit ffe0f5928c7a7e87d00cb5426b3b1d831d7e02fd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 21:21:12 2020 +0200
Fix some issues with underwater rendering.
commit bfda6da42f38fd02c31ee92c81ab785a3e50c2a0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 19:17:59 2020 +0200
Fix some minor display issues.
commit 0ed752e087968cf901301884aaeae698e32ef8a5
Merge: ccc6a06a8 518edcb85
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:14:21 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit ccc6a06a8d4504d6b9f7af7905a414d2ee06ab76
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:04:34 2020 +0200
Some minor changes.
commit 4e020246702889269efe1a191788992164c508d6
Merge: 50a64d927 e05c9267a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 16:17:40 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 50a64d927e6c4f4b0e4688e4cbfca694bc3f922a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 13:07:03 2020 +0200
Fix far plane.
commit 7dd06da34cae8f9ea3b6c889fe965181f3fd3949
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:25:35 2020 +0200
Add shadows.glsl.
commit 618a18c998778bf871b905a74657440fcc384c80
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:10:22 2020 +0200
Adding shadows, greedy meshing, and more.
commit eaea83fe6a5cb1cb0ba8beef888183c718258496
Merge: 267018495 2f89b863e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 22:47:07 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 2670184954a13e4a9e7a4e35ba79aac0c5fac2f7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 21:20:01 2020 +0200
Make civsim and sites deterministic.
For anything in worldgen where you use a HashMap, *please* think
carefully about which hasher you are going to use! This is
especially true if (for some reason) you are depending on hashmap
iteration order remaining stable for some aspect of worldgen.
commit f8376fd5dc72b4a9c2f51a6b4570d59c8b8e9343
Merge: 654f7e049 cdee191dd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 17:53:57 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 654f7e049258d9da27c09608bbe6a46ffa8787e5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed May 20 21:22:30 2020 +0200
Correct backface culling.
commit 560501df05ca725409b0f2e4eb31bdfdc15fd0c7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue May 19 17:22:06 2020 +0200
Greedy messhing for shadows.
commit a4d87e1875ca543436e6bbbeb20348facc5a52d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun May 17 05:59:00 2020 +0200
Shadow maps work for lantern.
commit 243d0837b8a3b08172c9a3c348d964d7ddc2a0a8
Merge: 04382dc28 71dd520cd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:53:13 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 04382dc28632b6c66e8821f6870c0daaa1c1901a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:22:17 2020 +0200
WIP: better graphics config, better LOD, shadow maps.
commit 22ddbad3eb32bfa70f0932176022208fe67ded81
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 18:54:09 2020 +0200
Minor shader fixes.
commit 746a10e8d01ac235f994b0cde78fa48998602a1f
Merge: 0f4a0e763 40ab94673
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 04:02:09 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0f4a0e763db3afbdc4fb0558611f38326ca87151
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 23:03:24 2020 +0200
Switch back to pop-in terrain.
commit dd74fa7e4a53667b38811d7aec58d7f6a68889bb
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 22:58:55 2020 +0200
LOD shading closer to voxel shading.
commit ef67bd58ba0bdaf622b078892d768263b6cba268
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 28 20:49:03 2020 +0200
Experimental underwater lighting.
commit 2c5ad9d07605e80d5fd5679dd3a5d70c605b86a9
Merge: 748279835 303967a6f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 22:35:24 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7482798354eda18c8207950080fc24d443a369de
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 21:59:55 2020 +0200
Replace discard in figure-frag.
commit d83b4ae69be4912f69bf7835f509c68a1c7770a4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:45:57 2020 +0200
Fix sprite lighting, HDR from focus_pos.
commit 0594238004f116274905fa0ed7c2b6c417ed1d29
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:14:10 2020 +0200
Proper HDR from point lights.
commit 48c93d2b41ce5743103d18e76cc228f5ac766492
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 14:01:43 2020 +0200
Brighter ambiance, darker LOD shadows.
commit e0452e895ccfa8a43f368cae3b8b8aedc24dad93
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 13:13:23 2020 +0200
More proper HDR.
commit 4c6da3ed16cfeebb455e40da5f557b4af9a499d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 00:13:10 2020 +0200
Trying LOD noise.
commit 682a3d74c85df5503ffe1fc1cc891bce789df1ad
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 23:11:08 2020 +0200
Fix LOD heights in towns.
commit cc39e5734e8b18f9077bf42e66337c1319dd6b6e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 21:01:23 2020 +0200
More LOD fixes.
commit 8116b21c2e51c836e77894e309ac273caf2917b3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:54:43 2020 +0200
I like this coloring.
commit bc2560ea90b36f4b46190005344232d993043ac3
Merge: 14effdd5d e690efe71
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:48:33 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 14effdd5db8747fcf3eb34f03b46b7792e92d1c5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:24:35 2020 +0200
Re-saturate.
commit 48a643955d4435b78179acba0beb4a979905cc31
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:23:57 2020 +0200
Various fixes.
commit f7b497a0c25f4ad4682c71dd1ed6f608052feb9b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 03:22:49 2020 +0200
Render figures again.
commit 44e4aad48deba8266b9f8bdfd3db096b381f5327
Merge: e6f0a5a98 9ec319a18
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 02:01:04 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit e6f0a5a981a82533ba188fff0a54ce98577bb152
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 24 16:12:20 2020 +0200
Add atmospheric scattering.
commit f2953087f691a8edbc001cb98ebf5059fc6f8ac0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 23 00:01:20 2020 +0200
Fix shadowing for specular reflections.
commit ddd4a67a9799b8d08c7dc0c2bec90621c2bed0e3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Apr 22 22:56:12 2020 +0200
HDR fixes.
commit 1015e60deef3c447381996277df7496707a63bd0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 21 18:25:19 2020 +0200
More lighting changes.
commit 80c264abd111fb237e57843efcb5c071d4f84613
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 13 00:29:59 2020 +0200
Lighting experiments.
commit 8414987e589dd5102bad89762a3adaccc0bfe957
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 9 02:38:40 2020 +0200
WIP -- lighting changes and soft shadows.
commit 9cd2b3fb0d6b49776c6dfe463e4169637250b11a
Merge: c7ea687eb 8b149ad11
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:29 2020 +0200
Merge branch 'sharp/new-lighting' into sharp/small-fixes
commit c7ea687ebbc5aace1b455f134a5bf49ce2c7434a
Merge: 476441531 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:02 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 8b149ad11ad4bb75018fcf9519baec27d1c95951
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:32:39 2020 +0200
Trying out a new lighting model.
commit b0ac9f36f755dd06f7c17c46150568064790864f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 07:56:11 2020 +0200
Use bicubic interpolation for terrain.
commit f6fc9307a121514b614bc50ef8eb055953e7da8a
Merge: 33140a295 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 05:01:41 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 4764415312aae6e9ac2d00e86e84577cb958f1ab
Merge: ed2d0111d 13388ee6a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 04:54:48 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 13388ee6a42943f3f79a9cb488346cef18e272fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 20:30:08 2020 +0200
Various fixes (to coloring and to soft shadows).
commit fbd084a94a067082a87cd6d28b82054709bc9265
Merge: 5a089863b 4fdf6896a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 18:50:38 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/map-colors
commit ed2d0111d994262ae836d84d1fe5a45e4de72a0b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 06:49:27 2020 +0200
Combining colors and LOD.
commit 88342640c6b835114d01c797b89fdede3b0a2108
Merge: 33140a295 5a089863b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:49:20 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 33140a2951b8212725f42c758b277aaec4d888f7
Merge: 4c65a5aed f34d4b379
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:36:21 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 5a089863beb01d4794bbe3580ada47b278715ea2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 03:17:49 2020 +0200
Making maps brighter.
This is probably not the right way to do it, but oh well!
commit 32b2c99109dd486aa922886081068f9c550c83f2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 02:46:36 2020 +0200
Horizon mapping and "layered" map generation.
Horizon mapping is a method of shadow mapping specific to height maps.
It can handle any angle between 0 and 90 degrees from the ground, as
long as know the horizontal direction in advance, by remembering only a
single angle (the "horizon angle" of the shadow map). More is explained
in common/src/msg/server.rs. We also remember the approximate height of
the largest occluder, to try to be able to generate soft shadows and
create a vertical position where the shadows can't go higher.
Additionally, map generation has been reworked. Instead of computing
everything from explicit samples, we pass in sampling functions that
return exactly what the map generator needs. This allows us to cleanly
separate the way we sample things like altitudes and colors from the map
generation process. We exploit this to generate maps *partially* on the
server (with colors and rivers, but not shading). We can then send the
partially completed map to the client, which can combine it with shadow
information to generate the final map. This is useful for two reasons:
first, it makes sure the client can apply shadow information by itself,
and second, it lets us pass the unshaded map for use with level of
detail functionality.
For similar reasons, river generation is split
out into its own layer, but for now we opt to still generate rivers on
the server (since the river wire format is more complicated to compress
and may require some extra work to make sure we have enough precision to
draw rivers well enough for LoD).
Finally, the mostly ad-hoc lighting we were performing has been (mostly)
replaced with explicit Phong reflection shading (including specular
highlights). Regularizing this seems useful and helps clarify the
"meaning" of the various light intensities, and helps us keep a more
physically plausible basis. However, its interaction with soft shadows
is still imperfect, and it's not yet clear to me what we need to do to
turn this into something useful for LoD.
commit f8926a5737ddc51f3d585c651a64c43677aae0f4
Merge: a1aee931e 875ae6ced
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Mar 13 13:32:42 2020 +0100
Merge remote-tracking branch 'origin/master' into sharp/map-colors
commit 4c65a5aed353b119aea65a2aaeb94549b67beb42
Author: Treeco <5021038-Treeco@users.noreply.gitlab.com>
Date: Mon Feb 24 16:48:05 2020 +0000
Made LOD setting slider exponential
commit 2fa7b2d20d7233dc8bfd64f9f7f54617575248f1
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 17:49:53 2020 +0000
Added mist to LoD
commit aab059a450b5f635777129ff82cc15b662965c3c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 15:14:06 2020 +0000
Added LoD slider
commit 779c36b538121c5ade3633ae5cb67bb14c8c3877
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:54:55 2020 +0000
Reduced cost of vertex pushing
commit 9fea150473906b166365b738ebcea07c697daf3d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:38:53 2020 +0000
Fixed maths, improved LoD resolution
commit 5481df38fea5bf183ff376a3337179cfaa5233dc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 11:22:50 2020 +0000
Dynamically relocate LoD vertices to enhance details
commit a3e36a50ababd615da7db1b26158c7906a5def01
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 18:13:51 2020 +0000
Simpler terrain spiral rendering
commit 255f450ae9ac8763db4bede075fb409161ed57cc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:53:17 2020 +0000
Better LoD precision
commit 3d027aebe812a5b8658a4eb8123dc9f61b3776d2
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:04:03 2020 +0000
Better falloff
commit be775c9484b457b2c0b1a494aec03392d0c70e76
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 15:30:45 2020 +0000
Applied good ideas from experimental branch
commit 58587b68545a23c5c04ab4574a4b94b3bc982246
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 16:15:13 2020 +0000
Minor fixes to LoD merging
commit 7b42aebd709c14df2db766aad61d9280ad24d84d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 15:04:44 2020 +0000
Capped LoD dragging
commit 8aafc559f87124e1ea5ca6e3ddc2aa0c242d793c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:54:37 2020 +0000
Better blending between LoD and terrain border
commit edd3455d5161792d87ddc8eadc0ecbad5532b284
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:40:19 2020 +0000
Fixed LoD z depth, added sea level offset
commit b9b06744620114dd5556e73f64fa93c145503a7c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:27:43 2020 +0000
Better LoD smoothing
commit a1aee931e790431560cd2d953ad61d9497072afd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Feb 21 14:52:17 2020 +0100
Adding shadows.
commit 2400786c13dd891c131ed86d48d05df516a8a778
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 13:48:40 2020 +0000
Use world map as LoD source
commit dbf650f504a4c25fbbc2096ac3616c736bf52d23
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Jan 20 00:48:14 2020 +0000
Better clouds at distance
commit 5e6f81b86cdb9730b9b056877b19257075fd5fa8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Jan 19 23:59:02 2020 +0000
sync
commit 745e7540ddb000cc645f612767b337c2ddc3f7c0
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 12:40:48 2019 +0000
Improved cloud falloff mist, faster noise sampling
commit f6a200d0cb866196ba57697466755f9e0c7ea5d8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 10:09:00 2019 +0000
Improved long-range depth precision, removed unnecessary LoD polygons
commit 63d1b2bb2292898d59fb4f4e502201103dfeb86f
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 20:57:46 2019 +0000
Working LoD shader
commit f13d98ee3e58f881e8b978861a67663b59ed91ec
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 11:03:40 2019 +0000
LoD first attempt (stack overflow issue)
2020-08-20 18:34:59 +00:00
|
|
|
|
/* let is_ocean = (0..map_size_lg.chunks())
|
2020-01-11 20:38:30 +00:00
|
|
|
|
.into_par_iter()
|
(See sharp/lod-history) LOD, shadows, greedy meshing, new lighting, perf
---
Pretty much a Veloren fork at this point. Here's a high level overview of the changes (will be added to CHANGELOG just before merge).
At a high level this MR incorporates roughly two groups of changes.
The first group consists of new game features: more flexible map sizes, level of detail terrain, shadow maps, and a new lighting
engine. This is "feature work" that (mostly) only adds new things to Veloren, and mostly shouldn't affect old stuff.
The second big group of changes are those addressing the fallout from all the new features. These include performance fixes of
various sorts: the addition of multiple graphics options and optimization of the cheap ones to avoid work, switching all voxel
models to use some variant of greedy meshing, switching over much of our CPU-side vector math to exploit SIMD instructions
(coinciding with a fork of `vek`), and a rewrite of how the UI handles text rendering (coinciding with updates to our fork
of `conrod`). Making Veloren's hardcoded colors appear correct under the new lighting engine also required considerably
changes (TODO: Fill in this section when it's complete).
The second category of changes often heavily touches code owned by other people, including frequently modified code "owned" by a
handful of people, so I recommend that this code be reviewed particularly carefully.
---
At a high level (each will be described in more detail below):
- The world map has been refactored.
- The world size is no longer hardcoded (@zesterer).
- The map generation code was made generic to allow using it outside of the `world` crate (@zesterer).
- On world creation, we now compute *horizon maps* (@zesterer).
- The way we pass the world from the server to the client has been updated (@xMAC94x).
- Artifacts related to image rotation were fixed (@imbris).
- Multiflow rivers were enabled (@zesterer).
- In the process of making changes related to the world map, various incidental fixes and optimizations were required.
- The new *level of detail* feature was added (@zesterer wrote part of this and has checked out the rest).
- A new LOD terrain rendering step was added to the pipeline.
- The LOD terrain quality was made configurable via a graphics setting.
- Horizon maps were used to cast shadows from LOD chunks on both LOD and non-LOD terrain.
- A "voxelization" effect was incorporated into rendered LOD terrain to make it blend better into the world.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Veloren's lighting has been completely overhauled (@zesterer has already checked most of this out).
- A semi-accurate index of refraction was assigned to our materials.
- A new, more realistic, physically based approach to lighting was used using the *Ashikhmin Shirley* BRDF.
- We emulate *atmospheric scattering* using equations designed for measuring solar panel light exposure.
- We attempt to compute *realistic light attenuation* in water using its real material properties.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Point and directional lights now cast realistic shadows, using *shadow mapping.* (@imbris, @zesterer, @Treeco, @YuriMomo)
- Point light shadow maps were added to the rendering pipeline, using geometry shaders and *seamless cube maps*.
- Directional light shadows were added to the rendering pipeline, using LISPSM together with disabling *depth clamping*.
- "Shadow-only" chunks and NPCs were added to prevent shadows from models behind you from disappearing.
- In the process of making changes related to shadow maps, various incidental fixes and optimizations were required.
The addition of shadow maps, LOD terrain, and the new lighting all led to significant performance degradation, on top of other
changes happening in master. Therefore, a large number of performance improvements were also needed:
- The graphics options were made much more flexible and configurable, and shaders were optimize.
- New options were provided for how to render lights and shadows (@Pfauenauge, @zesterer).
- Graphic setting storage and configuration were overhauled to make adding new features easier (@Pfauenauge, @imbris).
- Shaders were rewritten to utilize GLSL's preprocessor to avoid overhead (@zesterer, @YuriMomo).
- In the process of making changes related to providing additional rendering options, various incidental fixes and optimizations were required.
- Voxel model creation was switched to use *greedy meshing.*
- A new voxel meshing method, greedy meshing, was added (@imbris).
- Uses of the older meshing methods were migrated to use greedy meshing (@imbris, @jshipsey, @Pfauenauge).
- New restrictions were added to terrain, figure, and sprites to future proof them for further optimizations (@jshipsey, @Pfauenauge, @zesterer).
- Most positions are now relative to either chunk or player position for better precision (@imbris, @zesterer, @scottc).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- Animation and terrain math were switched to use SIMD where possible.
- Fixes were made to vek to make its SIMD feature usable for us (@zesterer, @imbris).
- The interface and types used in bone animation were changed in various ways (@jshipsey, @Snowram, @Pfauenauge).
- Redundant code generation for body animation is now partly taken care of by a macro (@jshipsey, @Snowram, @Pfauenauge).
- Animation code was modified to to use vek's SIMD representation where possible (@jshipsey, @Snowram, @Pfauenauge).
- Terrain meshing code and shadow map math were also modified to use vek's SIMD representation (@imbris).
- SIMD instruction generation was enabled (@YuriMomo, @jshipsey, @Snowram, @imbris, @Angelonfira, @xMAC94x).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- The way we cache glyphs was completely refactored, fixed, and optimized.
- Our fork of `conrod` was optimized in various ways (@imbris).
- Our fork of `conrod` now exposes whether a widget was updated during the current frame (@imbris).
- Our use of the glyph cache was rewritten for correctness (@imbris).
- A *text cache* was introduced that lets us skip remeshing glyphs that have not changed (@imbris).
- Various changes were made to reduce pressure on the glyph cache, with more planned (@imbris, @Pfauenauge).
- In the process of making changes related to the glyph cache, various incidental fixes and optimizations were required.
- Colors were changed to keep Veloren's look consistent with master.
- Some older tree models were brought back (@Pfauenauge).
- TODO(@Sharp): All hardcoded colors were extracted and made hotloadable.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Hardcoded colors were fixed to conform to Veloren's style.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Color models were fixed to conform to Veloren's style.
A detailed description of the involved changes follows.
---
- The world size is no longer hardcoded. All functions dependent on world size now take a `WorldSizeLg`, which holds the base 2 logarithm of each actual world dimension and is guaranteed to maintain certain properties (outlined in `common/src/terrain/map.rs`). Additionally, many utility functions that utilize the world size were moved into `common` as well (mostly `common/src/terrain/mod.rs`). Finally, the world map format was updated in order to store its size explicitly, with a migration path from the old format that should work whenever the old formatted map was a square (practically always). See `world/src/sim/mod.rs` for these changes.
- The map generation code was made generic to allow using it outside of the `world` crate. The parts of the map generating code that do not need to query the world were moved over to `common/src/terrain/map.rs`, allowing them to be used from the client without creating a dependency on `world`. The rest of it was turned into helper functions in `world/src/sim/map.rs`, which can be passed as closures to the generic map generation code to complete its construction. This also means that colors are now passed in separately to the map generation function. See <https://veloren.net/devblog-78/> for more details.
- On world creation, we now compute *horizon maps*. See the function in `world/src/sim/util.rs`.
Given a height map and a plane intersecting that height map, our horizon maps allow us to encode enough information to reconstruct shadows for each point on the height map using only the *horizon angle* (the angle at which the sun starts to become visible). As Veloren's sun only covers one plane, this is sufficient for encoding sun shadows for LOD terrain, by encoding two angles per chunk (one for each 90 degrees the sun covers). We can also use this for the moon, if we want, since the moon follows the same path. Additionally, we store the *height* of the furthest occluder, to try to make the shadows volumetric; so this means 4 bytes in total for each chunk.
Support for horizon maps has been merged into the map functionality in common as well.
- The way we pass the world from the server to the client has been updated. Rather than passing the prerendered map, we instead pass three maps with values for each chunk; one with the color information, a second with altitude information, and a third with horizon map information. We then reconstruct the map on the client, together with some additional information we send from the server (like the sea level and maximum height). See `common/src/msg/server.rs` for a detailed description of the format of `WorldMapMsg`, and `server/src/libr.rs` and `client/src/lib.rs` for details of the map construction and parsing.
- Artifacts related to image rotation were fixed. See the commit message for commit SHA `cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e` for a detailed explanation. This involved changes to shaders, the addition of a new type of graphic (also reflected in the graphic cache) that allows specifying a border color (which automatically makes the associated texture immutable), and some related fixes. I reproduce the first two paragraphs of the MR description as well:
```
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
```
- Multiflow rivers were enabled.
This does not really need to be part of this MR, and would be easy to revert, but since it seemed to provide a nice improvement it's currently packaged with it.
We already computed multiple outflows from each chunk for erosion purposes long before this MR.
However, we never modified river rendering to be able to handle this case (just a single downhill river flow is complex enough!) so this was not exposed when deciding which chunks were rivers.
Now that
- In the process of making changes related to the world map, various incidental fixes and optimizations were required. Some examples of fixes include making sure terrain is never lowered to below sea level (to make the shadow maps report correct values), fixing map altitudes and colors to understand things like cliffs and "block level" coloring (that doesn'te xist on the column level), and fixing a crashbug when rendering images for the UI where source pixels are strongly rectangular. Some examples of related performance fixes include avoiding allocating a fresh vector for all the maps (i.e. copying it over to change the format from `[u32; n]` to `DynamicImage` and then copying again to convert to `RgbaImage`), and instead using the `gfx::memory::slice` function to accomplish the same thing. These sorts of changes are spread all arond the code.
This includes the additon of a new scene, `voxygen/src/scene/lod.rs`, a new pipeline `voxygen/src/render/pipeline/lod_terrain.rs`, and new shaders `assets/vxygen/shaders/lod-terrain-vert.glsl` and `assets/vxygen/shaders/lod-terrain-frag.glsl`, as well as associated changes to the renderer in `voxygen/src/render/renderer.rs`.
The main idea behind our initial approach to LOD was to take the world data we now get from the server (altitude, color, and horizon mapping).
- Some previously computed values were turned into shader uniforms for better prediction on weak processors. (@zesterer)
- Calls to power or trig functions were removed or replaced with multiplications, where possible.
- After some deliberation
- To properly handle sprite "waving" for nearby sprites,
We explicitly designed the greedy meshing system with figures and sprites in mind.
In both cases, we want to be able to *efficiently* pack many different models into the same texture, especially in cases where we know
we will either not be removing any of the grouped-together from the models from the texture, or will remove all of them at once (so
they can be packed into some specific subtexture).
For sprites, since we know every model in advance and never intend to deallocate them, we currently pack them all as efficiently as
possible into one giant tetxure atlas. However, in the future we might opt to pack them slightly less efficiently in exchange for
shrinking the sprite vertex size.
For figures, we pack all the textures for each *model* into the same atlas.
is a global texture atlas used for every sprite, and for figures which is why we have the ability to mesh multiple
models to the same texture area (using the simple texture atlas allocator) without requiring intermediate vector allocations.
This is accomplished by delaying the time when we actually write the color and light data to the texture until *after* all the
model vertices have been meshed; then, we can just allocate the whole color/light array at once, making the atlas we use an
exact fit. In computer science-y terms, we accomplish this delay by, after we perform the initial greedy meshing (without
texture information), not continuing to create the texture data, but instead constructing a *continuation*--that is, a function
that, when called, will execute the rest of the computation. We push this continuation (which in Rust terms is a `FnOnce` closure
that takes the `ColLightsInfo` that it is supposed to write to as context) onto a
onto a vector
resizing. To allow for suspended writes to texture data, Rust pointed out to me that the continuation that would eventually write the color and light data to the texture atlas (the one that is shared by all models sharing the same greedy mesher) would have to *own* whatever data it mshed. Because we often generate the model data to mesh as a temporary in `voxygen/src/load.rs`, the
- Matrix multiplications in the shader were reduced for figure data (@zesterer).
- Vertex "waves" for fluid data were removed.
- Terrain "bending" near edges was removed.
- Scaling was fixed to make sure empty space was not introduced in a space previously occupied by a block. It was also changed to take ownership of its voxel data,
rather than sharing it, to let it be used with meshing.
- Rust's nightly version was bumped in order to use the `array_map` function, which lets us reuse more code between the simple map and `FigureModelCache`.
- PositionedGlyph::standalone.
---
I tried to cite sources in many cases[^realtime],[^lloyd],[^lispsm],[^pbrt],[^greedy],[^tjunctions]
where I needed features from elsewhere but I am particularly grateful for the following resources,
esepcially where they have accompanying source code. I linked all of them that are accessible to the public (those that are not were
obtained through legal means).
[^realtime]: Eisemann, Elmar, Michael Schwarz, Ulf Assarsson, Michael Wimmer. Real-Time Shadows. A K Peters/CRC Press (T&F), 20160419.
[^lloyd]: Lloyd,B. 2007. [Logarithmic perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). PhD thesis, University of North Carolina.
[^lispsm]: Wimmer, M., Scherzer, D., and Purgathofer, W. 2004. [Light space perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). In Proceedings of Eurographics Symposium on Rendering 2004, pp. 143– 152.
[^pbrt]: Pharr, Matt, et al. [http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf](Physically Based Rendering: From Theory to Implementation). Third edition, Morgan Kaufmann Publishers/Elsevier, 2017.
[^greedy]: mikolalysenko. “Meshing in a Minecraft Game.” 0 FPS, 30 June 2012, <https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/>.
[^tjunctions]: blackflux. “Meshing in Voxel Engines – Part 1.” Blackflux.Com, 23 Feb. 2014, <https://blackflux.wordpress.com/2014/02/23/meshing-in-voxel-engines-part-1/>.
I am also especially grateful to Khronos, Wikiepdia, and stackoverflow for answering many of my specific questions while writing the MR.
---
Squashed commit of the following:
commit 300505e7305a2fdac722a808ee8538323f215f39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 18:46:25 2020 +0200
Fixing cargo doc and typo in CHANGELOG.
commit ec0aeb18e8499d7d84ef818331b4b65c3d76cea6
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 15:38:50 2020 +0200
Hopefully final commit for the LOD branch.
commit 5e8ea0b1eaac02903a02feb2eb038d195de4872f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 10:14:26 2020 +0200
Falling back to power as stopgap.
commit e44a1cbf46504ee9931a01bdc9033e145500d557
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 09:25:41 2020 +0200
Address imbris feedback.
Temporarily disables shiny water, lowers max VD.
These restrictions will be lifted soon after merging.
commit 561e25778a108ac3712f5ec2ce3a51234c4430d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 08:31:13 2020 +0200
Tweaking shaders a bit.
commit 7d19259078ce0dd7b3742ad7d0cb3fab3ece3fdc
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:59:43 2020 +0200
Fix view example as well.
commit 051cd4934e0fad2c0b15db4380a4189fa318679f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:29:06 2020 +0200
Fix meshing benchmark.
commit c95e07db3b4dcca285678985e65e31b927cb1c61
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 05:46:22 2020 +0200
Address MR feedback, fix scene clouds.
commit 1bfb816cabdb3ffc1e507a009c2d98696b4b573a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:39:36 2020 +0200
Incorporating Pfau's figure color changes.
New eyes and new humanoid colors.
commit 3f9b89a3ac7b3356b1dba0d1a8f6541357f81469
Merge: e2f5162e4 62c53963a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:29:41 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit e2f5162e4f96f4124aa43488f7245d341b3dcfd4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:28:38 2020 +0200
World colors are all hotloadable.
They live in assets/world/style/colors.ron.
Only a small handful of hardcoed colors remain in World; they are either
part of the map, or difficult to disentangle from the rest of the
computation. Comments are made where appropriate.
commit 62c53963abe1975009d34a8f9515a355bef24f31
Author: Marcel Märtens <marcel.cochem@googlemail.com>
Date: Wed Aug 19 15:59:00 2020 +0200
replace pretty_env_logger with tracing
commit 5b1625f99d9586fe80e2232f583ec5af9f953099
Merge: d71003acd 4942b5b39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:15:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit d71003acdabeff970b3928e97c26af6847b5b78e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:14:34 2020 +0200
Hotloading colors, part 1: colors in common.
Currently, this just entails humanoid colors. There are only three
colors not handled; the light emitter colors in
common/src/comp/inventory/item/tool.rs. These don't seem important
enough to me to warrant making hotloadable, at least not right now, but
if it's needed later we can always add them to the file.
commit 63b5e0e553eb2ea49276f192a6fc7dd65254270d
Merge: c32b337a4 6d2c4b9c1
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 13:05:37 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c32b337a46e10d9de473d178a94a3ccd61c39bb3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:52:04 2020 +0200
Fixing LOD grid, for real.
commit a166ae0360395387e09fb35a1f84210c2ce5ec24
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:28:05 2020 +0200
Addressing imbris's initial feedback.
Fixes two minor bugs: explosion particles were no longer spawning
randomly, and LOD grids were not perfectly even.
commit 4cbad004f44060994252dd3d38647a14a589712f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:27:58 2020 +0200
Bumping nightly per request.
commit 548680276aac77c25d43d16b5622f847d474dbef
Merge: acc098604 8f8b20c91
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:26:06 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit acc0986040589a3492f88a740bc3c3fc693b26d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:28:32 2020 +0200
Lower resolution due to lying drivers.
commit d3b878de2a52c358d2944a6bbd0555dad7fbdb10
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:15:38 2020 +0200
Fix issues msh encountered with Intel 4600.
commit 10245e0c1b0cb6fae10d86409435364edc6102ef
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 21:15:02 2020 +0200
Merge more models into one mesh than we did previously.
commit 3155c31e663c52ae5c3a53d5fb5665892a1a498a
Merge: 7204cc8a7 3c199280e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:35:22 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7204cc8a7a4f74a30306bd205d9834fee4bb944f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:34:43 2020 +0200
Fix not yet done NPC animations.
This forces them all to be the idle animation if not specified.
This fixes issues where you'd have giant NPCs in water.
commit bc83360f2a08918f19d417b5f772e1ff554dba08
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 19:36:37 2020 +0200
Try to fix some bugs:
- Z fighting with LOD terrain and water.
- Audio SFX not playing.
commit 1fd104aa603bf3781b6526a5cada46aeca3049dd
Merge: 862df3c99 7c2c392a3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 12:02:31 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 862df3c9976c4da9bd7cfd784f1a85973127968a
Merge: 0a4218ed9 75c1d4401
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 05:52:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0a4218ed9d541a2b34c133351bea38a99ddf4ea7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 22:27:14 2020 +0200
Fix particle depth.
commit f51dfdeb442d0dd5243dd2f344fa4be295bd0875
Merge: c6251a956 5e6dc0471
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:19:04 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit c6251a956ad376400dca5c23420cf8d213dc8fdf
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:15:46 2020 +0200
Cache figures more intelligently.
Cache figures for longer, and don't cache character states for the
player except where they actually affect the rendered model.
commit 0ed801d5404982c6fb63b1eaa4567d908b294c9d
Merge: c11b9bdf0 eea64f78f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 16:32:24 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c11b9bdf0a53bf9884d2f5a48fec9b01d582df1a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 11:47:15 2020 +0200
Remove unneeded Clippy annotation.
commit 16aa9ef40af56d69289d00aafb3deadfb8bd4f35
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 8 00:53:02 2020 +0200
Fix hotloading and Clippy.
commit 3dc973e0be5b758da1e9805eb764ad401374cd0c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 23:50:27 2020 +0200
Major speedups with SIMD.
commit fba64a7d93d5a96077ce87287bbce6ab9b7fbcae
Merge: 76429d00e d1e10b178
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:19 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 76429d00eea00d212fbd672a84ee91e75b19b938
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:10 2020 +0200
Add clippy.toml.
commit c79f512f84dbb83cb82b7954db68ff241dfd8e41
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 11:55:20 2020 +0200
Fix all clippy issues, clean up Rust code.
commit 6f90e010b3fbefb53b0d632e819931350015b6b8
Merge: 77a8c7c26 5929cfa5c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:30 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 77a8c7c267d3f44a1a62bd6b2274359973c5e4d4
Merge: b44e44232 44febaabd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:10 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 5929cfa5c713aa392110bbb62407f76caf53c3df
Author: jshipsey <jshipsey18@gmail.com>
Date: Thu Aug 6 20:47:27 2020 -0400
fixed in-hand arrow bug
commit b44e442325d828f1cd564d66908f89d09e80474b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 6 13:40:35 2020 +0200
Miscellaneous performance improvements.
commit be37acf287c1360d8085862526ac3365ffd1d768
Merge: 125d7fc6c c11876547
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 05:49:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 125d7fc6c4dcd8c8c5f27b8268a4d64f409f3644
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 04:55:31 2020 +0200
Abstract over simd vs. repr_c vectors.
Also some minor improvements to Event size.
commit d4d4956e9252e1241ce110b2aa85076c6b1e2a23
Merge: 5f3b7294a aced5f979
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:56:54 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 5f3b7294af1f8533edc2620b58863c248e2b07af
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:43:52 2020 +0200
Fix formatting issues I missed before.
commit a428a3ebba70dcab63dd0f8cd983120c90617271
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:41:51 2020 +0200
Fix clippy warnings, part 1.
There aer still a bunch of type too complex and
function takes too many arguments warnings that I'll fix later
(or ignore, since in the one case I did fix a function takes too
many arguments warning I think it made the code *less* readable).
commit ba54307540ed8a937ac08209730284fc653af85b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 30 13:22:42 2020 +0200
Fix light animations so they are removed when the light turns off.
commit 7e0f4bcbf0f4717145d8beac40d52e3acebbe2aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 21:10:20 2020 +0200
Fix crash in edge case for pixel art.
commit 56da06f7a351e2b949e9b014a90b974d511a0924
Merge: cf74d55f2 9f53a4a19
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:56:52 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:29:52 2020 +0200
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
The first concern was addressed by fixing the dimensions of the map
images drawn from the UI (so that we always use a square source
rectangle, rather than a rectangular one according to the dimensions of
the map). We also fixed the way rotation was done in the fragment
shader for north-facing sources to make it properly handle aspect ratio
(this was already done for north-facing targets). Together, these fix
rendering issues peculiar to rectangular maps.
The second and third concerns were jointly addressed by adding an
optional border color to every 2D image drawn by the UI. This turns
out not to waste extra space even though we hold a full f32 color
(to avoid an extra dependency on gfx's PackedColor), since voxel
images already take up more space than Optiion<[f32; 4]> requires.
This is then implemented automatically using the "border color"
wrapping method in the attached sampler.
Since this is implemented in graphics hardware, it only works (at
least naively) if the actual image bounds match the texture bounds.
Therefore, we altered the way the graphics cache stores images
with a border color to guarantee that they are always in their own
texture, whose size exactly matches their extent. Since the easiest
currently exposed way to set a border color is to do so for an
immutable texture, we went a bit further and added a new "immutable"
texture storage type used for these cases; currently, it is always
and automatically used only when there is a specified border color,
but in theory there's no reason we couldn't provide immutable-only
images that use the default wrapping mdoe (though clamp to border
is admittedly not a great default).
To fix the maps case specifically, we set the border color to a
translucent version of the ocean border color. This may need
tweaking going forward, which shouldn't be hard.
As part of this process, we had to modify graphics replacement to
make sure immutable images are *removed* when invalidated, rather
than just having a validity flag unset (this is normally done by
the UI to try to reuse allocations in place if images are updated
in benign ways, since the texture atlases used for Ui do not
support deallocation; currently this is only used for item images,
so there should be no overlap with immutable image replacement,
so this was purely precautionary).
Since we were already touching the relevant code, we also updated
the image dependency to a newer version that provides more ways
to avoid allocations, and made a few other changes that should
hopefully eliminate redundant most of the intermediate buffer
allocations we were performing for what should be zero-cost
conversions. This may slightly improve performance in some
cases.
commit ad18ce939940a8c697270f6e9b94db9942fd8295
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 13:21:09 2020 +0200
Fix continent scale hack.
commit 36b1cb074f5b195aebd7dbbc3da7f0246a1a18ec
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 12:11:40 2020 +0200
Enable loading different sized maps without a recompile.
We may want to tweak the effects of the continent_scale_hack.
commit 13b6d4d534cc4814b7cb3294ca41bbfea0a6b186
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 10:55:48 2020 +0200
Removing WORLD_SIZE, part 1.
Erased almost every instance of WORLD_SIZE and replaced it with a local
power of two, map_size_lg (which respects certain invariants; see
common/src/terrain/map.rs for more details about MapSizeLg). This also
means we can avoid a dependency on the world crate from client, as
desired.
Now that the rest of the code is not expecting a fixed WORLD_SIZE, the
next step is to arrange for maps to store their world size, and to use
that world size as a basis prior to loading the map (as well, probably,
as prior to configuring some of the noise functions).
commit 30b1d2c6428230a9eaa0d749cdcbbd6f1cbccd78
Merge: 7d56ba31b 1377b369f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:58 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 7d56ba31b445441461b28a07fc495d7d4f047c17
Merge: 2101113b4 598f14b25
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 1377b369f6db2258e910d467a5740f31789e3ded
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sun Jul 19 23:25:38 2020 +0200
more saturated pumpkins
commit ae8d50527f93bb0616c2ad46ce4dacb63bc37c6d
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sat Jul 18 20:29:56 2020 +0200
acacia models
commit 2101113b467e691de787392d7f20f1745f5637bd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 18 18:55:25 2020 +0200
Higher detail LOD.
commit add2cfae04b4385fa5590e11e2bd5229d9dee0aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 16 01:57:39 2020 +0200
Revert some irrelevant stuff.
commit 2e2ab3dc1eaa59a4aef7f8d34a53d8aae4c8553a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 15 13:30:49 2020 +0200
Fixing various things about shadows.
* Correcting optimal LISPSM parameter.
* Figure shadows are cast when they're not visible.
* Chunk shadows stay cast until you look away.
* Seamless cubemaps for point lights.
* Etc.
commit 6c31e6b56217274285b597af297036691ea5d897
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 19:50:26 2020 +0200
Fix shadow creation.
commit 6332cbe006115ae205597529cd8bbccd146c2cca
Merge: be438657c 930e0028b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:47:00 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit be438657c33d7b5bfb0a9582c3ed3fd366637323
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:28:08 2020 +0200
Tweaks to shadows.
Added shadow map resolution configuration, added seamless cubemaps,
documented all existing rendering options, and fixed a few Clippy
errors.
commit 23b4058906013c7d2a40c286e20e32c5fbd897ed
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 10:11:19 2020 +0200
Fix moon, use nonlinear noise for terrain.
Note that the latter has a bit of performance cost.
commit 7fbe5cbfbb9dc29607957b8e62f432a4deed193d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:23:02 2020 +0200
Address lies about max texture size.
commit bcfc62b5e13a1cdd83f57535fde4694720bebfd9
Merge: 75e3626a7 18a08e8fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:22:08 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 75e3626a785919f43fdcf2127c2b10e3e4df2f9f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:21:52 2020 +0200
OpenGL 3.3 minimum.
commit 18a08e8fe2739f02af99a5d2cb4e7c38c49e858b
Author: Monty Marz <m.marzouq@gmx.de>
Date: Tue Jul 7 23:57:52 2020 +0200
settings localization
commit 90c5d1ca3620092bc3ae10b2211489eb1cf6f5e8
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 21:11:48 2020 +0200
Lower near distance.
commit 0e66f02b25aaddaa2dfddbbc89cd67de54a9a7b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 20:09:01 2020 +0200
All sprites sway in the wind now.
commit db1401a6910bf42dcf502462c90038752ff5fbdb
Merge: 69e508d8c e8b4b29d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 19:34:17 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 69e508d8c94d8973033817ca86f357e466fc7c4d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 18:41:37 2020 +0200
Make it easy to switch to SIMD for math.
commit ffe0f5928c7a7e87d00cb5426b3b1d831d7e02fd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 21:21:12 2020 +0200
Fix some issues with underwater rendering.
commit bfda6da42f38fd02c31ee92c81ab785a3e50c2a0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 19:17:59 2020 +0200
Fix some minor display issues.
commit 0ed752e087968cf901301884aaeae698e32ef8a5
Merge: ccc6a06a8 518edcb85
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:14:21 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit ccc6a06a8d4504d6b9f7af7905a414d2ee06ab76
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:04:34 2020 +0200
Some minor changes.
commit 4e020246702889269efe1a191788992164c508d6
Merge: 50a64d927 e05c9267a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 16:17:40 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 50a64d927e6c4f4b0e4688e4cbfca694bc3f922a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 13:07:03 2020 +0200
Fix far plane.
commit 7dd06da34cae8f9ea3b6c889fe965181f3fd3949
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:25:35 2020 +0200
Add shadows.glsl.
commit 618a18c998778bf871b905a74657440fcc384c80
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:10:22 2020 +0200
Adding shadows, greedy meshing, and more.
commit eaea83fe6a5cb1cb0ba8beef888183c718258496
Merge: 267018495 2f89b863e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 22:47:07 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 2670184954a13e4a9e7a4e35ba79aac0c5fac2f7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 21:20:01 2020 +0200
Make civsim and sites deterministic.
For anything in worldgen where you use a HashMap, *please* think
carefully about which hasher you are going to use! This is
especially true if (for some reason) you are depending on hashmap
iteration order remaining stable for some aspect of worldgen.
commit f8376fd5dc72b4a9c2f51a6b4570d59c8b8e9343
Merge: 654f7e049 cdee191dd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 17:53:57 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 654f7e049258d9da27c09608bbe6a46ffa8787e5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed May 20 21:22:30 2020 +0200
Correct backface culling.
commit 560501df05ca725409b0f2e4eb31bdfdc15fd0c7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue May 19 17:22:06 2020 +0200
Greedy messhing for shadows.
commit a4d87e1875ca543436e6bbbeb20348facc5a52d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun May 17 05:59:00 2020 +0200
Shadow maps work for lantern.
commit 243d0837b8a3b08172c9a3c348d964d7ddc2a0a8
Merge: 04382dc28 71dd520cd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:53:13 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 04382dc28632b6c66e8821f6870c0daaa1c1901a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:22:17 2020 +0200
WIP: better graphics config, better LOD, shadow maps.
commit 22ddbad3eb32bfa70f0932176022208fe67ded81
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 18:54:09 2020 +0200
Minor shader fixes.
commit 746a10e8d01ac235f994b0cde78fa48998602a1f
Merge: 0f4a0e763 40ab94673
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 04:02:09 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0f4a0e763db3afbdc4fb0558611f38326ca87151
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 23:03:24 2020 +0200
Switch back to pop-in terrain.
commit dd74fa7e4a53667b38811d7aec58d7f6a68889bb
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 22:58:55 2020 +0200
LOD shading closer to voxel shading.
commit ef67bd58ba0bdaf622b078892d768263b6cba268
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 28 20:49:03 2020 +0200
Experimental underwater lighting.
commit 2c5ad9d07605e80d5fd5679dd3a5d70c605b86a9
Merge: 748279835 303967a6f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 22:35:24 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7482798354eda18c8207950080fc24d443a369de
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 21:59:55 2020 +0200
Replace discard in figure-frag.
commit d83b4ae69be4912f69bf7835f509c68a1c7770a4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:45:57 2020 +0200
Fix sprite lighting, HDR from focus_pos.
commit 0594238004f116274905fa0ed7c2b6c417ed1d29
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:14:10 2020 +0200
Proper HDR from point lights.
commit 48c93d2b41ce5743103d18e76cc228f5ac766492
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 14:01:43 2020 +0200
Brighter ambiance, darker LOD shadows.
commit e0452e895ccfa8a43f368cae3b8b8aedc24dad93
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 13:13:23 2020 +0200
More proper HDR.
commit 4c6da3ed16cfeebb455e40da5f557b4af9a499d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 00:13:10 2020 +0200
Trying LOD noise.
commit 682a3d74c85df5503ffe1fc1cc891bce789df1ad
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 23:11:08 2020 +0200
Fix LOD heights in towns.
commit cc39e5734e8b18f9077bf42e66337c1319dd6b6e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 21:01:23 2020 +0200
More LOD fixes.
commit 8116b21c2e51c836e77894e309ac273caf2917b3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:54:43 2020 +0200
I like this coloring.
commit bc2560ea90b36f4b46190005344232d993043ac3
Merge: 14effdd5d e690efe71
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:48:33 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 14effdd5db8747fcf3eb34f03b46b7792e92d1c5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:24:35 2020 +0200
Re-saturate.
commit 48a643955d4435b78179acba0beb4a979905cc31
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:23:57 2020 +0200
Various fixes.
commit f7b497a0c25f4ad4682c71dd1ed6f608052feb9b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 03:22:49 2020 +0200
Render figures again.
commit 44e4aad48deba8266b9f8bdfd3db096b381f5327
Merge: e6f0a5a98 9ec319a18
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 02:01:04 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit e6f0a5a981a82533ba188fff0a54ce98577bb152
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 24 16:12:20 2020 +0200
Add atmospheric scattering.
commit f2953087f691a8edbc001cb98ebf5059fc6f8ac0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 23 00:01:20 2020 +0200
Fix shadowing for specular reflections.
commit ddd4a67a9799b8d08c7dc0c2bec90621c2bed0e3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Apr 22 22:56:12 2020 +0200
HDR fixes.
commit 1015e60deef3c447381996277df7496707a63bd0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 21 18:25:19 2020 +0200
More lighting changes.
commit 80c264abd111fb237e57843efcb5c071d4f84613
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 13 00:29:59 2020 +0200
Lighting experiments.
commit 8414987e589dd5102bad89762a3adaccc0bfe957
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 9 02:38:40 2020 +0200
WIP -- lighting changes and soft shadows.
commit 9cd2b3fb0d6b49776c6dfe463e4169637250b11a
Merge: c7ea687eb 8b149ad11
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:29 2020 +0200
Merge branch 'sharp/new-lighting' into sharp/small-fixes
commit c7ea687ebbc5aace1b455f134a5bf49ce2c7434a
Merge: 476441531 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:02 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 8b149ad11ad4bb75018fcf9519baec27d1c95951
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:32:39 2020 +0200
Trying out a new lighting model.
commit b0ac9f36f755dd06f7c17c46150568064790864f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 07:56:11 2020 +0200
Use bicubic interpolation for terrain.
commit f6fc9307a121514b614bc50ef8eb055953e7da8a
Merge: 33140a295 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 05:01:41 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 4764415312aae6e9ac2d00e86e84577cb958f1ab
Merge: ed2d0111d 13388ee6a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 04:54:48 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 13388ee6a42943f3f79a9cb488346cef18e272fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 20:30:08 2020 +0200
Various fixes (to coloring and to soft shadows).
commit fbd084a94a067082a87cd6d28b82054709bc9265
Merge: 5a089863b 4fdf6896a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 18:50:38 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/map-colors
commit ed2d0111d994262ae836d84d1fe5a45e4de72a0b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 06:49:27 2020 +0200
Combining colors and LOD.
commit 88342640c6b835114d01c797b89fdede3b0a2108
Merge: 33140a295 5a089863b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:49:20 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 33140a2951b8212725f42c758b277aaec4d888f7
Merge: 4c65a5aed f34d4b379
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:36:21 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 5a089863beb01d4794bbe3580ada47b278715ea2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 03:17:49 2020 +0200
Making maps brighter.
This is probably not the right way to do it, but oh well!
commit 32b2c99109dd486aa922886081068f9c550c83f2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 02:46:36 2020 +0200
Horizon mapping and "layered" map generation.
Horizon mapping is a method of shadow mapping specific to height maps.
It can handle any angle between 0 and 90 degrees from the ground, as
long as know the horizontal direction in advance, by remembering only a
single angle (the "horizon angle" of the shadow map). More is explained
in common/src/msg/server.rs. We also remember the approximate height of
the largest occluder, to try to be able to generate soft shadows and
create a vertical position where the shadows can't go higher.
Additionally, map generation has been reworked. Instead of computing
everything from explicit samples, we pass in sampling functions that
return exactly what the map generator needs. This allows us to cleanly
separate the way we sample things like altitudes and colors from the map
generation process. We exploit this to generate maps *partially* on the
server (with colors and rivers, but not shading). We can then send the
partially completed map to the client, which can combine it with shadow
information to generate the final map. This is useful for two reasons:
first, it makes sure the client can apply shadow information by itself,
and second, it lets us pass the unshaded map for use with level of
detail functionality.
For similar reasons, river generation is split
out into its own layer, but for now we opt to still generate rivers on
the server (since the river wire format is more complicated to compress
and may require some extra work to make sure we have enough precision to
draw rivers well enough for LoD).
Finally, the mostly ad-hoc lighting we were performing has been (mostly)
replaced with explicit Phong reflection shading (including specular
highlights). Regularizing this seems useful and helps clarify the
"meaning" of the various light intensities, and helps us keep a more
physically plausible basis. However, its interaction with soft shadows
is still imperfect, and it's not yet clear to me what we need to do to
turn this into something useful for LoD.
commit f8926a5737ddc51f3d585c651a64c43677aae0f4
Merge: a1aee931e 875ae6ced
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Mar 13 13:32:42 2020 +0100
Merge remote-tracking branch 'origin/master' into sharp/map-colors
commit 4c65a5aed353b119aea65a2aaeb94549b67beb42
Author: Treeco <5021038-Treeco@users.noreply.gitlab.com>
Date: Mon Feb 24 16:48:05 2020 +0000
Made LOD setting slider exponential
commit 2fa7b2d20d7233dc8bfd64f9f7f54617575248f1
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 17:49:53 2020 +0000
Added mist to LoD
commit aab059a450b5f635777129ff82cc15b662965c3c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 15:14:06 2020 +0000
Added LoD slider
commit 779c36b538121c5ade3633ae5cb67bb14c8c3877
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:54:55 2020 +0000
Reduced cost of vertex pushing
commit 9fea150473906b166365b738ebcea07c697daf3d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:38:53 2020 +0000
Fixed maths, improved LoD resolution
commit 5481df38fea5bf183ff376a3337179cfaa5233dc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 11:22:50 2020 +0000
Dynamically relocate LoD vertices to enhance details
commit a3e36a50ababd615da7db1b26158c7906a5def01
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 18:13:51 2020 +0000
Simpler terrain spiral rendering
commit 255f450ae9ac8763db4bede075fb409161ed57cc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:53:17 2020 +0000
Better LoD precision
commit 3d027aebe812a5b8658a4eb8123dc9f61b3776d2
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:04:03 2020 +0000
Better falloff
commit be775c9484b457b2c0b1a494aec03392d0c70e76
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 15:30:45 2020 +0000
Applied good ideas from experimental branch
commit 58587b68545a23c5c04ab4574a4b94b3bc982246
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 16:15:13 2020 +0000
Minor fixes to LoD merging
commit 7b42aebd709c14df2db766aad61d9280ad24d84d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 15:04:44 2020 +0000
Capped LoD dragging
commit 8aafc559f87124e1ea5ca6e3ddc2aa0c242d793c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:54:37 2020 +0000
Better blending between LoD and terrain border
commit edd3455d5161792d87ddc8eadc0ecbad5532b284
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:40:19 2020 +0000
Fixed LoD z depth, added sea level offset
commit b9b06744620114dd5556e73f64fa93c145503a7c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:27:43 2020 +0000
Better LoD smoothing
commit a1aee931e790431560cd2d953ad61d9497072afd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Feb 21 14:52:17 2020 +0100
Adding shadows.
commit 2400786c13dd891c131ed86d48d05df516a8a778
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 13:48:40 2020 +0000
Use world map as LoD source
commit dbf650f504a4c25fbbc2096ac3616c736bf52d23
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Jan 20 00:48:14 2020 +0000
Better clouds at distance
commit 5e6f81b86cdb9730b9b056877b19257075fd5fa8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Jan 19 23:59:02 2020 +0000
sync
commit 745e7540ddb000cc645f612767b337c2ddc3f7c0
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 12:40:48 2019 +0000
Improved cloud falloff mist, faster noise sampling
commit f6a200d0cb866196ba57697466755f9e0c7ea5d8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 10:09:00 2019 +0000
Improved long-range depth precision, removed unnecessary LoD polygons
commit 63d1b2bb2292898d59fb4f4e502201103dfeb86f
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 20:57:46 2019 +0000
Working LoD shader
commit f13d98ee3e58f881e8b978861a67663b59ed91ec
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 11:03:40 2019 +0000
LoD first attempt (stack overflow issue)
2020-08-20 18:34:59 +00:00
|
|
|
|
.map(|i| map_edge_factor(map_size_lg, i) == 0.0)
|
2020-01-11 20:38:30 +00:00
|
|
|
|
.collect::<Vec<_>>(); */
|
2020-01-22 14:31:10 +00:00
|
|
|
|
let is_ocean_fn = |posi: usize| is_ocean[posi];
|
2020-01-18 18:41:37 +00:00
|
|
|
|
|
2020-01-22 14:31:10 +00:00
|
|
|
|
let turb_wposf_div = 8.0;
|
2020-01-18 18:41:37 +00:00
|
|
|
|
let n_func = |posi| {
|
|
|
|
|
if is_ocean_fn(posi) {
|
|
|
|
|
return 1.0;
|
|
|
|
|
}
|
|
|
|
|
1.0
|
|
|
|
|
};
|
|
|
|
|
let old_height = |posi: usize| {
|
|
|
|
|
alt_old[posi].1 * CONFIG.mountain_scale * height_scale(n_func(posi)) as f32
|
|
|
|
|
};
|
2019-11-07 20:25:30 +00:00
|
|
|
|
|
2020-02-01 20:39:39 +00:00
|
|
|
|
// NOTE: Needed if you wish to use the distance to the point defining the Worley
|
|
|
|
|
// cell, not just the value within that cell.
|
2020-01-20 16:16:41 +00:00
|
|
|
|
// let uplift_nz_dist = gen_ctx.uplift_nz.clone().enable_range(true);
|
2020-01-22 14:31:10 +00:00
|
|
|
|
|
2019-11-11 17:14:58 +00:00
|
|
|
|
// Recalculate altitudes without oceans.
|
2019-12-11 09:14:50 +00:00
|
|
|
|
// NaNs in these uniform vectors wherever is_ocean_fn returns true.
|
(See sharp/lod-history) LOD, shadows, greedy meshing, new lighting, perf
---
Pretty much a Veloren fork at this point. Here's a high level overview of the changes (will be added to CHANGELOG just before merge).
At a high level this MR incorporates roughly two groups of changes.
The first group consists of new game features: more flexible map sizes, level of detail terrain, shadow maps, and a new lighting
engine. This is "feature work" that (mostly) only adds new things to Veloren, and mostly shouldn't affect old stuff.
The second big group of changes are those addressing the fallout from all the new features. These include performance fixes of
various sorts: the addition of multiple graphics options and optimization of the cheap ones to avoid work, switching all voxel
models to use some variant of greedy meshing, switching over much of our CPU-side vector math to exploit SIMD instructions
(coinciding with a fork of `vek`), and a rewrite of how the UI handles text rendering (coinciding with updates to our fork
of `conrod`). Making Veloren's hardcoded colors appear correct under the new lighting engine also required considerably
changes (TODO: Fill in this section when it's complete).
The second category of changes often heavily touches code owned by other people, including frequently modified code "owned" by a
handful of people, so I recommend that this code be reviewed particularly carefully.
---
At a high level (each will be described in more detail below):
- The world map has been refactored.
- The world size is no longer hardcoded (@zesterer).
- The map generation code was made generic to allow using it outside of the `world` crate (@zesterer).
- On world creation, we now compute *horizon maps* (@zesterer).
- The way we pass the world from the server to the client has been updated (@xMAC94x).
- Artifacts related to image rotation were fixed (@imbris).
- Multiflow rivers were enabled (@zesterer).
- In the process of making changes related to the world map, various incidental fixes and optimizations were required.
- The new *level of detail* feature was added (@zesterer wrote part of this and has checked out the rest).
- A new LOD terrain rendering step was added to the pipeline.
- The LOD terrain quality was made configurable via a graphics setting.
- Horizon maps were used to cast shadows from LOD chunks on both LOD and non-LOD terrain.
- A "voxelization" effect was incorporated into rendered LOD terrain to make it blend better into the world.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Veloren's lighting has been completely overhauled (@zesterer has already checked most of this out).
- A semi-accurate index of refraction was assigned to our materials.
- A new, more realistic, physically based approach to lighting was used using the *Ashikhmin Shirley* BRDF.
- We emulate *atmospheric scattering* using equations designed for measuring solar panel light exposure.
- We attempt to compute *realistic light attenuation* in water using its real material properties.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Point and directional lights now cast realistic shadows, using *shadow mapping.* (@imbris, @zesterer, @Treeco, @YuriMomo)
- Point light shadow maps were added to the rendering pipeline, using geometry shaders and *seamless cube maps*.
- Directional light shadows were added to the rendering pipeline, using LISPSM together with disabling *depth clamping*.
- "Shadow-only" chunks and NPCs were added to prevent shadows from models behind you from disappearing.
- In the process of making changes related to shadow maps, various incidental fixes and optimizations were required.
The addition of shadow maps, LOD terrain, and the new lighting all led to significant performance degradation, on top of other
changes happening in master. Therefore, a large number of performance improvements were also needed:
- The graphics options were made much more flexible and configurable, and shaders were optimize.
- New options were provided for how to render lights and shadows (@Pfauenauge, @zesterer).
- Graphic setting storage and configuration were overhauled to make adding new features easier (@Pfauenauge, @imbris).
- Shaders were rewritten to utilize GLSL's preprocessor to avoid overhead (@zesterer, @YuriMomo).
- In the process of making changes related to providing additional rendering options, various incidental fixes and optimizations were required.
- Voxel model creation was switched to use *greedy meshing.*
- A new voxel meshing method, greedy meshing, was added (@imbris).
- Uses of the older meshing methods were migrated to use greedy meshing (@imbris, @jshipsey, @Pfauenauge).
- New restrictions were added to terrain, figure, and sprites to future proof them for further optimizations (@jshipsey, @Pfauenauge, @zesterer).
- Most positions are now relative to either chunk or player position for better precision (@imbris, @zesterer, @scottc).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- Animation and terrain math were switched to use SIMD where possible.
- Fixes were made to vek to make its SIMD feature usable for us (@zesterer, @imbris).
- The interface and types used in bone animation were changed in various ways (@jshipsey, @Snowram, @Pfauenauge).
- Redundant code generation for body animation is now partly taken care of by a macro (@jshipsey, @Snowram, @Pfauenauge).
- Animation code was modified to to use vek's SIMD representation where possible (@jshipsey, @Snowram, @Pfauenauge).
- Terrain meshing code and shadow map math were also modified to use vek's SIMD representation (@imbris).
- SIMD instruction generation was enabled (@YuriMomo, @jshipsey, @Snowram, @imbris, @Angelonfira, @xMAC94x).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- The way we cache glyphs was completely refactored, fixed, and optimized.
- Our fork of `conrod` was optimized in various ways (@imbris).
- Our fork of `conrod` now exposes whether a widget was updated during the current frame (@imbris).
- Our use of the glyph cache was rewritten for correctness (@imbris).
- A *text cache* was introduced that lets us skip remeshing glyphs that have not changed (@imbris).
- Various changes were made to reduce pressure on the glyph cache, with more planned (@imbris, @Pfauenauge).
- In the process of making changes related to the glyph cache, various incidental fixes and optimizations were required.
- Colors were changed to keep Veloren's look consistent with master.
- Some older tree models were brought back (@Pfauenauge).
- TODO(@Sharp): All hardcoded colors were extracted and made hotloadable.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Hardcoded colors were fixed to conform to Veloren's style.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Color models were fixed to conform to Veloren's style.
A detailed description of the involved changes follows.
---
- The world size is no longer hardcoded. All functions dependent on world size now take a `WorldSizeLg`, which holds the base 2 logarithm of each actual world dimension and is guaranteed to maintain certain properties (outlined in `common/src/terrain/map.rs`). Additionally, many utility functions that utilize the world size were moved into `common` as well (mostly `common/src/terrain/mod.rs`). Finally, the world map format was updated in order to store its size explicitly, with a migration path from the old format that should work whenever the old formatted map was a square (practically always). See `world/src/sim/mod.rs` for these changes.
- The map generation code was made generic to allow using it outside of the `world` crate. The parts of the map generating code that do not need to query the world were moved over to `common/src/terrain/map.rs`, allowing them to be used from the client without creating a dependency on `world`. The rest of it was turned into helper functions in `world/src/sim/map.rs`, which can be passed as closures to the generic map generation code to complete its construction. This also means that colors are now passed in separately to the map generation function. See <https://veloren.net/devblog-78/> for more details.
- On world creation, we now compute *horizon maps*. See the function in `world/src/sim/util.rs`.
Given a height map and a plane intersecting that height map, our horizon maps allow us to encode enough information to reconstruct shadows for each point on the height map using only the *horizon angle* (the angle at which the sun starts to become visible). As Veloren's sun only covers one plane, this is sufficient for encoding sun shadows for LOD terrain, by encoding two angles per chunk (one for each 90 degrees the sun covers). We can also use this for the moon, if we want, since the moon follows the same path. Additionally, we store the *height* of the furthest occluder, to try to make the shadows volumetric; so this means 4 bytes in total for each chunk.
Support for horizon maps has been merged into the map functionality in common as well.
- The way we pass the world from the server to the client has been updated. Rather than passing the prerendered map, we instead pass three maps with values for each chunk; one with the color information, a second with altitude information, and a third with horizon map information. We then reconstruct the map on the client, together with some additional information we send from the server (like the sea level and maximum height). See `common/src/msg/server.rs` for a detailed description of the format of `WorldMapMsg`, and `server/src/libr.rs` and `client/src/lib.rs` for details of the map construction and parsing.
- Artifacts related to image rotation were fixed. See the commit message for commit SHA `cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e` for a detailed explanation. This involved changes to shaders, the addition of a new type of graphic (also reflected in the graphic cache) that allows specifying a border color (which automatically makes the associated texture immutable), and some related fixes. I reproduce the first two paragraphs of the MR description as well:
```
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
```
- Multiflow rivers were enabled.
This does not really need to be part of this MR, and would be easy to revert, but since it seemed to provide a nice improvement it's currently packaged with it.
We already computed multiple outflows from each chunk for erosion purposes long before this MR.
However, we never modified river rendering to be able to handle this case (just a single downhill river flow is complex enough!) so this was not exposed when deciding which chunks were rivers.
Now that
- In the process of making changes related to the world map, various incidental fixes and optimizations were required. Some examples of fixes include making sure terrain is never lowered to below sea level (to make the shadow maps report correct values), fixing map altitudes and colors to understand things like cliffs and "block level" coloring (that doesn'te xist on the column level), and fixing a crashbug when rendering images for the UI where source pixels are strongly rectangular. Some examples of related performance fixes include avoiding allocating a fresh vector for all the maps (i.e. copying it over to change the format from `[u32; n]` to `DynamicImage` and then copying again to convert to `RgbaImage`), and instead using the `gfx::memory::slice` function to accomplish the same thing. These sorts of changes are spread all arond the code.
This includes the additon of a new scene, `voxygen/src/scene/lod.rs`, a new pipeline `voxygen/src/render/pipeline/lod_terrain.rs`, and new shaders `assets/vxygen/shaders/lod-terrain-vert.glsl` and `assets/vxygen/shaders/lod-terrain-frag.glsl`, as well as associated changes to the renderer in `voxygen/src/render/renderer.rs`.
The main idea behind our initial approach to LOD was to take the world data we now get from the server (altitude, color, and horizon mapping).
- Some previously computed values were turned into shader uniforms for better prediction on weak processors. (@zesterer)
- Calls to power or trig functions were removed or replaced with multiplications, where possible.
- After some deliberation
- To properly handle sprite "waving" for nearby sprites,
We explicitly designed the greedy meshing system with figures and sprites in mind.
In both cases, we want to be able to *efficiently* pack many different models into the same texture, especially in cases where we know
we will either not be removing any of the grouped-together from the models from the texture, or will remove all of them at once (so
they can be packed into some specific subtexture).
For sprites, since we know every model in advance and never intend to deallocate them, we currently pack them all as efficiently as
possible into one giant tetxure atlas. However, in the future we might opt to pack them slightly less efficiently in exchange for
shrinking the sprite vertex size.
For figures, we pack all the textures for each *model* into the same atlas.
is a global texture atlas used for every sprite, and for figures which is why we have the ability to mesh multiple
models to the same texture area (using the simple texture atlas allocator) without requiring intermediate vector allocations.
This is accomplished by delaying the time when we actually write the color and light data to the texture until *after* all the
model vertices have been meshed; then, we can just allocate the whole color/light array at once, making the atlas we use an
exact fit. In computer science-y terms, we accomplish this delay by, after we perform the initial greedy meshing (without
texture information), not continuing to create the texture data, but instead constructing a *continuation*--that is, a function
that, when called, will execute the rest of the computation. We push this continuation (which in Rust terms is a `FnOnce` closure
that takes the `ColLightsInfo` that it is supposed to write to as context) onto a
onto a vector
resizing. To allow for suspended writes to texture data, Rust pointed out to me that the continuation that would eventually write the color and light data to the texture atlas (the one that is shared by all models sharing the same greedy mesher) would have to *own* whatever data it mshed. Because we often generate the model data to mesh as a temporary in `voxygen/src/load.rs`, the
- Matrix multiplications in the shader were reduced for figure data (@zesterer).
- Vertex "waves" for fluid data were removed.
- Terrain "bending" near edges was removed.
- Scaling was fixed to make sure empty space was not introduced in a space previously occupied by a block. It was also changed to take ownership of its voxel data,
rather than sharing it, to let it be used with meshing.
- Rust's nightly version was bumped in order to use the `array_map` function, which lets us reuse more code between the simple map and `FigureModelCache`.
- PositionedGlyph::standalone.
---
I tried to cite sources in many cases[^realtime],[^lloyd],[^lispsm],[^pbrt],[^greedy],[^tjunctions]
where I needed features from elsewhere but I am particularly grateful for the following resources,
esepcially where they have accompanying source code. I linked all of them that are accessible to the public (those that are not were
obtained through legal means).
[^realtime]: Eisemann, Elmar, Michael Schwarz, Ulf Assarsson, Michael Wimmer. Real-Time Shadows. A K Peters/CRC Press (T&F), 20160419.
[^lloyd]: Lloyd,B. 2007. [Logarithmic perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). PhD thesis, University of North Carolina.
[^lispsm]: Wimmer, M., Scherzer, D., and Purgathofer, W. 2004. [Light space perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). In Proceedings of Eurographics Symposium on Rendering 2004, pp. 143– 152.
[^pbrt]: Pharr, Matt, et al. [http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf](Physically Based Rendering: From Theory to Implementation). Third edition, Morgan Kaufmann Publishers/Elsevier, 2017.
[^greedy]: mikolalysenko. “Meshing in a Minecraft Game.” 0 FPS, 30 June 2012, <https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/>.
[^tjunctions]: blackflux. “Meshing in Voxel Engines – Part 1.” Blackflux.Com, 23 Feb. 2014, <https://blackflux.wordpress.com/2014/02/23/meshing-in-voxel-engines-part-1/>.
I am also especially grateful to Khronos, Wikiepdia, and stackoverflow for answering many of my specific questions while writing the MR.
---
Squashed commit of the following:
commit 300505e7305a2fdac722a808ee8538323f215f39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 18:46:25 2020 +0200
Fixing cargo doc and typo in CHANGELOG.
commit ec0aeb18e8499d7d84ef818331b4b65c3d76cea6
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 15:38:50 2020 +0200
Hopefully final commit for the LOD branch.
commit 5e8ea0b1eaac02903a02feb2eb038d195de4872f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 10:14:26 2020 +0200
Falling back to power as stopgap.
commit e44a1cbf46504ee9931a01bdc9033e145500d557
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 09:25:41 2020 +0200
Address imbris feedback.
Temporarily disables shiny water, lowers max VD.
These restrictions will be lifted soon after merging.
commit 561e25778a108ac3712f5ec2ce3a51234c4430d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 08:31:13 2020 +0200
Tweaking shaders a bit.
commit 7d19259078ce0dd7b3742ad7d0cb3fab3ece3fdc
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:59:43 2020 +0200
Fix view example as well.
commit 051cd4934e0fad2c0b15db4380a4189fa318679f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:29:06 2020 +0200
Fix meshing benchmark.
commit c95e07db3b4dcca285678985e65e31b927cb1c61
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 05:46:22 2020 +0200
Address MR feedback, fix scene clouds.
commit 1bfb816cabdb3ffc1e507a009c2d98696b4b573a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:39:36 2020 +0200
Incorporating Pfau's figure color changes.
New eyes and new humanoid colors.
commit 3f9b89a3ac7b3356b1dba0d1a8f6541357f81469
Merge: e2f5162e4 62c53963a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:29:41 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit e2f5162e4f96f4124aa43488f7245d341b3dcfd4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:28:38 2020 +0200
World colors are all hotloadable.
They live in assets/world/style/colors.ron.
Only a small handful of hardcoed colors remain in World; they are either
part of the map, or difficult to disentangle from the rest of the
computation. Comments are made where appropriate.
commit 62c53963abe1975009d34a8f9515a355bef24f31
Author: Marcel Märtens <marcel.cochem@googlemail.com>
Date: Wed Aug 19 15:59:00 2020 +0200
replace pretty_env_logger with tracing
commit 5b1625f99d9586fe80e2232f583ec5af9f953099
Merge: d71003acd 4942b5b39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:15:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit d71003acdabeff970b3928e97c26af6847b5b78e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:14:34 2020 +0200
Hotloading colors, part 1: colors in common.
Currently, this just entails humanoid colors. There are only three
colors not handled; the light emitter colors in
common/src/comp/inventory/item/tool.rs. These don't seem important
enough to me to warrant making hotloadable, at least not right now, but
if it's needed later we can always add them to the file.
commit 63b5e0e553eb2ea49276f192a6fc7dd65254270d
Merge: c32b337a4 6d2c4b9c1
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 13:05:37 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c32b337a46e10d9de473d178a94a3ccd61c39bb3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:52:04 2020 +0200
Fixing LOD grid, for real.
commit a166ae0360395387e09fb35a1f84210c2ce5ec24
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:28:05 2020 +0200
Addressing imbris's initial feedback.
Fixes two minor bugs: explosion particles were no longer spawning
randomly, and LOD grids were not perfectly even.
commit 4cbad004f44060994252dd3d38647a14a589712f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:27:58 2020 +0200
Bumping nightly per request.
commit 548680276aac77c25d43d16b5622f847d474dbef
Merge: acc098604 8f8b20c91
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:26:06 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit acc0986040589a3492f88a740bc3c3fc693b26d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:28:32 2020 +0200
Lower resolution due to lying drivers.
commit d3b878de2a52c358d2944a6bbd0555dad7fbdb10
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:15:38 2020 +0200
Fix issues msh encountered with Intel 4600.
commit 10245e0c1b0cb6fae10d86409435364edc6102ef
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 21:15:02 2020 +0200
Merge more models into one mesh than we did previously.
commit 3155c31e663c52ae5c3a53d5fb5665892a1a498a
Merge: 7204cc8a7 3c199280e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:35:22 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7204cc8a7a4f74a30306bd205d9834fee4bb944f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:34:43 2020 +0200
Fix not yet done NPC animations.
This forces them all to be the idle animation if not specified.
This fixes issues where you'd have giant NPCs in water.
commit bc83360f2a08918f19d417b5f772e1ff554dba08
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 19:36:37 2020 +0200
Try to fix some bugs:
- Z fighting with LOD terrain and water.
- Audio SFX not playing.
commit 1fd104aa603bf3781b6526a5cada46aeca3049dd
Merge: 862df3c99 7c2c392a3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 12:02:31 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 862df3c9976c4da9bd7cfd784f1a85973127968a
Merge: 0a4218ed9 75c1d4401
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 05:52:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0a4218ed9d541a2b34c133351bea38a99ddf4ea7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 22:27:14 2020 +0200
Fix particle depth.
commit f51dfdeb442d0dd5243dd2f344fa4be295bd0875
Merge: c6251a956 5e6dc0471
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:19:04 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit c6251a956ad376400dca5c23420cf8d213dc8fdf
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:15:46 2020 +0200
Cache figures more intelligently.
Cache figures for longer, and don't cache character states for the
player except where they actually affect the rendered model.
commit 0ed801d5404982c6fb63b1eaa4567d908b294c9d
Merge: c11b9bdf0 eea64f78f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 16:32:24 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c11b9bdf0a53bf9884d2f5a48fec9b01d582df1a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 11:47:15 2020 +0200
Remove unneeded Clippy annotation.
commit 16aa9ef40af56d69289d00aafb3deadfb8bd4f35
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 8 00:53:02 2020 +0200
Fix hotloading and Clippy.
commit 3dc973e0be5b758da1e9805eb764ad401374cd0c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 23:50:27 2020 +0200
Major speedups with SIMD.
commit fba64a7d93d5a96077ce87287bbce6ab9b7fbcae
Merge: 76429d00e d1e10b178
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:19 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 76429d00eea00d212fbd672a84ee91e75b19b938
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:10 2020 +0200
Add clippy.toml.
commit c79f512f84dbb83cb82b7954db68ff241dfd8e41
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 11:55:20 2020 +0200
Fix all clippy issues, clean up Rust code.
commit 6f90e010b3fbefb53b0d632e819931350015b6b8
Merge: 77a8c7c26 5929cfa5c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:30 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 77a8c7c267d3f44a1a62bd6b2274359973c5e4d4
Merge: b44e44232 44febaabd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:10 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 5929cfa5c713aa392110bbb62407f76caf53c3df
Author: jshipsey <jshipsey18@gmail.com>
Date: Thu Aug 6 20:47:27 2020 -0400
fixed in-hand arrow bug
commit b44e442325d828f1cd564d66908f89d09e80474b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 6 13:40:35 2020 +0200
Miscellaneous performance improvements.
commit be37acf287c1360d8085862526ac3365ffd1d768
Merge: 125d7fc6c c11876547
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 05:49:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 125d7fc6c4dcd8c8c5f27b8268a4d64f409f3644
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 04:55:31 2020 +0200
Abstract over simd vs. repr_c vectors.
Also some minor improvements to Event size.
commit d4d4956e9252e1241ce110b2aa85076c6b1e2a23
Merge: 5f3b7294a aced5f979
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:56:54 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 5f3b7294af1f8533edc2620b58863c248e2b07af
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:43:52 2020 +0200
Fix formatting issues I missed before.
commit a428a3ebba70dcab63dd0f8cd983120c90617271
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:41:51 2020 +0200
Fix clippy warnings, part 1.
There aer still a bunch of type too complex and
function takes too many arguments warnings that I'll fix later
(or ignore, since in the one case I did fix a function takes too
many arguments warning I think it made the code *less* readable).
commit ba54307540ed8a937ac08209730284fc653af85b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 30 13:22:42 2020 +0200
Fix light animations so they are removed when the light turns off.
commit 7e0f4bcbf0f4717145d8beac40d52e3acebbe2aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 21:10:20 2020 +0200
Fix crash in edge case for pixel art.
commit 56da06f7a351e2b949e9b014a90b974d511a0924
Merge: cf74d55f2 9f53a4a19
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:56:52 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:29:52 2020 +0200
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
The first concern was addressed by fixing the dimensions of the map
images drawn from the UI (so that we always use a square source
rectangle, rather than a rectangular one according to the dimensions of
the map). We also fixed the way rotation was done in the fragment
shader for north-facing sources to make it properly handle aspect ratio
(this was already done for north-facing targets). Together, these fix
rendering issues peculiar to rectangular maps.
The second and third concerns were jointly addressed by adding an
optional border color to every 2D image drawn by the UI. This turns
out not to waste extra space even though we hold a full f32 color
(to avoid an extra dependency on gfx's PackedColor), since voxel
images already take up more space than Optiion<[f32; 4]> requires.
This is then implemented automatically using the "border color"
wrapping method in the attached sampler.
Since this is implemented in graphics hardware, it only works (at
least naively) if the actual image bounds match the texture bounds.
Therefore, we altered the way the graphics cache stores images
with a border color to guarantee that they are always in their own
texture, whose size exactly matches their extent. Since the easiest
currently exposed way to set a border color is to do so for an
immutable texture, we went a bit further and added a new "immutable"
texture storage type used for these cases; currently, it is always
and automatically used only when there is a specified border color,
but in theory there's no reason we couldn't provide immutable-only
images that use the default wrapping mdoe (though clamp to border
is admittedly not a great default).
To fix the maps case specifically, we set the border color to a
translucent version of the ocean border color. This may need
tweaking going forward, which shouldn't be hard.
As part of this process, we had to modify graphics replacement to
make sure immutable images are *removed* when invalidated, rather
than just having a validity flag unset (this is normally done by
the UI to try to reuse allocations in place if images are updated
in benign ways, since the texture atlases used for Ui do not
support deallocation; currently this is only used for item images,
so there should be no overlap with immutable image replacement,
so this was purely precautionary).
Since we were already touching the relevant code, we also updated
the image dependency to a newer version that provides more ways
to avoid allocations, and made a few other changes that should
hopefully eliminate redundant most of the intermediate buffer
allocations we were performing for what should be zero-cost
conversions. This may slightly improve performance in some
cases.
commit ad18ce939940a8c697270f6e9b94db9942fd8295
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 13:21:09 2020 +0200
Fix continent scale hack.
commit 36b1cb074f5b195aebd7dbbc3da7f0246a1a18ec
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 12:11:40 2020 +0200
Enable loading different sized maps without a recompile.
We may want to tweak the effects of the continent_scale_hack.
commit 13b6d4d534cc4814b7cb3294ca41bbfea0a6b186
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 10:55:48 2020 +0200
Removing WORLD_SIZE, part 1.
Erased almost every instance of WORLD_SIZE and replaced it with a local
power of two, map_size_lg (which respects certain invariants; see
common/src/terrain/map.rs for more details about MapSizeLg). This also
means we can avoid a dependency on the world crate from client, as
desired.
Now that the rest of the code is not expecting a fixed WORLD_SIZE, the
next step is to arrange for maps to store their world size, and to use
that world size as a basis prior to loading the map (as well, probably,
as prior to configuring some of the noise functions).
commit 30b1d2c6428230a9eaa0d749cdcbbd6f1cbccd78
Merge: 7d56ba31b 1377b369f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:58 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 7d56ba31b445441461b28a07fc495d7d4f047c17
Merge: 2101113b4 598f14b25
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 1377b369f6db2258e910d467a5740f31789e3ded
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sun Jul 19 23:25:38 2020 +0200
more saturated pumpkins
commit ae8d50527f93bb0616c2ad46ce4dacb63bc37c6d
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sat Jul 18 20:29:56 2020 +0200
acacia models
commit 2101113b467e691de787392d7f20f1745f5637bd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 18 18:55:25 2020 +0200
Higher detail LOD.
commit add2cfae04b4385fa5590e11e2bd5229d9dee0aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 16 01:57:39 2020 +0200
Revert some irrelevant stuff.
commit 2e2ab3dc1eaa59a4aef7f8d34a53d8aae4c8553a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 15 13:30:49 2020 +0200
Fixing various things about shadows.
* Correcting optimal LISPSM parameter.
* Figure shadows are cast when they're not visible.
* Chunk shadows stay cast until you look away.
* Seamless cubemaps for point lights.
* Etc.
commit 6c31e6b56217274285b597af297036691ea5d897
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 19:50:26 2020 +0200
Fix shadow creation.
commit 6332cbe006115ae205597529cd8bbccd146c2cca
Merge: be438657c 930e0028b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:47:00 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit be438657c33d7b5bfb0a9582c3ed3fd366637323
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:28:08 2020 +0200
Tweaks to shadows.
Added shadow map resolution configuration, added seamless cubemaps,
documented all existing rendering options, and fixed a few Clippy
errors.
commit 23b4058906013c7d2a40c286e20e32c5fbd897ed
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 10:11:19 2020 +0200
Fix moon, use nonlinear noise for terrain.
Note that the latter has a bit of performance cost.
commit 7fbe5cbfbb9dc29607957b8e62f432a4deed193d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:23:02 2020 +0200
Address lies about max texture size.
commit bcfc62b5e13a1cdd83f57535fde4694720bebfd9
Merge: 75e3626a7 18a08e8fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:22:08 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 75e3626a785919f43fdcf2127c2b10e3e4df2f9f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:21:52 2020 +0200
OpenGL 3.3 minimum.
commit 18a08e8fe2739f02af99a5d2cb4e7c38c49e858b
Author: Monty Marz <m.marzouq@gmx.de>
Date: Tue Jul 7 23:57:52 2020 +0200
settings localization
commit 90c5d1ca3620092bc3ae10b2211489eb1cf6f5e8
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 21:11:48 2020 +0200
Lower near distance.
commit 0e66f02b25aaddaa2dfddbbc89cd67de54a9a7b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 20:09:01 2020 +0200
All sprites sway in the wind now.
commit db1401a6910bf42dcf502462c90038752ff5fbdb
Merge: 69e508d8c e8b4b29d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 19:34:17 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 69e508d8c94d8973033817ca86f357e466fc7c4d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 18:41:37 2020 +0200
Make it easy to switch to SIMD for math.
commit ffe0f5928c7a7e87d00cb5426b3b1d831d7e02fd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 21:21:12 2020 +0200
Fix some issues with underwater rendering.
commit bfda6da42f38fd02c31ee92c81ab785a3e50c2a0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 19:17:59 2020 +0200
Fix some minor display issues.
commit 0ed752e087968cf901301884aaeae698e32ef8a5
Merge: ccc6a06a8 518edcb85
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:14:21 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit ccc6a06a8d4504d6b9f7af7905a414d2ee06ab76
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:04:34 2020 +0200
Some minor changes.
commit 4e020246702889269efe1a191788992164c508d6
Merge: 50a64d927 e05c9267a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 16:17:40 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 50a64d927e6c4f4b0e4688e4cbfca694bc3f922a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 13:07:03 2020 +0200
Fix far plane.
commit 7dd06da34cae8f9ea3b6c889fe965181f3fd3949
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:25:35 2020 +0200
Add shadows.glsl.
commit 618a18c998778bf871b905a74657440fcc384c80
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:10:22 2020 +0200
Adding shadows, greedy meshing, and more.
commit eaea83fe6a5cb1cb0ba8beef888183c718258496
Merge: 267018495 2f89b863e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 22:47:07 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 2670184954a13e4a9e7a4e35ba79aac0c5fac2f7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 21:20:01 2020 +0200
Make civsim and sites deterministic.
For anything in worldgen where you use a HashMap, *please* think
carefully about which hasher you are going to use! This is
especially true if (for some reason) you are depending on hashmap
iteration order remaining stable for some aspect of worldgen.
commit f8376fd5dc72b4a9c2f51a6b4570d59c8b8e9343
Merge: 654f7e049 cdee191dd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 17:53:57 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 654f7e049258d9da27c09608bbe6a46ffa8787e5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed May 20 21:22:30 2020 +0200
Correct backface culling.
commit 560501df05ca725409b0f2e4eb31bdfdc15fd0c7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue May 19 17:22:06 2020 +0200
Greedy messhing for shadows.
commit a4d87e1875ca543436e6bbbeb20348facc5a52d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun May 17 05:59:00 2020 +0200
Shadow maps work for lantern.
commit 243d0837b8a3b08172c9a3c348d964d7ddc2a0a8
Merge: 04382dc28 71dd520cd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:53:13 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 04382dc28632b6c66e8821f6870c0daaa1c1901a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:22:17 2020 +0200
WIP: better graphics config, better LOD, shadow maps.
commit 22ddbad3eb32bfa70f0932176022208fe67ded81
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 18:54:09 2020 +0200
Minor shader fixes.
commit 746a10e8d01ac235f994b0cde78fa48998602a1f
Merge: 0f4a0e763 40ab94673
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 04:02:09 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0f4a0e763db3afbdc4fb0558611f38326ca87151
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 23:03:24 2020 +0200
Switch back to pop-in terrain.
commit dd74fa7e4a53667b38811d7aec58d7f6a68889bb
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 22:58:55 2020 +0200
LOD shading closer to voxel shading.
commit ef67bd58ba0bdaf622b078892d768263b6cba268
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 28 20:49:03 2020 +0200
Experimental underwater lighting.
commit 2c5ad9d07605e80d5fd5679dd3a5d70c605b86a9
Merge: 748279835 303967a6f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 22:35:24 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7482798354eda18c8207950080fc24d443a369de
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 21:59:55 2020 +0200
Replace discard in figure-frag.
commit d83b4ae69be4912f69bf7835f509c68a1c7770a4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:45:57 2020 +0200
Fix sprite lighting, HDR from focus_pos.
commit 0594238004f116274905fa0ed7c2b6c417ed1d29
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:14:10 2020 +0200
Proper HDR from point lights.
commit 48c93d2b41ce5743103d18e76cc228f5ac766492
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 14:01:43 2020 +0200
Brighter ambiance, darker LOD shadows.
commit e0452e895ccfa8a43f368cae3b8b8aedc24dad93
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 13:13:23 2020 +0200
More proper HDR.
commit 4c6da3ed16cfeebb455e40da5f557b4af9a499d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 00:13:10 2020 +0200
Trying LOD noise.
commit 682a3d74c85df5503ffe1fc1cc891bce789df1ad
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 23:11:08 2020 +0200
Fix LOD heights in towns.
commit cc39e5734e8b18f9077bf42e66337c1319dd6b6e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 21:01:23 2020 +0200
More LOD fixes.
commit 8116b21c2e51c836e77894e309ac273caf2917b3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:54:43 2020 +0200
I like this coloring.
commit bc2560ea90b36f4b46190005344232d993043ac3
Merge: 14effdd5d e690efe71
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:48:33 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 14effdd5db8747fcf3eb34f03b46b7792e92d1c5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:24:35 2020 +0200
Re-saturate.
commit 48a643955d4435b78179acba0beb4a979905cc31
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:23:57 2020 +0200
Various fixes.
commit f7b497a0c25f4ad4682c71dd1ed6f608052feb9b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 03:22:49 2020 +0200
Render figures again.
commit 44e4aad48deba8266b9f8bdfd3db096b381f5327
Merge: e6f0a5a98 9ec319a18
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 02:01:04 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit e6f0a5a981a82533ba188fff0a54ce98577bb152
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 24 16:12:20 2020 +0200
Add atmospheric scattering.
commit f2953087f691a8edbc001cb98ebf5059fc6f8ac0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 23 00:01:20 2020 +0200
Fix shadowing for specular reflections.
commit ddd4a67a9799b8d08c7dc0c2bec90621c2bed0e3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Apr 22 22:56:12 2020 +0200
HDR fixes.
commit 1015e60deef3c447381996277df7496707a63bd0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 21 18:25:19 2020 +0200
More lighting changes.
commit 80c264abd111fb237e57843efcb5c071d4f84613
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 13 00:29:59 2020 +0200
Lighting experiments.
commit 8414987e589dd5102bad89762a3adaccc0bfe957
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 9 02:38:40 2020 +0200
WIP -- lighting changes and soft shadows.
commit 9cd2b3fb0d6b49776c6dfe463e4169637250b11a
Merge: c7ea687eb 8b149ad11
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:29 2020 +0200
Merge branch 'sharp/new-lighting' into sharp/small-fixes
commit c7ea687ebbc5aace1b455f134a5bf49ce2c7434a
Merge: 476441531 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:02 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 8b149ad11ad4bb75018fcf9519baec27d1c95951
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:32:39 2020 +0200
Trying out a new lighting model.
commit b0ac9f36f755dd06f7c17c46150568064790864f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 07:56:11 2020 +0200
Use bicubic interpolation for terrain.
commit f6fc9307a121514b614bc50ef8eb055953e7da8a
Merge: 33140a295 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 05:01:41 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 4764415312aae6e9ac2d00e86e84577cb958f1ab
Merge: ed2d0111d 13388ee6a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 04:54:48 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 13388ee6a42943f3f79a9cb488346cef18e272fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 20:30:08 2020 +0200
Various fixes (to coloring and to soft shadows).
commit fbd084a94a067082a87cd6d28b82054709bc9265
Merge: 5a089863b 4fdf6896a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 18:50:38 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/map-colors
commit ed2d0111d994262ae836d84d1fe5a45e4de72a0b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 06:49:27 2020 +0200
Combining colors and LOD.
commit 88342640c6b835114d01c797b89fdede3b0a2108
Merge: 33140a295 5a089863b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:49:20 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 33140a2951b8212725f42c758b277aaec4d888f7
Merge: 4c65a5aed f34d4b379
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:36:21 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 5a089863beb01d4794bbe3580ada47b278715ea2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 03:17:49 2020 +0200
Making maps brighter.
This is probably not the right way to do it, but oh well!
commit 32b2c99109dd486aa922886081068f9c550c83f2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 02:46:36 2020 +0200
Horizon mapping and "layered" map generation.
Horizon mapping is a method of shadow mapping specific to height maps.
It can handle any angle between 0 and 90 degrees from the ground, as
long as know the horizontal direction in advance, by remembering only a
single angle (the "horizon angle" of the shadow map). More is explained
in common/src/msg/server.rs. We also remember the approximate height of
the largest occluder, to try to be able to generate soft shadows and
create a vertical position where the shadows can't go higher.
Additionally, map generation has been reworked. Instead of computing
everything from explicit samples, we pass in sampling functions that
return exactly what the map generator needs. This allows us to cleanly
separate the way we sample things like altitudes and colors from the map
generation process. We exploit this to generate maps *partially* on the
server (with colors and rivers, but not shading). We can then send the
partially completed map to the client, which can combine it with shadow
information to generate the final map. This is useful for two reasons:
first, it makes sure the client can apply shadow information by itself,
and second, it lets us pass the unshaded map for use with level of
detail functionality.
For similar reasons, river generation is split
out into its own layer, but for now we opt to still generate rivers on
the server (since the river wire format is more complicated to compress
and may require some extra work to make sure we have enough precision to
draw rivers well enough for LoD).
Finally, the mostly ad-hoc lighting we were performing has been (mostly)
replaced with explicit Phong reflection shading (including specular
highlights). Regularizing this seems useful and helps clarify the
"meaning" of the various light intensities, and helps us keep a more
physically plausible basis. However, its interaction with soft shadows
is still imperfect, and it's not yet clear to me what we need to do to
turn this into something useful for LoD.
commit f8926a5737ddc51f3d585c651a64c43677aae0f4
Merge: a1aee931e 875ae6ced
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Mar 13 13:32:42 2020 +0100
Merge remote-tracking branch 'origin/master' into sharp/map-colors
commit 4c65a5aed353b119aea65a2aaeb94549b67beb42
Author: Treeco <5021038-Treeco@users.noreply.gitlab.com>
Date: Mon Feb 24 16:48:05 2020 +0000
Made LOD setting slider exponential
commit 2fa7b2d20d7233dc8bfd64f9f7f54617575248f1
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 17:49:53 2020 +0000
Added mist to LoD
commit aab059a450b5f635777129ff82cc15b662965c3c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 15:14:06 2020 +0000
Added LoD slider
commit 779c36b538121c5ade3633ae5cb67bb14c8c3877
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:54:55 2020 +0000
Reduced cost of vertex pushing
commit 9fea150473906b166365b738ebcea07c697daf3d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:38:53 2020 +0000
Fixed maths, improved LoD resolution
commit 5481df38fea5bf183ff376a3337179cfaa5233dc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 11:22:50 2020 +0000
Dynamically relocate LoD vertices to enhance details
commit a3e36a50ababd615da7db1b26158c7906a5def01
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 18:13:51 2020 +0000
Simpler terrain spiral rendering
commit 255f450ae9ac8763db4bede075fb409161ed57cc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:53:17 2020 +0000
Better LoD precision
commit 3d027aebe812a5b8658a4eb8123dc9f61b3776d2
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:04:03 2020 +0000
Better falloff
commit be775c9484b457b2c0b1a494aec03392d0c70e76
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 15:30:45 2020 +0000
Applied good ideas from experimental branch
commit 58587b68545a23c5c04ab4574a4b94b3bc982246
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 16:15:13 2020 +0000
Minor fixes to LoD merging
commit 7b42aebd709c14df2db766aad61d9280ad24d84d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 15:04:44 2020 +0000
Capped LoD dragging
commit 8aafc559f87124e1ea5ca6e3ddc2aa0c242d793c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:54:37 2020 +0000
Better blending between LoD and terrain border
commit edd3455d5161792d87ddc8eadc0ecbad5532b284
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:40:19 2020 +0000
Fixed LoD z depth, added sea level offset
commit b9b06744620114dd5556e73f64fa93c145503a7c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:27:43 2020 +0000
Better LoD smoothing
commit a1aee931e790431560cd2d953ad61d9497072afd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Feb 21 14:52:17 2020 +0100
Adding shadows.
commit 2400786c13dd891c131ed86d48d05df516a8a778
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 13:48:40 2020 +0000
Use world map as LoD source
commit dbf650f504a4c25fbbc2096ac3616c736bf52d23
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Jan 20 00:48:14 2020 +0000
Better clouds at distance
commit 5e6f81b86cdb9730b9b056877b19257075fd5fa8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Jan 19 23:59:02 2020 +0000
sync
commit 745e7540ddb000cc645f612767b337c2ddc3f7c0
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 12:40:48 2019 +0000
Improved cloud falloff mist, faster noise sampling
commit f6a200d0cb866196ba57697466755f9e0c7ea5d8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 10:09:00 2019 +0000
Improved long-range depth precision, removed unnecessary LoD polygons
commit 63d1b2bb2292898d59fb4f4e502201103dfeb86f
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 20:57:46 2019 +0000
Working LoD shader
commit f13d98ee3e58f881e8b978861a67663b59ed91ec
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 11:03:40 2019 +0000
LoD first attempt (stack overflow issue)
2020-08-20 18:34:59 +00:00
|
|
|
|
let (alt_old_no_ocean, _) = uniform_noise(map_size_lg, |posi, _| {
|
2020-01-11 20:38:30 +00:00
|
|
|
|
if is_ocean_fn(posi) {
|
|
|
|
|
None
|
|
|
|
|
} else {
|
2020-01-22 14:31:10 +00:00
|
|
|
|
Some(old_height(posi))
|
2020-01-11 20:38:30 +00:00
|
|
|
|
}
|
|
|
|
|
});
|
(See sharp/lod-history) LOD, shadows, greedy meshing, new lighting, perf
---
Pretty much a Veloren fork at this point. Here's a high level overview of the changes (will be added to CHANGELOG just before merge).
At a high level this MR incorporates roughly two groups of changes.
The first group consists of new game features: more flexible map sizes, level of detail terrain, shadow maps, and a new lighting
engine. This is "feature work" that (mostly) only adds new things to Veloren, and mostly shouldn't affect old stuff.
The second big group of changes are those addressing the fallout from all the new features. These include performance fixes of
various sorts: the addition of multiple graphics options and optimization of the cheap ones to avoid work, switching all voxel
models to use some variant of greedy meshing, switching over much of our CPU-side vector math to exploit SIMD instructions
(coinciding with a fork of `vek`), and a rewrite of how the UI handles text rendering (coinciding with updates to our fork
of `conrod`). Making Veloren's hardcoded colors appear correct under the new lighting engine also required considerably
changes (TODO: Fill in this section when it's complete).
The second category of changes often heavily touches code owned by other people, including frequently modified code "owned" by a
handful of people, so I recommend that this code be reviewed particularly carefully.
---
At a high level (each will be described in more detail below):
- The world map has been refactored.
- The world size is no longer hardcoded (@zesterer).
- The map generation code was made generic to allow using it outside of the `world` crate (@zesterer).
- On world creation, we now compute *horizon maps* (@zesterer).
- The way we pass the world from the server to the client has been updated (@xMAC94x).
- Artifacts related to image rotation were fixed (@imbris).
- Multiflow rivers were enabled (@zesterer).
- In the process of making changes related to the world map, various incidental fixes and optimizations were required.
- The new *level of detail* feature was added (@zesterer wrote part of this and has checked out the rest).
- A new LOD terrain rendering step was added to the pipeline.
- The LOD terrain quality was made configurable via a graphics setting.
- Horizon maps were used to cast shadows from LOD chunks on both LOD and non-LOD terrain.
- A "voxelization" effect was incorporated into rendered LOD terrain to make it blend better into the world.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Veloren's lighting has been completely overhauled (@zesterer has already checked most of this out).
- A semi-accurate index of refraction was assigned to our materials.
- A new, more realistic, physically based approach to lighting was used using the *Ashikhmin Shirley* BRDF.
- We emulate *atmospheric scattering* using equations designed for measuring solar panel light exposure.
- We attempt to compute *realistic light attenuation* in water using its real material properties.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Point and directional lights now cast realistic shadows, using *shadow mapping.* (@imbris, @zesterer, @Treeco, @YuriMomo)
- Point light shadow maps were added to the rendering pipeline, using geometry shaders and *seamless cube maps*.
- Directional light shadows were added to the rendering pipeline, using LISPSM together with disabling *depth clamping*.
- "Shadow-only" chunks and NPCs were added to prevent shadows from models behind you from disappearing.
- In the process of making changes related to shadow maps, various incidental fixes and optimizations were required.
The addition of shadow maps, LOD terrain, and the new lighting all led to significant performance degradation, on top of other
changes happening in master. Therefore, a large number of performance improvements were also needed:
- The graphics options were made much more flexible and configurable, and shaders were optimize.
- New options were provided for how to render lights and shadows (@Pfauenauge, @zesterer).
- Graphic setting storage and configuration were overhauled to make adding new features easier (@Pfauenauge, @imbris).
- Shaders were rewritten to utilize GLSL's preprocessor to avoid overhead (@zesterer, @YuriMomo).
- In the process of making changes related to providing additional rendering options, various incidental fixes and optimizations were required.
- Voxel model creation was switched to use *greedy meshing.*
- A new voxel meshing method, greedy meshing, was added (@imbris).
- Uses of the older meshing methods were migrated to use greedy meshing (@imbris, @jshipsey, @Pfauenauge).
- New restrictions were added to terrain, figure, and sprites to future proof them for further optimizations (@jshipsey, @Pfauenauge, @zesterer).
- Most positions are now relative to either chunk or player position for better precision (@imbris, @zesterer, @scottc).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- Animation and terrain math were switched to use SIMD where possible.
- Fixes were made to vek to make its SIMD feature usable for us (@zesterer, @imbris).
- The interface and types used in bone animation were changed in various ways (@jshipsey, @Snowram, @Pfauenauge).
- Redundant code generation for body animation is now partly taken care of by a macro (@jshipsey, @Snowram, @Pfauenauge).
- Animation code was modified to to use vek's SIMD representation where possible (@jshipsey, @Snowram, @Pfauenauge).
- Terrain meshing code and shadow map math were also modified to use vek's SIMD representation (@imbris).
- SIMD instruction generation was enabled (@YuriMomo, @jshipsey, @Snowram, @imbris, @Angelonfira, @xMAC94x).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- The way we cache glyphs was completely refactored, fixed, and optimized.
- Our fork of `conrod` was optimized in various ways (@imbris).
- Our fork of `conrod` now exposes whether a widget was updated during the current frame (@imbris).
- Our use of the glyph cache was rewritten for correctness (@imbris).
- A *text cache* was introduced that lets us skip remeshing glyphs that have not changed (@imbris).
- Various changes were made to reduce pressure on the glyph cache, with more planned (@imbris, @Pfauenauge).
- In the process of making changes related to the glyph cache, various incidental fixes and optimizations were required.
- Colors were changed to keep Veloren's look consistent with master.
- Some older tree models were brought back (@Pfauenauge).
- TODO(@Sharp): All hardcoded colors were extracted and made hotloadable.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Hardcoded colors were fixed to conform to Veloren's style.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Color models were fixed to conform to Veloren's style.
A detailed description of the involved changes follows.
---
- The world size is no longer hardcoded. All functions dependent on world size now take a `WorldSizeLg`, which holds the base 2 logarithm of each actual world dimension and is guaranteed to maintain certain properties (outlined in `common/src/terrain/map.rs`). Additionally, many utility functions that utilize the world size were moved into `common` as well (mostly `common/src/terrain/mod.rs`). Finally, the world map format was updated in order to store its size explicitly, with a migration path from the old format that should work whenever the old formatted map was a square (practically always). See `world/src/sim/mod.rs` for these changes.
- The map generation code was made generic to allow using it outside of the `world` crate. The parts of the map generating code that do not need to query the world were moved over to `common/src/terrain/map.rs`, allowing them to be used from the client without creating a dependency on `world`. The rest of it was turned into helper functions in `world/src/sim/map.rs`, which can be passed as closures to the generic map generation code to complete its construction. This also means that colors are now passed in separately to the map generation function. See <https://veloren.net/devblog-78/> for more details.
- On world creation, we now compute *horizon maps*. See the function in `world/src/sim/util.rs`.
Given a height map and a plane intersecting that height map, our horizon maps allow us to encode enough information to reconstruct shadows for each point on the height map using only the *horizon angle* (the angle at which the sun starts to become visible). As Veloren's sun only covers one plane, this is sufficient for encoding sun shadows for LOD terrain, by encoding two angles per chunk (one for each 90 degrees the sun covers). We can also use this for the moon, if we want, since the moon follows the same path. Additionally, we store the *height* of the furthest occluder, to try to make the shadows volumetric; so this means 4 bytes in total for each chunk.
Support for horizon maps has been merged into the map functionality in common as well.
- The way we pass the world from the server to the client has been updated. Rather than passing the prerendered map, we instead pass three maps with values for each chunk; one with the color information, a second with altitude information, and a third with horizon map information. We then reconstruct the map on the client, together with some additional information we send from the server (like the sea level and maximum height). See `common/src/msg/server.rs` for a detailed description of the format of `WorldMapMsg`, and `server/src/libr.rs` and `client/src/lib.rs` for details of the map construction and parsing.
- Artifacts related to image rotation were fixed. See the commit message for commit SHA `cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e` for a detailed explanation. This involved changes to shaders, the addition of a new type of graphic (also reflected in the graphic cache) that allows specifying a border color (which automatically makes the associated texture immutable), and some related fixes. I reproduce the first two paragraphs of the MR description as well:
```
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
```
- Multiflow rivers were enabled.
This does not really need to be part of this MR, and would be easy to revert, but since it seemed to provide a nice improvement it's currently packaged with it.
We already computed multiple outflows from each chunk for erosion purposes long before this MR.
However, we never modified river rendering to be able to handle this case (just a single downhill river flow is complex enough!) so this was not exposed when deciding which chunks were rivers.
Now that
- In the process of making changes related to the world map, various incidental fixes and optimizations were required. Some examples of fixes include making sure terrain is never lowered to below sea level (to make the shadow maps report correct values), fixing map altitudes and colors to understand things like cliffs and "block level" coloring (that doesn'te xist on the column level), and fixing a crashbug when rendering images for the UI where source pixels are strongly rectangular. Some examples of related performance fixes include avoiding allocating a fresh vector for all the maps (i.e. copying it over to change the format from `[u32; n]` to `DynamicImage` and then copying again to convert to `RgbaImage`), and instead using the `gfx::memory::slice` function to accomplish the same thing. These sorts of changes are spread all arond the code.
This includes the additon of a new scene, `voxygen/src/scene/lod.rs`, a new pipeline `voxygen/src/render/pipeline/lod_terrain.rs`, and new shaders `assets/vxygen/shaders/lod-terrain-vert.glsl` and `assets/vxygen/shaders/lod-terrain-frag.glsl`, as well as associated changes to the renderer in `voxygen/src/render/renderer.rs`.
The main idea behind our initial approach to LOD was to take the world data we now get from the server (altitude, color, and horizon mapping).
- Some previously computed values were turned into shader uniforms for better prediction on weak processors. (@zesterer)
- Calls to power or trig functions were removed or replaced with multiplications, where possible.
- After some deliberation
- To properly handle sprite "waving" for nearby sprites,
We explicitly designed the greedy meshing system with figures and sprites in mind.
In both cases, we want to be able to *efficiently* pack many different models into the same texture, especially in cases where we know
we will either not be removing any of the grouped-together from the models from the texture, or will remove all of them at once (so
they can be packed into some specific subtexture).
For sprites, since we know every model in advance and never intend to deallocate them, we currently pack them all as efficiently as
possible into one giant tetxure atlas. However, in the future we might opt to pack them slightly less efficiently in exchange for
shrinking the sprite vertex size.
For figures, we pack all the textures for each *model* into the same atlas.
is a global texture atlas used for every sprite, and for figures which is why we have the ability to mesh multiple
models to the same texture area (using the simple texture atlas allocator) without requiring intermediate vector allocations.
This is accomplished by delaying the time when we actually write the color and light data to the texture until *after* all the
model vertices have been meshed; then, we can just allocate the whole color/light array at once, making the atlas we use an
exact fit. In computer science-y terms, we accomplish this delay by, after we perform the initial greedy meshing (without
texture information), not continuing to create the texture data, but instead constructing a *continuation*--that is, a function
that, when called, will execute the rest of the computation. We push this continuation (which in Rust terms is a `FnOnce` closure
that takes the `ColLightsInfo` that it is supposed to write to as context) onto a
onto a vector
resizing. To allow for suspended writes to texture data, Rust pointed out to me that the continuation that would eventually write the color and light data to the texture atlas (the one that is shared by all models sharing the same greedy mesher) would have to *own* whatever data it mshed. Because we often generate the model data to mesh as a temporary in `voxygen/src/load.rs`, the
- Matrix multiplications in the shader were reduced for figure data (@zesterer).
- Vertex "waves" for fluid data were removed.
- Terrain "bending" near edges was removed.
- Scaling was fixed to make sure empty space was not introduced in a space previously occupied by a block. It was also changed to take ownership of its voxel data,
rather than sharing it, to let it be used with meshing.
- Rust's nightly version was bumped in order to use the `array_map` function, which lets us reuse more code between the simple map and `FigureModelCache`.
- PositionedGlyph::standalone.
---
I tried to cite sources in many cases[^realtime],[^lloyd],[^lispsm],[^pbrt],[^greedy],[^tjunctions]
where I needed features from elsewhere but I am particularly grateful for the following resources,
esepcially where they have accompanying source code. I linked all of them that are accessible to the public (those that are not were
obtained through legal means).
[^realtime]: Eisemann, Elmar, Michael Schwarz, Ulf Assarsson, Michael Wimmer. Real-Time Shadows. A K Peters/CRC Press (T&F), 20160419.
[^lloyd]: Lloyd,B. 2007. [Logarithmic perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). PhD thesis, University of North Carolina.
[^lispsm]: Wimmer, M., Scherzer, D., and Purgathofer, W. 2004. [Light space perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). In Proceedings of Eurographics Symposium on Rendering 2004, pp. 143– 152.
[^pbrt]: Pharr, Matt, et al. [http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf](Physically Based Rendering: From Theory to Implementation). Third edition, Morgan Kaufmann Publishers/Elsevier, 2017.
[^greedy]: mikolalysenko. “Meshing in a Minecraft Game.” 0 FPS, 30 June 2012, <https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/>.
[^tjunctions]: blackflux. “Meshing in Voxel Engines – Part 1.” Blackflux.Com, 23 Feb. 2014, <https://blackflux.wordpress.com/2014/02/23/meshing-in-voxel-engines-part-1/>.
I am also especially grateful to Khronos, Wikiepdia, and stackoverflow for answering many of my specific questions while writing the MR.
---
Squashed commit of the following:
commit 300505e7305a2fdac722a808ee8538323f215f39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 18:46:25 2020 +0200
Fixing cargo doc and typo in CHANGELOG.
commit ec0aeb18e8499d7d84ef818331b4b65c3d76cea6
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 15:38:50 2020 +0200
Hopefully final commit for the LOD branch.
commit 5e8ea0b1eaac02903a02feb2eb038d195de4872f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 10:14:26 2020 +0200
Falling back to power as stopgap.
commit e44a1cbf46504ee9931a01bdc9033e145500d557
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 09:25:41 2020 +0200
Address imbris feedback.
Temporarily disables shiny water, lowers max VD.
These restrictions will be lifted soon after merging.
commit 561e25778a108ac3712f5ec2ce3a51234c4430d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 08:31:13 2020 +0200
Tweaking shaders a bit.
commit 7d19259078ce0dd7b3742ad7d0cb3fab3ece3fdc
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:59:43 2020 +0200
Fix view example as well.
commit 051cd4934e0fad2c0b15db4380a4189fa318679f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:29:06 2020 +0200
Fix meshing benchmark.
commit c95e07db3b4dcca285678985e65e31b927cb1c61
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 05:46:22 2020 +0200
Address MR feedback, fix scene clouds.
commit 1bfb816cabdb3ffc1e507a009c2d98696b4b573a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:39:36 2020 +0200
Incorporating Pfau's figure color changes.
New eyes and new humanoid colors.
commit 3f9b89a3ac7b3356b1dba0d1a8f6541357f81469
Merge: e2f5162e4 62c53963a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:29:41 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit e2f5162e4f96f4124aa43488f7245d341b3dcfd4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:28:38 2020 +0200
World colors are all hotloadable.
They live in assets/world/style/colors.ron.
Only a small handful of hardcoed colors remain in World; they are either
part of the map, or difficult to disentangle from the rest of the
computation. Comments are made where appropriate.
commit 62c53963abe1975009d34a8f9515a355bef24f31
Author: Marcel Märtens <marcel.cochem@googlemail.com>
Date: Wed Aug 19 15:59:00 2020 +0200
replace pretty_env_logger with tracing
commit 5b1625f99d9586fe80e2232f583ec5af9f953099
Merge: d71003acd 4942b5b39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:15:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit d71003acdabeff970b3928e97c26af6847b5b78e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:14:34 2020 +0200
Hotloading colors, part 1: colors in common.
Currently, this just entails humanoid colors. There are only three
colors not handled; the light emitter colors in
common/src/comp/inventory/item/tool.rs. These don't seem important
enough to me to warrant making hotloadable, at least not right now, but
if it's needed later we can always add them to the file.
commit 63b5e0e553eb2ea49276f192a6fc7dd65254270d
Merge: c32b337a4 6d2c4b9c1
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 13:05:37 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c32b337a46e10d9de473d178a94a3ccd61c39bb3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:52:04 2020 +0200
Fixing LOD grid, for real.
commit a166ae0360395387e09fb35a1f84210c2ce5ec24
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:28:05 2020 +0200
Addressing imbris's initial feedback.
Fixes two minor bugs: explosion particles were no longer spawning
randomly, and LOD grids were not perfectly even.
commit 4cbad004f44060994252dd3d38647a14a589712f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:27:58 2020 +0200
Bumping nightly per request.
commit 548680276aac77c25d43d16b5622f847d474dbef
Merge: acc098604 8f8b20c91
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:26:06 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit acc0986040589a3492f88a740bc3c3fc693b26d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:28:32 2020 +0200
Lower resolution due to lying drivers.
commit d3b878de2a52c358d2944a6bbd0555dad7fbdb10
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:15:38 2020 +0200
Fix issues msh encountered with Intel 4600.
commit 10245e0c1b0cb6fae10d86409435364edc6102ef
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 21:15:02 2020 +0200
Merge more models into one mesh than we did previously.
commit 3155c31e663c52ae5c3a53d5fb5665892a1a498a
Merge: 7204cc8a7 3c199280e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:35:22 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7204cc8a7a4f74a30306bd205d9834fee4bb944f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:34:43 2020 +0200
Fix not yet done NPC animations.
This forces them all to be the idle animation if not specified.
This fixes issues where you'd have giant NPCs in water.
commit bc83360f2a08918f19d417b5f772e1ff554dba08
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 19:36:37 2020 +0200
Try to fix some bugs:
- Z fighting with LOD terrain and water.
- Audio SFX not playing.
commit 1fd104aa603bf3781b6526a5cada46aeca3049dd
Merge: 862df3c99 7c2c392a3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 12:02:31 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 862df3c9976c4da9bd7cfd784f1a85973127968a
Merge: 0a4218ed9 75c1d4401
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 05:52:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0a4218ed9d541a2b34c133351bea38a99ddf4ea7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 22:27:14 2020 +0200
Fix particle depth.
commit f51dfdeb442d0dd5243dd2f344fa4be295bd0875
Merge: c6251a956 5e6dc0471
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:19:04 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit c6251a956ad376400dca5c23420cf8d213dc8fdf
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:15:46 2020 +0200
Cache figures more intelligently.
Cache figures for longer, and don't cache character states for the
player except where they actually affect the rendered model.
commit 0ed801d5404982c6fb63b1eaa4567d908b294c9d
Merge: c11b9bdf0 eea64f78f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 16:32:24 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c11b9bdf0a53bf9884d2f5a48fec9b01d582df1a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 11:47:15 2020 +0200
Remove unneeded Clippy annotation.
commit 16aa9ef40af56d69289d00aafb3deadfb8bd4f35
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 8 00:53:02 2020 +0200
Fix hotloading and Clippy.
commit 3dc973e0be5b758da1e9805eb764ad401374cd0c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 23:50:27 2020 +0200
Major speedups with SIMD.
commit fba64a7d93d5a96077ce87287bbce6ab9b7fbcae
Merge: 76429d00e d1e10b178
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:19 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 76429d00eea00d212fbd672a84ee91e75b19b938
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:10 2020 +0200
Add clippy.toml.
commit c79f512f84dbb83cb82b7954db68ff241dfd8e41
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 11:55:20 2020 +0200
Fix all clippy issues, clean up Rust code.
commit 6f90e010b3fbefb53b0d632e819931350015b6b8
Merge: 77a8c7c26 5929cfa5c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:30 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 77a8c7c267d3f44a1a62bd6b2274359973c5e4d4
Merge: b44e44232 44febaabd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:10 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 5929cfa5c713aa392110bbb62407f76caf53c3df
Author: jshipsey <jshipsey18@gmail.com>
Date: Thu Aug 6 20:47:27 2020 -0400
fixed in-hand arrow bug
commit b44e442325d828f1cd564d66908f89d09e80474b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 6 13:40:35 2020 +0200
Miscellaneous performance improvements.
commit be37acf287c1360d8085862526ac3365ffd1d768
Merge: 125d7fc6c c11876547
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 05:49:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 125d7fc6c4dcd8c8c5f27b8268a4d64f409f3644
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 04:55:31 2020 +0200
Abstract over simd vs. repr_c vectors.
Also some minor improvements to Event size.
commit d4d4956e9252e1241ce110b2aa85076c6b1e2a23
Merge: 5f3b7294a aced5f979
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:56:54 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 5f3b7294af1f8533edc2620b58863c248e2b07af
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:43:52 2020 +0200
Fix formatting issues I missed before.
commit a428a3ebba70dcab63dd0f8cd983120c90617271
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:41:51 2020 +0200
Fix clippy warnings, part 1.
There aer still a bunch of type too complex and
function takes too many arguments warnings that I'll fix later
(or ignore, since in the one case I did fix a function takes too
many arguments warning I think it made the code *less* readable).
commit ba54307540ed8a937ac08209730284fc653af85b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 30 13:22:42 2020 +0200
Fix light animations so they are removed when the light turns off.
commit 7e0f4bcbf0f4717145d8beac40d52e3acebbe2aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 21:10:20 2020 +0200
Fix crash in edge case for pixel art.
commit 56da06f7a351e2b949e9b014a90b974d511a0924
Merge: cf74d55f2 9f53a4a19
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:56:52 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:29:52 2020 +0200
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
The first concern was addressed by fixing the dimensions of the map
images drawn from the UI (so that we always use a square source
rectangle, rather than a rectangular one according to the dimensions of
the map). We also fixed the way rotation was done in the fragment
shader for north-facing sources to make it properly handle aspect ratio
(this was already done for north-facing targets). Together, these fix
rendering issues peculiar to rectangular maps.
The second and third concerns were jointly addressed by adding an
optional border color to every 2D image drawn by the UI. This turns
out not to waste extra space even though we hold a full f32 color
(to avoid an extra dependency on gfx's PackedColor), since voxel
images already take up more space than Optiion<[f32; 4]> requires.
This is then implemented automatically using the "border color"
wrapping method in the attached sampler.
Since this is implemented in graphics hardware, it only works (at
least naively) if the actual image bounds match the texture bounds.
Therefore, we altered the way the graphics cache stores images
with a border color to guarantee that they are always in their own
texture, whose size exactly matches their extent. Since the easiest
currently exposed way to set a border color is to do so for an
immutable texture, we went a bit further and added a new "immutable"
texture storage type used for these cases; currently, it is always
and automatically used only when there is a specified border color,
but in theory there's no reason we couldn't provide immutable-only
images that use the default wrapping mdoe (though clamp to border
is admittedly not a great default).
To fix the maps case specifically, we set the border color to a
translucent version of the ocean border color. This may need
tweaking going forward, which shouldn't be hard.
As part of this process, we had to modify graphics replacement to
make sure immutable images are *removed* when invalidated, rather
than just having a validity flag unset (this is normally done by
the UI to try to reuse allocations in place if images are updated
in benign ways, since the texture atlases used for Ui do not
support deallocation; currently this is only used for item images,
so there should be no overlap with immutable image replacement,
so this was purely precautionary).
Since we were already touching the relevant code, we also updated
the image dependency to a newer version that provides more ways
to avoid allocations, and made a few other changes that should
hopefully eliminate redundant most of the intermediate buffer
allocations we were performing for what should be zero-cost
conversions. This may slightly improve performance in some
cases.
commit ad18ce939940a8c697270f6e9b94db9942fd8295
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 13:21:09 2020 +0200
Fix continent scale hack.
commit 36b1cb074f5b195aebd7dbbc3da7f0246a1a18ec
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 12:11:40 2020 +0200
Enable loading different sized maps without a recompile.
We may want to tweak the effects of the continent_scale_hack.
commit 13b6d4d534cc4814b7cb3294ca41bbfea0a6b186
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 10:55:48 2020 +0200
Removing WORLD_SIZE, part 1.
Erased almost every instance of WORLD_SIZE and replaced it with a local
power of two, map_size_lg (which respects certain invariants; see
common/src/terrain/map.rs for more details about MapSizeLg). This also
means we can avoid a dependency on the world crate from client, as
desired.
Now that the rest of the code is not expecting a fixed WORLD_SIZE, the
next step is to arrange for maps to store their world size, and to use
that world size as a basis prior to loading the map (as well, probably,
as prior to configuring some of the noise functions).
commit 30b1d2c6428230a9eaa0d749cdcbbd6f1cbccd78
Merge: 7d56ba31b 1377b369f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:58 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 7d56ba31b445441461b28a07fc495d7d4f047c17
Merge: 2101113b4 598f14b25
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 1377b369f6db2258e910d467a5740f31789e3ded
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sun Jul 19 23:25:38 2020 +0200
more saturated pumpkins
commit ae8d50527f93bb0616c2ad46ce4dacb63bc37c6d
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sat Jul 18 20:29:56 2020 +0200
acacia models
commit 2101113b467e691de787392d7f20f1745f5637bd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 18 18:55:25 2020 +0200
Higher detail LOD.
commit add2cfae04b4385fa5590e11e2bd5229d9dee0aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 16 01:57:39 2020 +0200
Revert some irrelevant stuff.
commit 2e2ab3dc1eaa59a4aef7f8d34a53d8aae4c8553a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 15 13:30:49 2020 +0200
Fixing various things about shadows.
* Correcting optimal LISPSM parameter.
* Figure shadows are cast when they're not visible.
* Chunk shadows stay cast until you look away.
* Seamless cubemaps for point lights.
* Etc.
commit 6c31e6b56217274285b597af297036691ea5d897
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 19:50:26 2020 +0200
Fix shadow creation.
commit 6332cbe006115ae205597529cd8bbccd146c2cca
Merge: be438657c 930e0028b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:47:00 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit be438657c33d7b5bfb0a9582c3ed3fd366637323
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:28:08 2020 +0200
Tweaks to shadows.
Added shadow map resolution configuration, added seamless cubemaps,
documented all existing rendering options, and fixed a few Clippy
errors.
commit 23b4058906013c7d2a40c286e20e32c5fbd897ed
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 10:11:19 2020 +0200
Fix moon, use nonlinear noise for terrain.
Note that the latter has a bit of performance cost.
commit 7fbe5cbfbb9dc29607957b8e62f432a4deed193d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:23:02 2020 +0200
Address lies about max texture size.
commit bcfc62b5e13a1cdd83f57535fde4694720bebfd9
Merge: 75e3626a7 18a08e8fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:22:08 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 75e3626a785919f43fdcf2127c2b10e3e4df2f9f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:21:52 2020 +0200
OpenGL 3.3 minimum.
commit 18a08e8fe2739f02af99a5d2cb4e7c38c49e858b
Author: Monty Marz <m.marzouq@gmx.de>
Date: Tue Jul 7 23:57:52 2020 +0200
settings localization
commit 90c5d1ca3620092bc3ae10b2211489eb1cf6f5e8
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 21:11:48 2020 +0200
Lower near distance.
commit 0e66f02b25aaddaa2dfddbbc89cd67de54a9a7b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 20:09:01 2020 +0200
All sprites sway in the wind now.
commit db1401a6910bf42dcf502462c90038752ff5fbdb
Merge: 69e508d8c e8b4b29d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 19:34:17 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 69e508d8c94d8973033817ca86f357e466fc7c4d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 18:41:37 2020 +0200
Make it easy to switch to SIMD for math.
commit ffe0f5928c7a7e87d00cb5426b3b1d831d7e02fd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 21:21:12 2020 +0200
Fix some issues with underwater rendering.
commit bfda6da42f38fd02c31ee92c81ab785a3e50c2a0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 19:17:59 2020 +0200
Fix some minor display issues.
commit 0ed752e087968cf901301884aaeae698e32ef8a5
Merge: ccc6a06a8 518edcb85
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:14:21 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit ccc6a06a8d4504d6b9f7af7905a414d2ee06ab76
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:04:34 2020 +0200
Some minor changes.
commit 4e020246702889269efe1a191788992164c508d6
Merge: 50a64d927 e05c9267a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 16:17:40 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 50a64d927e6c4f4b0e4688e4cbfca694bc3f922a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 13:07:03 2020 +0200
Fix far plane.
commit 7dd06da34cae8f9ea3b6c889fe965181f3fd3949
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:25:35 2020 +0200
Add shadows.glsl.
commit 618a18c998778bf871b905a74657440fcc384c80
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:10:22 2020 +0200
Adding shadows, greedy meshing, and more.
commit eaea83fe6a5cb1cb0ba8beef888183c718258496
Merge: 267018495 2f89b863e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 22:47:07 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 2670184954a13e4a9e7a4e35ba79aac0c5fac2f7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 21:20:01 2020 +0200
Make civsim and sites deterministic.
For anything in worldgen where you use a HashMap, *please* think
carefully about which hasher you are going to use! This is
especially true if (for some reason) you are depending on hashmap
iteration order remaining stable for some aspect of worldgen.
commit f8376fd5dc72b4a9c2f51a6b4570d59c8b8e9343
Merge: 654f7e049 cdee191dd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 17:53:57 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 654f7e049258d9da27c09608bbe6a46ffa8787e5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed May 20 21:22:30 2020 +0200
Correct backface culling.
commit 560501df05ca725409b0f2e4eb31bdfdc15fd0c7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue May 19 17:22:06 2020 +0200
Greedy messhing for shadows.
commit a4d87e1875ca543436e6bbbeb20348facc5a52d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun May 17 05:59:00 2020 +0200
Shadow maps work for lantern.
commit 243d0837b8a3b08172c9a3c348d964d7ddc2a0a8
Merge: 04382dc28 71dd520cd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:53:13 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 04382dc28632b6c66e8821f6870c0daaa1c1901a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:22:17 2020 +0200
WIP: better graphics config, better LOD, shadow maps.
commit 22ddbad3eb32bfa70f0932176022208fe67ded81
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 18:54:09 2020 +0200
Minor shader fixes.
commit 746a10e8d01ac235f994b0cde78fa48998602a1f
Merge: 0f4a0e763 40ab94673
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 04:02:09 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0f4a0e763db3afbdc4fb0558611f38326ca87151
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 23:03:24 2020 +0200
Switch back to pop-in terrain.
commit dd74fa7e4a53667b38811d7aec58d7f6a68889bb
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 22:58:55 2020 +0200
LOD shading closer to voxel shading.
commit ef67bd58ba0bdaf622b078892d768263b6cba268
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 28 20:49:03 2020 +0200
Experimental underwater lighting.
commit 2c5ad9d07605e80d5fd5679dd3a5d70c605b86a9
Merge: 748279835 303967a6f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 22:35:24 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7482798354eda18c8207950080fc24d443a369de
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 21:59:55 2020 +0200
Replace discard in figure-frag.
commit d83b4ae69be4912f69bf7835f509c68a1c7770a4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:45:57 2020 +0200
Fix sprite lighting, HDR from focus_pos.
commit 0594238004f116274905fa0ed7c2b6c417ed1d29
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:14:10 2020 +0200
Proper HDR from point lights.
commit 48c93d2b41ce5743103d18e76cc228f5ac766492
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 14:01:43 2020 +0200
Brighter ambiance, darker LOD shadows.
commit e0452e895ccfa8a43f368cae3b8b8aedc24dad93
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 13:13:23 2020 +0200
More proper HDR.
commit 4c6da3ed16cfeebb455e40da5f557b4af9a499d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 00:13:10 2020 +0200
Trying LOD noise.
commit 682a3d74c85df5503ffe1fc1cc891bce789df1ad
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 23:11:08 2020 +0200
Fix LOD heights in towns.
commit cc39e5734e8b18f9077bf42e66337c1319dd6b6e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 21:01:23 2020 +0200
More LOD fixes.
commit 8116b21c2e51c836e77894e309ac273caf2917b3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:54:43 2020 +0200
I like this coloring.
commit bc2560ea90b36f4b46190005344232d993043ac3
Merge: 14effdd5d e690efe71
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:48:33 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 14effdd5db8747fcf3eb34f03b46b7792e92d1c5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:24:35 2020 +0200
Re-saturate.
commit 48a643955d4435b78179acba0beb4a979905cc31
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:23:57 2020 +0200
Various fixes.
commit f7b497a0c25f4ad4682c71dd1ed6f608052feb9b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 03:22:49 2020 +0200
Render figures again.
commit 44e4aad48deba8266b9f8bdfd3db096b381f5327
Merge: e6f0a5a98 9ec319a18
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 02:01:04 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit e6f0a5a981a82533ba188fff0a54ce98577bb152
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 24 16:12:20 2020 +0200
Add atmospheric scattering.
commit f2953087f691a8edbc001cb98ebf5059fc6f8ac0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 23 00:01:20 2020 +0200
Fix shadowing for specular reflections.
commit ddd4a67a9799b8d08c7dc0c2bec90621c2bed0e3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Apr 22 22:56:12 2020 +0200
HDR fixes.
commit 1015e60deef3c447381996277df7496707a63bd0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 21 18:25:19 2020 +0200
More lighting changes.
commit 80c264abd111fb237e57843efcb5c071d4f84613
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 13 00:29:59 2020 +0200
Lighting experiments.
commit 8414987e589dd5102bad89762a3adaccc0bfe957
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 9 02:38:40 2020 +0200
WIP -- lighting changes and soft shadows.
commit 9cd2b3fb0d6b49776c6dfe463e4169637250b11a
Merge: c7ea687eb 8b149ad11
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:29 2020 +0200
Merge branch 'sharp/new-lighting' into sharp/small-fixes
commit c7ea687ebbc5aace1b455f134a5bf49ce2c7434a
Merge: 476441531 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:02 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 8b149ad11ad4bb75018fcf9519baec27d1c95951
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:32:39 2020 +0200
Trying out a new lighting model.
commit b0ac9f36f755dd06f7c17c46150568064790864f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 07:56:11 2020 +0200
Use bicubic interpolation for terrain.
commit f6fc9307a121514b614bc50ef8eb055953e7da8a
Merge: 33140a295 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 05:01:41 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 4764415312aae6e9ac2d00e86e84577cb958f1ab
Merge: ed2d0111d 13388ee6a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 04:54:48 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 13388ee6a42943f3f79a9cb488346cef18e272fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 20:30:08 2020 +0200
Various fixes (to coloring and to soft shadows).
commit fbd084a94a067082a87cd6d28b82054709bc9265
Merge: 5a089863b 4fdf6896a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 18:50:38 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/map-colors
commit ed2d0111d994262ae836d84d1fe5a45e4de72a0b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 06:49:27 2020 +0200
Combining colors and LOD.
commit 88342640c6b835114d01c797b89fdede3b0a2108
Merge: 33140a295 5a089863b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:49:20 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 33140a2951b8212725f42c758b277aaec4d888f7
Merge: 4c65a5aed f34d4b379
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:36:21 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 5a089863beb01d4794bbe3580ada47b278715ea2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 03:17:49 2020 +0200
Making maps brighter.
This is probably not the right way to do it, but oh well!
commit 32b2c99109dd486aa922886081068f9c550c83f2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 02:46:36 2020 +0200
Horizon mapping and "layered" map generation.
Horizon mapping is a method of shadow mapping specific to height maps.
It can handle any angle between 0 and 90 degrees from the ground, as
long as know the horizontal direction in advance, by remembering only a
single angle (the "horizon angle" of the shadow map). More is explained
in common/src/msg/server.rs. We also remember the approximate height of
the largest occluder, to try to be able to generate soft shadows and
create a vertical position where the shadows can't go higher.
Additionally, map generation has been reworked. Instead of computing
everything from explicit samples, we pass in sampling functions that
return exactly what the map generator needs. This allows us to cleanly
separate the way we sample things like altitudes and colors from the map
generation process. We exploit this to generate maps *partially* on the
server (with colors and rivers, but not shading). We can then send the
partially completed map to the client, which can combine it with shadow
information to generate the final map. This is useful for two reasons:
first, it makes sure the client can apply shadow information by itself,
and second, it lets us pass the unshaded map for use with level of
detail functionality.
For similar reasons, river generation is split
out into its own layer, but for now we opt to still generate rivers on
the server (since the river wire format is more complicated to compress
and may require some extra work to make sure we have enough precision to
draw rivers well enough for LoD).
Finally, the mostly ad-hoc lighting we were performing has been (mostly)
replaced with explicit Phong reflection shading (including specular
highlights). Regularizing this seems useful and helps clarify the
"meaning" of the various light intensities, and helps us keep a more
physically plausible basis. However, its interaction with soft shadows
is still imperfect, and it's not yet clear to me what we need to do to
turn this into something useful for LoD.
commit f8926a5737ddc51f3d585c651a64c43677aae0f4
Merge: a1aee931e 875ae6ced
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Mar 13 13:32:42 2020 +0100
Merge remote-tracking branch 'origin/master' into sharp/map-colors
commit 4c65a5aed353b119aea65a2aaeb94549b67beb42
Author: Treeco <5021038-Treeco@users.noreply.gitlab.com>
Date: Mon Feb 24 16:48:05 2020 +0000
Made LOD setting slider exponential
commit 2fa7b2d20d7233dc8bfd64f9f7f54617575248f1
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 17:49:53 2020 +0000
Added mist to LoD
commit aab059a450b5f635777129ff82cc15b662965c3c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 15:14:06 2020 +0000
Added LoD slider
commit 779c36b538121c5ade3633ae5cb67bb14c8c3877
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:54:55 2020 +0000
Reduced cost of vertex pushing
commit 9fea150473906b166365b738ebcea07c697daf3d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:38:53 2020 +0000
Fixed maths, improved LoD resolution
commit 5481df38fea5bf183ff376a3337179cfaa5233dc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 11:22:50 2020 +0000
Dynamically relocate LoD vertices to enhance details
commit a3e36a50ababd615da7db1b26158c7906a5def01
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 18:13:51 2020 +0000
Simpler terrain spiral rendering
commit 255f450ae9ac8763db4bede075fb409161ed57cc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:53:17 2020 +0000
Better LoD precision
commit 3d027aebe812a5b8658a4eb8123dc9f61b3776d2
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:04:03 2020 +0000
Better falloff
commit be775c9484b457b2c0b1a494aec03392d0c70e76
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 15:30:45 2020 +0000
Applied good ideas from experimental branch
commit 58587b68545a23c5c04ab4574a4b94b3bc982246
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 16:15:13 2020 +0000
Minor fixes to LoD merging
commit 7b42aebd709c14df2db766aad61d9280ad24d84d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 15:04:44 2020 +0000
Capped LoD dragging
commit 8aafc559f87124e1ea5ca6e3ddc2aa0c242d793c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:54:37 2020 +0000
Better blending between LoD and terrain border
commit edd3455d5161792d87ddc8eadc0ecbad5532b284
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:40:19 2020 +0000
Fixed LoD z depth, added sea level offset
commit b9b06744620114dd5556e73f64fa93c145503a7c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:27:43 2020 +0000
Better LoD smoothing
commit a1aee931e790431560cd2d953ad61d9497072afd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Feb 21 14:52:17 2020 +0100
Adding shadows.
commit 2400786c13dd891c131ed86d48d05df516a8a778
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 13:48:40 2020 +0000
Use world map as LoD source
commit dbf650f504a4c25fbbc2096ac3616c736bf52d23
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Jan 20 00:48:14 2020 +0000
Better clouds at distance
commit 5e6f81b86cdb9730b9b056877b19257075fd5fa8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Jan 19 23:59:02 2020 +0000
sync
commit 745e7540ddb000cc645f612767b337c2ddc3f7c0
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 12:40:48 2019 +0000
Improved cloud falloff mist, faster noise sampling
commit f6a200d0cb866196ba57697466755f9e0c7ea5d8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 10:09:00 2019 +0000
Improved long-range depth precision, removed unnecessary LoD polygons
commit 63d1b2bb2292898d59fb4f4e502201103dfeb86f
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 20:57:46 2019 +0000
Working LoD shader
commit f13d98ee3e58f881e8b978861a67663b59ed91ec
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 11:03:40 2019 +0000
LoD first attempt (stack overflow issue)
2020-08-20 18:34:59 +00:00
|
|
|
|
let (uplift_uniform, _) = uniform_noise(map_size_lg, |posi, _wposf| {
|
2020-01-11 20:38:30 +00:00
|
|
|
|
if is_ocean_fn(posi) {
|
|
|
|
|
None
|
|
|
|
|
} else {
|
2020-01-22 14:31:10 +00:00
|
|
|
|
let oheight = alt_old_no_ocean[posi].0 as f64 - 0.5;
|
2020-01-11 20:38:30 +00:00
|
|
|
|
let height = (oheight + 0.5).powf(2.0);
|
|
|
|
|
Some(height)
|
|
|
|
|
}
|
|
|
|
|
});
|
2019-11-07 20:25:30 +00:00
|
|
|
|
|
|
|
|
|
let alt_old_min_uniform = 0.0;
|
2019-11-11 17:14:58 +00:00
|
|
|
|
let alt_old_max_uniform = 1.0;
|
2019-10-16 11:39:41 +00:00
|
|
|
|
|
2020-01-22 14:31:10 +00:00
|
|
|
|
let inv_func = |x: f64| x;
|
|
|
|
|
let alt_exp_min_uniform = inv_func(min_epsilon);
|
|
|
|
|
let alt_exp_max_uniform = inv_func(max_epsilon);
|
2019-10-16 11:39:41 +00:00
|
|
|
|
|
2020-01-22 14:31:10 +00:00
|
|
|
|
let erosion_factor = |x: f64| {
|
2020-02-09 21:15:10 +00:00
|
|
|
|
(inv_func(x) - alt_exp_min_uniform) / (alt_exp_max_uniform - alt_exp_min_uniform)
|
2020-01-22 14:31:10 +00:00
|
|
|
|
};
|
|
|
|
|
let rock_strength_div_factor = (2.0 * TerrainChunkSize::RECT_SIZE.x as f64) / 8.0;
|
2020-01-20 16:16:41 +00:00
|
|
|
|
let theta_func = |_posi| 0.4;
|
2019-12-03 01:07:44 +00:00
|
|
|
|
let kf_func = {
|
|
|
|
|
|posi| {
|
2020-01-18 18:41:37 +00:00
|
|
|
|
let kf_scale_i = k_fs_scale(theta_func(posi), n_func(posi)) as f64;
|
2019-12-03 01:07:44 +00:00
|
|
|
|
if is_ocean_fn(posi) {
|
2020-01-22 14:31:10 +00:00
|
|
|
|
return 1.0e-4 * kf_scale_i;
|
2019-12-03 01:07:44 +00:00
|
|
|
|
}
|
2020-01-11 19:53:58 +00:00
|
|
|
|
|
2020-01-18 18:41:37 +00:00
|
|
|
|
let kf_i = // kf = 1.5e-4: high-high (plateau [fan sediment])
|
2019-12-03 01:07:44 +00:00
|
|
|
|
// kf = 1e-4: high (plateau)
|
2019-12-03 18:14:29 +00:00
|
|
|
|
// kf = 2e-5: normal (dike [unexposed])
|
|
|
|
|
// kf = 1e-6: normal-low (dike [exposed])
|
2019-12-03 01:07:44 +00:00
|
|
|
|
// kf = 2e-6: low (mountain)
|
2019-12-11 09:14:50 +00:00
|
|
|
|
// --
|
|
|
|
|
// kf = 2.5e-7 to 8e-7: very low (Cordonnier papers on plate tectonics)
|
|
|
|
|
// ((1.0 - uheight) * (1.5e-4 - 2.0e-6) + 2.0e-6) as f32
|
|
|
|
|
//
|
|
|
|
|
// ACTUAL recorded values worldwide: much lower...
|
2020-01-18 18:41:37 +00:00
|
|
|
|
1.0e-6
|
|
|
|
|
;
|
|
|
|
|
kf_i * kf_scale_i
|
2019-12-03 01:07:44 +00:00
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
let kd_func = {
|
|
|
|
|
|posi| {
|
2020-01-18 18:41:37 +00:00
|
|
|
|
let n = n_func(posi);
|
|
|
|
|
let kd_scale_i = k_d_scale(n);
|
2019-12-03 01:07:44 +00:00
|
|
|
|
if is_ocean_fn(posi) {
|
2020-01-22 14:31:10 +00:00
|
|
|
|
let kd_i = 1.0e-2 / 4.0;
|
2020-01-20 16:16:41 +00:00
|
|
|
|
return kd_i * kd_scale_i;
|
2019-12-03 01:07:44 +00:00
|
|
|
|
}
|
2019-12-03 18:14:29 +00:00
|
|
|
|
// kd = 1e-1: high (mountain, dike)
|
2019-12-03 01:07:44 +00:00
|
|
|
|
// kd = 1.5e-2: normal-high (plateau [fan sediment])
|
|
|
|
|
// kd = 1e-2: normal (plateau)
|
2020-01-22 14:31:10 +00:00
|
|
|
|
let kd_i = 1.0e-2 / 4.0;
|
2020-01-18 18:41:37 +00:00
|
|
|
|
kd_i * kd_scale_i
|
2019-12-03 01:07:44 +00:00
|
|
|
|
}
|
|
|
|
|
};
|
2020-01-11 20:38:30 +00:00
|
|
|
|
let g_func = |posi| {
|
(See sharp/lod-history) LOD, shadows, greedy meshing, new lighting, perf
---
Pretty much a Veloren fork at this point. Here's a high level overview of the changes (will be added to CHANGELOG just before merge).
At a high level this MR incorporates roughly two groups of changes.
The first group consists of new game features: more flexible map sizes, level of detail terrain, shadow maps, and a new lighting
engine. This is "feature work" that (mostly) only adds new things to Veloren, and mostly shouldn't affect old stuff.
The second big group of changes are those addressing the fallout from all the new features. These include performance fixes of
various sorts: the addition of multiple graphics options and optimization of the cheap ones to avoid work, switching all voxel
models to use some variant of greedy meshing, switching over much of our CPU-side vector math to exploit SIMD instructions
(coinciding with a fork of `vek`), and a rewrite of how the UI handles text rendering (coinciding with updates to our fork
of `conrod`). Making Veloren's hardcoded colors appear correct under the new lighting engine also required considerably
changes (TODO: Fill in this section when it's complete).
The second category of changes often heavily touches code owned by other people, including frequently modified code "owned" by a
handful of people, so I recommend that this code be reviewed particularly carefully.
---
At a high level (each will be described in more detail below):
- The world map has been refactored.
- The world size is no longer hardcoded (@zesterer).
- The map generation code was made generic to allow using it outside of the `world` crate (@zesterer).
- On world creation, we now compute *horizon maps* (@zesterer).
- The way we pass the world from the server to the client has been updated (@xMAC94x).
- Artifacts related to image rotation were fixed (@imbris).
- Multiflow rivers were enabled (@zesterer).
- In the process of making changes related to the world map, various incidental fixes and optimizations were required.
- The new *level of detail* feature was added (@zesterer wrote part of this and has checked out the rest).
- A new LOD terrain rendering step was added to the pipeline.
- The LOD terrain quality was made configurable via a graphics setting.
- Horizon maps were used to cast shadows from LOD chunks on both LOD and non-LOD terrain.
- A "voxelization" effect was incorporated into rendered LOD terrain to make it blend better into the world.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Veloren's lighting has been completely overhauled (@zesterer has already checked most of this out).
- A semi-accurate index of refraction was assigned to our materials.
- A new, more realistic, physically based approach to lighting was used using the *Ashikhmin Shirley* BRDF.
- We emulate *atmospheric scattering* using equations designed for measuring solar panel light exposure.
- We attempt to compute *realistic light attenuation* in water using its real material properties.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Point and directional lights now cast realistic shadows, using *shadow mapping.* (@imbris, @zesterer, @Treeco, @YuriMomo)
- Point light shadow maps were added to the rendering pipeline, using geometry shaders and *seamless cube maps*.
- Directional light shadows were added to the rendering pipeline, using LISPSM together with disabling *depth clamping*.
- "Shadow-only" chunks and NPCs were added to prevent shadows from models behind you from disappearing.
- In the process of making changes related to shadow maps, various incidental fixes and optimizations were required.
The addition of shadow maps, LOD terrain, and the new lighting all led to significant performance degradation, on top of other
changes happening in master. Therefore, a large number of performance improvements were also needed:
- The graphics options were made much more flexible and configurable, and shaders were optimize.
- New options were provided for how to render lights and shadows (@Pfauenauge, @zesterer).
- Graphic setting storage and configuration were overhauled to make adding new features easier (@Pfauenauge, @imbris).
- Shaders were rewritten to utilize GLSL's preprocessor to avoid overhead (@zesterer, @YuriMomo).
- In the process of making changes related to providing additional rendering options, various incidental fixes and optimizations were required.
- Voxel model creation was switched to use *greedy meshing.*
- A new voxel meshing method, greedy meshing, was added (@imbris).
- Uses of the older meshing methods were migrated to use greedy meshing (@imbris, @jshipsey, @Pfauenauge).
- New restrictions were added to terrain, figure, and sprites to future proof them for further optimizations (@jshipsey, @Pfauenauge, @zesterer).
- Most positions are now relative to either chunk or player position for better precision (@imbris, @zesterer, @scottc).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- Animation and terrain math were switched to use SIMD where possible.
- Fixes were made to vek to make its SIMD feature usable for us (@zesterer, @imbris).
- The interface and types used in bone animation were changed in various ways (@jshipsey, @Snowram, @Pfauenauge).
- Redundant code generation for body animation is now partly taken care of by a macro (@jshipsey, @Snowram, @Pfauenauge).
- Animation code was modified to to use vek's SIMD representation where possible (@jshipsey, @Snowram, @Pfauenauge).
- Terrain meshing code and shadow map math were also modified to use vek's SIMD representation (@imbris).
- SIMD instruction generation was enabled (@YuriMomo, @jshipsey, @Snowram, @imbris, @Angelonfira, @xMAC94x).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- The way we cache glyphs was completely refactored, fixed, and optimized.
- Our fork of `conrod` was optimized in various ways (@imbris).
- Our fork of `conrod` now exposes whether a widget was updated during the current frame (@imbris).
- Our use of the glyph cache was rewritten for correctness (@imbris).
- A *text cache* was introduced that lets us skip remeshing glyphs that have not changed (@imbris).
- Various changes were made to reduce pressure on the glyph cache, with more planned (@imbris, @Pfauenauge).
- In the process of making changes related to the glyph cache, various incidental fixes and optimizations were required.
- Colors were changed to keep Veloren's look consistent with master.
- Some older tree models were brought back (@Pfauenauge).
- TODO(@Sharp): All hardcoded colors were extracted and made hotloadable.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Hardcoded colors were fixed to conform to Veloren's style.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Color models were fixed to conform to Veloren's style.
A detailed description of the involved changes follows.
---
- The world size is no longer hardcoded. All functions dependent on world size now take a `WorldSizeLg`, which holds the base 2 logarithm of each actual world dimension and is guaranteed to maintain certain properties (outlined in `common/src/terrain/map.rs`). Additionally, many utility functions that utilize the world size were moved into `common` as well (mostly `common/src/terrain/mod.rs`). Finally, the world map format was updated in order to store its size explicitly, with a migration path from the old format that should work whenever the old formatted map was a square (practically always). See `world/src/sim/mod.rs` for these changes.
- The map generation code was made generic to allow using it outside of the `world` crate. The parts of the map generating code that do not need to query the world were moved over to `common/src/terrain/map.rs`, allowing them to be used from the client without creating a dependency on `world`. The rest of it was turned into helper functions in `world/src/sim/map.rs`, which can be passed as closures to the generic map generation code to complete its construction. This also means that colors are now passed in separately to the map generation function. See <https://veloren.net/devblog-78/> for more details.
- On world creation, we now compute *horizon maps*. See the function in `world/src/sim/util.rs`.
Given a height map and a plane intersecting that height map, our horizon maps allow us to encode enough information to reconstruct shadows for each point on the height map using only the *horizon angle* (the angle at which the sun starts to become visible). As Veloren's sun only covers one plane, this is sufficient for encoding sun shadows for LOD terrain, by encoding two angles per chunk (one for each 90 degrees the sun covers). We can also use this for the moon, if we want, since the moon follows the same path. Additionally, we store the *height* of the furthest occluder, to try to make the shadows volumetric; so this means 4 bytes in total for each chunk.
Support for horizon maps has been merged into the map functionality in common as well.
- The way we pass the world from the server to the client has been updated. Rather than passing the prerendered map, we instead pass three maps with values for each chunk; one with the color information, a second with altitude information, and a third with horizon map information. We then reconstruct the map on the client, together with some additional information we send from the server (like the sea level and maximum height). See `common/src/msg/server.rs` for a detailed description of the format of `WorldMapMsg`, and `server/src/libr.rs` and `client/src/lib.rs` for details of the map construction and parsing.
- Artifacts related to image rotation were fixed. See the commit message for commit SHA `cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e` for a detailed explanation. This involved changes to shaders, the addition of a new type of graphic (also reflected in the graphic cache) that allows specifying a border color (which automatically makes the associated texture immutable), and some related fixes. I reproduce the first two paragraphs of the MR description as well:
```
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
```
- Multiflow rivers were enabled.
This does not really need to be part of this MR, and would be easy to revert, but since it seemed to provide a nice improvement it's currently packaged with it.
We already computed multiple outflows from each chunk for erosion purposes long before this MR.
However, we never modified river rendering to be able to handle this case (just a single downhill river flow is complex enough!) so this was not exposed when deciding which chunks were rivers.
Now that
- In the process of making changes related to the world map, various incidental fixes and optimizations were required. Some examples of fixes include making sure terrain is never lowered to below sea level (to make the shadow maps report correct values), fixing map altitudes and colors to understand things like cliffs and "block level" coloring (that doesn'te xist on the column level), and fixing a crashbug when rendering images for the UI where source pixels are strongly rectangular. Some examples of related performance fixes include avoiding allocating a fresh vector for all the maps (i.e. copying it over to change the format from `[u32; n]` to `DynamicImage` and then copying again to convert to `RgbaImage`), and instead using the `gfx::memory::slice` function to accomplish the same thing. These sorts of changes are spread all arond the code.
This includes the additon of a new scene, `voxygen/src/scene/lod.rs`, a new pipeline `voxygen/src/render/pipeline/lod_terrain.rs`, and new shaders `assets/vxygen/shaders/lod-terrain-vert.glsl` and `assets/vxygen/shaders/lod-terrain-frag.glsl`, as well as associated changes to the renderer in `voxygen/src/render/renderer.rs`.
The main idea behind our initial approach to LOD was to take the world data we now get from the server (altitude, color, and horizon mapping).
- Some previously computed values were turned into shader uniforms for better prediction on weak processors. (@zesterer)
- Calls to power or trig functions were removed or replaced with multiplications, where possible.
- After some deliberation
- To properly handle sprite "waving" for nearby sprites,
We explicitly designed the greedy meshing system with figures and sprites in mind.
In both cases, we want to be able to *efficiently* pack many different models into the same texture, especially in cases where we know
we will either not be removing any of the grouped-together from the models from the texture, or will remove all of them at once (so
they can be packed into some specific subtexture).
For sprites, since we know every model in advance and never intend to deallocate them, we currently pack them all as efficiently as
possible into one giant tetxure atlas. However, in the future we might opt to pack them slightly less efficiently in exchange for
shrinking the sprite vertex size.
For figures, we pack all the textures for each *model* into the same atlas.
is a global texture atlas used for every sprite, and for figures which is why we have the ability to mesh multiple
models to the same texture area (using the simple texture atlas allocator) without requiring intermediate vector allocations.
This is accomplished by delaying the time when we actually write the color and light data to the texture until *after* all the
model vertices have been meshed; then, we can just allocate the whole color/light array at once, making the atlas we use an
exact fit. In computer science-y terms, we accomplish this delay by, after we perform the initial greedy meshing (without
texture information), not continuing to create the texture data, but instead constructing a *continuation*--that is, a function
that, when called, will execute the rest of the computation. We push this continuation (which in Rust terms is a `FnOnce` closure
that takes the `ColLightsInfo` that it is supposed to write to as context) onto a
onto a vector
resizing. To allow for suspended writes to texture data, Rust pointed out to me that the continuation that would eventually write the color and light data to the texture atlas (the one that is shared by all models sharing the same greedy mesher) would have to *own* whatever data it mshed. Because we often generate the model data to mesh as a temporary in `voxygen/src/load.rs`, the
- Matrix multiplications in the shader were reduced for figure data (@zesterer).
- Vertex "waves" for fluid data were removed.
- Terrain "bending" near edges was removed.
- Scaling was fixed to make sure empty space was not introduced in a space previously occupied by a block. It was also changed to take ownership of its voxel data,
rather than sharing it, to let it be used with meshing.
- Rust's nightly version was bumped in order to use the `array_map` function, which lets us reuse more code between the simple map and `FigureModelCache`.
- PositionedGlyph::standalone.
---
I tried to cite sources in many cases[^realtime],[^lloyd],[^lispsm],[^pbrt],[^greedy],[^tjunctions]
where I needed features from elsewhere but I am particularly grateful for the following resources,
esepcially where they have accompanying source code. I linked all of them that are accessible to the public (those that are not were
obtained through legal means).
[^realtime]: Eisemann, Elmar, Michael Schwarz, Ulf Assarsson, Michael Wimmer. Real-Time Shadows. A K Peters/CRC Press (T&F), 20160419.
[^lloyd]: Lloyd,B. 2007. [Logarithmic perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). PhD thesis, University of North Carolina.
[^lispsm]: Wimmer, M., Scherzer, D., and Purgathofer, W. 2004. [Light space perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). In Proceedings of Eurographics Symposium on Rendering 2004, pp. 143– 152.
[^pbrt]: Pharr, Matt, et al. [http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf](Physically Based Rendering: From Theory to Implementation). Third edition, Morgan Kaufmann Publishers/Elsevier, 2017.
[^greedy]: mikolalysenko. “Meshing in a Minecraft Game.” 0 FPS, 30 June 2012, <https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/>.
[^tjunctions]: blackflux. “Meshing in Voxel Engines – Part 1.” Blackflux.Com, 23 Feb. 2014, <https://blackflux.wordpress.com/2014/02/23/meshing-in-voxel-engines-part-1/>.
I am also especially grateful to Khronos, Wikiepdia, and stackoverflow for answering many of my specific questions while writing the MR.
---
Squashed commit of the following:
commit 300505e7305a2fdac722a808ee8538323f215f39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 18:46:25 2020 +0200
Fixing cargo doc and typo in CHANGELOG.
commit ec0aeb18e8499d7d84ef818331b4b65c3d76cea6
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 15:38:50 2020 +0200
Hopefully final commit for the LOD branch.
commit 5e8ea0b1eaac02903a02feb2eb038d195de4872f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 10:14:26 2020 +0200
Falling back to power as stopgap.
commit e44a1cbf46504ee9931a01bdc9033e145500d557
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 09:25:41 2020 +0200
Address imbris feedback.
Temporarily disables shiny water, lowers max VD.
These restrictions will be lifted soon after merging.
commit 561e25778a108ac3712f5ec2ce3a51234c4430d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 08:31:13 2020 +0200
Tweaking shaders a bit.
commit 7d19259078ce0dd7b3742ad7d0cb3fab3ece3fdc
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:59:43 2020 +0200
Fix view example as well.
commit 051cd4934e0fad2c0b15db4380a4189fa318679f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:29:06 2020 +0200
Fix meshing benchmark.
commit c95e07db3b4dcca285678985e65e31b927cb1c61
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 05:46:22 2020 +0200
Address MR feedback, fix scene clouds.
commit 1bfb816cabdb3ffc1e507a009c2d98696b4b573a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:39:36 2020 +0200
Incorporating Pfau's figure color changes.
New eyes and new humanoid colors.
commit 3f9b89a3ac7b3356b1dba0d1a8f6541357f81469
Merge: e2f5162e4 62c53963a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:29:41 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit e2f5162e4f96f4124aa43488f7245d341b3dcfd4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:28:38 2020 +0200
World colors are all hotloadable.
They live in assets/world/style/colors.ron.
Only a small handful of hardcoed colors remain in World; they are either
part of the map, or difficult to disentangle from the rest of the
computation. Comments are made where appropriate.
commit 62c53963abe1975009d34a8f9515a355bef24f31
Author: Marcel Märtens <marcel.cochem@googlemail.com>
Date: Wed Aug 19 15:59:00 2020 +0200
replace pretty_env_logger with tracing
commit 5b1625f99d9586fe80e2232f583ec5af9f953099
Merge: d71003acd 4942b5b39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:15:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit d71003acdabeff970b3928e97c26af6847b5b78e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:14:34 2020 +0200
Hotloading colors, part 1: colors in common.
Currently, this just entails humanoid colors. There are only three
colors not handled; the light emitter colors in
common/src/comp/inventory/item/tool.rs. These don't seem important
enough to me to warrant making hotloadable, at least not right now, but
if it's needed later we can always add them to the file.
commit 63b5e0e553eb2ea49276f192a6fc7dd65254270d
Merge: c32b337a4 6d2c4b9c1
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 13:05:37 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c32b337a46e10d9de473d178a94a3ccd61c39bb3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:52:04 2020 +0200
Fixing LOD grid, for real.
commit a166ae0360395387e09fb35a1f84210c2ce5ec24
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:28:05 2020 +0200
Addressing imbris's initial feedback.
Fixes two minor bugs: explosion particles were no longer spawning
randomly, and LOD grids were not perfectly even.
commit 4cbad004f44060994252dd3d38647a14a589712f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:27:58 2020 +0200
Bumping nightly per request.
commit 548680276aac77c25d43d16b5622f847d474dbef
Merge: acc098604 8f8b20c91
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:26:06 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit acc0986040589a3492f88a740bc3c3fc693b26d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:28:32 2020 +0200
Lower resolution due to lying drivers.
commit d3b878de2a52c358d2944a6bbd0555dad7fbdb10
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:15:38 2020 +0200
Fix issues msh encountered with Intel 4600.
commit 10245e0c1b0cb6fae10d86409435364edc6102ef
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 21:15:02 2020 +0200
Merge more models into one mesh than we did previously.
commit 3155c31e663c52ae5c3a53d5fb5665892a1a498a
Merge: 7204cc8a7 3c199280e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:35:22 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7204cc8a7a4f74a30306bd205d9834fee4bb944f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:34:43 2020 +0200
Fix not yet done NPC animations.
This forces them all to be the idle animation if not specified.
This fixes issues where you'd have giant NPCs in water.
commit bc83360f2a08918f19d417b5f772e1ff554dba08
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 19:36:37 2020 +0200
Try to fix some bugs:
- Z fighting with LOD terrain and water.
- Audio SFX not playing.
commit 1fd104aa603bf3781b6526a5cada46aeca3049dd
Merge: 862df3c99 7c2c392a3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 12:02:31 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 862df3c9976c4da9bd7cfd784f1a85973127968a
Merge: 0a4218ed9 75c1d4401
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 05:52:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0a4218ed9d541a2b34c133351bea38a99ddf4ea7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 22:27:14 2020 +0200
Fix particle depth.
commit f51dfdeb442d0dd5243dd2f344fa4be295bd0875
Merge: c6251a956 5e6dc0471
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:19:04 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit c6251a956ad376400dca5c23420cf8d213dc8fdf
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:15:46 2020 +0200
Cache figures more intelligently.
Cache figures for longer, and don't cache character states for the
player except where they actually affect the rendered model.
commit 0ed801d5404982c6fb63b1eaa4567d908b294c9d
Merge: c11b9bdf0 eea64f78f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 16:32:24 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c11b9bdf0a53bf9884d2f5a48fec9b01d582df1a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 11:47:15 2020 +0200
Remove unneeded Clippy annotation.
commit 16aa9ef40af56d69289d00aafb3deadfb8bd4f35
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 8 00:53:02 2020 +0200
Fix hotloading and Clippy.
commit 3dc973e0be5b758da1e9805eb764ad401374cd0c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 23:50:27 2020 +0200
Major speedups with SIMD.
commit fba64a7d93d5a96077ce87287bbce6ab9b7fbcae
Merge: 76429d00e d1e10b178
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:19 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 76429d00eea00d212fbd672a84ee91e75b19b938
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:10 2020 +0200
Add clippy.toml.
commit c79f512f84dbb83cb82b7954db68ff241dfd8e41
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 11:55:20 2020 +0200
Fix all clippy issues, clean up Rust code.
commit 6f90e010b3fbefb53b0d632e819931350015b6b8
Merge: 77a8c7c26 5929cfa5c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:30 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 77a8c7c267d3f44a1a62bd6b2274359973c5e4d4
Merge: b44e44232 44febaabd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:10 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 5929cfa5c713aa392110bbb62407f76caf53c3df
Author: jshipsey <jshipsey18@gmail.com>
Date: Thu Aug 6 20:47:27 2020 -0400
fixed in-hand arrow bug
commit b44e442325d828f1cd564d66908f89d09e80474b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 6 13:40:35 2020 +0200
Miscellaneous performance improvements.
commit be37acf287c1360d8085862526ac3365ffd1d768
Merge: 125d7fc6c c11876547
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 05:49:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 125d7fc6c4dcd8c8c5f27b8268a4d64f409f3644
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 04:55:31 2020 +0200
Abstract over simd vs. repr_c vectors.
Also some minor improvements to Event size.
commit d4d4956e9252e1241ce110b2aa85076c6b1e2a23
Merge: 5f3b7294a aced5f979
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:56:54 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 5f3b7294af1f8533edc2620b58863c248e2b07af
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:43:52 2020 +0200
Fix formatting issues I missed before.
commit a428a3ebba70dcab63dd0f8cd983120c90617271
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:41:51 2020 +0200
Fix clippy warnings, part 1.
There aer still a bunch of type too complex and
function takes too many arguments warnings that I'll fix later
(or ignore, since in the one case I did fix a function takes too
many arguments warning I think it made the code *less* readable).
commit ba54307540ed8a937ac08209730284fc653af85b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 30 13:22:42 2020 +0200
Fix light animations so they are removed when the light turns off.
commit 7e0f4bcbf0f4717145d8beac40d52e3acebbe2aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 21:10:20 2020 +0200
Fix crash in edge case for pixel art.
commit 56da06f7a351e2b949e9b014a90b974d511a0924
Merge: cf74d55f2 9f53a4a19
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:56:52 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:29:52 2020 +0200
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
The first concern was addressed by fixing the dimensions of the map
images drawn from the UI (so that we always use a square source
rectangle, rather than a rectangular one according to the dimensions of
the map). We also fixed the way rotation was done in the fragment
shader for north-facing sources to make it properly handle aspect ratio
(this was already done for north-facing targets). Together, these fix
rendering issues peculiar to rectangular maps.
The second and third concerns were jointly addressed by adding an
optional border color to every 2D image drawn by the UI. This turns
out not to waste extra space even though we hold a full f32 color
(to avoid an extra dependency on gfx's PackedColor), since voxel
images already take up more space than Optiion<[f32; 4]> requires.
This is then implemented automatically using the "border color"
wrapping method in the attached sampler.
Since this is implemented in graphics hardware, it only works (at
least naively) if the actual image bounds match the texture bounds.
Therefore, we altered the way the graphics cache stores images
with a border color to guarantee that they are always in their own
texture, whose size exactly matches their extent. Since the easiest
currently exposed way to set a border color is to do so for an
immutable texture, we went a bit further and added a new "immutable"
texture storage type used for these cases; currently, it is always
and automatically used only when there is a specified border color,
but in theory there's no reason we couldn't provide immutable-only
images that use the default wrapping mdoe (though clamp to border
is admittedly not a great default).
To fix the maps case specifically, we set the border color to a
translucent version of the ocean border color. This may need
tweaking going forward, which shouldn't be hard.
As part of this process, we had to modify graphics replacement to
make sure immutable images are *removed* when invalidated, rather
than just having a validity flag unset (this is normally done by
the UI to try to reuse allocations in place if images are updated
in benign ways, since the texture atlases used for Ui do not
support deallocation; currently this is only used for item images,
so there should be no overlap with immutable image replacement,
so this was purely precautionary).
Since we were already touching the relevant code, we also updated
the image dependency to a newer version that provides more ways
to avoid allocations, and made a few other changes that should
hopefully eliminate redundant most of the intermediate buffer
allocations we were performing for what should be zero-cost
conversions. This may slightly improve performance in some
cases.
commit ad18ce939940a8c697270f6e9b94db9942fd8295
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 13:21:09 2020 +0200
Fix continent scale hack.
commit 36b1cb074f5b195aebd7dbbc3da7f0246a1a18ec
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 12:11:40 2020 +0200
Enable loading different sized maps without a recompile.
We may want to tweak the effects of the continent_scale_hack.
commit 13b6d4d534cc4814b7cb3294ca41bbfea0a6b186
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 10:55:48 2020 +0200
Removing WORLD_SIZE, part 1.
Erased almost every instance of WORLD_SIZE and replaced it with a local
power of two, map_size_lg (which respects certain invariants; see
common/src/terrain/map.rs for more details about MapSizeLg). This also
means we can avoid a dependency on the world crate from client, as
desired.
Now that the rest of the code is not expecting a fixed WORLD_SIZE, the
next step is to arrange for maps to store their world size, and to use
that world size as a basis prior to loading the map (as well, probably,
as prior to configuring some of the noise functions).
commit 30b1d2c6428230a9eaa0d749cdcbbd6f1cbccd78
Merge: 7d56ba31b 1377b369f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:58 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 7d56ba31b445441461b28a07fc495d7d4f047c17
Merge: 2101113b4 598f14b25
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 1377b369f6db2258e910d467a5740f31789e3ded
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sun Jul 19 23:25:38 2020 +0200
more saturated pumpkins
commit ae8d50527f93bb0616c2ad46ce4dacb63bc37c6d
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sat Jul 18 20:29:56 2020 +0200
acacia models
commit 2101113b467e691de787392d7f20f1745f5637bd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 18 18:55:25 2020 +0200
Higher detail LOD.
commit add2cfae04b4385fa5590e11e2bd5229d9dee0aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 16 01:57:39 2020 +0200
Revert some irrelevant stuff.
commit 2e2ab3dc1eaa59a4aef7f8d34a53d8aae4c8553a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 15 13:30:49 2020 +0200
Fixing various things about shadows.
* Correcting optimal LISPSM parameter.
* Figure shadows are cast when they're not visible.
* Chunk shadows stay cast until you look away.
* Seamless cubemaps for point lights.
* Etc.
commit 6c31e6b56217274285b597af297036691ea5d897
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 19:50:26 2020 +0200
Fix shadow creation.
commit 6332cbe006115ae205597529cd8bbccd146c2cca
Merge: be438657c 930e0028b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:47:00 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit be438657c33d7b5bfb0a9582c3ed3fd366637323
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:28:08 2020 +0200
Tweaks to shadows.
Added shadow map resolution configuration, added seamless cubemaps,
documented all existing rendering options, and fixed a few Clippy
errors.
commit 23b4058906013c7d2a40c286e20e32c5fbd897ed
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 10:11:19 2020 +0200
Fix moon, use nonlinear noise for terrain.
Note that the latter has a bit of performance cost.
commit 7fbe5cbfbb9dc29607957b8e62f432a4deed193d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:23:02 2020 +0200
Address lies about max texture size.
commit bcfc62b5e13a1cdd83f57535fde4694720bebfd9
Merge: 75e3626a7 18a08e8fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:22:08 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 75e3626a785919f43fdcf2127c2b10e3e4df2f9f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:21:52 2020 +0200
OpenGL 3.3 minimum.
commit 18a08e8fe2739f02af99a5d2cb4e7c38c49e858b
Author: Monty Marz <m.marzouq@gmx.de>
Date: Tue Jul 7 23:57:52 2020 +0200
settings localization
commit 90c5d1ca3620092bc3ae10b2211489eb1cf6f5e8
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 21:11:48 2020 +0200
Lower near distance.
commit 0e66f02b25aaddaa2dfddbbc89cd67de54a9a7b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 20:09:01 2020 +0200
All sprites sway in the wind now.
commit db1401a6910bf42dcf502462c90038752ff5fbdb
Merge: 69e508d8c e8b4b29d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 19:34:17 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 69e508d8c94d8973033817ca86f357e466fc7c4d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 18:41:37 2020 +0200
Make it easy to switch to SIMD for math.
commit ffe0f5928c7a7e87d00cb5426b3b1d831d7e02fd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 21:21:12 2020 +0200
Fix some issues with underwater rendering.
commit bfda6da42f38fd02c31ee92c81ab785a3e50c2a0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 19:17:59 2020 +0200
Fix some minor display issues.
commit 0ed752e087968cf901301884aaeae698e32ef8a5
Merge: ccc6a06a8 518edcb85
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:14:21 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit ccc6a06a8d4504d6b9f7af7905a414d2ee06ab76
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:04:34 2020 +0200
Some minor changes.
commit 4e020246702889269efe1a191788992164c508d6
Merge: 50a64d927 e05c9267a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 16:17:40 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 50a64d927e6c4f4b0e4688e4cbfca694bc3f922a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 13:07:03 2020 +0200
Fix far plane.
commit 7dd06da34cae8f9ea3b6c889fe965181f3fd3949
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:25:35 2020 +0200
Add shadows.glsl.
commit 618a18c998778bf871b905a74657440fcc384c80
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:10:22 2020 +0200
Adding shadows, greedy meshing, and more.
commit eaea83fe6a5cb1cb0ba8beef888183c718258496
Merge: 267018495 2f89b863e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 22:47:07 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 2670184954a13e4a9e7a4e35ba79aac0c5fac2f7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 21:20:01 2020 +0200
Make civsim and sites deterministic.
For anything in worldgen where you use a HashMap, *please* think
carefully about which hasher you are going to use! This is
especially true if (for some reason) you are depending on hashmap
iteration order remaining stable for some aspect of worldgen.
commit f8376fd5dc72b4a9c2f51a6b4570d59c8b8e9343
Merge: 654f7e049 cdee191dd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 17:53:57 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 654f7e049258d9da27c09608bbe6a46ffa8787e5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed May 20 21:22:30 2020 +0200
Correct backface culling.
commit 560501df05ca725409b0f2e4eb31bdfdc15fd0c7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue May 19 17:22:06 2020 +0200
Greedy messhing for shadows.
commit a4d87e1875ca543436e6bbbeb20348facc5a52d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun May 17 05:59:00 2020 +0200
Shadow maps work for lantern.
commit 243d0837b8a3b08172c9a3c348d964d7ddc2a0a8
Merge: 04382dc28 71dd520cd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:53:13 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 04382dc28632b6c66e8821f6870c0daaa1c1901a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:22:17 2020 +0200
WIP: better graphics config, better LOD, shadow maps.
commit 22ddbad3eb32bfa70f0932176022208fe67ded81
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 18:54:09 2020 +0200
Minor shader fixes.
commit 746a10e8d01ac235f994b0cde78fa48998602a1f
Merge: 0f4a0e763 40ab94673
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 04:02:09 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0f4a0e763db3afbdc4fb0558611f38326ca87151
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 23:03:24 2020 +0200
Switch back to pop-in terrain.
commit dd74fa7e4a53667b38811d7aec58d7f6a68889bb
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 22:58:55 2020 +0200
LOD shading closer to voxel shading.
commit ef67bd58ba0bdaf622b078892d768263b6cba268
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 28 20:49:03 2020 +0200
Experimental underwater lighting.
commit 2c5ad9d07605e80d5fd5679dd3a5d70c605b86a9
Merge: 748279835 303967a6f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 22:35:24 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7482798354eda18c8207950080fc24d443a369de
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 21:59:55 2020 +0200
Replace discard in figure-frag.
commit d83b4ae69be4912f69bf7835f509c68a1c7770a4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:45:57 2020 +0200
Fix sprite lighting, HDR from focus_pos.
commit 0594238004f116274905fa0ed7c2b6c417ed1d29
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:14:10 2020 +0200
Proper HDR from point lights.
commit 48c93d2b41ce5743103d18e76cc228f5ac766492
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 14:01:43 2020 +0200
Brighter ambiance, darker LOD shadows.
commit e0452e895ccfa8a43f368cae3b8b8aedc24dad93
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 13:13:23 2020 +0200
More proper HDR.
commit 4c6da3ed16cfeebb455e40da5f557b4af9a499d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 00:13:10 2020 +0200
Trying LOD noise.
commit 682a3d74c85df5503ffe1fc1cc891bce789df1ad
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 23:11:08 2020 +0200
Fix LOD heights in towns.
commit cc39e5734e8b18f9077bf42e66337c1319dd6b6e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 21:01:23 2020 +0200
More LOD fixes.
commit 8116b21c2e51c836e77894e309ac273caf2917b3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:54:43 2020 +0200
I like this coloring.
commit bc2560ea90b36f4b46190005344232d993043ac3
Merge: 14effdd5d e690efe71
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:48:33 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 14effdd5db8747fcf3eb34f03b46b7792e92d1c5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:24:35 2020 +0200
Re-saturate.
commit 48a643955d4435b78179acba0beb4a979905cc31
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:23:57 2020 +0200
Various fixes.
commit f7b497a0c25f4ad4682c71dd1ed6f608052feb9b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 03:22:49 2020 +0200
Render figures again.
commit 44e4aad48deba8266b9f8bdfd3db096b381f5327
Merge: e6f0a5a98 9ec319a18
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 02:01:04 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit e6f0a5a981a82533ba188fff0a54ce98577bb152
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 24 16:12:20 2020 +0200
Add atmospheric scattering.
commit f2953087f691a8edbc001cb98ebf5059fc6f8ac0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 23 00:01:20 2020 +0200
Fix shadowing for specular reflections.
commit ddd4a67a9799b8d08c7dc0c2bec90621c2bed0e3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Apr 22 22:56:12 2020 +0200
HDR fixes.
commit 1015e60deef3c447381996277df7496707a63bd0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 21 18:25:19 2020 +0200
More lighting changes.
commit 80c264abd111fb237e57843efcb5c071d4f84613
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 13 00:29:59 2020 +0200
Lighting experiments.
commit 8414987e589dd5102bad89762a3adaccc0bfe957
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 9 02:38:40 2020 +0200
WIP -- lighting changes and soft shadows.
commit 9cd2b3fb0d6b49776c6dfe463e4169637250b11a
Merge: c7ea687eb 8b149ad11
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:29 2020 +0200
Merge branch 'sharp/new-lighting' into sharp/small-fixes
commit c7ea687ebbc5aace1b455f134a5bf49ce2c7434a
Merge: 476441531 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:02 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 8b149ad11ad4bb75018fcf9519baec27d1c95951
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:32:39 2020 +0200
Trying out a new lighting model.
commit b0ac9f36f755dd06f7c17c46150568064790864f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 07:56:11 2020 +0200
Use bicubic interpolation for terrain.
commit f6fc9307a121514b614bc50ef8eb055953e7da8a
Merge: 33140a295 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 05:01:41 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 4764415312aae6e9ac2d00e86e84577cb958f1ab
Merge: ed2d0111d 13388ee6a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 04:54:48 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 13388ee6a42943f3f79a9cb488346cef18e272fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 20:30:08 2020 +0200
Various fixes (to coloring and to soft shadows).
commit fbd084a94a067082a87cd6d28b82054709bc9265
Merge: 5a089863b 4fdf6896a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 18:50:38 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/map-colors
commit ed2d0111d994262ae836d84d1fe5a45e4de72a0b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 06:49:27 2020 +0200
Combining colors and LOD.
commit 88342640c6b835114d01c797b89fdede3b0a2108
Merge: 33140a295 5a089863b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:49:20 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 33140a2951b8212725f42c758b277aaec4d888f7
Merge: 4c65a5aed f34d4b379
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:36:21 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 5a089863beb01d4794bbe3580ada47b278715ea2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 03:17:49 2020 +0200
Making maps brighter.
This is probably not the right way to do it, but oh well!
commit 32b2c99109dd486aa922886081068f9c550c83f2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 02:46:36 2020 +0200
Horizon mapping and "layered" map generation.
Horizon mapping is a method of shadow mapping specific to height maps.
It can handle any angle between 0 and 90 degrees from the ground, as
long as know the horizontal direction in advance, by remembering only a
single angle (the "horizon angle" of the shadow map). More is explained
in common/src/msg/server.rs. We also remember the approximate height of
the largest occluder, to try to be able to generate soft shadows and
create a vertical position where the shadows can't go higher.
Additionally, map generation has been reworked. Instead of computing
everything from explicit samples, we pass in sampling functions that
return exactly what the map generator needs. This allows us to cleanly
separate the way we sample things like altitudes and colors from the map
generation process. We exploit this to generate maps *partially* on the
server (with colors and rivers, but not shading). We can then send the
partially completed map to the client, which can combine it with shadow
information to generate the final map. This is useful for two reasons:
first, it makes sure the client can apply shadow information by itself,
and second, it lets us pass the unshaded map for use with level of
detail functionality.
For similar reasons, river generation is split
out into its own layer, but for now we opt to still generate rivers on
the server (since the river wire format is more complicated to compress
and may require some extra work to make sure we have enough precision to
draw rivers well enough for LoD).
Finally, the mostly ad-hoc lighting we were performing has been (mostly)
replaced with explicit Phong reflection shading (including specular
highlights). Regularizing this seems useful and helps clarify the
"meaning" of the various light intensities, and helps us keep a more
physically plausible basis. However, its interaction with soft shadows
is still imperfect, and it's not yet clear to me what we need to do to
turn this into something useful for LoD.
commit f8926a5737ddc51f3d585c651a64c43677aae0f4
Merge: a1aee931e 875ae6ced
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Mar 13 13:32:42 2020 +0100
Merge remote-tracking branch 'origin/master' into sharp/map-colors
commit 4c65a5aed353b119aea65a2aaeb94549b67beb42
Author: Treeco <5021038-Treeco@users.noreply.gitlab.com>
Date: Mon Feb 24 16:48:05 2020 +0000
Made LOD setting slider exponential
commit 2fa7b2d20d7233dc8bfd64f9f7f54617575248f1
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 17:49:53 2020 +0000
Added mist to LoD
commit aab059a450b5f635777129ff82cc15b662965c3c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 15:14:06 2020 +0000
Added LoD slider
commit 779c36b538121c5ade3633ae5cb67bb14c8c3877
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:54:55 2020 +0000
Reduced cost of vertex pushing
commit 9fea150473906b166365b738ebcea07c697daf3d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:38:53 2020 +0000
Fixed maths, improved LoD resolution
commit 5481df38fea5bf183ff376a3337179cfaa5233dc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 11:22:50 2020 +0000
Dynamically relocate LoD vertices to enhance details
commit a3e36a50ababd615da7db1b26158c7906a5def01
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 18:13:51 2020 +0000
Simpler terrain spiral rendering
commit 255f450ae9ac8763db4bede075fb409161ed57cc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:53:17 2020 +0000
Better LoD precision
commit 3d027aebe812a5b8658a4eb8123dc9f61b3776d2
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:04:03 2020 +0000
Better falloff
commit be775c9484b457b2c0b1a494aec03392d0c70e76
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 15:30:45 2020 +0000
Applied good ideas from experimental branch
commit 58587b68545a23c5c04ab4574a4b94b3bc982246
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 16:15:13 2020 +0000
Minor fixes to LoD merging
commit 7b42aebd709c14df2db766aad61d9280ad24d84d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 15:04:44 2020 +0000
Capped LoD dragging
commit 8aafc559f87124e1ea5ca6e3ddc2aa0c242d793c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:54:37 2020 +0000
Better blending between LoD and terrain border
commit edd3455d5161792d87ddc8eadc0ecbad5532b284
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:40:19 2020 +0000
Fixed LoD z depth, added sea level offset
commit b9b06744620114dd5556e73f64fa93c145503a7c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:27:43 2020 +0000
Better LoD smoothing
commit a1aee931e790431560cd2d953ad61d9497072afd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Feb 21 14:52:17 2020 +0100
Adding shadows.
commit 2400786c13dd891c131ed86d48d05df516a8a778
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 13:48:40 2020 +0000
Use world map as LoD source
commit dbf650f504a4c25fbbc2096ac3616c736bf52d23
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Jan 20 00:48:14 2020 +0000
Better clouds at distance
commit 5e6f81b86cdb9730b9b056877b19257075fd5fa8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Jan 19 23:59:02 2020 +0000
sync
commit 745e7540ddb000cc645f612767b337c2ddc3f7c0
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 12:40:48 2019 +0000
Improved cloud falloff mist, faster noise sampling
commit f6a200d0cb866196ba57697466755f9e0c7ea5d8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 10:09:00 2019 +0000
Improved long-range depth precision, removed unnecessary LoD polygons
commit 63d1b2bb2292898d59fb4f4e502201103dfeb86f
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 20:57:46 2019 +0000
Working LoD shader
commit f13d98ee3e58f881e8b978861a67663b59ed91ec
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 11:03:40 2019 +0000
LoD first attempt (stack overflow issue)
2020-08-20 18:34:59 +00:00
|
|
|
|
if map_edge_factor(map_size_lg, posi) == 0.0 {
|
2020-01-11 20:38:30 +00:00
|
|
|
|
return 0.0;
|
|
|
|
|
}
|
|
|
|
|
// G = d* v_s / p_0, where
|
|
|
|
|
// v_s is the settling velocity of sediment grains
|
|
|
|
|
// p_0 is the mean precipitation rate
|
|
|
|
|
// d* is the sediment concentration ratio (between concentration near riverbed
|
|
|
|
|
// interface, and average concentration over the water column).
|
2020-02-01 20:39:39 +00:00
|
|
|
|
// d* varies with Rouse number which defines relative contribution of bed,
|
|
|
|
|
// suspended, and washed loads.
|
2020-01-11 20:38:30 +00:00
|
|
|
|
//
|
2020-02-01 20:39:39 +00:00
|
|
|
|
// G is typically on the order of 1 or greater. However, we are only guaranteed
|
|
|
|
|
// to converge for G ≤ 1, so we keep it in the chaos range of [0.12,
|
|
|
|
|
// 1.32].
|
2020-01-11 20:38:30 +00:00
|
|
|
|
1.0
|
|
|
|
|
};
|
2020-01-11 21:05:22 +00:00
|
|
|
|
let epsilon_0_func = |posi| {
|
2020-02-01 20:39:39 +00:00
|
|
|
|
// epsilon_0_scale is roughly [using Hack's Law with b = 2 and SPL without
|
|
|
|
|
// debris flow or hillslopes] equal to the ratio of the old to new
|
|
|
|
|
// area, to the power of -n_i.
|
2020-01-18 18:41:37 +00:00
|
|
|
|
let epsilon_0_scale_i = epsilon_0_scale(n_func(posi));
|
2020-01-11 21:05:22 +00:00
|
|
|
|
if is_ocean_fn(posi) {
|
|
|
|
|
// marine: ε₀ = 2.078e-3
|
2020-01-22 14:31:10 +00:00
|
|
|
|
let epsilon_0_i = 2.078e-3 / 4.0;
|
|
|
|
|
return epsilon_0_i * epsilon_0_scale_i;
|
2020-01-11 21:05:22 +00:00
|
|
|
|
}
|
(See sharp/lod-history) LOD, shadows, greedy meshing, new lighting, perf
---
Pretty much a Veloren fork at this point. Here's a high level overview of the changes (will be added to CHANGELOG just before merge).
At a high level this MR incorporates roughly two groups of changes.
The first group consists of new game features: more flexible map sizes, level of detail terrain, shadow maps, and a new lighting
engine. This is "feature work" that (mostly) only adds new things to Veloren, and mostly shouldn't affect old stuff.
The second big group of changes are those addressing the fallout from all the new features. These include performance fixes of
various sorts: the addition of multiple graphics options and optimization of the cheap ones to avoid work, switching all voxel
models to use some variant of greedy meshing, switching over much of our CPU-side vector math to exploit SIMD instructions
(coinciding with a fork of `vek`), and a rewrite of how the UI handles text rendering (coinciding with updates to our fork
of `conrod`). Making Veloren's hardcoded colors appear correct under the new lighting engine also required considerably
changes (TODO: Fill in this section when it's complete).
The second category of changes often heavily touches code owned by other people, including frequently modified code "owned" by a
handful of people, so I recommend that this code be reviewed particularly carefully.
---
At a high level (each will be described in more detail below):
- The world map has been refactored.
- The world size is no longer hardcoded (@zesterer).
- The map generation code was made generic to allow using it outside of the `world` crate (@zesterer).
- On world creation, we now compute *horizon maps* (@zesterer).
- The way we pass the world from the server to the client has been updated (@xMAC94x).
- Artifacts related to image rotation were fixed (@imbris).
- Multiflow rivers were enabled (@zesterer).
- In the process of making changes related to the world map, various incidental fixes and optimizations were required.
- The new *level of detail* feature was added (@zesterer wrote part of this and has checked out the rest).
- A new LOD terrain rendering step was added to the pipeline.
- The LOD terrain quality was made configurable via a graphics setting.
- Horizon maps were used to cast shadows from LOD chunks on both LOD and non-LOD terrain.
- A "voxelization" effect was incorporated into rendered LOD terrain to make it blend better into the world.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Veloren's lighting has been completely overhauled (@zesterer has already checked most of this out).
- A semi-accurate index of refraction was assigned to our materials.
- A new, more realistic, physically based approach to lighting was used using the *Ashikhmin Shirley* BRDF.
- We emulate *atmospheric scattering* using equations designed for measuring solar panel light exposure.
- We attempt to compute *realistic light attenuation* in water using its real material properties.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Point and directional lights now cast realistic shadows, using *shadow mapping.* (@imbris, @zesterer, @Treeco, @YuriMomo)
- Point light shadow maps were added to the rendering pipeline, using geometry shaders and *seamless cube maps*.
- Directional light shadows were added to the rendering pipeline, using LISPSM together with disabling *depth clamping*.
- "Shadow-only" chunks and NPCs were added to prevent shadows from models behind you from disappearing.
- In the process of making changes related to shadow maps, various incidental fixes and optimizations were required.
The addition of shadow maps, LOD terrain, and the new lighting all led to significant performance degradation, on top of other
changes happening in master. Therefore, a large number of performance improvements were also needed:
- The graphics options were made much more flexible and configurable, and shaders were optimize.
- New options were provided for how to render lights and shadows (@Pfauenauge, @zesterer).
- Graphic setting storage and configuration were overhauled to make adding new features easier (@Pfauenauge, @imbris).
- Shaders were rewritten to utilize GLSL's preprocessor to avoid overhead (@zesterer, @YuriMomo).
- In the process of making changes related to providing additional rendering options, various incidental fixes and optimizations were required.
- Voxel model creation was switched to use *greedy meshing.*
- A new voxel meshing method, greedy meshing, was added (@imbris).
- Uses of the older meshing methods were migrated to use greedy meshing (@imbris, @jshipsey, @Pfauenauge).
- New restrictions were added to terrain, figure, and sprites to future proof them for further optimizations (@jshipsey, @Pfauenauge, @zesterer).
- Most positions are now relative to either chunk or player position for better precision (@imbris, @zesterer, @scottc).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- Animation and terrain math were switched to use SIMD where possible.
- Fixes were made to vek to make its SIMD feature usable for us (@zesterer, @imbris).
- The interface and types used in bone animation were changed in various ways (@jshipsey, @Snowram, @Pfauenauge).
- Redundant code generation for body animation is now partly taken care of by a macro (@jshipsey, @Snowram, @Pfauenauge).
- Animation code was modified to to use vek's SIMD representation where possible (@jshipsey, @Snowram, @Pfauenauge).
- Terrain meshing code and shadow map math were also modified to use vek's SIMD representation (@imbris).
- SIMD instruction generation was enabled (@YuriMomo, @jshipsey, @Snowram, @imbris, @Angelonfira, @xMAC94x).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- The way we cache glyphs was completely refactored, fixed, and optimized.
- Our fork of `conrod` was optimized in various ways (@imbris).
- Our fork of `conrod` now exposes whether a widget was updated during the current frame (@imbris).
- Our use of the glyph cache was rewritten for correctness (@imbris).
- A *text cache* was introduced that lets us skip remeshing glyphs that have not changed (@imbris).
- Various changes were made to reduce pressure on the glyph cache, with more planned (@imbris, @Pfauenauge).
- In the process of making changes related to the glyph cache, various incidental fixes and optimizations were required.
- Colors were changed to keep Veloren's look consistent with master.
- Some older tree models were brought back (@Pfauenauge).
- TODO(@Sharp): All hardcoded colors were extracted and made hotloadable.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Hardcoded colors were fixed to conform to Veloren's style.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Color models were fixed to conform to Veloren's style.
A detailed description of the involved changes follows.
---
- The world size is no longer hardcoded. All functions dependent on world size now take a `WorldSizeLg`, which holds the base 2 logarithm of each actual world dimension and is guaranteed to maintain certain properties (outlined in `common/src/terrain/map.rs`). Additionally, many utility functions that utilize the world size were moved into `common` as well (mostly `common/src/terrain/mod.rs`). Finally, the world map format was updated in order to store its size explicitly, with a migration path from the old format that should work whenever the old formatted map was a square (practically always). See `world/src/sim/mod.rs` for these changes.
- The map generation code was made generic to allow using it outside of the `world` crate. The parts of the map generating code that do not need to query the world were moved over to `common/src/terrain/map.rs`, allowing them to be used from the client without creating a dependency on `world`. The rest of it was turned into helper functions in `world/src/sim/map.rs`, which can be passed as closures to the generic map generation code to complete its construction. This also means that colors are now passed in separately to the map generation function. See <https://veloren.net/devblog-78/> for more details.
- On world creation, we now compute *horizon maps*. See the function in `world/src/sim/util.rs`.
Given a height map and a plane intersecting that height map, our horizon maps allow us to encode enough information to reconstruct shadows for each point on the height map using only the *horizon angle* (the angle at which the sun starts to become visible). As Veloren's sun only covers one plane, this is sufficient for encoding sun shadows for LOD terrain, by encoding two angles per chunk (one for each 90 degrees the sun covers). We can also use this for the moon, if we want, since the moon follows the same path. Additionally, we store the *height* of the furthest occluder, to try to make the shadows volumetric; so this means 4 bytes in total for each chunk.
Support for horizon maps has been merged into the map functionality in common as well.
- The way we pass the world from the server to the client has been updated. Rather than passing the prerendered map, we instead pass three maps with values for each chunk; one with the color information, a second with altitude information, and a third with horizon map information. We then reconstruct the map on the client, together with some additional information we send from the server (like the sea level and maximum height). See `common/src/msg/server.rs` for a detailed description of the format of `WorldMapMsg`, and `server/src/libr.rs` and `client/src/lib.rs` for details of the map construction and parsing.
- Artifacts related to image rotation were fixed. See the commit message for commit SHA `cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e` for a detailed explanation. This involved changes to shaders, the addition of a new type of graphic (also reflected in the graphic cache) that allows specifying a border color (which automatically makes the associated texture immutable), and some related fixes. I reproduce the first two paragraphs of the MR description as well:
```
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
```
- Multiflow rivers were enabled.
This does not really need to be part of this MR, and would be easy to revert, but since it seemed to provide a nice improvement it's currently packaged with it.
We already computed multiple outflows from each chunk for erosion purposes long before this MR.
However, we never modified river rendering to be able to handle this case (just a single downhill river flow is complex enough!) so this was not exposed when deciding which chunks were rivers.
Now that
- In the process of making changes related to the world map, various incidental fixes and optimizations were required. Some examples of fixes include making sure terrain is never lowered to below sea level (to make the shadow maps report correct values), fixing map altitudes and colors to understand things like cliffs and "block level" coloring (that doesn'te xist on the column level), and fixing a crashbug when rendering images for the UI where source pixels are strongly rectangular. Some examples of related performance fixes include avoiding allocating a fresh vector for all the maps (i.e. copying it over to change the format from `[u32; n]` to `DynamicImage` and then copying again to convert to `RgbaImage`), and instead using the `gfx::memory::slice` function to accomplish the same thing. These sorts of changes are spread all arond the code.
This includes the additon of a new scene, `voxygen/src/scene/lod.rs`, a new pipeline `voxygen/src/render/pipeline/lod_terrain.rs`, and new shaders `assets/vxygen/shaders/lod-terrain-vert.glsl` and `assets/vxygen/shaders/lod-terrain-frag.glsl`, as well as associated changes to the renderer in `voxygen/src/render/renderer.rs`.
The main idea behind our initial approach to LOD was to take the world data we now get from the server (altitude, color, and horizon mapping).
- Some previously computed values were turned into shader uniforms for better prediction on weak processors. (@zesterer)
- Calls to power or trig functions were removed or replaced with multiplications, where possible.
- After some deliberation
- To properly handle sprite "waving" for nearby sprites,
We explicitly designed the greedy meshing system with figures and sprites in mind.
In both cases, we want to be able to *efficiently* pack many different models into the same texture, especially in cases where we know
we will either not be removing any of the grouped-together from the models from the texture, or will remove all of them at once (so
they can be packed into some specific subtexture).
For sprites, since we know every model in advance and never intend to deallocate them, we currently pack them all as efficiently as
possible into one giant tetxure atlas. However, in the future we might opt to pack them slightly less efficiently in exchange for
shrinking the sprite vertex size.
For figures, we pack all the textures for each *model* into the same atlas.
is a global texture atlas used for every sprite, and for figures which is why we have the ability to mesh multiple
models to the same texture area (using the simple texture atlas allocator) without requiring intermediate vector allocations.
This is accomplished by delaying the time when we actually write the color and light data to the texture until *after* all the
model vertices have been meshed; then, we can just allocate the whole color/light array at once, making the atlas we use an
exact fit. In computer science-y terms, we accomplish this delay by, after we perform the initial greedy meshing (without
texture information), not continuing to create the texture data, but instead constructing a *continuation*--that is, a function
that, when called, will execute the rest of the computation. We push this continuation (which in Rust terms is a `FnOnce` closure
that takes the `ColLightsInfo` that it is supposed to write to as context) onto a
onto a vector
resizing. To allow for suspended writes to texture data, Rust pointed out to me that the continuation that would eventually write the color and light data to the texture atlas (the one that is shared by all models sharing the same greedy mesher) would have to *own* whatever data it mshed. Because we often generate the model data to mesh as a temporary in `voxygen/src/load.rs`, the
- Matrix multiplications in the shader were reduced for figure data (@zesterer).
- Vertex "waves" for fluid data were removed.
- Terrain "bending" near edges was removed.
- Scaling was fixed to make sure empty space was not introduced in a space previously occupied by a block. It was also changed to take ownership of its voxel data,
rather than sharing it, to let it be used with meshing.
- Rust's nightly version was bumped in order to use the `array_map` function, which lets us reuse more code between the simple map and `FigureModelCache`.
- PositionedGlyph::standalone.
---
I tried to cite sources in many cases[^realtime],[^lloyd],[^lispsm],[^pbrt],[^greedy],[^tjunctions]
where I needed features from elsewhere but I am particularly grateful for the following resources,
esepcially where they have accompanying source code. I linked all of them that are accessible to the public (those that are not were
obtained through legal means).
[^realtime]: Eisemann, Elmar, Michael Schwarz, Ulf Assarsson, Michael Wimmer. Real-Time Shadows. A K Peters/CRC Press (T&F), 20160419.
[^lloyd]: Lloyd,B. 2007. [Logarithmic perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). PhD thesis, University of North Carolina.
[^lispsm]: Wimmer, M., Scherzer, D., and Purgathofer, W. 2004. [Light space perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). In Proceedings of Eurographics Symposium on Rendering 2004, pp. 143– 152.
[^pbrt]: Pharr, Matt, et al. [http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf](Physically Based Rendering: From Theory to Implementation). Third edition, Morgan Kaufmann Publishers/Elsevier, 2017.
[^greedy]: mikolalysenko. “Meshing in a Minecraft Game.” 0 FPS, 30 June 2012, <https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/>.
[^tjunctions]: blackflux. “Meshing in Voxel Engines – Part 1.” Blackflux.Com, 23 Feb. 2014, <https://blackflux.wordpress.com/2014/02/23/meshing-in-voxel-engines-part-1/>.
I am also especially grateful to Khronos, Wikiepdia, and stackoverflow for answering many of my specific questions while writing the MR.
---
Squashed commit of the following:
commit 300505e7305a2fdac722a808ee8538323f215f39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 18:46:25 2020 +0200
Fixing cargo doc and typo in CHANGELOG.
commit ec0aeb18e8499d7d84ef818331b4b65c3d76cea6
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 15:38:50 2020 +0200
Hopefully final commit for the LOD branch.
commit 5e8ea0b1eaac02903a02feb2eb038d195de4872f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 10:14:26 2020 +0200
Falling back to power as stopgap.
commit e44a1cbf46504ee9931a01bdc9033e145500d557
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 09:25:41 2020 +0200
Address imbris feedback.
Temporarily disables shiny water, lowers max VD.
These restrictions will be lifted soon after merging.
commit 561e25778a108ac3712f5ec2ce3a51234c4430d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 08:31:13 2020 +0200
Tweaking shaders a bit.
commit 7d19259078ce0dd7b3742ad7d0cb3fab3ece3fdc
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:59:43 2020 +0200
Fix view example as well.
commit 051cd4934e0fad2c0b15db4380a4189fa318679f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:29:06 2020 +0200
Fix meshing benchmark.
commit c95e07db3b4dcca285678985e65e31b927cb1c61
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 05:46:22 2020 +0200
Address MR feedback, fix scene clouds.
commit 1bfb816cabdb3ffc1e507a009c2d98696b4b573a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:39:36 2020 +0200
Incorporating Pfau's figure color changes.
New eyes and new humanoid colors.
commit 3f9b89a3ac7b3356b1dba0d1a8f6541357f81469
Merge: e2f5162e4 62c53963a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:29:41 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit e2f5162e4f96f4124aa43488f7245d341b3dcfd4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:28:38 2020 +0200
World colors are all hotloadable.
They live in assets/world/style/colors.ron.
Only a small handful of hardcoed colors remain in World; they are either
part of the map, or difficult to disentangle from the rest of the
computation. Comments are made where appropriate.
commit 62c53963abe1975009d34a8f9515a355bef24f31
Author: Marcel Märtens <marcel.cochem@googlemail.com>
Date: Wed Aug 19 15:59:00 2020 +0200
replace pretty_env_logger with tracing
commit 5b1625f99d9586fe80e2232f583ec5af9f953099
Merge: d71003acd 4942b5b39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:15:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit d71003acdabeff970b3928e97c26af6847b5b78e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:14:34 2020 +0200
Hotloading colors, part 1: colors in common.
Currently, this just entails humanoid colors. There are only three
colors not handled; the light emitter colors in
common/src/comp/inventory/item/tool.rs. These don't seem important
enough to me to warrant making hotloadable, at least not right now, but
if it's needed later we can always add them to the file.
commit 63b5e0e553eb2ea49276f192a6fc7dd65254270d
Merge: c32b337a4 6d2c4b9c1
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 13:05:37 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c32b337a46e10d9de473d178a94a3ccd61c39bb3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:52:04 2020 +0200
Fixing LOD grid, for real.
commit a166ae0360395387e09fb35a1f84210c2ce5ec24
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:28:05 2020 +0200
Addressing imbris's initial feedback.
Fixes two minor bugs: explosion particles were no longer spawning
randomly, and LOD grids were not perfectly even.
commit 4cbad004f44060994252dd3d38647a14a589712f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:27:58 2020 +0200
Bumping nightly per request.
commit 548680276aac77c25d43d16b5622f847d474dbef
Merge: acc098604 8f8b20c91
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:26:06 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit acc0986040589a3492f88a740bc3c3fc693b26d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:28:32 2020 +0200
Lower resolution due to lying drivers.
commit d3b878de2a52c358d2944a6bbd0555dad7fbdb10
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:15:38 2020 +0200
Fix issues msh encountered with Intel 4600.
commit 10245e0c1b0cb6fae10d86409435364edc6102ef
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 21:15:02 2020 +0200
Merge more models into one mesh than we did previously.
commit 3155c31e663c52ae5c3a53d5fb5665892a1a498a
Merge: 7204cc8a7 3c199280e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:35:22 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7204cc8a7a4f74a30306bd205d9834fee4bb944f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:34:43 2020 +0200
Fix not yet done NPC animations.
This forces them all to be the idle animation if not specified.
This fixes issues where you'd have giant NPCs in water.
commit bc83360f2a08918f19d417b5f772e1ff554dba08
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 19:36:37 2020 +0200
Try to fix some bugs:
- Z fighting with LOD terrain and water.
- Audio SFX not playing.
commit 1fd104aa603bf3781b6526a5cada46aeca3049dd
Merge: 862df3c99 7c2c392a3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 12:02:31 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 862df3c9976c4da9bd7cfd784f1a85973127968a
Merge: 0a4218ed9 75c1d4401
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 05:52:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0a4218ed9d541a2b34c133351bea38a99ddf4ea7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 22:27:14 2020 +0200
Fix particle depth.
commit f51dfdeb442d0dd5243dd2f344fa4be295bd0875
Merge: c6251a956 5e6dc0471
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:19:04 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit c6251a956ad376400dca5c23420cf8d213dc8fdf
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:15:46 2020 +0200
Cache figures more intelligently.
Cache figures for longer, and don't cache character states for the
player except where they actually affect the rendered model.
commit 0ed801d5404982c6fb63b1eaa4567d908b294c9d
Merge: c11b9bdf0 eea64f78f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 16:32:24 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c11b9bdf0a53bf9884d2f5a48fec9b01d582df1a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 11:47:15 2020 +0200
Remove unneeded Clippy annotation.
commit 16aa9ef40af56d69289d00aafb3deadfb8bd4f35
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 8 00:53:02 2020 +0200
Fix hotloading and Clippy.
commit 3dc973e0be5b758da1e9805eb764ad401374cd0c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 23:50:27 2020 +0200
Major speedups with SIMD.
commit fba64a7d93d5a96077ce87287bbce6ab9b7fbcae
Merge: 76429d00e d1e10b178
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:19 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 76429d00eea00d212fbd672a84ee91e75b19b938
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:10 2020 +0200
Add clippy.toml.
commit c79f512f84dbb83cb82b7954db68ff241dfd8e41
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 11:55:20 2020 +0200
Fix all clippy issues, clean up Rust code.
commit 6f90e010b3fbefb53b0d632e819931350015b6b8
Merge: 77a8c7c26 5929cfa5c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:30 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 77a8c7c267d3f44a1a62bd6b2274359973c5e4d4
Merge: b44e44232 44febaabd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:10 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 5929cfa5c713aa392110bbb62407f76caf53c3df
Author: jshipsey <jshipsey18@gmail.com>
Date: Thu Aug 6 20:47:27 2020 -0400
fixed in-hand arrow bug
commit b44e442325d828f1cd564d66908f89d09e80474b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 6 13:40:35 2020 +0200
Miscellaneous performance improvements.
commit be37acf287c1360d8085862526ac3365ffd1d768
Merge: 125d7fc6c c11876547
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 05:49:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 125d7fc6c4dcd8c8c5f27b8268a4d64f409f3644
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 04:55:31 2020 +0200
Abstract over simd vs. repr_c vectors.
Also some minor improvements to Event size.
commit d4d4956e9252e1241ce110b2aa85076c6b1e2a23
Merge: 5f3b7294a aced5f979
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:56:54 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 5f3b7294af1f8533edc2620b58863c248e2b07af
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:43:52 2020 +0200
Fix formatting issues I missed before.
commit a428a3ebba70dcab63dd0f8cd983120c90617271
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:41:51 2020 +0200
Fix clippy warnings, part 1.
There aer still a bunch of type too complex and
function takes too many arguments warnings that I'll fix later
(or ignore, since in the one case I did fix a function takes too
many arguments warning I think it made the code *less* readable).
commit ba54307540ed8a937ac08209730284fc653af85b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 30 13:22:42 2020 +0200
Fix light animations so they are removed when the light turns off.
commit 7e0f4bcbf0f4717145d8beac40d52e3acebbe2aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 21:10:20 2020 +0200
Fix crash in edge case for pixel art.
commit 56da06f7a351e2b949e9b014a90b974d511a0924
Merge: cf74d55f2 9f53a4a19
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:56:52 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:29:52 2020 +0200
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
The first concern was addressed by fixing the dimensions of the map
images drawn from the UI (so that we always use a square source
rectangle, rather than a rectangular one according to the dimensions of
the map). We also fixed the way rotation was done in the fragment
shader for north-facing sources to make it properly handle aspect ratio
(this was already done for north-facing targets). Together, these fix
rendering issues peculiar to rectangular maps.
The second and third concerns were jointly addressed by adding an
optional border color to every 2D image drawn by the UI. This turns
out not to waste extra space even though we hold a full f32 color
(to avoid an extra dependency on gfx's PackedColor), since voxel
images already take up more space than Optiion<[f32; 4]> requires.
This is then implemented automatically using the "border color"
wrapping method in the attached sampler.
Since this is implemented in graphics hardware, it only works (at
least naively) if the actual image bounds match the texture bounds.
Therefore, we altered the way the graphics cache stores images
with a border color to guarantee that they are always in their own
texture, whose size exactly matches their extent. Since the easiest
currently exposed way to set a border color is to do so for an
immutable texture, we went a bit further and added a new "immutable"
texture storage type used for these cases; currently, it is always
and automatically used only when there is a specified border color,
but in theory there's no reason we couldn't provide immutable-only
images that use the default wrapping mdoe (though clamp to border
is admittedly not a great default).
To fix the maps case specifically, we set the border color to a
translucent version of the ocean border color. This may need
tweaking going forward, which shouldn't be hard.
As part of this process, we had to modify graphics replacement to
make sure immutable images are *removed* when invalidated, rather
than just having a validity flag unset (this is normally done by
the UI to try to reuse allocations in place if images are updated
in benign ways, since the texture atlases used for Ui do not
support deallocation; currently this is only used for item images,
so there should be no overlap with immutable image replacement,
so this was purely precautionary).
Since we were already touching the relevant code, we also updated
the image dependency to a newer version that provides more ways
to avoid allocations, and made a few other changes that should
hopefully eliminate redundant most of the intermediate buffer
allocations we were performing for what should be zero-cost
conversions. This may slightly improve performance in some
cases.
commit ad18ce939940a8c697270f6e9b94db9942fd8295
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 13:21:09 2020 +0200
Fix continent scale hack.
commit 36b1cb074f5b195aebd7dbbc3da7f0246a1a18ec
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 12:11:40 2020 +0200
Enable loading different sized maps without a recompile.
We may want to tweak the effects of the continent_scale_hack.
commit 13b6d4d534cc4814b7cb3294ca41bbfea0a6b186
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 10:55:48 2020 +0200
Removing WORLD_SIZE, part 1.
Erased almost every instance of WORLD_SIZE and replaced it with a local
power of two, map_size_lg (which respects certain invariants; see
common/src/terrain/map.rs for more details about MapSizeLg). This also
means we can avoid a dependency on the world crate from client, as
desired.
Now that the rest of the code is not expecting a fixed WORLD_SIZE, the
next step is to arrange for maps to store their world size, and to use
that world size as a basis prior to loading the map (as well, probably,
as prior to configuring some of the noise functions).
commit 30b1d2c6428230a9eaa0d749cdcbbd6f1cbccd78
Merge: 7d56ba31b 1377b369f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:58 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 7d56ba31b445441461b28a07fc495d7d4f047c17
Merge: 2101113b4 598f14b25
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 1377b369f6db2258e910d467a5740f31789e3ded
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sun Jul 19 23:25:38 2020 +0200
more saturated pumpkins
commit ae8d50527f93bb0616c2ad46ce4dacb63bc37c6d
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sat Jul 18 20:29:56 2020 +0200
acacia models
commit 2101113b467e691de787392d7f20f1745f5637bd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 18 18:55:25 2020 +0200
Higher detail LOD.
commit add2cfae04b4385fa5590e11e2bd5229d9dee0aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 16 01:57:39 2020 +0200
Revert some irrelevant stuff.
commit 2e2ab3dc1eaa59a4aef7f8d34a53d8aae4c8553a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 15 13:30:49 2020 +0200
Fixing various things about shadows.
* Correcting optimal LISPSM parameter.
* Figure shadows are cast when they're not visible.
* Chunk shadows stay cast until you look away.
* Seamless cubemaps for point lights.
* Etc.
commit 6c31e6b56217274285b597af297036691ea5d897
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 19:50:26 2020 +0200
Fix shadow creation.
commit 6332cbe006115ae205597529cd8bbccd146c2cca
Merge: be438657c 930e0028b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:47:00 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit be438657c33d7b5bfb0a9582c3ed3fd366637323
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:28:08 2020 +0200
Tweaks to shadows.
Added shadow map resolution configuration, added seamless cubemaps,
documented all existing rendering options, and fixed a few Clippy
errors.
commit 23b4058906013c7d2a40c286e20e32c5fbd897ed
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 10:11:19 2020 +0200
Fix moon, use nonlinear noise for terrain.
Note that the latter has a bit of performance cost.
commit 7fbe5cbfbb9dc29607957b8e62f432a4deed193d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:23:02 2020 +0200
Address lies about max texture size.
commit bcfc62b5e13a1cdd83f57535fde4694720bebfd9
Merge: 75e3626a7 18a08e8fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:22:08 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 75e3626a785919f43fdcf2127c2b10e3e4df2f9f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:21:52 2020 +0200
OpenGL 3.3 minimum.
commit 18a08e8fe2739f02af99a5d2cb4e7c38c49e858b
Author: Monty Marz <m.marzouq@gmx.de>
Date: Tue Jul 7 23:57:52 2020 +0200
settings localization
commit 90c5d1ca3620092bc3ae10b2211489eb1cf6f5e8
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 21:11:48 2020 +0200
Lower near distance.
commit 0e66f02b25aaddaa2dfddbbc89cd67de54a9a7b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 20:09:01 2020 +0200
All sprites sway in the wind now.
commit db1401a6910bf42dcf502462c90038752ff5fbdb
Merge: 69e508d8c e8b4b29d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 19:34:17 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 69e508d8c94d8973033817ca86f357e466fc7c4d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 18:41:37 2020 +0200
Make it easy to switch to SIMD for math.
commit ffe0f5928c7a7e87d00cb5426b3b1d831d7e02fd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 21:21:12 2020 +0200
Fix some issues with underwater rendering.
commit bfda6da42f38fd02c31ee92c81ab785a3e50c2a0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 19:17:59 2020 +0200
Fix some minor display issues.
commit 0ed752e087968cf901301884aaeae698e32ef8a5
Merge: ccc6a06a8 518edcb85
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:14:21 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit ccc6a06a8d4504d6b9f7af7905a414d2ee06ab76
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:04:34 2020 +0200
Some minor changes.
commit 4e020246702889269efe1a191788992164c508d6
Merge: 50a64d927 e05c9267a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 16:17:40 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 50a64d927e6c4f4b0e4688e4cbfca694bc3f922a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 13:07:03 2020 +0200
Fix far plane.
commit 7dd06da34cae8f9ea3b6c889fe965181f3fd3949
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:25:35 2020 +0200
Add shadows.glsl.
commit 618a18c998778bf871b905a74657440fcc384c80
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:10:22 2020 +0200
Adding shadows, greedy meshing, and more.
commit eaea83fe6a5cb1cb0ba8beef888183c718258496
Merge: 267018495 2f89b863e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 22:47:07 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 2670184954a13e4a9e7a4e35ba79aac0c5fac2f7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 21:20:01 2020 +0200
Make civsim and sites deterministic.
For anything in worldgen where you use a HashMap, *please* think
carefully about which hasher you are going to use! This is
especially true if (for some reason) you are depending on hashmap
iteration order remaining stable for some aspect of worldgen.
commit f8376fd5dc72b4a9c2f51a6b4570d59c8b8e9343
Merge: 654f7e049 cdee191dd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 17:53:57 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 654f7e049258d9da27c09608bbe6a46ffa8787e5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed May 20 21:22:30 2020 +0200
Correct backface culling.
commit 560501df05ca725409b0f2e4eb31bdfdc15fd0c7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue May 19 17:22:06 2020 +0200
Greedy messhing for shadows.
commit a4d87e1875ca543436e6bbbeb20348facc5a52d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun May 17 05:59:00 2020 +0200
Shadow maps work for lantern.
commit 243d0837b8a3b08172c9a3c348d964d7ddc2a0a8
Merge: 04382dc28 71dd520cd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:53:13 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 04382dc28632b6c66e8821f6870c0daaa1c1901a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:22:17 2020 +0200
WIP: better graphics config, better LOD, shadow maps.
commit 22ddbad3eb32bfa70f0932176022208fe67ded81
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 18:54:09 2020 +0200
Minor shader fixes.
commit 746a10e8d01ac235f994b0cde78fa48998602a1f
Merge: 0f4a0e763 40ab94673
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 04:02:09 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0f4a0e763db3afbdc4fb0558611f38326ca87151
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 23:03:24 2020 +0200
Switch back to pop-in terrain.
commit dd74fa7e4a53667b38811d7aec58d7f6a68889bb
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 22:58:55 2020 +0200
LOD shading closer to voxel shading.
commit ef67bd58ba0bdaf622b078892d768263b6cba268
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 28 20:49:03 2020 +0200
Experimental underwater lighting.
commit 2c5ad9d07605e80d5fd5679dd3a5d70c605b86a9
Merge: 748279835 303967a6f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 22:35:24 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7482798354eda18c8207950080fc24d443a369de
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 21:59:55 2020 +0200
Replace discard in figure-frag.
commit d83b4ae69be4912f69bf7835f509c68a1c7770a4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:45:57 2020 +0200
Fix sprite lighting, HDR from focus_pos.
commit 0594238004f116274905fa0ed7c2b6c417ed1d29
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:14:10 2020 +0200
Proper HDR from point lights.
commit 48c93d2b41ce5743103d18e76cc228f5ac766492
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 14:01:43 2020 +0200
Brighter ambiance, darker LOD shadows.
commit e0452e895ccfa8a43f368cae3b8b8aedc24dad93
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 13:13:23 2020 +0200
More proper HDR.
commit 4c6da3ed16cfeebb455e40da5f557b4af9a499d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 00:13:10 2020 +0200
Trying LOD noise.
commit 682a3d74c85df5503ffe1fc1cc891bce789df1ad
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 23:11:08 2020 +0200
Fix LOD heights in towns.
commit cc39e5734e8b18f9077bf42e66337c1319dd6b6e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 21:01:23 2020 +0200
More LOD fixes.
commit 8116b21c2e51c836e77894e309ac273caf2917b3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:54:43 2020 +0200
I like this coloring.
commit bc2560ea90b36f4b46190005344232d993043ac3
Merge: 14effdd5d e690efe71
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:48:33 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 14effdd5db8747fcf3eb34f03b46b7792e92d1c5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:24:35 2020 +0200
Re-saturate.
commit 48a643955d4435b78179acba0beb4a979905cc31
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:23:57 2020 +0200
Various fixes.
commit f7b497a0c25f4ad4682c71dd1ed6f608052feb9b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 03:22:49 2020 +0200
Render figures again.
commit 44e4aad48deba8266b9f8bdfd3db096b381f5327
Merge: e6f0a5a98 9ec319a18
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 02:01:04 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit e6f0a5a981a82533ba188fff0a54ce98577bb152
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 24 16:12:20 2020 +0200
Add atmospheric scattering.
commit f2953087f691a8edbc001cb98ebf5059fc6f8ac0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 23 00:01:20 2020 +0200
Fix shadowing for specular reflections.
commit ddd4a67a9799b8d08c7dc0c2bec90621c2bed0e3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Apr 22 22:56:12 2020 +0200
HDR fixes.
commit 1015e60deef3c447381996277df7496707a63bd0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 21 18:25:19 2020 +0200
More lighting changes.
commit 80c264abd111fb237e57843efcb5c071d4f84613
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 13 00:29:59 2020 +0200
Lighting experiments.
commit 8414987e589dd5102bad89762a3adaccc0bfe957
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 9 02:38:40 2020 +0200
WIP -- lighting changes and soft shadows.
commit 9cd2b3fb0d6b49776c6dfe463e4169637250b11a
Merge: c7ea687eb 8b149ad11
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:29 2020 +0200
Merge branch 'sharp/new-lighting' into sharp/small-fixes
commit c7ea687ebbc5aace1b455f134a5bf49ce2c7434a
Merge: 476441531 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:02 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 8b149ad11ad4bb75018fcf9519baec27d1c95951
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:32:39 2020 +0200
Trying out a new lighting model.
commit b0ac9f36f755dd06f7c17c46150568064790864f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 07:56:11 2020 +0200
Use bicubic interpolation for terrain.
commit f6fc9307a121514b614bc50ef8eb055953e7da8a
Merge: 33140a295 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 05:01:41 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 4764415312aae6e9ac2d00e86e84577cb958f1ab
Merge: ed2d0111d 13388ee6a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 04:54:48 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 13388ee6a42943f3f79a9cb488346cef18e272fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 20:30:08 2020 +0200
Various fixes (to coloring and to soft shadows).
commit fbd084a94a067082a87cd6d28b82054709bc9265
Merge: 5a089863b 4fdf6896a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 18:50:38 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/map-colors
commit ed2d0111d994262ae836d84d1fe5a45e4de72a0b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 06:49:27 2020 +0200
Combining colors and LOD.
commit 88342640c6b835114d01c797b89fdede3b0a2108
Merge: 33140a295 5a089863b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:49:20 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 33140a2951b8212725f42c758b277aaec4d888f7
Merge: 4c65a5aed f34d4b379
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:36:21 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 5a089863beb01d4794bbe3580ada47b278715ea2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 03:17:49 2020 +0200
Making maps brighter.
This is probably not the right way to do it, but oh well!
commit 32b2c99109dd486aa922886081068f9c550c83f2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 02:46:36 2020 +0200
Horizon mapping and "layered" map generation.
Horizon mapping is a method of shadow mapping specific to height maps.
It can handle any angle between 0 and 90 degrees from the ground, as
long as know the horizontal direction in advance, by remembering only a
single angle (the "horizon angle" of the shadow map). More is explained
in common/src/msg/server.rs. We also remember the approximate height of
the largest occluder, to try to be able to generate soft shadows and
create a vertical position where the shadows can't go higher.
Additionally, map generation has been reworked. Instead of computing
everything from explicit samples, we pass in sampling functions that
return exactly what the map generator needs. This allows us to cleanly
separate the way we sample things like altitudes and colors from the map
generation process. We exploit this to generate maps *partially* on the
server (with colors and rivers, but not shading). We can then send the
partially completed map to the client, which can combine it with shadow
information to generate the final map. This is useful for two reasons:
first, it makes sure the client can apply shadow information by itself,
and second, it lets us pass the unshaded map for use with level of
detail functionality.
For similar reasons, river generation is split
out into its own layer, but for now we opt to still generate rivers on
the server (since the river wire format is more complicated to compress
and may require some extra work to make sure we have enough precision to
draw rivers well enough for LoD).
Finally, the mostly ad-hoc lighting we were performing has been (mostly)
replaced with explicit Phong reflection shading (including specular
highlights). Regularizing this seems useful and helps clarify the
"meaning" of the various light intensities, and helps us keep a more
physically plausible basis. However, its interaction with soft shadows
is still imperfect, and it's not yet clear to me what we need to do to
turn this into something useful for LoD.
commit f8926a5737ddc51f3d585c651a64c43677aae0f4
Merge: a1aee931e 875ae6ced
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Mar 13 13:32:42 2020 +0100
Merge remote-tracking branch 'origin/master' into sharp/map-colors
commit 4c65a5aed353b119aea65a2aaeb94549b67beb42
Author: Treeco <5021038-Treeco@users.noreply.gitlab.com>
Date: Mon Feb 24 16:48:05 2020 +0000
Made LOD setting slider exponential
commit 2fa7b2d20d7233dc8bfd64f9f7f54617575248f1
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 17:49:53 2020 +0000
Added mist to LoD
commit aab059a450b5f635777129ff82cc15b662965c3c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 15:14:06 2020 +0000
Added LoD slider
commit 779c36b538121c5ade3633ae5cb67bb14c8c3877
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:54:55 2020 +0000
Reduced cost of vertex pushing
commit 9fea150473906b166365b738ebcea07c697daf3d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:38:53 2020 +0000
Fixed maths, improved LoD resolution
commit 5481df38fea5bf183ff376a3337179cfaa5233dc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 11:22:50 2020 +0000
Dynamically relocate LoD vertices to enhance details
commit a3e36a50ababd615da7db1b26158c7906a5def01
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 18:13:51 2020 +0000
Simpler terrain spiral rendering
commit 255f450ae9ac8763db4bede075fb409161ed57cc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:53:17 2020 +0000
Better LoD precision
commit 3d027aebe812a5b8658a4eb8123dc9f61b3776d2
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:04:03 2020 +0000
Better falloff
commit be775c9484b457b2c0b1a494aec03392d0c70e76
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 15:30:45 2020 +0000
Applied good ideas from experimental branch
commit 58587b68545a23c5c04ab4574a4b94b3bc982246
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 16:15:13 2020 +0000
Minor fixes to LoD merging
commit 7b42aebd709c14df2db766aad61d9280ad24d84d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 15:04:44 2020 +0000
Capped LoD dragging
commit 8aafc559f87124e1ea5ca6e3ddc2aa0c242d793c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:54:37 2020 +0000
Better blending between LoD and terrain border
commit edd3455d5161792d87ddc8eadc0ecbad5532b284
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:40:19 2020 +0000
Fixed LoD z depth, added sea level offset
commit b9b06744620114dd5556e73f64fa93c145503a7c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:27:43 2020 +0000
Better LoD smoothing
commit a1aee931e790431560cd2d953ad61d9497072afd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Feb 21 14:52:17 2020 +0100
Adding shadows.
commit 2400786c13dd891c131ed86d48d05df516a8a778
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 13:48:40 2020 +0000
Use world map as LoD source
commit dbf650f504a4c25fbbc2096ac3616c736bf52d23
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Jan 20 00:48:14 2020 +0000
Better clouds at distance
commit 5e6f81b86cdb9730b9b056877b19257075fd5fa8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Jan 19 23:59:02 2020 +0000
sync
commit 745e7540ddb000cc645f612767b337c2ddc3f7c0
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 12:40:48 2019 +0000
Improved cloud falloff mist, faster noise sampling
commit f6a200d0cb866196ba57697466755f9e0c7ea5d8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 10:09:00 2019 +0000
Improved long-range depth precision, removed unnecessary LoD polygons
commit 63d1b2bb2292898d59fb4f4e502201103dfeb86f
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 20:57:46 2019 +0000
Working LoD shader
commit f13d98ee3e58f881e8b978861a67663b59ed91ec
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 11:03:40 2019 +0000
LoD first attempt (stack overflow issue)
2020-08-20 18:34:59 +00:00
|
|
|
|
let wposf = (uniform_idx_as_vec2(map_size_lg, posi)
|
|
|
|
|
* TerrainChunkSize::RECT_SIZE.map(|e| e as i32))
|
|
|
|
|
.map(|e| e as f64);
|
2020-01-11 21:05:22 +00:00
|
|
|
|
let turb_wposf = wposf
|
2020-01-20 01:59:28 +00:00
|
|
|
|
.mul(5_000.0 / continent_scale)
|
2020-01-11 21:05:22 +00:00
|
|
|
|
.div(TerrainChunkSize::RECT_SIZE.map(|e| e as f64))
|
|
|
|
|
.div(turb_wposf_div);
|
|
|
|
|
let turb = Vec2::new(
|
|
|
|
|
gen_ctx.turb_x_nz.get(turb_wposf.into_array()),
|
|
|
|
|
gen_ctx.turb_y_nz.get(turb_wposf.into_array()),
|
|
|
|
|
) * uplift_turb_scale
|
|
|
|
|
* TerrainChunkSize::RECT_SIZE.map(|e| e as f64);
|
|
|
|
|
let turb_wposf = wposf + turb;
|
|
|
|
|
let uheight = gen_ctx
|
|
|
|
|
.uplift_nz
|
|
|
|
|
.get(turb_wposf.into_array())
|
|
|
|
|
.min(1.0)
|
|
|
|
|
.max(-1.0)
|
|
|
|
|
.mul(0.5)
|
|
|
|
|
.add(0.5);
|
|
|
|
|
let wposf3 = Vec3::new(
|
|
|
|
|
wposf.x,
|
|
|
|
|
wposf.y,
|
|
|
|
|
uheight * CONFIG.mountain_scale as f64 * rock_strength_div_factor,
|
|
|
|
|
);
|
|
|
|
|
let rock_strength = gen_ctx
|
|
|
|
|
.rock_strength_nz
|
|
|
|
|
.get(wposf3.into_array())
|
|
|
|
|
.min(1.0)
|
|
|
|
|
.max(-1.0)
|
|
|
|
|
.mul(0.5)
|
|
|
|
|
.add(0.5);
|
2020-01-22 14:31:10 +00:00
|
|
|
|
let center = 0.4;
|
|
|
|
|
let dmin = center - 0.05;
|
|
|
|
|
let dmax = center + 0.05;
|
2020-01-11 21:05:22 +00:00
|
|
|
|
let log_odds = |x: f64| logit(x) - logit(center);
|
|
|
|
|
let ustrength = logistic_cdf(
|
|
|
|
|
1.0 * logit(rock_strength.min(1.0f64 - 1e-7).max(1e-7))
|
|
|
|
|
+ 1.0 * log_odds(uheight.min(dmax).max(dmin)),
|
|
|
|
|
);
|
|
|
|
|
// marine: ε₀ = 2.078e-3
|
|
|
|
|
// San Gabriel Mountains: ε₀ = 3.18e-4
|
|
|
|
|
// Oregon Coast Range: ε₀ = 2.68e-4
|
|
|
|
|
// Frogs Hollow (peak production = 0.25): ε₀ = 1.41e-4
|
|
|
|
|
// Point Reyes: ε₀ = 8.1e-5
|
|
|
|
|
// Nunnock River (fractured granite, least weathered?): ε₀ = 5.3e-5
|
2020-01-22 14:31:10 +00:00
|
|
|
|
let epsilon_0_i = ((1.0 - ustrength) * (2.078e-3 - 5.3e-5) + 5.3e-5) as f32 / 4.0;
|
2020-01-18 18:41:37 +00:00
|
|
|
|
epsilon_0_i * epsilon_0_scale_i
|
2020-01-11 21:05:22 +00:00
|
|
|
|
};
|
|
|
|
|
let alpha_func = |posi| {
|
2020-01-18 18:41:37 +00:00
|
|
|
|
let alpha_scale_i = alpha_scale(n_func(posi));
|
2020-01-11 21:05:22 +00:00
|
|
|
|
if is_ocean_fn(posi) {
|
|
|
|
|
// marine: α = 3.7e-2
|
2020-01-18 18:41:37 +00:00
|
|
|
|
return 3.7e-2 * alpha_scale_i;
|
2020-01-11 21:05:22 +00:00
|
|
|
|
}
|
(See sharp/lod-history) LOD, shadows, greedy meshing, new lighting, perf
---
Pretty much a Veloren fork at this point. Here's a high level overview of the changes (will be added to CHANGELOG just before merge).
At a high level this MR incorporates roughly two groups of changes.
The first group consists of new game features: more flexible map sizes, level of detail terrain, shadow maps, and a new lighting
engine. This is "feature work" that (mostly) only adds new things to Veloren, and mostly shouldn't affect old stuff.
The second big group of changes are those addressing the fallout from all the new features. These include performance fixes of
various sorts: the addition of multiple graphics options and optimization of the cheap ones to avoid work, switching all voxel
models to use some variant of greedy meshing, switching over much of our CPU-side vector math to exploit SIMD instructions
(coinciding with a fork of `vek`), and a rewrite of how the UI handles text rendering (coinciding with updates to our fork
of `conrod`). Making Veloren's hardcoded colors appear correct under the new lighting engine also required considerably
changes (TODO: Fill in this section when it's complete).
The second category of changes often heavily touches code owned by other people, including frequently modified code "owned" by a
handful of people, so I recommend that this code be reviewed particularly carefully.
---
At a high level (each will be described in more detail below):
- The world map has been refactored.
- The world size is no longer hardcoded (@zesterer).
- The map generation code was made generic to allow using it outside of the `world` crate (@zesterer).
- On world creation, we now compute *horizon maps* (@zesterer).
- The way we pass the world from the server to the client has been updated (@xMAC94x).
- Artifacts related to image rotation were fixed (@imbris).
- Multiflow rivers were enabled (@zesterer).
- In the process of making changes related to the world map, various incidental fixes and optimizations were required.
- The new *level of detail* feature was added (@zesterer wrote part of this and has checked out the rest).
- A new LOD terrain rendering step was added to the pipeline.
- The LOD terrain quality was made configurable via a graphics setting.
- Horizon maps were used to cast shadows from LOD chunks on both LOD and non-LOD terrain.
- A "voxelization" effect was incorporated into rendered LOD terrain to make it blend better into the world.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Veloren's lighting has been completely overhauled (@zesterer has already checked most of this out).
- A semi-accurate index of refraction was assigned to our materials.
- A new, more realistic, physically based approach to lighting was used using the *Ashikhmin Shirley* BRDF.
- We emulate *atmospheric scattering* using equations designed for measuring solar panel light exposure.
- We attempt to compute *realistic light attenuation* in water using its real material properties.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Point and directional lights now cast realistic shadows, using *shadow mapping.* (@imbris, @zesterer, @Treeco, @YuriMomo)
- Point light shadow maps were added to the rendering pipeline, using geometry shaders and *seamless cube maps*.
- Directional light shadows were added to the rendering pipeline, using LISPSM together with disabling *depth clamping*.
- "Shadow-only" chunks and NPCs were added to prevent shadows from models behind you from disappearing.
- In the process of making changes related to shadow maps, various incidental fixes and optimizations were required.
The addition of shadow maps, LOD terrain, and the new lighting all led to significant performance degradation, on top of other
changes happening in master. Therefore, a large number of performance improvements were also needed:
- The graphics options were made much more flexible and configurable, and shaders were optimize.
- New options were provided for how to render lights and shadows (@Pfauenauge, @zesterer).
- Graphic setting storage and configuration were overhauled to make adding new features easier (@Pfauenauge, @imbris).
- Shaders were rewritten to utilize GLSL's preprocessor to avoid overhead (@zesterer, @YuriMomo).
- In the process of making changes related to providing additional rendering options, various incidental fixes and optimizations were required.
- Voxel model creation was switched to use *greedy meshing.*
- A new voxel meshing method, greedy meshing, was added (@imbris).
- Uses of the older meshing methods were migrated to use greedy meshing (@imbris, @jshipsey, @Pfauenauge).
- New restrictions were added to terrain, figure, and sprites to future proof them for further optimizations (@jshipsey, @Pfauenauge, @zesterer).
- Most positions are now relative to either chunk or player position for better precision (@imbris, @zesterer, @scottc).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- Animation and terrain math were switched to use SIMD where possible.
- Fixes were made to vek to make its SIMD feature usable for us (@zesterer, @imbris).
- The interface and types used in bone animation were changed in various ways (@jshipsey, @Snowram, @Pfauenauge).
- Redundant code generation for body animation is now partly taken care of by a macro (@jshipsey, @Snowram, @Pfauenauge).
- Animation code was modified to to use vek's SIMD representation where possible (@jshipsey, @Snowram, @Pfauenauge).
- Terrain meshing code and shadow map math were also modified to use vek's SIMD representation (@imbris).
- SIMD instruction generation was enabled (@YuriMomo, @jshipsey, @Snowram, @imbris, @Angelonfira, @xMAC94x).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- The way we cache glyphs was completely refactored, fixed, and optimized.
- Our fork of `conrod` was optimized in various ways (@imbris).
- Our fork of `conrod` now exposes whether a widget was updated during the current frame (@imbris).
- Our use of the glyph cache was rewritten for correctness (@imbris).
- A *text cache* was introduced that lets us skip remeshing glyphs that have not changed (@imbris).
- Various changes were made to reduce pressure on the glyph cache, with more planned (@imbris, @Pfauenauge).
- In the process of making changes related to the glyph cache, various incidental fixes and optimizations were required.
- Colors were changed to keep Veloren's look consistent with master.
- Some older tree models were brought back (@Pfauenauge).
- TODO(@Sharp): All hardcoded colors were extracted and made hotloadable.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Hardcoded colors were fixed to conform to Veloren's style.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Color models were fixed to conform to Veloren's style.
A detailed description of the involved changes follows.
---
- The world size is no longer hardcoded. All functions dependent on world size now take a `WorldSizeLg`, which holds the base 2 logarithm of each actual world dimension and is guaranteed to maintain certain properties (outlined in `common/src/terrain/map.rs`). Additionally, many utility functions that utilize the world size were moved into `common` as well (mostly `common/src/terrain/mod.rs`). Finally, the world map format was updated in order to store its size explicitly, with a migration path from the old format that should work whenever the old formatted map was a square (practically always). See `world/src/sim/mod.rs` for these changes.
- The map generation code was made generic to allow using it outside of the `world` crate. The parts of the map generating code that do not need to query the world were moved over to `common/src/terrain/map.rs`, allowing them to be used from the client without creating a dependency on `world`. The rest of it was turned into helper functions in `world/src/sim/map.rs`, which can be passed as closures to the generic map generation code to complete its construction. This also means that colors are now passed in separately to the map generation function. See <https://veloren.net/devblog-78/> for more details.
- On world creation, we now compute *horizon maps*. See the function in `world/src/sim/util.rs`.
Given a height map and a plane intersecting that height map, our horizon maps allow us to encode enough information to reconstruct shadows for each point on the height map using only the *horizon angle* (the angle at which the sun starts to become visible). As Veloren's sun only covers one plane, this is sufficient for encoding sun shadows for LOD terrain, by encoding two angles per chunk (one for each 90 degrees the sun covers). We can also use this for the moon, if we want, since the moon follows the same path. Additionally, we store the *height* of the furthest occluder, to try to make the shadows volumetric; so this means 4 bytes in total for each chunk.
Support for horizon maps has been merged into the map functionality in common as well.
- The way we pass the world from the server to the client has been updated. Rather than passing the prerendered map, we instead pass three maps with values for each chunk; one with the color information, a second with altitude information, and a third with horizon map information. We then reconstruct the map on the client, together with some additional information we send from the server (like the sea level and maximum height). See `common/src/msg/server.rs` for a detailed description of the format of `WorldMapMsg`, and `server/src/libr.rs` and `client/src/lib.rs` for details of the map construction and parsing.
- Artifacts related to image rotation were fixed. See the commit message for commit SHA `cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e` for a detailed explanation. This involved changes to shaders, the addition of a new type of graphic (also reflected in the graphic cache) that allows specifying a border color (which automatically makes the associated texture immutable), and some related fixes. I reproduce the first two paragraphs of the MR description as well:
```
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
```
- Multiflow rivers were enabled.
This does not really need to be part of this MR, and would be easy to revert, but since it seemed to provide a nice improvement it's currently packaged with it.
We already computed multiple outflows from each chunk for erosion purposes long before this MR.
However, we never modified river rendering to be able to handle this case (just a single downhill river flow is complex enough!) so this was not exposed when deciding which chunks were rivers.
Now that
- In the process of making changes related to the world map, various incidental fixes and optimizations were required. Some examples of fixes include making sure terrain is never lowered to below sea level (to make the shadow maps report correct values), fixing map altitudes and colors to understand things like cliffs and "block level" coloring (that doesn'te xist on the column level), and fixing a crashbug when rendering images for the UI where source pixels are strongly rectangular. Some examples of related performance fixes include avoiding allocating a fresh vector for all the maps (i.e. copying it over to change the format from `[u32; n]` to `DynamicImage` and then copying again to convert to `RgbaImage`), and instead using the `gfx::memory::slice` function to accomplish the same thing. These sorts of changes are spread all arond the code.
This includes the additon of a new scene, `voxygen/src/scene/lod.rs`, a new pipeline `voxygen/src/render/pipeline/lod_terrain.rs`, and new shaders `assets/vxygen/shaders/lod-terrain-vert.glsl` and `assets/vxygen/shaders/lod-terrain-frag.glsl`, as well as associated changes to the renderer in `voxygen/src/render/renderer.rs`.
The main idea behind our initial approach to LOD was to take the world data we now get from the server (altitude, color, and horizon mapping).
- Some previously computed values were turned into shader uniforms for better prediction on weak processors. (@zesterer)
- Calls to power or trig functions were removed or replaced with multiplications, where possible.
- After some deliberation
- To properly handle sprite "waving" for nearby sprites,
We explicitly designed the greedy meshing system with figures and sprites in mind.
In both cases, we want to be able to *efficiently* pack many different models into the same texture, especially in cases where we know
we will either not be removing any of the grouped-together from the models from the texture, or will remove all of them at once (so
they can be packed into some specific subtexture).
For sprites, since we know every model in advance and never intend to deallocate them, we currently pack them all as efficiently as
possible into one giant tetxure atlas. However, in the future we might opt to pack them slightly less efficiently in exchange for
shrinking the sprite vertex size.
For figures, we pack all the textures for each *model* into the same atlas.
is a global texture atlas used for every sprite, and for figures which is why we have the ability to mesh multiple
models to the same texture area (using the simple texture atlas allocator) without requiring intermediate vector allocations.
This is accomplished by delaying the time when we actually write the color and light data to the texture until *after* all the
model vertices have been meshed; then, we can just allocate the whole color/light array at once, making the atlas we use an
exact fit. In computer science-y terms, we accomplish this delay by, after we perform the initial greedy meshing (without
texture information), not continuing to create the texture data, but instead constructing a *continuation*--that is, a function
that, when called, will execute the rest of the computation. We push this continuation (which in Rust terms is a `FnOnce` closure
that takes the `ColLightsInfo` that it is supposed to write to as context) onto a
onto a vector
resizing. To allow for suspended writes to texture data, Rust pointed out to me that the continuation that would eventually write the color and light data to the texture atlas (the one that is shared by all models sharing the same greedy mesher) would have to *own* whatever data it mshed. Because we often generate the model data to mesh as a temporary in `voxygen/src/load.rs`, the
- Matrix multiplications in the shader were reduced for figure data (@zesterer).
- Vertex "waves" for fluid data were removed.
- Terrain "bending" near edges was removed.
- Scaling was fixed to make sure empty space was not introduced in a space previously occupied by a block. It was also changed to take ownership of its voxel data,
rather than sharing it, to let it be used with meshing.
- Rust's nightly version was bumped in order to use the `array_map` function, which lets us reuse more code between the simple map and `FigureModelCache`.
- PositionedGlyph::standalone.
---
I tried to cite sources in many cases[^realtime],[^lloyd],[^lispsm],[^pbrt],[^greedy],[^tjunctions]
where I needed features from elsewhere but I am particularly grateful for the following resources,
esepcially where they have accompanying source code. I linked all of them that are accessible to the public (those that are not were
obtained through legal means).
[^realtime]: Eisemann, Elmar, Michael Schwarz, Ulf Assarsson, Michael Wimmer. Real-Time Shadows. A K Peters/CRC Press (T&F), 20160419.
[^lloyd]: Lloyd,B. 2007. [Logarithmic perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). PhD thesis, University of North Carolina.
[^lispsm]: Wimmer, M., Scherzer, D., and Purgathofer, W. 2004. [Light space perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). In Proceedings of Eurographics Symposium on Rendering 2004, pp. 143– 152.
[^pbrt]: Pharr, Matt, et al. [http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf](Physically Based Rendering: From Theory to Implementation). Third edition, Morgan Kaufmann Publishers/Elsevier, 2017.
[^greedy]: mikolalysenko. “Meshing in a Minecraft Game.” 0 FPS, 30 June 2012, <https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/>.
[^tjunctions]: blackflux. “Meshing in Voxel Engines – Part 1.” Blackflux.Com, 23 Feb. 2014, <https://blackflux.wordpress.com/2014/02/23/meshing-in-voxel-engines-part-1/>.
I am also especially grateful to Khronos, Wikiepdia, and stackoverflow for answering many of my specific questions while writing the MR.
---
Squashed commit of the following:
commit 300505e7305a2fdac722a808ee8538323f215f39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 18:46:25 2020 +0200
Fixing cargo doc and typo in CHANGELOG.
commit ec0aeb18e8499d7d84ef818331b4b65c3d76cea6
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 15:38:50 2020 +0200
Hopefully final commit for the LOD branch.
commit 5e8ea0b1eaac02903a02feb2eb038d195de4872f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 10:14:26 2020 +0200
Falling back to power as stopgap.
commit e44a1cbf46504ee9931a01bdc9033e145500d557
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 09:25:41 2020 +0200
Address imbris feedback.
Temporarily disables shiny water, lowers max VD.
These restrictions will be lifted soon after merging.
commit 561e25778a108ac3712f5ec2ce3a51234c4430d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 08:31:13 2020 +0200
Tweaking shaders a bit.
commit 7d19259078ce0dd7b3742ad7d0cb3fab3ece3fdc
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:59:43 2020 +0200
Fix view example as well.
commit 051cd4934e0fad2c0b15db4380a4189fa318679f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:29:06 2020 +0200
Fix meshing benchmark.
commit c95e07db3b4dcca285678985e65e31b927cb1c61
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 05:46:22 2020 +0200
Address MR feedback, fix scene clouds.
commit 1bfb816cabdb3ffc1e507a009c2d98696b4b573a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:39:36 2020 +0200
Incorporating Pfau's figure color changes.
New eyes and new humanoid colors.
commit 3f9b89a3ac7b3356b1dba0d1a8f6541357f81469
Merge: e2f5162e4 62c53963a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:29:41 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit e2f5162e4f96f4124aa43488f7245d341b3dcfd4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:28:38 2020 +0200
World colors are all hotloadable.
They live in assets/world/style/colors.ron.
Only a small handful of hardcoed colors remain in World; they are either
part of the map, or difficult to disentangle from the rest of the
computation. Comments are made where appropriate.
commit 62c53963abe1975009d34a8f9515a355bef24f31
Author: Marcel Märtens <marcel.cochem@googlemail.com>
Date: Wed Aug 19 15:59:00 2020 +0200
replace pretty_env_logger with tracing
commit 5b1625f99d9586fe80e2232f583ec5af9f953099
Merge: d71003acd 4942b5b39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:15:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit d71003acdabeff970b3928e97c26af6847b5b78e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:14:34 2020 +0200
Hotloading colors, part 1: colors in common.
Currently, this just entails humanoid colors. There are only three
colors not handled; the light emitter colors in
common/src/comp/inventory/item/tool.rs. These don't seem important
enough to me to warrant making hotloadable, at least not right now, but
if it's needed later we can always add them to the file.
commit 63b5e0e553eb2ea49276f192a6fc7dd65254270d
Merge: c32b337a4 6d2c4b9c1
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 13:05:37 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c32b337a46e10d9de473d178a94a3ccd61c39bb3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:52:04 2020 +0200
Fixing LOD grid, for real.
commit a166ae0360395387e09fb35a1f84210c2ce5ec24
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:28:05 2020 +0200
Addressing imbris's initial feedback.
Fixes two minor bugs: explosion particles were no longer spawning
randomly, and LOD grids were not perfectly even.
commit 4cbad004f44060994252dd3d38647a14a589712f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:27:58 2020 +0200
Bumping nightly per request.
commit 548680276aac77c25d43d16b5622f847d474dbef
Merge: acc098604 8f8b20c91
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:26:06 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit acc0986040589a3492f88a740bc3c3fc693b26d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:28:32 2020 +0200
Lower resolution due to lying drivers.
commit d3b878de2a52c358d2944a6bbd0555dad7fbdb10
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:15:38 2020 +0200
Fix issues msh encountered with Intel 4600.
commit 10245e0c1b0cb6fae10d86409435364edc6102ef
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 21:15:02 2020 +0200
Merge more models into one mesh than we did previously.
commit 3155c31e663c52ae5c3a53d5fb5665892a1a498a
Merge: 7204cc8a7 3c199280e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:35:22 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7204cc8a7a4f74a30306bd205d9834fee4bb944f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:34:43 2020 +0200
Fix not yet done NPC animations.
This forces them all to be the idle animation if not specified.
This fixes issues where you'd have giant NPCs in water.
commit bc83360f2a08918f19d417b5f772e1ff554dba08
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 19:36:37 2020 +0200
Try to fix some bugs:
- Z fighting with LOD terrain and water.
- Audio SFX not playing.
commit 1fd104aa603bf3781b6526a5cada46aeca3049dd
Merge: 862df3c99 7c2c392a3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 12:02:31 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 862df3c9976c4da9bd7cfd784f1a85973127968a
Merge: 0a4218ed9 75c1d4401
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 05:52:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0a4218ed9d541a2b34c133351bea38a99ddf4ea7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 22:27:14 2020 +0200
Fix particle depth.
commit f51dfdeb442d0dd5243dd2f344fa4be295bd0875
Merge: c6251a956 5e6dc0471
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:19:04 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit c6251a956ad376400dca5c23420cf8d213dc8fdf
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:15:46 2020 +0200
Cache figures more intelligently.
Cache figures for longer, and don't cache character states for the
player except where they actually affect the rendered model.
commit 0ed801d5404982c6fb63b1eaa4567d908b294c9d
Merge: c11b9bdf0 eea64f78f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 16:32:24 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c11b9bdf0a53bf9884d2f5a48fec9b01d582df1a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 11:47:15 2020 +0200
Remove unneeded Clippy annotation.
commit 16aa9ef40af56d69289d00aafb3deadfb8bd4f35
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 8 00:53:02 2020 +0200
Fix hotloading and Clippy.
commit 3dc973e0be5b758da1e9805eb764ad401374cd0c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 23:50:27 2020 +0200
Major speedups with SIMD.
commit fba64a7d93d5a96077ce87287bbce6ab9b7fbcae
Merge: 76429d00e d1e10b178
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:19 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 76429d00eea00d212fbd672a84ee91e75b19b938
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:10 2020 +0200
Add clippy.toml.
commit c79f512f84dbb83cb82b7954db68ff241dfd8e41
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 11:55:20 2020 +0200
Fix all clippy issues, clean up Rust code.
commit 6f90e010b3fbefb53b0d632e819931350015b6b8
Merge: 77a8c7c26 5929cfa5c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:30 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 77a8c7c267d3f44a1a62bd6b2274359973c5e4d4
Merge: b44e44232 44febaabd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:10 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 5929cfa5c713aa392110bbb62407f76caf53c3df
Author: jshipsey <jshipsey18@gmail.com>
Date: Thu Aug 6 20:47:27 2020 -0400
fixed in-hand arrow bug
commit b44e442325d828f1cd564d66908f89d09e80474b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 6 13:40:35 2020 +0200
Miscellaneous performance improvements.
commit be37acf287c1360d8085862526ac3365ffd1d768
Merge: 125d7fc6c c11876547
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 05:49:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 125d7fc6c4dcd8c8c5f27b8268a4d64f409f3644
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 04:55:31 2020 +0200
Abstract over simd vs. repr_c vectors.
Also some minor improvements to Event size.
commit d4d4956e9252e1241ce110b2aa85076c6b1e2a23
Merge: 5f3b7294a aced5f979
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:56:54 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 5f3b7294af1f8533edc2620b58863c248e2b07af
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:43:52 2020 +0200
Fix formatting issues I missed before.
commit a428a3ebba70dcab63dd0f8cd983120c90617271
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:41:51 2020 +0200
Fix clippy warnings, part 1.
There aer still a bunch of type too complex and
function takes too many arguments warnings that I'll fix later
(or ignore, since in the one case I did fix a function takes too
many arguments warning I think it made the code *less* readable).
commit ba54307540ed8a937ac08209730284fc653af85b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 30 13:22:42 2020 +0200
Fix light animations so they are removed when the light turns off.
commit 7e0f4bcbf0f4717145d8beac40d52e3acebbe2aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 21:10:20 2020 +0200
Fix crash in edge case for pixel art.
commit 56da06f7a351e2b949e9b014a90b974d511a0924
Merge: cf74d55f2 9f53a4a19
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:56:52 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:29:52 2020 +0200
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
The first concern was addressed by fixing the dimensions of the map
images drawn from the UI (so that we always use a square source
rectangle, rather than a rectangular one according to the dimensions of
the map). We also fixed the way rotation was done in the fragment
shader for north-facing sources to make it properly handle aspect ratio
(this was already done for north-facing targets). Together, these fix
rendering issues peculiar to rectangular maps.
The second and third concerns were jointly addressed by adding an
optional border color to every 2D image drawn by the UI. This turns
out not to waste extra space even though we hold a full f32 color
(to avoid an extra dependency on gfx's PackedColor), since voxel
images already take up more space than Optiion<[f32; 4]> requires.
This is then implemented automatically using the "border color"
wrapping method in the attached sampler.
Since this is implemented in graphics hardware, it only works (at
least naively) if the actual image bounds match the texture bounds.
Therefore, we altered the way the graphics cache stores images
with a border color to guarantee that they are always in their own
texture, whose size exactly matches their extent. Since the easiest
currently exposed way to set a border color is to do so for an
immutable texture, we went a bit further and added a new "immutable"
texture storage type used for these cases; currently, it is always
and automatically used only when there is a specified border color,
but in theory there's no reason we couldn't provide immutable-only
images that use the default wrapping mdoe (though clamp to border
is admittedly not a great default).
To fix the maps case specifically, we set the border color to a
translucent version of the ocean border color. This may need
tweaking going forward, which shouldn't be hard.
As part of this process, we had to modify graphics replacement to
make sure immutable images are *removed* when invalidated, rather
than just having a validity flag unset (this is normally done by
the UI to try to reuse allocations in place if images are updated
in benign ways, since the texture atlases used for Ui do not
support deallocation; currently this is only used for item images,
so there should be no overlap with immutable image replacement,
so this was purely precautionary).
Since we were already touching the relevant code, we also updated
the image dependency to a newer version that provides more ways
to avoid allocations, and made a few other changes that should
hopefully eliminate redundant most of the intermediate buffer
allocations we were performing for what should be zero-cost
conversions. This may slightly improve performance in some
cases.
commit ad18ce939940a8c697270f6e9b94db9942fd8295
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 13:21:09 2020 +0200
Fix continent scale hack.
commit 36b1cb074f5b195aebd7dbbc3da7f0246a1a18ec
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 12:11:40 2020 +0200
Enable loading different sized maps without a recompile.
We may want to tweak the effects of the continent_scale_hack.
commit 13b6d4d534cc4814b7cb3294ca41bbfea0a6b186
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 10:55:48 2020 +0200
Removing WORLD_SIZE, part 1.
Erased almost every instance of WORLD_SIZE and replaced it with a local
power of two, map_size_lg (which respects certain invariants; see
common/src/terrain/map.rs for more details about MapSizeLg). This also
means we can avoid a dependency on the world crate from client, as
desired.
Now that the rest of the code is not expecting a fixed WORLD_SIZE, the
next step is to arrange for maps to store their world size, and to use
that world size as a basis prior to loading the map (as well, probably,
as prior to configuring some of the noise functions).
commit 30b1d2c6428230a9eaa0d749cdcbbd6f1cbccd78
Merge: 7d56ba31b 1377b369f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:58 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 7d56ba31b445441461b28a07fc495d7d4f047c17
Merge: 2101113b4 598f14b25
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 1377b369f6db2258e910d467a5740f31789e3ded
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sun Jul 19 23:25:38 2020 +0200
more saturated pumpkins
commit ae8d50527f93bb0616c2ad46ce4dacb63bc37c6d
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sat Jul 18 20:29:56 2020 +0200
acacia models
commit 2101113b467e691de787392d7f20f1745f5637bd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 18 18:55:25 2020 +0200
Higher detail LOD.
commit add2cfae04b4385fa5590e11e2bd5229d9dee0aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 16 01:57:39 2020 +0200
Revert some irrelevant stuff.
commit 2e2ab3dc1eaa59a4aef7f8d34a53d8aae4c8553a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 15 13:30:49 2020 +0200
Fixing various things about shadows.
* Correcting optimal LISPSM parameter.
* Figure shadows are cast when they're not visible.
* Chunk shadows stay cast until you look away.
* Seamless cubemaps for point lights.
* Etc.
commit 6c31e6b56217274285b597af297036691ea5d897
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 19:50:26 2020 +0200
Fix shadow creation.
commit 6332cbe006115ae205597529cd8bbccd146c2cca
Merge: be438657c 930e0028b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:47:00 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit be438657c33d7b5bfb0a9582c3ed3fd366637323
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:28:08 2020 +0200
Tweaks to shadows.
Added shadow map resolution configuration, added seamless cubemaps,
documented all existing rendering options, and fixed a few Clippy
errors.
commit 23b4058906013c7d2a40c286e20e32c5fbd897ed
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 10:11:19 2020 +0200
Fix moon, use nonlinear noise for terrain.
Note that the latter has a bit of performance cost.
commit 7fbe5cbfbb9dc29607957b8e62f432a4deed193d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:23:02 2020 +0200
Address lies about max texture size.
commit bcfc62b5e13a1cdd83f57535fde4694720bebfd9
Merge: 75e3626a7 18a08e8fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:22:08 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 75e3626a785919f43fdcf2127c2b10e3e4df2f9f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:21:52 2020 +0200
OpenGL 3.3 minimum.
commit 18a08e8fe2739f02af99a5d2cb4e7c38c49e858b
Author: Monty Marz <m.marzouq@gmx.de>
Date: Tue Jul 7 23:57:52 2020 +0200
settings localization
commit 90c5d1ca3620092bc3ae10b2211489eb1cf6f5e8
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 21:11:48 2020 +0200
Lower near distance.
commit 0e66f02b25aaddaa2dfddbbc89cd67de54a9a7b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 20:09:01 2020 +0200
All sprites sway in the wind now.
commit db1401a6910bf42dcf502462c90038752ff5fbdb
Merge: 69e508d8c e8b4b29d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 19:34:17 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 69e508d8c94d8973033817ca86f357e466fc7c4d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 18:41:37 2020 +0200
Make it easy to switch to SIMD for math.
commit ffe0f5928c7a7e87d00cb5426b3b1d831d7e02fd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 21:21:12 2020 +0200
Fix some issues with underwater rendering.
commit bfda6da42f38fd02c31ee92c81ab785a3e50c2a0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 19:17:59 2020 +0200
Fix some minor display issues.
commit 0ed752e087968cf901301884aaeae698e32ef8a5
Merge: ccc6a06a8 518edcb85
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:14:21 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit ccc6a06a8d4504d6b9f7af7905a414d2ee06ab76
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:04:34 2020 +0200
Some minor changes.
commit 4e020246702889269efe1a191788992164c508d6
Merge: 50a64d927 e05c9267a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 16:17:40 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 50a64d927e6c4f4b0e4688e4cbfca694bc3f922a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 13:07:03 2020 +0200
Fix far plane.
commit 7dd06da34cae8f9ea3b6c889fe965181f3fd3949
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:25:35 2020 +0200
Add shadows.glsl.
commit 618a18c998778bf871b905a74657440fcc384c80
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:10:22 2020 +0200
Adding shadows, greedy meshing, and more.
commit eaea83fe6a5cb1cb0ba8beef888183c718258496
Merge: 267018495 2f89b863e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 22:47:07 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 2670184954a13e4a9e7a4e35ba79aac0c5fac2f7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 21:20:01 2020 +0200
Make civsim and sites deterministic.
For anything in worldgen where you use a HashMap, *please* think
carefully about which hasher you are going to use! This is
especially true if (for some reason) you are depending on hashmap
iteration order remaining stable for some aspect of worldgen.
commit f8376fd5dc72b4a9c2f51a6b4570d59c8b8e9343
Merge: 654f7e049 cdee191dd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 17:53:57 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 654f7e049258d9da27c09608bbe6a46ffa8787e5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed May 20 21:22:30 2020 +0200
Correct backface culling.
commit 560501df05ca725409b0f2e4eb31bdfdc15fd0c7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue May 19 17:22:06 2020 +0200
Greedy messhing for shadows.
commit a4d87e1875ca543436e6bbbeb20348facc5a52d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun May 17 05:59:00 2020 +0200
Shadow maps work for lantern.
commit 243d0837b8a3b08172c9a3c348d964d7ddc2a0a8
Merge: 04382dc28 71dd520cd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:53:13 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 04382dc28632b6c66e8821f6870c0daaa1c1901a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:22:17 2020 +0200
WIP: better graphics config, better LOD, shadow maps.
commit 22ddbad3eb32bfa70f0932176022208fe67ded81
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 18:54:09 2020 +0200
Minor shader fixes.
commit 746a10e8d01ac235f994b0cde78fa48998602a1f
Merge: 0f4a0e763 40ab94673
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 04:02:09 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0f4a0e763db3afbdc4fb0558611f38326ca87151
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 23:03:24 2020 +0200
Switch back to pop-in terrain.
commit dd74fa7e4a53667b38811d7aec58d7f6a68889bb
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 22:58:55 2020 +0200
LOD shading closer to voxel shading.
commit ef67bd58ba0bdaf622b078892d768263b6cba268
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 28 20:49:03 2020 +0200
Experimental underwater lighting.
commit 2c5ad9d07605e80d5fd5679dd3a5d70c605b86a9
Merge: 748279835 303967a6f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 22:35:24 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7482798354eda18c8207950080fc24d443a369de
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 21:59:55 2020 +0200
Replace discard in figure-frag.
commit d83b4ae69be4912f69bf7835f509c68a1c7770a4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:45:57 2020 +0200
Fix sprite lighting, HDR from focus_pos.
commit 0594238004f116274905fa0ed7c2b6c417ed1d29
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:14:10 2020 +0200
Proper HDR from point lights.
commit 48c93d2b41ce5743103d18e76cc228f5ac766492
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 14:01:43 2020 +0200
Brighter ambiance, darker LOD shadows.
commit e0452e895ccfa8a43f368cae3b8b8aedc24dad93
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 13:13:23 2020 +0200
More proper HDR.
commit 4c6da3ed16cfeebb455e40da5f557b4af9a499d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 00:13:10 2020 +0200
Trying LOD noise.
commit 682a3d74c85df5503ffe1fc1cc891bce789df1ad
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 23:11:08 2020 +0200
Fix LOD heights in towns.
commit cc39e5734e8b18f9077bf42e66337c1319dd6b6e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 21:01:23 2020 +0200
More LOD fixes.
commit 8116b21c2e51c836e77894e309ac273caf2917b3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:54:43 2020 +0200
I like this coloring.
commit bc2560ea90b36f4b46190005344232d993043ac3
Merge: 14effdd5d e690efe71
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:48:33 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 14effdd5db8747fcf3eb34f03b46b7792e92d1c5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:24:35 2020 +0200
Re-saturate.
commit 48a643955d4435b78179acba0beb4a979905cc31
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:23:57 2020 +0200
Various fixes.
commit f7b497a0c25f4ad4682c71dd1ed6f608052feb9b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 03:22:49 2020 +0200
Render figures again.
commit 44e4aad48deba8266b9f8bdfd3db096b381f5327
Merge: e6f0a5a98 9ec319a18
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 02:01:04 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit e6f0a5a981a82533ba188fff0a54ce98577bb152
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 24 16:12:20 2020 +0200
Add atmospheric scattering.
commit f2953087f691a8edbc001cb98ebf5059fc6f8ac0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 23 00:01:20 2020 +0200
Fix shadowing for specular reflections.
commit ddd4a67a9799b8d08c7dc0c2bec90621c2bed0e3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Apr 22 22:56:12 2020 +0200
HDR fixes.
commit 1015e60deef3c447381996277df7496707a63bd0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 21 18:25:19 2020 +0200
More lighting changes.
commit 80c264abd111fb237e57843efcb5c071d4f84613
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 13 00:29:59 2020 +0200
Lighting experiments.
commit 8414987e589dd5102bad89762a3adaccc0bfe957
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 9 02:38:40 2020 +0200
WIP -- lighting changes and soft shadows.
commit 9cd2b3fb0d6b49776c6dfe463e4169637250b11a
Merge: c7ea687eb 8b149ad11
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:29 2020 +0200
Merge branch 'sharp/new-lighting' into sharp/small-fixes
commit c7ea687ebbc5aace1b455f134a5bf49ce2c7434a
Merge: 476441531 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:02 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 8b149ad11ad4bb75018fcf9519baec27d1c95951
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:32:39 2020 +0200
Trying out a new lighting model.
commit b0ac9f36f755dd06f7c17c46150568064790864f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 07:56:11 2020 +0200
Use bicubic interpolation for terrain.
commit f6fc9307a121514b614bc50ef8eb055953e7da8a
Merge: 33140a295 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 05:01:41 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 4764415312aae6e9ac2d00e86e84577cb958f1ab
Merge: ed2d0111d 13388ee6a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 04:54:48 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 13388ee6a42943f3f79a9cb488346cef18e272fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 20:30:08 2020 +0200
Various fixes (to coloring and to soft shadows).
commit fbd084a94a067082a87cd6d28b82054709bc9265
Merge: 5a089863b 4fdf6896a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 18:50:38 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/map-colors
commit ed2d0111d994262ae836d84d1fe5a45e4de72a0b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 06:49:27 2020 +0200
Combining colors and LOD.
commit 88342640c6b835114d01c797b89fdede3b0a2108
Merge: 33140a295 5a089863b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:49:20 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 33140a2951b8212725f42c758b277aaec4d888f7
Merge: 4c65a5aed f34d4b379
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:36:21 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 5a089863beb01d4794bbe3580ada47b278715ea2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 03:17:49 2020 +0200
Making maps brighter.
This is probably not the right way to do it, but oh well!
commit 32b2c99109dd486aa922886081068f9c550c83f2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 02:46:36 2020 +0200
Horizon mapping and "layered" map generation.
Horizon mapping is a method of shadow mapping specific to height maps.
It can handle any angle between 0 and 90 degrees from the ground, as
long as know the horizontal direction in advance, by remembering only a
single angle (the "horizon angle" of the shadow map). More is explained
in common/src/msg/server.rs. We also remember the approximate height of
the largest occluder, to try to be able to generate soft shadows and
create a vertical position where the shadows can't go higher.
Additionally, map generation has been reworked. Instead of computing
everything from explicit samples, we pass in sampling functions that
return exactly what the map generator needs. This allows us to cleanly
separate the way we sample things like altitudes and colors from the map
generation process. We exploit this to generate maps *partially* on the
server (with colors and rivers, but not shading). We can then send the
partially completed map to the client, which can combine it with shadow
information to generate the final map. This is useful for two reasons:
first, it makes sure the client can apply shadow information by itself,
and second, it lets us pass the unshaded map for use with level of
detail functionality.
For similar reasons, river generation is split
out into its own layer, but for now we opt to still generate rivers on
the server (since the river wire format is more complicated to compress
and may require some extra work to make sure we have enough precision to
draw rivers well enough for LoD).
Finally, the mostly ad-hoc lighting we were performing has been (mostly)
replaced with explicit Phong reflection shading (including specular
highlights). Regularizing this seems useful and helps clarify the
"meaning" of the various light intensities, and helps us keep a more
physically plausible basis. However, its interaction with soft shadows
is still imperfect, and it's not yet clear to me what we need to do to
turn this into something useful for LoD.
commit f8926a5737ddc51f3d585c651a64c43677aae0f4
Merge: a1aee931e 875ae6ced
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Mar 13 13:32:42 2020 +0100
Merge remote-tracking branch 'origin/master' into sharp/map-colors
commit 4c65a5aed353b119aea65a2aaeb94549b67beb42
Author: Treeco <5021038-Treeco@users.noreply.gitlab.com>
Date: Mon Feb 24 16:48:05 2020 +0000
Made LOD setting slider exponential
commit 2fa7b2d20d7233dc8bfd64f9f7f54617575248f1
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 17:49:53 2020 +0000
Added mist to LoD
commit aab059a450b5f635777129ff82cc15b662965c3c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 15:14:06 2020 +0000
Added LoD slider
commit 779c36b538121c5ade3633ae5cb67bb14c8c3877
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:54:55 2020 +0000
Reduced cost of vertex pushing
commit 9fea150473906b166365b738ebcea07c697daf3d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:38:53 2020 +0000
Fixed maths, improved LoD resolution
commit 5481df38fea5bf183ff376a3337179cfaa5233dc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 11:22:50 2020 +0000
Dynamically relocate LoD vertices to enhance details
commit a3e36a50ababd615da7db1b26158c7906a5def01
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 18:13:51 2020 +0000
Simpler terrain spiral rendering
commit 255f450ae9ac8763db4bede075fb409161ed57cc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:53:17 2020 +0000
Better LoD precision
commit 3d027aebe812a5b8658a4eb8123dc9f61b3776d2
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:04:03 2020 +0000
Better falloff
commit be775c9484b457b2c0b1a494aec03392d0c70e76
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 15:30:45 2020 +0000
Applied good ideas from experimental branch
commit 58587b68545a23c5c04ab4574a4b94b3bc982246
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 16:15:13 2020 +0000
Minor fixes to LoD merging
commit 7b42aebd709c14df2db766aad61d9280ad24d84d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 15:04:44 2020 +0000
Capped LoD dragging
commit 8aafc559f87124e1ea5ca6e3ddc2aa0c242d793c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:54:37 2020 +0000
Better blending between LoD and terrain border
commit edd3455d5161792d87ddc8eadc0ecbad5532b284
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:40:19 2020 +0000
Fixed LoD z depth, added sea level offset
commit b9b06744620114dd5556e73f64fa93c145503a7c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:27:43 2020 +0000
Better LoD smoothing
commit a1aee931e790431560cd2d953ad61d9497072afd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Feb 21 14:52:17 2020 +0100
Adding shadows.
commit 2400786c13dd891c131ed86d48d05df516a8a778
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 13:48:40 2020 +0000
Use world map as LoD source
commit dbf650f504a4c25fbbc2096ac3616c736bf52d23
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Jan 20 00:48:14 2020 +0000
Better clouds at distance
commit 5e6f81b86cdb9730b9b056877b19257075fd5fa8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Jan 19 23:59:02 2020 +0000
sync
commit 745e7540ddb000cc645f612767b337c2ddc3f7c0
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 12:40:48 2019 +0000
Improved cloud falloff mist, faster noise sampling
commit f6a200d0cb866196ba57697466755f9e0c7ea5d8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 10:09:00 2019 +0000
Improved long-range depth precision, removed unnecessary LoD polygons
commit 63d1b2bb2292898d59fb4f4e502201103dfeb86f
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 20:57:46 2019 +0000
Working LoD shader
commit f13d98ee3e58f881e8b978861a67663b59ed91ec
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 11:03:40 2019 +0000
LoD first attempt (stack overflow issue)
2020-08-20 18:34:59 +00:00
|
|
|
|
let wposf = (uniform_idx_as_vec2(map_size_lg, posi)
|
|
|
|
|
* TerrainChunkSize::RECT_SIZE.map(|e| e as i32))
|
|
|
|
|
.map(|e| e as f64);
|
2020-01-11 21:05:22 +00:00
|
|
|
|
let turb_wposf = wposf
|
2020-01-20 01:59:28 +00:00
|
|
|
|
.mul(5_000.0 / continent_scale)
|
2020-01-11 21:05:22 +00:00
|
|
|
|
.div(TerrainChunkSize::RECT_SIZE.map(|e| e as f64))
|
|
|
|
|
.div(turb_wposf_div);
|
|
|
|
|
let turb = Vec2::new(
|
|
|
|
|
gen_ctx.turb_x_nz.get(turb_wposf.into_array()),
|
|
|
|
|
gen_ctx.turb_y_nz.get(turb_wposf.into_array()),
|
|
|
|
|
) * uplift_turb_scale
|
|
|
|
|
* TerrainChunkSize::RECT_SIZE.map(|e| e as f64);
|
|
|
|
|
let turb_wposf = wposf + turb;
|
|
|
|
|
let uheight = gen_ctx
|
|
|
|
|
.uplift_nz
|
|
|
|
|
.get(turb_wposf.into_array())
|
|
|
|
|
.min(1.0)
|
|
|
|
|
.max(-1.0)
|
|
|
|
|
.mul(0.5)
|
|
|
|
|
.add(0.5);
|
|
|
|
|
let wposf3 = Vec3::new(
|
|
|
|
|
wposf.x,
|
|
|
|
|
wposf.y,
|
|
|
|
|
uheight * CONFIG.mountain_scale as f64 * rock_strength_div_factor,
|
|
|
|
|
);
|
|
|
|
|
let rock_strength = gen_ctx
|
|
|
|
|
.rock_strength_nz
|
|
|
|
|
.get(wposf3.into_array())
|
|
|
|
|
.min(1.0)
|
|
|
|
|
.max(-1.0)
|
|
|
|
|
.mul(0.5)
|
|
|
|
|
.add(0.5);
|
2020-01-22 14:31:10 +00:00
|
|
|
|
let center = 0.4;
|
|
|
|
|
let dmin = center - 0.05;
|
|
|
|
|
let dmax = center + 0.05;
|
2020-01-11 21:05:22 +00:00
|
|
|
|
let log_odds = |x: f64| logit(x) - logit(center);
|
|
|
|
|
let ustrength = logistic_cdf(
|
|
|
|
|
1.0 * logit(rock_strength.min(1.0f64 - 1e-7).max(1e-7))
|
|
|
|
|
+ 1.0 * log_odds(uheight.min(dmax).max(dmin)),
|
|
|
|
|
);
|
|
|
|
|
// Frog Hollow (peak production = 0.25): α = 4.2e-2
|
|
|
|
|
// San Gabriel Mountains: α = 3.8e-2
|
|
|
|
|
// marine: α = 3.7e-2
|
|
|
|
|
// Oregon Coast Range: α = 3e-2
|
|
|
|
|
// Nunnock river (fractured granite, least weathered?): α = 2e-3
|
|
|
|
|
// Point Reyes: α = 1.6e-2
|
|
|
|
|
// The stronger the rock, the faster the decline in soil production.
|
2020-01-18 18:41:37 +00:00
|
|
|
|
let alpha_i = (ustrength * (4.2e-2 - 1.6e-2) + 1.6e-2) as f32;
|
|
|
|
|
alpha_i * alpha_scale_i
|
2020-01-11 21:05:22 +00:00
|
|
|
|
};
|
2020-01-11 20:38:30 +00:00
|
|
|
|
let uplift_fn = |posi| {
|
|
|
|
|
if is_ocean_fn(posi) {
|
|
|
|
|
return 0.0;
|
|
|
|
|
}
|
2020-01-22 14:31:10 +00:00
|
|
|
|
let height = (uplift_uniform[posi].1 - alt_old_min_uniform) as f64
|
|
|
|
|
/ (alt_old_max_uniform - alt_old_min_uniform) as f64;
|
2019-11-11 17:14:58 +00:00
|
|
|
|
|
2020-01-11 20:38:30 +00:00
|
|
|
|
let height = height.mul(max_epsilon - min_epsilon).add(min_epsilon);
|
|
|
|
|
let height = erosion_factor(height);
|
|
|
|
|
assert!(height >= 0.0);
|
|
|
|
|
assert!(height <= 1.0);
|
2020-01-22 14:31:10 +00:00
|
|
|
|
|
2020-01-11 20:38:30 +00:00
|
|
|
|
// u = 1e-3: normal-high (dike, mountain)
|
|
|
|
|
// u = 5e-4: normal (mid example in Yuan, average mountain uplift)
|
2020-02-01 20:39:39 +00:00
|
|
|
|
// u = 2e-4: low (low example in Yuan; known that lagoons etc. may have u ~
|
|
|
|
|
// 0.05). u = 0: low (plateau [fan, altitude = 0.0])
|
2020-01-22 14:31:10 +00:00
|
|
|
|
let height = height.mul(max_erosion_per_delta_t);
|
2020-01-11 21:05:22 +00:00
|
|
|
|
height as f64
|
2020-01-11 20:38:30 +00:00
|
|
|
|
};
|
2019-11-19 18:34:52 +00:00
|
|
|
|
let alt_func = |posi| {
|
|
|
|
|
if is_ocean_fn(posi) {
|
2020-01-22 14:31:10 +00:00
|
|
|
|
old_height(posi)
|
2019-11-19 18:34:52 +00:00
|
|
|
|
} else {
|
2020-01-11 19:53:58 +00:00
|
|
|
|
(old_height(posi) as f64 / CONFIG.mountain_scale as f64) as f32 - 0.5
|
2019-11-19 18:34:52 +00:00
|
|
|
|
}
|
|
|
|
|
};
|
2019-12-11 09:14:50 +00:00
|
|
|
|
|
2020-01-22 14:31:10 +00:00
|
|
|
|
// Perform some erosion.
|
|
|
|
|
|
|
|
|
|
let (alt, basement) = if let Some(map) = parsed_world_file {
|
|
|
|
|
(map.alt, map.basement)
|
2019-12-11 09:14:50 +00:00
|
|
|
|
} else {
|
2020-01-22 14:31:10 +00:00
|
|
|
|
let (alt, basement) = do_erosion(
|
(See sharp/lod-history) LOD, shadows, greedy meshing, new lighting, perf
---
Pretty much a Veloren fork at this point. Here's a high level overview of the changes (will be added to CHANGELOG just before merge).
At a high level this MR incorporates roughly two groups of changes.
The first group consists of new game features: more flexible map sizes, level of detail terrain, shadow maps, and a new lighting
engine. This is "feature work" that (mostly) only adds new things to Veloren, and mostly shouldn't affect old stuff.
The second big group of changes are those addressing the fallout from all the new features. These include performance fixes of
various sorts: the addition of multiple graphics options and optimization of the cheap ones to avoid work, switching all voxel
models to use some variant of greedy meshing, switching over much of our CPU-side vector math to exploit SIMD instructions
(coinciding with a fork of `vek`), and a rewrite of how the UI handles text rendering (coinciding with updates to our fork
of `conrod`). Making Veloren's hardcoded colors appear correct under the new lighting engine also required considerably
changes (TODO: Fill in this section when it's complete).
The second category of changes often heavily touches code owned by other people, including frequently modified code "owned" by a
handful of people, so I recommend that this code be reviewed particularly carefully.
---
At a high level (each will be described in more detail below):
- The world map has been refactored.
- The world size is no longer hardcoded (@zesterer).
- The map generation code was made generic to allow using it outside of the `world` crate (@zesterer).
- On world creation, we now compute *horizon maps* (@zesterer).
- The way we pass the world from the server to the client has been updated (@xMAC94x).
- Artifacts related to image rotation were fixed (@imbris).
- Multiflow rivers were enabled (@zesterer).
- In the process of making changes related to the world map, various incidental fixes and optimizations were required.
- The new *level of detail* feature was added (@zesterer wrote part of this and has checked out the rest).
- A new LOD terrain rendering step was added to the pipeline.
- The LOD terrain quality was made configurable via a graphics setting.
- Horizon maps were used to cast shadows from LOD chunks on both LOD and non-LOD terrain.
- A "voxelization" effect was incorporated into rendered LOD terrain to make it blend better into the world.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Veloren's lighting has been completely overhauled (@zesterer has already checked most of this out).
- A semi-accurate index of refraction was assigned to our materials.
- A new, more realistic, physically based approach to lighting was used using the *Ashikhmin Shirley* BRDF.
- We emulate *atmospheric scattering* using equations designed for measuring solar panel light exposure.
- We attempt to compute *realistic light attenuation* in water using its real material properties.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Point and directional lights now cast realistic shadows, using *shadow mapping.* (@imbris, @zesterer, @Treeco, @YuriMomo)
- Point light shadow maps were added to the rendering pipeline, using geometry shaders and *seamless cube maps*.
- Directional light shadows were added to the rendering pipeline, using LISPSM together with disabling *depth clamping*.
- "Shadow-only" chunks and NPCs were added to prevent shadows from models behind you from disappearing.
- In the process of making changes related to shadow maps, various incidental fixes and optimizations were required.
The addition of shadow maps, LOD terrain, and the new lighting all led to significant performance degradation, on top of other
changes happening in master. Therefore, a large number of performance improvements were also needed:
- The graphics options were made much more flexible and configurable, and shaders were optimize.
- New options were provided for how to render lights and shadows (@Pfauenauge, @zesterer).
- Graphic setting storage and configuration were overhauled to make adding new features easier (@Pfauenauge, @imbris).
- Shaders were rewritten to utilize GLSL's preprocessor to avoid overhead (@zesterer, @YuriMomo).
- In the process of making changes related to providing additional rendering options, various incidental fixes and optimizations were required.
- Voxel model creation was switched to use *greedy meshing.*
- A new voxel meshing method, greedy meshing, was added (@imbris).
- Uses of the older meshing methods were migrated to use greedy meshing (@imbris, @jshipsey, @Pfauenauge).
- New restrictions were added to terrain, figure, and sprites to future proof them for further optimizations (@jshipsey, @Pfauenauge, @zesterer).
- Most positions are now relative to either chunk or player position for better precision (@imbris, @zesterer, @scottc).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- Animation and terrain math were switched to use SIMD where possible.
- Fixes were made to vek to make its SIMD feature usable for us (@zesterer, @imbris).
- The interface and types used in bone animation were changed in various ways (@jshipsey, @Snowram, @Pfauenauge).
- Redundant code generation for body animation is now partly taken care of by a macro (@jshipsey, @Snowram, @Pfauenauge).
- Animation code was modified to to use vek's SIMD representation where possible (@jshipsey, @Snowram, @Pfauenauge).
- Terrain meshing code and shadow map math were also modified to use vek's SIMD representation (@imbris).
- SIMD instruction generation was enabled (@YuriMomo, @jshipsey, @Snowram, @imbris, @Angelonfira, @xMAC94x).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- The way we cache glyphs was completely refactored, fixed, and optimized.
- Our fork of `conrod` was optimized in various ways (@imbris).
- Our fork of `conrod` now exposes whether a widget was updated during the current frame (@imbris).
- Our use of the glyph cache was rewritten for correctness (@imbris).
- A *text cache* was introduced that lets us skip remeshing glyphs that have not changed (@imbris).
- Various changes were made to reduce pressure on the glyph cache, with more planned (@imbris, @Pfauenauge).
- In the process of making changes related to the glyph cache, various incidental fixes and optimizations were required.
- Colors were changed to keep Veloren's look consistent with master.
- Some older tree models were brought back (@Pfauenauge).
- TODO(@Sharp): All hardcoded colors were extracted and made hotloadable.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Hardcoded colors were fixed to conform to Veloren's style.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Color models were fixed to conform to Veloren's style.
A detailed description of the involved changes follows.
---
- The world size is no longer hardcoded. All functions dependent on world size now take a `WorldSizeLg`, which holds the base 2 logarithm of each actual world dimension and is guaranteed to maintain certain properties (outlined in `common/src/terrain/map.rs`). Additionally, many utility functions that utilize the world size were moved into `common` as well (mostly `common/src/terrain/mod.rs`). Finally, the world map format was updated in order to store its size explicitly, with a migration path from the old format that should work whenever the old formatted map was a square (practically always). See `world/src/sim/mod.rs` for these changes.
- The map generation code was made generic to allow using it outside of the `world` crate. The parts of the map generating code that do not need to query the world were moved over to `common/src/terrain/map.rs`, allowing them to be used from the client without creating a dependency on `world`. The rest of it was turned into helper functions in `world/src/sim/map.rs`, which can be passed as closures to the generic map generation code to complete its construction. This also means that colors are now passed in separately to the map generation function. See <https://veloren.net/devblog-78/> for more details.
- On world creation, we now compute *horizon maps*. See the function in `world/src/sim/util.rs`.
Given a height map and a plane intersecting that height map, our horizon maps allow us to encode enough information to reconstruct shadows for each point on the height map using only the *horizon angle* (the angle at which the sun starts to become visible). As Veloren's sun only covers one plane, this is sufficient for encoding sun shadows for LOD terrain, by encoding two angles per chunk (one for each 90 degrees the sun covers). We can also use this for the moon, if we want, since the moon follows the same path. Additionally, we store the *height* of the furthest occluder, to try to make the shadows volumetric; so this means 4 bytes in total for each chunk.
Support for horizon maps has been merged into the map functionality in common as well.
- The way we pass the world from the server to the client has been updated. Rather than passing the prerendered map, we instead pass three maps with values for each chunk; one with the color information, a second with altitude information, and a third with horizon map information. We then reconstruct the map on the client, together with some additional information we send from the server (like the sea level and maximum height). See `common/src/msg/server.rs` for a detailed description of the format of `WorldMapMsg`, and `server/src/libr.rs` and `client/src/lib.rs` for details of the map construction and parsing.
- Artifacts related to image rotation were fixed. See the commit message for commit SHA `cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e` for a detailed explanation. This involved changes to shaders, the addition of a new type of graphic (also reflected in the graphic cache) that allows specifying a border color (which automatically makes the associated texture immutable), and some related fixes. I reproduce the first two paragraphs of the MR description as well:
```
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
```
- Multiflow rivers were enabled.
This does not really need to be part of this MR, and would be easy to revert, but since it seemed to provide a nice improvement it's currently packaged with it.
We already computed multiple outflows from each chunk for erosion purposes long before this MR.
However, we never modified river rendering to be able to handle this case (just a single downhill river flow is complex enough!) so this was not exposed when deciding which chunks were rivers.
Now that
- In the process of making changes related to the world map, various incidental fixes and optimizations were required. Some examples of fixes include making sure terrain is never lowered to below sea level (to make the shadow maps report correct values), fixing map altitudes and colors to understand things like cliffs and "block level" coloring (that doesn'te xist on the column level), and fixing a crashbug when rendering images for the UI where source pixels are strongly rectangular. Some examples of related performance fixes include avoiding allocating a fresh vector for all the maps (i.e. copying it over to change the format from `[u32; n]` to `DynamicImage` and then copying again to convert to `RgbaImage`), and instead using the `gfx::memory::slice` function to accomplish the same thing. These sorts of changes are spread all arond the code.
This includes the additon of a new scene, `voxygen/src/scene/lod.rs`, a new pipeline `voxygen/src/render/pipeline/lod_terrain.rs`, and new shaders `assets/vxygen/shaders/lod-terrain-vert.glsl` and `assets/vxygen/shaders/lod-terrain-frag.glsl`, as well as associated changes to the renderer in `voxygen/src/render/renderer.rs`.
The main idea behind our initial approach to LOD was to take the world data we now get from the server (altitude, color, and horizon mapping).
- Some previously computed values were turned into shader uniforms for better prediction on weak processors. (@zesterer)
- Calls to power or trig functions were removed or replaced with multiplications, where possible.
- After some deliberation
- To properly handle sprite "waving" for nearby sprites,
We explicitly designed the greedy meshing system with figures and sprites in mind.
In both cases, we want to be able to *efficiently* pack many different models into the same texture, especially in cases where we know
we will either not be removing any of the grouped-together from the models from the texture, or will remove all of them at once (so
they can be packed into some specific subtexture).
For sprites, since we know every model in advance and never intend to deallocate them, we currently pack them all as efficiently as
possible into one giant tetxure atlas. However, in the future we might opt to pack them slightly less efficiently in exchange for
shrinking the sprite vertex size.
For figures, we pack all the textures for each *model* into the same atlas.
is a global texture atlas used for every sprite, and for figures which is why we have the ability to mesh multiple
models to the same texture area (using the simple texture atlas allocator) without requiring intermediate vector allocations.
This is accomplished by delaying the time when we actually write the color and light data to the texture until *after* all the
model vertices have been meshed; then, we can just allocate the whole color/light array at once, making the atlas we use an
exact fit. In computer science-y terms, we accomplish this delay by, after we perform the initial greedy meshing (without
texture information), not continuing to create the texture data, but instead constructing a *continuation*--that is, a function
that, when called, will execute the rest of the computation. We push this continuation (which in Rust terms is a `FnOnce` closure
that takes the `ColLightsInfo` that it is supposed to write to as context) onto a
onto a vector
resizing. To allow for suspended writes to texture data, Rust pointed out to me that the continuation that would eventually write the color and light data to the texture atlas (the one that is shared by all models sharing the same greedy mesher) would have to *own* whatever data it mshed. Because we often generate the model data to mesh as a temporary in `voxygen/src/load.rs`, the
- Matrix multiplications in the shader were reduced for figure data (@zesterer).
- Vertex "waves" for fluid data were removed.
- Terrain "bending" near edges was removed.
- Scaling was fixed to make sure empty space was not introduced in a space previously occupied by a block. It was also changed to take ownership of its voxel data,
rather than sharing it, to let it be used with meshing.
- Rust's nightly version was bumped in order to use the `array_map` function, which lets us reuse more code between the simple map and `FigureModelCache`.
- PositionedGlyph::standalone.
---
I tried to cite sources in many cases[^realtime],[^lloyd],[^lispsm],[^pbrt],[^greedy],[^tjunctions]
where I needed features from elsewhere but I am particularly grateful for the following resources,
esepcially where they have accompanying source code. I linked all of them that are accessible to the public (those that are not were
obtained through legal means).
[^realtime]: Eisemann, Elmar, Michael Schwarz, Ulf Assarsson, Michael Wimmer. Real-Time Shadows. A K Peters/CRC Press (T&F), 20160419.
[^lloyd]: Lloyd,B. 2007. [Logarithmic perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). PhD thesis, University of North Carolina.
[^lispsm]: Wimmer, M., Scherzer, D., and Purgathofer, W. 2004. [Light space perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). In Proceedings of Eurographics Symposium on Rendering 2004, pp. 143– 152.
[^pbrt]: Pharr, Matt, et al. [http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf](Physically Based Rendering: From Theory to Implementation). Third edition, Morgan Kaufmann Publishers/Elsevier, 2017.
[^greedy]: mikolalysenko. “Meshing in a Minecraft Game.” 0 FPS, 30 June 2012, <https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/>.
[^tjunctions]: blackflux. “Meshing in Voxel Engines – Part 1.” Blackflux.Com, 23 Feb. 2014, <https://blackflux.wordpress.com/2014/02/23/meshing-in-voxel-engines-part-1/>.
I am also especially grateful to Khronos, Wikiepdia, and stackoverflow for answering many of my specific questions while writing the MR.
---
Squashed commit of the following:
commit 300505e7305a2fdac722a808ee8538323f215f39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 18:46:25 2020 +0200
Fixing cargo doc and typo in CHANGELOG.
commit ec0aeb18e8499d7d84ef818331b4b65c3d76cea6
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 15:38:50 2020 +0200
Hopefully final commit for the LOD branch.
commit 5e8ea0b1eaac02903a02feb2eb038d195de4872f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 10:14:26 2020 +0200
Falling back to power as stopgap.
commit e44a1cbf46504ee9931a01bdc9033e145500d557
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 09:25:41 2020 +0200
Address imbris feedback.
Temporarily disables shiny water, lowers max VD.
These restrictions will be lifted soon after merging.
commit 561e25778a108ac3712f5ec2ce3a51234c4430d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 08:31:13 2020 +0200
Tweaking shaders a bit.
commit 7d19259078ce0dd7b3742ad7d0cb3fab3ece3fdc
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:59:43 2020 +0200
Fix view example as well.
commit 051cd4934e0fad2c0b15db4380a4189fa318679f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:29:06 2020 +0200
Fix meshing benchmark.
commit c95e07db3b4dcca285678985e65e31b927cb1c61
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 05:46:22 2020 +0200
Address MR feedback, fix scene clouds.
commit 1bfb816cabdb3ffc1e507a009c2d98696b4b573a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:39:36 2020 +0200
Incorporating Pfau's figure color changes.
New eyes and new humanoid colors.
commit 3f9b89a3ac7b3356b1dba0d1a8f6541357f81469
Merge: e2f5162e4 62c53963a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:29:41 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit e2f5162e4f96f4124aa43488f7245d341b3dcfd4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:28:38 2020 +0200
World colors are all hotloadable.
They live in assets/world/style/colors.ron.
Only a small handful of hardcoed colors remain in World; they are either
part of the map, or difficult to disentangle from the rest of the
computation. Comments are made where appropriate.
commit 62c53963abe1975009d34a8f9515a355bef24f31
Author: Marcel Märtens <marcel.cochem@googlemail.com>
Date: Wed Aug 19 15:59:00 2020 +0200
replace pretty_env_logger with tracing
commit 5b1625f99d9586fe80e2232f583ec5af9f953099
Merge: d71003acd 4942b5b39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:15:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit d71003acdabeff970b3928e97c26af6847b5b78e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:14:34 2020 +0200
Hotloading colors, part 1: colors in common.
Currently, this just entails humanoid colors. There are only three
colors not handled; the light emitter colors in
common/src/comp/inventory/item/tool.rs. These don't seem important
enough to me to warrant making hotloadable, at least not right now, but
if it's needed later we can always add them to the file.
commit 63b5e0e553eb2ea49276f192a6fc7dd65254270d
Merge: c32b337a4 6d2c4b9c1
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 13:05:37 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c32b337a46e10d9de473d178a94a3ccd61c39bb3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:52:04 2020 +0200
Fixing LOD grid, for real.
commit a166ae0360395387e09fb35a1f84210c2ce5ec24
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:28:05 2020 +0200
Addressing imbris's initial feedback.
Fixes two minor bugs: explosion particles were no longer spawning
randomly, and LOD grids were not perfectly even.
commit 4cbad004f44060994252dd3d38647a14a589712f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:27:58 2020 +0200
Bumping nightly per request.
commit 548680276aac77c25d43d16b5622f847d474dbef
Merge: acc098604 8f8b20c91
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:26:06 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit acc0986040589a3492f88a740bc3c3fc693b26d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:28:32 2020 +0200
Lower resolution due to lying drivers.
commit d3b878de2a52c358d2944a6bbd0555dad7fbdb10
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:15:38 2020 +0200
Fix issues msh encountered with Intel 4600.
commit 10245e0c1b0cb6fae10d86409435364edc6102ef
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 21:15:02 2020 +0200
Merge more models into one mesh than we did previously.
commit 3155c31e663c52ae5c3a53d5fb5665892a1a498a
Merge: 7204cc8a7 3c199280e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:35:22 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7204cc8a7a4f74a30306bd205d9834fee4bb944f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:34:43 2020 +0200
Fix not yet done NPC animations.
This forces them all to be the idle animation if not specified.
This fixes issues where you'd have giant NPCs in water.
commit bc83360f2a08918f19d417b5f772e1ff554dba08
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 19:36:37 2020 +0200
Try to fix some bugs:
- Z fighting with LOD terrain and water.
- Audio SFX not playing.
commit 1fd104aa603bf3781b6526a5cada46aeca3049dd
Merge: 862df3c99 7c2c392a3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 12:02:31 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 862df3c9976c4da9bd7cfd784f1a85973127968a
Merge: 0a4218ed9 75c1d4401
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 05:52:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0a4218ed9d541a2b34c133351bea38a99ddf4ea7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 22:27:14 2020 +0200
Fix particle depth.
commit f51dfdeb442d0dd5243dd2f344fa4be295bd0875
Merge: c6251a956 5e6dc0471
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:19:04 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit c6251a956ad376400dca5c23420cf8d213dc8fdf
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:15:46 2020 +0200
Cache figures more intelligently.
Cache figures for longer, and don't cache character states for the
player except where they actually affect the rendered model.
commit 0ed801d5404982c6fb63b1eaa4567d908b294c9d
Merge: c11b9bdf0 eea64f78f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 16:32:24 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c11b9bdf0a53bf9884d2f5a48fec9b01d582df1a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 11:47:15 2020 +0200
Remove unneeded Clippy annotation.
commit 16aa9ef40af56d69289d00aafb3deadfb8bd4f35
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 8 00:53:02 2020 +0200
Fix hotloading and Clippy.
commit 3dc973e0be5b758da1e9805eb764ad401374cd0c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 23:50:27 2020 +0200
Major speedups with SIMD.
commit fba64a7d93d5a96077ce87287bbce6ab9b7fbcae
Merge: 76429d00e d1e10b178
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:19 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 76429d00eea00d212fbd672a84ee91e75b19b938
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:10 2020 +0200
Add clippy.toml.
commit c79f512f84dbb83cb82b7954db68ff241dfd8e41
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 11:55:20 2020 +0200
Fix all clippy issues, clean up Rust code.
commit 6f90e010b3fbefb53b0d632e819931350015b6b8
Merge: 77a8c7c26 5929cfa5c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:30 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 77a8c7c267d3f44a1a62bd6b2274359973c5e4d4
Merge: b44e44232 44febaabd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:10 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 5929cfa5c713aa392110bbb62407f76caf53c3df
Author: jshipsey <jshipsey18@gmail.com>
Date: Thu Aug 6 20:47:27 2020 -0400
fixed in-hand arrow bug
commit b44e442325d828f1cd564d66908f89d09e80474b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 6 13:40:35 2020 +0200
Miscellaneous performance improvements.
commit be37acf287c1360d8085862526ac3365ffd1d768
Merge: 125d7fc6c c11876547
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 05:49:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 125d7fc6c4dcd8c8c5f27b8268a4d64f409f3644
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 04:55:31 2020 +0200
Abstract over simd vs. repr_c vectors.
Also some minor improvements to Event size.
commit d4d4956e9252e1241ce110b2aa85076c6b1e2a23
Merge: 5f3b7294a aced5f979
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:56:54 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 5f3b7294af1f8533edc2620b58863c248e2b07af
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:43:52 2020 +0200
Fix formatting issues I missed before.
commit a428a3ebba70dcab63dd0f8cd983120c90617271
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:41:51 2020 +0200
Fix clippy warnings, part 1.
There aer still a bunch of type too complex and
function takes too many arguments warnings that I'll fix later
(or ignore, since in the one case I did fix a function takes too
many arguments warning I think it made the code *less* readable).
commit ba54307540ed8a937ac08209730284fc653af85b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 30 13:22:42 2020 +0200
Fix light animations so they are removed when the light turns off.
commit 7e0f4bcbf0f4717145d8beac40d52e3acebbe2aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 21:10:20 2020 +0200
Fix crash in edge case for pixel art.
commit 56da06f7a351e2b949e9b014a90b974d511a0924
Merge: cf74d55f2 9f53a4a19
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:56:52 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:29:52 2020 +0200
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
The first concern was addressed by fixing the dimensions of the map
images drawn from the UI (so that we always use a square source
rectangle, rather than a rectangular one according to the dimensions of
the map). We also fixed the way rotation was done in the fragment
shader for north-facing sources to make it properly handle aspect ratio
(this was already done for north-facing targets). Together, these fix
rendering issues peculiar to rectangular maps.
The second and third concerns were jointly addressed by adding an
optional border color to every 2D image drawn by the UI. This turns
out not to waste extra space even though we hold a full f32 color
(to avoid an extra dependency on gfx's PackedColor), since voxel
images already take up more space than Optiion<[f32; 4]> requires.
This is then implemented automatically using the "border color"
wrapping method in the attached sampler.
Since this is implemented in graphics hardware, it only works (at
least naively) if the actual image bounds match the texture bounds.
Therefore, we altered the way the graphics cache stores images
with a border color to guarantee that they are always in their own
texture, whose size exactly matches their extent. Since the easiest
currently exposed way to set a border color is to do so for an
immutable texture, we went a bit further and added a new "immutable"
texture storage type used for these cases; currently, it is always
and automatically used only when there is a specified border color,
but in theory there's no reason we couldn't provide immutable-only
images that use the default wrapping mdoe (though clamp to border
is admittedly not a great default).
To fix the maps case specifically, we set the border color to a
translucent version of the ocean border color. This may need
tweaking going forward, which shouldn't be hard.
As part of this process, we had to modify graphics replacement to
make sure immutable images are *removed* when invalidated, rather
than just having a validity flag unset (this is normally done by
the UI to try to reuse allocations in place if images are updated
in benign ways, since the texture atlases used for Ui do not
support deallocation; currently this is only used for item images,
so there should be no overlap with immutable image replacement,
so this was purely precautionary).
Since we were already touching the relevant code, we also updated
the image dependency to a newer version that provides more ways
to avoid allocations, and made a few other changes that should
hopefully eliminate redundant most of the intermediate buffer
allocations we were performing for what should be zero-cost
conversions. This may slightly improve performance in some
cases.
commit ad18ce939940a8c697270f6e9b94db9942fd8295
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 13:21:09 2020 +0200
Fix continent scale hack.
commit 36b1cb074f5b195aebd7dbbc3da7f0246a1a18ec
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 12:11:40 2020 +0200
Enable loading different sized maps without a recompile.
We may want to tweak the effects of the continent_scale_hack.
commit 13b6d4d534cc4814b7cb3294ca41bbfea0a6b186
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 10:55:48 2020 +0200
Removing WORLD_SIZE, part 1.
Erased almost every instance of WORLD_SIZE and replaced it with a local
power of two, map_size_lg (which respects certain invariants; see
common/src/terrain/map.rs for more details about MapSizeLg). This also
means we can avoid a dependency on the world crate from client, as
desired.
Now that the rest of the code is not expecting a fixed WORLD_SIZE, the
next step is to arrange for maps to store their world size, and to use
that world size as a basis prior to loading the map (as well, probably,
as prior to configuring some of the noise functions).
commit 30b1d2c6428230a9eaa0d749cdcbbd6f1cbccd78
Merge: 7d56ba31b 1377b369f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:58 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 7d56ba31b445441461b28a07fc495d7d4f047c17
Merge: 2101113b4 598f14b25
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 1377b369f6db2258e910d467a5740f31789e3ded
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sun Jul 19 23:25:38 2020 +0200
more saturated pumpkins
commit ae8d50527f93bb0616c2ad46ce4dacb63bc37c6d
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sat Jul 18 20:29:56 2020 +0200
acacia models
commit 2101113b467e691de787392d7f20f1745f5637bd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 18 18:55:25 2020 +0200
Higher detail LOD.
commit add2cfae04b4385fa5590e11e2bd5229d9dee0aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 16 01:57:39 2020 +0200
Revert some irrelevant stuff.
commit 2e2ab3dc1eaa59a4aef7f8d34a53d8aae4c8553a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 15 13:30:49 2020 +0200
Fixing various things about shadows.
* Correcting optimal LISPSM parameter.
* Figure shadows are cast when they're not visible.
* Chunk shadows stay cast until you look away.
* Seamless cubemaps for point lights.
* Etc.
commit 6c31e6b56217274285b597af297036691ea5d897
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 19:50:26 2020 +0200
Fix shadow creation.
commit 6332cbe006115ae205597529cd8bbccd146c2cca
Merge: be438657c 930e0028b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:47:00 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit be438657c33d7b5bfb0a9582c3ed3fd366637323
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:28:08 2020 +0200
Tweaks to shadows.
Added shadow map resolution configuration, added seamless cubemaps,
documented all existing rendering options, and fixed a few Clippy
errors.
commit 23b4058906013c7d2a40c286e20e32c5fbd897ed
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 10:11:19 2020 +0200
Fix moon, use nonlinear noise for terrain.
Note that the latter has a bit of performance cost.
commit 7fbe5cbfbb9dc29607957b8e62f432a4deed193d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:23:02 2020 +0200
Address lies about max texture size.
commit bcfc62b5e13a1cdd83f57535fde4694720bebfd9
Merge: 75e3626a7 18a08e8fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:22:08 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 75e3626a785919f43fdcf2127c2b10e3e4df2f9f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:21:52 2020 +0200
OpenGL 3.3 minimum.
commit 18a08e8fe2739f02af99a5d2cb4e7c38c49e858b
Author: Monty Marz <m.marzouq@gmx.de>
Date: Tue Jul 7 23:57:52 2020 +0200
settings localization
commit 90c5d1ca3620092bc3ae10b2211489eb1cf6f5e8
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 21:11:48 2020 +0200
Lower near distance.
commit 0e66f02b25aaddaa2dfddbbc89cd67de54a9a7b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 20:09:01 2020 +0200
All sprites sway in the wind now.
commit db1401a6910bf42dcf502462c90038752ff5fbdb
Merge: 69e508d8c e8b4b29d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 19:34:17 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 69e508d8c94d8973033817ca86f357e466fc7c4d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 18:41:37 2020 +0200
Make it easy to switch to SIMD for math.
commit ffe0f5928c7a7e87d00cb5426b3b1d831d7e02fd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 21:21:12 2020 +0200
Fix some issues with underwater rendering.
commit bfda6da42f38fd02c31ee92c81ab785a3e50c2a0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 19:17:59 2020 +0200
Fix some minor display issues.
commit 0ed752e087968cf901301884aaeae698e32ef8a5
Merge: ccc6a06a8 518edcb85
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:14:21 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit ccc6a06a8d4504d6b9f7af7905a414d2ee06ab76
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:04:34 2020 +0200
Some minor changes.
commit 4e020246702889269efe1a191788992164c508d6
Merge: 50a64d927 e05c9267a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 16:17:40 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 50a64d927e6c4f4b0e4688e4cbfca694bc3f922a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 13:07:03 2020 +0200
Fix far plane.
commit 7dd06da34cae8f9ea3b6c889fe965181f3fd3949
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:25:35 2020 +0200
Add shadows.glsl.
commit 618a18c998778bf871b905a74657440fcc384c80
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:10:22 2020 +0200
Adding shadows, greedy meshing, and more.
commit eaea83fe6a5cb1cb0ba8beef888183c718258496
Merge: 267018495 2f89b863e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 22:47:07 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 2670184954a13e4a9e7a4e35ba79aac0c5fac2f7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 21:20:01 2020 +0200
Make civsim and sites deterministic.
For anything in worldgen where you use a HashMap, *please* think
carefully about which hasher you are going to use! This is
especially true if (for some reason) you are depending on hashmap
iteration order remaining stable for some aspect of worldgen.
commit f8376fd5dc72b4a9c2f51a6b4570d59c8b8e9343
Merge: 654f7e049 cdee191dd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 17:53:57 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 654f7e049258d9da27c09608bbe6a46ffa8787e5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed May 20 21:22:30 2020 +0200
Correct backface culling.
commit 560501df05ca725409b0f2e4eb31bdfdc15fd0c7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue May 19 17:22:06 2020 +0200
Greedy messhing for shadows.
commit a4d87e1875ca543436e6bbbeb20348facc5a52d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun May 17 05:59:00 2020 +0200
Shadow maps work for lantern.
commit 243d0837b8a3b08172c9a3c348d964d7ddc2a0a8
Merge: 04382dc28 71dd520cd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:53:13 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 04382dc28632b6c66e8821f6870c0daaa1c1901a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:22:17 2020 +0200
WIP: better graphics config, better LOD, shadow maps.
commit 22ddbad3eb32bfa70f0932176022208fe67ded81
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 18:54:09 2020 +0200
Minor shader fixes.
commit 746a10e8d01ac235f994b0cde78fa48998602a1f
Merge: 0f4a0e763 40ab94673
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 04:02:09 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0f4a0e763db3afbdc4fb0558611f38326ca87151
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 23:03:24 2020 +0200
Switch back to pop-in terrain.
commit dd74fa7e4a53667b38811d7aec58d7f6a68889bb
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 22:58:55 2020 +0200
LOD shading closer to voxel shading.
commit ef67bd58ba0bdaf622b078892d768263b6cba268
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 28 20:49:03 2020 +0200
Experimental underwater lighting.
commit 2c5ad9d07605e80d5fd5679dd3a5d70c605b86a9
Merge: 748279835 303967a6f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 22:35:24 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7482798354eda18c8207950080fc24d443a369de
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 21:59:55 2020 +0200
Replace discard in figure-frag.
commit d83b4ae69be4912f69bf7835f509c68a1c7770a4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:45:57 2020 +0200
Fix sprite lighting, HDR from focus_pos.
commit 0594238004f116274905fa0ed7c2b6c417ed1d29
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:14:10 2020 +0200
Proper HDR from point lights.
commit 48c93d2b41ce5743103d18e76cc228f5ac766492
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 14:01:43 2020 +0200
Brighter ambiance, darker LOD shadows.
commit e0452e895ccfa8a43f368cae3b8b8aedc24dad93
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 13:13:23 2020 +0200
More proper HDR.
commit 4c6da3ed16cfeebb455e40da5f557b4af9a499d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 00:13:10 2020 +0200
Trying LOD noise.
commit 682a3d74c85df5503ffe1fc1cc891bce789df1ad
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 23:11:08 2020 +0200
Fix LOD heights in towns.
commit cc39e5734e8b18f9077bf42e66337c1319dd6b6e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 21:01:23 2020 +0200
More LOD fixes.
commit 8116b21c2e51c836e77894e309ac273caf2917b3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:54:43 2020 +0200
I like this coloring.
commit bc2560ea90b36f4b46190005344232d993043ac3
Merge: 14effdd5d e690efe71
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:48:33 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 14effdd5db8747fcf3eb34f03b46b7792e92d1c5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:24:35 2020 +0200
Re-saturate.
commit 48a643955d4435b78179acba0beb4a979905cc31
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:23:57 2020 +0200
Various fixes.
commit f7b497a0c25f4ad4682c71dd1ed6f608052feb9b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 03:22:49 2020 +0200
Render figures again.
commit 44e4aad48deba8266b9f8bdfd3db096b381f5327
Merge: e6f0a5a98 9ec319a18
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 02:01:04 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit e6f0a5a981a82533ba188fff0a54ce98577bb152
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 24 16:12:20 2020 +0200
Add atmospheric scattering.
commit f2953087f691a8edbc001cb98ebf5059fc6f8ac0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 23 00:01:20 2020 +0200
Fix shadowing for specular reflections.
commit ddd4a67a9799b8d08c7dc0c2bec90621c2bed0e3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Apr 22 22:56:12 2020 +0200
HDR fixes.
commit 1015e60deef3c447381996277df7496707a63bd0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 21 18:25:19 2020 +0200
More lighting changes.
commit 80c264abd111fb237e57843efcb5c071d4f84613
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 13 00:29:59 2020 +0200
Lighting experiments.
commit 8414987e589dd5102bad89762a3adaccc0bfe957
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 9 02:38:40 2020 +0200
WIP -- lighting changes and soft shadows.
commit 9cd2b3fb0d6b49776c6dfe463e4169637250b11a
Merge: c7ea687eb 8b149ad11
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:29 2020 +0200
Merge branch 'sharp/new-lighting' into sharp/small-fixes
commit c7ea687ebbc5aace1b455f134a5bf49ce2c7434a
Merge: 476441531 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:02 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 8b149ad11ad4bb75018fcf9519baec27d1c95951
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:32:39 2020 +0200
Trying out a new lighting model.
commit b0ac9f36f755dd06f7c17c46150568064790864f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 07:56:11 2020 +0200
Use bicubic interpolation for terrain.
commit f6fc9307a121514b614bc50ef8eb055953e7da8a
Merge: 33140a295 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 05:01:41 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 4764415312aae6e9ac2d00e86e84577cb958f1ab
Merge: ed2d0111d 13388ee6a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 04:54:48 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 13388ee6a42943f3f79a9cb488346cef18e272fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 20:30:08 2020 +0200
Various fixes (to coloring and to soft shadows).
commit fbd084a94a067082a87cd6d28b82054709bc9265
Merge: 5a089863b 4fdf6896a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 18:50:38 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/map-colors
commit ed2d0111d994262ae836d84d1fe5a45e4de72a0b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 06:49:27 2020 +0200
Combining colors and LOD.
commit 88342640c6b835114d01c797b89fdede3b0a2108
Merge: 33140a295 5a089863b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:49:20 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 33140a2951b8212725f42c758b277aaec4d888f7
Merge: 4c65a5aed f34d4b379
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:36:21 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 5a089863beb01d4794bbe3580ada47b278715ea2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 03:17:49 2020 +0200
Making maps brighter.
This is probably not the right way to do it, but oh well!
commit 32b2c99109dd486aa922886081068f9c550c83f2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 02:46:36 2020 +0200
Horizon mapping and "layered" map generation.
Horizon mapping is a method of shadow mapping specific to height maps.
It can handle any angle between 0 and 90 degrees from the ground, as
long as know the horizontal direction in advance, by remembering only a
single angle (the "horizon angle" of the shadow map). More is explained
in common/src/msg/server.rs. We also remember the approximate height of
the largest occluder, to try to be able to generate soft shadows and
create a vertical position where the shadows can't go higher.
Additionally, map generation has been reworked. Instead of computing
everything from explicit samples, we pass in sampling functions that
return exactly what the map generator needs. This allows us to cleanly
separate the way we sample things like altitudes and colors from the map
generation process. We exploit this to generate maps *partially* on the
server (with colors and rivers, but not shading). We can then send the
partially completed map to the client, which can combine it with shadow
information to generate the final map. This is useful for two reasons:
first, it makes sure the client can apply shadow information by itself,
and second, it lets us pass the unshaded map for use with level of
detail functionality.
For similar reasons, river generation is split
out into its own layer, but for now we opt to still generate rivers on
the server (since the river wire format is more complicated to compress
and may require some extra work to make sure we have enough precision to
draw rivers well enough for LoD).
Finally, the mostly ad-hoc lighting we were performing has been (mostly)
replaced with explicit Phong reflection shading (including specular
highlights). Regularizing this seems useful and helps clarify the
"meaning" of the various light intensities, and helps us keep a more
physically plausible basis. However, its interaction with soft shadows
is still imperfect, and it's not yet clear to me what we need to do to
turn this into something useful for LoD.
commit f8926a5737ddc51f3d585c651a64c43677aae0f4
Merge: a1aee931e 875ae6ced
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Mar 13 13:32:42 2020 +0100
Merge remote-tracking branch 'origin/master' into sharp/map-colors
commit 4c65a5aed353b119aea65a2aaeb94549b67beb42
Author: Treeco <5021038-Treeco@users.noreply.gitlab.com>
Date: Mon Feb 24 16:48:05 2020 +0000
Made LOD setting slider exponential
commit 2fa7b2d20d7233dc8bfd64f9f7f54617575248f1
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 17:49:53 2020 +0000
Added mist to LoD
commit aab059a450b5f635777129ff82cc15b662965c3c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 15:14:06 2020 +0000
Added LoD slider
commit 779c36b538121c5ade3633ae5cb67bb14c8c3877
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:54:55 2020 +0000
Reduced cost of vertex pushing
commit 9fea150473906b166365b738ebcea07c697daf3d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:38:53 2020 +0000
Fixed maths, improved LoD resolution
commit 5481df38fea5bf183ff376a3337179cfaa5233dc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 11:22:50 2020 +0000
Dynamically relocate LoD vertices to enhance details
commit a3e36a50ababd615da7db1b26158c7906a5def01
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 18:13:51 2020 +0000
Simpler terrain spiral rendering
commit 255f450ae9ac8763db4bede075fb409161ed57cc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:53:17 2020 +0000
Better LoD precision
commit 3d027aebe812a5b8658a4eb8123dc9f61b3776d2
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:04:03 2020 +0000
Better falloff
commit be775c9484b457b2c0b1a494aec03392d0c70e76
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 15:30:45 2020 +0000
Applied good ideas from experimental branch
commit 58587b68545a23c5c04ab4574a4b94b3bc982246
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 16:15:13 2020 +0000
Minor fixes to LoD merging
commit 7b42aebd709c14df2db766aad61d9280ad24d84d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 15:04:44 2020 +0000
Capped LoD dragging
commit 8aafc559f87124e1ea5ca6e3ddc2aa0c242d793c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:54:37 2020 +0000
Better blending between LoD and terrain border
commit edd3455d5161792d87ddc8eadc0ecbad5532b284
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:40:19 2020 +0000
Fixed LoD z depth, added sea level offset
commit b9b06744620114dd5556e73f64fa93c145503a7c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:27:43 2020 +0000
Better LoD smoothing
commit a1aee931e790431560cd2d953ad61d9497072afd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Feb 21 14:52:17 2020 +0100
Adding shadows.
commit 2400786c13dd891c131ed86d48d05df516a8a778
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 13:48:40 2020 +0000
Use world map as LoD source
commit dbf650f504a4c25fbbc2096ac3616c736bf52d23
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Jan 20 00:48:14 2020 +0000
Better clouds at distance
commit 5e6f81b86cdb9730b9b056877b19257075fd5fa8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Jan 19 23:59:02 2020 +0000
sync
commit 745e7540ddb000cc645f612767b337c2ddc3f7c0
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 12:40:48 2019 +0000
Improved cloud falloff mist, faster noise sampling
commit f6a200d0cb866196ba57697466755f9e0c7ea5d8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 10:09:00 2019 +0000
Improved long-range depth precision, removed unnecessary LoD polygons
commit 63d1b2bb2292898d59fb4f4e502201103dfeb86f
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 20:57:46 2019 +0000
Working LoD shader
commit f13d98ee3e58f881e8b978861a67663b59ed91ec
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 11:03:40 2019 +0000
LoD first attempt (stack overflow issue)
2020-08-20 18:34:59 +00:00
|
|
|
|
map_size_lg,
|
2019-12-11 09:14:50 +00:00
|
|
|
|
max_erosion_per_delta_t as f32,
|
|
|
|
|
n_steps,
|
|
|
|
|
&river_seed,
|
2020-01-18 18:41:37 +00:00
|
|
|
|
// varying conditions
|
2019-12-11 09:14:50 +00:00
|
|
|
|
&rock_strength_nz,
|
2020-01-18 18:41:37 +00:00
|
|
|
|
// initial conditions
|
2020-06-11 18:44:03 +00:00
|
|
|
|
alt_func,
|
2020-06-30 14:56:49 +00:00
|
|
|
|
alt_func,
|
2019-12-11 09:14:50 +00:00
|
|
|
|
is_ocean_fn,
|
2020-01-18 18:41:37 +00:00
|
|
|
|
// empirical constants
|
2019-12-11 09:14:50 +00:00
|
|
|
|
uplift_fn,
|
2020-06-11 18:44:03 +00:00
|
|
|
|
n_func,
|
|
|
|
|
theta_func,
|
|
|
|
|
kf_func,
|
|
|
|
|
kd_func,
|
|
|
|
|
g_func,
|
|
|
|
|
epsilon_0_func,
|
|
|
|
|
alpha_func,
|
2020-01-18 18:41:37 +00:00
|
|
|
|
// scaling factors
|
2020-06-11 18:44:03 +00:00
|
|
|
|
height_scale,
|
2020-01-18 18:41:37 +00:00
|
|
|
|
k_d_scale(n_approx),
|
2020-06-11 18:44:03 +00:00
|
|
|
|
k_da_scale,
|
2019-12-11 09:14:50 +00:00
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
// Quick "small scale" erosion cycle in order to lower extreme angles.
|
|
|
|
|
do_erosion(
|
(See sharp/lod-history) LOD, shadows, greedy meshing, new lighting, perf
---
Pretty much a Veloren fork at this point. Here's a high level overview of the changes (will be added to CHANGELOG just before merge).
At a high level this MR incorporates roughly two groups of changes.
The first group consists of new game features: more flexible map sizes, level of detail terrain, shadow maps, and a new lighting
engine. This is "feature work" that (mostly) only adds new things to Veloren, and mostly shouldn't affect old stuff.
The second big group of changes are those addressing the fallout from all the new features. These include performance fixes of
various sorts: the addition of multiple graphics options and optimization of the cheap ones to avoid work, switching all voxel
models to use some variant of greedy meshing, switching over much of our CPU-side vector math to exploit SIMD instructions
(coinciding with a fork of `vek`), and a rewrite of how the UI handles text rendering (coinciding with updates to our fork
of `conrod`). Making Veloren's hardcoded colors appear correct under the new lighting engine also required considerably
changes (TODO: Fill in this section when it's complete).
The second category of changes often heavily touches code owned by other people, including frequently modified code "owned" by a
handful of people, so I recommend that this code be reviewed particularly carefully.
---
At a high level (each will be described in more detail below):
- The world map has been refactored.
- The world size is no longer hardcoded (@zesterer).
- The map generation code was made generic to allow using it outside of the `world` crate (@zesterer).
- On world creation, we now compute *horizon maps* (@zesterer).
- The way we pass the world from the server to the client has been updated (@xMAC94x).
- Artifacts related to image rotation were fixed (@imbris).
- Multiflow rivers were enabled (@zesterer).
- In the process of making changes related to the world map, various incidental fixes and optimizations were required.
- The new *level of detail* feature was added (@zesterer wrote part of this and has checked out the rest).
- A new LOD terrain rendering step was added to the pipeline.
- The LOD terrain quality was made configurable via a graphics setting.
- Horizon maps were used to cast shadows from LOD chunks on both LOD and non-LOD terrain.
- A "voxelization" effect was incorporated into rendered LOD terrain to make it blend better into the world.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Veloren's lighting has been completely overhauled (@zesterer has already checked most of this out).
- A semi-accurate index of refraction was assigned to our materials.
- A new, more realistic, physically based approach to lighting was used using the *Ashikhmin Shirley* BRDF.
- We emulate *atmospheric scattering* using equations designed for measuring solar panel light exposure.
- We attempt to compute *realistic light attenuation* in water using its real material properties.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Point and directional lights now cast realistic shadows, using *shadow mapping.* (@imbris, @zesterer, @Treeco, @YuriMomo)
- Point light shadow maps were added to the rendering pipeline, using geometry shaders and *seamless cube maps*.
- Directional light shadows were added to the rendering pipeline, using LISPSM together with disabling *depth clamping*.
- "Shadow-only" chunks and NPCs were added to prevent shadows from models behind you from disappearing.
- In the process of making changes related to shadow maps, various incidental fixes and optimizations were required.
The addition of shadow maps, LOD terrain, and the new lighting all led to significant performance degradation, on top of other
changes happening in master. Therefore, a large number of performance improvements were also needed:
- The graphics options were made much more flexible and configurable, and shaders were optimize.
- New options were provided for how to render lights and shadows (@Pfauenauge, @zesterer).
- Graphic setting storage and configuration were overhauled to make adding new features easier (@Pfauenauge, @imbris).
- Shaders were rewritten to utilize GLSL's preprocessor to avoid overhead (@zesterer, @YuriMomo).
- In the process of making changes related to providing additional rendering options, various incidental fixes and optimizations were required.
- Voxel model creation was switched to use *greedy meshing.*
- A new voxel meshing method, greedy meshing, was added (@imbris).
- Uses of the older meshing methods were migrated to use greedy meshing (@imbris, @jshipsey, @Pfauenauge).
- New restrictions were added to terrain, figure, and sprites to future proof them for further optimizations (@jshipsey, @Pfauenauge, @zesterer).
- Most positions are now relative to either chunk or player position for better precision (@imbris, @zesterer, @scottc).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- Animation and terrain math were switched to use SIMD where possible.
- Fixes were made to vek to make its SIMD feature usable for us (@zesterer, @imbris).
- The interface and types used in bone animation were changed in various ways (@jshipsey, @Snowram, @Pfauenauge).
- Redundant code generation for body animation is now partly taken care of by a macro (@jshipsey, @Snowram, @Pfauenauge).
- Animation code was modified to to use vek's SIMD representation where possible (@jshipsey, @Snowram, @Pfauenauge).
- Terrain meshing code and shadow map math were also modified to use vek's SIMD representation (@imbris).
- SIMD instruction generation was enabled (@YuriMomo, @jshipsey, @Snowram, @imbris, @Angelonfira, @xMAC94x).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- The way we cache glyphs was completely refactored, fixed, and optimized.
- Our fork of `conrod` was optimized in various ways (@imbris).
- Our fork of `conrod` now exposes whether a widget was updated during the current frame (@imbris).
- Our use of the glyph cache was rewritten for correctness (@imbris).
- A *text cache* was introduced that lets us skip remeshing glyphs that have not changed (@imbris).
- Various changes were made to reduce pressure on the glyph cache, with more planned (@imbris, @Pfauenauge).
- In the process of making changes related to the glyph cache, various incidental fixes and optimizations were required.
- Colors were changed to keep Veloren's look consistent with master.
- Some older tree models were brought back (@Pfauenauge).
- TODO(@Sharp): All hardcoded colors were extracted and made hotloadable.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Hardcoded colors were fixed to conform to Veloren's style.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Color models were fixed to conform to Veloren's style.
A detailed description of the involved changes follows.
---
- The world size is no longer hardcoded. All functions dependent on world size now take a `WorldSizeLg`, which holds the base 2 logarithm of each actual world dimension and is guaranteed to maintain certain properties (outlined in `common/src/terrain/map.rs`). Additionally, many utility functions that utilize the world size were moved into `common` as well (mostly `common/src/terrain/mod.rs`). Finally, the world map format was updated in order to store its size explicitly, with a migration path from the old format that should work whenever the old formatted map was a square (practically always). See `world/src/sim/mod.rs` for these changes.
- The map generation code was made generic to allow using it outside of the `world` crate. The parts of the map generating code that do not need to query the world were moved over to `common/src/terrain/map.rs`, allowing them to be used from the client without creating a dependency on `world`. The rest of it was turned into helper functions in `world/src/sim/map.rs`, which can be passed as closures to the generic map generation code to complete its construction. This also means that colors are now passed in separately to the map generation function. See <https://veloren.net/devblog-78/> for more details.
- On world creation, we now compute *horizon maps*. See the function in `world/src/sim/util.rs`.
Given a height map and a plane intersecting that height map, our horizon maps allow us to encode enough information to reconstruct shadows for each point on the height map using only the *horizon angle* (the angle at which the sun starts to become visible). As Veloren's sun only covers one plane, this is sufficient for encoding sun shadows for LOD terrain, by encoding two angles per chunk (one for each 90 degrees the sun covers). We can also use this for the moon, if we want, since the moon follows the same path. Additionally, we store the *height* of the furthest occluder, to try to make the shadows volumetric; so this means 4 bytes in total for each chunk.
Support for horizon maps has been merged into the map functionality in common as well.
- The way we pass the world from the server to the client has been updated. Rather than passing the prerendered map, we instead pass three maps with values for each chunk; one with the color information, a second with altitude information, and a third with horizon map information. We then reconstruct the map on the client, together with some additional information we send from the server (like the sea level and maximum height). See `common/src/msg/server.rs` for a detailed description of the format of `WorldMapMsg`, and `server/src/libr.rs` and `client/src/lib.rs` for details of the map construction and parsing.
- Artifacts related to image rotation were fixed. See the commit message for commit SHA `cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e` for a detailed explanation. This involved changes to shaders, the addition of a new type of graphic (also reflected in the graphic cache) that allows specifying a border color (which automatically makes the associated texture immutable), and some related fixes. I reproduce the first two paragraphs of the MR description as well:
```
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
```
- Multiflow rivers were enabled.
This does not really need to be part of this MR, and would be easy to revert, but since it seemed to provide a nice improvement it's currently packaged with it.
We already computed multiple outflows from each chunk for erosion purposes long before this MR.
However, we never modified river rendering to be able to handle this case (just a single downhill river flow is complex enough!) so this was not exposed when deciding which chunks were rivers.
Now that
- In the process of making changes related to the world map, various incidental fixes and optimizations were required. Some examples of fixes include making sure terrain is never lowered to below sea level (to make the shadow maps report correct values), fixing map altitudes and colors to understand things like cliffs and "block level" coloring (that doesn'te xist on the column level), and fixing a crashbug when rendering images for the UI where source pixels are strongly rectangular. Some examples of related performance fixes include avoiding allocating a fresh vector for all the maps (i.e. copying it over to change the format from `[u32; n]` to `DynamicImage` and then copying again to convert to `RgbaImage`), and instead using the `gfx::memory::slice` function to accomplish the same thing. These sorts of changes are spread all arond the code.
This includes the additon of a new scene, `voxygen/src/scene/lod.rs`, a new pipeline `voxygen/src/render/pipeline/lod_terrain.rs`, and new shaders `assets/vxygen/shaders/lod-terrain-vert.glsl` and `assets/vxygen/shaders/lod-terrain-frag.glsl`, as well as associated changes to the renderer in `voxygen/src/render/renderer.rs`.
The main idea behind our initial approach to LOD was to take the world data we now get from the server (altitude, color, and horizon mapping).
- Some previously computed values were turned into shader uniforms for better prediction on weak processors. (@zesterer)
- Calls to power or trig functions were removed or replaced with multiplications, where possible.
- After some deliberation
- To properly handle sprite "waving" for nearby sprites,
We explicitly designed the greedy meshing system with figures and sprites in mind.
In both cases, we want to be able to *efficiently* pack many different models into the same texture, especially in cases where we know
we will either not be removing any of the grouped-together from the models from the texture, or will remove all of them at once (so
they can be packed into some specific subtexture).
For sprites, since we know every model in advance and never intend to deallocate them, we currently pack them all as efficiently as
possible into one giant tetxure atlas. However, in the future we might opt to pack them slightly less efficiently in exchange for
shrinking the sprite vertex size.
For figures, we pack all the textures for each *model* into the same atlas.
is a global texture atlas used for every sprite, and for figures which is why we have the ability to mesh multiple
models to the same texture area (using the simple texture atlas allocator) without requiring intermediate vector allocations.
This is accomplished by delaying the time when we actually write the color and light data to the texture until *after* all the
model vertices have been meshed; then, we can just allocate the whole color/light array at once, making the atlas we use an
exact fit. In computer science-y terms, we accomplish this delay by, after we perform the initial greedy meshing (without
texture information), not continuing to create the texture data, but instead constructing a *continuation*--that is, a function
that, when called, will execute the rest of the computation. We push this continuation (which in Rust terms is a `FnOnce` closure
that takes the `ColLightsInfo` that it is supposed to write to as context) onto a
onto a vector
resizing. To allow for suspended writes to texture data, Rust pointed out to me that the continuation that would eventually write the color and light data to the texture atlas (the one that is shared by all models sharing the same greedy mesher) would have to *own* whatever data it mshed. Because we often generate the model data to mesh as a temporary in `voxygen/src/load.rs`, the
- Matrix multiplications in the shader were reduced for figure data (@zesterer).
- Vertex "waves" for fluid data were removed.
- Terrain "bending" near edges was removed.
- Scaling was fixed to make sure empty space was not introduced in a space previously occupied by a block. It was also changed to take ownership of its voxel data,
rather than sharing it, to let it be used with meshing.
- Rust's nightly version was bumped in order to use the `array_map` function, which lets us reuse more code between the simple map and `FigureModelCache`.
- PositionedGlyph::standalone.
---
I tried to cite sources in many cases[^realtime],[^lloyd],[^lispsm],[^pbrt],[^greedy],[^tjunctions]
where I needed features from elsewhere but I am particularly grateful for the following resources,
esepcially where they have accompanying source code. I linked all of them that are accessible to the public (those that are not were
obtained through legal means).
[^realtime]: Eisemann, Elmar, Michael Schwarz, Ulf Assarsson, Michael Wimmer. Real-Time Shadows. A K Peters/CRC Press (T&F), 20160419.
[^lloyd]: Lloyd,B. 2007. [Logarithmic perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). PhD thesis, University of North Carolina.
[^lispsm]: Wimmer, M., Scherzer, D., and Purgathofer, W. 2004. [Light space perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). In Proceedings of Eurographics Symposium on Rendering 2004, pp. 143– 152.
[^pbrt]: Pharr, Matt, et al. [http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf](Physically Based Rendering: From Theory to Implementation). Third edition, Morgan Kaufmann Publishers/Elsevier, 2017.
[^greedy]: mikolalysenko. “Meshing in a Minecraft Game.” 0 FPS, 30 June 2012, <https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/>.
[^tjunctions]: blackflux. “Meshing in Voxel Engines – Part 1.” Blackflux.Com, 23 Feb. 2014, <https://blackflux.wordpress.com/2014/02/23/meshing-in-voxel-engines-part-1/>.
I am also especially grateful to Khronos, Wikiepdia, and stackoverflow for answering many of my specific questions while writing the MR.
---
Squashed commit of the following:
commit 300505e7305a2fdac722a808ee8538323f215f39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 18:46:25 2020 +0200
Fixing cargo doc and typo in CHANGELOG.
commit ec0aeb18e8499d7d84ef818331b4b65c3d76cea6
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 15:38:50 2020 +0200
Hopefully final commit for the LOD branch.
commit 5e8ea0b1eaac02903a02feb2eb038d195de4872f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 10:14:26 2020 +0200
Falling back to power as stopgap.
commit e44a1cbf46504ee9931a01bdc9033e145500d557
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 09:25:41 2020 +0200
Address imbris feedback.
Temporarily disables shiny water, lowers max VD.
These restrictions will be lifted soon after merging.
commit 561e25778a108ac3712f5ec2ce3a51234c4430d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 08:31:13 2020 +0200
Tweaking shaders a bit.
commit 7d19259078ce0dd7b3742ad7d0cb3fab3ece3fdc
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:59:43 2020 +0200
Fix view example as well.
commit 051cd4934e0fad2c0b15db4380a4189fa318679f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:29:06 2020 +0200
Fix meshing benchmark.
commit c95e07db3b4dcca285678985e65e31b927cb1c61
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 05:46:22 2020 +0200
Address MR feedback, fix scene clouds.
commit 1bfb816cabdb3ffc1e507a009c2d98696b4b573a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:39:36 2020 +0200
Incorporating Pfau's figure color changes.
New eyes and new humanoid colors.
commit 3f9b89a3ac7b3356b1dba0d1a8f6541357f81469
Merge: e2f5162e4 62c53963a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:29:41 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit e2f5162e4f96f4124aa43488f7245d341b3dcfd4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:28:38 2020 +0200
World colors are all hotloadable.
They live in assets/world/style/colors.ron.
Only a small handful of hardcoed colors remain in World; they are either
part of the map, or difficult to disentangle from the rest of the
computation. Comments are made where appropriate.
commit 62c53963abe1975009d34a8f9515a355bef24f31
Author: Marcel Märtens <marcel.cochem@googlemail.com>
Date: Wed Aug 19 15:59:00 2020 +0200
replace pretty_env_logger with tracing
commit 5b1625f99d9586fe80e2232f583ec5af9f953099
Merge: d71003acd 4942b5b39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:15:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit d71003acdabeff970b3928e97c26af6847b5b78e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:14:34 2020 +0200
Hotloading colors, part 1: colors in common.
Currently, this just entails humanoid colors. There are only three
colors not handled; the light emitter colors in
common/src/comp/inventory/item/tool.rs. These don't seem important
enough to me to warrant making hotloadable, at least not right now, but
if it's needed later we can always add them to the file.
commit 63b5e0e553eb2ea49276f192a6fc7dd65254270d
Merge: c32b337a4 6d2c4b9c1
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 13:05:37 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c32b337a46e10d9de473d178a94a3ccd61c39bb3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:52:04 2020 +0200
Fixing LOD grid, for real.
commit a166ae0360395387e09fb35a1f84210c2ce5ec24
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:28:05 2020 +0200
Addressing imbris's initial feedback.
Fixes two minor bugs: explosion particles were no longer spawning
randomly, and LOD grids were not perfectly even.
commit 4cbad004f44060994252dd3d38647a14a589712f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:27:58 2020 +0200
Bumping nightly per request.
commit 548680276aac77c25d43d16b5622f847d474dbef
Merge: acc098604 8f8b20c91
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:26:06 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit acc0986040589a3492f88a740bc3c3fc693b26d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:28:32 2020 +0200
Lower resolution due to lying drivers.
commit d3b878de2a52c358d2944a6bbd0555dad7fbdb10
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:15:38 2020 +0200
Fix issues msh encountered with Intel 4600.
commit 10245e0c1b0cb6fae10d86409435364edc6102ef
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 21:15:02 2020 +0200
Merge more models into one mesh than we did previously.
commit 3155c31e663c52ae5c3a53d5fb5665892a1a498a
Merge: 7204cc8a7 3c199280e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:35:22 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7204cc8a7a4f74a30306bd205d9834fee4bb944f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:34:43 2020 +0200
Fix not yet done NPC animations.
This forces them all to be the idle animation if not specified.
This fixes issues where you'd have giant NPCs in water.
commit bc83360f2a08918f19d417b5f772e1ff554dba08
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 19:36:37 2020 +0200
Try to fix some bugs:
- Z fighting with LOD terrain and water.
- Audio SFX not playing.
commit 1fd104aa603bf3781b6526a5cada46aeca3049dd
Merge: 862df3c99 7c2c392a3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 12:02:31 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 862df3c9976c4da9bd7cfd784f1a85973127968a
Merge: 0a4218ed9 75c1d4401
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 05:52:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0a4218ed9d541a2b34c133351bea38a99ddf4ea7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 22:27:14 2020 +0200
Fix particle depth.
commit f51dfdeb442d0dd5243dd2f344fa4be295bd0875
Merge: c6251a956 5e6dc0471
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:19:04 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit c6251a956ad376400dca5c23420cf8d213dc8fdf
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:15:46 2020 +0200
Cache figures more intelligently.
Cache figures for longer, and don't cache character states for the
player except where they actually affect the rendered model.
commit 0ed801d5404982c6fb63b1eaa4567d908b294c9d
Merge: c11b9bdf0 eea64f78f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 16:32:24 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c11b9bdf0a53bf9884d2f5a48fec9b01d582df1a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 11:47:15 2020 +0200
Remove unneeded Clippy annotation.
commit 16aa9ef40af56d69289d00aafb3deadfb8bd4f35
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 8 00:53:02 2020 +0200
Fix hotloading and Clippy.
commit 3dc973e0be5b758da1e9805eb764ad401374cd0c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 23:50:27 2020 +0200
Major speedups with SIMD.
commit fba64a7d93d5a96077ce87287bbce6ab9b7fbcae
Merge: 76429d00e d1e10b178
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:19 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 76429d00eea00d212fbd672a84ee91e75b19b938
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:10 2020 +0200
Add clippy.toml.
commit c79f512f84dbb83cb82b7954db68ff241dfd8e41
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 11:55:20 2020 +0200
Fix all clippy issues, clean up Rust code.
commit 6f90e010b3fbefb53b0d632e819931350015b6b8
Merge: 77a8c7c26 5929cfa5c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:30 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 77a8c7c267d3f44a1a62bd6b2274359973c5e4d4
Merge: b44e44232 44febaabd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:10 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 5929cfa5c713aa392110bbb62407f76caf53c3df
Author: jshipsey <jshipsey18@gmail.com>
Date: Thu Aug 6 20:47:27 2020 -0400
fixed in-hand arrow bug
commit b44e442325d828f1cd564d66908f89d09e80474b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 6 13:40:35 2020 +0200
Miscellaneous performance improvements.
commit be37acf287c1360d8085862526ac3365ffd1d768
Merge: 125d7fc6c c11876547
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 05:49:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 125d7fc6c4dcd8c8c5f27b8268a4d64f409f3644
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 04:55:31 2020 +0200
Abstract over simd vs. repr_c vectors.
Also some minor improvements to Event size.
commit d4d4956e9252e1241ce110b2aa85076c6b1e2a23
Merge: 5f3b7294a aced5f979
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:56:54 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 5f3b7294af1f8533edc2620b58863c248e2b07af
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:43:52 2020 +0200
Fix formatting issues I missed before.
commit a428a3ebba70dcab63dd0f8cd983120c90617271
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:41:51 2020 +0200
Fix clippy warnings, part 1.
There aer still a bunch of type too complex and
function takes too many arguments warnings that I'll fix later
(or ignore, since in the one case I did fix a function takes too
many arguments warning I think it made the code *less* readable).
commit ba54307540ed8a937ac08209730284fc653af85b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 30 13:22:42 2020 +0200
Fix light animations so they are removed when the light turns off.
commit 7e0f4bcbf0f4717145d8beac40d52e3acebbe2aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 21:10:20 2020 +0200
Fix crash in edge case for pixel art.
commit 56da06f7a351e2b949e9b014a90b974d511a0924
Merge: cf74d55f2 9f53a4a19
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:56:52 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:29:52 2020 +0200
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
The first concern was addressed by fixing the dimensions of the map
images drawn from the UI (so that we always use a square source
rectangle, rather than a rectangular one according to the dimensions of
the map). We also fixed the way rotation was done in the fragment
shader for north-facing sources to make it properly handle aspect ratio
(this was already done for north-facing targets). Together, these fix
rendering issues peculiar to rectangular maps.
The second and third concerns were jointly addressed by adding an
optional border color to every 2D image drawn by the UI. This turns
out not to waste extra space even though we hold a full f32 color
(to avoid an extra dependency on gfx's PackedColor), since voxel
images already take up more space than Optiion<[f32; 4]> requires.
This is then implemented automatically using the "border color"
wrapping method in the attached sampler.
Since this is implemented in graphics hardware, it only works (at
least naively) if the actual image bounds match the texture bounds.
Therefore, we altered the way the graphics cache stores images
with a border color to guarantee that they are always in their own
texture, whose size exactly matches their extent. Since the easiest
currently exposed way to set a border color is to do so for an
immutable texture, we went a bit further and added a new "immutable"
texture storage type used for these cases; currently, it is always
and automatically used only when there is a specified border color,
but in theory there's no reason we couldn't provide immutable-only
images that use the default wrapping mdoe (though clamp to border
is admittedly not a great default).
To fix the maps case specifically, we set the border color to a
translucent version of the ocean border color. This may need
tweaking going forward, which shouldn't be hard.
As part of this process, we had to modify graphics replacement to
make sure immutable images are *removed* when invalidated, rather
than just having a validity flag unset (this is normally done by
the UI to try to reuse allocations in place if images are updated
in benign ways, since the texture atlases used for Ui do not
support deallocation; currently this is only used for item images,
so there should be no overlap with immutable image replacement,
so this was purely precautionary).
Since we were already touching the relevant code, we also updated
the image dependency to a newer version that provides more ways
to avoid allocations, and made a few other changes that should
hopefully eliminate redundant most of the intermediate buffer
allocations we were performing for what should be zero-cost
conversions. This may slightly improve performance in some
cases.
commit ad18ce939940a8c697270f6e9b94db9942fd8295
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 13:21:09 2020 +0200
Fix continent scale hack.
commit 36b1cb074f5b195aebd7dbbc3da7f0246a1a18ec
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 12:11:40 2020 +0200
Enable loading different sized maps without a recompile.
We may want to tweak the effects of the continent_scale_hack.
commit 13b6d4d534cc4814b7cb3294ca41bbfea0a6b186
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 10:55:48 2020 +0200
Removing WORLD_SIZE, part 1.
Erased almost every instance of WORLD_SIZE and replaced it with a local
power of two, map_size_lg (which respects certain invariants; see
common/src/terrain/map.rs for more details about MapSizeLg). This also
means we can avoid a dependency on the world crate from client, as
desired.
Now that the rest of the code is not expecting a fixed WORLD_SIZE, the
next step is to arrange for maps to store their world size, and to use
that world size as a basis prior to loading the map (as well, probably,
as prior to configuring some of the noise functions).
commit 30b1d2c6428230a9eaa0d749cdcbbd6f1cbccd78
Merge: 7d56ba31b 1377b369f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:58 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 7d56ba31b445441461b28a07fc495d7d4f047c17
Merge: 2101113b4 598f14b25
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 1377b369f6db2258e910d467a5740f31789e3ded
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sun Jul 19 23:25:38 2020 +0200
more saturated pumpkins
commit ae8d50527f93bb0616c2ad46ce4dacb63bc37c6d
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sat Jul 18 20:29:56 2020 +0200
acacia models
commit 2101113b467e691de787392d7f20f1745f5637bd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 18 18:55:25 2020 +0200
Higher detail LOD.
commit add2cfae04b4385fa5590e11e2bd5229d9dee0aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 16 01:57:39 2020 +0200
Revert some irrelevant stuff.
commit 2e2ab3dc1eaa59a4aef7f8d34a53d8aae4c8553a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 15 13:30:49 2020 +0200
Fixing various things about shadows.
* Correcting optimal LISPSM parameter.
* Figure shadows are cast when they're not visible.
* Chunk shadows stay cast until you look away.
* Seamless cubemaps for point lights.
* Etc.
commit 6c31e6b56217274285b597af297036691ea5d897
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 19:50:26 2020 +0200
Fix shadow creation.
commit 6332cbe006115ae205597529cd8bbccd146c2cca
Merge: be438657c 930e0028b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:47:00 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit be438657c33d7b5bfb0a9582c3ed3fd366637323
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:28:08 2020 +0200
Tweaks to shadows.
Added shadow map resolution configuration, added seamless cubemaps,
documented all existing rendering options, and fixed a few Clippy
errors.
commit 23b4058906013c7d2a40c286e20e32c5fbd897ed
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 10:11:19 2020 +0200
Fix moon, use nonlinear noise for terrain.
Note that the latter has a bit of performance cost.
commit 7fbe5cbfbb9dc29607957b8e62f432a4deed193d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:23:02 2020 +0200
Address lies about max texture size.
commit bcfc62b5e13a1cdd83f57535fde4694720bebfd9
Merge: 75e3626a7 18a08e8fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:22:08 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 75e3626a785919f43fdcf2127c2b10e3e4df2f9f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:21:52 2020 +0200
OpenGL 3.3 minimum.
commit 18a08e8fe2739f02af99a5d2cb4e7c38c49e858b
Author: Monty Marz <m.marzouq@gmx.de>
Date: Tue Jul 7 23:57:52 2020 +0200
settings localization
commit 90c5d1ca3620092bc3ae10b2211489eb1cf6f5e8
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 21:11:48 2020 +0200
Lower near distance.
commit 0e66f02b25aaddaa2dfddbbc89cd67de54a9a7b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 20:09:01 2020 +0200
All sprites sway in the wind now.
commit db1401a6910bf42dcf502462c90038752ff5fbdb
Merge: 69e508d8c e8b4b29d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 19:34:17 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 69e508d8c94d8973033817ca86f357e466fc7c4d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 18:41:37 2020 +0200
Make it easy to switch to SIMD for math.
commit ffe0f5928c7a7e87d00cb5426b3b1d831d7e02fd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 21:21:12 2020 +0200
Fix some issues with underwater rendering.
commit bfda6da42f38fd02c31ee92c81ab785a3e50c2a0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 19:17:59 2020 +0200
Fix some minor display issues.
commit 0ed752e087968cf901301884aaeae698e32ef8a5
Merge: ccc6a06a8 518edcb85
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:14:21 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit ccc6a06a8d4504d6b9f7af7905a414d2ee06ab76
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:04:34 2020 +0200
Some minor changes.
commit 4e020246702889269efe1a191788992164c508d6
Merge: 50a64d927 e05c9267a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 16:17:40 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 50a64d927e6c4f4b0e4688e4cbfca694bc3f922a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 13:07:03 2020 +0200
Fix far plane.
commit 7dd06da34cae8f9ea3b6c889fe965181f3fd3949
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:25:35 2020 +0200
Add shadows.glsl.
commit 618a18c998778bf871b905a74657440fcc384c80
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:10:22 2020 +0200
Adding shadows, greedy meshing, and more.
commit eaea83fe6a5cb1cb0ba8beef888183c718258496
Merge: 267018495 2f89b863e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 22:47:07 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 2670184954a13e4a9e7a4e35ba79aac0c5fac2f7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 21:20:01 2020 +0200
Make civsim and sites deterministic.
For anything in worldgen where you use a HashMap, *please* think
carefully about which hasher you are going to use! This is
especially true if (for some reason) you are depending on hashmap
iteration order remaining stable for some aspect of worldgen.
commit f8376fd5dc72b4a9c2f51a6b4570d59c8b8e9343
Merge: 654f7e049 cdee191dd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 17:53:57 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 654f7e049258d9da27c09608bbe6a46ffa8787e5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed May 20 21:22:30 2020 +0200
Correct backface culling.
commit 560501df05ca725409b0f2e4eb31bdfdc15fd0c7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue May 19 17:22:06 2020 +0200
Greedy messhing for shadows.
commit a4d87e1875ca543436e6bbbeb20348facc5a52d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun May 17 05:59:00 2020 +0200
Shadow maps work for lantern.
commit 243d0837b8a3b08172c9a3c348d964d7ddc2a0a8
Merge: 04382dc28 71dd520cd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:53:13 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 04382dc28632b6c66e8821f6870c0daaa1c1901a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:22:17 2020 +0200
WIP: better graphics config, better LOD, shadow maps.
commit 22ddbad3eb32bfa70f0932176022208fe67ded81
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 18:54:09 2020 +0200
Minor shader fixes.
commit 746a10e8d01ac235f994b0cde78fa48998602a1f
Merge: 0f4a0e763 40ab94673
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 04:02:09 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0f4a0e763db3afbdc4fb0558611f38326ca87151
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 23:03:24 2020 +0200
Switch back to pop-in terrain.
commit dd74fa7e4a53667b38811d7aec58d7f6a68889bb
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 22:58:55 2020 +0200
LOD shading closer to voxel shading.
commit ef67bd58ba0bdaf622b078892d768263b6cba268
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 28 20:49:03 2020 +0200
Experimental underwater lighting.
commit 2c5ad9d07605e80d5fd5679dd3a5d70c605b86a9
Merge: 748279835 303967a6f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 22:35:24 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7482798354eda18c8207950080fc24d443a369de
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 21:59:55 2020 +0200
Replace discard in figure-frag.
commit d83b4ae69be4912f69bf7835f509c68a1c7770a4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:45:57 2020 +0200
Fix sprite lighting, HDR from focus_pos.
commit 0594238004f116274905fa0ed7c2b6c417ed1d29
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:14:10 2020 +0200
Proper HDR from point lights.
commit 48c93d2b41ce5743103d18e76cc228f5ac766492
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 14:01:43 2020 +0200
Brighter ambiance, darker LOD shadows.
commit e0452e895ccfa8a43f368cae3b8b8aedc24dad93
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 13:13:23 2020 +0200
More proper HDR.
commit 4c6da3ed16cfeebb455e40da5f557b4af9a499d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 00:13:10 2020 +0200
Trying LOD noise.
commit 682a3d74c85df5503ffe1fc1cc891bce789df1ad
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 23:11:08 2020 +0200
Fix LOD heights in towns.
commit cc39e5734e8b18f9077bf42e66337c1319dd6b6e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 21:01:23 2020 +0200
More LOD fixes.
commit 8116b21c2e51c836e77894e309ac273caf2917b3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:54:43 2020 +0200
I like this coloring.
commit bc2560ea90b36f4b46190005344232d993043ac3
Merge: 14effdd5d e690efe71
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:48:33 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 14effdd5db8747fcf3eb34f03b46b7792e92d1c5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:24:35 2020 +0200
Re-saturate.
commit 48a643955d4435b78179acba0beb4a979905cc31
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:23:57 2020 +0200
Various fixes.
commit f7b497a0c25f4ad4682c71dd1ed6f608052feb9b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 03:22:49 2020 +0200
Render figures again.
commit 44e4aad48deba8266b9f8bdfd3db096b381f5327
Merge: e6f0a5a98 9ec319a18
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 02:01:04 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit e6f0a5a981a82533ba188fff0a54ce98577bb152
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 24 16:12:20 2020 +0200
Add atmospheric scattering.
commit f2953087f691a8edbc001cb98ebf5059fc6f8ac0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 23 00:01:20 2020 +0200
Fix shadowing for specular reflections.
commit ddd4a67a9799b8d08c7dc0c2bec90621c2bed0e3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Apr 22 22:56:12 2020 +0200
HDR fixes.
commit 1015e60deef3c447381996277df7496707a63bd0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 21 18:25:19 2020 +0200
More lighting changes.
commit 80c264abd111fb237e57843efcb5c071d4f84613
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 13 00:29:59 2020 +0200
Lighting experiments.
commit 8414987e589dd5102bad89762a3adaccc0bfe957
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 9 02:38:40 2020 +0200
WIP -- lighting changes and soft shadows.
commit 9cd2b3fb0d6b49776c6dfe463e4169637250b11a
Merge: c7ea687eb 8b149ad11
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:29 2020 +0200
Merge branch 'sharp/new-lighting' into sharp/small-fixes
commit c7ea687ebbc5aace1b455f134a5bf49ce2c7434a
Merge: 476441531 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:02 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 8b149ad11ad4bb75018fcf9519baec27d1c95951
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:32:39 2020 +0200
Trying out a new lighting model.
commit b0ac9f36f755dd06f7c17c46150568064790864f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 07:56:11 2020 +0200
Use bicubic interpolation for terrain.
commit f6fc9307a121514b614bc50ef8eb055953e7da8a
Merge: 33140a295 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 05:01:41 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 4764415312aae6e9ac2d00e86e84577cb958f1ab
Merge: ed2d0111d 13388ee6a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 04:54:48 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 13388ee6a42943f3f79a9cb488346cef18e272fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 20:30:08 2020 +0200
Various fixes (to coloring and to soft shadows).
commit fbd084a94a067082a87cd6d28b82054709bc9265
Merge: 5a089863b 4fdf6896a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 18:50:38 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/map-colors
commit ed2d0111d994262ae836d84d1fe5a45e4de72a0b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 06:49:27 2020 +0200
Combining colors and LOD.
commit 88342640c6b835114d01c797b89fdede3b0a2108
Merge: 33140a295 5a089863b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:49:20 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 33140a2951b8212725f42c758b277aaec4d888f7
Merge: 4c65a5aed f34d4b379
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:36:21 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 5a089863beb01d4794bbe3580ada47b278715ea2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 03:17:49 2020 +0200
Making maps brighter.
This is probably not the right way to do it, but oh well!
commit 32b2c99109dd486aa922886081068f9c550c83f2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 02:46:36 2020 +0200
Horizon mapping and "layered" map generation.
Horizon mapping is a method of shadow mapping specific to height maps.
It can handle any angle between 0 and 90 degrees from the ground, as
long as know the horizontal direction in advance, by remembering only a
single angle (the "horizon angle" of the shadow map). More is explained
in common/src/msg/server.rs. We also remember the approximate height of
the largest occluder, to try to be able to generate soft shadows and
create a vertical position where the shadows can't go higher.
Additionally, map generation has been reworked. Instead of computing
everything from explicit samples, we pass in sampling functions that
return exactly what the map generator needs. This allows us to cleanly
separate the way we sample things like altitudes and colors from the map
generation process. We exploit this to generate maps *partially* on the
server (with colors and rivers, but not shading). We can then send the
partially completed map to the client, which can combine it with shadow
information to generate the final map. This is useful for two reasons:
first, it makes sure the client can apply shadow information by itself,
and second, it lets us pass the unshaded map for use with level of
detail functionality.
For similar reasons, river generation is split
out into its own layer, but for now we opt to still generate rivers on
the server (since the river wire format is more complicated to compress
and may require some extra work to make sure we have enough precision to
draw rivers well enough for LoD).
Finally, the mostly ad-hoc lighting we were performing has been (mostly)
replaced with explicit Phong reflection shading (including specular
highlights). Regularizing this seems useful and helps clarify the
"meaning" of the various light intensities, and helps us keep a more
physically plausible basis. However, its interaction with soft shadows
is still imperfect, and it's not yet clear to me what we need to do to
turn this into something useful for LoD.
commit f8926a5737ddc51f3d585c651a64c43677aae0f4
Merge: a1aee931e 875ae6ced
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Mar 13 13:32:42 2020 +0100
Merge remote-tracking branch 'origin/master' into sharp/map-colors
commit 4c65a5aed353b119aea65a2aaeb94549b67beb42
Author: Treeco <5021038-Treeco@users.noreply.gitlab.com>
Date: Mon Feb 24 16:48:05 2020 +0000
Made LOD setting slider exponential
commit 2fa7b2d20d7233dc8bfd64f9f7f54617575248f1
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 17:49:53 2020 +0000
Added mist to LoD
commit aab059a450b5f635777129ff82cc15b662965c3c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 15:14:06 2020 +0000
Added LoD slider
commit 779c36b538121c5ade3633ae5cb67bb14c8c3877
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:54:55 2020 +0000
Reduced cost of vertex pushing
commit 9fea150473906b166365b738ebcea07c697daf3d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:38:53 2020 +0000
Fixed maths, improved LoD resolution
commit 5481df38fea5bf183ff376a3337179cfaa5233dc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 11:22:50 2020 +0000
Dynamically relocate LoD vertices to enhance details
commit a3e36a50ababd615da7db1b26158c7906a5def01
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 18:13:51 2020 +0000
Simpler terrain spiral rendering
commit 255f450ae9ac8763db4bede075fb409161ed57cc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:53:17 2020 +0000
Better LoD precision
commit 3d027aebe812a5b8658a4eb8123dc9f61b3776d2
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:04:03 2020 +0000
Better falloff
commit be775c9484b457b2c0b1a494aec03392d0c70e76
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 15:30:45 2020 +0000
Applied good ideas from experimental branch
commit 58587b68545a23c5c04ab4574a4b94b3bc982246
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 16:15:13 2020 +0000
Minor fixes to LoD merging
commit 7b42aebd709c14df2db766aad61d9280ad24d84d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 15:04:44 2020 +0000
Capped LoD dragging
commit 8aafc559f87124e1ea5ca6e3ddc2aa0c242d793c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:54:37 2020 +0000
Better blending between LoD and terrain border
commit edd3455d5161792d87ddc8eadc0ecbad5532b284
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:40:19 2020 +0000
Fixed LoD z depth, added sea level offset
commit b9b06744620114dd5556e73f64fa93c145503a7c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:27:43 2020 +0000
Better LoD smoothing
commit a1aee931e790431560cd2d953ad61d9497072afd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Feb 21 14:52:17 2020 +0100
Adding shadows.
commit 2400786c13dd891c131ed86d48d05df516a8a778
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 13:48:40 2020 +0000
Use world map as LoD source
commit dbf650f504a4c25fbbc2096ac3616c736bf52d23
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Jan 20 00:48:14 2020 +0000
Better clouds at distance
commit 5e6f81b86cdb9730b9b056877b19257075fd5fa8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Jan 19 23:59:02 2020 +0000
sync
commit 745e7540ddb000cc645f612767b337c2ddc3f7c0
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 12:40:48 2019 +0000
Improved cloud falloff mist, faster noise sampling
commit f6a200d0cb866196ba57697466755f9e0c7ea5d8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 10:09:00 2019 +0000
Improved long-range depth precision, removed unnecessary LoD polygons
commit 63d1b2bb2292898d59fb4f4e502201103dfeb86f
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 20:57:46 2019 +0000
Working LoD shader
commit f13d98ee3e58f881e8b978861a67663b59ed91ec
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 11:03:40 2019 +0000
LoD first attempt (stack overflow issue)
2020-08-20 18:34:59 +00:00
|
|
|
|
map_size_lg,
|
2020-01-22 14:31:10 +00:00
|
|
|
|
1.0f32,
|
2019-12-11 09:14:50 +00:00
|
|
|
|
n_small_steps,
|
|
|
|
|
&river_seed,
|
|
|
|
|
&rock_strength_nz,
|
2020-01-22 14:31:10 +00:00
|
|
|
|
|posi| alt[posi] as f32,
|
2019-12-11 09:14:50 +00:00
|
|
|
|
|posi| basement[posi] as f32,
|
|
|
|
|
is_ocean_fn,
|
2020-01-22 14:31:10 +00:00
|
|
|
|
|posi| uplift_fn(posi) * (1.0 / max_erosion_per_delta_t),
|
2020-06-11 18:44:03 +00:00
|
|
|
|
n_func,
|
|
|
|
|
theta_func,
|
|
|
|
|
kf_func,
|
|
|
|
|
kd_func,
|
|
|
|
|
g_func,
|
|
|
|
|
epsilon_0_func,
|
|
|
|
|
alpha_func,
|
|
|
|
|
height_scale,
|
2020-01-18 18:41:37 +00:00
|
|
|
|
k_d_scale(n_approx),
|
2020-06-11 18:44:03 +00:00
|
|
|
|
k_da_scale,
|
2019-12-11 09:14:50 +00:00
|
|
|
|
)
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// Save map, if necessary.
|
2020-01-18 18:41:37 +00:00
|
|
|
|
// NOTE: We wll always save a map with latest version.
|
(See sharp/lod-history) LOD, shadows, greedy meshing, new lighting, perf
---
Pretty much a Veloren fork at this point. Here's a high level overview of the changes (will be added to CHANGELOG just before merge).
At a high level this MR incorporates roughly two groups of changes.
The first group consists of new game features: more flexible map sizes, level of detail terrain, shadow maps, and a new lighting
engine. This is "feature work" that (mostly) only adds new things to Veloren, and mostly shouldn't affect old stuff.
The second big group of changes are those addressing the fallout from all the new features. These include performance fixes of
various sorts: the addition of multiple graphics options and optimization of the cheap ones to avoid work, switching all voxel
models to use some variant of greedy meshing, switching over much of our CPU-side vector math to exploit SIMD instructions
(coinciding with a fork of `vek`), and a rewrite of how the UI handles text rendering (coinciding with updates to our fork
of `conrod`). Making Veloren's hardcoded colors appear correct under the new lighting engine also required considerably
changes (TODO: Fill in this section when it's complete).
The second category of changes often heavily touches code owned by other people, including frequently modified code "owned" by a
handful of people, so I recommend that this code be reviewed particularly carefully.
---
At a high level (each will be described in more detail below):
- The world map has been refactored.
- The world size is no longer hardcoded (@zesterer).
- The map generation code was made generic to allow using it outside of the `world` crate (@zesterer).
- On world creation, we now compute *horizon maps* (@zesterer).
- The way we pass the world from the server to the client has been updated (@xMAC94x).
- Artifacts related to image rotation were fixed (@imbris).
- Multiflow rivers were enabled (@zesterer).
- In the process of making changes related to the world map, various incidental fixes and optimizations were required.
- The new *level of detail* feature was added (@zesterer wrote part of this and has checked out the rest).
- A new LOD terrain rendering step was added to the pipeline.
- The LOD terrain quality was made configurable via a graphics setting.
- Horizon maps were used to cast shadows from LOD chunks on both LOD and non-LOD terrain.
- A "voxelization" effect was incorporated into rendered LOD terrain to make it blend better into the world.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Veloren's lighting has been completely overhauled (@zesterer has already checked most of this out).
- A semi-accurate index of refraction was assigned to our materials.
- A new, more realistic, physically based approach to lighting was used using the *Ashikhmin Shirley* BRDF.
- We emulate *atmospheric scattering* using equations designed for measuring solar panel light exposure.
- We attempt to compute *realistic light attenuation* in water using its real material properties.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Point and directional lights now cast realistic shadows, using *shadow mapping.* (@imbris, @zesterer, @Treeco, @YuriMomo)
- Point light shadow maps were added to the rendering pipeline, using geometry shaders and *seamless cube maps*.
- Directional light shadows were added to the rendering pipeline, using LISPSM together with disabling *depth clamping*.
- "Shadow-only" chunks and NPCs were added to prevent shadows from models behind you from disappearing.
- In the process of making changes related to shadow maps, various incidental fixes and optimizations were required.
The addition of shadow maps, LOD terrain, and the new lighting all led to significant performance degradation, on top of other
changes happening in master. Therefore, a large number of performance improvements were also needed:
- The graphics options were made much more flexible and configurable, and shaders were optimize.
- New options were provided for how to render lights and shadows (@Pfauenauge, @zesterer).
- Graphic setting storage and configuration were overhauled to make adding new features easier (@Pfauenauge, @imbris).
- Shaders were rewritten to utilize GLSL's preprocessor to avoid overhead (@zesterer, @YuriMomo).
- In the process of making changes related to providing additional rendering options, various incidental fixes and optimizations were required.
- Voxel model creation was switched to use *greedy meshing.*
- A new voxel meshing method, greedy meshing, was added (@imbris).
- Uses of the older meshing methods were migrated to use greedy meshing (@imbris, @jshipsey, @Pfauenauge).
- New restrictions were added to terrain, figure, and sprites to future proof them for further optimizations (@jshipsey, @Pfauenauge, @zesterer).
- Most positions are now relative to either chunk or player position for better precision (@imbris, @zesterer, @scottc).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- Animation and terrain math were switched to use SIMD where possible.
- Fixes were made to vek to make its SIMD feature usable for us (@zesterer, @imbris).
- The interface and types used in bone animation were changed in various ways (@jshipsey, @Snowram, @Pfauenauge).
- Redundant code generation for body animation is now partly taken care of by a macro (@jshipsey, @Snowram, @Pfauenauge).
- Animation code was modified to to use vek's SIMD representation where possible (@jshipsey, @Snowram, @Pfauenauge).
- Terrain meshing code and shadow map math were also modified to use vek's SIMD representation (@imbris).
- SIMD instruction generation was enabled (@YuriMomo, @jshipsey, @Snowram, @imbris, @Angelonfira, @xMAC94x).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- The way we cache glyphs was completely refactored, fixed, and optimized.
- Our fork of `conrod` was optimized in various ways (@imbris).
- Our fork of `conrod` now exposes whether a widget was updated during the current frame (@imbris).
- Our use of the glyph cache was rewritten for correctness (@imbris).
- A *text cache* was introduced that lets us skip remeshing glyphs that have not changed (@imbris).
- Various changes were made to reduce pressure on the glyph cache, with more planned (@imbris, @Pfauenauge).
- In the process of making changes related to the glyph cache, various incidental fixes and optimizations were required.
- Colors were changed to keep Veloren's look consistent with master.
- Some older tree models were brought back (@Pfauenauge).
- TODO(@Sharp): All hardcoded colors were extracted and made hotloadable.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Hardcoded colors were fixed to conform to Veloren's style.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Color models were fixed to conform to Veloren's style.
A detailed description of the involved changes follows.
---
- The world size is no longer hardcoded. All functions dependent on world size now take a `WorldSizeLg`, which holds the base 2 logarithm of each actual world dimension and is guaranteed to maintain certain properties (outlined in `common/src/terrain/map.rs`). Additionally, many utility functions that utilize the world size were moved into `common` as well (mostly `common/src/terrain/mod.rs`). Finally, the world map format was updated in order to store its size explicitly, with a migration path from the old format that should work whenever the old formatted map was a square (practically always). See `world/src/sim/mod.rs` for these changes.
- The map generation code was made generic to allow using it outside of the `world` crate. The parts of the map generating code that do not need to query the world were moved over to `common/src/terrain/map.rs`, allowing them to be used from the client without creating a dependency on `world`. The rest of it was turned into helper functions in `world/src/sim/map.rs`, which can be passed as closures to the generic map generation code to complete its construction. This also means that colors are now passed in separately to the map generation function. See <https://veloren.net/devblog-78/> for more details.
- On world creation, we now compute *horizon maps*. See the function in `world/src/sim/util.rs`.
Given a height map and a plane intersecting that height map, our horizon maps allow us to encode enough information to reconstruct shadows for each point on the height map using only the *horizon angle* (the angle at which the sun starts to become visible). As Veloren's sun only covers one plane, this is sufficient for encoding sun shadows for LOD terrain, by encoding two angles per chunk (one for each 90 degrees the sun covers). We can also use this for the moon, if we want, since the moon follows the same path. Additionally, we store the *height* of the furthest occluder, to try to make the shadows volumetric; so this means 4 bytes in total for each chunk.
Support for horizon maps has been merged into the map functionality in common as well.
- The way we pass the world from the server to the client has been updated. Rather than passing the prerendered map, we instead pass three maps with values for each chunk; one with the color information, a second with altitude information, and a third with horizon map information. We then reconstruct the map on the client, together with some additional information we send from the server (like the sea level and maximum height). See `common/src/msg/server.rs` for a detailed description of the format of `WorldMapMsg`, and `server/src/libr.rs` and `client/src/lib.rs` for details of the map construction and parsing.
- Artifacts related to image rotation were fixed. See the commit message for commit SHA `cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e` for a detailed explanation. This involved changes to shaders, the addition of a new type of graphic (also reflected in the graphic cache) that allows specifying a border color (which automatically makes the associated texture immutable), and some related fixes. I reproduce the first two paragraphs of the MR description as well:
```
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
```
- Multiflow rivers were enabled.
This does not really need to be part of this MR, and would be easy to revert, but since it seemed to provide a nice improvement it's currently packaged with it.
We already computed multiple outflows from each chunk for erosion purposes long before this MR.
However, we never modified river rendering to be able to handle this case (just a single downhill river flow is complex enough!) so this was not exposed when deciding which chunks were rivers.
Now that
- In the process of making changes related to the world map, various incidental fixes and optimizations were required. Some examples of fixes include making sure terrain is never lowered to below sea level (to make the shadow maps report correct values), fixing map altitudes and colors to understand things like cliffs and "block level" coloring (that doesn'te xist on the column level), and fixing a crashbug when rendering images for the UI where source pixels are strongly rectangular. Some examples of related performance fixes include avoiding allocating a fresh vector for all the maps (i.e. copying it over to change the format from `[u32; n]` to `DynamicImage` and then copying again to convert to `RgbaImage`), and instead using the `gfx::memory::slice` function to accomplish the same thing. These sorts of changes are spread all arond the code.
This includes the additon of a new scene, `voxygen/src/scene/lod.rs`, a new pipeline `voxygen/src/render/pipeline/lod_terrain.rs`, and new shaders `assets/vxygen/shaders/lod-terrain-vert.glsl` and `assets/vxygen/shaders/lod-terrain-frag.glsl`, as well as associated changes to the renderer in `voxygen/src/render/renderer.rs`.
The main idea behind our initial approach to LOD was to take the world data we now get from the server (altitude, color, and horizon mapping).
- Some previously computed values were turned into shader uniforms for better prediction on weak processors. (@zesterer)
- Calls to power or trig functions were removed or replaced with multiplications, where possible.
- After some deliberation
- To properly handle sprite "waving" for nearby sprites,
We explicitly designed the greedy meshing system with figures and sprites in mind.
In both cases, we want to be able to *efficiently* pack many different models into the same texture, especially in cases where we know
we will either not be removing any of the grouped-together from the models from the texture, or will remove all of them at once (so
they can be packed into some specific subtexture).
For sprites, since we know every model in advance and never intend to deallocate them, we currently pack them all as efficiently as
possible into one giant tetxure atlas. However, in the future we might opt to pack them slightly less efficiently in exchange for
shrinking the sprite vertex size.
For figures, we pack all the textures for each *model* into the same atlas.
is a global texture atlas used for every sprite, and for figures which is why we have the ability to mesh multiple
models to the same texture area (using the simple texture atlas allocator) without requiring intermediate vector allocations.
This is accomplished by delaying the time when we actually write the color and light data to the texture until *after* all the
model vertices have been meshed; then, we can just allocate the whole color/light array at once, making the atlas we use an
exact fit. In computer science-y terms, we accomplish this delay by, after we perform the initial greedy meshing (without
texture information), not continuing to create the texture data, but instead constructing a *continuation*--that is, a function
that, when called, will execute the rest of the computation. We push this continuation (which in Rust terms is a `FnOnce` closure
that takes the `ColLightsInfo` that it is supposed to write to as context) onto a
onto a vector
resizing. To allow for suspended writes to texture data, Rust pointed out to me that the continuation that would eventually write the color and light data to the texture atlas (the one that is shared by all models sharing the same greedy mesher) would have to *own* whatever data it mshed. Because we often generate the model data to mesh as a temporary in `voxygen/src/load.rs`, the
- Matrix multiplications in the shader were reduced for figure data (@zesterer).
- Vertex "waves" for fluid data were removed.
- Terrain "bending" near edges was removed.
- Scaling was fixed to make sure empty space was not introduced in a space previously occupied by a block. It was also changed to take ownership of its voxel data,
rather than sharing it, to let it be used with meshing.
- Rust's nightly version was bumped in order to use the `array_map` function, which lets us reuse more code between the simple map and `FigureModelCache`.
- PositionedGlyph::standalone.
---
I tried to cite sources in many cases[^realtime],[^lloyd],[^lispsm],[^pbrt],[^greedy],[^tjunctions]
where I needed features from elsewhere but I am particularly grateful for the following resources,
esepcially where they have accompanying source code. I linked all of them that are accessible to the public (those that are not were
obtained through legal means).
[^realtime]: Eisemann, Elmar, Michael Schwarz, Ulf Assarsson, Michael Wimmer. Real-Time Shadows. A K Peters/CRC Press (T&F), 20160419.
[^lloyd]: Lloyd,B. 2007. [Logarithmic perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). PhD thesis, University of North Carolina.
[^lispsm]: Wimmer, M., Scherzer, D., and Purgathofer, W. 2004. [Light space perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). In Proceedings of Eurographics Symposium on Rendering 2004, pp. 143– 152.
[^pbrt]: Pharr, Matt, et al. [http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf](Physically Based Rendering: From Theory to Implementation). Third edition, Morgan Kaufmann Publishers/Elsevier, 2017.
[^greedy]: mikolalysenko. “Meshing in a Minecraft Game.” 0 FPS, 30 June 2012, <https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/>.
[^tjunctions]: blackflux. “Meshing in Voxel Engines – Part 1.” Blackflux.Com, 23 Feb. 2014, <https://blackflux.wordpress.com/2014/02/23/meshing-in-voxel-engines-part-1/>.
I am also especially grateful to Khronos, Wikiepdia, and stackoverflow for answering many of my specific questions while writing the MR.
---
Squashed commit of the following:
commit 300505e7305a2fdac722a808ee8538323f215f39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 18:46:25 2020 +0200
Fixing cargo doc and typo in CHANGELOG.
commit ec0aeb18e8499d7d84ef818331b4b65c3d76cea6
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 15:38:50 2020 +0200
Hopefully final commit for the LOD branch.
commit 5e8ea0b1eaac02903a02feb2eb038d195de4872f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 10:14:26 2020 +0200
Falling back to power as stopgap.
commit e44a1cbf46504ee9931a01bdc9033e145500d557
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 09:25:41 2020 +0200
Address imbris feedback.
Temporarily disables shiny water, lowers max VD.
These restrictions will be lifted soon after merging.
commit 561e25778a108ac3712f5ec2ce3a51234c4430d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 08:31:13 2020 +0200
Tweaking shaders a bit.
commit 7d19259078ce0dd7b3742ad7d0cb3fab3ece3fdc
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:59:43 2020 +0200
Fix view example as well.
commit 051cd4934e0fad2c0b15db4380a4189fa318679f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:29:06 2020 +0200
Fix meshing benchmark.
commit c95e07db3b4dcca285678985e65e31b927cb1c61
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 05:46:22 2020 +0200
Address MR feedback, fix scene clouds.
commit 1bfb816cabdb3ffc1e507a009c2d98696b4b573a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:39:36 2020 +0200
Incorporating Pfau's figure color changes.
New eyes and new humanoid colors.
commit 3f9b89a3ac7b3356b1dba0d1a8f6541357f81469
Merge: e2f5162e4 62c53963a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:29:41 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit e2f5162e4f96f4124aa43488f7245d341b3dcfd4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:28:38 2020 +0200
World colors are all hotloadable.
They live in assets/world/style/colors.ron.
Only a small handful of hardcoed colors remain in World; they are either
part of the map, or difficult to disentangle from the rest of the
computation. Comments are made where appropriate.
commit 62c53963abe1975009d34a8f9515a355bef24f31
Author: Marcel Märtens <marcel.cochem@googlemail.com>
Date: Wed Aug 19 15:59:00 2020 +0200
replace pretty_env_logger with tracing
commit 5b1625f99d9586fe80e2232f583ec5af9f953099
Merge: d71003acd 4942b5b39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:15:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit d71003acdabeff970b3928e97c26af6847b5b78e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:14:34 2020 +0200
Hotloading colors, part 1: colors in common.
Currently, this just entails humanoid colors. There are only three
colors not handled; the light emitter colors in
common/src/comp/inventory/item/tool.rs. These don't seem important
enough to me to warrant making hotloadable, at least not right now, but
if it's needed later we can always add them to the file.
commit 63b5e0e553eb2ea49276f192a6fc7dd65254270d
Merge: c32b337a4 6d2c4b9c1
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 13:05:37 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c32b337a46e10d9de473d178a94a3ccd61c39bb3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:52:04 2020 +0200
Fixing LOD grid, for real.
commit a166ae0360395387e09fb35a1f84210c2ce5ec24
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:28:05 2020 +0200
Addressing imbris's initial feedback.
Fixes two minor bugs: explosion particles were no longer spawning
randomly, and LOD grids were not perfectly even.
commit 4cbad004f44060994252dd3d38647a14a589712f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:27:58 2020 +0200
Bumping nightly per request.
commit 548680276aac77c25d43d16b5622f847d474dbef
Merge: acc098604 8f8b20c91
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:26:06 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit acc0986040589a3492f88a740bc3c3fc693b26d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:28:32 2020 +0200
Lower resolution due to lying drivers.
commit d3b878de2a52c358d2944a6bbd0555dad7fbdb10
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:15:38 2020 +0200
Fix issues msh encountered with Intel 4600.
commit 10245e0c1b0cb6fae10d86409435364edc6102ef
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 21:15:02 2020 +0200
Merge more models into one mesh than we did previously.
commit 3155c31e663c52ae5c3a53d5fb5665892a1a498a
Merge: 7204cc8a7 3c199280e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:35:22 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7204cc8a7a4f74a30306bd205d9834fee4bb944f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:34:43 2020 +0200
Fix not yet done NPC animations.
This forces them all to be the idle animation if not specified.
This fixes issues where you'd have giant NPCs in water.
commit bc83360f2a08918f19d417b5f772e1ff554dba08
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 19:36:37 2020 +0200
Try to fix some bugs:
- Z fighting with LOD terrain and water.
- Audio SFX not playing.
commit 1fd104aa603bf3781b6526a5cada46aeca3049dd
Merge: 862df3c99 7c2c392a3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 12:02:31 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 862df3c9976c4da9bd7cfd784f1a85973127968a
Merge: 0a4218ed9 75c1d4401
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 05:52:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0a4218ed9d541a2b34c133351bea38a99ddf4ea7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 22:27:14 2020 +0200
Fix particle depth.
commit f51dfdeb442d0dd5243dd2f344fa4be295bd0875
Merge: c6251a956 5e6dc0471
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:19:04 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit c6251a956ad376400dca5c23420cf8d213dc8fdf
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:15:46 2020 +0200
Cache figures more intelligently.
Cache figures for longer, and don't cache character states for the
player except where they actually affect the rendered model.
commit 0ed801d5404982c6fb63b1eaa4567d908b294c9d
Merge: c11b9bdf0 eea64f78f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 16:32:24 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c11b9bdf0a53bf9884d2f5a48fec9b01d582df1a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 11:47:15 2020 +0200
Remove unneeded Clippy annotation.
commit 16aa9ef40af56d69289d00aafb3deadfb8bd4f35
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 8 00:53:02 2020 +0200
Fix hotloading and Clippy.
commit 3dc973e0be5b758da1e9805eb764ad401374cd0c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 23:50:27 2020 +0200
Major speedups with SIMD.
commit fba64a7d93d5a96077ce87287bbce6ab9b7fbcae
Merge: 76429d00e d1e10b178
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:19 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 76429d00eea00d212fbd672a84ee91e75b19b938
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:10 2020 +0200
Add clippy.toml.
commit c79f512f84dbb83cb82b7954db68ff241dfd8e41
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 11:55:20 2020 +0200
Fix all clippy issues, clean up Rust code.
commit 6f90e010b3fbefb53b0d632e819931350015b6b8
Merge: 77a8c7c26 5929cfa5c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:30 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 77a8c7c267d3f44a1a62bd6b2274359973c5e4d4
Merge: b44e44232 44febaabd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:10 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 5929cfa5c713aa392110bbb62407f76caf53c3df
Author: jshipsey <jshipsey18@gmail.com>
Date: Thu Aug 6 20:47:27 2020 -0400
fixed in-hand arrow bug
commit b44e442325d828f1cd564d66908f89d09e80474b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 6 13:40:35 2020 +0200
Miscellaneous performance improvements.
commit be37acf287c1360d8085862526ac3365ffd1d768
Merge: 125d7fc6c c11876547
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 05:49:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 125d7fc6c4dcd8c8c5f27b8268a4d64f409f3644
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 04:55:31 2020 +0200
Abstract over simd vs. repr_c vectors.
Also some minor improvements to Event size.
commit d4d4956e9252e1241ce110b2aa85076c6b1e2a23
Merge: 5f3b7294a aced5f979
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:56:54 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 5f3b7294af1f8533edc2620b58863c248e2b07af
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:43:52 2020 +0200
Fix formatting issues I missed before.
commit a428a3ebba70dcab63dd0f8cd983120c90617271
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:41:51 2020 +0200
Fix clippy warnings, part 1.
There aer still a bunch of type too complex and
function takes too many arguments warnings that I'll fix later
(or ignore, since in the one case I did fix a function takes too
many arguments warning I think it made the code *less* readable).
commit ba54307540ed8a937ac08209730284fc653af85b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 30 13:22:42 2020 +0200
Fix light animations so they are removed when the light turns off.
commit 7e0f4bcbf0f4717145d8beac40d52e3acebbe2aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 21:10:20 2020 +0200
Fix crash in edge case for pixel art.
commit 56da06f7a351e2b949e9b014a90b974d511a0924
Merge: cf74d55f2 9f53a4a19
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:56:52 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:29:52 2020 +0200
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
The first concern was addressed by fixing the dimensions of the map
images drawn from the UI (so that we always use a square source
rectangle, rather than a rectangular one according to the dimensions of
the map). We also fixed the way rotation was done in the fragment
shader for north-facing sources to make it properly handle aspect ratio
(this was already done for north-facing targets). Together, these fix
rendering issues peculiar to rectangular maps.
The second and third concerns were jointly addressed by adding an
optional border color to every 2D image drawn by the UI. This turns
out not to waste extra space even though we hold a full f32 color
(to avoid an extra dependency on gfx's PackedColor), since voxel
images already take up more space than Optiion<[f32; 4]> requires.
This is then implemented automatically using the "border color"
wrapping method in the attached sampler.
Since this is implemented in graphics hardware, it only works (at
least naively) if the actual image bounds match the texture bounds.
Therefore, we altered the way the graphics cache stores images
with a border color to guarantee that they are always in their own
texture, whose size exactly matches their extent. Since the easiest
currently exposed way to set a border color is to do so for an
immutable texture, we went a bit further and added a new "immutable"
texture storage type used for these cases; currently, it is always
and automatically used only when there is a specified border color,
but in theory there's no reason we couldn't provide immutable-only
images that use the default wrapping mdoe (though clamp to border
is admittedly not a great default).
To fix the maps case specifically, we set the border color to a
translucent version of the ocean border color. This may need
tweaking going forward, which shouldn't be hard.
As part of this process, we had to modify graphics replacement to
make sure immutable images are *removed* when invalidated, rather
than just having a validity flag unset (this is normally done by
the UI to try to reuse allocations in place if images are updated
in benign ways, since the texture atlases used for Ui do not
support deallocation; currently this is only used for item images,
so there should be no overlap with immutable image replacement,
so this was purely precautionary).
Since we were already touching the relevant code, we also updated
the image dependency to a newer version that provides more ways
to avoid allocations, and made a few other changes that should
hopefully eliminate redundant most of the intermediate buffer
allocations we were performing for what should be zero-cost
conversions. This may slightly improve performance in some
cases.
commit ad18ce939940a8c697270f6e9b94db9942fd8295
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 13:21:09 2020 +0200
Fix continent scale hack.
commit 36b1cb074f5b195aebd7dbbc3da7f0246a1a18ec
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 12:11:40 2020 +0200
Enable loading different sized maps without a recompile.
We may want to tweak the effects of the continent_scale_hack.
commit 13b6d4d534cc4814b7cb3294ca41bbfea0a6b186
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 10:55:48 2020 +0200
Removing WORLD_SIZE, part 1.
Erased almost every instance of WORLD_SIZE and replaced it with a local
power of two, map_size_lg (which respects certain invariants; see
common/src/terrain/map.rs for more details about MapSizeLg). This also
means we can avoid a dependency on the world crate from client, as
desired.
Now that the rest of the code is not expecting a fixed WORLD_SIZE, the
next step is to arrange for maps to store their world size, and to use
that world size as a basis prior to loading the map (as well, probably,
as prior to configuring some of the noise functions).
commit 30b1d2c6428230a9eaa0d749cdcbbd6f1cbccd78
Merge: 7d56ba31b 1377b369f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:58 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 7d56ba31b445441461b28a07fc495d7d4f047c17
Merge: 2101113b4 598f14b25
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 1377b369f6db2258e910d467a5740f31789e3ded
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sun Jul 19 23:25:38 2020 +0200
more saturated pumpkins
commit ae8d50527f93bb0616c2ad46ce4dacb63bc37c6d
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sat Jul 18 20:29:56 2020 +0200
acacia models
commit 2101113b467e691de787392d7f20f1745f5637bd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 18 18:55:25 2020 +0200
Higher detail LOD.
commit add2cfae04b4385fa5590e11e2bd5229d9dee0aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 16 01:57:39 2020 +0200
Revert some irrelevant stuff.
commit 2e2ab3dc1eaa59a4aef7f8d34a53d8aae4c8553a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 15 13:30:49 2020 +0200
Fixing various things about shadows.
* Correcting optimal LISPSM parameter.
* Figure shadows are cast when they're not visible.
* Chunk shadows stay cast until you look away.
* Seamless cubemaps for point lights.
* Etc.
commit 6c31e6b56217274285b597af297036691ea5d897
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 19:50:26 2020 +0200
Fix shadow creation.
commit 6332cbe006115ae205597529cd8bbccd146c2cca
Merge: be438657c 930e0028b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:47:00 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit be438657c33d7b5bfb0a9582c3ed3fd366637323
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:28:08 2020 +0200
Tweaks to shadows.
Added shadow map resolution configuration, added seamless cubemaps,
documented all existing rendering options, and fixed a few Clippy
errors.
commit 23b4058906013c7d2a40c286e20e32c5fbd897ed
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 10:11:19 2020 +0200
Fix moon, use nonlinear noise for terrain.
Note that the latter has a bit of performance cost.
commit 7fbe5cbfbb9dc29607957b8e62f432a4deed193d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:23:02 2020 +0200
Address lies about max texture size.
commit bcfc62b5e13a1cdd83f57535fde4694720bebfd9
Merge: 75e3626a7 18a08e8fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:22:08 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 75e3626a785919f43fdcf2127c2b10e3e4df2f9f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:21:52 2020 +0200
OpenGL 3.3 minimum.
commit 18a08e8fe2739f02af99a5d2cb4e7c38c49e858b
Author: Monty Marz <m.marzouq@gmx.de>
Date: Tue Jul 7 23:57:52 2020 +0200
settings localization
commit 90c5d1ca3620092bc3ae10b2211489eb1cf6f5e8
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 21:11:48 2020 +0200
Lower near distance.
commit 0e66f02b25aaddaa2dfddbbc89cd67de54a9a7b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 20:09:01 2020 +0200
All sprites sway in the wind now.
commit db1401a6910bf42dcf502462c90038752ff5fbdb
Merge: 69e508d8c e8b4b29d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 19:34:17 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 69e508d8c94d8973033817ca86f357e466fc7c4d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 18:41:37 2020 +0200
Make it easy to switch to SIMD for math.
commit ffe0f5928c7a7e87d00cb5426b3b1d831d7e02fd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 21:21:12 2020 +0200
Fix some issues with underwater rendering.
commit bfda6da42f38fd02c31ee92c81ab785a3e50c2a0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 19:17:59 2020 +0200
Fix some minor display issues.
commit 0ed752e087968cf901301884aaeae698e32ef8a5
Merge: ccc6a06a8 518edcb85
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:14:21 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit ccc6a06a8d4504d6b9f7af7905a414d2ee06ab76
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:04:34 2020 +0200
Some minor changes.
commit 4e020246702889269efe1a191788992164c508d6
Merge: 50a64d927 e05c9267a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 16:17:40 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 50a64d927e6c4f4b0e4688e4cbfca694bc3f922a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 13:07:03 2020 +0200
Fix far plane.
commit 7dd06da34cae8f9ea3b6c889fe965181f3fd3949
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:25:35 2020 +0200
Add shadows.glsl.
commit 618a18c998778bf871b905a74657440fcc384c80
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:10:22 2020 +0200
Adding shadows, greedy meshing, and more.
commit eaea83fe6a5cb1cb0ba8beef888183c718258496
Merge: 267018495 2f89b863e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 22:47:07 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 2670184954a13e4a9e7a4e35ba79aac0c5fac2f7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 21:20:01 2020 +0200
Make civsim and sites deterministic.
For anything in worldgen where you use a HashMap, *please* think
carefully about which hasher you are going to use! This is
especially true if (for some reason) you are depending on hashmap
iteration order remaining stable for some aspect of worldgen.
commit f8376fd5dc72b4a9c2f51a6b4570d59c8b8e9343
Merge: 654f7e049 cdee191dd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 17:53:57 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 654f7e049258d9da27c09608bbe6a46ffa8787e5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed May 20 21:22:30 2020 +0200
Correct backface culling.
commit 560501df05ca725409b0f2e4eb31bdfdc15fd0c7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue May 19 17:22:06 2020 +0200
Greedy messhing for shadows.
commit a4d87e1875ca543436e6bbbeb20348facc5a52d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun May 17 05:59:00 2020 +0200
Shadow maps work for lantern.
commit 243d0837b8a3b08172c9a3c348d964d7ddc2a0a8
Merge: 04382dc28 71dd520cd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:53:13 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 04382dc28632b6c66e8821f6870c0daaa1c1901a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:22:17 2020 +0200
WIP: better graphics config, better LOD, shadow maps.
commit 22ddbad3eb32bfa70f0932176022208fe67ded81
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 18:54:09 2020 +0200
Minor shader fixes.
commit 746a10e8d01ac235f994b0cde78fa48998602a1f
Merge: 0f4a0e763 40ab94673
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 04:02:09 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0f4a0e763db3afbdc4fb0558611f38326ca87151
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 23:03:24 2020 +0200
Switch back to pop-in terrain.
commit dd74fa7e4a53667b38811d7aec58d7f6a68889bb
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 22:58:55 2020 +0200
LOD shading closer to voxel shading.
commit ef67bd58ba0bdaf622b078892d768263b6cba268
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 28 20:49:03 2020 +0200
Experimental underwater lighting.
commit 2c5ad9d07605e80d5fd5679dd3a5d70c605b86a9
Merge: 748279835 303967a6f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 22:35:24 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7482798354eda18c8207950080fc24d443a369de
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 21:59:55 2020 +0200
Replace discard in figure-frag.
commit d83b4ae69be4912f69bf7835f509c68a1c7770a4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:45:57 2020 +0200
Fix sprite lighting, HDR from focus_pos.
commit 0594238004f116274905fa0ed7c2b6c417ed1d29
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:14:10 2020 +0200
Proper HDR from point lights.
commit 48c93d2b41ce5743103d18e76cc228f5ac766492
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 14:01:43 2020 +0200
Brighter ambiance, darker LOD shadows.
commit e0452e895ccfa8a43f368cae3b8b8aedc24dad93
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 13:13:23 2020 +0200
More proper HDR.
commit 4c6da3ed16cfeebb455e40da5f557b4af9a499d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 00:13:10 2020 +0200
Trying LOD noise.
commit 682a3d74c85df5503ffe1fc1cc891bce789df1ad
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 23:11:08 2020 +0200
Fix LOD heights in towns.
commit cc39e5734e8b18f9077bf42e66337c1319dd6b6e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 21:01:23 2020 +0200
More LOD fixes.
commit 8116b21c2e51c836e77894e309ac273caf2917b3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:54:43 2020 +0200
I like this coloring.
commit bc2560ea90b36f4b46190005344232d993043ac3
Merge: 14effdd5d e690efe71
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:48:33 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 14effdd5db8747fcf3eb34f03b46b7792e92d1c5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:24:35 2020 +0200
Re-saturate.
commit 48a643955d4435b78179acba0beb4a979905cc31
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:23:57 2020 +0200
Various fixes.
commit f7b497a0c25f4ad4682c71dd1ed6f608052feb9b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 03:22:49 2020 +0200
Render figures again.
commit 44e4aad48deba8266b9f8bdfd3db096b381f5327
Merge: e6f0a5a98 9ec319a18
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 02:01:04 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit e6f0a5a981a82533ba188fff0a54ce98577bb152
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 24 16:12:20 2020 +0200
Add atmospheric scattering.
commit f2953087f691a8edbc001cb98ebf5059fc6f8ac0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 23 00:01:20 2020 +0200
Fix shadowing for specular reflections.
commit ddd4a67a9799b8d08c7dc0c2bec90621c2bed0e3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Apr 22 22:56:12 2020 +0200
HDR fixes.
commit 1015e60deef3c447381996277df7496707a63bd0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 21 18:25:19 2020 +0200
More lighting changes.
commit 80c264abd111fb237e57843efcb5c071d4f84613
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 13 00:29:59 2020 +0200
Lighting experiments.
commit 8414987e589dd5102bad89762a3adaccc0bfe957
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 9 02:38:40 2020 +0200
WIP -- lighting changes and soft shadows.
commit 9cd2b3fb0d6b49776c6dfe463e4169637250b11a
Merge: c7ea687eb 8b149ad11
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:29 2020 +0200
Merge branch 'sharp/new-lighting' into sharp/small-fixes
commit c7ea687ebbc5aace1b455f134a5bf49ce2c7434a
Merge: 476441531 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:02 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 8b149ad11ad4bb75018fcf9519baec27d1c95951
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:32:39 2020 +0200
Trying out a new lighting model.
commit b0ac9f36f755dd06f7c17c46150568064790864f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 07:56:11 2020 +0200
Use bicubic interpolation for terrain.
commit f6fc9307a121514b614bc50ef8eb055953e7da8a
Merge: 33140a295 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 05:01:41 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 4764415312aae6e9ac2d00e86e84577cb958f1ab
Merge: ed2d0111d 13388ee6a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 04:54:48 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 13388ee6a42943f3f79a9cb488346cef18e272fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 20:30:08 2020 +0200
Various fixes (to coloring and to soft shadows).
commit fbd084a94a067082a87cd6d28b82054709bc9265
Merge: 5a089863b 4fdf6896a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 18:50:38 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/map-colors
commit ed2d0111d994262ae836d84d1fe5a45e4de72a0b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 06:49:27 2020 +0200
Combining colors and LOD.
commit 88342640c6b835114d01c797b89fdede3b0a2108
Merge: 33140a295 5a089863b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:49:20 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 33140a2951b8212725f42c758b277aaec4d888f7
Merge: 4c65a5aed f34d4b379
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:36:21 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 5a089863beb01d4794bbe3580ada47b278715ea2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 03:17:49 2020 +0200
Making maps brighter.
This is probably not the right way to do it, but oh well!
commit 32b2c99109dd486aa922886081068f9c550c83f2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 02:46:36 2020 +0200
Horizon mapping and "layered" map generation.
Horizon mapping is a method of shadow mapping specific to height maps.
It can handle any angle between 0 and 90 degrees from the ground, as
long as know the horizontal direction in advance, by remembering only a
single angle (the "horizon angle" of the shadow map). More is explained
in common/src/msg/server.rs. We also remember the approximate height of
the largest occluder, to try to be able to generate soft shadows and
create a vertical position where the shadows can't go higher.
Additionally, map generation has been reworked. Instead of computing
everything from explicit samples, we pass in sampling functions that
return exactly what the map generator needs. This allows us to cleanly
separate the way we sample things like altitudes and colors from the map
generation process. We exploit this to generate maps *partially* on the
server (with colors and rivers, but not shading). We can then send the
partially completed map to the client, which can combine it with shadow
information to generate the final map. This is useful for two reasons:
first, it makes sure the client can apply shadow information by itself,
and second, it lets us pass the unshaded map for use with level of
detail functionality.
For similar reasons, river generation is split
out into its own layer, but for now we opt to still generate rivers on
the server (since the river wire format is more complicated to compress
and may require some extra work to make sure we have enough precision to
draw rivers well enough for LoD).
Finally, the mostly ad-hoc lighting we were performing has been (mostly)
replaced with explicit Phong reflection shading (including specular
highlights). Regularizing this seems useful and helps clarify the
"meaning" of the various light intensities, and helps us keep a more
physically plausible basis. However, its interaction with soft shadows
is still imperfect, and it's not yet clear to me what we need to do to
turn this into something useful for LoD.
commit f8926a5737ddc51f3d585c651a64c43677aae0f4
Merge: a1aee931e 875ae6ced
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Mar 13 13:32:42 2020 +0100
Merge remote-tracking branch 'origin/master' into sharp/map-colors
commit 4c65a5aed353b119aea65a2aaeb94549b67beb42
Author: Treeco <5021038-Treeco@users.noreply.gitlab.com>
Date: Mon Feb 24 16:48:05 2020 +0000
Made LOD setting slider exponential
commit 2fa7b2d20d7233dc8bfd64f9f7f54617575248f1
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 17:49:53 2020 +0000
Added mist to LoD
commit aab059a450b5f635777129ff82cc15b662965c3c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 15:14:06 2020 +0000
Added LoD slider
commit 779c36b538121c5ade3633ae5cb67bb14c8c3877
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:54:55 2020 +0000
Reduced cost of vertex pushing
commit 9fea150473906b166365b738ebcea07c697daf3d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:38:53 2020 +0000
Fixed maths, improved LoD resolution
commit 5481df38fea5bf183ff376a3337179cfaa5233dc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 11:22:50 2020 +0000
Dynamically relocate LoD vertices to enhance details
commit a3e36a50ababd615da7db1b26158c7906a5def01
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 18:13:51 2020 +0000
Simpler terrain spiral rendering
commit 255f450ae9ac8763db4bede075fb409161ed57cc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:53:17 2020 +0000
Better LoD precision
commit 3d027aebe812a5b8658a4eb8123dc9f61b3776d2
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:04:03 2020 +0000
Better falloff
commit be775c9484b457b2c0b1a494aec03392d0c70e76
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 15:30:45 2020 +0000
Applied good ideas from experimental branch
commit 58587b68545a23c5c04ab4574a4b94b3bc982246
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 16:15:13 2020 +0000
Minor fixes to LoD merging
commit 7b42aebd709c14df2db766aad61d9280ad24d84d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 15:04:44 2020 +0000
Capped LoD dragging
commit 8aafc559f87124e1ea5ca6e3ddc2aa0c242d793c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:54:37 2020 +0000
Better blending between LoD and terrain border
commit edd3455d5161792d87ddc8eadc0ecbad5532b284
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:40:19 2020 +0000
Fixed LoD z depth, added sea level offset
commit b9b06744620114dd5556e73f64fa93c145503a7c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:27:43 2020 +0000
Better LoD smoothing
commit a1aee931e790431560cd2d953ad61d9497072afd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Feb 21 14:52:17 2020 +0100
Adding shadows.
commit 2400786c13dd891c131ed86d48d05df516a8a778
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 13:48:40 2020 +0000
Use world map as LoD source
commit dbf650f504a4c25fbbc2096ac3616c736bf52d23
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Jan 20 00:48:14 2020 +0000
Better clouds at distance
commit 5e6f81b86cdb9730b9b056877b19257075fd5fa8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Jan 19 23:59:02 2020 +0000
sync
commit 745e7540ddb000cc645f612767b337c2ddc3f7c0
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 12:40:48 2019 +0000
Improved cloud falloff mist, faster noise sampling
commit f6a200d0cb866196ba57697466755f9e0c7ea5d8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 10:09:00 2019 +0000
Improved long-range depth precision, removed unnecessary LoD polygons
commit 63d1b2bb2292898d59fb4f4e502201103dfeb86f
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 20:57:46 2019 +0000
Working LoD shader
commit f13d98ee3e58f881e8b978861a67663b59ed91ec
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 11:03:40 2019 +0000
LoD first attempt (stack overflow issue)
2020-08-20 18:34:59 +00:00
|
|
|
|
let map = WorldFile::new(ModernMap {
|
|
|
|
|
continent_scale_hack,
|
|
|
|
|
map_size_lg: map_size_lg.vec(),
|
|
|
|
|
alt,
|
|
|
|
|
basement,
|
|
|
|
|
});
|
2019-12-11 09:14:50 +00:00
|
|
|
|
(|| {
|
|
|
|
|
if let FileOpts::Save = opts.world_file {
|
2020-01-11 20:38:30 +00:00
|
|
|
|
use std::time::SystemTime;
|
2019-12-11 09:14:50 +00:00
|
|
|
|
// Check if folder exists and create it if it does not
|
|
|
|
|
let mut path = PathBuf::from("./maps");
|
|
|
|
|
if !path.exists() {
|
2020-06-21 21:47:49 +00:00
|
|
|
|
if let Err(e) = std::fs::create_dir(&path) {
|
|
|
|
|
warn!(?e, ?path, "Couldn't create folder for map");
|
2019-12-11 09:14:50 +00:00
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
path.push(format!(
|
|
|
|
|
// TODO: Work out a nice bincode file extension.
|
|
|
|
|
"map_{}.bin",
|
|
|
|
|
SystemTime::now()
|
|
|
|
|
.duration_since(SystemTime::UNIX_EPOCH)
|
|
|
|
|
.map(|d| d.as_millis())
|
|
|
|
|
.unwrap_or(0)
|
|
|
|
|
));
|
2020-06-21 21:47:49 +00:00
|
|
|
|
let file = match File::create(path.clone()) {
|
2019-12-11 09:14:50 +00:00
|
|
|
|
Ok(file) => file,
|
2020-06-21 21:47:49 +00:00
|
|
|
|
Err(e) => {
|
|
|
|
|
warn!(?e, ?path, "Couldn't create file for maps");
|
2019-12-11 09:14:50 +00:00
|
|
|
|
return;
|
2020-02-01 20:39:39 +00:00
|
|
|
|
},
|
2019-12-11 09:14:50 +00:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
let writer = BufWriter::new(file);
|
2020-06-21 21:47:49 +00:00
|
|
|
|
if let Err(e) = bincode::serialize_into(writer, &map) {
|
|
|
|
|
warn!(?e, "Couldn't write map");
|
2019-12-11 09:14:50 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
})();
|
2020-01-18 18:41:37 +00:00
|
|
|
|
|
2020-02-01 20:39:39 +00:00
|
|
|
|
// Skip validation--we just performed a no-op conversion for this map, so it had
|
|
|
|
|
// better be valid!
|
(See sharp/lod-history) LOD, shadows, greedy meshing, new lighting, perf
---
Pretty much a Veloren fork at this point. Here's a high level overview of the changes (will be added to CHANGELOG just before merge).
At a high level this MR incorporates roughly two groups of changes.
The first group consists of new game features: more flexible map sizes, level of detail terrain, shadow maps, and a new lighting
engine. This is "feature work" that (mostly) only adds new things to Veloren, and mostly shouldn't affect old stuff.
The second big group of changes are those addressing the fallout from all the new features. These include performance fixes of
various sorts: the addition of multiple graphics options and optimization of the cheap ones to avoid work, switching all voxel
models to use some variant of greedy meshing, switching over much of our CPU-side vector math to exploit SIMD instructions
(coinciding with a fork of `vek`), and a rewrite of how the UI handles text rendering (coinciding with updates to our fork
of `conrod`). Making Veloren's hardcoded colors appear correct under the new lighting engine also required considerably
changes (TODO: Fill in this section when it's complete).
The second category of changes often heavily touches code owned by other people, including frequently modified code "owned" by a
handful of people, so I recommend that this code be reviewed particularly carefully.
---
At a high level (each will be described in more detail below):
- The world map has been refactored.
- The world size is no longer hardcoded (@zesterer).
- The map generation code was made generic to allow using it outside of the `world` crate (@zesterer).
- On world creation, we now compute *horizon maps* (@zesterer).
- The way we pass the world from the server to the client has been updated (@xMAC94x).
- Artifacts related to image rotation were fixed (@imbris).
- Multiflow rivers were enabled (@zesterer).
- In the process of making changes related to the world map, various incidental fixes and optimizations were required.
- The new *level of detail* feature was added (@zesterer wrote part of this and has checked out the rest).
- A new LOD terrain rendering step was added to the pipeline.
- The LOD terrain quality was made configurable via a graphics setting.
- Horizon maps were used to cast shadows from LOD chunks on both LOD and non-LOD terrain.
- A "voxelization" effect was incorporated into rendered LOD terrain to make it blend better into the world.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Veloren's lighting has been completely overhauled (@zesterer has already checked most of this out).
- A semi-accurate index of refraction was assigned to our materials.
- A new, more realistic, physically based approach to lighting was used using the *Ashikhmin Shirley* BRDF.
- We emulate *atmospheric scattering* using equations designed for measuring solar panel light exposure.
- We attempt to compute *realistic light attenuation* in water using its real material properties.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Point and directional lights now cast realistic shadows, using *shadow mapping.* (@imbris, @zesterer, @Treeco, @YuriMomo)
- Point light shadow maps were added to the rendering pipeline, using geometry shaders and *seamless cube maps*.
- Directional light shadows were added to the rendering pipeline, using LISPSM together with disabling *depth clamping*.
- "Shadow-only" chunks and NPCs were added to prevent shadows from models behind you from disappearing.
- In the process of making changes related to shadow maps, various incidental fixes and optimizations were required.
The addition of shadow maps, LOD terrain, and the new lighting all led to significant performance degradation, on top of other
changes happening in master. Therefore, a large number of performance improvements were also needed:
- The graphics options were made much more flexible and configurable, and shaders were optimize.
- New options were provided for how to render lights and shadows (@Pfauenauge, @zesterer).
- Graphic setting storage and configuration were overhauled to make adding new features easier (@Pfauenauge, @imbris).
- Shaders were rewritten to utilize GLSL's preprocessor to avoid overhead (@zesterer, @YuriMomo).
- In the process of making changes related to providing additional rendering options, various incidental fixes and optimizations were required.
- Voxel model creation was switched to use *greedy meshing.*
- A new voxel meshing method, greedy meshing, was added (@imbris).
- Uses of the older meshing methods were migrated to use greedy meshing (@imbris, @jshipsey, @Pfauenauge).
- New restrictions were added to terrain, figure, and sprites to future proof them for further optimizations (@jshipsey, @Pfauenauge, @zesterer).
- Most positions are now relative to either chunk or player position for better precision (@imbris, @zesterer, @scottc).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- Animation and terrain math were switched to use SIMD where possible.
- Fixes were made to vek to make its SIMD feature usable for us (@zesterer, @imbris).
- The interface and types used in bone animation were changed in various ways (@jshipsey, @Snowram, @Pfauenauge).
- Redundant code generation for body animation is now partly taken care of by a macro (@jshipsey, @Snowram, @Pfauenauge).
- Animation code was modified to to use vek's SIMD representation where possible (@jshipsey, @Snowram, @Pfauenauge).
- Terrain meshing code and shadow map math were also modified to use vek's SIMD representation (@imbris).
- SIMD instruction generation was enabled (@YuriMomo, @jshipsey, @Snowram, @imbris, @Angelonfira, @xMAC94x).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- The way we cache glyphs was completely refactored, fixed, and optimized.
- Our fork of `conrod` was optimized in various ways (@imbris).
- Our fork of `conrod` now exposes whether a widget was updated during the current frame (@imbris).
- Our use of the glyph cache was rewritten for correctness (@imbris).
- A *text cache* was introduced that lets us skip remeshing glyphs that have not changed (@imbris).
- Various changes were made to reduce pressure on the glyph cache, with more planned (@imbris, @Pfauenauge).
- In the process of making changes related to the glyph cache, various incidental fixes and optimizations were required.
- Colors were changed to keep Veloren's look consistent with master.
- Some older tree models were brought back (@Pfauenauge).
- TODO(@Sharp): All hardcoded colors were extracted and made hotloadable.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Hardcoded colors were fixed to conform to Veloren's style.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Color models were fixed to conform to Veloren's style.
A detailed description of the involved changes follows.
---
- The world size is no longer hardcoded. All functions dependent on world size now take a `WorldSizeLg`, which holds the base 2 logarithm of each actual world dimension and is guaranteed to maintain certain properties (outlined in `common/src/terrain/map.rs`). Additionally, many utility functions that utilize the world size were moved into `common` as well (mostly `common/src/terrain/mod.rs`). Finally, the world map format was updated in order to store its size explicitly, with a migration path from the old format that should work whenever the old formatted map was a square (practically always). See `world/src/sim/mod.rs` for these changes.
- The map generation code was made generic to allow using it outside of the `world` crate. The parts of the map generating code that do not need to query the world were moved over to `common/src/terrain/map.rs`, allowing them to be used from the client without creating a dependency on `world`. The rest of it was turned into helper functions in `world/src/sim/map.rs`, which can be passed as closures to the generic map generation code to complete its construction. This also means that colors are now passed in separately to the map generation function. See <https://veloren.net/devblog-78/> for more details.
- On world creation, we now compute *horizon maps*. See the function in `world/src/sim/util.rs`.
Given a height map and a plane intersecting that height map, our horizon maps allow us to encode enough information to reconstruct shadows for each point on the height map using only the *horizon angle* (the angle at which the sun starts to become visible). As Veloren's sun only covers one plane, this is sufficient for encoding sun shadows for LOD terrain, by encoding two angles per chunk (one for each 90 degrees the sun covers). We can also use this for the moon, if we want, since the moon follows the same path. Additionally, we store the *height* of the furthest occluder, to try to make the shadows volumetric; so this means 4 bytes in total for each chunk.
Support for horizon maps has been merged into the map functionality in common as well.
- The way we pass the world from the server to the client has been updated. Rather than passing the prerendered map, we instead pass three maps with values for each chunk; one with the color information, a second with altitude information, and a third with horizon map information. We then reconstruct the map on the client, together with some additional information we send from the server (like the sea level and maximum height). See `common/src/msg/server.rs` for a detailed description of the format of `WorldMapMsg`, and `server/src/libr.rs` and `client/src/lib.rs` for details of the map construction and parsing.
- Artifacts related to image rotation were fixed. See the commit message for commit SHA `cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e` for a detailed explanation. This involved changes to shaders, the addition of a new type of graphic (also reflected in the graphic cache) that allows specifying a border color (which automatically makes the associated texture immutable), and some related fixes. I reproduce the first two paragraphs of the MR description as well:
```
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
```
- Multiflow rivers were enabled.
This does not really need to be part of this MR, and would be easy to revert, but since it seemed to provide a nice improvement it's currently packaged with it.
We already computed multiple outflows from each chunk for erosion purposes long before this MR.
However, we never modified river rendering to be able to handle this case (just a single downhill river flow is complex enough!) so this was not exposed when deciding which chunks were rivers.
Now that
- In the process of making changes related to the world map, various incidental fixes and optimizations were required. Some examples of fixes include making sure terrain is never lowered to below sea level (to make the shadow maps report correct values), fixing map altitudes and colors to understand things like cliffs and "block level" coloring (that doesn'te xist on the column level), and fixing a crashbug when rendering images for the UI where source pixels are strongly rectangular. Some examples of related performance fixes include avoiding allocating a fresh vector for all the maps (i.e. copying it over to change the format from `[u32; n]` to `DynamicImage` and then copying again to convert to `RgbaImage`), and instead using the `gfx::memory::slice` function to accomplish the same thing. These sorts of changes are spread all arond the code.
This includes the additon of a new scene, `voxygen/src/scene/lod.rs`, a new pipeline `voxygen/src/render/pipeline/lod_terrain.rs`, and new shaders `assets/vxygen/shaders/lod-terrain-vert.glsl` and `assets/vxygen/shaders/lod-terrain-frag.glsl`, as well as associated changes to the renderer in `voxygen/src/render/renderer.rs`.
The main idea behind our initial approach to LOD was to take the world data we now get from the server (altitude, color, and horizon mapping).
- Some previously computed values were turned into shader uniforms for better prediction on weak processors. (@zesterer)
- Calls to power or trig functions were removed or replaced with multiplications, where possible.
- After some deliberation
- To properly handle sprite "waving" for nearby sprites,
We explicitly designed the greedy meshing system with figures and sprites in mind.
In both cases, we want to be able to *efficiently* pack many different models into the same texture, especially in cases where we know
we will either not be removing any of the grouped-together from the models from the texture, or will remove all of them at once (so
they can be packed into some specific subtexture).
For sprites, since we know every model in advance and never intend to deallocate them, we currently pack them all as efficiently as
possible into one giant tetxure atlas. However, in the future we might opt to pack them slightly less efficiently in exchange for
shrinking the sprite vertex size.
For figures, we pack all the textures for each *model* into the same atlas.
is a global texture atlas used for every sprite, and for figures which is why we have the ability to mesh multiple
models to the same texture area (using the simple texture atlas allocator) without requiring intermediate vector allocations.
This is accomplished by delaying the time when we actually write the color and light data to the texture until *after* all the
model vertices have been meshed; then, we can just allocate the whole color/light array at once, making the atlas we use an
exact fit. In computer science-y terms, we accomplish this delay by, after we perform the initial greedy meshing (without
texture information), not continuing to create the texture data, but instead constructing a *continuation*--that is, a function
that, when called, will execute the rest of the computation. We push this continuation (which in Rust terms is a `FnOnce` closure
that takes the `ColLightsInfo` that it is supposed to write to as context) onto a
onto a vector
resizing. To allow for suspended writes to texture data, Rust pointed out to me that the continuation that would eventually write the color and light data to the texture atlas (the one that is shared by all models sharing the same greedy mesher) would have to *own* whatever data it mshed. Because we often generate the model data to mesh as a temporary in `voxygen/src/load.rs`, the
- Matrix multiplications in the shader were reduced for figure data (@zesterer).
- Vertex "waves" for fluid data were removed.
- Terrain "bending" near edges was removed.
- Scaling was fixed to make sure empty space was not introduced in a space previously occupied by a block. It was also changed to take ownership of its voxel data,
rather than sharing it, to let it be used with meshing.
- Rust's nightly version was bumped in order to use the `array_map` function, which lets us reuse more code between the simple map and `FigureModelCache`.
- PositionedGlyph::standalone.
---
I tried to cite sources in many cases[^realtime],[^lloyd],[^lispsm],[^pbrt],[^greedy],[^tjunctions]
where I needed features from elsewhere but I am particularly grateful for the following resources,
esepcially where they have accompanying source code. I linked all of them that are accessible to the public (those that are not were
obtained through legal means).
[^realtime]: Eisemann, Elmar, Michael Schwarz, Ulf Assarsson, Michael Wimmer. Real-Time Shadows. A K Peters/CRC Press (T&F), 20160419.
[^lloyd]: Lloyd,B. 2007. [Logarithmic perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). PhD thesis, University of North Carolina.
[^lispsm]: Wimmer, M., Scherzer, D., and Purgathofer, W. 2004. [Light space perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). In Proceedings of Eurographics Symposium on Rendering 2004, pp. 143– 152.
[^pbrt]: Pharr, Matt, et al. [http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf](Physically Based Rendering: From Theory to Implementation). Third edition, Morgan Kaufmann Publishers/Elsevier, 2017.
[^greedy]: mikolalysenko. “Meshing in a Minecraft Game.” 0 FPS, 30 June 2012, <https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/>.
[^tjunctions]: blackflux. “Meshing in Voxel Engines – Part 1.” Blackflux.Com, 23 Feb. 2014, <https://blackflux.wordpress.com/2014/02/23/meshing-in-voxel-engines-part-1/>.
I am also especially grateful to Khronos, Wikiepdia, and stackoverflow for answering many of my specific questions while writing the MR.
---
Squashed commit of the following:
commit 300505e7305a2fdac722a808ee8538323f215f39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 18:46:25 2020 +0200
Fixing cargo doc and typo in CHANGELOG.
commit ec0aeb18e8499d7d84ef818331b4b65c3d76cea6
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 15:38:50 2020 +0200
Hopefully final commit for the LOD branch.
commit 5e8ea0b1eaac02903a02feb2eb038d195de4872f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 10:14:26 2020 +0200
Falling back to power as stopgap.
commit e44a1cbf46504ee9931a01bdc9033e145500d557
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 09:25:41 2020 +0200
Address imbris feedback.
Temporarily disables shiny water, lowers max VD.
These restrictions will be lifted soon after merging.
commit 561e25778a108ac3712f5ec2ce3a51234c4430d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 08:31:13 2020 +0200
Tweaking shaders a bit.
commit 7d19259078ce0dd7b3742ad7d0cb3fab3ece3fdc
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:59:43 2020 +0200
Fix view example as well.
commit 051cd4934e0fad2c0b15db4380a4189fa318679f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:29:06 2020 +0200
Fix meshing benchmark.
commit c95e07db3b4dcca285678985e65e31b927cb1c61
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 05:46:22 2020 +0200
Address MR feedback, fix scene clouds.
commit 1bfb816cabdb3ffc1e507a009c2d98696b4b573a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:39:36 2020 +0200
Incorporating Pfau's figure color changes.
New eyes and new humanoid colors.
commit 3f9b89a3ac7b3356b1dba0d1a8f6541357f81469
Merge: e2f5162e4 62c53963a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:29:41 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit e2f5162e4f96f4124aa43488f7245d341b3dcfd4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:28:38 2020 +0200
World colors are all hotloadable.
They live in assets/world/style/colors.ron.
Only a small handful of hardcoed colors remain in World; they are either
part of the map, or difficult to disentangle from the rest of the
computation. Comments are made where appropriate.
commit 62c53963abe1975009d34a8f9515a355bef24f31
Author: Marcel Märtens <marcel.cochem@googlemail.com>
Date: Wed Aug 19 15:59:00 2020 +0200
replace pretty_env_logger with tracing
commit 5b1625f99d9586fe80e2232f583ec5af9f953099
Merge: d71003acd 4942b5b39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:15:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit d71003acdabeff970b3928e97c26af6847b5b78e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:14:34 2020 +0200
Hotloading colors, part 1: colors in common.
Currently, this just entails humanoid colors. There are only three
colors not handled; the light emitter colors in
common/src/comp/inventory/item/tool.rs. These don't seem important
enough to me to warrant making hotloadable, at least not right now, but
if it's needed later we can always add them to the file.
commit 63b5e0e553eb2ea49276f192a6fc7dd65254270d
Merge: c32b337a4 6d2c4b9c1
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 13:05:37 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c32b337a46e10d9de473d178a94a3ccd61c39bb3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:52:04 2020 +0200
Fixing LOD grid, for real.
commit a166ae0360395387e09fb35a1f84210c2ce5ec24
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:28:05 2020 +0200
Addressing imbris's initial feedback.
Fixes two minor bugs: explosion particles were no longer spawning
randomly, and LOD grids were not perfectly even.
commit 4cbad004f44060994252dd3d38647a14a589712f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:27:58 2020 +0200
Bumping nightly per request.
commit 548680276aac77c25d43d16b5622f847d474dbef
Merge: acc098604 8f8b20c91
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:26:06 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit acc0986040589a3492f88a740bc3c3fc693b26d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:28:32 2020 +0200
Lower resolution due to lying drivers.
commit d3b878de2a52c358d2944a6bbd0555dad7fbdb10
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:15:38 2020 +0200
Fix issues msh encountered with Intel 4600.
commit 10245e0c1b0cb6fae10d86409435364edc6102ef
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 21:15:02 2020 +0200
Merge more models into one mesh than we did previously.
commit 3155c31e663c52ae5c3a53d5fb5665892a1a498a
Merge: 7204cc8a7 3c199280e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:35:22 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7204cc8a7a4f74a30306bd205d9834fee4bb944f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:34:43 2020 +0200
Fix not yet done NPC animations.
This forces them all to be the idle animation if not specified.
This fixes issues where you'd have giant NPCs in water.
commit bc83360f2a08918f19d417b5f772e1ff554dba08
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 19:36:37 2020 +0200
Try to fix some bugs:
- Z fighting with LOD terrain and water.
- Audio SFX not playing.
commit 1fd104aa603bf3781b6526a5cada46aeca3049dd
Merge: 862df3c99 7c2c392a3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 12:02:31 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 862df3c9976c4da9bd7cfd784f1a85973127968a
Merge: 0a4218ed9 75c1d4401
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 05:52:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0a4218ed9d541a2b34c133351bea38a99ddf4ea7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 22:27:14 2020 +0200
Fix particle depth.
commit f51dfdeb442d0dd5243dd2f344fa4be295bd0875
Merge: c6251a956 5e6dc0471
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:19:04 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit c6251a956ad376400dca5c23420cf8d213dc8fdf
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:15:46 2020 +0200
Cache figures more intelligently.
Cache figures for longer, and don't cache character states for the
player except where they actually affect the rendered model.
commit 0ed801d5404982c6fb63b1eaa4567d908b294c9d
Merge: c11b9bdf0 eea64f78f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 16:32:24 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c11b9bdf0a53bf9884d2f5a48fec9b01d582df1a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 11:47:15 2020 +0200
Remove unneeded Clippy annotation.
commit 16aa9ef40af56d69289d00aafb3deadfb8bd4f35
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 8 00:53:02 2020 +0200
Fix hotloading and Clippy.
commit 3dc973e0be5b758da1e9805eb764ad401374cd0c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 23:50:27 2020 +0200
Major speedups with SIMD.
commit fba64a7d93d5a96077ce87287bbce6ab9b7fbcae
Merge: 76429d00e d1e10b178
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:19 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 76429d00eea00d212fbd672a84ee91e75b19b938
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:10 2020 +0200
Add clippy.toml.
commit c79f512f84dbb83cb82b7954db68ff241dfd8e41
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 11:55:20 2020 +0200
Fix all clippy issues, clean up Rust code.
commit 6f90e010b3fbefb53b0d632e819931350015b6b8
Merge: 77a8c7c26 5929cfa5c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:30 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 77a8c7c267d3f44a1a62bd6b2274359973c5e4d4
Merge: b44e44232 44febaabd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:10 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 5929cfa5c713aa392110bbb62407f76caf53c3df
Author: jshipsey <jshipsey18@gmail.com>
Date: Thu Aug 6 20:47:27 2020 -0400
fixed in-hand arrow bug
commit b44e442325d828f1cd564d66908f89d09e80474b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 6 13:40:35 2020 +0200
Miscellaneous performance improvements.
commit be37acf287c1360d8085862526ac3365ffd1d768
Merge: 125d7fc6c c11876547
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 05:49:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 125d7fc6c4dcd8c8c5f27b8268a4d64f409f3644
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 04:55:31 2020 +0200
Abstract over simd vs. repr_c vectors.
Also some minor improvements to Event size.
commit d4d4956e9252e1241ce110b2aa85076c6b1e2a23
Merge: 5f3b7294a aced5f979
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:56:54 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 5f3b7294af1f8533edc2620b58863c248e2b07af
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:43:52 2020 +0200
Fix formatting issues I missed before.
commit a428a3ebba70dcab63dd0f8cd983120c90617271
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:41:51 2020 +0200
Fix clippy warnings, part 1.
There aer still a bunch of type too complex and
function takes too many arguments warnings that I'll fix later
(or ignore, since in the one case I did fix a function takes too
many arguments warning I think it made the code *less* readable).
commit ba54307540ed8a937ac08209730284fc653af85b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 30 13:22:42 2020 +0200
Fix light animations so they are removed when the light turns off.
commit 7e0f4bcbf0f4717145d8beac40d52e3acebbe2aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 21:10:20 2020 +0200
Fix crash in edge case for pixel art.
commit 56da06f7a351e2b949e9b014a90b974d511a0924
Merge: cf74d55f2 9f53a4a19
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:56:52 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:29:52 2020 +0200
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
The first concern was addressed by fixing the dimensions of the map
images drawn from the UI (so that we always use a square source
rectangle, rather than a rectangular one according to the dimensions of
the map). We also fixed the way rotation was done in the fragment
shader for north-facing sources to make it properly handle aspect ratio
(this was already done for north-facing targets). Together, these fix
rendering issues peculiar to rectangular maps.
The second and third concerns were jointly addressed by adding an
optional border color to every 2D image drawn by the UI. This turns
out not to waste extra space even though we hold a full f32 color
(to avoid an extra dependency on gfx's PackedColor), since voxel
images already take up more space than Optiion<[f32; 4]> requires.
This is then implemented automatically using the "border color"
wrapping method in the attached sampler.
Since this is implemented in graphics hardware, it only works (at
least naively) if the actual image bounds match the texture bounds.
Therefore, we altered the way the graphics cache stores images
with a border color to guarantee that they are always in their own
texture, whose size exactly matches their extent. Since the easiest
currently exposed way to set a border color is to do so for an
immutable texture, we went a bit further and added a new "immutable"
texture storage type used for these cases; currently, it is always
and automatically used only when there is a specified border color,
but in theory there's no reason we couldn't provide immutable-only
images that use the default wrapping mdoe (though clamp to border
is admittedly not a great default).
To fix the maps case specifically, we set the border color to a
translucent version of the ocean border color. This may need
tweaking going forward, which shouldn't be hard.
As part of this process, we had to modify graphics replacement to
make sure immutable images are *removed* when invalidated, rather
than just having a validity flag unset (this is normally done by
the UI to try to reuse allocations in place if images are updated
in benign ways, since the texture atlases used for Ui do not
support deallocation; currently this is only used for item images,
so there should be no overlap with immutable image replacement,
so this was purely precautionary).
Since we were already touching the relevant code, we also updated
the image dependency to a newer version that provides more ways
to avoid allocations, and made a few other changes that should
hopefully eliminate redundant most of the intermediate buffer
allocations we were performing for what should be zero-cost
conversions. This may slightly improve performance in some
cases.
commit ad18ce939940a8c697270f6e9b94db9942fd8295
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 13:21:09 2020 +0200
Fix continent scale hack.
commit 36b1cb074f5b195aebd7dbbc3da7f0246a1a18ec
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 12:11:40 2020 +0200
Enable loading different sized maps without a recompile.
We may want to tweak the effects of the continent_scale_hack.
commit 13b6d4d534cc4814b7cb3294ca41bbfea0a6b186
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 10:55:48 2020 +0200
Removing WORLD_SIZE, part 1.
Erased almost every instance of WORLD_SIZE and replaced it with a local
power of two, map_size_lg (which respects certain invariants; see
common/src/terrain/map.rs for more details about MapSizeLg). This also
means we can avoid a dependency on the world crate from client, as
desired.
Now that the rest of the code is not expecting a fixed WORLD_SIZE, the
next step is to arrange for maps to store their world size, and to use
that world size as a basis prior to loading the map (as well, probably,
as prior to configuring some of the noise functions).
commit 30b1d2c6428230a9eaa0d749cdcbbd6f1cbccd78
Merge: 7d56ba31b 1377b369f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:58 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 7d56ba31b445441461b28a07fc495d7d4f047c17
Merge: 2101113b4 598f14b25
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 1377b369f6db2258e910d467a5740f31789e3ded
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sun Jul 19 23:25:38 2020 +0200
more saturated pumpkins
commit ae8d50527f93bb0616c2ad46ce4dacb63bc37c6d
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sat Jul 18 20:29:56 2020 +0200
acacia models
commit 2101113b467e691de787392d7f20f1745f5637bd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 18 18:55:25 2020 +0200
Higher detail LOD.
commit add2cfae04b4385fa5590e11e2bd5229d9dee0aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 16 01:57:39 2020 +0200
Revert some irrelevant stuff.
commit 2e2ab3dc1eaa59a4aef7f8d34a53d8aae4c8553a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 15 13:30:49 2020 +0200
Fixing various things about shadows.
* Correcting optimal LISPSM parameter.
* Figure shadows are cast when they're not visible.
* Chunk shadows stay cast until you look away.
* Seamless cubemaps for point lights.
* Etc.
commit 6c31e6b56217274285b597af297036691ea5d897
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 19:50:26 2020 +0200
Fix shadow creation.
commit 6332cbe006115ae205597529cd8bbccd146c2cca
Merge: be438657c 930e0028b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:47:00 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit be438657c33d7b5bfb0a9582c3ed3fd366637323
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:28:08 2020 +0200
Tweaks to shadows.
Added shadow map resolution configuration, added seamless cubemaps,
documented all existing rendering options, and fixed a few Clippy
errors.
commit 23b4058906013c7d2a40c286e20e32c5fbd897ed
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 10:11:19 2020 +0200
Fix moon, use nonlinear noise for terrain.
Note that the latter has a bit of performance cost.
commit 7fbe5cbfbb9dc29607957b8e62f432a4deed193d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:23:02 2020 +0200
Address lies about max texture size.
commit bcfc62b5e13a1cdd83f57535fde4694720bebfd9
Merge: 75e3626a7 18a08e8fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:22:08 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 75e3626a785919f43fdcf2127c2b10e3e4df2f9f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:21:52 2020 +0200
OpenGL 3.3 minimum.
commit 18a08e8fe2739f02af99a5d2cb4e7c38c49e858b
Author: Monty Marz <m.marzouq@gmx.de>
Date: Tue Jul 7 23:57:52 2020 +0200
settings localization
commit 90c5d1ca3620092bc3ae10b2211489eb1cf6f5e8
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 21:11:48 2020 +0200
Lower near distance.
commit 0e66f02b25aaddaa2dfddbbc89cd67de54a9a7b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 20:09:01 2020 +0200
All sprites sway in the wind now.
commit db1401a6910bf42dcf502462c90038752ff5fbdb
Merge: 69e508d8c e8b4b29d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 19:34:17 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 69e508d8c94d8973033817ca86f357e466fc7c4d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 18:41:37 2020 +0200
Make it easy to switch to SIMD for math.
commit ffe0f5928c7a7e87d00cb5426b3b1d831d7e02fd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 21:21:12 2020 +0200
Fix some issues with underwater rendering.
commit bfda6da42f38fd02c31ee92c81ab785a3e50c2a0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 19:17:59 2020 +0200
Fix some minor display issues.
commit 0ed752e087968cf901301884aaeae698e32ef8a5
Merge: ccc6a06a8 518edcb85
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:14:21 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit ccc6a06a8d4504d6b9f7af7905a414d2ee06ab76
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:04:34 2020 +0200
Some minor changes.
commit 4e020246702889269efe1a191788992164c508d6
Merge: 50a64d927 e05c9267a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 16:17:40 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 50a64d927e6c4f4b0e4688e4cbfca694bc3f922a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 13:07:03 2020 +0200
Fix far plane.
commit 7dd06da34cae8f9ea3b6c889fe965181f3fd3949
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:25:35 2020 +0200
Add shadows.glsl.
commit 618a18c998778bf871b905a74657440fcc384c80
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:10:22 2020 +0200
Adding shadows, greedy meshing, and more.
commit eaea83fe6a5cb1cb0ba8beef888183c718258496
Merge: 267018495 2f89b863e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 22:47:07 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 2670184954a13e4a9e7a4e35ba79aac0c5fac2f7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 21:20:01 2020 +0200
Make civsim and sites deterministic.
For anything in worldgen where you use a HashMap, *please* think
carefully about which hasher you are going to use! This is
especially true if (for some reason) you are depending on hashmap
iteration order remaining stable for some aspect of worldgen.
commit f8376fd5dc72b4a9c2f51a6b4570d59c8b8e9343
Merge: 654f7e049 cdee191dd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 17:53:57 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 654f7e049258d9da27c09608bbe6a46ffa8787e5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed May 20 21:22:30 2020 +0200
Correct backface culling.
commit 560501df05ca725409b0f2e4eb31bdfdc15fd0c7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue May 19 17:22:06 2020 +0200
Greedy messhing for shadows.
commit a4d87e1875ca543436e6bbbeb20348facc5a52d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun May 17 05:59:00 2020 +0200
Shadow maps work for lantern.
commit 243d0837b8a3b08172c9a3c348d964d7ddc2a0a8
Merge: 04382dc28 71dd520cd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:53:13 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 04382dc28632b6c66e8821f6870c0daaa1c1901a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:22:17 2020 +0200
WIP: better graphics config, better LOD, shadow maps.
commit 22ddbad3eb32bfa70f0932176022208fe67ded81
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 18:54:09 2020 +0200
Minor shader fixes.
commit 746a10e8d01ac235f994b0cde78fa48998602a1f
Merge: 0f4a0e763 40ab94673
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 04:02:09 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0f4a0e763db3afbdc4fb0558611f38326ca87151
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 23:03:24 2020 +0200
Switch back to pop-in terrain.
commit dd74fa7e4a53667b38811d7aec58d7f6a68889bb
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 22:58:55 2020 +0200
LOD shading closer to voxel shading.
commit ef67bd58ba0bdaf622b078892d768263b6cba268
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 28 20:49:03 2020 +0200
Experimental underwater lighting.
commit 2c5ad9d07605e80d5fd5679dd3a5d70c605b86a9
Merge: 748279835 303967a6f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 22:35:24 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7482798354eda18c8207950080fc24d443a369de
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 21:59:55 2020 +0200
Replace discard in figure-frag.
commit d83b4ae69be4912f69bf7835f509c68a1c7770a4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:45:57 2020 +0200
Fix sprite lighting, HDR from focus_pos.
commit 0594238004f116274905fa0ed7c2b6c417ed1d29
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:14:10 2020 +0200
Proper HDR from point lights.
commit 48c93d2b41ce5743103d18e76cc228f5ac766492
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 14:01:43 2020 +0200
Brighter ambiance, darker LOD shadows.
commit e0452e895ccfa8a43f368cae3b8b8aedc24dad93
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 13:13:23 2020 +0200
More proper HDR.
commit 4c6da3ed16cfeebb455e40da5f557b4af9a499d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 00:13:10 2020 +0200
Trying LOD noise.
commit 682a3d74c85df5503ffe1fc1cc891bce789df1ad
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 23:11:08 2020 +0200
Fix LOD heights in towns.
commit cc39e5734e8b18f9077bf42e66337c1319dd6b6e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 21:01:23 2020 +0200
More LOD fixes.
commit 8116b21c2e51c836e77894e309ac273caf2917b3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:54:43 2020 +0200
I like this coloring.
commit bc2560ea90b36f4b46190005344232d993043ac3
Merge: 14effdd5d e690efe71
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:48:33 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 14effdd5db8747fcf3eb34f03b46b7792e92d1c5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:24:35 2020 +0200
Re-saturate.
commit 48a643955d4435b78179acba0beb4a979905cc31
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:23:57 2020 +0200
Various fixes.
commit f7b497a0c25f4ad4682c71dd1ed6f608052feb9b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 03:22:49 2020 +0200
Render figures again.
commit 44e4aad48deba8266b9f8bdfd3db096b381f5327
Merge: e6f0a5a98 9ec319a18
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 02:01:04 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit e6f0a5a981a82533ba188fff0a54ce98577bb152
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 24 16:12:20 2020 +0200
Add atmospheric scattering.
commit f2953087f691a8edbc001cb98ebf5059fc6f8ac0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 23 00:01:20 2020 +0200
Fix shadowing for specular reflections.
commit ddd4a67a9799b8d08c7dc0c2bec90621c2bed0e3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Apr 22 22:56:12 2020 +0200
HDR fixes.
commit 1015e60deef3c447381996277df7496707a63bd0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 21 18:25:19 2020 +0200
More lighting changes.
commit 80c264abd111fb237e57843efcb5c071d4f84613
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 13 00:29:59 2020 +0200
Lighting experiments.
commit 8414987e589dd5102bad89762a3adaccc0bfe957
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 9 02:38:40 2020 +0200
WIP -- lighting changes and soft shadows.
commit 9cd2b3fb0d6b49776c6dfe463e4169637250b11a
Merge: c7ea687eb 8b149ad11
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:29 2020 +0200
Merge branch 'sharp/new-lighting' into sharp/small-fixes
commit c7ea687ebbc5aace1b455f134a5bf49ce2c7434a
Merge: 476441531 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:02 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 8b149ad11ad4bb75018fcf9519baec27d1c95951
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:32:39 2020 +0200
Trying out a new lighting model.
commit b0ac9f36f755dd06f7c17c46150568064790864f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 07:56:11 2020 +0200
Use bicubic interpolation for terrain.
commit f6fc9307a121514b614bc50ef8eb055953e7da8a
Merge: 33140a295 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 05:01:41 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 4764415312aae6e9ac2d00e86e84577cb958f1ab
Merge: ed2d0111d 13388ee6a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 04:54:48 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 13388ee6a42943f3f79a9cb488346cef18e272fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 20:30:08 2020 +0200
Various fixes (to coloring and to soft shadows).
commit fbd084a94a067082a87cd6d28b82054709bc9265
Merge: 5a089863b 4fdf6896a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 18:50:38 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/map-colors
commit ed2d0111d994262ae836d84d1fe5a45e4de72a0b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 06:49:27 2020 +0200
Combining colors and LOD.
commit 88342640c6b835114d01c797b89fdede3b0a2108
Merge: 33140a295 5a089863b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:49:20 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 33140a2951b8212725f42c758b277aaec4d888f7
Merge: 4c65a5aed f34d4b379
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:36:21 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 5a089863beb01d4794bbe3580ada47b278715ea2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 03:17:49 2020 +0200
Making maps brighter.
This is probably not the right way to do it, but oh well!
commit 32b2c99109dd486aa922886081068f9c550c83f2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 02:46:36 2020 +0200
Horizon mapping and "layered" map generation.
Horizon mapping is a method of shadow mapping specific to height maps.
It can handle any angle between 0 and 90 degrees from the ground, as
long as know the horizontal direction in advance, by remembering only a
single angle (the "horizon angle" of the shadow map). More is explained
in common/src/msg/server.rs. We also remember the approximate height of
the largest occluder, to try to be able to generate soft shadows and
create a vertical position where the shadows can't go higher.
Additionally, map generation has been reworked. Instead of computing
everything from explicit samples, we pass in sampling functions that
return exactly what the map generator needs. This allows us to cleanly
separate the way we sample things like altitudes and colors from the map
generation process. We exploit this to generate maps *partially* on the
server (with colors and rivers, but not shading). We can then send the
partially completed map to the client, which can combine it with shadow
information to generate the final map. This is useful for two reasons:
first, it makes sure the client can apply shadow information by itself,
and second, it lets us pass the unshaded map for use with level of
detail functionality.
For similar reasons, river generation is split
out into its own layer, but for now we opt to still generate rivers on
the server (since the river wire format is more complicated to compress
and may require some extra work to make sure we have enough precision to
draw rivers well enough for LoD).
Finally, the mostly ad-hoc lighting we were performing has been (mostly)
replaced with explicit Phong reflection shading (including specular
highlights). Regularizing this seems useful and helps clarify the
"meaning" of the various light intensities, and helps us keep a more
physically plausible basis. However, its interaction with soft shadows
is still imperfect, and it's not yet clear to me what we need to do to
turn this into something useful for LoD.
commit f8926a5737ddc51f3d585c651a64c43677aae0f4
Merge: a1aee931e 875ae6ced
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Mar 13 13:32:42 2020 +0100
Merge remote-tracking branch 'origin/master' into sharp/map-colors
commit 4c65a5aed353b119aea65a2aaeb94549b67beb42
Author: Treeco <5021038-Treeco@users.noreply.gitlab.com>
Date: Mon Feb 24 16:48:05 2020 +0000
Made LOD setting slider exponential
commit 2fa7b2d20d7233dc8bfd64f9f7f54617575248f1
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 17:49:53 2020 +0000
Added mist to LoD
commit aab059a450b5f635777129ff82cc15b662965c3c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 15:14:06 2020 +0000
Added LoD slider
commit 779c36b538121c5ade3633ae5cb67bb14c8c3877
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:54:55 2020 +0000
Reduced cost of vertex pushing
commit 9fea150473906b166365b738ebcea07c697daf3d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:38:53 2020 +0000
Fixed maths, improved LoD resolution
commit 5481df38fea5bf183ff376a3337179cfaa5233dc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 11:22:50 2020 +0000
Dynamically relocate LoD vertices to enhance details
commit a3e36a50ababd615da7db1b26158c7906a5def01
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 18:13:51 2020 +0000
Simpler terrain spiral rendering
commit 255f450ae9ac8763db4bede075fb409161ed57cc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:53:17 2020 +0000
Better LoD precision
commit 3d027aebe812a5b8658a4eb8123dc9f61b3776d2
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:04:03 2020 +0000
Better falloff
commit be775c9484b457b2c0b1a494aec03392d0c70e76
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 15:30:45 2020 +0000
Applied good ideas from experimental branch
commit 58587b68545a23c5c04ab4574a4b94b3bc982246
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 16:15:13 2020 +0000
Minor fixes to LoD merging
commit 7b42aebd709c14df2db766aad61d9280ad24d84d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 15:04:44 2020 +0000
Capped LoD dragging
commit 8aafc559f87124e1ea5ca6e3ddc2aa0c242d793c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:54:37 2020 +0000
Better blending between LoD and terrain border
commit edd3455d5161792d87ddc8eadc0ecbad5532b284
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:40:19 2020 +0000
Fixed LoD z depth, added sea level offset
commit b9b06744620114dd5556e73f64fa93c145503a7c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:27:43 2020 +0000
Better LoD smoothing
commit a1aee931e790431560cd2d953ad61d9497072afd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Feb 21 14:52:17 2020 +0100
Adding shadows.
commit 2400786c13dd891c131ed86d48d05df516a8a778
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 13:48:40 2020 +0000
Use world map as LoD source
commit dbf650f504a4c25fbbc2096ac3616c736bf52d23
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Jan 20 00:48:14 2020 +0000
Better clouds at distance
commit 5e6f81b86cdb9730b9b056877b19257075fd5fa8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Jan 19 23:59:02 2020 +0000
sync
commit 745e7540ddb000cc645f612767b337c2ddc3f7c0
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 12:40:48 2019 +0000
Improved cloud falloff mist, faster noise sampling
commit f6a200d0cb866196ba57697466755f9e0c7ea5d8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 10:09:00 2019 +0000
Improved long-range depth precision, removed unnecessary LoD polygons
commit 63d1b2bb2292898d59fb4f4e502201103dfeb86f
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 20:57:46 2019 +0000
Working LoD shader
commit f13d98ee3e58f881e8b978861a67663b59ed91ec
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 11:03:40 2019 +0000
LoD first attempt (stack overflow issue)
2020-08-20 18:34:59 +00:00
|
|
|
|
let ModernMap {
|
|
|
|
|
continent_scale_hack: _,
|
|
|
|
|
map_size_lg: _,
|
|
|
|
|
alt,
|
|
|
|
|
basement,
|
|
|
|
|
} = map.into_modern().unwrap();
|
2019-12-11 09:14:50 +00:00
|
|
|
|
|
2020-08-25 12:21:25 +00:00
|
|
|
|
// Additional small-scale erosion after map load, only used during testing.
|
2020-01-22 14:31:10 +00:00
|
|
|
|
let (alt, basement) = if n_post_load_steps == 0 {
|
|
|
|
|
(alt, basement)
|
2019-12-11 09:14:50 +00:00
|
|
|
|
} else {
|
|
|
|
|
do_erosion(
|
(See sharp/lod-history) LOD, shadows, greedy meshing, new lighting, perf
---
Pretty much a Veloren fork at this point. Here's a high level overview of the changes (will be added to CHANGELOG just before merge).
At a high level this MR incorporates roughly two groups of changes.
The first group consists of new game features: more flexible map sizes, level of detail terrain, shadow maps, and a new lighting
engine. This is "feature work" that (mostly) only adds new things to Veloren, and mostly shouldn't affect old stuff.
The second big group of changes are those addressing the fallout from all the new features. These include performance fixes of
various sorts: the addition of multiple graphics options and optimization of the cheap ones to avoid work, switching all voxel
models to use some variant of greedy meshing, switching over much of our CPU-side vector math to exploit SIMD instructions
(coinciding with a fork of `vek`), and a rewrite of how the UI handles text rendering (coinciding with updates to our fork
of `conrod`). Making Veloren's hardcoded colors appear correct under the new lighting engine also required considerably
changes (TODO: Fill in this section when it's complete).
The second category of changes often heavily touches code owned by other people, including frequently modified code "owned" by a
handful of people, so I recommend that this code be reviewed particularly carefully.
---
At a high level (each will be described in more detail below):
- The world map has been refactored.
- The world size is no longer hardcoded (@zesterer).
- The map generation code was made generic to allow using it outside of the `world` crate (@zesterer).
- On world creation, we now compute *horizon maps* (@zesterer).
- The way we pass the world from the server to the client has been updated (@xMAC94x).
- Artifacts related to image rotation were fixed (@imbris).
- Multiflow rivers were enabled (@zesterer).
- In the process of making changes related to the world map, various incidental fixes and optimizations were required.
- The new *level of detail* feature was added (@zesterer wrote part of this and has checked out the rest).
- A new LOD terrain rendering step was added to the pipeline.
- The LOD terrain quality was made configurable via a graphics setting.
- Horizon maps were used to cast shadows from LOD chunks on both LOD and non-LOD terrain.
- A "voxelization" effect was incorporated into rendered LOD terrain to make it blend better into the world.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Veloren's lighting has been completely overhauled (@zesterer has already checked most of this out).
- A semi-accurate index of refraction was assigned to our materials.
- A new, more realistic, physically based approach to lighting was used using the *Ashikhmin Shirley* BRDF.
- We emulate *atmospheric scattering* using equations designed for measuring solar panel light exposure.
- We attempt to compute *realistic light attenuation* in water using its real material properties.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Point and directional lights now cast realistic shadows, using *shadow mapping.* (@imbris, @zesterer, @Treeco, @YuriMomo)
- Point light shadow maps were added to the rendering pipeline, using geometry shaders and *seamless cube maps*.
- Directional light shadows were added to the rendering pipeline, using LISPSM together with disabling *depth clamping*.
- "Shadow-only" chunks and NPCs were added to prevent shadows from models behind you from disappearing.
- In the process of making changes related to shadow maps, various incidental fixes and optimizations were required.
The addition of shadow maps, LOD terrain, and the new lighting all led to significant performance degradation, on top of other
changes happening in master. Therefore, a large number of performance improvements were also needed:
- The graphics options were made much more flexible and configurable, and shaders were optimize.
- New options were provided for how to render lights and shadows (@Pfauenauge, @zesterer).
- Graphic setting storage and configuration were overhauled to make adding new features easier (@Pfauenauge, @imbris).
- Shaders were rewritten to utilize GLSL's preprocessor to avoid overhead (@zesterer, @YuriMomo).
- In the process of making changes related to providing additional rendering options, various incidental fixes and optimizations were required.
- Voxel model creation was switched to use *greedy meshing.*
- A new voxel meshing method, greedy meshing, was added (@imbris).
- Uses of the older meshing methods were migrated to use greedy meshing (@imbris, @jshipsey, @Pfauenauge).
- New restrictions were added to terrain, figure, and sprites to future proof them for further optimizations (@jshipsey, @Pfauenauge, @zesterer).
- Most positions are now relative to either chunk or player position for better precision (@imbris, @zesterer, @scottc).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- Animation and terrain math were switched to use SIMD where possible.
- Fixes were made to vek to make its SIMD feature usable for us (@zesterer, @imbris).
- The interface and types used in bone animation were changed in various ways (@jshipsey, @Snowram, @Pfauenauge).
- Redundant code generation for body animation is now partly taken care of by a macro (@jshipsey, @Snowram, @Pfauenauge).
- Animation code was modified to to use vek's SIMD representation where possible (@jshipsey, @Snowram, @Pfauenauge).
- Terrain meshing code and shadow map math were also modified to use vek's SIMD representation (@imbris).
- SIMD instruction generation was enabled (@YuriMomo, @jshipsey, @Snowram, @imbris, @Angelonfira, @xMAC94x).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- The way we cache glyphs was completely refactored, fixed, and optimized.
- Our fork of `conrod` was optimized in various ways (@imbris).
- Our fork of `conrod` now exposes whether a widget was updated during the current frame (@imbris).
- Our use of the glyph cache was rewritten for correctness (@imbris).
- A *text cache* was introduced that lets us skip remeshing glyphs that have not changed (@imbris).
- Various changes were made to reduce pressure on the glyph cache, with more planned (@imbris, @Pfauenauge).
- In the process of making changes related to the glyph cache, various incidental fixes and optimizations were required.
- Colors were changed to keep Veloren's look consistent with master.
- Some older tree models were brought back (@Pfauenauge).
- TODO(@Sharp): All hardcoded colors were extracted and made hotloadable.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Hardcoded colors were fixed to conform to Veloren's style.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Color models were fixed to conform to Veloren's style.
A detailed description of the involved changes follows.
---
- The world size is no longer hardcoded. All functions dependent on world size now take a `WorldSizeLg`, which holds the base 2 logarithm of each actual world dimension and is guaranteed to maintain certain properties (outlined in `common/src/terrain/map.rs`). Additionally, many utility functions that utilize the world size were moved into `common` as well (mostly `common/src/terrain/mod.rs`). Finally, the world map format was updated in order to store its size explicitly, with a migration path from the old format that should work whenever the old formatted map was a square (practically always). See `world/src/sim/mod.rs` for these changes.
- The map generation code was made generic to allow using it outside of the `world` crate. The parts of the map generating code that do not need to query the world were moved over to `common/src/terrain/map.rs`, allowing them to be used from the client without creating a dependency on `world`. The rest of it was turned into helper functions in `world/src/sim/map.rs`, which can be passed as closures to the generic map generation code to complete its construction. This also means that colors are now passed in separately to the map generation function. See <https://veloren.net/devblog-78/> for more details.
- On world creation, we now compute *horizon maps*. See the function in `world/src/sim/util.rs`.
Given a height map and a plane intersecting that height map, our horizon maps allow us to encode enough information to reconstruct shadows for each point on the height map using only the *horizon angle* (the angle at which the sun starts to become visible). As Veloren's sun only covers one plane, this is sufficient for encoding sun shadows for LOD terrain, by encoding two angles per chunk (one for each 90 degrees the sun covers). We can also use this for the moon, if we want, since the moon follows the same path. Additionally, we store the *height* of the furthest occluder, to try to make the shadows volumetric; so this means 4 bytes in total for each chunk.
Support for horizon maps has been merged into the map functionality in common as well.
- The way we pass the world from the server to the client has been updated. Rather than passing the prerendered map, we instead pass three maps with values for each chunk; one with the color information, a second with altitude information, and a third with horizon map information. We then reconstruct the map on the client, together with some additional information we send from the server (like the sea level and maximum height). See `common/src/msg/server.rs` for a detailed description of the format of `WorldMapMsg`, and `server/src/libr.rs` and `client/src/lib.rs` for details of the map construction and parsing.
- Artifacts related to image rotation were fixed. See the commit message for commit SHA `cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e` for a detailed explanation. This involved changes to shaders, the addition of a new type of graphic (also reflected in the graphic cache) that allows specifying a border color (which automatically makes the associated texture immutable), and some related fixes. I reproduce the first two paragraphs of the MR description as well:
```
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
```
- Multiflow rivers were enabled.
This does not really need to be part of this MR, and would be easy to revert, but since it seemed to provide a nice improvement it's currently packaged with it.
We already computed multiple outflows from each chunk for erosion purposes long before this MR.
However, we never modified river rendering to be able to handle this case (just a single downhill river flow is complex enough!) so this was not exposed when deciding which chunks were rivers.
Now that
- In the process of making changes related to the world map, various incidental fixes and optimizations were required. Some examples of fixes include making sure terrain is never lowered to below sea level (to make the shadow maps report correct values), fixing map altitudes and colors to understand things like cliffs and "block level" coloring (that doesn'te xist on the column level), and fixing a crashbug when rendering images for the UI where source pixels are strongly rectangular. Some examples of related performance fixes include avoiding allocating a fresh vector for all the maps (i.e. copying it over to change the format from `[u32; n]` to `DynamicImage` and then copying again to convert to `RgbaImage`), and instead using the `gfx::memory::slice` function to accomplish the same thing. These sorts of changes are spread all arond the code.
This includes the additon of a new scene, `voxygen/src/scene/lod.rs`, a new pipeline `voxygen/src/render/pipeline/lod_terrain.rs`, and new shaders `assets/vxygen/shaders/lod-terrain-vert.glsl` and `assets/vxygen/shaders/lod-terrain-frag.glsl`, as well as associated changes to the renderer in `voxygen/src/render/renderer.rs`.
The main idea behind our initial approach to LOD was to take the world data we now get from the server (altitude, color, and horizon mapping).
- Some previously computed values were turned into shader uniforms for better prediction on weak processors. (@zesterer)
- Calls to power or trig functions were removed or replaced with multiplications, where possible.
- After some deliberation
- To properly handle sprite "waving" for nearby sprites,
We explicitly designed the greedy meshing system with figures and sprites in mind.
In both cases, we want to be able to *efficiently* pack many different models into the same texture, especially in cases where we know
we will either not be removing any of the grouped-together from the models from the texture, or will remove all of them at once (so
they can be packed into some specific subtexture).
For sprites, since we know every model in advance and never intend to deallocate them, we currently pack them all as efficiently as
possible into one giant tetxure atlas. However, in the future we might opt to pack them slightly less efficiently in exchange for
shrinking the sprite vertex size.
For figures, we pack all the textures for each *model* into the same atlas.
is a global texture atlas used for every sprite, and for figures which is why we have the ability to mesh multiple
models to the same texture area (using the simple texture atlas allocator) without requiring intermediate vector allocations.
This is accomplished by delaying the time when we actually write the color and light data to the texture until *after* all the
model vertices have been meshed; then, we can just allocate the whole color/light array at once, making the atlas we use an
exact fit. In computer science-y terms, we accomplish this delay by, after we perform the initial greedy meshing (without
texture information), not continuing to create the texture data, but instead constructing a *continuation*--that is, a function
that, when called, will execute the rest of the computation. We push this continuation (which in Rust terms is a `FnOnce` closure
that takes the `ColLightsInfo` that it is supposed to write to as context) onto a
onto a vector
resizing. To allow for suspended writes to texture data, Rust pointed out to me that the continuation that would eventually write the color and light data to the texture atlas (the one that is shared by all models sharing the same greedy mesher) would have to *own* whatever data it mshed. Because we often generate the model data to mesh as a temporary in `voxygen/src/load.rs`, the
- Matrix multiplications in the shader were reduced for figure data (@zesterer).
- Vertex "waves" for fluid data were removed.
- Terrain "bending" near edges was removed.
- Scaling was fixed to make sure empty space was not introduced in a space previously occupied by a block. It was also changed to take ownership of its voxel data,
rather than sharing it, to let it be used with meshing.
- Rust's nightly version was bumped in order to use the `array_map` function, which lets us reuse more code between the simple map and `FigureModelCache`.
- PositionedGlyph::standalone.
---
I tried to cite sources in many cases[^realtime],[^lloyd],[^lispsm],[^pbrt],[^greedy],[^tjunctions]
where I needed features from elsewhere but I am particularly grateful for the following resources,
esepcially where they have accompanying source code. I linked all of them that are accessible to the public (those that are not were
obtained through legal means).
[^realtime]: Eisemann, Elmar, Michael Schwarz, Ulf Assarsson, Michael Wimmer. Real-Time Shadows. A K Peters/CRC Press (T&F), 20160419.
[^lloyd]: Lloyd,B. 2007. [Logarithmic perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). PhD thesis, University of North Carolina.
[^lispsm]: Wimmer, M., Scherzer, D., and Purgathofer, W. 2004. [Light space perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). In Proceedings of Eurographics Symposium on Rendering 2004, pp. 143– 152.
[^pbrt]: Pharr, Matt, et al. [http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf](Physically Based Rendering: From Theory to Implementation). Third edition, Morgan Kaufmann Publishers/Elsevier, 2017.
[^greedy]: mikolalysenko. “Meshing in a Minecraft Game.” 0 FPS, 30 June 2012, <https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/>.
[^tjunctions]: blackflux. “Meshing in Voxel Engines – Part 1.” Blackflux.Com, 23 Feb. 2014, <https://blackflux.wordpress.com/2014/02/23/meshing-in-voxel-engines-part-1/>.
I am also especially grateful to Khronos, Wikiepdia, and stackoverflow for answering many of my specific questions while writing the MR.
---
Squashed commit of the following:
commit 300505e7305a2fdac722a808ee8538323f215f39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 18:46:25 2020 +0200
Fixing cargo doc and typo in CHANGELOG.
commit ec0aeb18e8499d7d84ef818331b4b65c3d76cea6
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 15:38:50 2020 +0200
Hopefully final commit for the LOD branch.
commit 5e8ea0b1eaac02903a02feb2eb038d195de4872f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 10:14:26 2020 +0200
Falling back to power as stopgap.
commit e44a1cbf46504ee9931a01bdc9033e145500d557
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 09:25:41 2020 +0200
Address imbris feedback.
Temporarily disables shiny water, lowers max VD.
These restrictions will be lifted soon after merging.
commit 561e25778a108ac3712f5ec2ce3a51234c4430d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 08:31:13 2020 +0200
Tweaking shaders a bit.
commit 7d19259078ce0dd7b3742ad7d0cb3fab3ece3fdc
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:59:43 2020 +0200
Fix view example as well.
commit 051cd4934e0fad2c0b15db4380a4189fa318679f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:29:06 2020 +0200
Fix meshing benchmark.
commit c95e07db3b4dcca285678985e65e31b927cb1c61
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 05:46:22 2020 +0200
Address MR feedback, fix scene clouds.
commit 1bfb816cabdb3ffc1e507a009c2d98696b4b573a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:39:36 2020 +0200
Incorporating Pfau's figure color changes.
New eyes and new humanoid colors.
commit 3f9b89a3ac7b3356b1dba0d1a8f6541357f81469
Merge: e2f5162e4 62c53963a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:29:41 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit e2f5162e4f96f4124aa43488f7245d341b3dcfd4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:28:38 2020 +0200
World colors are all hotloadable.
They live in assets/world/style/colors.ron.
Only a small handful of hardcoed colors remain in World; they are either
part of the map, or difficult to disentangle from the rest of the
computation. Comments are made where appropriate.
commit 62c53963abe1975009d34a8f9515a355bef24f31
Author: Marcel Märtens <marcel.cochem@googlemail.com>
Date: Wed Aug 19 15:59:00 2020 +0200
replace pretty_env_logger with tracing
commit 5b1625f99d9586fe80e2232f583ec5af9f953099
Merge: d71003acd 4942b5b39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:15:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit d71003acdabeff970b3928e97c26af6847b5b78e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:14:34 2020 +0200
Hotloading colors, part 1: colors in common.
Currently, this just entails humanoid colors. There are only three
colors not handled; the light emitter colors in
common/src/comp/inventory/item/tool.rs. These don't seem important
enough to me to warrant making hotloadable, at least not right now, but
if it's needed later we can always add them to the file.
commit 63b5e0e553eb2ea49276f192a6fc7dd65254270d
Merge: c32b337a4 6d2c4b9c1
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 13:05:37 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c32b337a46e10d9de473d178a94a3ccd61c39bb3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:52:04 2020 +0200
Fixing LOD grid, for real.
commit a166ae0360395387e09fb35a1f84210c2ce5ec24
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:28:05 2020 +0200
Addressing imbris's initial feedback.
Fixes two minor bugs: explosion particles were no longer spawning
randomly, and LOD grids were not perfectly even.
commit 4cbad004f44060994252dd3d38647a14a589712f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:27:58 2020 +0200
Bumping nightly per request.
commit 548680276aac77c25d43d16b5622f847d474dbef
Merge: acc098604 8f8b20c91
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:26:06 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit acc0986040589a3492f88a740bc3c3fc693b26d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:28:32 2020 +0200
Lower resolution due to lying drivers.
commit d3b878de2a52c358d2944a6bbd0555dad7fbdb10
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:15:38 2020 +0200
Fix issues msh encountered with Intel 4600.
commit 10245e0c1b0cb6fae10d86409435364edc6102ef
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 21:15:02 2020 +0200
Merge more models into one mesh than we did previously.
commit 3155c31e663c52ae5c3a53d5fb5665892a1a498a
Merge: 7204cc8a7 3c199280e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:35:22 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7204cc8a7a4f74a30306bd205d9834fee4bb944f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:34:43 2020 +0200
Fix not yet done NPC animations.
This forces them all to be the idle animation if not specified.
This fixes issues where you'd have giant NPCs in water.
commit bc83360f2a08918f19d417b5f772e1ff554dba08
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 19:36:37 2020 +0200
Try to fix some bugs:
- Z fighting with LOD terrain and water.
- Audio SFX not playing.
commit 1fd104aa603bf3781b6526a5cada46aeca3049dd
Merge: 862df3c99 7c2c392a3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 12:02:31 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 862df3c9976c4da9bd7cfd784f1a85973127968a
Merge: 0a4218ed9 75c1d4401
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 05:52:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0a4218ed9d541a2b34c133351bea38a99ddf4ea7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 22:27:14 2020 +0200
Fix particle depth.
commit f51dfdeb442d0dd5243dd2f344fa4be295bd0875
Merge: c6251a956 5e6dc0471
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:19:04 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit c6251a956ad376400dca5c23420cf8d213dc8fdf
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:15:46 2020 +0200
Cache figures more intelligently.
Cache figures for longer, and don't cache character states for the
player except where they actually affect the rendered model.
commit 0ed801d5404982c6fb63b1eaa4567d908b294c9d
Merge: c11b9bdf0 eea64f78f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 16:32:24 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c11b9bdf0a53bf9884d2f5a48fec9b01d582df1a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 11:47:15 2020 +0200
Remove unneeded Clippy annotation.
commit 16aa9ef40af56d69289d00aafb3deadfb8bd4f35
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 8 00:53:02 2020 +0200
Fix hotloading and Clippy.
commit 3dc973e0be5b758da1e9805eb764ad401374cd0c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 23:50:27 2020 +0200
Major speedups with SIMD.
commit fba64a7d93d5a96077ce87287bbce6ab9b7fbcae
Merge: 76429d00e d1e10b178
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:19 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 76429d00eea00d212fbd672a84ee91e75b19b938
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:10 2020 +0200
Add clippy.toml.
commit c79f512f84dbb83cb82b7954db68ff241dfd8e41
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 11:55:20 2020 +0200
Fix all clippy issues, clean up Rust code.
commit 6f90e010b3fbefb53b0d632e819931350015b6b8
Merge: 77a8c7c26 5929cfa5c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:30 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 77a8c7c267d3f44a1a62bd6b2274359973c5e4d4
Merge: b44e44232 44febaabd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:10 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 5929cfa5c713aa392110bbb62407f76caf53c3df
Author: jshipsey <jshipsey18@gmail.com>
Date: Thu Aug 6 20:47:27 2020 -0400
fixed in-hand arrow bug
commit b44e442325d828f1cd564d66908f89d09e80474b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 6 13:40:35 2020 +0200
Miscellaneous performance improvements.
commit be37acf287c1360d8085862526ac3365ffd1d768
Merge: 125d7fc6c c11876547
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 05:49:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 125d7fc6c4dcd8c8c5f27b8268a4d64f409f3644
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 04:55:31 2020 +0200
Abstract over simd vs. repr_c vectors.
Also some minor improvements to Event size.
commit d4d4956e9252e1241ce110b2aa85076c6b1e2a23
Merge: 5f3b7294a aced5f979
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:56:54 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 5f3b7294af1f8533edc2620b58863c248e2b07af
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:43:52 2020 +0200
Fix formatting issues I missed before.
commit a428a3ebba70dcab63dd0f8cd983120c90617271
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:41:51 2020 +0200
Fix clippy warnings, part 1.
There aer still a bunch of type too complex and
function takes too many arguments warnings that I'll fix later
(or ignore, since in the one case I did fix a function takes too
many arguments warning I think it made the code *less* readable).
commit ba54307540ed8a937ac08209730284fc653af85b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 30 13:22:42 2020 +0200
Fix light animations so they are removed when the light turns off.
commit 7e0f4bcbf0f4717145d8beac40d52e3acebbe2aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 21:10:20 2020 +0200
Fix crash in edge case for pixel art.
commit 56da06f7a351e2b949e9b014a90b974d511a0924
Merge: cf74d55f2 9f53a4a19
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:56:52 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:29:52 2020 +0200
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
The first concern was addressed by fixing the dimensions of the map
images drawn from the UI (so that we always use a square source
rectangle, rather than a rectangular one according to the dimensions of
the map). We also fixed the way rotation was done in the fragment
shader for north-facing sources to make it properly handle aspect ratio
(this was already done for north-facing targets). Together, these fix
rendering issues peculiar to rectangular maps.
The second and third concerns were jointly addressed by adding an
optional border color to every 2D image drawn by the UI. This turns
out not to waste extra space even though we hold a full f32 color
(to avoid an extra dependency on gfx's PackedColor), since voxel
images already take up more space than Optiion<[f32; 4]> requires.
This is then implemented automatically using the "border color"
wrapping method in the attached sampler.
Since this is implemented in graphics hardware, it only works (at
least naively) if the actual image bounds match the texture bounds.
Therefore, we altered the way the graphics cache stores images
with a border color to guarantee that they are always in their own
texture, whose size exactly matches their extent. Since the easiest
currently exposed way to set a border color is to do so for an
immutable texture, we went a bit further and added a new "immutable"
texture storage type used for these cases; currently, it is always
and automatically used only when there is a specified border color,
but in theory there's no reason we couldn't provide immutable-only
images that use the default wrapping mdoe (though clamp to border
is admittedly not a great default).
To fix the maps case specifically, we set the border color to a
translucent version of the ocean border color. This may need
tweaking going forward, which shouldn't be hard.
As part of this process, we had to modify graphics replacement to
make sure immutable images are *removed* when invalidated, rather
than just having a validity flag unset (this is normally done by
the UI to try to reuse allocations in place if images are updated
in benign ways, since the texture atlases used for Ui do not
support deallocation; currently this is only used for item images,
so there should be no overlap with immutable image replacement,
so this was purely precautionary).
Since we were already touching the relevant code, we also updated
the image dependency to a newer version that provides more ways
to avoid allocations, and made a few other changes that should
hopefully eliminate redundant most of the intermediate buffer
allocations we were performing for what should be zero-cost
conversions. This may slightly improve performance in some
cases.
commit ad18ce939940a8c697270f6e9b94db9942fd8295
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 13:21:09 2020 +0200
Fix continent scale hack.
commit 36b1cb074f5b195aebd7dbbc3da7f0246a1a18ec
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 12:11:40 2020 +0200
Enable loading different sized maps without a recompile.
We may want to tweak the effects of the continent_scale_hack.
commit 13b6d4d534cc4814b7cb3294ca41bbfea0a6b186
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 10:55:48 2020 +0200
Removing WORLD_SIZE, part 1.
Erased almost every instance of WORLD_SIZE and replaced it with a local
power of two, map_size_lg (which respects certain invariants; see
common/src/terrain/map.rs for more details about MapSizeLg). This also
means we can avoid a dependency on the world crate from client, as
desired.
Now that the rest of the code is not expecting a fixed WORLD_SIZE, the
next step is to arrange for maps to store their world size, and to use
that world size as a basis prior to loading the map (as well, probably,
as prior to configuring some of the noise functions).
commit 30b1d2c6428230a9eaa0d749cdcbbd6f1cbccd78
Merge: 7d56ba31b 1377b369f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:58 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 7d56ba31b445441461b28a07fc495d7d4f047c17
Merge: 2101113b4 598f14b25
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 1377b369f6db2258e910d467a5740f31789e3ded
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sun Jul 19 23:25:38 2020 +0200
more saturated pumpkins
commit ae8d50527f93bb0616c2ad46ce4dacb63bc37c6d
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sat Jul 18 20:29:56 2020 +0200
acacia models
commit 2101113b467e691de787392d7f20f1745f5637bd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 18 18:55:25 2020 +0200
Higher detail LOD.
commit add2cfae04b4385fa5590e11e2bd5229d9dee0aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 16 01:57:39 2020 +0200
Revert some irrelevant stuff.
commit 2e2ab3dc1eaa59a4aef7f8d34a53d8aae4c8553a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 15 13:30:49 2020 +0200
Fixing various things about shadows.
* Correcting optimal LISPSM parameter.
* Figure shadows are cast when they're not visible.
* Chunk shadows stay cast until you look away.
* Seamless cubemaps for point lights.
* Etc.
commit 6c31e6b56217274285b597af297036691ea5d897
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 19:50:26 2020 +0200
Fix shadow creation.
commit 6332cbe006115ae205597529cd8bbccd146c2cca
Merge: be438657c 930e0028b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:47:00 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit be438657c33d7b5bfb0a9582c3ed3fd366637323
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:28:08 2020 +0200
Tweaks to shadows.
Added shadow map resolution configuration, added seamless cubemaps,
documented all existing rendering options, and fixed a few Clippy
errors.
commit 23b4058906013c7d2a40c286e20e32c5fbd897ed
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 10:11:19 2020 +0200
Fix moon, use nonlinear noise for terrain.
Note that the latter has a bit of performance cost.
commit 7fbe5cbfbb9dc29607957b8e62f432a4deed193d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:23:02 2020 +0200
Address lies about max texture size.
commit bcfc62b5e13a1cdd83f57535fde4694720bebfd9
Merge: 75e3626a7 18a08e8fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:22:08 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 75e3626a785919f43fdcf2127c2b10e3e4df2f9f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:21:52 2020 +0200
OpenGL 3.3 minimum.
commit 18a08e8fe2739f02af99a5d2cb4e7c38c49e858b
Author: Monty Marz <m.marzouq@gmx.de>
Date: Tue Jul 7 23:57:52 2020 +0200
settings localization
commit 90c5d1ca3620092bc3ae10b2211489eb1cf6f5e8
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 21:11:48 2020 +0200
Lower near distance.
commit 0e66f02b25aaddaa2dfddbbc89cd67de54a9a7b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 20:09:01 2020 +0200
All sprites sway in the wind now.
commit db1401a6910bf42dcf502462c90038752ff5fbdb
Merge: 69e508d8c e8b4b29d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 19:34:17 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 69e508d8c94d8973033817ca86f357e466fc7c4d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 18:41:37 2020 +0200
Make it easy to switch to SIMD for math.
commit ffe0f5928c7a7e87d00cb5426b3b1d831d7e02fd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 21:21:12 2020 +0200
Fix some issues with underwater rendering.
commit bfda6da42f38fd02c31ee92c81ab785a3e50c2a0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 19:17:59 2020 +0200
Fix some minor display issues.
commit 0ed752e087968cf901301884aaeae698e32ef8a5
Merge: ccc6a06a8 518edcb85
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:14:21 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit ccc6a06a8d4504d6b9f7af7905a414d2ee06ab76
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:04:34 2020 +0200
Some minor changes.
commit 4e020246702889269efe1a191788992164c508d6
Merge: 50a64d927 e05c9267a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 16:17:40 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 50a64d927e6c4f4b0e4688e4cbfca694bc3f922a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 13:07:03 2020 +0200
Fix far plane.
commit 7dd06da34cae8f9ea3b6c889fe965181f3fd3949
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:25:35 2020 +0200
Add shadows.glsl.
commit 618a18c998778bf871b905a74657440fcc384c80
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:10:22 2020 +0200
Adding shadows, greedy meshing, and more.
commit eaea83fe6a5cb1cb0ba8beef888183c718258496
Merge: 267018495 2f89b863e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 22:47:07 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 2670184954a13e4a9e7a4e35ba79aac0c5fac2f7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 21:20:01 2020 +0200
Make civsim and sites deterministic.
For anything in worldgen where you use a HashMap, *please* think
carefully about which hasher you are going to use! This is
especially true if (for some reason) you are depending on hashmap
iteration order remaining stable for some aspect of worldgen.
commit f8376fd5dc72b4a9c2f51a6b4570d59c8b8e9343
Merge: 654f7e049 cdee191dd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 17:53:57 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 654f7e049258d9da27c09608bbe6a46ffa8787e5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed May 20 21:22:30 2020 +0200
Correct backface culling.
commit 560501df05ca725409b0f2e4eb31bdfdc15fd0c7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue May 19 17:22:06 2020 +0200
Greedy messhing for shadows.
commit a4d87e1875ca543436e6bbbeb20348facc5a52d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun May 17 05:59:00 2020 +0200
Shadow maps work for lantern.
commit 243d0837b8a3b08172c9a3c348d964d7ddc2a0a8
Merge: 04382dc28 71dd520cd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:53:13 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 04382dc28632b6c66e8821f6870c0daaa1c1901a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:22:17 2020 +0200
WIP: better graphics config, better LOD, shadow maps.
commit 22ddbad3eb32bfa70f0932176022208fe67ded81
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 18:54:09 2020 +0200
Minor shader fixes.
commit 746a10e8d01ac235f994b0cde78fa48998602a1f
Merge: 0f4a0e763 40ab94673
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 04:02:09 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0f4a0e763db3afbdc4fb0558611f38326ca87151
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 23:03:24 2020 +0200
Switch back to pop-in terrain.
commit dd74fa7e4a53667b38811d7aec58d7f6a68889bb
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 22:58:55 2020 +0200
LOD shading closer to voxel shading.
commit ef67bd58ba0bdaf622b078892d768263b6cba268
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 28 20:49:03 2020 +0200
Experimental underwater lighting.
commit 2c5ad9d07605e80d5fd5679dd3a5d70c605b86a9
Merge: 748279835 303967a6f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 22:35:24 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7482798354eda18c8207950080fc24d443a369de
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 21:59:55 2020 +0200
Replace discard in figure-frag.
commit d83b4ae69be4912f69bf7835f509c68a1c7770a4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:45:57 2020 +0200
Fix sprite lighting, HDR from focus_pos.
commit 0594238004f116274905fa0ed7c2b6c417ed1d29
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:14:10 2020 +0200
Proper HDR from point lights.
commit 48c93d2b41ce5743103d18e76cc228f5ac766492
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 14:01:43 2020 +0200
Brighter ambiance, darker LOD shadows.
commit e0452e895ccfa8a43f368cae3b8b8aedc24dad93
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 13:13:23 2020 +0200
More proper HDR.
commit 4c6da3ed16cfeebb455e40da5f557b4af9a499d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 00:13:10 2020 +0200
Trying LOD noise.
commit 682a3d74c85df5503ffe1fc1cc891bce789df1ad
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 23:11:08 2020 +0200
Fix LOD heights in towns.
commit cc39e5734e8b18f9077bf42e66337c1319dd6b6e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 21:01:23 2020 +0200
More LOD fixes.
commit 8116b21c2e51c836e77894e309ac273caf2917b3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:54:43 2020 +0200
I like this coloring.
commit bc2560ea90b36f4b46190005344232d993043ac3
Merge: 14effdd5d e690efe71
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:48:33 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 14effdd5db8747fcf3eb34f03b46b7792e92d1c5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:24:35 2020 +0200
Re-saturate.
commit 48a643955d4435b78179acba0beb4a979905cc31
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:23:57 2020 +0200
Various fixes.
commit f7b497a0c25f4ad4682c71dd1ed6f608052feb9b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 03:22:49 2020 +0200
Render figures again.
commit 44e4aad48deba8266b9f8bdfd3db096b381f5327
Merge: e6f0a5a98 9ec319a18
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 02:01:04 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit e6f0a5a981a82533ba188fff0a54ce98577bb152
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 24 16:12:20 2020 +0200
Add atmospheric scattering.
commit f2953087f691a8edbc001cb98ebf5059fc6f8ac0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 23 00:01:20 2020 +0200
Fix shadowing for specular reflections.
commit ddd4a67a9799b8d08c7dc0c2bec90621c2bed0e3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Apr 22 22:56:12 2020 +0200
HDR fixes.
commit 1015e60deef3c447381996277df7496707a63bd0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 21 18:25:19 2020 +0200
More lighting changes.
commit 80c264abd111fb237e57843efcb5c071d4f84613
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 13 00:29:59 2020 +0200
Lighting experiments.
commit 8414987e589dd5102bad89762a3adaccc0bfe957
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 9 02:38:40 2020 +0200
WIP -- lighting changes and soft shadows.
commit 9cd2b3fb0d6b49776c6dfe463e4169637250b11a
Merge: c7ea687eb 8b149ad11
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:29 2020 +0200
Merge branch 'sharp/new-lighting' into sharp/small-fixes
commit c7ea687ebbc5aace1b455f134a5bf49ce2c7434a
Merge: 476441531 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:02 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 8b149ad11ad4bb75018fcf9519baec27d1c95951
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:32:39 2020 +0200
Trying out a new lighting model.
commit b0ac9f36f755dd06f7c17c46150568064790864f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 07:56:11 2020 +0200
Use bicubic interpolation for terrain.
commit f6fc9307a121514b614bc50ef8eb055953e7da8a
Merge: 33140a295 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 05:01:41 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 4764415312aae6e9ac2d00e86e84577cb958f1ab
Merge: ed2d0111d 13388ee6a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 04:54:48 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 13388ee6a42943f3f79a9cb488346cef18e272fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 20:30:08 2020 +0200
Various fixes (to coloring and to soft shadows).
commit fbd084a94a067082a87cd6d28b82054709bc9265
Merge: 5a089863b 4fdf6896a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 18:50:38 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/map-colors
commit ed2d0111d994262ae836d84d1fe5a45e4de72a0b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 06:49:27 2020 +0200
Combining colors and LOD.
commit 88342640c6b835114d01c797b89fdede3b0a2108
Merge: 33140a295 5a089863b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:49:20 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 33140a2951b8212725f42c758b277aaec4d888f7
Merge: 4c65a5aed f34d4b379
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:36:21 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 5a089863beb01d4794bbe3580ada47b278715ea2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 03:17:49 2020 +0200
Making maps brighter.
This is probably not the right way to do it, but oh well!
commit 32b2c99109dd486aa922886081068f9c550c83f2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 02:46:36 2020 +0200
Horizon mapping and "layered" map generation.
Horizon mapping is a method of shadow mapping specific to height maps.
It can handle any angle between 0 and 90 degrees from the ground, as
long as know the horizontal direction in advance, by remembering only a
single angle (the "horizon angle" of the shadow map). More is explained
in common/src/msg/server.rs. We also remember the approximate height of
the largest occluder, to try to be able to generate soft shadows and
create a vertical position where the shadows can't go higher.
Additionally, map generation has been reworked. Instead of computing
everything from explicit samples, we pass in sampling functions that
return exactly what the map generator needs. This allows us to cleanly
separate the way we sample things like altitudes and colors from the map
generation process. We exploit this to generate maps *partially* on the
server (with colors and rivers, but not shading). We can then send the
partially completed map to the client, which can combine it with shadow
information to generate the final map. This is useful for two reasons:
first, it makes sure the client can apply shadow information by itself,
and second, it lets us pass the unshaded map for use with level of
detail functionality.
For similar reasons, river generation is split
out into its own layer, but for now we opt to still generate rivers on
the server (since the river wire format is more complicated to compress
and may require some extra work to make sure we have enough precision to
draw rivers well enough for LoD).
Finally, the mostly ad-hoc lighting we were performing has been (mostly)
replaced with explicit Phong reflection shading (including specular
highlights). Regularizing this seems useful and helps clarify the
"meaning" of the various light intensities, and helps us keep a more
physically plausible basis. However, its interaction with soft shadows
is still imperfect, and it's not yet clear to me what we need to do to
turn this into something useful for LoD.
commit f8926a5737ddc51f3d585c651a64c43677aae0f4
Merge: a1aee931e 875ae6ced
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Mar 13 13:32:42 2020 +0100
Merge remote-tracking branch 'origin/master' into sharp/map-colors
commit 4c65a5aed353b119aea65a2aaeb94549b67beb42
Author: Treeco <5021038-Treeco@users.noreply.gitlab.com>
Date: Mon Feb 24 16:48:05 2020 +0000
Made LOD setting slider exponential
commit 2fa7b2d20d7233dc8bfd64f9f7f54617575248f1
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 17:49:53 2020 +0000
Added mist to LoD
commit aab059a450b5f635777129ff82cc15b662965c3c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 15:14:06 2020 +0000
Added LoD slider
commit 779c36b538121c5ade3633ae5cb67bb14c8c3877
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:54:55 2020 +0000
Reduced cost of vertex pushing
commit 9fea150473906b166365b738ebcea07c697daf3d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:38:53 2020 +0000
Fixed maths, improved LoD resolution
commit 5481df38fea5bf183ff376a3337179cfaa5233dc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 11:22:50 2020 +0000
Dynamically relocate LoD vertices to enhance details
commit a3e36a50ababd615da7db1b26158c7906a5def01
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 18:13:51 2020 +0000
Simpler terrain spiral rendering
commit 255f450ae9ac8763db4bede075fb409161ed57cc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:53:17 2020 +0000
Better LoD precision
commit 3d027aebe812a5b8658a4eb8123dc9f61b3776d2
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:04:03 2020 +0000
Better falloff
commit be775c9484b457b2c0b1a494aec03392d0c70e76
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 15:30:45 2020 +0000
Applied good ideas from experimental branch
commit 58587b68545a23c5c04ab4574a4b94b3bc982246
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 16:15:13 2020 +0000
Minor fixes to LoD merging
commit 7b42aebd709c14df2db766aad61d9280ad24d84d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 15:04:44 2020 +0000
Capped LoD dragging
commit 8aafc559f87124e1ea5ca6e3ddc2aa0c242d793c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:54:37 2020 +0000
Better blending between LoD and terrain border
commit edd3455d5161792d87ddc8eadc0ecbad5532b284
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:40:19 2020 +0000
Fixed LoD z depth, added sea level offset
commit b9b06744620114dd5556e73f64fa93c145503a7c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:27:43 2020 +0000
Better LoD smoothing
commit a1aee931e790431560cd2d953ad61d9497072afd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Feb 21 14:52:17 2020 +0100
Adding shadows.
commit 2400786c13dd891c131ed86d48d05df516a8a778
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 13:48:40 2020 +0000
Use world map as LoD source
commit dbf650f504a4c25fbbc2096ac3616c736bf52d23
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Jan 20 00:48:14 2020 +0000
Better clouds at distance
commit 5e6f81b86cdb9730b9b056877b19257075fd5fa8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Jan 19 23:59:02 2020 +0000
sync
commit 745e7540ddb000cc645f612767b337c2ddc3f7c0
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 12:40:48 2019 +0000
Improved cloud falloff mist, faster noise sampling
commit f6a200d0cb866196ba57697466755f9e0c7ea5d8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 10:09:00 2019 +0000
Improved long-range depth precision, removed unnecessary LoD polygons
commit 63d1b2bb2292898d59fb4f4e502201103dfeb86f
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 20:57:46 2019 +0000
Working LoD shader
commit f13d98ee3e58f881e8b978861a67663b59ed91ec
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 11:03:40 2019 +0000
LoD first attempt (stack overflow issue)
2020-08-20 18:34:59 +00:00
|
|
|
|
map_size_lg,
|
2020-01-22 14:31:10 +00:00
|
|
|
|
1.0f32,
|
2019-12-11 09:14:50 +00:00
|
|
|
|
n_post_load_steps,
|
|
|
|
|
&river_seed,
|
|
|
|
|
&rock_strength_nz,
|
2020-01-22 14:31:10 +00:00
|
|
|
|
|posi| alt[posi] as f32,
|
2019-12-11 09:14:50 +00:00
|
|
|
|
|posi| basement[posi] as f32,
|
|
|
|
|
is_ocean_fn,
|
2020-01-22 14:31:10 +00:00
|
|
|
|
|posi| uplift_fn(posi) * (1.0 / max_erosion_per_delta_t),
|
2020-06-11 18:44:03 +00:00
|
|
|
|
n_func,
|
|
|
|
|
theta_func,
|
|
|
|
|
kf_func,
|
|
|
|
|
kd_func,
|
|
|
|
|
g_func,
|
|
|
|
|
epsilon_0_func,
|
|
|
|
|
alpha_func,
|
|
|
|
|
height_scale,
|
2020-01-18 18:41:37 +00:00
|
|
|
|
k_d_scale(n_approx),
|
2020-06-11 18:44:03 +00:00
|
|
|
|
k_da_scale,
|
2019-12-11 09:14:50 +00:00
|
|
|
|
)
|
|
|
|
|
};
|
2019-11-19 18:34:52 +00:00
|
|
|
|
|
(See sharp/lod-history) LOD, shadows, greedy meshing, new lighting, perf
---
Pretty much a Veloren fork at this point. Here's a high level overview of the changes (will be added to CHANGELOG just before merge).
At a high level this MR incorporates roughly two groups of changes.
The first group consists of new game features: more flexible map sizes, level of detail terrain, shadow maps, and a new lighting
engine. This is "feature work" that (mostly) only adds new things to Veloren, and mostly shouldn't affect old stuff.
The second big group of changes are those addressing the fallout from all the new features. These include performance fixes of
various sorts: the addition of multiple graphics options and optimization of the cheap ones to avoid work, switching all voxel
models to use some variant of greedy meshing, switching over much of our CPU-side vector math to exploit SIMD instructions
(coinciding with a fork of `vek`), and a rewrite of how the UI handles text rendering (coinciding with updates to our fork
of `conrod`). Making Veloren's hardcoded colors appear correct under the new lighting engine also required considerably
changes (TODO: Fill in this section when it's complete).
The second category of changes often heavily touches code owned by other people, including frequently modified code "owned" by a
handful of people, so I recommend that this code be reviewed particularly carefully.
---
At a high level (each will be described in more detail below):
- The world map has been refactored.
- The world size is no longer hardcoded (@zesterer).
- The map generation code was made generic to allow using it outside of the `world` crate (@zesterer).
- On world creation, we now compute *horizon maps* (@zesterer).
- The way we pass the world from the server to the client has been updated (@xMAC94x).
- Artifacts related to image rotation were fixed (@imbris).
- Multiflow rivers were enabled (@zesterer).
- In the process of making changes related to the world map, various incidental fixes and optimizations were required.
- The new *level of detail* feature was added (@zesterer wrote part of this and has checked out the rest).
- A new LOD terrain rendering step was added to the pipeline.
- The LOD terrain quality was made configurable via a graphics setting.
- Horizon maps were used to cast shadows from LOD chunks on both LOD and non-LOD terrain.
- A "voxelization" effect was incorporated into rendered LOD terrain to make it blend better into the world.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Veloren's lighting has been completely overhauled (@zesterer has already checked most of this out).
- A semi-accurate index of refraction was assigned to our materials.
- A new, more realistic, physically based approach to lighting was used using the *Ashikhmin Shirley* BRDF.
- We emulate *atmospheric scattering* using equations designed for measuring solar panel light exposure.
- We attempt to compute *realistic light attenuation* in water using its real material properties.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Point and directional lights now cast realistic shadows, using *shadow mapping.* (@imbris, @zesterer, @Treeco, @YuriMomo)
- Point light shadow maps were added to the rendering pipeline, using geometry shaders and *seamless cube maps*.
- Directional light shadows were added to the rendering pipeline, using LISPSM together with disabling *depth clamping*.
- "Shadow-only" chunks and NPCs were added to prevent shadows from models behind you from disappearing.
- In the process of making changes related to shadow maps, various incidental fixes and optimizations were required.
The addition of shadow maps, LOD terrain, and the new lighting all led to significant performance degradation, on top of other
changes happening in master. Therefore, a large number of performance improvements were also needed:
- The graphics options were made much more flexible and configurable, and shaders were optimize.
- New options were provided for how to render lights and shadows (@Pfauenauge, @zesterer).
- Graphic setting storage and configuration were overhauled to make adding new features easier (@Pfauenauge, @imbris).
- Shaders were rewritten to utilize GLSL's preprocessor to avoid overhead (@zesterer, @YuriMomo).
- In the process of making changes related to providing additional rendering options, various incidental fixes and optimizations were required.
- Voxel model creation was switched to use *greedy meshing.*
- A new voxel meshing method, greedy meshing, was added (@imbris).
- Uses of the older meshing methods were migrated to use greedy meshing (@imbris, @jshipsey, @Pfauenauge).
- New restrictions were added to terrain, figure, and sprites to future proof them for further optimizations (@jshipsey, @Pfauenauge, @zesterer).
- Most positions are now relative to either chunk or player position for better precision (@imbris, @zesterer, @scottc).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- Animation and terrain math were switched to use SIMD where possible.
- Fixes were made to vek to make its SIMD feature usable for us (@zesterer, @imbris).
- The interface and types used in bone animation were changed in various ways (@jshipsey, @Snowram, @Pfauenauge).
- Redundant code generation for body animation is now partly taken care of by a macro (@jshipsey, @Snowram, @Pfauenauge).
- Animation code was modified to to use vek's SIMD representation where possible (@jshipsey, @Snowram, @Pfauenauge).
- Terrain meshing code and shadow map math were also modified to use vek's SIMD representation (@imbris).
- SIMD instruction generation was enabled (@YuriMomo, @jshipsey, @Snowram, @imbris, @Angelonfira, @xMAC94x).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- The way we cache glyphs was completely refactored, fixed, and optimized.
- Our fork of `conrod` was optimized in various ways (@imbris).
- Our fork of `conrod` now exposes whether a widget was updated during the current frame (@imbris).
- Our use of the glyph cache was rewritten for correctness (@imbris).
- A *text cache* was introduced that lets us skip remeshing glyphs that have not changed (@imbris).
- Various changes were made to reduce pressure on the glyph cache, with more planned (@imbris, @Pfauenauge).
- In the process of making changes related to the glyph cache, various incidental fixes and optimizations were required.
- Colors were changed to keep Veloren's look consistent with master.
- Some older tree models were brought back (@Pfauenauge).
- TODO(@Sharp): All hardcoded colors were extracted and made hotloadable.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Hardcoded colors were fixed to conform to Veloren's style.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Color models were fixed to conform to Veloren's style.
A detailed description of the involved changes follows.
---
- The world size is no longer hardcoded. All functions dependent on world size now take a `WorldSizeLg`, which holds the base 2 logarithm of each actual world dimension and is guaranteed to maintain certain properties (outlined in `common/src/terrain/map.rs`). Additionally, many utility functions that utilize the world size were moved into `common` as well (mostly `common/src/terrain/mod.rs`). Finally, the world map format was updated in order to store its size explicitly, with a migration path from the old format that should work whenever the old formatted map was a square (practically always). See `world/src/sim/mod.rs` for these changes.
- The map generation code was made generic to allow using it outside of the `world` crate. The parts of the map generating code that do not need to query the world were moved over to `common/src/terrain/map.rs`, allowing them to be used from the client without creating a dependency on `world`. The rest of it was turned into helper functions in `world/src/sim/map.rs`, which can be passed as closures to the generic map generation code to complete its construction. This also means that colors are now passed in separately to the map generation function. See <https://veloren.net/devblog-78/> for more details.
- On world creation, we now compute *horizon maps*. See the function in `world/src/sim/util.rs`.
Given a height map and a plane intersecting that height map, our horizon maps allow us to encode enough information to reconstruct shadows for each point on the height map using only the *horizon angle* (the angle at which the sun starts to become visible). As Veloren's sun only covers one plane, this is sufficient for encoding sun shadows for LOD terrain, by encoding two angles per chunk (one for each 90 degrees the sun covers). We can also use this for the moon, if we want, since the moon follows the same path. Additionally, we store the *height* of the furthest occluder, to try to make the shadows volumetric; so this means 4 bytes in total for each chunk.
Support for horizon maps has been merged into the map functionality in common as well.
- The way we pass the world from the server to the client has been updated. Rather than passing the prerendered map, we instead pass three maps with values for each chunk; one with the color information, a second with altitude information, and a third with horizon map information. We then reconstruct the map on the client, together with some additional information we send from the server (like the sea level and maximum height). See `common/src/msg/server.rs` for a detailed description of the format of `WorldMapMsg`, and `server/src/libr.rs` and `client/src/lib.rs` for details of the map construction and parsing.
- Artifacts related to image rotation were fixed. See the commit message for commit SHA `cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e` for a detailed explanation. This involved changes to shaders, the addition of a new type of graphic (also reflected in the graphic cache) that allows specifying a border color (which automatically makes the associated texture immutable), and some related fixes. I reproduce the first two paragraphs of the MR description as well:
```
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
```
- Multiflow rivers were enabled.
This does not really need to be part of this MR, and would be easy to revert, but since it seemed to provide a nice improvement it's currently packaged with it.
We already computed multiple outflows from each chunk for erosion purposes long before this MR.
However, we never modified river rendering to be able to handle this case (just a single downhill river flow is complex enough!) so this was not exposed when deciding which chunks were rivers.
Now that
- In the process of making changes related to the world map, various incidental fixes and optimizations were required. Some examples of fixes include making sure terrain is never lowered to below sea level (to make the shadow maps report correct values), fixing map altitudes and colors to understand things like cliffs and "block level" coloring (that doesn'te xist on the column level), and fixing a crashbug when rendering images for the UI where source pixels are strongly rectangular. Some examples of related performance fixes include avoiding allocating a fresh vector for all the maps (i.e. copying it over to change the format from `[u32; n]` to `DynamicImage` and then copying again to convert to `RgbaImage`), and instead using the `gfx::memory::slice` function to accomplish the same thing. These sorts of changes are spread all arond the code.
This includes the additon of a new scene, `voxygen/src/scene/lod.rs`, a new pipeline `voxygen/src/render/pipeline/lod_terrain.rs`, and new shaders `assets/vxygen/shaders/lod-terrain-vert.glsl` and `assets/vxygen/shaders/lod-terrain-frag.glsl`, as well as associated changes to the renderer in `voxygen/src/render/renderer.rs`.
The main idea behind our initial approach to LOD was to take the world data we now get from the server (altitude, color, and horizon mapping).
- Some previously computed values were turned into shader uniforms for better prediction on weak processors. (@zesterer)
- Calls to power or trig functions were removed or replaced with multiplications, where possible.
- After some deliberation
- To properly handle sprite "waving" for nearby sprites,
We explicitly designed the greedy meshing system with figures and sprites in mind.
In both cases, we want to be able to *efficiently* pack many different models into the same texture, especially in cases where we know
we will either not be removing any of the grouped-together from the models from the texture, or will remove all of them at once (so
they can be packed into some specific subtexture).
For sprites, since we know every model in advance and never intend to deallocate them, we currently pack them all as efficiently as
possible into one giant tetxure atlas. However, in the future we might opt to pack them slightly less efficiently in exchange for
shrinking the sprite vertex size.
For figures, we pack all the textures for each *model* into the same atlas.
is a global texture atlas used for every sprite, and for figures which is why we have the ability to mesh multiple
models to the same texture area (using the simple texture atlas allocator) without requiring intermediate vector allocations.
This is accomplished by delaying the time when we actually write the color and light data to the texture until *after* all the
model vertices have been meshed; then, we can just allocate the whole color/light array at once, making the atlas we use an
exact fit. In computer science-y terms, we accomplish this delay by, after we perform the initial greedy meshing (without
texture information), not continuing to create the texture data, but instead constructing a *continuation*--that is, a function
that, when called, will execute the rest of the computation. We push this continuation (which in Rust terms is a `FnOnce` closure
that takes the `ColLightsInfo` that it is supposed to write to as context) onto a
onto a vector
resizing. To allow for suspended writes to texture data, Rust pointed out to me that the continuation that would eventually write the color and light data to the texture atlas (the one that is shared by all models sharing the same greedy mesher) would have to *own* whatever data it mshed. Because we often generate the model data to mesh as a temporary in `voxygen/src/load.rs`, the
- Matrix multiplications in the shader were reduced for figure data (@zesterer).
- Vertex "waves" for fluid data were removed.
- Terrain "bending" near edges was removed.
- Scaling was fixed to make sure empty space was not introduced in a space previously occupied by a block. It was also changed to take ownership of its voxel data,
rather than sharing it, to let it be used with meshing.
- Rust's nightly version was bumped in order to use the `array_map` function, which lets us reuse more code between the simple map and `FigureModelCache`.
- PositionedGlyph::standalone.
---
I tried to cite sources in many cases[^realtime],[^lloyd],[^lispsm],[^pbrt],[^greedy],[^tjunctions]
where I needed features from elsewhere but I am particularly grateful for the following resources,
esepcially where they have accompanying source code. I linked all of them that are accessible to the public (those that are not were
obtained through legal means).
[^realtime]: Eisemann, Elmar, Michael Schwarz, Ulf Assarsson, Michael Wimmer. Real-Time Shadows. A K Peters/CRC Press (T&F), 20160419.
[^lloyd]: Lloyd,B. 2007. [Logarithmic perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). PhD thesis, University of North Carolina.
[^lispsm]: Wimmer, M., Scherzer, D., and Purgathofer, W. 2004. [Light space perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). In Proceedings of Eurographics Symposium on Rendering 2004, pp. 143– 152.
[^pbrt]: Pharr, Matt, et al. [http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf](Physically Based Rendering: From Theory to Implementation). Third edition, Morgan Kaufmann Publishers/Elsevier, 2017.
[^greedy]: mikolalysenko. “Meshing in a Minecraft Game.” 0 FPS, 30 June 2012, <https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/>.
[^tjunctions]: blackflux. “Meshing in Voxel Engines – Part 1.” Blackflux.Com, 23 Feb. 2014, <https://blackflux.wordpress.com/2014/02/23/meshing-in-voxel-engines-part-1/>.
I am also especially grateful to Khronos, Wikiepdia, and stackoverflow for answering many of my specific questions while writing the MR.
---
Squashed commit of the following:
commit 300505e7305a2fdac722a808ee8538323f215f39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 18:46:25 2020 +0200
Fixing cargo doc and typo in CHANGELOG.
commit ec0aeb18e8499d7d84ef818331b4b65c3d76cea6
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 15:38:50 2020 +0200
Hopefully final commit for the LOD branch.
commit 5e8ea0b1eaac02903a02feb2eb038d195de4872f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 10:14:26 2020 +0200
Falling back to power as stopgap.
commit e44a1cbf46504ee9931a01bdc9033e145500d557
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 09:25:41 2020 +0200
Address imbris feedback.
Temporarily disables shiny water, lowers max VD.
These restrictions will be lifted soon after merging.
commit 561e25778a108ac3712f5ec2ce3a51234c4430d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 08:31:13 2020 +0200
Tweaking shaders a bit.
commit 7d19259078ce0dd7b3742ad7d0cb3fab3ece3fdc
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:59:43 2020 +0200
Fix view example as well.
commit 051cd4934e0fad2c0b15db4380a4189fa318679f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:29:06 2020 +0200
Fix meshing benchmark.
commit c95e07db3b4dcca285678985e65e31b927cb1c61
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 05:46:22 2020 +0200
Address MR feedback, fix scene clouds.
commit 1bfb816cabdb3ffc1e507a009c2d98696b4b573a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:39:36 2020 +0200
Incorporating Pfau's figure color changes.
New eyes and new humanoid colors.
commit 3f9b89a3ac7b3356b1dba0d1a8f6541357f81469
Merge: e2f5162e4 62c53963a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:29:41 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit e2f5162e4f96f4124aa43488f7245d341b3dcfd4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:28:38 2020 +0200
World colors are all hotloadable.
They live in assets/world/style/colors.ron.
Only a small handful of hardcoed colors remain in World; they are either
part of the map, or difficult to disentangle from the rest of the
computation. Comments are made where appropriate.
commit 62c53963abe1975009d34a8f9515a355bef24f31
Author: Marcel Märtens <marcel.cochem@googlemail.com>
Date: Wed Aug 19 15:59:00 2020 +0200
replace pretty_env_logger with tracing
commit 5b1625f99d9586fe80e2232f583ec5af9f953099
Merge: d71003acd 4942b5b39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:15:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit d71003acdabeff970b3928e97c26af6847b5b78e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:14:34 2020 +0200
Hotloading colors, part 1: colors in common.
Currently, this just entails humanoid colors. There are only three
colors not handled; the light emitter colors in
common/src/comp/inventory/item/tool.rs. These don't seem important
enough to me to warrant making hotloadable, at least not right now, but
if it's needed later we can always add them to the file.
commit 63b5e0e553eb2ea49276f192a6fc7dd65254270d
Merge: c32b337a4 6d2c4b9c1
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 13:05:37 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c32b337a46e10d9de473d178a94a3ccd61c39bb3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:52:04 2020 +0200
Fixing LOD grid, for real.
commit a166ae0360395387e09fb35a1f84210c2ce5ec24
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:28:05 2020 +0200
Addressing imbris's initial feedback.
Fixes two minor bugs: explosion particles were no longer spawning
randomly, and LOD grids were not perfectly even.
commit 4cbad004f44060994252dd3d38647a14a589712f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:27:58 2020 +0200
Bumping nightly per request.
commit 548680276aac77c25d43d16b5622f847d474dbef
Merge: acc098604 8f8b20c91
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:26:06 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit acc0986040589a3492f88a740bc3c3fc693b26d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:28:32 2020 +0200
Lower resolution due to lying drivers.
commit d3b878de2a52c358d2944a6bbd0555dad7fbdb10
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:15:38 2020 +0200
Fix issues msh encountered with Intel 4600.
commit 10245e0c1b0cb6fae10d86409435364edc6102ef
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 21:15:02 2020 +0200
Merge more models into one mesh than we did previously.
commit 3155c31e663c52ae5c3a53d5fb5665892a1a498a
Merge: 7204cc8a7 3c199280e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:35:22 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7204cc8a7a4f74a30306bd205d9834fee4bb944f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:34:43 2020 +0200
Fix not yet done NPC animations.
This forces them all to be the idle animation if not specified.
This fixes issues where you'd have giant NPCs in water.
commit bc83360f2a08918f19d417b5f772e1ff554dba08
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 19:36:37 2020 +0200
Try to fix some bugs:
- Z fighting with LOD terrain and water.
- Audio SFX not playing.
commit 1fd104aa603bf3781b6526a5cada46aeca3049dd
Merge: 862df3c99 7c2c392a3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 12:02:31 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 862df3c9976c4da9bd7cfd784f1a85973127968a
Merge: 0a4218ed9 75c1d4401
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 05:52:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0a4218ed9d541a2b34c133351bea38a99ddf4ea7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 22:27:14 2020 +0200
Fix particle depth.
commit f51dfdeb442d0dd5243dd2f344fa4be295bd0875
Merge: c6251a956 5e6dc0471
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:19:04 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit c6251a956ad376400dca5c23420cf8d213dc8fdf
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:15:46 2020 +0200
Cache figures more intelligently.
Cache figures for longer, and don't cache character states for the
player except where they actually affect the rendered model.
commit 0ed801d5404982c6fb63b1eaa4567d908b294c9d
Merge: c11b9bdf0 eea64f78f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 16:32:24 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c11b9bdf0a53bf9884d2f5a48fec9b01d582df1a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 11:47:15 2020 +0200
Remove unneeded Clippy annotation.
commit 16aa9ef40af56d69289d00aafb3deadfb8bd4f35
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 8 00:53:02 2020 +0200
Fix hotloading and Clippy.
commit 3dc973e0be5b758da1e9805eb764ad401374cd0c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 23:50:27 2020 +0200
Major speedups with SIMD.
commit fba64a7d93d5a96077ce87287bbce6ab9b7fbcae
Merge: 76429d00e d1e10b178
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:19 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 76429d00eea00d212fbd672a84ee91e75b19b938
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:10 2020 +0200
Add clippy.toml.
commit c79f512f84dbb83cb82b7954db68ff241dfd8e41
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 11:55:20 2020 +0200
Fix all clippy issues, clean up Rust code.
commit 6f90e010b3fbefb53b0d632e819931350015b6b8
Merge: 77a8c7c26 5929cfa5c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:30 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 77a8c7c267d3f44a1a62bd6b2274359973c5e4d4
Merge: b44e44232 44febaabd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:10 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 5929cfa5c713aa392110bbb62407f76caf53c3df
Author: jshipsey <jshipsey18@gmail.com>
Date: Thu Aug 6 20:47:27 2020 -0400
fixed in-hand arrow bug
commit b44e442325d828f1cd564d66908f89d09e80474b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 6 13:40:35 2020 +0200
Miscellaneous performance improvements.
commit be37acf287c1360d8085862526ac3365ffd1d768
Merge: 125d7fc6c c11876547
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 05:49:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 125d7fc6c4dcd8c8c5f27b8268a4d64f409f3644
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 04:55:31 2020 +0200
Abstract over simd vs. repr_c vectors.
Also some minor improvements to Event size.
commit d4d4956e9252e1241ce110b2aa85076c6b1e2a23
Merge: 5f3b7294a aced5f979
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:56:54 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 5f3b7294af1f8533edc2620b58863c248e2b07af
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:43:52 2020 +0200
Fix formatting issues I missed before.
commit a428a3ebba70dcab63dd0f8cd983120c90617271
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:41:51 2020 +0200
Fix clippy warnings, part 1.
There aer still a bunch of type too complex and
function takes too many arguments warnings that I'll fix later
(or ignore, since in the one case I did fix a function takes too
many arguments warning I think it made the code *less* readable).
commit ba54307540ed8a937ac08209730284fc653af85b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 30 13:22:42 2020 +0200
Fix light animations so they are removed when the light turns off.
commit 7e0f4bcbf0f4717145d8beac40d52e3acebbe2aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 21:10:20 2020 +0200
Fix crash in edge case for pixel art.
commit 56da06f7a351e2b949e9b014a90b974d511a0924
Merge: cf74d55f2 9f53a4a19
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:56:52 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:29:52 2020 +0200
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
The first concern was addressed by fixing the dimensions of the map
images drawn from the UI (so that we always use a square source
rectangle, rather than a rectangular one according to the dimensions of
the map). We also fixed the way rotation was done in the fragment
shader for north-facing sources to make it properly handle aspect ratio
(this was already done for north-facing targets). Together, these fix
rendering issues peculiar to rectangular maps.
The second and third concerns were jointly addressed by adding an
optional border color to every 2D image drawn by the UI. This turns
out not to waste extra space even though we hold a full f32 color
(to avoid an extra dependency on gfx's PackedColor), since voxel
images already take up more space than Optiion<[f32; 4]> requires.
This is then implemented automatically using the "border color"
wrapping method in the attached sampler.
Since this is implemented in graphics hardware, it only works (at
least naively) if the actual image bounds match the texture bounds.
Therefore, we altered the way the graphics cache stores images
with a border color to guarantee that they are always in their own
texture, whose size exactly matches their extent. Since the easiest
currently exposed way to set a border color is to do so for an
immutable texture, we went a bit further and added a new "immutable"
texture storage type used for these cases; currently, it is always
and automatically used only when there is a specified border color,
but in theory there's no reason we couldn't provide immutable-only
images that use the default wrapping mdoe (though clamp to border
is admittedly not a great default).
To fix the maps case specifically, we set the border color to a
translucent version of the ocean border color. This may need
tweaking going forward, which shouldn't be hard.
As part of this process, we had to modify graphics replacement to
make sure immutable images are *removed* when invalidated, rather
than just having a validity flag unset (this is normally done by
the UI to try to reuse allocations in place if images are updated
in benign ways, since the texture atlases used for Ui do not
support deallocation; currently this is only used for item images,
so there should be no overlap with immutable image replacement,
so this was purely precautionary).
Since we were already touching the relevant code, we also updated
the image dependency to a newer version that provides more ways
to avoid allocations, and made a few other changes that should
hopefully eliminate redundant most of the intermediate buffer
allocations we were performing for what should be zero-cost
conversions. This may slightly improve performance in some
cases.
commit ad18ce939940a8c697270f6e9b94db9942fd8295
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 13:21:09 2020 +0200
Fix continent scale hack.
commit 36b1cb074f5b195aebd7dbbc3da7f0246a1a18ec
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 12:11:40 2020 +0200
Enable loading different sized maps without a recompile.
We may want to tweak the effects of the continent_scale_hack.
commit 13b6d4d534cc4814b7cb3294ca41bbfea0a6b186
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 10:55:48 2020 +0200
Removing WORLD_SIZE, part 1.
Erased almost every instance of WORLD_SIZE and replaced it with a local
power of two, map_size_lg (which respects certain invariants; see
common/src/terrain/map.rs for more details about MapSizeLg). This also
means we can avoid a dependency on the world crate from client, as
desired.
Now that the rest of the code is not expecting a fixed WORLD_SIZE, the
next step is to arrange for maps to store their world size, and to use
that world size as a basis prior to loading the map (as well, probably,
as prior to configuring some of the noise functions).
commit 30b1d2c6428230a9eaa0d749cdcbbd6f1cbccd78
Merge: 7d56ba31b 1377b369f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:58 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 7d56ba31b445441461b28a07fc495d7d4f047c17
Merge: 2101113b4 598f14b25
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 1377b369f6db2258e910d467a5740f31789e3ded
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sun Jul 19 23:25:38 2020 +0200
more saturated pumpkins
commit ae8d50527f93bb0616c2ad46ce4dacb63bc37c6d
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sat Jul 18 20:29:56 2020 +0200
acacia models
commit 2101113b467e691de787392d7f20f1745f5637bd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 18 18:55:25 2020 +0200
Higher detail LOD.
commit add2cfae04b4385fa5590e11e2bd5229d9dee0aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 16 01:57:39 2020 +0200
Revert some irrelevant stuff.
commit 2e2ab3dc1eaa59a4aef7f8d34a53d8aae4c8553a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 15 13:30:49 2020 +0200
Fixing various things about shadows.
* Correcting optimal LISPSM parameter.
* Figure shadows are cast when they're not visible.
* Chunk shadows stay cast until you look away.
* Seamless cubemaps for point lights.
* Etc.
commit 6c31e6b56217274285b597af297036691ea5d897
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 19:50:26 2020 +0200
Fix shadow creation.
commit 6332cbe006115ae205597529cd8bbccd146c2cca
Merge: be438657c 930e0028b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:47:00 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit be438657c33d7b5bfb0a9582c3ed3fd366637323
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:28:08 2020 +0200
Tweaks to shadows.
Added shadow map resolution configuration, added seamless cubemaps,
documented all existing rendering options, and fixed a few Clippy
errors.
commit 23b4058906013c7d2a40c286e20e32c5fbd897ed
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 10:11:19 2020 +0200
Fix moon, use nonlinear noise for terrain.
Note that the latter has a bit of performance cost.
commit 7fbe5cbfbb9dc29607957b8e62f432a4deed193d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:23:02 2020 +0200
Address lies about max texture size.
commit bcfc62b5e13a1cdd83f57535fde4694720bebfd9
Merge: 75e3626a7 18a08e8fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:22:08 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 75e3626a785919f43fdcf2127c2b10e3e4df2f9f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:21:52 2020 +0200
OpenGL 3.3 minimum.
commit 18a08e8fe2739f02af99a5d2cb4e7c38c49e858b
Author: Monty Marz <m.marzouq@gmx.de>
Date: Tue Jul 7 23:57:52 2020 +0200
settings localization
commit 90c5d1ca3620092bc3ae10b2211489eb1cf6f5e8
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 21:11:48 2020 +0200
Lower near distance.
commit 0e66f02b25aaddaa2dfddbbc89cd67de54a9a7b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 20:09:01 2020 +0200
All sprites sway in the wind now.
commit db1401a6910bf42dcf502462c90038752ff5fbdb
Merge: 69e508d8c e8b4b29d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 19:34:17 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 69e508d8c94d8973033817ca86f357e466fc7c4d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 18:41:37 2020 +0200
Make it easy to switch to SIMD for math.
commit ffe0f5928c7a7e87d00cb5426b3b1d831d7e02fd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 21:21:12 2020 +0200
Fix some issues with underwater rendering.
commit bfda6da42f38fd02c31ee92c81ab785a3e50c2a0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 19:17:59 2020 +0200
Fix some minor display issues.
commit 0ed752e087968cf901301884aaeae698e32ef8a5
Merge: ccc6a06a8 518edcb85
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:14:21 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit ccc6a06a8d4504d6b9f7af7905a414d2ee06ab76
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:04:34 2020 +0200
Some minor changes.
commit 4e020246702889269efe1a191788992164c508d6
Merge: 50a64d927 e05c9267a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 16:17:40 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 50a64d927e6c4f4b0e4688e4cbfca694bc3f922a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 13:07:03 2020 +0200
Fix far plane.
commit 7dd06da34cae8f9ea3b6c889fe965181f3fd3949
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:25:35 2020 +0200
Add shadows.glsl.
commit 618a18c998778bf871b905a74657440fcc384c80
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:10:22 2020 +0200
Adding shadows, greedy meshing, and more.
commit eaea83fe6a5cb1cb0ba8beef888183c718258496
Merge: 267018495 2f89b863e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 22:47:07 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 2670184954a13e4a9e7a4e35ba79aac0c5fac2f7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 21:20:01 2020 +0200
Make civsim and sites deterministic.
For anything in worldgen where you use a HashMap, *please* think
carefully about which hasher you are going to use! This is
especially true if (for some reason) you are depending on hashmap
iteration order remaining stable for some aspect of worldgen.
commit f8376fd5dc72b4a9c2f51a6b4570d59c8b8e9343
Merge: 654f7e049 cdee191dd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 17:53:57 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 654f7e049258d9da27c09608bbe6a46ffa8787e5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed May 20 21:22:30 2020 +0200
Correct backface culling.
commit 560501df05ca725409b0f2e4eb31bdfdc15fd0c7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue May 19 17:22:06 2020 +0200
Greedy messhing for shadows.
commit a4d87e1875ca543436e6bbbeb20348facc5a52d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun May 17 05:59:00 2020 +0200
Shadow maps work for lantern.
commit 243d0837b8a3b08172c9a3c348d964d7ddc2a0a8
Merge: 04382dc28 71dd520cd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:53:13 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 04382dc28632b6c66e8821f6870c0daaa1c1901a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:22:17 2020 +0200
WIP: better graphics config, better LOD, shadow maps.
commit 22ddbad3eb32bfa70f0932176022208fe67ded81
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 18:54:09 2020 +0200
Minor shader fixes.
commit 746a10e8d01ac235f994b0cde78fa48998602a1f
Merge: 0f4a0e763 40ab94673
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 04:02:09 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0f4a0e763db3afbdc4fb0558611f38326ca87151
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 23:03:24 2020 +0200
Switch back to pop-in terrain.
commit dd74fa7e4a53667b38811d7aec58d7f6a68889bb
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 22:58:55 2020 +0200
LOD shading closer to voxel shading.
commit ef67bd58ba0bdaf622b078892d768263b6cba268
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 28 20:49:03 2020 +0200
Experimental underwater lighting.
commit 2c5ad9d07605e80d5fd5679dd3a5d70c605b86a9
Merge: 748279835 303967a6f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 22:35:24 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7482798354eda18c8207950080fc24d443a369de
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 21:59:55 2020 +0200
Replace discard in figure-frag.
commit d83b4ae69be4912f69bf7835f509c68a1c7770a4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:45:57 2020 +0200
Fix sprite lighting, HDR from focus_pos.
commit 0594238004f116274905fa0ed7c2b6c417ed1d29
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:14:10 2020 +0200
Proper HDR from point lights.
commit 48c93d2b41ce5743103d18e76cc228f5ac766492
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 14:01:43 2020 +0200
Brighter ambiance, darker LOD shadows.
commit e0452e895ccfa8a43f368cae3b8b8aedc24dad93
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 13:13:23 2020 +0200
More proper HDR.
commit 4c6da3ed16cfeebb455e40da5f557b4af9a499d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 00:13:10 2020 +0200
Trying LOD noise.
commit 682a3d74c85df5503ffe1fc1cc891bce789df1ad
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 23:11:08 2020 +0200
Fix LOD heights in towns.
commit cc39e5734e8b18f9077bf42e66337c1319dd6b6e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 21:01:23 2020 +0200
More LOD fixes.
commit 8116b21c2e51c836e77894e309ac273caf2917b3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:54:43 2020 +0200
I like this coloring.
commit bc2560ea90b36f4b46190005344232d993043ac3
Merge: 14effdd5d e690efe71
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:48:33 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 14effdd5db8747fcf3eb34f03b46b7792e92d1c5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:24:35 2020 +0200
Re-saturate.
commit 48a643955d4435b78179acba0beb4a979905cc31
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:23:57 2020 +0200
Various fixes.
commit f7b497a0c25f4ad4682c71dd1ed6f608052feb9b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 03:22:49 2020 +0200
Render figures again.
commit 44e4aad48deba8266b9f8bdfd3db096b381f5327
Merge: e6f0a5a98 9ec319a18
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 02:01:04 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit e6f0a5a981a82533ba188fff0a54ce98577bb152
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 24 16:12:20 2020 +0200
Add atmospheric scattering.
commit f2953087f691a8edbc001cb98ebf5059fc6f8ac0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 23 00:01:20 2020 +0200
Fix shadowing for specular reflections.
commit ddd4a67a9799b8d08c7dc0c2bec90621c2bed0e3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Apr 22 22:56:12 2020 +0200
HDR fixes.
commit 1015e60deef3c447381996277df7496707a63bd0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 21 18:25:19 2020 +0200
More lighting changes.
commit 80c264abd111fb237e57843efcb5c071d4f84613
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 13 00:29:59 2020 +0200
Lighting experiments.
commit 8414987e589dd5102bad89762a3adaccc0bfe957
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 9 02:38:40 2020 +0200
WIP -- lighting changes and soft shadows.
commit 9cd2b3fb0d6b49776c6dfe463e4169637250b11a
Merge: c7ea687eb 8b149ad11
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:29 2020 +0200
Merge branch 'sharp/new-lighting' into sharp/small-fixes
commit c7ea687ebbc5aace1b455f134a5bf49ce2c7434a
Merge: 476441531 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:02 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 8b149ad11ad4bb75018fcf9519baec27d1c95951
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:32:39 2020 +0200
Trying out a new lighting model.
commit b0ac9f36f755dd06f7c17c46150568064790864f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 07:56:11 2020 +0200
Use bicubic interpolation for terrain.
commit f6fc9307a121514b614bc50ef8eb055953e7da8a
Merge: 33140a295 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 05:01:41 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 4764415312aae6e9ac2d00e86e84577cb958f1ab
Merge: ed2d0111d 13388ee6a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 04:54:48 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 13388ee6a42943f3f79a9cb488346cef18e272fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 20:30:08 2020 +0200
Various fixes (to coloring and to soft shadows).
commit fbd084a94a067082a87cd6d28b82054709bc9265
Merge: 5a089863b 4fdf6896a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 18:50:38 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/map-colors
commit ed2d0111d994262ae836d84d1fe5a45e4de72a0b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 06:49:27 2020 +0200
Combining colors and LOD.
commit 88342640c6b835114d01c797b89fdede3b0a2108
Merge: 33140a295 5a089863b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:49:20 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 33140a2951b8212725f42c758b277aaec4d888f7
Merge: 4c65a5aed f34d4b379
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:36:21 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 5a089863beb01d4794bbe3580ada47b278715ea2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 03:17:49 2020 +0200
Making maps brighter.
This is probably not the right way to do it, but oh well!
commit 32b2c99109dd486aa922886081068f9c550c83f2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 02:46:36 2020 +0200
Horizon mapping and "layered" map generation.
Horizon mapping is a method of shadow mapping specific to height maps.
It can handle any angle between 0 and 90 degrees from the ground, as
long as know the horizontal direction in advance, by remembering only a
single angle (the "horizon angle" of the shadow map). More is explained
in common/src/msg/server.rs. We also remember the approximate height of
the largest occluder, to try to be able to generate soft shadows and
create a vertical position where the shadows can't go higher.
Additionally, map generation has been reworked. Instead of computing
everything from explicit samples, we pass in sampling functions that
return exactly what the map generator needs. This allows us to cleanly
separate the way we sample things like altitudes and colors from the map
generation process. We exploit this to generate maps *partially* on the
server (with colors and rivers, but not shading). We can then send the
partially completed map to the client, which can combine it with shadow
information to generate the final map. This is useful for two reasons:
first, it makes sure the client can apply shadow information by itself,
and second, it lets us pass the unshaded map for use with level of
detail functionality.
For similar reasons, river generation is split
out into its own layer, but for now we opt to still generate rivers on
the server (since the river wire format is more complicated to compress
and may require some extra work to make sure we have enough precision to
draw rivers well enough for LoD).
Finally, the mostly ad-hoc lighting we were performing has been (mostly)
replaced with explicit Phong reflection shading (including specular
highlights). Regularizing this seems useful and helps clarify the
"meaning" of the various light intensities, and helps us keep a more
physically plausible basis. However, its interaction with soft shadows
is still imperfect, and it's not yet clear to me what we need to do to
turn this into something useful for LoD.
commit f8926a5737ddc51f3d585c651a64c43677aae0f4
Merge: a1aee931e 875ae6ced
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Mar 13 13:32:42 2020 +0100
Merge remote-tracking branch 'origin/master' into sharp/map-colors
commit 4c65a5aed353b119aea65a2aaeb94549b67beb42
Author: Treeco <5021038-Treeco@users.noreply.gitlab.com>
Date: Mon Feb 24 16:48:05 2020 +0000
Made LOD setting slider exponential
commit 2fa7b2d20d7233dc8bfd64f9f7f54617575248f1
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 17:49:53 2020 +0000
Added mist to LoD
commit aab059a450b5f635777129ff82cc15b662965c3c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 15:14:06 2020 +0000
Added LoD slider
commit 779c36b538121c5ade3633ae5cb67bb14c8c3877
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:54:55 2020 +0000
Reduced cost of vertex pushing
commit 9fea150473906b166365b738ebcea07c697daf3d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:38:53 2020 +0000
Fixed maths, improved LoD resolution
commit 5481df38fea5bf183ff376a3337179cfaa5233dc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 11:22:50 2020 +0000
Dynamically relocate LoD vertices to enhance details
commit a3e36a50ababd615da7db1b26158c7906a5def01
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 18:13:51 2020 +0000
Simpler terrain spiral rendering
commit 255f450ae9ac8763db4bede075fb409161ed57cc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:53:17 2020 +0000
Better LoD precision
commit 3d027aebe812a5b8658a4eb8123dc9f61b3776d2
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:04:03 2020 +0000
Better falloff
commit be775c9484b457b2c0b1a494aec03392d0c70e76
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 15:30:45 2020 +0000
Applied good ideas from experimental branch
commit 58587b68545a23c5c04ab4574a4b94b3bc982246
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 16:15:13 2020 +0000
Minor fixes to LoD merging
commit 7b42aebd709c14df2db766aad61d9280ad24d84d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 15:04:44 2020 +0000
Capped LoD dragging
commit 8aafc559f87124e1ea5ca6e3ddc2aa0c242d793c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:54:37 2020 +0000
Better blending between LoD and terrain border
commit edd3455d5161792d87ddc8eadc0ecbad5532b284
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:40:19 2020 +0000
Fixed LoD z depth, added sea level offset
commit b9b06744620114dd5556e73f64fa93c145503a7c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:27:43 2020 +0000
Better LoD smoothing
commit a1aee931e790431560cd2d953ad61d9497072afd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Feb 21 14:52:17 2020 +0100
Adding shadows.
commit 2400786c13dd891c131ed86d48d05df516a8a778
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 13:48:40 2020 +0000
Use world map as LoD source
commit dbf650f504a4c25fbbc2096ac3616c736bf52d23
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Jan 20 00:48:14 2020 +0000
Better clouds at distance
commit 5e6f81b86cdb9730b9b056877b19257075fd5fa8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Jan 19 23:59:02 2020 +0000
sync
commit 745e7540ddb000cc645f612767b337c2ddc3f7c0
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 12:40:48 2019 +0000
Improved cloud falloff mist, faster noise sampling
commit f6a200d0cb866196ba57697466755f9e0c7ea5d8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 10:09:00 2019 +0000
Improved long-range depth precision, removed unnecessary LoD polygons
commit 63d1b2bb2292898d59fb4f4e502201103dfeb86f
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 20:57:46 2019 +0000
Working LoD shader
commit f13d98ee3e58f881e8b978861a67663b59ed91ec
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 11:03:40 2019 +0000
LoD first attempt (stack overflow issue)
2020-08-20 18:34:59 +00:00
|
|
|
|
let is_ocean = get_oceans(map_size_lg, |posi| alt[posi]);
|
2019-10-16 11:39:41 +00:00
|
|
|
|
let is_ocean_fn = |posi: usize| is_ocean[posi];
|
(See sharp/lod-history) LOD, shadows, greedy meshing, new lighting, perf
---
Pretty much a Veloren fork at this point. Here's a high level overview of the changes (will be added to CHANGELOG just before merge).
At a high level this MR incorporates roughly two groups of changes.
The first group consists of new game features: more flexible map sizes, level of detail terrain, shadow maps, and a new lighting
engine. This is "feature work" that (mostly) only adds new things to Veloren, and mostly shouldn't affect old stuff.
The second big group of changes are those addressing the fallout from all the new features. These include performance fixes of
various sorts: the addition of multiple graphics options and optimization of the cheap ones to avoid work, switching all voxel
models to use some variant of greedy meshing, switching over much of our CPU-side vector math to exploit SIMD instructions
(coinciding with a fork of `vek`), and a rewrite of how the UI handles text rendering (coinciding with updates to our fork
of `conrod`). Making Veloren's hardcoded colors appear correct under the new lighting engine also required considerably
changes (TODO: Fill in this section when it's complete).
The second category of changes often heavily touches code owned by other people, including frequently modified code "owned" by a
handful of people, so I recommend that this code be reviewed particularly carefully.
---
At a high level (each will be described in more detail below):
- The world map has been refactored.
- The world size is no longer hardcoded (@zesterer).
- The map generation code was made generic to allow using it outside of the `world` crate (@zesterer).
- On world creation, we now compute *horizon maps* (@zesterer).
- The way we pass the world from the server to the client has been updated (@xMAC94x).
- Artifacts related to image rotation were fixed (@imbris).
- Multiflow rivers were enabled (@zesterer).
- In the process of making changes related to the world map, various incidental fixes and optimizations were required.
- The new *level of detail* feature was added (@zesterer wrote part of this and has checked out the rest).
- A new LOD terrain rendering step was added to the pipeline.
- The LOD terrain quality was made configurable via a graphics setting.
- Horizon maps were used to cast shadows from LOD chunks on both LOD and non-LOD terrain.
- A "voxelization" effect was incorporated into rendered LOD terrain to make it blend better into the world.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Veloren's lighting has been completely overhauled (@zesterer has already checked most of this out).
- A semi-accurate index of refraction was assigned to our materials.
- A new, more realistic, physically based approach to lighting was used using the *Ashikhmin Shirley* BRDF.
- We emulate *atmospheric scattering* using equations designed for measuring solar panel light exposure.
- We attempt to compute *realistic light attenuation* in water using its real material properties.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Point and directional lights now cast realistic shadows, using *shadow mapping.* (@imbris, @zesterer, @Treeco, @YuriMomo)
- Point light shadow maps were added to the rendering pipeline, using geometry shaders and *seamless cube maps*.
- Directional light shadows were added to the rendering pipeline, using LISPSM together with disabling *depth clamping*.
- "Shadow-only" chunks and NPCs were added to prevent shadows from models behind you from disappearing.
- In the process of making changes related to shadow maps, various incidental fixes and optimizations were required.
The addition of shadow maps, LOD terrain, and the new lighting all led to significant performance degradation, on top of other
changes happening in master. Therefore, a large number of performance improvements were also needed:
- The graphics options were made much more flexible and configurable, and shaders were optimize.
- New options were provided for how to render lights and shadows (@Pfauenauge, @zesterer).
- Graphic setting storage and configuration were overhauled to make adding new features easier (@Pfauenauge, @imbris).
- Shaders were rewritten to utilize GLSL's preprocessor to avoid overhead (@zesterer, @YuriMomo).
- In the process of making changes related to providing additional rendering options, various incidental fixes and optimizations were required.
- Voxel model creation was switched to use *greedy meshing.*
- A new voxel meshing method, greedy meshing, was added (@imbris).
- Uses of the older meshing methods were migrated to use greedy meshing (@imbris, @jshipsey, @Pfauenauge).
- New restrictions were added to terrain, figure, and sprites to future proof them for further optimizations (@jshipsey, @Pfauenauge, @zesterer).
- Most positions are now relative to either chunk or player position for better precision (@imbris, @zesterer, @scottc).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- Animation and terrain math were switched to use SIMD where possible.
- Fixes were made to vek to make its SIMD feature usable for us (@zesterer, @imbris).
- The interface and types used in bone animation were changed in various ways (@jshipsey, @Snowram, @Pfauenauge).
- Redundant code generation for body animation is now partly taken care of by a macro (@jshipsey, @Snowram, @Pfauenauge).
- Animation code was modified to to use vek's SIMD representation where possible (@jshipsey, @Snowram, @Pfauenauge).
- Terrain meshing code and shadow map math were also modified to use vek's SIMD representation (@imbris).
- SIMD instruction generation was enabled (@YuriMomo, @jshipsey, @Snowram, @imbris, @Angelonfira, @xMAC94x).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- The way we cache glyphs was completely refactored, fixed, and optimized.
- Our fork of `conrod` was optimized in various ways (@imbris).
- Our fork of `conrod` now exposes whether a widget was updated during the current frame (@imbris).
- Our use of the glyph cache was rewritten for correctness (@imbris).
- A *text cache* was introduced that lets us skip remeshing glyphs that have not changed (@imbris).
- Various changes were made to reduce pressure on the glyph cache, with more planned (@imbris, @Pfauenauge).
- In the process of making changes related to the glyph cache, various incidental fixes and optimizations were required.
- Colors were changed to keep Veloren's look consistent with master.
- Some older tree models were brought back (@Pfauenauge).
- TODO(@Sharp): All hardcoded colors were extracted and made hotloadable.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Hardcoded colors were fixed to conform to Veloren's style.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Color models were fixed to conform to Veloren's style.
A detailed description of the involved changes follows.
---
- The world size is no longer hardcoded. All functions dependent on world size now take a `WorldSizeLg`, which holds the base 2 logarithm of each actual world dimension and is guaranteed to maintain certain properties (outlined in `common/src/terrain/map.rs`). Additionally, many utility functions that utilize the world size were moved into `common` as well (mostly `common/src/terrain/mod.rs`). Finally, the world map format was updated in order to store its size explicitly, with a migration path from the old format that should work whenever the old formatted map was a square (practically always). See `world/src/sim/mod.rs` for these changes.
- The map generation code was made generic to allow using it outside of the `world` crate. The parts of the map generating code that do not need to query the world were moved over to `common/src/terrain/map.rs`, allowing them to be used from the client without creating a dependency on `world`. The rest of it was turned into helper functions in `world/src/sim/map.rs`, which can be passed as closures to the generic map generation code to complete its construction. This also means that colors are now passed in separately to the map generation function. See <https://veloren.net/devblog-78/> for more details.
- On world creation, we now compute *horizon maps*. See the function in `world/src/sim/util.rs`.
Given a height map and a plane intersecting that height map, our horizon maps allow us to encode enough information to reconstruct shadows for each point on the height map using only the *horizon angle* (the angle at which the sun starts to become visible). As Veloren's sun only covers one plane, this is sufficient for encoding sun shadows for LOD terrain, by encoding two angles per chunk (one for each 90 degrees the sun covers). We can also use this for the moon, if we want, since the moon follows the same path. Additionally, we store the *height* of the furthest occluder, to try to make the shadows volumetric; so this means 4 bytes in total for each chunk.
Support for horizon maps has been merged into the map functionality in common as well.
- The way we pass the world from the server to the client has been updated. Rather than passing the prerendered map, we instead pass three maps with values for each chunk; one with the color information, a second with altitude information, and a third with horizon map information. We then reconstruct the map on the client, together with some additional information we send from the server (like the sea level and maximum height). See `common/src/msg/server.rs` for a detailed description of the format of `WorldMapMsg`, and `server/src/libr.rs` and `client/src/lib.rs` for details of the map construction and parsing.
- Artifacts related to image rotation were fixed. See the commit message for commit SHA `cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e` for a detailed explanation. This involved changes to shaders, the addition of a new type of graphic (also reflected in the graphic cache) that allows specifying a border color (which automatically makes the associated texture immutable), and some related fixes. I reproduce the first two paragraphs of the MR description as well:
```
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
```
- Multiflow rivers were enabled.
This does not really need to be part of this MR, and would be easy to revert, but since it seemed to provide a nice improvement it's currently packaged with it.
We already computed multiple outflows from each chunk for erosion purposes long before this MR.
However, we never modified river rendering to be able to handle this case (just a single downhill river flow is complex enough!) so this was not exposed when deciding which chunks were rivers.
Now that
- In the process of making changes related to the world map, various incidental fixes and optimizations were required. Some examples of fixes include making sure terrain is never lowered to below sea level (to make the shadow maps report correct values), fixing map altitudes and colors to understand things like cliffs and "block level" coloring (that doesn'te xist on the column level), and fixing a crashbug when rendering images for the UI where source pixels are strongly rectangular. Some examples of related performance fixes include avoiding allocating a fresh vector for all the maps (i.e. copying it over to change the format from `[u32; n]` to `DynamicImage` and then copying again to convert to `RgbaImage`), and instead using the `gfx::memory::slice` function to accomplish the same thing. These sorts of changes are spread all arond the code.
This includes the additon of a new scene, `voxygen/src/scene/lod.rs`, a new pipeline `voxygen/src/render/pipeline/lod_terrain.rs`, and new shaders `assets/vxygen/shaders/lod-terrain-vert.glsl` and `assets/vxygen/shaders/lod-terrain-frag.glsl`, as well as associated changes to the renderer in `voxygen/src/render/renderer.rs`.
The main idea behind our initial approach to LOD was to take the world data we now get from the server (altitude, color, and horizon mapping).
- Some previously computed values were turned into shader uniforms for better prediction on weak processors. (@zesterer)
- Calls to power or trig functions were removed or replaced with multiplications, where possible.
- After some deliberation
- To properly handle sprite "waving" for nearby sprites,
We explicitly designed the greedy meshing system with figures and sprites in mind.
In both cases, we want to be able to *efficiently* pack many different models into the same texture, especially in cases where we know
we will either not be removing any of the grouped-together from the models from the texture, or will remove all of them at once (so
they can be packed into some specific subtexture).
For sprites, since we know every model in advance and never intend to deallocate them, we currently pack them all as efficiently as
possible into one giant tetxure atlas. However, in the future we might opt to pack them slightly less efficiently in exchange for
shrinking the sprite vertex size.
For figures, we pack all the textures for each *model* into the same atlas.
is a global texture atlas used for every sprite, and for figures which is why we have the ability to mesh multiple
models to the same texture area (using the simple texture atlas allocator) without requiring intermediate vector allocations.
This is accomplished by delaying the time when we actually write the color and light data to the texture until *after* all the
model vertices have been meshed; then, we can just allocate the whole color/light array at once, making the atlas we use an
exact fit. In computer science-y terms, we accomplish this delay by, after we perform the initial greedy meshing (without
texture information), not continuing to create the texture data, but instead constructing a *continuation*--that is, a function
that, when called, will execute the rest of the computation. We push this continuation (which in Rust terms is a `FnOnce` closure
that takes the `ColLightsInfo` that it is supposed to write to as context) onto a
onto a vector
resizing. To allow for suspended writes to texture data, Rust pointed out to me that the continuation that would eventually write the color and light data to the texture atlas (the one that is shared by all models sharing the same greedy mesher) would have to *own* whatever data it mshed. Because we often generate the model data to mesh as a temporary in `voxygen/src/load.rs`, the
- Matrix multiplications in the shader were reduced for figure data (@zesterer).
- Vertex "waves" for fluid data were removed.
- Terrain "bending" near edges was removed.
- Scaling was fixed to make sure empty space was not introduced in a space previously occupied by a block. It was also changed to take ownership of its voxel data,
rather than sharing it, to let it be used with meshing.
- Rust's nightly version was bumped in order to use the `array_map` function, which lets us reuse more code between the simple map and `FigureModelCache`.
- PositionedGlyph::standalone.
---
I tried to cite sources in many cases[^realtime],[^lloyd],[^lispsm],[^pbrt],[^greedy],[^tjunctions]
where I needed features from elsewhere but I am particularly grateful for the following resources,
esepcially where they have accompanying source code. I linked all of them that are accessible to the public (those that are not were
obtained through legal means).
[^realtime]: Eisemann, Elmar, Michael Schwarz, Ulf Assarsson, Michael Wimmer. Real-Time Shadows. A K Peters/CRC Press (T&F), 20160419.
[^lloyd]: Lloyd,B. 2007. [Logarithmic perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). PhD thesis, University of North Carolina.
[^lispsm]: Wimmer, M., Scherzer, D., and Purgathofer, W. 2004. [Light space perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). In Proceedings of Eurographics Symposium on Rendering 2004, pp. 143– 152.
[^pbrt]: Pharr, Matt, et al. [http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf](Physically Based Rendering: From Theory to Implementation). Third edition, Morgan Kaufmann Publishers/Elsevier, 2017.
[^greedy]: mikolalysenko. “Meshing in a Minecraft Game.” 0 FPS, 30 June 2012, <https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/>.
[^tjunctions]: blackflux. “Meshing in Voxel Engines – Part 1.” Blackflux.Com, 23 Feb. 2014, <https://blackflux.wordpress.com/2014/02/23/meshing-in-voxel-engines-part-1/>.
I am also especially grateful to Khronos, Wikiepdia, and stackoverflow for answering many of my specific questions while writing the MR.
---
Squashed commit of the following:
commit 300505e7305a2fdac722a808ee8538323f215f39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 18:46:25 2020 +0200
Fixing cargo doc and typo in CHANGELOG.
commit ec0aeb18e8499d7d84ef818331b4b65c3d76cea6
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 15:38:50 2020 +0200
Hopefully final commit for the LOD branch.
commit 5e8ea0b1eaac02903a02feb2eb038d195de4872f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 10:14:26 2020 +0200
Falling back to power as stopgap.
commit e44a1cbf46504ee9931a01bdc9033e145500d557
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 09:25:41 2020 +0200
Address imbris feedback.
Temporarily disables shiny water, lowers max VD.
These restrictions will be lifted soon after merging.
commit 561e25778a108ac3712f5ec2ce3a51234c4430d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 08:31:13 2020 +0200
Tweaking shaders a bit.
commit 7d19259078ce0dd7b3742ad7d0cb3fab3ece3fdc
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:59:43 2020 +0200
Fix view example as well.
commit 051cd4934e0fad2c0b15db4380a4189fa318679f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:29:06 2020 +0200
Fix meshing benchmark.
commit c95e07db3b4dcca285678985e65e31b927cb1c61
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 05:46:22 2020 +0200
Address MR feedback, fix scene clouds.
commit 1bfb816cabdb3ffc1e507a009c2d98696b4b573a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:39:36 2020 +0200
Incorporating Pfau's figure color changes.
New eyes and new humanoid colors.
commit 3f9b89a3ac7b3356b1dba0d1a8f6541357f81469
Merge: e2f5162e4 62c53963a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:29:41 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit e2f5162e4f96f4124aa43488f7245d341b3dcfd4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:28:38 2020 +0200
World colors are all hotloadable.
They live in assets/world/style/colors.ron.
Only a small handful of hardcoed colors remain in World; they are either
part of the map, or difficult to disentangle from the rest of the
computation. Comments are made where appropriate.
commit 62c53963abe1975009d34a8f9515a355bef24f31
Author: Marcel Märtens <marcel.cochem@googlemail.com>
Date: Wed Aug 19 15:59:00 2020 +0200
replace pretty_env_logger with tracing
commit 5b1625f99d9586fe80e2232f583ec5af9f953099
Merge: d71003acd 4942b5b39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:15:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit d71003acdabeff970b3928e97c26af6847b5b78e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:14:34 2020 +0200
Hotloading colors, part 1: colors in common.
Currently, this just entails humanoid colors. There are only three
colors not handled; the light emitter colors in
common/src/comp/inventory/item/tool.rs. These don't seem important
enough to me to warrant making hotloadable, at least not right now, but
if it's needed later we can always add them to the file.
commit 63b5e0e553eb2ea49276f192a6fc7dd65254270d
Merge: c32b337a4 6d2c4b9c1
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 13:05:37 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c32b337a46e10d9de473d178a94a3ccd61c39bb3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:52:04 2020 +0200
Fixing LOD grid, for real.
commit a166ae0360395387e09fb35a1f84210c2ce5ec24
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:28:05 2020 +0200
Addressing imbris's initial feedback.
Fixes two minor bugs: explosion particles were no longer spawning
randomly, and LOD grids were not perfectly even.
commit 4cbad004f44060994252dd3d38647a14a589712f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:27:58 2020 +0200
Bumping nightly per request.
commit 548680276aac77c25d43d16b5622f847d474dbef
Merge: acc098604 8f8b20c91
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:26:06 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit acc0986040589a3492f88a740bc3c3fc693b26d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:28:32 2020 +0200
Lower resolution due to lying drivers.
commit d3b878de2a52c358d2944a6bbd0555dad7fbdb10
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:15:38 2020 +0200
Fix issues msh encountered with Intel 4600.
commit 10245e0c1b0cb6fae10d86409435364edc6102ef
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 21:15:02 2020 +0200
Merge more models into one mesh than we did previously.
commit 3155c31e663c52ae5c3a53d5fb5665892a1a498a
Merge: 7204cc8a7 3c199280e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:35:22 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7204cc8a7a4f74a30306bd205d9834fee4bb944f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:34:43 2020 +0200
Fix not yet done NPC animations.
This forces them all to be the idle animation if not specified.
This fixes issues where you'd have giant NPCs in water.
commit bc83360f2a08918f19d417b5f772e1ff554dba08
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 19:36:37 2020 +0200
Try to fix some bugs:
- Z fighting with LOD terrain and water.
- Audio SFX not playing.
commit 1fd104aa603bf3781b6526a5cada46aeca3049dd
Merge: 862df3c99 7c2c392a3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 12:02:31 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 862df3c9976c4da9bd7cfd784f1a85973127968a
Merge: 0a4218ed9 75c1d4401
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 05:52:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0a4218ed9d541a2b34c133351bea38a99ddf4ea7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 22:27:14 2020 +0200
Fix particle depth.
commit f51dfdeb442d0dd5243dd2f344fa4be295bd0875
Merge: c6251a956 5e6dc0471
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:19:04 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit c6251a956ad376400dca5c23420cf8d213dc8fdf
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:15:46 2020 +0200
Cache figures more intelligently.
Cache figures for longer, and don't cache character states for the
player except where they actually affect the rendered model.
commit 0ed801d5404982c6fb63b1eaa4567d908b294c9d
Merge: c11b9bdf0 eea64f78f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 16:32:24 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c11b9bdf0a53bf9884d2f5a48fec9b01d582df1a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 11:47:15 2020 +0200
Remove unneeded Clippy annotation.
commit 16aa9ef40af56d69289d00aafb3deadfb8bd4f35
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 8 00:53:02 2020 +0200
Fix hotloading and Clippy.
commit 3dc973e0be5b758da1e9805eb764ad401374cd0c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 23:50:27 2020 +0200
Major speedups with SIMD.
commit fba64a7d93d5a96077ce87287bbce6ab9b7fbcae
Merge: 76429d00e d1e10b178
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:19 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 76429d00eea00d212fbd672a84ee91e75b19b938
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:10 2020 +0200
Add clippy.toml.
commit c79f512f84dbb83cb82b7954db68ff241dfd8e41
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 11:55:20 2020 +0200
Fix all clippy issues, clean up Rust code.
commit 6f90e010b3fbefb53b0d632e819931350015b6b8
Merge: 77a8c7c26 5929cfa5c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:30 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 77a8c7c267d3f44a1a62bd6b2274359973c5e4d4
Merge: b44e44232 44febaabd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:10 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 5929cfa5c713aa392110bbb62407f76caf53c3df
Author: jshipsey <jshipsey18@gmail.com>
Date: Thu Aug 6 20:47:27 2020 -0400
fixed in-hand arrow bug
commit b44e442325d828f1cd564d66908f89d09e80474b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 6 13:40:35 2020 +0200
Miscellaneous performance improvements.
commit be37acf287c1360d8085862526ac3365ffd1d768
Merge: 125d7fc6c c11876547
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 05:49:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 125d7fc6c4dcd8c8c5f27b8268a4d64f409f3644
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 04:55:31 2020 +0200
Abstract over simd vs. repr_c vectors.
Also some minor improvements to Event size.
commit d4d4956e9252e1241ce110b2aa85076c6b1e2a23
Merge: 5f3b7294a aced5f979
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:56:54 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 5f3b7294af1f8533edc2620b58863c248e2b07af
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:43:52 2020 +0200
Fix formatting issues I missed before.
commit a428a3ebba70dcab63dd0f8cd983120c90617271
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:41:51 2020 +0200
Fix clippy warnings, part 1.
There aer still a bunch of type too complex and
function takes too many arguments warnings that I'll fix later
(or ignore, since in the one case I did fix a function takes too
many arguments warning I think it made the code *less* readable).
commit ba54307540ed8a937ac08209730284fc653af85b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 30 13:22:42 2020 +0200
Fix light animations so they are removed when the light turns off.
commit 7e0f4bcbf0f4717145d8beac40d52e3acebbe2aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 21:10:20 2020 +0200
Fix crash in edge case for pixel art.
commit 56da06f7a351e2b949e9b014a90b974d511a0924
Merge: cf74d55f2 9f53a4a19
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:56:52 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:29:52 2020 +0200
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
The first concern was addressed by fixing the dimensions of the map
images drawn from the UI (so that we always use a square source
rectangle, rather than a rectangular one according to the dimensions of
the map). We also fixed the way rotation was done in the fragment
shader for north-facing sources to make it properly handle aspect ratio
(this was already done for north-facing targets). Together, these fix
rendering issues peculiar to rectangular maps.
The second and third concerns were jointly addressed by adding an
optional border color to every 2D image drawn by the UI. This turns
out not to waste extra space even though we hold a full f32 color
(to avoid an extra dependency on gfx's PackedColor), since voxel
images already take up more space than Optiion<[f32; 4]> requires.
This is then implemented automatically using the "border color"
wrapping method in the attached sampler.
Since this is implemented in graphics hardware, it only works (at
least naively) if the actual image bounds match the texture bounds.
Therefore, we altered the way the graphics cache stores images
with a border color to guarantee that they are always in their own
texture, whose size exactly matches their extent. Since the easiest
currently exposed way to set a border color is to do so for an
immutable texture, we went a bit further and added a new "immutable"
texture storage type used for these cases; currently, it is always
and automatically used only when there is a specified border color,
but in theory there's no reason we couldn't provide immutable-only
images that use the default wrapping mdoe (though clamp to border
is admittedly not a great default).
To fix the maps case specifically, we set the border color to a
translucent version of the ocean border color. This may need
tweaking going forward, which shouldn't be hard.
As part of this process, we had to modify graphics replacement to
make sure immutable images are *removed* when invalidated, rather
than just having a validity flag unset (this is normally done by
the UI to try to reuse allocations in place if images are updated
in benign ways, since the texture atlases used for Ui do not
support deallocation; currently this is only used for item images,
so there should be no overlap with immutable image replacement,
so this was purely precautionary).
Since we were already touching the relevant code, we also updated
the image dependency to a newer version that provides more ways
to avoid allocations, and made a few other changes that should
hopefully eliminate redundant most of the intermediate buffer
allocations we were performing for what should be zero-cost
conversions. This may slightly improve performance in some
cases.
commit ad18ce939940a8c697270f6e9b94db9942fd8295
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 13:21:09 2020 +0200
Fix continent scale hack.
commit 36b1cb074f5b195aebd7dbbc3da7f0246a1a18ec
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 12:11:40 2020 +0200
Enable loading different sized maps without a recompile.
We may want to tweak the effects of the continent_scale_hack.
commit 13b6d4d534cc4814b7cb3294ca41bbfea0a6b186
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 10:55:48 2020 +0200
Removing WORLD_SIZE, part 1.
Erased almost every instance of WORLD_SIZE and replaced it with a local
power of two, map_size_lg (which respects certain invariants; see
common/src/terrain/map.rs for more details about MapSizeLg). This also
means we can avoid a dependency on the world crate from client, as
desired.
Now that the rest of the code is not expecting a fixed WORLD_SIZE, the
next step is to arrange for maps to store their world size, and to use
that world size as a basis prior to loading the map (as well, probably,
as prior to configuring some of the noise functions).
commit 30b1d2c6428230a9eaa0d749cdcbbd6f1cbccd78
Merge: 7d56ba31b 1377b369f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:58 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 7d56ba31b445441461b28a07fc495d7d4f047c17
Merge: 2101113b4 598f14b25
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 1377b369f6db2258e910d467a5740f31789e3ded
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sun Jul 19 23:25:38 2020 +0200
more saturated pumpkins
commit ae8d50527f93bb0616c2ad46ce4dacb63bc37c6d
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sat Jul 18 20:29:56 2020 +0200
acacia models
commit 2101113b467e691de787392d7f20f1745f5637bd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 18 18:55:25 2020 +0200
Higher detail LOD.
commit add2cfae04b4385fa5590e11e2bd5229d9dee0aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 16 01:57:39 2020 +0200
Revert some irrelevant stuff.
commit 2e2ab3dc1eaa59a4aef7f8d34a53d8aae4c8553a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 15 13:30:49 2020 +0200
Fixing various things about shadows.
* Correcting optimal LISPSM parameter.
* Figure shadows are cast when they're not visible.
* Chunk shadows stay cast until you look away.
* Seamless cubemaps for point lights.
* Etc.
commit 6c31e6b56217274285b597af297036691ea5d897
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 19:50:26 2020 +0200
Fix shadow creation.
commit 6332cbe006115ae205597529cd8bbccd146c2cca
Merge: be438657c 930e0028b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:47:00 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit be438657c33d7b5bfb0a9582c3ed3fd366637323
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:28:08 2020 +0200
Tweaks to shadows.
Added shadow map resolution configuration, added seamless cubemaps,
documented all existing rendering options, and fixed a few Clippy
errors.
commit 23b4058906013c7d2a40c286e20e32c5fbd897ed
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 10:11:19 2020 +0200
Fix moon, use nonlinear noise for terrain.
Note that the latter has a bit of performance cost.
commit 7fbe5cbfbb9dc29607957b8e62f432a4deed193d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:23:02 2020 +0200
Address lies about max texture size.
commit bcfc62b5e13a1cdd83f57535fde4694720bebfd9
Merge: 75e3626a7 18a08e8fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:22:08 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 75e3626a785919f43fdcf2127c2b10e3e4df2f9f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:21:52 2020 +0200
OpenGL 3.3 minimum.
commit 18a08e8fe2739f02af99a5d2cb4e7c38c49e858b
Author: Monty Marz <m.marzouq@gmx.de>
Date: Tue Jul 7 23:57:52 2020 +0200
settings localization
commit 90c5d1ca3620092bc3ae10b2211489eb1cf6f5e8
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 21:11:48 2020 +0200
Lower near distance.
commit 0e66f02b25aaddaa2dfddbbc89cd67de54a9a7b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 20:09:01 2020 +0200
All sprites sway in the wind now.
commit db1401a6910bf42dcf502462c90038752ff5fbdb
Merge: 69e508d8c e8b4b29d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 19:34:17 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 69e508d8c94d8973033817ca86f357e466fc7c4d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 18:41:37 2020 +0200
Make it easy to switch to SIMD for math.
commit ffe0f5928c7a7e87d00cb5426b3b1d831d7e02fd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 21:21:12 2020 +0200
Fix some issues with underwater rendering.
commit bfda6da42f38fd02c31ee92c81ab785a3e50c2a0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 19:17:59 2020 +0200
Fix some minor display issues.
commit 0ed752e087968cf901301884aaeae698e32ef8a5
Merge: ccc6a06a8 518edcb85
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:14:21 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit ccc6a06a8d4504d6b9f7af7905a414d2ee06ab76
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:04:34 2020 +0200
Some minor changes.
commit 4e020246702889269efe1a191788992164c508d6
Merge: 50a64d927 e05c9267a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 16:17:40 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 50a64d927e6c4f4b0e4688e4cbfca694bc3f922a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 13:07:03 2020 +0200
Fix far plane.
commit 7dd06da34cae8f9ea3b6c889fe965181f3fd3949
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:25:35 2020 +0200
Add shadows.glsl.
commit 618a18c998778bf871b905a74657440fcc384c80
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:10:22 2020 +0200
Adding shadows, greedy meshing, and more.
commit eaea83fe6a5cb1cb0ba8beef888183c718258496
Merge: 267018495 2f89b863e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 22:47:07 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 2670184954a13e4a9e7a4e35ba79aac0c5fac2f7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 21:20:01 2020 +0200
Make civsim and sites deterministic.
For anything in worldgen where you use a HashMap, *please* think
carefully about which hasher you are going to use! This is
especially true if (for some reason) you are depending on hashmap
iteration order remaining stable for some aspect of worldgen.
commit f8376fd5dc72b4a9c2f51a6b4570d59c8b8e9343
Merge: 654f7e049 cdee191dd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 17:53:57 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 654f7e049258d9da27c09608bbe6a46ffa8787e5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed May 20 21:22:30 2020 +0200
Correct backface culling.
commit 560501df05ca725409b0f2e4eb31bdfdc15fd0c7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue May 19 17:22:06 2020 +0200
Greedy messhing for shadows.
commit a4d87e1875ca543436e6bbbeb20348facc5a52d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun May 17 05:59:00 2020 +0200
Shadow maps work for lantern.
commit 243d0837b8a3b08172c9a3c348d964d7ddc2a0a8
Merge: 04382dc28 71dd520cd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:53:13 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 04382dc28632b6c66e8821f6870c0daaa1c1901a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:22:17 2020 +0200
WIP: better graphics config, better LOD, shadow maps.
commit 22ddbad3eb32bfa70f0932176022208fe67ded81
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 18:54:09 2020 +0200
Minor shader fixes.
commit 746a10e8d01ac235f994b0cde78fa48998602a1f
Merge: 0f4a0e763 40ab94673
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 04:02:09 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0f4a0e763db3afbdc4fb0558611f38326ca87151
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 23:03:24 2020 +0200
Switch back to pop-in terrain.
commit dd74fa7e4a53667b38811d7aec58d7f6a68889bb
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 22:58:55 2020 +0200
LOD shading closer to voxel shading.
commit ef67bd58ba0bdaf622b078892d768263b6cba268
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 28 20:49:03 2020 +0200
Experimental underwater lighting.
commit 2c5ad9d07605e80d5fd5679dd3a5d70c605b86a9
Merge: 748279835 303967a6f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 22:35:24 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7482798354eda18c8207950080fc24d443a369de
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 21:59:55 2020 +0200
Replace discard in figure-frag.
commit d83b4ae69be4912f69bf7835f509c68a1c7770a4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:45:57 2020 +0200
Fix sprite lighting, HDR from focus_pos.
commit 0594238004f116274905fa0ed7c2b6c417ed1d29
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:14:10 2020 +0200
Proper HDR from point lights.
commit 48c93d2b41ce5743103d18e76cc228f5ac766492
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 14:01:43 2020 +0200
Brighter ambiance, darker LOD shadows.
commit e0452e895ccfa8a43f368cae3b8b8aedc24dad93
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 13:13:23 2020 +0200
More proper HDR.
commit 4c6da3ed16cfeebb455e40da5f557b4af9a499d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 00:13:10 2020 +0200
Trying LOD noise.
commit 682a3d74c85df5503ffe1fc1cc891bce789df1ad
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 23:11:08 2020 +0200
Fix LOD heights in towns.
commit cc39e5734e8b18f9077bf42e66337c1319dd6b6e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 21:01:23 2020 +0200
More LOD fixes.
commit 8116b21c2e51c836e77894e309ac273caf2917b3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:54:43 2020 +0200
I like this coloring.
commit bc2560ea90b36f4b46190005344232d993043ac3
Merge: 14effdd5d e690efe71
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:48:33 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 14effdd5db8747fcf3eb34f03b46b7792e92d1c5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:24:35 2020 +0200
Re-saturate.
commit 48a643955d4435b78179acba0beb4a979905cc31
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:23:57 2020 +0200
Various fixes.
commit f7b497a0c25f4ad4682c71dd1ed6f608052feb9b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 03:22:49 2020 +0200
Render figures again.
commit 44e4aad48deba8266b9f8bdfd3db096b381f5327
Merge: e6f0a5a98 9ec319a18
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 02:01:04 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit e6f0a5a981a82533ba188fff0a54ce98577bb152
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 24 16:12:20 2020 +0200
Add atmospheric scattering.
commit f2953087f691a8edbc001cb98ebf5059fc6f8ac0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 23 00:01:20 2020 +0200
Fix shadowing for specular reflections.
commit ddd4a67a9799b8d08c7dc0c2bec90621c2bed0e3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Apr 22 22:56:12 2020 +0200
HDR fixes.
commit 1015e60deef3c447381996277df7496707a63bd0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 21 18:25:19 2020 +0200
More lighting changes.
commit 80c264abd111fb237e57843efcb5c071d4f84613
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 13 00:29:59 2020 +0200
Lighting experiments.
commit 8414987e589dd5102bad89762a3adaccc0bfe957
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 9 02:38:40 2020 +0200
WIP -- lighting changes and soft shadows.
commit 9cd2b3fb0d6b49776c6dfe463e4169637250b11a
Merge: c7ea687eb 8b149ad11
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:29 2020 +0200
Merge branch 'sharp/new-lighting' into sharp/small-fixes
commit c7ea687ebbc5aace1b455f134a5bf49ce2c7434a
Merge: 476441531 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:02 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 8b149ad11ad4bb75018fcf9519baec27d1c95951
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:32:39 2020 +0200
Trying out a new lighting model.
commit b0ac9f36f755dd06f7c17c46150568064790864f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 07:56:11 2020 +0200
Use bicubic interpolation for terrain.
commit f6fc9307a121514b614bc50ef8eb055953e7da8a
Merge: 33140a295 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 05:01:41 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 4764415312aae6e9ac2d00e86e84577cb958f1ab
Merge: ed2d0111d 13388ee6a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 04:54:48 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 13388ee6a42943f3f79a9cb488346cef18e272fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 20:30:08 2020 +0200
Various fixes (to coloring and to soft shadows).
commit fbd084a94a067082a87cd6d28b82054709bc9265
Merge: 5a089863b 4fdf6896a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 18:50:38 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/map-colors
commit ed2d0111d994262ae836d84d1fe5a45e4de72a0b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 06:49:27 2020 +0200
Combining colors and LOD.
commit 88342640c6b835114d01c797b89fdede3b0a2108
Merge: 33140a295 5a089863b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:49:20 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 33140a2951b8212725f42c758b277aaec4d888f7
Merge: 4c65a5aed f34d4b379
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:36:21 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 5a089863beb01d4794bbe3580ada47b278715ea2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 03:17:49 2020 +0200
Making maps brighter.
This is probably not the right way to do it, but oh well!
commit 32b2c99109dd486aa922886081068f9c550c83f2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 02:46:36 2020 +0200
Horizon mapping and "layered" map generation.
Horizon mapping is a method of shadow mapping specific to height maps.
It can handle any angle between 0 and 90 degrees from the ground, as
long as know the horizontal direction in advance, by remembering only a
single angle (the "horizon angle" of the shadow map). More is explained
in common/src/msg/server.rs. We also remember the approximate height of
the largest occluder, to try to be able to generate soft shadows and
create a vertical position where the shadows can't go higher.
Additionally, map generation has been reworked. Instead of computing
everything from explicit samples, we pass in sampling functions that
return exactly what the map generator needs. This allows us to cleanly
separate the way we sample things like altitudes and colors from the map
generation process. We exploit this to generate maps *partially* on the
server (with colors and rivers, but not shading). We can then send the
partially completed map to the client, which can combine it with shadow
information to generate the final map. This is useful for two reasons:
first, it makes sure the client can apply shadow information by itself,
and second, it lets us pass the unshaded map for use with level of
detail functionality.
For similar reasons, river generation is split
out into its own layer, but for now we opt to still generate rivers on
the server (since the river wire format is more complicated to compress
and may require some extra work to make sure we have enough precision to
draw rivers well enough for LoD).
Finally, the mostly ad-hoc lighting we were performing has been (mostly)
replaced with explicit Phong reflection shading (including specular
highlights). Regularizing this seems useful and helps clarify the
"meaning" of the various light intensities, and helps us keep a more
physically plausible basis. However, its interaction with soft shadows
is still imperfect, and it's not yet clear to me what we need to do to
turn this into something useful for LoD.
commit f8926a5737ddc51f3d585c651a64c43677aae0f4
Merge: a1aee931e 875ae6ced
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Mar 13 13:32:42 2020 +0100
Merge remote-tracking branch 'origin/master' into sharp/map-colors
commit 4c65a5aed353b119aea65a2aaeb94549b67beb42
Author: Treeco <5021038-Treeco@users.noreply.gitlab.com>
Date: Mon Feb 24 16:48:05 2020 +0000
Made LOD setting slider exponential
commit 2fa7b2d20d7233dc8bfd64f9f7f54617575248f1
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 17:49:53 2020 +0000
Added mist to LoD
commit aab059a450b5f635777129ff82cc15b662965c3c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 15:14:06 2020 +0000
Added LoD slider
commit 779c36b538121c5ade3633ae5cb67bb14c8c3877
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:54:55 2020 +0000
Reduced cost of vertex pushing
commit 9fea150473906b166365b738ebcea07c697daf3d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:38:53 2020 +0000
Fixed maths, improved LoD resolution
commit 5481df38fea5bf183ff376a3337179cfaa5233dc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 11:22:50 2020 +0000
Dynamically relocate LoD vertices to enhance details
commit a3e36a50ababd615da7db1b26158c7906a5def01
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 18:13:51 2020 +0000
Simpler terrain spiral rendering
commit 255f450ae9ac8763db4bede075fb409161ed57cc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:53:17 2020 +0000
Better LoD precision
commit 3d027aebe812a5b8658a4eb8123dc9f61b3776d2
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:04:03 2020 +0000
Better falloff
commit be775c9484b457b2c0b1a494aec03392d0c70e76
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 15:30:45 2020 +0000
Applied good ideas from experimental branch
commit 58587b68545a23c5c04ab4574a4b94b3bc982246
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 16:15:13 2020 +0000
Minor fixes to LoD merging
commit 7b42aebd709c14df2db766aad61d9280ad24d84d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 15:04:44 2020 +0000
Capped LoD dragging
commit 8aafc559f87124e1ea5ca6e3ddc2aa0c242d793c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:54:37 2020 +0000
Better blending between LoD and terrain border
commit edd3455d5161792d87ddc8eadc0ecbad5532b284
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:40:19 2020 +0000
Fixed LoD z depth, added sea level offset
commit b9b06744620114dd5556e73f64fa93c145503a7c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:27:43 2020 +0000
Better LoD smoothing
commit a1aee931e790431560cd2d953ad61d9497072afd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Feb 21 14:52:17 2020 +0100
Adding shadows.
commit 2400786c13dd891c131ed86d48d05df516a8a778
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 13:48:40 2020 +0000
Use world map as LoD source
commit dbf650f504a4c25fbbc2096ac3616c736bf52d23
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Jan 20 00:48:14 2020 +0000
Better clouds at distance
commit 5e6f81b86cdb9730b9b056877b19257075fd5fa8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Jan 19 23:59:02 2020 +0000
sync
commit 745e7540ddb000cc645f612767b337c2ddc3f7c0
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 12:40:48 2019 +0000
Improved cloud falloff mist, faster noise sampling
commit f6a200d0cb866196ba57697466755f9e0c7ea5d8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 10:09:00 2019 +0000
Improved long-range depth precision, removed unnecessary LoD polygons
commit 63d1b2bb2292898d59fb4f4e502201103dfeb86f
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 20:57:46 2019 +0000
Working LoD shader
commit f13d98ee3e58f881e8b978861a67663b59ed91ec
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 11:03:40 2019 +0000
LoD first attempt (stack overflow issue)
2020-08-20 18:34:59 +00:00
|
|
|
|
let mut dh = downhill(map_size_lg, |posi| alt[posi], is_ocean_fn);
|
|
|
|
|
let (boundary_len, indirection, water_alt_pos, maxh) =
|
|
|
|
|
get_lakes(map_size_lg, |posi| alt[posi], &mut dh);
|
2020-06-21 21:47:49 +00:00
|
|
|
|
debug!(?maxh, "Max height");
|
2020-01-11 21:05:22 +00:00
|
|
|
|
let (mrec, mstack, mwrec) = {
|
(See sharp/lod-history) LOD, shadows, greedy meshing, new lighting, perf
---
Pretty much a Veloren fork at this point. Here's a high level overview of the changes (will be added to CHANGELOG just before merge).
At a high level this MR incorporates roughly two groups of changes.
The first group consists of new game features: more flexible map sizes, level of detail terrain, shadow maps, and a new lighting
engine. This is "feature work" that (mostly) only adds new things to Veloren, and mostly shouldn't affect old stuff.
The second big group of changes are those addressing the fallout from all the new features. These include performance fixes of
various sorts: the addition of multiple graphics options and optimization of the cheap ones to avoid work, switching all voxel
models to use some variant of greedy meshing, switching over much of our CPU-side vector math to exploit SIMD instructions
(coinciding with a fork of `vek`), and a rewrite of how the UI handles text rendering (coinciding with updates to our fork
of `conrod`). Making Veloren's hardcoded colors appear correct under the new lighting engine also required considerably
changes (TODO: Fill in this section when it's complete).
The second category of changes often heavily touches code owned by other people, including frequently modified code "owned" by a
handful of people, so I recommend that this code be reviewed particularly carefully.
---
At a high level (each will be described in more detail below):
- The world map has been refactored.
- The world size is no longer hardcoded (@zesterer).
- The map generation code was made generic to allow using it outside of the `world` crate (@zesterer).
- On world creation, we now compute *horizon maps* (@zesterer).
- The way we pass the world from the server to the client has been updated (@xMAC94x).
- Artifacts related to image rotation were fixed (@imbris).
- Multiflow rivers were enabled (@zesterer).
- In the process of making changes related to the world map, various incidental fixes and optimizations were required.
- The new *level of detail* feature was added (@zesterer wrote part of this and has checked out the rest).
- A new LOD terrain rendering step was added to the pipeline.
- The LOD terrain quality was made configurable via a graphics setting.
- Horizon maps were used to cast shadows from LOD chunks on both LOD and non-LOD terrain.
- A "voxelization" effect was incorporated into rendered LOD terrain to make it blend better into the world.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Veloren's lighting has been completely overhauled (@zesterer has already checked most of this out).
- A semi-accurate index of refraction was assigned to our materials.
- A new, more realistic, physically based approach to lighting was used using the *Ashikhmin Shirley* BRDF.
- We emulate *atmospheric scattering* using equations designed for measuring solar panel light exposure.
- We attempt to compute *realistic light attenuation* in water using its real material properties.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Point and directional lights now cast realistic shadows, using *shadow mapping.* (@imbris, @zesterer, @Treeco, @YuriMomo)
- Point light shadow maps were added to the rendering pipeline, using geometry shaders and *seamless cube maps*.
- Directional light shadows were added to the rendering pipeline, using LISPSM together with disabling *depth clamping*.
- "Shadow-only" chunks and NPCs were added to prevent shadows from models behind you from disappearing.
- In the process of making changes related to shadow maps, various incidental fixes and optimizations were required.
The addition of shadow maps, LOD terrain, and the new lighting all led to significant performance degradation, on top of other
changes happening in master. Therefore, a large number of performance improvements were also needed:
- The graphics options were made much more flexible and configurable, and shaders were optimize.
- New options were provided for how to render lights and shadows (@Pfauenauge, @zesterer).
- Graphic setting storage and configuration were overhauled to make adding new features easier (@Pfauenauge, @imbris).
- Shaders were rewritten to utilize GLSL's preprocessor to avoid overhead (@zesterer, @YuriMomo).
- In the process of making changes related to providing additional rendering options, various incidental fixes and optimizations were required.
- Voxel model creation was switched to use *greedy meshing.*
- A new voxel meshing method, greedy meshing, was added (@imbris).
- Uses of the older meshing methods were migrated to use greedy meshing (@imbris, @jshipsey, @Pfauenauge).
- New restrictions were added to terrain, figure, and sprites to future proof them for further optimizations (@jshipsey, @Pfauenauge, @zesterer).
- Most positions are now relative to either chunk or player position for better precision (@imbris, @zesterer, @scottc).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- Animation and terrain math were switched to use SIMD where possible.
- Fixes were made to vek to make its SIMD feature usable for us (@zesterer, @imbris).
- The interface and types used in bone animation were changed in various ways (@jshipsey, @Snowram, @Pfauenauge).
- Redundant code generation for body animation is now partly taken care of by a macro (@jshipsey, @Snowram, @Pfauenauge).
- Animation code was modified to to use vek's SIMD representation where possible (@jshipsey, @Snowram, @Pfauenauge).
- Terrain meshing code and shadow map math were also modified to use vek's SIMD representation (@imbris).
- SIMD instruction generation was enabled (@YuriMomo, @jshipsey, @Snowram, @imbris, @Angelonfira, @xMAC94x).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- The way we cache glyphs was completely refactored, fixed, and optimized.
- Our fork of `conrod` was optimized in various ways (@imbris).
- Our fork of `conrod` now exposes whether a widget was updated during the current frame (@imbris).
- Our use of the glyph cache was rewritten for correctness (@imbris).
- A *text cache* was introduced that lets us skip remeshing glyphs that have not changed (@imbris).
- Various changes were made to reduce pressure on the glyph cache, with more planned (@imbris, @Pfauenauge).
- In the process of making changes related to the glyph cache, various incidental fixes and optimizations were required.
- Colors were changed to keep Veloren's look consistent with master.
- Some older tree models were brought back (@Pfauenauge).
- TODO(@Sharp): All hardcoded colors were extracted and made hotloadable.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Hardcoded colors were fixed to conform to Veloren's style.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Color models were fixed to conform to Veloren's style.
A detailed description of the involved changes follows.
---
- The world size is no longer hardcoded. All functions dependent on world size now take a `WorldSizeLg`, which holds the base 2 logarithm of each actual world dimension and is guaranteed to maintain certain properties (outlined in `common/src/terrain/map.rs`). Additionally, many utility functions that utilize the world size were moved into `common` as well (mostly `common/src/terrain/mod.rs`). Finally, the world map format was updated in order to store its size explicitly, with a migration path from the old format that should work whenever the old formatted map was a square (practically always). See `world/src/sim/mod.rs` for these changes.
- The map generation code was made generic to allow using it outside of the `world` crate. The parts of the map generating code that do not need to query the world were moved over to `common/src/terrain/map.rs`, allowing them to be used from the client without creating a dependency on `world`. The rest of it was turned into helper functions in `world/src/sim/map.rs`, which can be passed as closures to the generic map generation code to complete its construction. This also means that colors are now passed in separately to the map generation function. See <https://veloren.net/devblog-78/> for more details.
- On world creation, we now compute *horizon maps*. See the function in `world/src/sim/util.rs`.
Given a height map and a plane intersecting that height map, our horizon maps allow us to encode enough information to reconstruct shadows for each point on the height map using only the *horizon angle* (the angle at which the sun starts to become visible). As Veloren's sun only covers one plane, this is sufficient for encoding sun shadows for LOD terrain, by encoding two angles per chunk (one for each 90 degrees the sun covers). We can also use this for the moon, if we want, since the moon follows the same path. Additionally, we store the *height* of the furthest occluder, to try to make the shadows volumetric; so this means 4 bytes in total for each chunk.
Support for horizon maps has been merged into the map functionality in common as well.
- The way we pass the world from the server to the client has been updated. Rather than passing the prerendered map, we instead pass three maps with values for each chunk; one with the color information, a second with altitude information, and a third with horizon map information. We then reconstruct the map on the client, together with some additional information we send from the server (like the sea level and maximum height). See `common/src/msg/server.rs` for a detailed description of the format of `WorldMapMsg`, and `server/src/libr.rs` and `client/src/lib.rs` for details of the map construction and parsing.
- Artifacts related to image rotation were fixed. See the commit message for commit SHA `cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e` for a detailed explanation. This involved changes to shaders, the addition of a new type of graphic (also reflected in the graphic cache) that allows specifying a border color (which automatically makes the associated texture immutable), and some related fixes. I reproduce the first two paragraphs of the MR description as well:
```
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
```
- Multiflow rivers were enabled.
This does not really need to be part of this MR, and would be easy to revert, but since it seemed to provide a nice improvement it's currently packaged with it.
We already computed multiple outflows from each chunk for erosion purposes long before this MR.
However, we never modified river rendering to be able to handle this case (just a single downhill river flow is complex enough!) so this was not exposed when deciding which chunks were rivers.
Now that
- In the process of making changes related to the world map, various incidental fixes and optimizations were required. Some examples of fixes include making sure terrain is never lowered to below sea level (to make the shadow maps report correct values), fixing map altitudes and colors to understand things like cliffs and "block level" coloring (that doesn'te xist on the column level), and fixing a crashbug when rendering images for the UI where source pixels are strongly rectangular. Some examples of related performance fixes include avoiding allocating a fresh vector for all the maps (i.e. copying it over to change the format from `[u32; n]` to `DynamicImage` and then copying again to convert to `RgbaImage`), and instead using the `gfx::memory::slice` function to accomplish the same thing. These sorts of changes are spread all arond the code.
This includes the additon of a new scene, `voxygen/src/scene/lod.rs`, a new pipeline `voxygen/src/render/pipeline/lod_terrain.rs`, and new shaders `assets/vxygen/shaders/lod-terrain-vert.glsl` and `assets/vxygen/shaders/lod-terrain-frag.glsl`, as well as associated changes to the renderer in `voxygen/src/render/renderer.rs`.
The main idea behind our initial approach to LOD was to take the world data we now get from the server (altitude, color, and horizon mapping).
- Some previously computed values were turned into shader uniforms for better prediction on weak processors. (@zesterer)
- Calls to power or trig functions were removed or replaced with multiplications, where possible.
- After some deliberation
- To properly handle sprite "waving" for nearby sprites,
We explicitly designed the greedy meshing system with figures and sprites in mind.
In both cases, we want to be able to *efficiently* pack many different models into the same texture, especially in cases where we know
we will either not be removing any of the grouped-together from the models from the texture, or will remove all of them at once (so
they can be packed into some specific subtexture).
For sprites, since we know every model in advance and never intend to deallocate them, we currently pack them all as efficiently as
possible into one giant tetxure atlas. However, in the future we might opt to pack them slightly less efficiently in exchange for
shrinking the sprite vertex size.
For figures, we pack all the textures for each *model* into the same atlas.
is a global texture atlas used for every sprite, and for figures which is why we have the ability to mesh multiple
models to the same texture area (using the simple texture atlas allocator) without requiring intermediate vector allocations.
This is accomplished by delaying the time when we actually write the color and light data to the texture until *after* all the
model vertices have been meshed; then, we can just allocate the whole color/light array at once, making the atlas we use an
exact fit. In computer science-y terms, we accomplish this delay by, after we perform the initial greedy meshing (without
texture information), not continuing to create the texture data, but instead constructing a *continuation*--that is, a function
that, when called, will execute the rest of the computation. We push this continuation (which in Rust terms is a `FnOnce` closure
that takes the `ColLightsInfo` that it is supposed to write to as context) onto a
onto a vector
resizing. To allow for suspended writes to texture data, Rust pointed out to me that the continuation that would eventually write the color and light data to the texture atlas (the one that is shared by all models sharing the same greedy mesher) would have to *own* whatever data it mshed. Because we often generate the model data to mesh as a temporary in `voxygen/src/load.rs`, the
- Matrix multiplications in the shader were reduced for figure data (@zesterer).
- Vertex "waves" for fluid data were removed.
- Terrain "bending" near edges was removed.
- Scaling was fixed to make sure empty space was not introduced in a space previously occupied by a block. It was also changed to take ownership of its voxel data,
rather than sharing it, to let it be used with meshing.
- Rust's nightly version was bumped in order to use the `array_map` function, which lets us reuse more code between the simple map and `FigureModelCache`.
- PositionedGlyph::standalone.
---
I tried to cite sources in many cases[^realtime],[^lloyd],[^lispsm],[^pbrt],[^greedy],[^tjunctions]
where I needed features from elsewhere but I am particularly grateful for the following resources,
esepcially where they have accompanying source code. I linked all of them that are accessible to the public (those that are not were
obtained through legal means).
[^realtime]: Eisemann, Elmar, Michael Schwarz, Ulf Assarsson, Michael Wimmer. Real-Time Shadows. A K Peters/CRC Press (T&F), 20160419.
[^lloyd]: Lloyd,B. 2007. [Logarithmic perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). PhD thesis, University of North Carolina.
[^lispsm]: Wimmer, M., Scherzer, D., and Purgathofer, W. 2004. [Light space perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). In Proceedings of Eurographics Symposium on Rendering 2004, pp. 143– 152.
[^pbrt]: Pharr, Matt, et al. [http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf](Physically Based Rendering: From Theory to Implementation). Third edition, Morgan Kaufmann Publishers/Elsevier, 2017.
[^greedy]: mikolalysenko. “Meshing in a Minecraft Game.” 0 FPS, 30 June 2012, <https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/>.
[^tjunctions]: blackflux. “Meshing in Voxel Engines – Part 1.” Blackflux.Com, 23 Feb. 2014, <https://blackflux.wordpress.com/2014/02/23/meshing-in-voxel-engines-part-1/>.
I am also especially grateful to Khronos, Wikiepdia, and stackoverflow for answering many of my specific questions while writing the MR.
---
Squashed commit of the following:
commit 300505e7305a2fdac722a808ee8538323f215f39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 18:46:25 2020 +0200
Fixing cargo doc and typo in CHANGELOG.
commit ec0aeb18e8499d7d84ef818331b4b65c3d76cea6
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 15:38:50 2020 +0200
Hopefully final commit for the LOD branch.
commit 5e8ea0b1eaac02903a02feb2eb038d195de4872f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 10:14:26 2020 +0200
Falling back to power as stopgap.
commit e44a1cbf46504ee9931a01bdc9033e145500d557
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 09:25:41 2020 +0200
Address imbris feedback.
Temporarily disables shiny water, lowers max VD.
These restrictions will be lifted soon after merging.
commit 561e25778a108ac3712f5ec2ce3a51234c4430d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 08:31:13 2020 +0200
Tweaking shaders a bit.
commit 7d19259078ce0dd7b3742ad7d0cb3fab3ece3fdc
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:59:43 2020 +0200
Fix view example as well.
commit 051cd4934e0fad2c0b15db4380a4189fa318679f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:29:06 2020 +0200
Fix meshing benchmark.
commit c95e07db3b4dcca285678985e65e31b927cb1c61
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 05:46:22 2020 +0200
Address MR feedback, fix scene clouds.
commit 1bfb816cabdb3ffc1e507a009c2d98696b4b573a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:39:36 2020 +0200
Incorporating Pfau's figure color changes.
New eyes and new humanoid colors.
commit 3f9b89a3ac7b3356b1dba0d1a8f6541357f81469
Merge: e2f5162e4 62c53963a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:29:41 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit e2f5162e4f96f4124aa43488f7245d341b3dcfd4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:28:38 2020 +0200
World colors are all hotloadable.
They live in assets/world/style/colors.ron.
Only a small handful of hardcoed colors remain in World; they are either
part of the map, or difficult to disentangle from the rest of the
computation. Comments are made where appropriate.
commit 62c53963abe1975009d34a8f9515a355bef24f31
Author: Marcel Märtens <marcel.cochem@googlemail.com>
Date: Wed Aug 19 15:59:00 2020 +0200
replace pretty_env_logger with tracing
commit 5b1625f99d9586fe80e2232f583ec5af9f953099
Merge: d71003acd 4942b5b39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:15:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit d71003acdabeff970b3928e97c26af6847b5b78e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:14:34 2020 +0200
Hotloading colors, part 1: colors in common.
Currently, this just entails humanoid colors. There are only three
colors not handled; the light emitter colors in
common/src/comp/inventory/item/tool.rs. These don't seem important
enough to me to warrant making hotloadable, at least not right now, but
if it's needed later we can always add them to the file.
commit 63b5e0e553eb2ea49276f192a6fc7dd65254270d
Merge: c32b337a4 6d2c4b9c1
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 13:05:37 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c32b337a46e10d9de473d178a94a3ccd61c39bb3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:52:04 2020 +0200
Fixing LOD grid, for real.
commit a166ae0360395387e09fb35a1f84210c2ce5ec24
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:28:05 2020 +0200
Addressing imbris's initial feedback.
Fixes two minor bugs: explosion particles were no longer spawning
randomly, and LOD grids were not perfectly even.
commit 4cbad004f44060994252dd3d38647a14a589712f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:27:58 2020 +0200
Bumping nightly per request.
commit 548680276aac77c25d43d16b5622f847d474dbef
Merge: acc098604 8f8b20c91
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:26:06 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit acc0986040589a3492f88a740bc3c3fc693b26d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:28:32 2020 +0200
Lower resolution due to lying drivers.
commit d3b878de2a52c358d2944a6bbd0555dad7fbdb10
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:15:38 2020 +0200
Fix issues msh encountered with Intel 4600.
commit 10245e0c1b0cb6fae10d86409435364edc6102ef
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 21:15:02 2020 +0200
Merge more models into one mesh than we did previously.
commit 3155c31e663c52ae5c3a53d5fb5665892a1a498a
Merge: 7204cc8a7 3c199280e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:35:22 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7204cc8a7a4f74a30306bd205d9834fee4bb944f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:34:43 2020 +0200
Fix not yet done NPC animations.
This forces them all to be the idle animation if not specified.
This fixes issues where you'd have giant NPCs in water.
commit bc83360f2a08918f19d417b5f772e1ff554dba08
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 19:36:37 2020 +0200
Try to fix some bugs:
- Z fighting with LOD terrain and water.
- Audio SFX not playing.
commit 1fd104aa603bf3781b6526a5cada46aeca3049dd
Merge: 862df3c99 7c2c392a3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 12:02:31 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 862df3c9976c4da9bd7cfd784f1a85973127968a
Merge: 0a4218ed9 75c1d4401
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 05:52:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0a4218ed9d541a2b34c133351bea38a99ddf4ea7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 22:27:14 2020 +0200
Fix particle depth.
commit f51dfdeb442d0dd5243dd2f344fa4be295bd0875
Merge: c6251a956 5e6dc0471
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:19:04 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit c6251a956ad376400dca5c23420cf8d213dc8fdf
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:15:46 2020 +0200
Cache figures more intelligently.
Cache figures for longer, and don't cache character states for the
player except where they actually affect the rendered model.
commit 0ed801d5404982c6fb63b1eaa4567d908b294c9d
Merge: c11b9bdf0 eea64f78f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 16:32:24 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c11b9bdf0a53bf9884d2f5a48fec9b01d582df1a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 11:47:15 2020 +0200
Remove unneeded Clippy annotation.
commit 16aa9ef40af56d69289d00aafb3deadfb8bd4f35
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 8 00:53:02 2020 +0200
Fix hotloading and Clippy.
commit 3dc973e0be5b758da1e9805eb764ad401374cd0c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 23:50:27 2020 +0200
Major speedups with SIMD.
commit fba64a7d93d5a96077ce87287bbce6ab9b7fbcae
Merge: 76429d00e d1e10b178
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:19 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 76429d00eea00d212fbd672a84ee91e75b19b938
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:10 2020 +0200
Add clippy.toml.
commit c79f512f84dbb83cb82b7954db68ff241dfd8e41
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 11:55:20 2020 +0200
Fix all clippy issues, clean up Rust code.
commit 6f90e010b3fbefb53b0d632e819931350015b6b8
Merge: 77a8c7c26 5929cfa5c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:30 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 77a8c7c267d3f44a1a62bd6b2274359973c5e4d4
Merge: b44e44232 44febaabd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:10 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 5929cfa5c713aa392110bbb62407f76caf53c3df
Author: jshipsey <jshipsey18@gmail.com>
Date: Thu Aug 6 20:47:27 2020 -0400
fixed in-hand arrow bug
commit b44e442325d828f1cd564d66908f89d09e80474b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 6 13:40:35 2020 +0200
Miscellaneous performance improvements.
commit be37acf287c1360d8085862526ac3365ffd1d768
Merge: 125d7fc6c c11876547
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 05:49:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 125d7fc6c4dcd8c8c5f27b8268a4d64f409f3644
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 04:55:31 2020 +0200
Abstract over simd vs. repr_c vectors.
Also some minor improvements to Event size.
commit d4d4956e9252e1241ce110b2aa85076c6b1e2a23
Merge: 5f3b7294a aced5f979
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:56:54 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 5f3b7294af1f8533edc2620b58863c248e2b07af
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:43:52 2020 +0200
Fix formatting issues I missed before.
commit a428a3ebba70dcab63dd0f8cd983120c90617271
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:41:51 2020 +0200
Fix clippy warnings, part 1.
There aer still a bunch of type too complex and
function takes too many arguments warnings that I'll fix later
(or ignore, since in the one case I did fix a function takes too
many arguments warning I think it made the code *less* readable).
commit ba54307540ed8a937ac08209730284fc653af85b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 30 13:22:42 2020 +0200
Fix light animations so they are removed when the light turns off.
commit 7e0f4bcbf0f4717145d8beac40d52e3acebbe2aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 21:10:20 2020 +0200
Fix crash in edge case for pixel art.
commit 56da06f7a351e2b949e9b014a90b974d511a0924
Merge: cf74d55f2 9f53a4a19
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:56:52 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:29:52 2020 +0200
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
The first concern was addressed by fixing the dimensions of the map
images drawn from the UI (so that we always use a square source
rectangle, rather than a rectangular one according to the dimensions of
the map). We also fixed the way rotation was done in the fragment
shader for north-facing sources to make it properly handle aspect ratio
(this was already done for north-facing targets). Together, these fix
rendering issues peculiar to rectangular maps.
The second and third concerns were jointly addressed by adding an
optional border color to every 2D image drawn by the UI. This turns
out not to waste extra space even though we hold a full f32 color
(to avoid an extra dependency on gfx's PackedColor), since voxel
images already take up more space than Optiion<[f32; 4]> requires.
This is then implemented automatically using the "border color"
wrapping method in the attached sampler.
Since this is implemented in graphics hardware, it only works (at
least naively) if the actual image bounds match the texture bounds.
Therefore, we altered the way the graphics cache stores images
with a border color to guarantee that they are always in their own
texture, whose size exactly matches their extent. Since the easiest
currently exposed way to set a border color is to do so for an
immutable texture, we went a bit further and added a new "immutable"
texture storage type used for these cases; currently, it is always
and automatically used only when there is a specified border color,
but in theory there's no reason we couldn't provide immutable-only
images that use the default wrapping mdoe (though clamp to border
is admittedly not a great default).
To fix the maps case specifically, we set the border color to a
translucent version of the ocean border color. This may need
tweaking going forward, which shouldn't be hard.
As part of this process, we had to modify graphics replacement to
make sure immutable images are *removed* when invalidated, rather
than just having a validity flag unset (this is normally done by
the UI to try to reuse allocations in place if images are updated
in benign ways, since the texture atlases used for Ui do not
support deallocation; currently this is only used for item images,
so there should be no overlap with immutable image replacement,
so this was purely precautionary).
Since we were already touching the relevant code, we also updated
the image dependency to a newer version that provides more ways
to avoid allocations, and made a few other changes that should
hopefully eliminate redundant most of the intermediate buffer
allocations we were performing for what should be zero-cost
conversions. This may slightly improve performance in some
cases.
commit ad18ce939940a8c697270f6e9b94db9942fd8295
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 13:21:09 2020 +0200
Fix continent scale hack.
commit 36b1cb074f5b195aebd7dbbc3da7f0246a1a18ec
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 12:11:40 2020 +0200
Enable loading different sized maps without a recompile.
We may want to tweak the effects of the continent_scale_hack.
commit 13b6d4d534cc4814b7cb3294ca41bbfea0a6b186
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 10:55:48 2020 +0200
Removing WORLD_SIZE, part 1.
Erased almost every instance of WORLD_SIZE and replaced it with a local
power of two, map_size_lg (which respects certain invariants; see
common/src/terrain/map.rs for more details about MapSizeLg). This also
means we can avoid a dependency on the world crate from client, as
desired.
Now that the rest of the code is not expecting a fixed WORLD_SIZE, the
next step is to arrange for maps to store their world size, and to use
that world size as a basis prior to loading the map (as well, probably,
as prior to configuring some of the noise functions).
commit 30b1d2c6428230a9eaa0d749cdcbbd6f1cbccd78
Merge: 7d56ba31b 1377b369f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:58 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 7d56ba31b445441461b28a07fc495d7d4f047c17
Merge: 2101113b4 598f14b25
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 1377b369f6db2258e910d467a5740f31789e3ded
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sun Jul 19 23:25:38 2020 +0200
more saturated pumpkins
commit ae8d50527f93bb0616c2ad46ce4dacb63bc37c6d
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sat Jul 18 20:29:56 2020 +0200
acacia models
commit 2101113b467e691de787392d7f20f1745f5637bd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 18 18:55:25 2020 +0200
Higher detail LOD.
commit add2cfae04b4385fa5590e11e2bd5229d9dee0aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 16 01:57:39 2020 +0200
Revert some irrelevant stuff.
commit 2e2ab3dc1eaa59a4aef7f8d34a53d8aae4c8553a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 15 13:30:49 2020 +0200
Fixing various things about shadows.
* Correcting optimal LISPSM parameter.
* Figure shadows are cast when they're not visible.
* Chunk shadows stay cast until you look away.
* Seamless cubemaps for point lights.
* Etc.
commit 6c31e6b56217274285b597af297036691ea5d897
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 19:50:26 2020 +0200
Fix shadow creation.
commit 6332cbe006115ae205597529cd8bbccd146c2cca
Merge: be438657c 930e0028b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:47:00 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit be438657c33d7b5bfb0a9582c3ed3fd366637323
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:28:08 2020 +0200
Tweaks to shadows.
Added shadow map resolution configuration, added seamless cubemaps,
documented all existing rendering options, and fixed a few Clippy
errors.
commit 23b4058906013c7d2a40c286e20e32c5fbd897ed
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 10:11:19 2020 +0200
Fix moon, use nonlinear noise for terrain.
Note that the latter has a bit of performance cost.
commit 7fbe5cbfbb9dc29607957b8e62f432a4deed193d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:23:02 2020 +0200
Address lies about max texture size.
commit bcfc62b5e13a1cdd83f57535fde4694720bebfd9
Merge: 75e3626a7 18a08e8fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:22:08 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 75e3626a785919f43fdcf2127c2b10e3e4df2f9f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:21:52 2020 +0200
OpenGL 3.3 minimum.
commit 18a08e8fe2739f02af99a5d2cb4e7c38c49e858b
Author: Monty Marz <m.marzouq@gmx.de>
Date: Tue Jul 7 23:57:52 2020 +0200
settings localization
commit 90c5d1ca3620092bc3ae10b2211489eb1cf6f5e8
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 21:11:48 2020 +0200
Lower near distance.
commit 0e66f02b25aaddaa2dfddbbc89cd67de54a9a7b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 20:09:01 2020 +0200
All sprites sway in the wind now.
commit db1401a6910bf42dcf502462c90038752ff5fbdb
Merge: 69e508d8c e8b4b29d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 19:34:17 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 69e508d8c94d8973033817ca86f357e466fc7c4d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 18:41:37 2020 +0200
Make it easy to switch to SIMD for math.
commit ffe0f5928c7a7e87d00cb5426b3b1d831d7e02fd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 21:21:12 2020 +0200
Fix some issues with underwater rendering.
commit bfda6da42f38fd02c31ee92c81ab785a3e50c2a0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 19:17:59 2020 +0200
Fix some minor display issues.
commit 0ed752e087968cf901301884aaeae698e32ef8a5
Merge: ccc6a06a8 518edcb85
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:14:21 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit ccc6a06a8d4504d6b9f7af7905a414d2ee06ab76
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:04:34 2020 +0200
Some minor changes.
commit 4e020246702889269efe1a191788992164c508d6
Merge: 50a64d927 e05c9267a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 16:17:40 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 50a64d927e6c4f4b0e4688e4cbfca694bc3f922a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 13:07:03 2020 +0200
Fix far plane.
commit 7dd06da34cae8f9ea3b6c889fe965181f3fd3949
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:25:35 2020 +0200
Add shadows.glsl.
commit 618a18c998778bf871b905a74657440fcc384c80
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:10:22 2020 +0200
Adding shadows, greedy meshing, and more.
commit eaea83fe6a5cb1cb0ba8beef888183c718258496
Merge: 267018495 2f89b863e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 22:47:07 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 2670184954a13e4a9e7a4e35ba79aac0c5fac2f7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 21:20:01 2020 +0200
Make civsim and sites deterministic.
For anything in worldgen where you use a HashMap, *please* think
carefully about which hasher you are going to use! This is
especially true if (for some reason) you are depending on hashmap
iteration order remaining stable for some aspect of worldgen.
commit f8376fd5dc72b4a9c2f51a6b4570d59c8b8e9343
Merge: 654f7e049 cdee191dd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 17:53:57 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 654f7e049258d9da27c09608bbe6a46ffa8787e5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed May 20 21:22:30 2020 +0200
Correct backface culling.
commit 560501df05ca725409b0f2e4eb31bdfdc15fd0c7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue May 19 17:22:06 2020 +0200
Greedy messhing for shadows.
commit a4d87e1875ca543436e6bbbeb20348facc5a52d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun May 17 05:59:00 2020 +0200
Shadow maps work for lantern.
commit 243d0837b8a3b08172c9a3c348d964d7ddc2a0a8
Merge: 04382dc28 71dd520cd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:53:13 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 04382dc28632b6c66e8821f6870c0daaa1c1901a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:22:17 2020 +0200
WIP: better graphics config, better LOD, shadow maps.
commit 22ddbad3eb32bfa70f0932176022208fe67ded81
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 18:54:09 2020 +0200
Minor shader fixes.
commit 746a10e8d01ac235f994b0cde78fa48998602a1f
Merge: 0f4a0e763 40ab94673
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 04:02:09 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0f4a0e763db3afbdc4fb0558611f38326ca87151
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 23:03:24 2020 +0200
Switch back to pop-in terrain.
commit dd74fa7e4a53667b38811d7aec58d7f6a68889bb
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 22:58:55 2020 +0200
LOD shading closer to voxel shading.
commit ef67bd58ba0bdaf622b078892d768263b6cba268
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 28 20:49:03 2020 +0200
Experimental underwater lighting.
commit 2c5ad9d07605e80d5fd5679dd3a5d70c605b86a9
Merge: 748279835 303967a6f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 22:35:24 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7482798354eda18c8207950080fc24d443a369de
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 21:59:55 2020 +0200
Replace discard in figure-frag.
commit d83b4ae69be4912f69bf7835f509c68a1c7770a4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:45:57 2020 +0200
Fix sprite lighting, HDR from focus_pos.
commit 0594238004f116274905fa0ed7c2b6c417ed1d29
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:14:10 2020 +0200
Proper HDR from point lights.
commit 48c93d2b41ce5743103d18e76cc228f5ac766492
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 14:01:43 2020 +0200
Brighter ambiance, darker LOD shadows.
commit e0452e895ccfa8a43f368cae3b8b8aedc24dad93
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 13:13:23 2020 +0200
More proper HDR.
commit 4c6da3ed16cfeebb455e40da5f557b4af9a499d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 00:13:10 2020 +0200
Trying LOD noise.
commit 682a3d74c85df5503ffe1fc1cc891bce789df1ad
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 23:11:08 2020 +0200
Fix LOD heights in towns.
commit cc39e5734e8b18f9077bf42e66337c1319dd6b6e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 21:01:23 2020 +0200
More LOD fixes.
commit 8116b21c2e51c836e77894e309ac273caf2917b3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:54:43 2020 +0200
I like this coloring.
commit bc2560ea90b36f4b46190005344232d993043ac3
Merge: 14effdd5d e690efe71
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:48:33 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 14effdd5db8747fcf3eb34f03b46b7792e92d1c5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:24:35 2020 +0200
Re-saturate.
commit 48a643955d4435b78179acba0beb4a979905cc31
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:23:57 2020 +0200
Various fixes.
commit f7b497a0c25f4ad4682c71dd1ed6f608052feb9b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 03:22:49 2020 +0200
Render figures again.
commit 44e4aad48deba8266b9f8bdfd3db096b381f5327
Merge: e6f0a5a98 9ec319a18
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 02:01:04 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit e6f0a5a981a82533ba188fff0a54ce98577bb152
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 24 16:12:20 2020 +0200
Add atmospheric scattering.
commit f2953087f691a8edbc001cb98ebf5059fc6f8ac0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 23 00:01:20 2020 +0200
Fix shadowing for specular reflections.
commit ddd4a67a9799b8d08c7dc0c2bec90621c2bed0e3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Apr 22 22:56:12 2020 +0200
HDR fixes.
commit 1015e60deef3c447381996277df7496707a63bd0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 21 18:25:19 2020 +0200
More lighting changes.
commit 80c264abd111fb237e57843efcb5c071d4f84613
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 13 00:29:59 2020 +0200
Lighting experiments.
commit 8414987e589dd5102bad89762a3adaccc0bfe957
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 9 02:38:40 2020 +0200
WIP -- lighting changes and soft shadows.
commit 9cd2b3fb0d6b49776c6dfe463e4169637250b11a
Merge: c7ea687eb 8b149ad11
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:29 2020 +0200
Merge branch 'sharp/new-lighting' into sharp/small-fixes
commit c7ea687ebbc5aace1b455f134a5bf49ce2c7434a
Merge: 476441531 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:02 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 8b149ad11ad4bb75018fcf9519baec27d1c95951
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:32:39 2020 +0200
Trying out a new lighting model.
commit b0ac9f36f755dd06f7c17c46150568064790864f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 07:56:11 2020 +0200
Use bicubic interpolation for terrain.
commit f6fc9307a121514b614bc50ef8eb055953e7da8a
Merge: 33140a295 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 05:01:41 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 4764415312aae6e9ac2d00e86e84577cb958f1ab
Merge: ed2d0111d 13388ee6a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 04:54:48 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 13388ee6a42943f3f79a9cb488346cef18e272fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 20:30:08 2020 +0200
Various fixes (to coloring and to soft shadows).
commit fbd084a94a067082a87cd6d28b82054709bc9265
Merge: 5a089863b 4fdf6896a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 18:50:38 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/map-colors
commit ed2d0111d994262ae836d84d1fe5a45e4de72a0b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 06:49:27 2020 +0200
Combining colors and LOD.
commit 88342640c6b835114d01c797b89fdede3b0a2108
Merge: 33140a295 5a089863b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:49:20 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 33140a2951b8212725f42c758b277aaec4d888f7
Merge: 4c65a5aed f34d4b379
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:36:21 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 5a089863beb01d4794bbe3580ada47b278715ea2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 03:17:49 2020 +0200
Making maps brighter.
This is probably not the right way to do it, but oh well!
commit 32b2c99109dd486aa922886081068f9c550c83f2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 02:46:36 2020 +0200
Horizon mapping and "layered" map generation.
Horizon mapping is a method of shadow mapping specific to height maps.
It can handle any angle between 0 and 90 degrees from the ground, as
long as know the horizontal direction in advance, by remembering only a
single angle (the "horizon angle" of the shadow map). More is explained
in common/src/msg/server.rs. We also remember the approximate height of
the largest occluder, to try to be able to generate soft shadows and
create a vertical position where the shadows can't go higher.
Additionally, map generation has been reworked. Instead of computing
everything from explicit samples, we pass in sampling functions that
return exactly what the map generator needs. This allows us to cleanly
separate the way we sample things like altitudes and colors from the map
generation process. We exploit this to generate maps *partially* on the
server (with colors and rivers, but not shading). We can then send the
partially completed map to the client, which can combine it with shadow
information to generate the final map. This is useful for two reasons:
first, it makes sure the client can apply shadow information by itself,
and second, it lets us pass the unshaded map for use with level of
detail functionality.
For similar reasons, river generation is split
out into its own layer, but for now we opt to still generate rivers on
the server (since the river wire format is more complicated to compress
and may require some extra work to make sure we have enough precision to
draw rivers well enough for LoD).
Finally, the mostly ad-hoc lighting we were performing has been (mostly)
replaced with explicit Phong reflection shading (including specular
highlights). Regularizing this seems useful and helps clarify the
"meaning" of the various light intensities, and helps us keep a more
physically plausible basis. However, its interaction with soft shadows
is still imperfect, and it's not yet clear to me what we need to do to
turn this into something useful for LoD.
commit f8926a5737ddc51f3d585c651a64c43677aae0f4
Merge: a1aee931e 875ae6ced
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Mar 13 13:32:42 2020 +0100
Merge remote-tracking branch 'origin/master' into sharp/map-colors
commit 4c65a5aed353b119aea65a2aaeb94549b67beb42
Author: Treeco <5021038-Treeco@users.noreply.gitlab.com>
Date: Mon Feb 24 16:48:05 2020 +0000
Made LOD setting slider exponential
commit 2fa7b2d20d7233dc8bfd64f9f7f54617575248f1
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 17:49:53 2020 +0000
Added mist to LoD
commit aab059a450b5f635777129ff82cc15b662965c3c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 15:14:06 2020 +0000
Added LoD slider
commit 779c36b538121c5ade3633ae5cb67bb14c8c3877
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:54:55 2020 +0000
Reduced cost of vertex pushing
commit 9fea150473906b166365b738ebcea07c697daf3d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:38:53 2020 +0000
Fixed maths, improved LoD resolution
commit 5481df38fea5bf183ff376a3337179cfaa5233dc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 11:22:50 2020 +0000
Dynamically relocate LoD vertices to enhance details
commit a3e36a50ababd615da7db1b26158c7906a5def01
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 18:13:51 2020 +0000
Simpler terrain spiral rendering
commit 255f450ae9ac8763db4bede075fb409161ed57cc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:53:17 2020 +0000
Better LoD precision
commit 3d027aebe812a5b8658a4eb8123dc9f61b3776d2
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:04:03 2020 +0000
Better falloff
commit be775c9484b457b2c0b1a494aec03392d0c70e76
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 15:30:45 2020 +0000
Applied good ideas from experimental branch
commit 58587b68545a23c5c04ab4574a4b94b3bc982246
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 16:15:13 2020 +0000
Minor fixes to LoD merging
commit 7b42aebd709c14df2db766aad61d9280ad24d84d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 15:04:44 2020 +0000
Capped LoD dragging
commit 8aafc559f87124e1ea5ca6e3ddc2aa0c242d793c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:54:37 2020 +0000
Better blending between LoD and terrain border
commit edd3455d5161792d87ddc8eadc0ecbad5532b284
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:40:19 2020 +0000
Fixed LoD z depth, added sea level offset
commit b9b06744620114dd5556e73f64fa93c145503a7c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:27:43 2020 +0000
Better LoD smoothing
commit a1aee931e790431560cd2d953ad61d9497072afd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Feb 21 14:52:17 2020 +0100
Adding shadows.
commit 2400786c13dd891c131ed86d48d05df516a8a778
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 13:48:40 2020 +0000
Use world map as LoD source
commit dbf650f504a4c25fbbc2096ac3616c736bf52d23
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Jan 20 00:48:14 2020 +0000
Better clouds at distance
commit 5e6f81b86cdb9730b9b056877b19257075fd5fa8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Jan 19 23:59:02 2020 +0000
sync
commit 745e7540ddb000cc645f612767b337c2ddc3f7c0
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 12:40:48 2019 +0000
Improved cloud falloff mist, faster noise sampling
commit f6a200d0cb866196ba57697466755f9e0c7ea5d8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 10:09:00 2019 +0000
Improved long-range depth precision, removed unnecessary LoD polygons
commit 63d1b2bb2292898d59fb4f4e502201103dfeb86f
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 20:57:46 2019 +0000
Working LoD shader
commit f13d98ee3e58f881e8b978861a67663b59ed91ec
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 11:03:40 2019 +0000
LoD first attempt (stack overflow issue)
2020-08-20 18:34:59 +00:00
|
|
|
|
let mut wh = vec![0.0; map_size_lg.chunks_len()];
|
2020-01-11 21:05:22 +00:00
|
|
|
|
get_multi_rec(
|
(See sharp/lod-history) LOD, shadows, greedy meshing, new lighting, perf
---
Pretty much a Veloren fork at this point. Here's a high level overview of the changes (will be added to CHANGELOG just before merge).
At a high level this MR incorporates roughly two groups of changes.
The first group consists of new game features: more flexible map sizes, level of detail terrain, shadow maps, and a new lighting
engine. This is "feature work" that (mostly) only adds new things to Veloren, and mostly shouldn't affect old stuff.
The second big group of changes are those addressing the fallout from all the new features. These include performance fixes of
various sorts: the addition of multiple graphics options and optimization of the cheap ones to avoid work, switching all voxel
models to use some variant of greedy meshing, switching over much of our CPU-side vector math to exploit SIMD instructions
(coinciding with a fork of `vek`), and a rewrite of how the UI handles text rendering (coinciding with updates to our fork
of `conrod`). Making Veloren's hardcoded colors appear correct under the new lighting engine also required considerably
changes (TODO: Fill in this section when it's complete).
The second category of changes often heavily touches code owned by other people, including frequently modified code "owned" by a
handful of people, so I recommend that this code be reviewed particularly carefully.
---
At a high level (each will be described in more detail below):
- The world map has been refactored.
- The world size is no longer hardcoded (@zesterer).
- The map generation code was made generic to allow using it outside of the `world` crate (@zesterer).
- On world creation, we now compute *horizon maps* (@zesterer).
- The way we pass the world from the server to the client has been updated (@xMAC94x).
- Artifacts related to image rotation were fixed (@imbris).
- Multiflow rivers were enabled (@zesterer).
- In the process of making changes related to the world map, various incidental fixes and optimizations were required.
- The new *level of detail* feature was added (@zesterer wrote part of this and has checked out the rest).
- A new LOD terrain rendering step was added to the pipeline.
- The LOD terrain quality was made configurable via a graphics setting.
- Horizon maps were used to cast shadows from LOD chunks on both LOD and non-LOD terrain.
- A "voxelization" effect was incorporated into rendered LOD terrain to make it blend better into the world.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Veloren's lighting has been completely overhauled (@zesterer has already checked most of this out).
- A semi-accurate index of refraction was assigned to our materials.
- A new, more realistic, physically based approach to lighting was used using the *Ashikhmin Shirley* BRDF.
- We emulate *atmospheric scattering* using equations designed for measuring solar panel light exposure.
- We attempt to compute *realistic light attenuation* in water using its real material properties.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Point and directional lights now cast realistic shadows, using *shadow mapping.* (@imbris, @zesterer, @Treeco, @YuriMomo)
- Point light shadow maps were added to the rendering pipeline, using geometry shaders and *seamless cube maps*.
- Directional light shadows were added to the rendering pipeline, using LISPSM together with disabling *depth clamping*.
- "Shadow-only" chunks and NPCs were added to prevent shadows from models behind you from disappearing.
- In the process of making changes related to shadow maps, various incidental fixes and optimizations were required.
The addition of shadow maps, LOD terrain, and the new lighting all led to significant performance degradation, on top of other
changes happening in master. Therefore, a large number of performance improvements were also needed:
- The graphics options were made much more flexible and configurable, and shaders were optimize.
- New options were provided for how to render lights and shadows (@Pfauenauge, @zesterer).
- Graphic setting storage and configuration were overhauled to make adding new features easier (@Pfauenauge, @imbris).
- Shaders were rewritten to utilize GLSL's preprocessor to avoid overhead (@zesterer, @YuriMomo).
- In the process of making changes related to providing additional rendering options, various incidental fixes and optimizations were required.
- Voxel model creation was switched to use *greedy meshing.*
- A new voxel meshing method, greedy meshing, was added (@imbris).
- Uses of the older meshing methods were migrated to use greedy meshing (@imbris, @jshipsey, @Pfauenauge).
- New restrictions were added to terrain, figure, and sprites to future proof them for further optimizations (@jshipsey, @Pfauenauge, @zesterer).
- Most positions are now relative to either chunk or player position for better precision (@imbris, @zesterer, @scottc).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- Animation and terrain math were switched to use SIMD where possible.
- Fixes were made to vek to make its SIMD feature usable for us (@zesterer, @imbris).
- The interface and types used in bone animation were changed in various ways (@jshipsey, @Snowram, @Pfauenauge).
- Redundant code generation for body animation is now partly taken care of by a macro (@jshipsey, @Snowram, @Pfauenauge).
- Animation code was modified to to use vek's SIMD representation where possible (@jshipsey, @Snowram, @Pfauenauge).
- Terrain meshing code and shadow map math were also modified to use vek's SIMD representation (@imbris).
- SIMD instruction generation was enabled (@YuriMomo, @jshipsey, @Snowram, @imbris, @Angelonfira, @xMAC94x).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- The way we cache glyphs was completely refactored, fixed, and optimized.
- Our fork of `conrod` was optimized in various ways (@imbris).
- Our fork of `conrod` now exposes whether a widget was updated during the current frame (@imbris).
- Our use of the glyph cache was rewritten for correctness (@imbris).
- A *text cache* was introduced that lets us skip remeshing glyphs that have not changed (@imbris).
- Various changes were made to reduce pressure on the glyph cache, with more planned (@imbris, @Pfauenauge).
- In the process of making changes related to the glyph cache, various incidental fixes and optimizations were required.
- Colors were changed to keep Veloren's look consistent with master.
- Some older tree models were brought back (@Pfauenauge).
- TODO(@Sharp): All hardcoded colors were extracted and made hotloadable.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Hardcoded colors were fixed to conform to Veloren's style.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Color models were fixed to conform to Veloren's style.
A detailed description of the involved changes follows.
---
- The world size is no longer hardcoded. All functions dependent on world size now take a `WorldSizeLg`, which holds the base 2 logarithm of each actual world dimension and is guaranteed to maintain certain properties (outlined in `common/src/terrain/map.rs`). Additionally, many utility functions that utilize the world size were moved into `common` as well (mostly `common/src/terrain/mod.rs`). Finally, the world map format was updated in order to store its size explicitly, with a migration path from the old format that should work whenever the old formatted map was a square (practically always). See `world/src/sim/mod.rs` for these changes.
- The map generation code was made generic to allow using it outside of the `world` crate. The parts of the map generating code that do not need to query the world were moved over to `common/src/terrain/map.rs`, allowing them to be used from the client without creating a dependency on `world`. The rest of it was turned into helper functions in `world/src/sim/map.rs`, which can be passed as closures to the generic map generation code to complete its construction. This also means that colors are now passed in separately to the map generation function. See <https://veloren.net/devblog-78/> for more details.
- On world creation, we now compute *horizon maps*. See the function in `world/src/sim/util.rs`.
Given a height map and a plane intersecting that height map, our horizon maps allow us to encode enough information to reconstruct shadows for each point on the height map using only the *horizon angle* (the angle at which the sun starts to become visible). As Veloren's sun only covers one plane, this is sufficient for encoding sun shadows for LOD terrain, by encoding two angles per chunk (one for each 90 degrees the sun covers). We can also use this for the moon, if we want, since the moon follows the same path. Additionally, we store the *height* of the furthest occluder, to try to make the shadows volumetric; so this means 4 bytes in total for each chunk.
Support for horizon maps has been merged into the map functionality in common as well.
- The way we pass the world from the server to the client has been updated. Rather than passing the prerendered map, we instead pass three maps with values for each chunk; one with the color information, a second with altitude information, and a third with horizon map information. We then reconstruct the map on the client, together with some additional information we send from the server (like the sea level and maximum height). See `common/src/msg/server.rs` for a detailed description of the format of `WorldMapMsg`, and `server/src/libr.rs` and `client/src/lib.rs` for details of the map construction and parsing.
- Artifacts related to image rotation were fixed. See the commit message for commit SHA `cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e` for a detailed explanation. This involved changes to shaders, the addition of a new type of graphic (also reflected in the graphic cache) that allows specifying a border color (which automatically makes the associated texture immutable), and some related fixes. I reproduce the first two paragraphs of the MR description as well:
```
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
```
- Multiflow rivers were enabled.
This does not really need to be part of this MR, and would be easy to revert, but since it seemed to provide a nice improvement it's currently packaged with it.
We already computed multiple outflows from each chunk for erosion purposes long before this MR.
However, we never modified river rendering to be able to handle this case (just a single downhill river flow is complex enough!) so this was not exposed when deciding which chunks were rivers.
Now that
- In the process of making changes related to the world map, various incidental fixes and optimizations were required. Some examples of fixes include making sure terrain is never lowered to below sea level (to make the shadow maps report correct values), fixing map altitudes and colors to understand things like cliffs and "block level" coloring (that doesn'te xist on the column level), and fixing a crashbug when rendering images for the UI where source pixels are strongly rectangular. Some examples of related performance fixes include avoiding allocating a fresh vector for all the maps (i.e. copying it over to change the format from `[u32; n]` to `DynamicImage` and then copying again to convert to `RgbaImage`), and instead using the `gfx::memory::slice` function to accomplish the same thing. These sorts of changes are spread all arond the code.
This includes the additon of a new scene, `voxygen/src/scene/lod.rs`, a new pipeline `voxygen/src/render/pipeline/lod_terrain.rs`, and new shaders `assets/vxygen/shaders/lod-terrain-vert.glsl` and `assets/vxygen/shaders/lod-terrain-frag.glsl`, as well as associated changes to the renderer in `voxygen/src/render/renderer.rs`.
The main idea behind our initial approach to LOD was to take the world data we now get from the server (altitude, color, and horizon mapping).
- Some previously computed values were turned into shader uniforms for better prediction on weak processors. (@zesterer)
- Calls to power or trig functions were removed or replaced with multiplications, where possible.
- After some deliberation
- To properly handle sprite "waving" for nearby sprites,
We explicitly designed the greedy meshing system with figures and sprites in mind.
In both cases, we want to be able to *efficiently* pack many different models into the same texture, especially in cases where we know
we will either not be removing any of the grouped-together from the models from the texture, or will remove all of them at once (so
they can be packed into some specific subtexture).
For sprites, since we know every model in advance and never intend to deallocate them, we currently pack them all as efficiently as
possible into one giant tetxure atlas. However, in the future we might opt to pack them slightly less efficiently in exchange for
shrinking the sprite vertex size.
For figures, we pack all the textures for each *model* into the same atlas.
is a global texture atlas used for every sprite, and for figures which is why we have the ability to mesh multiple
models to the same texture area (using the simple texture atlas allocator) without requiring intermediate vector allocations.
This is accomplished by delaying the time when we actually write the color and light data to the texture until *after* all the
model vertices have been meshed; then, we can just allocate the whole color/light array at once, making the atlas we use an
exact fit. In computer science-y terms, we accomplish this delay by, after we perform the initial greedy meshing (without
texture information), not continuing to create the texture data, but instead constructing a *continuation*--that is, a function
that, when called, will execute the rest of the computation. We push this continuation (which in Rust terms is a `FnOnce` closure
that takes the `ColLightsInfo` that it is supposed to write to as context) onto a
onto a vector
resizing. To allow for suspended writes to texture data, Rust pointed out to me that the continuation that would eventually write the color and light data to the texture atlas (the one that is shared by all models sharing the same greedy mesher) would have to *own* whatever data it mshed. Because we often generate the model data to mesh as a temporary in `voxygen/src/load.rs`, the
- Matrix multiplications in the shader were reduced for figure data (@zesterer).
- Vertex "waves" for fluid data were removed.
- Terrain "bending" near edges was removed.
- Scaling was fixed to make sure empty space was not introduced in a space previously occupied by a block. It was also changed to take ownership of its voxel data,
rather than sharing it, to let it be used with meshing.
- Rust's nightly version was bumped in order to use the `array_map` function, which lets us reuse more code between the simple map and `FigureModelCache`.
- PositionedGlyph::standalone.
---
I tried to cite sources in many cases[^realtime],[^lloyd],[^lispsm],[^pbrt],[^greedy],[^tjunctions]
where I needed features from elsewhere but I am particularly grateful for the following resources,
esepcially where they have accompanying source code. I linked all of them that are accessible to the public (those that are not were
obtained through legal means).
[^realtime]: Eisemann, Elmar, Michael Schwarz, Ulf Assarsson, Michael Wimmer. Real-Time Shadows. A K Peters/CRC Press (T&F), 20160419.
[^lloyd]: Lloyd,B. 2007. [Logarithmic perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). PhD thesis, University of North Carolina.
[^lispsm]: Wimmer, M., Scherzer, D., and Purgathofer, W. 2004. [Light space perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). In Proceedings of Eurographics Symposium on Rendering 2004, pp. 143– 152.
[^pbrt]: Pharr, Matt, et al. [http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf](Physically Based Rendering: From Theory to Implementation). Third edition, Morgan Kaufmann Publishers/Elsevier, 2017.
[^greedy]: mikolalysenko. “Meshing in a Minecraft Game.” 0 FPS, 30 June 2012, <https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/>.
[^tjunctions]: blackflux. “Meshing in Voxel Engines – Part 1.” Blackflux.Com, 23 Feb. 2014, <https://blackflux.wordpress.com/2014/02/23/meshing-in-voxel-engines-part-1/>.
I am also especially grateful to Khronos, Wikiepdia, and stackoverflow for answering many of my specific questions while writing the MR.
---
Squashed commit of the following:
commit 300505e7305a2fdac722a808ee8538323f215f39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 18:46:25 2020 +0200
Fixing cargo doc and typo in CHANGELOG.
commit ec0aeb18e8499d7d84ef818331b4b65c3d76cea6
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 15:38:50 2020 +0200
Hopefully final commit for the LOD branch.
commit 5e8ea0b1eaac02903a02feb2eb038d195de4872f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 10:14:26 2020 +0200
Falling back to power as stopgap.
commit e44a1cbf46504ee9931a01bdc9033e145500d557
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 09:25:41 2020 +0200
Address imbris feedback.
Temporarily disables shiny water, lowers max VD.
These restrictions will be lifted soon after merging.
commit 561e25778a108ac3712f5ec2ce3a51234c4430d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 08:31:13 2020 +0200
Tweaking shaders a bit.
commit 7d19259078ce0dd7b3742ad7d0cb3fab3ece3fdc
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:59:43 2020 +0200
Fix view example as well.
commit 051cd4934e0fad2c0b15db4380a4189fa318679f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:29:06 2020 +0200
Fix meshing benchmark.
commit c95e07db3b4dcca285678985e65e31b927cb1c61
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 05:46:22 2020 +0200
Address MR feedback, fix scene clouds.
commit 1bfb816cabdb3ffc1e507a009c2d98696b4b573a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:39:36 2020 +0200
Incorporating Pfau's figure color changes.
New eyes and new humanoid colors.
commit 3f9b89a3ac7b3356b1dba0d1a8f6541357f81469
Merge: e2f5162e4 62c53963a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:29:41 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit e2f5162e4f96f4124aa43488f7245d341b3dcfd4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:28:38 2020 +0200
World colors are all hotloadable.
They live in assets/world/style/colors.ron.
Only a small handful of hardcoed colors remain in World; they are either
part of the map, or difficult to disentangle from the rest of the
computation. Comments are made where appropriate.
commit 62c53963abe1975009d34a8f9515a355bef24f31
Author: Marcel Märtens <marcel.cochem@googlemail.com>
Date: Wed Aug 19 15:59:00 2020 +0200
replace pretty_env_logger with tracing
commit 5b1625f99d9586fe80e2232f583ec5af9f953099
Merge: d71003acd 4942b5b39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:15:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit d71003acdabeff970b3928e97c26af6847b5b78e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:14:34 2020 +0200
Hotloading colors, part 1: colors in common.
Currently, this just entails humanoid colors. There are only three
colors not handled; the light emitter colors in
common/src/comp/inventory/item/tool.rs. These don't seem important
enough to me to warrant making hotloadable, at least not right now, but
if it's needed later we can always add them to the file.
commit 63b5e0e553eb2ea49276f192a6fc7dd65254270d
Merge: c32b337a4 6d2c4b9c1
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 13:05:37 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c32b337a46e10d9de473d178a94a3ccd61c39bb3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:52:04 2020 +0200
Fixing LOD grid, for real.
commit a166ae0360395387e09fb35a1f84210c2ce5ec24
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:28:05 2020 +0200
Addressing imbris's initial feedback.
Fixes two minor bugs: explosion particles were no longer spawning
randomly, and LOD grids were not perfectly even.
commit 4cbad004f44060994252dd3d38647a14a589712f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:27:58 2020 +0200
Bumping nightly per request.
commit 548680276aac77c25d43d16b5622f847d474dbef
Merge: acc098604 8f8b20c91
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:26:06 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit acc0986040589a3492f88a740bc3c3fc693b26d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:28:32 2020 +0200
Lower resolution due to lying drivers.
commit d3b878de2a52c358d2944a6bbd0555dad7fbdb10
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:15:38 2020 +0200
Fix issues msh encountered with Intel 4600.
commit 10245e0c1b0cb6fae10d86409435364edc6102ef
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 21:15:02 2020 +0200
Merge more models into one mesh than we did previously.
commit 3155c31e663c52ae5c3a53d5fb5665892a1a498a
Merge: 7204cc8a7 3c199280e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:35:22 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7204cc8a7a4f74a30306bd205d9834fee4bb944f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:34:43 2020 +0200
Fix not yet done NPC animations.
This forces them all to be the idle animation if not specified.
This fixes issues where you'd have giant NPCs in water.
commit bc83360f2a08918f19d417b5f772e1ff554dba08
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 19:36:37 2020 +0200
Try to fix some bugs:
- Z fighting with LOD terrain and water.
- Audio SFX not playing.
commit 1fd104aa603bf3781b6526a5cada46aeca3049dd
Merge: 862df3c99 7c2c392a3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 12:02:31 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 862df3c9976c4da9bd7cfd784f1a85973127968a
Merge: 0a4218ed9 75c1d4401
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 05:52:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0a4218ed9d541a2b34c133351bea38a99ddf4ea7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 22:27:14 2020 +0200
Fix particle depth.
commit f51dfdeb442d0dd5243dd2f344fa4be295bd0875
Merge: c6251a956 5e6dc0471
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:19:04 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit c6251a956ad376400dca5c23420cf8d213dc8fdf
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:15:46 2020 +0200
Cache figures more intelligently.
Cache figures for longer, and don't cache character states for the
player except where they actually affect the rendered model.
commit 0ed801d5404982c6fb63b1eaa4567d908b294c9d
Merge: c11b9bdf0 eea64f78f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 16:32:24 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c11b9bdf0a53bf9884d2f5a48fec9b01d582df1a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 11:47:15 2020 +0200
Remove unneeded Clippy annotation.
commit 16aa9ef40af56d69289d00aafb3deadfb8bd4f35
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 8 00:53:02 2020 +0200
Fix hotloading and Clippy.
commit 3dc973e0be5b758da1e9805eb764ad401374cd0c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 23:50:27 2020 +0200
Major speedups with SIMD.
commit fba64a7d93d5a96077ce87287bbce6ab9b7fbcae
Merge: 76429d00e d1e10b178
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:19 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 76429d00eea00d212fbd672a84ee91e75b19b938
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:10 2020 +0200
Add clippy.toml.
commit c79f512f84dbb83cb82b7954db68ff241dfd8e41
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 11:55:20 2020 +0200
Fix all clippy issues, clean up Rust code.
commit 6f90e010b3fbefb53b0d632e819931350015b6b8
Merge: 77a8c7c26 5929cfa5c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:30 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 77a8c7c267d3f44a1a62bd6b2274359973c5e4d4
Merge: b44e44232 44febaabd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:10 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 5929cfa5c713aa392110bbb62407f76caf53c3df
Author: jshipsey <jshipsey18@gmail.com>
Date: Thu Aug 6 20:47:27 2020 -0400
fixed in-hand arrow bug
commit b44e442325d828f1cd564d66908f89d09e80474b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 6 13:40:35 2020 +0200
Miscellaneous performance improvements.
commit be37acf287c1360d8085862526ac3365ffd1d768
Merge: 125d7fc6c c11876547
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 05:49:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 125d7fc6c4dcd8c8c5f27b8268a4d64f409f3644
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 04:55:31 2020 +0200
Abstract over simd vs. repr_c vectors.
Also some minor improvements to Event size.
commit d4d4956e9252e1241ce110b2aa85076c6b1e2a23
Merge: 5f3b7294a aced5f979
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:56:54 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 5f3b7294af1f8533edc2620b58863c248e2b07af
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:43:52 2020 +0200
Fix formatting issues I missed before.
commit a428a3ebba70dcab63dd0f8cd983120c90617271
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:41:51 2020 +0200
Fix clippy warnings, part 1.
There aer still a bunch of type too complex and
function takes too many arguments warnings that I'll fix later
(or ignore, since in the one case I did fix a function takes too
many arguments warning I think it made the code *less* readable).
commit ba54307540ed8a937ac08209730284fc653af85b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 30 13:22:42 2020 +0200
Fix light animations so they are removed when the light turns off.
commit 7e0f4bcbf0f4717145d8beac40d52e3acebbe2aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 21:10:20 2020 +0200
Fix crash in edge case for pixel art.
commit 56da06f7a351e2b949e9b014a90b974d511a0924
Merge: cf74d55f2 9f53a4a19
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:56:52 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:29:52 2020 +0200
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
The first concern was addressed by fixing the dimensions of the map
images drawn from the UI (so that we always use a square source
rectangle, rather than a rectangular one according to the dimensions of
the map). We also fixed the way rotation was done in the fragment
shader for north-facing sources to make it properly handle aspect ratio
(this was already done for north-facing targets). Together, these fix
rendering issues peculiar to rectangular maps.
The second and third concerns were jointly addressed by adding an
optional border color to every 2D image drawn by the UI. This turns
out not to waste extra space even though we hold a full f32 color
(to avoid an extra dependency on gfx's PackedColor), since voxel
images already take up more space than Optiion<[f32; 4]> requires.
This is then implemented automatically using the "border color"
wrapping method in the attached sampler.
Since this is implemented in graphics hardware, it only works (at
least naively) if the actual image bounds match the texture bounds.
Therefore, we altered the way the graphics cache stores images
with a border color to guarantee that they are always in their own
texture, whose size exactly matches their extent. Since the easiest
currently exposed way to set a border color is to do so for an
immutable texture, we went a bit further and added a new "immutable"
texture storage type used for these cases; currently, it is always
and automatically used only when there is a specified border color,
but in theory there's no reason we couldn't provide immutable-only
images that use the default wrapping mdoe (though clamp to border
is admittedly not a great default).
To fix the maps case specifically, we set the border color to a
translucent version of the ocean border color. This may need
tweaking going forward, which shouldn't be hard.
As part of this process, we had to modify graphics replacement to
make sure immutable images are *removed* when invalidated, rather
than just having a validity flag unset (this is normally done by
the UI to try to reuse allocations in place if images are updated
in benign ways, since the texture atlases used for Ui do not
support deallocation; currently this is only used for item images,
so there should be no overlap with immutable image replacement,
so this was purely precautionary).
Since we were already touching the relevant code, we also updated
the image dependency to a newer version that provides more ways
to avoid allocations, and made a few other changes that should
hopefully eliminate redundant most of the intermediate buffer
allocations we were performing for what should be zero-cost
conversions. This may slightly improve performance in some
cases.
commit ad18ce939940a8c697270f6e9b94db9942fd8295
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 13:21:09 2020 +0200
Fix continent scale hack.
commit 36b1cb074f5b195aebd7dbbc3da7f0246a1a18ec
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 12:11:40 2020 +0200
Enable loading different sized maps without a recompile.
We may want to tweak the effects of the continent_scale_hack.
commit 13b6d4d534cc4814b7cb3294ca41bbfea0a6b186
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 10:55:48 2020 +0200
Removing WORLD_SIZE, part 1.
Erased almost every instance of WORLD_SIZE and replaced it with a local
power of two, map_size_lg (which respects certain invariants; see
common/src/terrain/map.rs for more details about MapSizeLg). This also
means we can avoid a dependency on the world crate from client, as
desired.
Now that the rest of the code is not expecting a fixed WORLD_SIZE, the
next step is to arrange for maps to store their world size, and to use
that world size as a basis prior to loading the map (as well, probably,
as prior to configuring some of the noise functions).
commit 30b1d2c6428230a9eaa0d749cdcbbd6f1cbccd78
Merge: 7d56ba31b 1377b369f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:58 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 7d56ba31b445441461b28a07fc495d7d4f047c17
Merge: 2101113b4 598f14b25
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 1377b369f6db2258e910d467a5740f31789e3ded
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sun Jul 19 23:25:38 2020 +0200
more saturated pumpkins
commit ae8d50527f93bb0616c2ad46ce4dacb63bc37c6d
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sat Jul 18 20:29:56 2020 +0200
acacia models
commit 2101113b467e691de787392d7f20f1745f5637bd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 18 18:55:25 2020 +0200
Higher detail LOD.
commit add2cfae04b4385fa5590e11e2bd5229d9dee0aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 16 01:57:39 2020 +0200
Revert some irrelevant stuff.
commit 2e2ab3dc1eaa59a4aef7f8d34a53d8aae4c8553a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 15 13:30:49 2020 +0200
Fixing various things about shadows.
* Correcting optimal LISPSM parameter.
* Figure shadows are cast when they're not visible.
* Chunk shadows stay cast until you look away.
* Seamless cubemaps for point lights.
* Etc.
commit 6c31e6b56217274285b597af297036691ea5d897
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 19:50:26 2020 +0200
Fix shadow creation.
commit 6332cbe006115ae205597529cd8bbccd146c2cca
Merge: be438657c 930e0028b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:47:00 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit be438657c33d7b5bfb0a9582c3ed3fd366637323
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:28:08 2020 +0200
Tweaks to shadows.
Added shadow map resolution configuration, added seamless cubemaps,
documented all existing rendering options, and fixed a few Clippy
errors.
commit 23b4058906013c7d2a40c286e20e32c5fbd897ed
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 10:11:19 2020 +0200
Fix moon, use nonlinear noise for terrain.
Note that the latter has a bit of performance cost.
commit 7fbe5cbfbb9dc29607957b8e62f432a4deed193d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:23:02 2020 +0200
Address lies about max texture size.
commit bcfc62b5e13a1cdd83f57535fde4694720bebfd9
Merge: 75e3626a7 18a08e8fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:22:08 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 75e3626a785919f43fdcf2127c2b10e3e4df2f9f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:21:52 2020 +0200
OpenGL 3.3 minimum.
commit 18a08e8fe2739f02af99a5d2cb4e7c38c49e858b
Author: Monty Marz <m.marzouq@gmx.de>
Date: Tue Jul 7 23:57:52 2020 +0200
settings localization
commit 90c5d1ca3620092bc3ae10b2211489eb1cf6f5e8
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 21:11:48 2020 +0200
Lower near distance.
commit 0e66f02b25aaddaa2dfddbbc89cd67de54a9a7b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 20:09:01 2020 +0200
All sprites sway in the wind now.
commit db1401a6910bf42dcf502462c90038752ff5fbdb
Merge: 69e508d8c e8b4b29d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 19:34:17 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 69e508d8c94d8973033817ca86f357e466fc7c4d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 18:41:37 2020 +0200
Make it easy to switch to SIMD for math.
commit ffe0f5928c7a7e87d00cb5426b3b1d831d7e02fd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 21:21:12 2020 +0200
Fix some issues with underwater rendering.
commit bfda6da42f38fd02c31ee92c81ab785a3e50c2a0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 19:17:59 2020 +0200
Fix some minor display issues.
commit 0ed752e087968cf901301884aaeae698e32ef8a5
Merge: ccc6a06a8 518edcb85
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:14:21 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit ccc6a06a8d4504d6b9f7af7905a414d2ee06ab76
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:04:34 2020 +0200
Some minor changes.
commit 4e020246702889269efe1a191788992164c508d6
Merge: 50a64d927 e05c9267a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 16:17:40 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 50a64d927e6c4f4b0e4688e4cbfca694bc3f922a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 13:07:03 2020 +0200
Fix far plane.
commit 7dd06da34cae8f9ea3b6c889fe965181f3fd3949
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:25:35 2020 +0200
Add shadows.glsl.
commit 618a18c998778bf871b905a74657440fcc384c80
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:10:22 2020 +0200
Adding shadows, greedy meshing, and more.
commit eaea83fe6a5cb1cb0ba8beef888183c718258496
Merge: 267018495 2f89b863e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 22:47:07 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 2670184954a13e4a9e7a4e35ba79aac0c5fac2f7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 21:20:01 2020 +0200
Make civsim and sites deterministic.
For anything in worldgen where you use a HashMap, *please* think
carefully about which hasher you are going to use! This is
especially true if (for some reason) you are depending on hashmap
iteration order remaining stable for some aspect of worldgen.
commit f8376fd5dc72b4a9c2f51a6b4570d59c8b8e9343
Merge: 654f7e049 cdee191dd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 17:53:57 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 654f7e049258d9da27c09608bbe6a46ffa8787e5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed May 20 21:22:30 2020 +0200
Correct backface culling.
commit 560501df05ca725409b0f2e4eb31bdfdc15fd0c7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue May 19 17:22:06 2020 +0200
Greedy messhing for shadows.
commit a4d87e1875ca543436e6bbbeb20348facc5a52d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun May 17 05:59:00 2020 +0200
Shadow maps work for lantern.
commit 243d0837b8a3b08172c9a3c348d964d7ddc2a0a8
Merge: 04382dc28 71dd520cd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:53:13 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 04382dc28632b6c66e8821f6870c0daaa1c1901a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:22:17 2020 +0200
WIP: better graphics config, better LOD, shadow maps.
commit 22ddbad3eb32bfa70f0932176022208fe67ded81
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 18:54:09 2020 +0200
Minor shader fixes.
commit 746a10e8d01ac235f994b0cde78fa48998602a1f
Merge: 0f4a0e763 40ab94673
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 04:02:09 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0f4a0e763db3afbdc4fb0558611f38326ca87151
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 23:03:24 2020 +0200
Switch back to pop-in terrain.
commit dd74fa7e4a53667b38811d7aec58d7f6a68889bb
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 22:58:55 2020 +0200
LOD shading closer to voxel shading.
commit ef67bd58ba0bdaf622b078892d768263b6cba268
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 28 20:49:03 2020 +0200
Experimental underwater lighting.
commit 2c5ad9d07605e80d5fd5679dd3a5d70c605b86a9
Merge: 748279835 303967a6f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 22:35:24 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7482798354eda18c8207950080fc24d443a369de
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 21:59:55 2020 +0200
Replace discard in figure-frag.
commit d83b4ae69be4912f69bf7835f509c68a1c7770a4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:45:57 2020 +0200
Fix sprite lighting, HDR from focus_pos.
commit 0594238004f116274905fa0ed7c2b6c417ed1d29
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:14:10 2020 +0200
Proper HDR from point lights.
commit 48c93d2b41ce5743103d18e76cc228f5ac766492
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 14:01:43 2020 +0200
Brighter ambiance, darker LOD shadows.
commit e0452e895ccfa8a43f368cae3b8b8aedc24dad93
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 13:13:23 2020 +0200
More proper HDR.
commit 4c6da3ed16cfeebb455e40da5f557b4af9a499d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 00:13:10 2020 +0200
Trying LOD noise.
commit 682a3d74c85df5503ffe1fc1cc891bce789df1ad
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 23:11:08 2020 +0200
Fix LOD heights in towns.
commit cc39e5734e8b18f9077bf42e66337c1319dd6b6e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 21:01:23 2020 +0200
More LOD fixes.
commit 8116b21c2e51c836e77894e309ac273caf2917b3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:54:43 2020 +0200
I like this coloring.
commit bc2560ea90b36f4b46190005344232d993043ac3
Merge: 14effdd5d e690efe71
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:48:33 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 14effdd5db8747fcf3eb34f03b46b7792e92d1c5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:24:35 2020 +0200
Re-saturate.
commit 48a643955d4435b78179acba0beb4a979905cc31
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:23:57 2020 +0200
Various fixes.
commit f7b497a0c25f4ad4682c71dd1ed6f608052feb9b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 03:22:49 2020 +0200
Render figures again.
commit 44e4aad48deba8266b9f8bdfd3db096b381f5327
Merge: e6f0a5a98 9ec319a18
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 02:01:04 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit e6f0a5a981a82533ba188fff0a54ce98577bb152
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 24 16:12:20 2020 +0200
Add atmospheric scattering.
commit f2953087f691a8edbc001cb98ebf5059fc6f8ac0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 23 00:01:20 2020 +0200
Fix shadowing for specular reflections.
commit ddd4a67a9799b8d08c7dc0c2bec90621c2bed0e3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Apr 22 22:56:12 2020 +0200
HDR fixes.
commit 1015e60deef3c447381996277df7496707a63bd0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 21 18:25:19 2020 +0200
More lighting changes.
commit 80c264abd111fb237e57843efcb5c071d4f84613
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 13 00:29:59 2020 +0200
Lighting experiments.
commit 8414987e589dd5102bad89762a3adaccc0bfe957
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 9 02:38:40 2020 +0200
WIP -- lighting changes and soft shadows.
commit 9cd2b3fb0d6b49776c6dfe463e4169637250b11a
Merge: c7ea687eb 8b149ad11
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:29 2020 +0200
Merge branch 'sharp/new-lighting' into sharp/small-fixes
commit c7ea687ebbc5aace1b455f134a5bf49ce2c7434a
Merge: 476441531 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:02 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 8b149ad11ad4bb75018fcf9519baec27d1c95951
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:32:39 2020 +0200
Trying out a new lighting model.
commit b0ac9f36f755dd06f7c17c46150568064790864f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 07:56:11 2020 +0200
Use bicubic interpolation for terrain.
commit f6fc9307a121514b614bc50ef8eb055953e7da8a
Merge: 33140a295 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 05:01:41 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 4764415312aae6e9ac2d00e86e84577cb958f1ab
Merge: ed2d0111d 13388ee6a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 04:54:48 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 13388ee6a42943f3f79a9cb488346cef18e272fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 20:30:08 2020 +0200
Various fixes (to coloring and to soft shadows).
commit fbd084a94a067082a87cd6d28b82054709bc9265
Merge: 5a089863b 4fdf6896a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 18:50:38 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/map-colors
commit ed2d0111d994262ae836d84d1fe5a45e4de72a0b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 06:49:27 2020 +0200
Combining colors and LOD.
commit 88342640c6b835114d01c797b89fdede3b0a2108
Merge: 33140a295 5a089863b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:49:20 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 33140a2951b8212725f42c758b277aaec4d888f7
Merge: 4c65a5aed f34d4b379
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:36:21 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 5a089863beb01d4794bbe3580ada47b278715ea2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 03:17:49 2020 +0200
Making maps brighter.
This is probably not the right way to do it, but oh well!
commit 32b2c99109dd486aa922886081068f9c550c83f2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 02:46:36 2020 +0200
Horizon mapping and "layered" map generation.
Horizon mapping is a method of shadow mapping specific to height maps.
It can handle any angle between 0 and 90 degrees from the ground, as
long as know the horizontal direction in advance, by remembering only a
single angle (the "horizon angle" of the shadow map). More is explained
in common/src/msg/server.rs. We also remember the approximate height of
the largest occluder, to try to be able to generate soft shadows and
create a vertical position where the shadows can't go higher.
Additionally, map generation has been reworked. Instead of computing
everything from explicit samples, we pass in sampling functions that
return exactly what the map generator needs. This allows us to cleanly
separate the way we sample things like altitudes and colors from the map
generation process. We exploit this to generate maps *partially* on the
server (with colors and rivers, but not shading). We can then send the
partially completed map to the client, which can combine it with shadow
information to generate the final map. This is useful for two reasons:
first, it makes sure the client can apply shadow information by itself,
and second, it lets us pass the unshaded map for use with level of
detail functionality.
For similar reasons, river generation is split
out into its own layer, but for now we opt to still generate rivers on
the server (since the river wire format is more complicated to compress
and may require some extra work to make sure we have enough precision to
draw rivers well enough for LoD).
Finally, the mostly ad-hoc lighting we were performing has been (mostly)
replaced with explicit Phong reflection shading (including specular
highlights). Regularizing this seems useful and helps clarify the
"meaning" of the various light intensities, and helps us keep a more
physically plausible basis. However, its interaction with soft shadows
is still imperfect, and it's not yet clear to me what we need to do to
turn this into something useful for LoD.
commit f8926a5737ddc51f3d585c651a64c43677aae0f4
Merge: a1aee931e 875ae6ced
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Mar 13 13:32:42 2020 +0100
Merge remote-tracking branch 'origin/master' into sharp/map-colors
commit 4c65a5aed353b119aea65a2aaeb94549b67beb42
Author: Treeco <5021038-Treeco@users.noreply.gitlab.com>
Date: Mon Feb 24 16:48:05 2020 +0000
Made LOD setting slider exponential
commit 2fa7b2d20d7233dc8bfd64f9f7f54617575248f1
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 17:49:53 2020 +0000
Added mist to LoD
commit aab059a450b5f635777129ff82cc15b662965c3c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 15:14:06 2020 +0000
Added LoD slider
commit 779c36b538121c5ade3633ae5cb67bb14c8c3877
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:54:55 2020 +0000
Reduced cost of vertex pushing
commit 9fea150473906b166365b738ebcea07c697daf3d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:38:53 2020 +0000
Fixed maths, improved LoD resolution
commit 5481df38fea5bf183ff376a3337179cfaa5233dc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 11:22:50 2020 +0000
Dynamically relocate LoD vertices to enhance details
commit a3e36a50ababd615da7db1b26158c7906a5def01
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 18:13:51 2020 +0000
Simpler terrain spiral rendering
commit 255f450ae9ac8763db4bede075fb409161ed57cc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:53:17 2020 +0000
Better LoD precision
commit 3d027aebe812a5b8658a4eb8123dc9f61b3776d2
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:04:03 2020 +0000
Better falloff
commit be775c9484b457b2c0b1a494aec03392d0c70e76
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 15:30:45 2020 +0000
Applied good ideas from experimental branch
commit 58587b68545a23c5c04ab4574a4b94b3bc982246
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 16:15:13 2020 +0000
Minor fixes to LoD merging
commit 7b42aebd709c14df2db766aad61d9280ad24d84d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 15:04:44 2020 +0000
Capped LoD dragging
commit 8aafc559f87124e1ea5ca6e3ddc2aa0c242d793c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:54:37 2020 +0000
Better blending between LoD and terrain border
commit edd3455d5161792d87ddc8eadc0ecbad5532b284
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:40:19 2020 +0000
Fixed LoD z depth, added sea level offset
commit b9b06744620114dd5556e73f64fa93c145503a7c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:27:43 2020 +0000
Better LoD smoothing
commit a1aee931e790431560cd2d953ad61d9497072afd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Feb 21 14:52:17 2020 +0100
Adding shadows.
commit 2400786c13dd891c131ed86d48d05df516a8a778
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 13:48:40 2020 +0000
Use world map as LoD source
commit dbf650f504a4c25fbbc2096ac3616c736bf52d23
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Jan 20 00:48:14 2020 +0000
Better clouds at distance
commit 5e6f81b86cdb9730b9b056877b19257075fd5fa8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Jan 19 23:59:02 2020 +0000
sync
commit 745e7540ddb000cc645f612767b337c2ddc3f7c0
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 12:40:48 2019 +0000
Improved cloud falloff mist, faster noise sampling
commit f6a200d0cb866196ba57697466755f9e0c7ea5d8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 10:09:00 2019 +0000
Improved long-range depth precision, removed unnecessary LoD polygons
commit 63d1b2bb2292898d59fb4f4e502201103dfeb86f
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 20:57:46 2019 +0000
Working LoD shader
commit f13d98ee3e58f881e8b978861a67663b59ed91ec
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 11:03:40 2019 +0000
LoD first attempt (stack overflow issue)
2020-08-20 18:34:59 +00:00
|
|
|
|
map_size_lg,
|
2020-01-11 21:05:22 +00:00
|
|
|
|
|posi| alt[posi],
|
|
|
|
|
&dh,
|
|
|
|
|
&water_alt_pos,
|
|
|
|
|
&mut wh,
|
(See sharp/lod-history) LOD, shadows, greedy meshing, new lighting, perf
---
Pretty much a Veloren fork at this point. Here's a high level overview of the changes (will be added to CHANGELOG just before merge).
At a high level this MR incorporates roughly two groups of changes.
The first group consists of new game features: more flexible map sizes, level of detail terrain, shadow maps, and a new lighting
engine. This is "feature work" that (mostly) only adds new things to Veloren, and mostly shouldn't affect old stuff.
The second big group of changes are those addressing the fallout from all the new features. These include performance fixes of
various sorts: the addition of multiple graphics options and optimization of the cheap ones to avoid work, switching all voxel
models to use some variant of greedy meshing, switching over much of our CPU-side vector math to exploit SIMD instructions
(coinciding with a fork of `vek`), and a rewrite of how the UI handles text rendering (coinciding with updates to our fork
of `conrod`). Making Veloren's hardcoded colors appear correct under the new lighting engine also required considerably
changes (TODO: Fill in this section when it's complete).
The second category of changes often heavily touches code owned by other people, including frequently modified code "owned" by a
handful of people, so I recommend that this code be reviewed particularly carefully.
---
At a high level (each will be described in more detail below):
- The world map has been refactored.
- The world size is no longer hardcoded (@zesterer).
- The map generation code was made generic to allow using it outside of the `world` crate (@zesterer).
- On world creation, we now compute *horizon maps* (@zesterer).
- The way we pass the world from the server to the client has been updated (@xMAC94x).
- Artifacts related to image rotation were fixed (@imbris).
- Multiflow rivers were enabled (@zesterer).
- In the process of making changes related to the world map, various incidental fixes and optimizations were required.
- The new *level of detail* feature was added (@zesterer wrote part of this and has checked out the rest).
- A new LOD terrain rendering step was added to the pipeline.
- The LOD terrain quality was made configurable via a graphics setting.
- Horizon maps were used to cast shadows from LOD chunks on both LOD and non-LOD terrain.
- A "voxelization" effect was incorporated into rendered LOD terrain to make it blend better into the world.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Veloren's lighting has been completely overhauled (@zesterer has already checked most of this out).
- A semi-accurate index of refraction was assigned to our materials.
- A new, more realistic, physically based approach to lighting was used using the *Ashikhmin Shirley* BRDF.
- We emulate *atmospheric scattering* using equations designed for measuring solar panel light exposure.
- We attempt to compute *realistic light attenuation* in water using its real material properties.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Point and directional lights now cast realistic shadows, using *shadow mapping.* (@imbris, @zesterer, @Treeco, @YuriMomo)
- Point light shadow maps were added to the rendering pipeline, using geometry shaders and *seamless cube maps*.
- Directional light shadows were added to the rendering pipeline, using LISPSM together with disabling *depth clamping*.
- "Shadow-only" chunks and NPCs were added to prevent shadows from models behind you from disappearing.
- In the process of making changes related to shadow maps, various incidental fixes and optimizations were required.
The addition of shadow maps, LOD terrain, and the new lighting all led to significant performance degradation, on top of other
changes happening in master. Therefore, a large number of performance improvements were also needed:
- The graphics options were made much more flexible and configurable, and shaders were optimize.
- New options were provided for how to render lights and shadows (@Pfauenauge, @zesterer).
- Graphic setting storage and configuration were overhauled to make adding new features easier (@Pfauenauge, @imbris).
- Shaders were rewritten to utilize GLSL's preprocessor to avoid overhead (@zesterer, @YuriMomo).
- In the process of making changes related to providing additional rendering options, various incidental fixes and optimizations were required.
- Voxel model creation was switched to use *greedy meshing.*
- A new voxel meshing method, greedy meshing, was added (@imbris).
- Uses of the older meshing methods were migrated to use greedy meshing (@imbris, @jshipsey, @Pfauenauge).
- New restrictions were added to terrain, figure, and sprites to future proof them for further optimizations (@jshipsey, @Pfauenauge, @zesterer).
- Most positions are now relative to either chunk or player position for better precision (@imbris, @zesterer, @scottc).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- Animation and terrain math were switched to use SIMD where possible.
- Fixes were made to vek to make its SIMD feature usable for us (@zesterer, @imbris).
- The interface and types used in bone animation were changed in various ways (@jshipsey, @Snowram, @Pfauenauge).
- Redundant code generation for body animation is now partly taken care of by a macro (@jshipsey, @Snowram, @Pfauenauge).
- Animation code was modified to to use vek's SIMD representation where possible (@jshipsey, @Snowram, @Pfauenauge).
- Terrain meshing code and shadow map math were also modified to use vek's SIMD representation (@imbris).
- SIMD instruction generation was enabled (@YuriMomo, @jshipsey, @Snowram, @imbris, @Angelonfira, @xMAC94x).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- The way we cache glyphs was completely refactored, fixed, and optimized.
- Our fork of `conrod` was optimized in various ways (@imbris).
- Our fork of `conrod` now exposes whether a widget was updated during the current frame (@imbris).
- Our use of the glyph cache was rewritten for correctness (@imbris).
- A *text cache* was introduced that lets us skip remeshing glyphs that have not changed (@imbris).
- Various changes were made to reduce pressure on the glyph cache, with more planned (@imbris, @Pfauenauge).
- In the process of making changes related to the glyph cache, various incidental fixes and optimizations were required.
- Colors were changed to keep Veloren's look consistent with master.
- Some older tree models were brought back (@Pfauenauge).
- TODO(@Sharp): All hardcoded colors were extracted and made hotloadable.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Hardcoded colors were fixed to conform to Veloren's style.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Color models were fixed to conform to Veloren's style.
A detailed description of the involved changes follows.
---
- The world size is no longer hardcoded. All functions dependent on world size now take a `WorldSizeLg`, which holds the base 2 logarithm of each actual world dimension and is guaranteed to maintain certain properties (outlined in `common/src/terrain/map.rs`). Additionally, many utility functions that utilize the world size were moved into `common` as well (mostly `common/src/terrain/mod.rs`). Finally, the world map format was updated in order to store its size explicitly, with a migration path from the old format that should work whenever the old formatted map was a square (practically always). See `world/src/sim/mod.rs` for these changes.
- The map generation code was made generic to allow using it outside of the `world` crate. The parts of the map generating code that do not need to query the world were moved over to `common/src/terrain/map.rs`, allowing them to be used from the client without creating a dependency on `world`. The rest of it was turned into helper functions in `world/src/sim/map.rs`, which can be passed as closures to the generic map generation code to complete its construction. This also means that colors are now passed in separately to the map generation function. See <https://veloren.net/devblog-78/> for more details.
- On world creation, we now compute *horizon maps*. See the function in `world/src/sim/util.rs`.
Given a height map and a plane intersecting that height map, our horizon maps allow us to encode enough information to reconstruct shadows for each point on the height map using only the *horizon angle* (the angle at which the sun starts to become visible). As Veloren's sun only covers one plane, this is sufficient for encoding sun shadows for LOD terrain, by encoding two angles per chunk (one for each 90 degrees the sun covers). We can also use this for the moon, if we want, since the moon follows the same path. Additionally, we store the *height* of the furthest occluder, to try to make the shadows volumetric; so this means 4 bytes in total for each chunk.
Support for horizon maps has been merged into the map functionality in common as well.
- The way we pass the world from the server to the client has been updated. Rather than passing the prerendered map, we instead pass three maps with values for each chunk; one with the color information, a second with altitude information, and a third with horizon map information. We then reconstruct the map on the client, together with some additional information we send from the server (like the sea level and maximum height). See `common/src/msg/server.rs` for a detailed description of the format of `WorldMapMsg`, and `server/src/libr.rs` and `client/src/lib.rs` for details of the map construction and parsing.
- Artifacts related to image rotation were fixed. See the commit message for commit SHA `cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e` for a detailed explanation. This involved changes to shaders, the addition of a new type of graphic (also reflected in the graphic cache) that allows specifying a border color (which automatically makes the associated texture immutable), and some related fixes. I reproduce the first two paragraphs of the MR description as well:
```
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
```
- Multiflow rivers were enabled.
This does not really need to be part of this MR, and would be easy to revert, but since it seemed to provide a nice improvement it's currently packaged with it.
We already computed multiple outflows from each chunk for erosion purposes long before this MR.
However, we never modified river rendering to be able to handle this case (just a single downhill river flow is complex enough!) so this was not exposed when deciding which chunks were rivers.
Now that
- In the process of making changes related to the world map, various incidental fixes and optimizations were required. Some examples of fixes include making sure terrain is never lowered to below sea level (to make the shadow maps report correct values), fixing map altitudes and colors to understand things like cliffs and "block level" coloring (that doesn'te xist on the column level), and fixing a crashbug when rendering images for the UI where source pixels are strongly rectangular. Some examples of related performance fixes include avoiding allocating a fresh vector for all the maps (i.e. copying it over to change the format from `[u32; n]` to `DynamicImage` and then copying again to convert to `RgbaImage`), and instead using the `gfx::memory::slice` function to accomplish the same thing. These sorts of changes are spread all arond the code.
This includes the additon of a new scene, `voxygen/src/scene/lod.rs`, a new pipeline `voxygen/src/render/pipeline/lod_terrain.rs`, and new shaders `assets/vxygen/shaders/lod-terrain-vert.glsl` and `assets/vxygen/shaders/lod-terrain-frag.glsl`, as well as associated changes to the renderer in `voxygen/src/render/renderer.rs`.
The main idea behind our initial approach to LOD was to take the world data we now get from the server (altitude, color, and horizon mapping).
- Some previously computed values were turned into shader uniforms for better prediction on weak processors. (@zesterer)
- Calls to power or trig functions were removed or replaced with multiplications, where possible.
- After some deliberation
- To properly handle sprite "waving" for nearby sprites,
We explicitly designed the greedy meshing system with figures and sprites in mind.
In both cases, we want to be able to *efficiently* pack many different models into the same texture, especially in cases where we know
we will either not be removing any of the grouped-together from the models from the texture, or will remove all of them at once (so
they can be packed into some specific subtexture).
For sprites, since we know every model in advance and never intend to deallocate them, we currently pack them all as efficiently as
possible into one giant tetxure atlas. However, in the future we might opt to pack them slightly less efficiently in exchange for
shrinking the sprite vertex size.
For figures, we pack all the textures for each *model* into the same atlas.
is a global texture atlas used for every sprite, and for figures which is why we have the ability to mesh multiple
models to the same texture area (using the simple texture atlas allocator) without requiring intermediate vector allocations.
This is accomplished by delaying the time when we actually write the color and light data to the texture until *after* all the
model vertices have been meshed; then, we can just allocate the whole color/light array at once, making the atlas we use an
exact fit. In computer science-y terms, we accomplish this delay by, after we perform the initial greedy meshing (without
texture information), not continuing to create the texture data, but instead constructing a *continuation*--that is, a function
that, when called, will execute the rest of the computation. We push this continuation (which in Rust terms is a `FnOnce` closure
that takes the `ColLightsInfo` that it is supposed to write to as context) onto a
onto a vector
resizing. To allow for suspended writes to texture data, Rust pointed out to me that the continuation that would eventually write the color and light data to the texture atlas (the one that is shared by all models sharing the same greedy mesher) would have to *own* whatever data it mshed. Because we often generate the model data to mesh as a temporary in `voxygen/src/load.rs`, the
- Matrix multiplications in the shader were reduced for figure data (@zesterer).
- Vertex "waves" for fluid data were removed.
- Terrain "bending" near edges was removed.
- Scaling was fixed to make sure empty space was not introduced in a space previously occupied by a block. It was also changed to take ownership of its voxel data,
rather than sharing it, to let it be used with meshing.
- Rust's nightly version was bumped in order to use the `array_map` function, which lets us reuse more code between the simple map and `FigureModelCache`.
- PositionedGlyph::standalone.
---
I tried to cite sources in many cases[^realtime],[^lloyd],[^lispsm],[^pbrt],[^greedy],[^tjunctions]
where I needed features from elsewhere but I am particularly grateful for the following resources,
esepcially where they have accompanying source code. I linked all of them that are accessible to the public (those that are not were
obtained through legal means).
[^realtime]: Eisemann, Elmar, Michael Schwarz, Ulf Assarsson, Michael Wimmer. Real-Time Shadows. A K Peters/CRC Press (T&F), 20160419.
[^lloyd]: Lloyd,B. 2007. [Logarithmic perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). PhD thesis, University of North Carolina.
[^lispsm]: Wimmer, M., Scherzer, D., and Purgathofer, W. 2004. [Light space perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). In Proceedings of Eurographics Symposium on Rendering 2004, pp. 143– 152.
[^pbrt]: Pharr, Matt, et al. [http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf](Physically Based Rendering: From Theory to Implementation). Third edition, Morgan Kaufmann Publishers/Elsevier, 2017.
[^greedy]: mikolalysenko. “Meshing in a Minecraft Game.” 0 FPS, 30 June 2012, <https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/>.
[^tjunctions]: blackflux. “Meshing in Voxel Engines – Part 1.” Blackflux.Com, 23 Feb. 2014, <https://blackflux.wordpress.com/2014/02/23/meshing-in-voxel-engines-part-1/>.
I am also especially grateful to Khronos, Wikiepdia, and stackoverflow for answering many of my specific questions while writing the MR.
---
Squashed commit of the following:
commit 300505e7305a2fdac722a808ee8538323f215f39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 18:46:25 2020 +0200
Fixing cargo doc and typo in CHANGELOG.
commit ec0aeb18e8499d7d84ef818331b4b65c3d76cea6
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 15:38:50 2020 +0200
Hopefully final commit for the LOD branch.
commit 5e8ea0b1eaac02903a02feb2eb038d195de4872f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 10:14:26 2020 +0200
Falling back to power as stopgap.
commit e44a1cbf46504ee9931a01bdc9033e145500d557
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 09:25:41 2020 +0200
Address imbris feedback.
Temporarily disables shiny water, lowers max VD.
These restrictions will be lifted soon after merging.
commit 561e25778a108ac3712f5ec2ce3a51234c4430d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 08:31:13 2020 +0200
Tweaking shaders a bit.
commit 7d19259078ce0dd7b3742ad7d0cb3fab3ece3fdc
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:59:43 2020 +0200
Fix view example as well.
commit 051cd4934e0fad2c0b15db4380a4189fa318679f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:29:06 2020 +0200
Fix meshing benchmark.
commit c95e07db3b4dcca285678985e65e31b927cb1c61
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 05:46:22 2020 +0200
Address MR feedback, fix scene clouds.
commit 1bfb816cabdb3ffc1e507a009c2d98696b4b573a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:39:36 2020 +0200
Incorporating Pfau's figure color changes.
New eyes and new humanoid colors.
commit 3f9b89a3ac7b3356b1dba0d1a8f6541357f81469
Merge: e2f5162e4 62c53963a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:29:41 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit e2f5162e4f96f4124aa43488f7245d341b3dcfd4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:28:38 2020 +0200
World colors are all hotloadable.
They live in assets/world/style/colors.ron.
Only a small handful of hardcoed colors remain in World; they are either
part of the map, or difficult to disentangle from the rest of the
computation. Comments are made where appropriate.
commit 62c53963abe1975009d34a8f9515a355bef24f31
Author: Marcel Märtens <marcel.cochem@googlemail.com>
Date: Wed Aug 19 15:59:00 2020 +0200
replace pretty_env_logger with tracing
commit 5b1625f99d9586fe80e2232f583ec5af9f953099
Merge: d71003acd 4942b5b39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:15:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit d71003acdabeff970b3928e97c26af6847b5b78e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:14:34 2020 +0200
Hotloading colors, part 1: colors in common.
Currently, this just entails humanoid colors. There are only three
colors not handled; the light emitter colors in
common/src/comp/inventory/item/tool.rs. These don't seem important
enough to me to warrant making hotloadable, at least not right now, but
if it's needed later we can always add them to the file.
commit 63b5e0e553eb2ea49276f192a6fc7dd65254270d
Merge: c32b337a4 6d2c4b9c1
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 13:05:37 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c32b337a46e10d9de473d178a94a3ccd61c39bb3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:52:04 2020 +0200
Fixing LOD grid, for real.
commit a166ae0360395387e09fb35a1f84210c2ce5ec24
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:28:05 2020 +0200
Addressing imbris's initial feedback.
Fixes two minor bugs: explosion particles were no longer spawning
randomly, and LOD grids were not perfectly even.
commit 4cbad004f44060994252dd3d38647a14a589712f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:27:58 2020 +0200
Bumping nightly per request.
commit 548680276aac77c25d43d16b5622f847d474dbef
Merge: acc098604 8f8b20c91
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:26:06 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit acc0986040589a3492f88a740bc3c3fc693b26d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:28:32 2020 +0200
Lower resolution due to lying drivers.
commit d3b878de2a52c358d2944a6bbd0555dad7fbdb10
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:15:38 2020 +0200
Fix issues msh encountered with Intel 4600.
commit 10245e0c1b0cb6fae10d86409435364edc6102ef
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 21:15:02 2020 +0200
Merge more models into one mesh than we did previously.
commit 3155c31e663c52ae5c3a53d5fb5665892a1a498a
Merge: 7204cc8a7 3c199280e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:35:22 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7204cc8a7a4f74a30306bd205d9834fee4bb944f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:34:43 2020 +0200
Fix not yet done NPC animations.
This forces them all to be the idle animation if not specified.
This fixes issues where you'd have giant NPCs in water.
commit bc83360f2a08918f19d417b5f772e1ff554dba08
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 19:36:37 2020 +0200
Try to fix some bugs:
- Z fighting with LOD terrain and water.
- Audio SFX not playing.
commit 1fd104aa603bf3781b6526a5cada46aeca3049dd
Merge: 862df3c99 7c2c392a3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 12:02:31 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 862df3c9976c4da9bd7cfd784f1a85973127968a
Merge: 0a4218ed9 75c1d4401
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 05:52:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0a4218ed9d541a2b34c133351bea38a99ddf4ea7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 22:27:14 2020 +0200
Fix particle depth.
commit f51dfdeb442d0dd5243dd2f344fa4be295bd0875
Merge: c6251a956 5e6dc0471
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:19:04 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit c6251a956ad376400dca5c23420cf8d213dc8fdf
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:15:46 2020 +0200
Cache figures more intelligently.
Cache figures for longer, and don't cache character states for the
player except where they actually affect the rendered model.
commit 0ed801d5404982c6fb63b1eaa4567d908b294c9d
Merge: c11b9bdf0 eea64f78f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 16:32:24 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c11b9bdf0a53bf9884d2f5a48fec9b01d582df1a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 11:47:15 2020 +0200
Remove unneeded Clippy annotation.
commit 16aa9ef40af56d69289d00aafb3deadfb8bd4f35
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 8 00:53:02 2020 +0200
Fix hotloading and Clippy.
commit 3dc973e0be5b758da1e9805eb764ad401374cd0c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 23:50:27 2020 +0200
Major speedups with SIMD.
commit fba64a7d93d5a96077ce87287bbce6ab9b7fbcae
Merge: 76429d00e d1e10b178
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:19 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 76429d00eea00d212fbd672a84ee91e75b19b938
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:10 2020 +0200
Add clippy.toml.
commit c79f512f84dbb83cb82b7954db68ff241dfd8e41
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 11:55:20 2020 +0200
Fix all clippy issues, clean up Rust code.
commit 6f90e010b3fbefb53b0d632e819931350015b6b8
Merge: 77a8c7c26 5929cfa5c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:30 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 77a8c7c267d3f44a1a62bd6b2274359973c5e4d4
Merge: b44e44232 44febaabd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:10 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 5929cfa5c713aa392110bbb62407f76caf53c3df
Author: jshipsey <jshipsey18@gmail.com>
Date: Thu Aug 6 20:47:27 2020 -0400
fixed in-hand arrow bug
commit b44e442325d828f1cd564d66908f89d09e80474b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 6 13:40:35 2020 +0200
Miscellaneous performance improvements.
commit be37acf287c1360d8085862526ac3365ffd1d768
Merge: 125d7fc6c c11876547
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 05:49:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 125d7fc6c4dcd8c8c5f27b8268a4d64f409f3644
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 04:55:31 2020 +0200
Abstract over simd vs. repr_c vectors.
Also some minor improvements to Event size.
commit d4d4956e9252e1241ce110b2aa85076c6b1e2a23
Merge: 5f3b7294a aced5f979
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:56:54 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 5f3b7294af1f8533edc2620b58863c248e2b07af
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:43:52 2020 +0200
Fix formatting issues I missed before.
commit a428a3ebba70dcab63dd0f8cd983120c90617271
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:41:51 2020 +0200
Fix clippy warnings, part 1.
There aer still a bunch of type too complex and
function takes too many arguments warnings that I'll fix later
(or ignore, since in the one case I did fix a function takes too
many arguments warning I think it made the code *less* readable).
commit ba54307540ed8a937ac08209730284fc653af85b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 30 13:22:42 2020 +0200
Fix light animations so they are removed when the light turns off.
commit 7e0f4bcbf0f4717145d8beac40d52e3acebbe2aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 21:10:20 2020 +0200
Fix crash in edge case for pixel art.
commit 56da06f7a351e2b949e9b014a90b974d511a0924
Merge: cf74d55f2 9f53a4a19
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:56:52 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:29:52 2020 +0200
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
The first concern was addressed by fixing the dimensions of the map
images drawn from the UI (so that we always use a square source
rectangle, rather than a rectangular one according to the dimensions of
the map). We also fixed the way rotation was done in the fragment
shader for north-facing sources to make it properly handle aspect ratio
(this was already done for north-facing targets). Together, these fix
rendering issues peculiar to rectangular maps.
The second and third concerns were jointly addressed by adding an
optional border color to every 2D image drawn by the UI. This turns
out not to waste extra space even though we hold a full f32 color
(to avoid an extra dependency on gfx's PackedColor), since voxel
images already take up more space than Optiion<[f32; 4]> requires.
This is then implemented automatically using the "border color"
wrapping method in the attached sampler.
Since this is implemented in graphics hardware, it only works (at
least naively) if the actual image bounds match the texture bounds.
Therefore, we altered the way the graphics cache stores images
with a border color to guarantee that they are always in their own
texture, whose size exactly matches their extent. Since the easiest
currently exposed way to set a border color is to do so for an
immutable texture, we went a bit further and added a new "immutable"
texture storage type used for these cases; currently, it is always
and automatically used only when there is a specified border color,
but in theory there's no reason we couldn't provide immutable-only
images that use the default wrapping mdoe (though clamp to border
is admittedly not a great default).
To fix the maps case specifically, we set the border color to a
translucent version of the ocean border color. This may need
tweaking going forward, which shouldn't be hard.
As part of this process, we had to modify graphics replacement to
make sure immutable images are *removed* when invalidated, rather
than just having a validity flag unset (this is normally done by
the UI to try to reuse allocations in place if images are updated
in benign ways, since the texture atlases used for Ui do not
support deallocation; currently this is only used for item images,
so there should be no overlap with immutable image replacement,
so this was purely precautionary).
Since we were already touching the relevant code, we also updated
the image dependency to a newer version that provides more ways
to avoid allocations, and made a few other changes that should
hopefully eliminate redundant most of the intermediate buffer
allocations we were performing for what should be zero-cost
conversions. This may slightly improve performance in some
cases.
commit ad18ce939940a8c697270f6e9b94db9942fd8295
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 13:21:09 2020 +0200
Fix continent scale hack.
commit 36b1cb074f5b195aebd7dbbc3da7f0246a1a18ec
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 12:11:40 2020 +0200
Enable loading different sized maps without a recompile.
We may want to tweak the effects of the continent_scale_hack.
commit 13b6d4d534cc4814b7cb3294ca41bbfea0a6b186
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 10:55:48 2020 +0200
Removing WORLD_SIZE, part 1.
Erased almost every instance of WORLD_SIZE and replaced it with a local
power of two, map_size_lg (which respects certain invariants; see
common/src/terrain/map.rs for more details about MapSizeLg). This also
means we can avoid a dependency on the world crate from client, as
desired.
Now that the rest of the code is not expecting a fixed WORLD_SIZE, the
next step is to arrange for maps to store their world size, and to use
that world size as a basis prior to loading the map (as well, probably,
as prior to configuring some of the noise functions).
commit 30b1d2c6428230a9eaa0d749cdcbbd6f1cbccd78
Merge: 7d56ba31b 1377b369f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:58 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 7d56ba31b445441461b28a07fc495d7d4f047c17
Merge: 2101113b4 598f14b25
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 1377b369f6db2258e910d467a5740f31789e3ded
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sun Jul 19 23:25:38 2020 +0200
more saturated pumpkins
commit ae8d50527f93bb0616c2ad46ce4dacb63bc37c6d
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sat Jul 18 20:29:56 2020 +0200
acacia models
commit 2101113b467e691de787392d7f20f1745f5637bd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 18 18:55:25 2020 +0200
Higher detail LOD.
commit add2cfae04b4385fa5590e11e2bd5229d9dee0aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 16 01:57:39 2020 +0200
Revert some irrelevant stuff.
commit 2e2ab3dc1eaa59a4aef7f8d34a53d8aae4c8553a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 15 13:30:49 2020 +0200
Fixing various things about shadows.
* Correcting optimal LISPSM parameter.
* Figure shadows are cast when they're not visible.
* Chunk shadows stay cast until you look away.
* Seamless cubemaps for point lights.
* Etc.
commit 6c31e6b56217274285b597af297036691ea5d897
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 19:50:26 2020 +0200
Fix shadow creation.
commit 6332cbe006115ae205597529cd8bbccd146c2cca
Merge: be438657c 930e0028b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:47:00 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit be438657c33d7b5bfb0a9582c3ed3fd366637323
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:28:08 2020 +0200
Tweaks to shadows.
Added shadow map resolution configuration, added seamless cubemaps,
documented all existing rendering options, and fixed a few Clippy
errors.
commit 23b4058906013c7d2a40c286e20e32c5fbd897ed
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 10:11:19 2020 +0200
Fix moon, use nonlinear noise for terrain.
Note that the latter has a bit of performance cost.
commit 7fbe5cbfbb9dc29607957b8e62f432a4deed193d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:23:02 2020 +0200
Address lies about max texture size.
commit bcfc62b5e13a1cdd83f57535fde4694720bebfd9
Merge: 75e3626a7 18a08e8fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:22:08 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 75e3626a785919f43fdcf2127c2b10e3e4df2f9f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:21:52 2020 +0200
OpenGL 3.3 minimum.
commit 18a08e8fe2739f02af99a5d2cb4e7c38c49e858b
Author: Monty Marz <m.marzouq@gmx.de>
Date: Tue Jul 7 23:57:52 2020 +0200
settings localization
commit 90c5d1ca3620092bc3ae10b2211489eb1cf6f5e8
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 21:11:48 2020 +0200
Lower near distance.
commit 0e66f02b25aaddaa2dfddbbc89cd67de54a9a7b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 20:09:01 2020 +0200
All sprites sway in the wind now.
commit db1401a6910bf42dcf502462c90038752ff5fbdb
Merge: 69e508d8c e8b4b29d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 19:34:17 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 69e508d8c94d8973033817ca86f357e466fc7c4d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 18:41:37 2020 +0200
Make it easy to switch to SIMD for math.
commit ffe0f5928c7a7e87d00cb5426b3b1d831d7e02fd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 21:21:12 2020 +0200
Fix some issues with underwater rendering.
commit bfda6da42f38fd02c31ee92c81ab785a3e50c2a0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 19:17:59 2020 +0200
Fix some minor display issues.
commit 0ed752e087968cf901301884aaeae698e32ef8a5
Merge: ccc6a06a8 518edcb85
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:14:21 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit ccc6a06a8d4504d6b9f7af7905a414d2ee06ab76
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:04:34 2020 +0200
Some minor changes.
commit 4e020246702889269efe1a191788992164c508d6
Merge: 50a64d927 e05c9267a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 16:17:40 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 50a64d927e6c4f4b0e4688e4cbfca694bc3f922a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 13:07:03 2020 +0200
Fix far plane.
commit 7dd06da34cae8f9ea3b6c889fe965181f3fd3949
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:25:35 2020 +0200
Add shadows.glsl.
commit 618a18c998778bf871b905a74657440fcc384c80
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:10:22 2020 +0200
Adding shadows, greedy meshing, and more.
commit eaea83fe6a5cb1cb0ba8beef888183c718258496
Merge: 267018495 2f89b863e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 22:47:07 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 2670184954a13e4a9e7a4e35ba79aac0c5fac2f7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 21:20:01 2020 +0200
Make civsim and sites deterministic.
For anything in worldgen where you use a HashMap, *please* think
carefully about which hasher you are going to use! This is
especially true if (for some reason) you are depending on hashmap
iteration order remaining stable for some aspect of worldgen.
commit f8376fd5dc72b4a9c2f51a6b4570d59c8b8e9343
Merge: 654f7e049 cdee191dd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 17:53:57 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 654f7e049258d9da27c09608bbe6a46ffa8787e5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed May 20 21:22:30 2020 +0200
Correct backface culling.
commit 560501df05ca725409b0f2e4eb31bdfdc15fd0c7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue May 19 17:22:06 2020 +0200
Greedy messhing for shadows.
commit a4d87e1875ca543436e6bbbeb20348facc5a52d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun May 17 05:59:00 2020 +0200
Shadow maps work for lantern.
commit 243d0837b8a3b08172c9a3c348d964d7ddc2a0a8
Merge: 04382dc28 71dd520cd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:53:13 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 04382dc28632b6c66e8821f6870c0daaa1c1901a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:22:17 2020 +0200
WIP: better graphics config, better LOD, shadow maps.
commit 22ddbad3eb32bfa70f0932176022208fe67ded81
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 18:54:09 2020 +0200
Minor shader fixes.
commit 746a10e8d01ac235f994b0cde78fa48998602a1f
Merge: 0f4a0e763 40ab94673
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 04:02:09 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0f4a0e763db3afbdc4fb0558611f38326ca87151
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 23:03:24 2020 +0200
Switch back to pop-in terrain.
commit dd74fa7e4a53667b38811d7aec58d7f6a68889bb
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 22:58:55 2020 +0200
LOD shading closer to voxel shading.
commit ef67bd58ba0bdaf622b078892d768263b6cba268
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 28 20:49:03 2020 +0200
Experimental underwater lighting.
commit 2c5ad9d07605e80d5fd5679dd3a5d70c605b86a9
Merge: 748279835 303967a6f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 22:35:24 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7482798354eda18c8207950080fc24d443a369de
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 21:59:55 2020 +0200
Replace discard in figure-frag.
commit d83b4ae69be4912f69bf7835f509c68a1c7770a4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:45:57 2020 +0200
Fix sprite lighting, HDR from focus_pos.
commit 0594238004f116274905fa0ed7c2b6c417ed1d29
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:14:10 2020 +0200
Proper HDR from point lights.
commit 48c93d2b41ce5743103d18e76cc228f5ac766492
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 14:01:43 2020 +0200
Brighter ambiance, darker LOD shadows.
commit e0452e895ccfa8a43f368cae3b8b8aedc24dad93
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 13:13:23 2020 +0200
More proper HDR.
commit 4c6da3ed16cfeebb455e40da5f557b4af9a499d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 00:13:10 2020 +0200
Trying LOD noise.
commit 682a3d74c85df5503ffe1fc1cc891bce789df1ad
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 23:11:08 2020 +0200
Fix LOD heights in towns.
commit cc39e5734e8b18f9077bf42e66337c1319dd6b6e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 21:01:23 2020 +0200
More LOD fixes.
commit 8116b21c2e51c836e77894e309ac273caf2917b3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:54:43 2020 +0200
I like this coloring.
commit bc2560ea90b36f4b46190005344232d993043ac3
Merge: 14effdd5d e690efe71
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:48:33 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 14effdd5db8747fcf3eb34f03b46b7792e92d1c5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:24:35 2020 +0200
Re-saturate.
commit 48a643955d4435b78179acba0beb4a979905cc31
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:23:57 2020 +0200
Various fixes.
commit f7b497a0c25f4ad4682c71dd1ed6f608052feb9b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 03:22:49 2020 +0200
Render figures again.
commit 44e4aad48deba8266b9f8bdfd3db096b381f5327
Merge: e6f0a5a98 9ec319a18
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 02:01:04 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit e6f0a5a981a82533ba188fff0a54ce98577bb152
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 24 16:12:20 2020 +0200
Add atmospheric scattering.
commit f2953087f691a8edbc001cb98ebf5059fc6f8ac0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 23 00:01:20 2020 +0200
Fix shadowing for specular reflections.
commit ddd4a67a9799b8d08c7dc0c2bec90621c2bed0e3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Apr 22 22:56:12 2020 +0200
HDR fixes.
commit 1015e60deef3c447381996277df7496707a63bd0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 21 18:25:19 2020 +0200
More lighting changes.
commit 80c264abd111fb237e57843efcb5c071d4f84613
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 13 00:29:59 2020 +0200
Lighting experiments.
commit 8414987e589dd5102bad89762a3adaccc0bfe957
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 9 02:38:40 2020 +0200
WIP -- lighting changes and soft shadows.
commit 9cd2b3fb0d6b49776c6dfe463e4169637250b11a
Merge: c7ea687eb 8b149ad11
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:29 2020 +0200
Merge branch 'sharp/new-lighting' into sharp/small-fixes
commit c7ea687ebbc5aace1b455f134a5bf49ce2c7434a
Merge: 476441531 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:02 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 8b149ad11ad4bb75018fcf9519baec27d1c95951
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:32:39 2020 +0200
Trying out a new lighting model.
commit b0ac9f36f755dd06f7c17c46150568064790864f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 07:56:11 2020 +0200
Use bicubic interpolation for terrain.
commit f6fc9307a121514b614bc50ef8eb055953e7da8a
Merge: 33140a295 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 05:01:41 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 4764415312aae6e9ac2d00e86e84577cb958f1ab
Merge: ed2d0111d 13388ee6a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 04:54:48 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 13388ee6a42943f3f79a9cb488346cef18e272fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 20:30:08 2020 +0200
Various fixes (to coloring and to soft shadows).
commit fbd084a94a067082a87cd6d28b82054709bc9265
Merge: 5a089863b 4fdf6896a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 18:50:38 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/map-colors
commit ed2d0111d994262ae836d84d1fe5a45e4de72a0b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 06:49:27 2020 +0200
Combining colors and LOD.
commit 88342640c6b835114d01c797b89fdede3b0a2108
Merge: 33140a295 5a089863b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:49:20 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 33140a2951b8212725f42c758b277aaec4d888f7
Merge: 4c65a5aed f34d4b379
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:36:21 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 5a089863beb01d4794bbe3580ada47b278715ea2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 03:17:49 2020 +0200
Making maps brighter.
This is probably not the right way to do it, but oh well!
commit 32b2c99109dd486aa922886081068f9c550c83f2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 02:46:36 2020 +0200
Horizon mapping and "layered" map generation.
Horizon mapping is a method of shadow mapping specific to height maps.
It can handle any angle between 0 and 90 degrees from the ground, as
long as know the horizontal direction in advance, by remembering only a
single angle (the "horizon angle" of the shadow map). More is explained
in common/src/msg/server.rs. We also remember the approximate height of
the largest occluder, to try to be able to generate soft shadows and
create a vertical position where the shadows can't go higher.
Additionally, map generation has been reworked. Instead of computing
everything from explicit samples, we pass in sampling functions that
return exactly what the map generator needs. This allows us to cleanly
separate the way we sample things like altitudes and colors from the map
generation process. We exploit this to generate maps *partially* on the
server (with colors and rivers, but not shading). We can then send the
partially completed map to the client, which can combine it with shadow
information to generate the final map. This is useful for two reasons:
first, it makes sure the client can apply shadow information by itself,
and second, it lets us pass the unshaded map for use with level of
detail functionality.
For similar reasons, river generation is split
out into its own layer, but for now we opt to still generate rivers on
the server (since the river wire format is more complicated to compress
and may require some extra work to make sure we have enough precision to
draw rivers well enough for LoD).
Finally, the mostly ad-hoc lighting we were performing has been (mostly)
replaced with explicit Phong reflection shading (including specular
highlights). Regularizing this seems useful and helps clarify the
"meaning" of the various light intensities, and helps us keep a more
physically plausible basis. However, its interaction with soft shadows
is still imperfect, and it's not yet clear to me what we need to do to
turn this into something useful for LoD.
commit f8926a5737ddc51f3d585c651a64c43677aae0f4
Merge: a1aee931e 875ae6ced
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Mar 13 13:32:42 2020 +0100
Merge remote-tracking branch 'origin/master' into sharp/map-colors
commit 4c65a5aed353b119aea65a2aaeb94549b67beb42
Author: Treeco <5021038-Treeco@users.noreply.gitlab.com>
Date: Mon Feb 24 16:48:05 2020 +0000
Made LOD setting slider exponential
commit 2fa7b2d20d7233dc8bfd64f9f7f54617575248f1
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 17:49:53 2020 +0000
Added mist to LoD
commit aab059a450b5f635777129ff82cc15b662965c3c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 15:14:06 2020 +0000
Added LoD slider
commit 779c36b538121c5ade3633ae5cb67bb14c8c3877
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:54:55 2020 +0000
Reduced cost of vertex pushing
commit 9fea150473906b166365b738ebcea07c697daf3d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:38:53 2020 +0000
Fixed maths, improved LoD resolution
commit 5481df38fea5bf183ff376a3337179cfaa5233dc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 11:22:50 2020 +0000
Dynamically relocate LoD vertices to enhance details
commit a3e36a50ababd615da7db1b26158c7906a5def01
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 18:13:51 2020 +0000
Simpler terrain spiral rendering
commit 255f450ae9ac8763db4bede075fb409161ed57cc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:53:17 2020 +0000
Better LoD precision
commit 3d027aebe812a5b8658a4eb8123dc9f61b3776d2
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:04:03 2020 +0000
Better falloff
commit be775c9484b457b2c0b1a494aec03392d0c70e76
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 15:30:45 2020 +0000
Applied good ideas from experimental branch
commit 58587b68545a23c5c04ab4574a4b94b3bc982246
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 16:15:13 2020 +0000
Minor fixes to LoD merging
commit 7b42aebd709c14df2db766aad61d9280ad24d84d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 15:04:44 2020 +0000
Capped LoD dragging
commit 8aafc559f87124e1ea5ca6e3ddc2aa0c242d793c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:54:37 2020 +0000
Better blending between LoD and terrain border
commit edd3455d5161792d87ddc8eadc0ecbad5532b284
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:40:19 2020 +0000
Fixed LoD z depth, added sea level offset
commit b9b06744620114dd5556e73f64fa93c145503a7c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:27:43 2020 +0000
Better LoD smoothing
commit a1aee931e790431560cd2d953ad61d9497072afd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Feb 21 14:52:17 2020 +0100
Adding shadows.
commit 2400786c13dd891c131ed86d48d05df516a8a778
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 13:48:40 2020 +0000
Use world map as LoD source
commit dbf650f504a4c25fbbc2096ac3616c736bf52d23
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Jan 20 00:48:14 2020 +0000
Better clouds at distance
commit 5e6f81b86cdb9730b9b056877b19257075fd5fa8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Jan 19 23:59:02 2020 +0000
sync
commit 745e7540ddb000cc645f612767b337c2ddc3f7c0
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 12:40:48 2019 +0000
Improved cloud falloff mist, faster noise sampling
commit f6a200d0cb866196ba57697466755f9e0c7ea5d8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 10:09:00 2019 +0000
Improved long-range depth precision, removed unnecessary LoD polygons
commit 63d1b2bb2292898d59fb4f4e502201103dfeb86f
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 20:57:46 2019 +0000
Working LoD shader
commit f13d98ee3e58f881e8b978861a67663b59ed91ec
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 11:03:40 2019 +0000
LoD first attempt (stack overflow issue)
2020-08-20 18:34:59 +00:00
|
|
|
|
usize::from(map_size_lg.chunks().x),
|
|
|
|
|
usize::from(map_size_lg.chunks().y),
|
2020-01-11 21:05:22 +00:00
|
|
|
|
TerrainChunkSize::RECT_SIZE.x as Compute,
|
|
|
|
|
TerrainChunkSize::RECT_SIZE.y as Compute,
|
|
|
|
|
maxh,
|
|
|
|
|
)
|
|
|
|
|
};
|
(See sharp/lod-history) LOD, shadows, greedy meshing, new lighting, perf
---
Pretty much a Veloren fork at this point. Here's a high level overview of the changes (will be added to CHANGELOG just before merge).
At a high level this MR incorporates roughly two groups of changes.
The first group consists of new game features: more flexible map sizes, level of detail terrain, shadow maps, and a new lighting
engine. This is "feature work" that (mostly) only adds new things to Veloren, and mostly shouldn't affect old stuff.
The second big group of changes are those addressing the fallout from all the new features. These include performance fixes of
various sorts: the addition of multiple graphics options and optimization of the cheap ones to avoid work, switching all voxel
models to use some variant of greedy meshing, switching over much of our CPU-side vector math to exploit SIMD instructions
(coinciding with a fork of `vek`), and a rewrite of how the UI handles text rendering (coinciding with updates to our fork
of `conrod`). Making Veloren's hardcoded colors appear correct under the new lighting engine also required considerably
changes (TODO: Fill in this section when it's complete).
The second category of changes often heavily touches code owned by other people, including frequently modified code "owned" by a
handful of people, so I recommend that this code be reviewed particularly carefully.
---
At a high level (each will be described in more detail below):
- The world map has been refactored.
- The world size is no longer hardcoded (@zesterer).
- The map generation code was made generic to allow using it outside of the `world` crate (@zesterer).
- On world creation, we now compute *horizon maps* (@zesterer).
- The way we pass the world from the server to the client has been updated (@xMAC94x).
- Artifacts related to image rotation were fixed (@imbris).
- Multiflow rivers were enabled (@zesterer).
- In the process of making changes related to the world map, various incidental fixes and optimizations were required.
- The new *level of detail* feature was added (@zesterer wrote part of this and has checked out the rest).
- A new LOD terrain rendering step was added to the pipeline.
- The LOD terrain quality was made configurable via a graphics setting.
- Horizon maps were used to cast shadows from LOD chunks on both LOD and non-LOD terrain.
- A "voxelization" effect was incorporated into rendered LOD terrain to make it blend better into the world.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Veloren's lighting has been completely overhauled (@zesterer has already checked most of this out).
- A semi-accurate index of refraction was assigned to our materials.
- A new, more realistic, physically based approach to lighting was used using the *Ashikhmin Shirley* BRDF.
- We emulate *atmospheric scattering* using equations designed for measuring solar panel light exposure.
- We attempt to compute *realistic light attenuation* in water using its real material properties.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Point and directional lights now cast realistic shadows, using *shadow mapping.* (@imbris, @zesterer, @Treeco, @YuriMomo)
- Point light shadow maps were added to the rendering pipeline, using geometry shaders and *seamless cube maps*.
- Directional light shadows were added to the rendering pipeline, using LISPSM together with disabling *depth clamping*.
- "Shadow-only" chunks and NPCs were added to prevent shadows from models behind you from disappearing.
- In the process of making changes related to shadow maps, various incidental fixes and optimizations were required.
The addition of shadow maps, LOD terrain, and the new lighting all led to significant performance degradation, on top of other
changes happening in master. Therefore, a large number of performance improvements were also needed:
- The graphics options were made much more flexible and configurable, and shaders were optimize.
- New options were provided for how to render lights and shadows (@Pfauenauge, @zesterer).
- Graphic setting storage and configuration were overhauled to make adding new features easier (@Pfauenauge, @imbris).
- Shaders were rewritten to utilize GLSL's preprocessor to avoid overhead (@zesterer, @YuriMomo).
- In the process of making changes related to providing additional rendering options, various incidental fixes and optimizations were required.
- Voxel model creation was switched to use *greedy meshing.*
- A new voxel meshing method, greedy meshing, was added (@imbris).
- Uses of the older meshing methods were migrated to use greedy meshing (@imbris, @jshipsey, @Pfauenauge).
- New restrictions were added to terrain, figure, and sprites to future proof them for further optimizations (@jshipsey, @Pfauenauge, @zesterer).
- Most positions are now relative to either chunk or player position for better precision (@imbris, @zesterer, @scottc).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- Animation and terrain math were switched to use SIMD where possible.
- Fixes were made to vek to make its SIMD feature usable for us (@zesterer, @imbris).
- The interface and types used in bone animation were changed in various ways (@jshipsey, @Snowram, @Pfauenauge).
- Redundant code generation for body animation is now partly taken care of by a macro (@jshipsey, @Snowram, @Pfauenauge).
- Animation code was modified to to use vek's SIMD representation where possible (@jshipsey, @Snowram, @Pfauenauge).
- Terrain meshing code and shadow map math were also modified to use vek's SIMD representation (@imbris).
- SIMD instruction generation was enabled (@YuriMomo, @jshipsey, @Snowram, @imbris, @Angelonfira, @xMAC94x).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- The way we cache glyphs was completely refactored, fixed, and optimized.
- Our fork of `conrod` was optimized in various ways (@imbris).
- Our fork of `conrod` now exposes whether a widget was updated during the current frame (@imbris).
- Our use of the glyph cache was rewritten for correctness (@imbris).
- A *text cache* was introduced that lets us skip remeshing glyphs that have not changed (@imbris).
- Various changes were made to reduce pressure on the glyph cache, with more planned (@imbris, @Pfauenauge).
- In the process of making changes related to the glyph cache, various incidental fixes and optimizations were required.
- Colors were changed to keep Veloren's look consistent with master.
- Some older tree models were brought back (@Pfauenauge).
- TODO(@Sharp): All hardcoded colors were extracted and made hotloadable.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Hardcoded colors were fixed to conform to Veloren's style.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Color models were fixed to conform to Veloren's style.
A detailed description of the involved changes follows.
---
- The world size is no longer hardcoded. All functions dependent on world size now take a `WorldSizeLg`, which holds the base 2 logarithm of each actual world dimension and is guaranteed to maintain certain properties (outlined in `common/src/terrain/map.rs`). Additionally, many utility functions that utilize the world size were moved into `common` as well (mostly `common/src/terrain/mod.rs`). Finally, the world map format was updated in order to store its size explicitly, with a migration path from the old format that should work whenever the old formatted map was a square (practically always). See `world/src/sim/mod.rs` for these changes.
- The map generation code was made generic to allow using it outside of the `world` crate. The parts of the map generating code that do not need to query the world were moved over to `common/src/terrain/map.rs`, allowing them to be used from the client without creating a dependency on `world`. The rest of it was turned into helper functions in `world/src/sim/map.rs`, which can be passed as closures to the generic map generation code to complete its construction. This also means that colors are now passed in separately to the map generation function. See <https://veloren.net/devblog-78/> for more details.
- On world creation, we now compute *horizon maps*. See the function in `world/src/sim/util.rs`.
Given a height map and a plane intersecting that height map, our horizon maps allow us to encode enough information to reconstruct shadows for each point on the height map using only the *horizon angle* (the angle at which the sun starts to become visible). As Veloren's sun only covers one plane, this is sufficient for encoding sun shadows for LOD terrain, by encoding two angles per chunk (one for each 90 degrees the sun covers). We can also use this for the moon, if we want, since the moon follows the same path. Additionally, we store the *height* of the furthest occluder, to try to make the shadows volumetric; so this means 4 bytes in total for each chunk.
Support for horizon maps has been merged into the map functionality in common as well.
- The way we pass the world from the server to the client has been updated. Rather than passing the prerendered map, we instead pass three maps with values for each chunk; one with the color information, a second with altitude information, and a third with horizon map information. We then reconstruct the map on the client, together with some additional information we send from the server (like the sea level and maximum height). See `common/src/msg/server.rs` for a detailed description of the format of `WorldMapMsg`, and `server/src/libr.rs` and `client/src/lib.rs` for details of the map construction and parsing.
- Artifacts related to image rotation were fixed. See the commit message for commit SHA `cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e` for a detailed explanation. This involved changes to shaders, the addition of a new type of graphic (also reflected in the graphic cache) that allows specifying a border color (which automatically makes the associated texture immutable), and some related fixes. I reproduce the first two paragraphs of the MR description as well:
```
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
```
- Multiflow rivers were enabled.
This does not really need to be part of this MR, and would be easy to revert, but since it seemed to provide a nice improvement it's currently packaged with it.
We already computed multiple outflows from each chunk for erosion purposes long before this MR.
However, we never modified river rendering to be able to handle this case (just a single downhill river flow is complex enough!) so this was not exposed when deciding which chunks were rivers.
Now that
- In the process of making changes related to the world map, various incidental fixes and optimizations were required. Some examples of fixes include making sure terrain is never lowered to below sea level (to make the shadow maps report correct values), fixing map altitudes and colors to understand things like cliffs and "block level" coloring (that doesn'te xist on the column level), and fixing a crashbug when rendering images for the UI where source pixels are strongly rectangular. Some examples of related performance fixes include avoiding allocating a fresh vector for all the maps (i.e. copying it over to change the format from `[u32; n]` to `DynamicImage` and then copying again to convert to `RgbaImage`), and instead using the `gfx::memory::slice` function to accomplish the same thing. These sorts of changes are spread all arond the code.
This includes the additon of a new scene, `voxygen/src/scene/lod.rs`, a new pipeline `voxygen/src/render/pipeline/lod_terrain.rs`, and new shaders `assets/vxygen/shaders/lod-terrain-vert.glsl` and `assets/vxygen/shaders/lod-terrain-frag.glsl`, as well as associated changes to the renderer in `voxygen/src/render/renderer.rs`.
The main idea behind our initial approach to LOD was to take the world data we now get from the server (altitude, color, and horizon mapping).
- Some previously computed values were turned into shader uniforms for better prediction on weak processors. (@zesterer)
- Calls to power or trig functions were removed or replaced with multiplications, where possible.
- After some deliberation
- To properly handle sprite "waving" for nearby sprites,
We explicitly designed the greedy meshing system with figures and sprites in mind.
In both cases, we want to be able to *efficiently* pack many different models into the same texture, especially in cases where we know
we will either not be removing any of the grouped-together from the models from the texture, or will remove all of them at once (so
they can be packed into some specific subtexture).
For sprites, since we know every model in advance and never intend to deallocate them, we currently pack them all as efficiently as
possible into one giant tetxure atlas. However, in the future we might opt to pack them slightly less efficiently in exchange for
shrinking the sprite vertex size.
For figures, we pack all the textures for each *model* into the same atlas.
is a global texture atlas used for every sprite, and for figures which is why we have the ability to mesh multiple
models to the same texture area (using the simple texture atlas allocator) without requiring intermediate vector allocations.
This is accomplished by delaying the time when we actually write the color and light data to the texture until *after* all the
model vertices have been meshed; then, we can just allocate the whole color/light array at once, making the atlas we use an
exact fit. In computer science-y terms, we accomplish this delay by, after we perform the initial greedy meshing (without
texture information), not continuing to create the texture data, but instead constructing a *continuation*--that is, a function
that, when called, will execute the rest of the computation. We push this continuation (which in Rust terms is a `FnOnce` closure
that takes the `ColLightsInfo` that it is supposed to write to as context) onto a
onto a vector
resizing. To allow for suspended writes to texture data, Rust pointed out to me that the continuation that would eventually write the color and light data to the texture atlas (the one that is shared by all models sharing the same greedy mesher) would have to *own* whatever data it mshed. Because we often generate the model data to mesh as a temporary in `voxygen/src/load.rs`, the
- Matrix multiplications in the shader were reduced for figure data (@zesterer).
- Vertex "waves" for fluid data were removed.
- Terrain "bending" near edges was removed.
- Scaling was fixed to make sure empty space was not introduced in a space previously occupied by a block. It was also changed to take ownership of its voxel data,
rather than sharing it, to let it be used with meshing.
- Rust's nightly version was bumped in order to use the `array_map` function, which lets us reuse more code between the simple map and `FigureModelCache`.
- PositionedGlyph::standalone.
---
I tried to cite sources in many cases[^realtime],[^lloyd],[^lispsm],[^pbrt],[^greedy],[^tjunctions]
where I needed features from elsewhere but I am particularly grateful for the following resources,
esepcially where they have accompanying source code. I linked all of them that are accessible to the public (those that are not were
obtained through legal means).
[^realtime]: Eisemann, Elmar, Michael Schwarz, Ulf Assarsson, Michael Wimmer. Real-Time Shadows. A K Peters/CRC Press (T&F), 20160419.
[^lloyd]: Lloyd,B. 2007. [Logarithmic perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). PhD thesis, University of North Carolina.
[^lispsm]: Wimmer, M., Scherzer, D., and Purgathofer, W. 2004. [Light space perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). In Proceedings of Eurographics Symposium on Rendering 2004, pp. 143– 152.
[^pbrt]: Pharr, Matt, et al. [http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf](Physically Based Rendering: From Theory to Implementation). Third edition, Morgan Kaufmann Publishers/Elsevier, 2017.
[^greedy]: mikolalysenko. “Meshing in a Minecraft Game.” 0 FPS, 30 June 2012, <https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/>.
[^tjunctions]: blackflux. “Meshing in Voxel Engines – Part 1.” Blackflux.Com, 23 Feb. 2014, <https://blackflux.wordpress.com/2014/02/23/meshing-in-voxel-engines-part-1/>.
I am also especially grateful to Khronos, Wikiepdia, and stackoverflow for answering many of my specific questions while writing the MR.
---
Squashed commit of the following:
commit 300505e7305a2fdac722a808ee8538323f215f39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 18:46:25 2020 +0200
Fixing cargo doc and typo in CHANGELOG.
commit ec0aeb18e8499d7d84ef818331b4b65c3d76cea6
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 15:38:50 2020 +0200
Hopefully final commit for the LOD branch.
commit 5e8ea0b1eaac02903a02feb2eb038d195de4872f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 10:14:26 2020 +0200
Falling back to power as stopgap.
commit e44a1cbf46504ee9931a01bdc9033e145500d557
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 09:25:41 2020 +0200
Address imbris feedback.
Temporarily disables shiny water, lowers max VD.
These restrictions will be lifted soon after merging.
commit 561e25778a108ac3712f5ec2ce3a51234c4430d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 08:31:13 2020 +0200
Tweaking shaders a bit.
commit 7d19259078ce0dd7b3742ad7d0cb3fab3ece3fdc
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:59:43 2020 +0200
Fix view example as well.
commit 051cd4934e0fad2c0b15db4380a4189fa318679f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:29:06 2020 +0200
Fix meshing benchmark.
commit c95e07db3b4dcca285678985e65e31b927cb1c61
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 05:46:22 2020 +0200
Address MR feedback, fix scene clouds.
commit 1bfb816cabdb3ffc1e507a009c2d98696b4b573a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:39:36 2020 +0200
Incorporating Pfau's figure color changes.
New eyes and new humanoid colors.
commit 3f9b89a3ac7b3356b1dba0d1a8f6541357f81469
Merge: e2f5162e4 62c53963a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:29:41 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit e2f5162e4f96f4124aa43488f7245d341b3dcfd4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:28:38 2020 +0200
World colors are all hotloadable.
They live in assets/world/style/colors.ron.
Only a small handful of hardcoed colors remain in World; they are either
part of the map, or difficult to disentangle from the rest of the
computation. Comments are made where appropriate.
commit 62c53963abe1975009d34a8f9515a355bef24f31
Author: Marcel Märtens <marcel.cochem@googlemail.com>
Date: Wed Aug 19 15:59:00 2020 +0200
replace pretty_env_logger with tracing
commit 5b1625f99d9586fe80e2232f583ec5af9f953099
Merge: d71003acd 4942b5b39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:15:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit d71003acdabeff970b3928e97c26af6847b5b78e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:14:34 2020 +0200
Hotloading colors, part 1: colors in common.
Currently, this just entails humanoid colors. There are only three
colors not handled; the light emitter colors in
common/src/comp/inventory/item/tool.rs. These don't seem important
enough to me to warrant making hotloadable, at least not right now, but
if it's needed later we can always add them to the file.
commit 63b5e0e553eb2ea49276f192a6fc7dd65254270d
Merge: c32b337a4 6d2c4b9c1
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 13:05:37 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c32b337a46e10d9de473d178a94a3ccd61c39bb3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:52:04 2020 +0200
Fixing LOD grid, for real.
commit a166ae0360395387e09fb35a1f84210c2ce5ec24
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:28:05 2020 +0200
Addressing imbris's initial feedback.
Fixes two minor bugs: explosion particles were no longer spawning
randomly, and LOD grids were not perfectly even.
commit 4cbad004f44060994252dd3d38647a14a589712f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:27:58 2020 +0200
Bumping nightly per request.
commit 548680276aac77c25d43d16b5622f847d474dbef
Merge: acc098604 8f8b20c91
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:26:06 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit acc0986040589a3492f88a740bc3c3fc693b26d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:28:32 2020 +0200
Lower resolution due to lying drivers.
commit d3b878de2a52c358d2944a6bbd0555dad7fbdb10
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:15:38 2020 +0200
Fix issues msh encountered with Intel 4600.
commit 10245e0c1b0cb6fae10d86409435364edc6102ef
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 21:15:02 2020 +0200
Merge more models into one mesh than we did previously.
commit 3155c31e663c52ae5c3a53d5fb5665892a1a498a
Merge: 7204cc8a7 3c199280e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:35:22 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7204cc8a7a4f74a30306bd205d9834fee4bb944f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:34:43 2020 +0200
Fix not yet done NPC animations.
This forces them all to be the idle animation if not specified.
This fixes issues where you'd have giant NPCs in water.
commit bc83360f2a08918f19d417b5f772e1ff554dba08
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 19:36:37 2020 +0200
Try to fix some bugs:
- Z fighting with LOD terrain and water.
- Audio SFX not playing.
commit 1fd104aa603bf3781b6526a5cada46aeca3049dd
Merge: 862df3c99 7c2c392a3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 12:02:31 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 862df3c9976c4da9bd7cfd784f1a85973127968a
Merge: 0a4218ed9 75c1d4401
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 05:52:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0a4218ed9d541a2b34c133351bea38a99ddf4ea7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 22:27:14 2020 +0200
Fix particle depth.
commit f51dfdeb442d0dd5243dd2f344fa4be295bd0875
Merge: c6251a956 5e6dc0471
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:19:04 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit c6251a956ad376400dca5c23420cf8d213dc8fdf
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:15:46 2020 +0200
Cache figures more intelligently.
Cache figures for longer, and don't cache character states for the
player except where they actually affect the rendered model.
commit 0ed801d5404982c6fb63b1eaa4567d908b294c9d
Merge: c11b9bdf0 eea64f78f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 16:32:24 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c11b9bdf0a53bf9884d2f5a48fec9b01d582df1a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 11:47:15 2020 +0200
Remove unneeded Clippy annotation.
commit 16aa9ef40af56d69289d00aafb3deadfb8bd4f35
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 8 00:53:02 2020 +0200
Fix hotloading and Clippy.
commit 3dc973e0be5b758da1e9805eb764ad401374cd0c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 23:50:27 2020 +0200
Major speedups with SIMD.
commit fba64a7d93d5a96077ce87287bbce6ab9b7fbcae
Merge: 76429d00e d1e10b178
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:19 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 76429d00eea00d212fbd672a84ee91e75b19b938
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:10 2020 +0200
Add clippy.toml.
commit c79f512f84dbb83cb82b7954db68ff241dfd8e41
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 11:55:20 2020 +0200
Fix all clippy issues, clean up Rust code.
commit 6f90e010b3fbefb53b0d632e819931350015b6b8
Merge: 77a8c7c26 5929cfa5c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:30 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 77a8c7c267d3f44a1a62bd6b2274359973c5e4d4
Merge: b44e44232 44febaabd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:10 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 5929cfa5c713aa392110bbb62407f76caf53c3df
Author: jshipsey <jshipsey18@gmail.com>
Date: Thu Aug 6 20:47:27 2020 -0400
fixed in-hand arrow bug
commit b44e442325d828f1cd564d66908f89d09e80474b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 6 13:40:35 2020 +0200
Miscellaneous performance improvements.
commit be37acf287c1360d8085862526ac3365ffd1d768
Merge: 125d7fc6c c11876547
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 05:49:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 125d7fc6c4dcd8c8c5f27b8268a4d64f409f3644
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 04:55:31 2020 +0200
Abstract over simd vs. repr_c vectors.
Also some minor improvements to Event size.
commit d4d4956e9252e1241ce110b2aa85076c6b1e2a23
Merge: 5f3b7294a aced5f979
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:56:54 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 5f3b7294af1f8533edc2620b58863c248e2b07af
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:43:52 2020 +0200
Fix formatting issues I missed before.
commit a428a3ebba70dcab63dd0f8cd983120c90617271
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:41:51 2020 +0200
Fix clippy warnings, part 1.
There aer still a bunch of type too complex and
function takes too many arguments warnings that I'll fix later
(or ignore, since in the one case I did fix a function takes too
many arguments warning I think it made the code *less* readable).
commit ba54307540ed8a937ac08209730284fc653af85b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 30 13:22:42 2020 +0200
Fix light animations so they are removed when the light turns off.
commit 7e0f4bcbf0f4717145d8beac40d52e3acebbe2aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 21:10:20 2020 +0200
Fix crash in edge case for pixel art.
commit 56da06f7a351e2b949e9b014a90b974d511a0924
Merge: cf74d55f2 9f53a4a19
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:56:52 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:29:52 2020 +0200
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
The first concern was addressed by fixing the dimensions of the map
images drawn from the UI (so that we always use a square source
rectangle, rather than a rectangular one according to the dimensions of
the map). We also fixed the way rotation was done in the fragment
shader for north-facing sources to make it properly handle aspect ratio
(this was already done for north-facing targets). Together, these fix
rendering issues peculiar to rectangular maps.
The second and third concerns were jointly addressed by adding an
optional border color to every 2D image drawn by the UI. This turns
out not to waste extra space even though we hold a full f32 color
(to avoid an extra dependency on gfx's PackedColor), since voxel
images already take up more space than Optiion<[f32; 4]> requires.
This is then implemented automatically using the "border color"
wrapping method in the attached sampler.
Since this is implemented in graphics hardware, it only works (at
least naively) if the actual image bounds match the texture bounds.
Therefore, we altered the way the graphics cache stores images
with a border color to guarantee that they are always in their own
texture, whose size exactly matches their extent. Since the easiest
currently exposed way to set a border color is to do so for an
immutable texture, we went a bit further and added a new "immutable"
texture storage type used for these cases; currently, it is always
and automatically used only when there is a specified border color,
but in theory there's no reason we couldn't provide immutable-only
images that use the default wrapping mdoe (though clamp to border
is admittedly not a great default).
To fix the maps case specifically, we set the border color to a
translucent version of the ocean border color. This may need
tweaking going forward, which shouldn't be hard.
As part of this process, we had to modify graphics replacement to
make sure immutable images are *removed* when invalidated, rather
than just having a validity flag unset (this is normally done by
the UI to try to reuse allocations in place if images are updated
in benign ways, since the texture atlases used for Ui do not
support deallocation; currently this is only used for item images,
so there should be no overlap with immutable image replacement,
so this was purely precautionary).
Since we were already touching the relevant code, we also updated
the image dependency to a newer version that provides more ways
to avoid allocations, and made a few other changes that should
hopefully eliminate redundant most of the intermediate buffer
allocations we were performing for what should be zero-cost
conversions. This may slightly improve performance in some
cases.
commit ad18ce939940a8c697270f6e9b94db9942fd8295
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 13:21:09 2020 +0200
Fix continent scale hack.
commit 36b1cb074f5b195aebd7dbbc3da7f0246a1a18ec
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 12:11:40 2020 +0200
Enable loading different sized maps without a recompile.
We may want to tweak the effects of the continent_scale_hack.
commit 13b6d4d534cc4814b7cb3294ca41bbfea0a6b186
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 10:55:48 2020 +0200
Removing WORLD_SIZE, part 1.
Erased almost every instance of WORLD_SIZE and replaced it with a local
power of two, map_size_lg (which respects certain invariants; see
common/src/terrain/map.rs for more details about MapSizeLg). This also
means we can avoid a dependency on the world crate from client, as
desired.
Now that the rest of the code is not expecting a fixed WORLD_SIZE, the
next step is to arrange for maps to store their world size, and to use
that world size as a basis prior to loading the map (as well, probably,
as prior to configuring some of the noise functions).
commit 30b1d2c6428230a9eaa0d749cdcbbd6f1cbccd78
Merge: 7d56ba31b 1377b369f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:58 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 7d56ba31b445441461b28a07fc495d7d4f047c17
Merge: 2101113b4 598f14b25
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 1377b369f6db2258e910d467a5740f31789e3ded
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sun Jul 19 23:25:38 2020 +0200
more saturated pumpkins
commit ae8d50527f93bb0616c2ad46ce4dacb63bc37c6d
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sat Jul 18 20:29:56 2020 +0200
acacia models
commit 2101113b467e691de787392d7f20f1745f5637bd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 18 18:55:25 2020 +0200
Higher detail LOD.
commit add2cfae04b4385fa5590e11e2bd5229d9dee0aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 16 01:57:39 2020 +0200
Revert some irrelevant stuff.
commit 2e2ab3dc1eaa59a4aef7f8d34a53d8aae4c8553a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 15 13:30:49 2020 +0200
Fixing various things about shadows.
* Correcting optimal LISPSM parameter.
* Figure shadows are cast when they're not visible.
* Chunk shadows stay cast until you look away.
* Seamless cubemaps for point lights.
* Etc.
commit 6c31e6b56217274285b597af297036691ea5d897
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 19:50:26 2020 +0200
Fix shadow creation.
commit 6332cbe006115ae205597529cd8bbccd146c2cca
Merge: be438657c 930e0028b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:47:00 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit be438657c33d7b5bfb0a9582c3ed3fd366637323
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:28:08 2020 +0200
Tweaks to shadows.
Added shadow map resolution configuration, added seamless cubemaps,
documented all existing rendering options, and fixed a few Clippy
errors.
commit 23b4058906013c7d2a40c286e20e32c5fbd897ed
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 10:11:19 2020 +0200
Fix moon, use nonlinear noise for terrain.
Note that the latter has a bit of performance cost.
commit 7fbe5cbfbb9dc29607957b8e62f432a4deed193d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:23:02 2020 +0200
Address lies about max texture size.
commit bcfc62b5e13a1cdd83f57535fde4694720bebfd9
Merge: 75e3626a7 18a08e8fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:22:08 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 75e3626a785919f43fdcf2127c2b10e3e4df2f9f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:21:52 2020 +0200
OpenGL 3.3 minimum.
commit 18a08e8fe2739f02af99a5d2cb4e7c38c49e858b
Author: Monty Marz <m.marzouq@gmx.de>
Date: Tue Jul 7 23:57:52 2020 +0200
settings localization
commit 90c5d1ca3620092bc3ae10b2211489eb1cf6f5e8
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 21:11:48 2020 +0200
Lower near distance.
commit 0e66f02b25aaddaa2dfddbbc89cd67de54a9a7b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 20:09:01 2020 +0200
All sprites sway in the wind now.
commit db1401a6910bf42dcf502462c90038752ff5fbdb
Merge: 69e508d8c e8b4b29d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 19:34:17 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 69e508d8c94d8973033817ca86f357e466fc7c4d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 18:41:37 2020 +0200
Make it easy to switch to SIMD for math.
commit ffe0f5928c7a7e87d00cb5426b3b1d831d7e02fd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 21:21:12 2020 +0200
Fix some issues with underwater rendering.
commit bfda6da42f38fd02c31ee92c81ab785a3e50c2a0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 19:17:59 2020 +0200
Fix some minor display issues.
commit 0ed752e087968cf901301884aaeae698e32ef8a5
Merge: ccc6a06a8 518edcb85
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:14:21 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit ccc6a06a8d4504d6b9f7af7905a414d2ee06ab76
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:04:34 2020 +0200
Some minor changes.
commit 4e020246702889269efe1a191788992164c508d6
Merge: 50a64d927 e05c9267a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 16:17:40 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 50a64d927e6c4f4b0e4688e4cbfca694bc3f922a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 13:07:03 2020 +0200
Fix far plane.
commit 7dd06da34cae8f9ea3b6c889fe965181f3fd3949
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:25:35 2020 +0200
Add shadows.glsl.
commit 618a18c998778bf871b905a74657440fcc384c80
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:10:22 2020 +0200
Adding shadows, greedy meshing, and more.
commit eaea83fe6a5cb1cb0ba8beef888183c718258496
Merge: 267018495 2f89b863e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 22:47:07 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 2670184954a13e4a9e7a4e35ba79aac0c5fac2f7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 21:20:01 2020 +0200
Make civsim and sites deterministic.
For anything in worldgen where you use a HashMap, *please* think
carefully about which hasher you are going to use! This is
especially true if (for some reason) you are depending on hashmap
iteration order remaining stable for some aspect of worldgen.
commit f8376fd5dc72b4a9c2f51a6b4570d59c8b8e9343
Merge: 654f7e049 cdee191dd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 17:53:57 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 654f7e049258d9da27c09608bbe6a46ffa8787e5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed May 20 21:22:30 2020 +0200
Correct backface culling.
commit 560501df05ca725409b0f2e4eb31bdfdc15fd0c7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue May 19 17:22:06 2020 +0200
Greedy messhing for shadows.
commit a4d87e1875ca543436e6bbbeb20348facc5a52d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun May 17 05:59:00 2020 +0200
Shadow maps work for lantern.
commit 243d0837b8a3b08172c9a3c348d964d7ddc2a0a8
Merge: 04382dc28 71dd520cd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:53:13 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 04382dc28632b6c66e8821f6870c0daaa1c1901a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:22:17 2020 +0200
WIP: better graphics config, better LOD, shadow maps.
commit 22ddbad3eb32bfa70f0932176022208fe67ded81
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 18:54:09 2020 +0200
Minor shader fixes.
commit 746a10e8d01ac235f994b0cde78fa48998602a1f
Merge: 0f4a0e763 40ab94673
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 04:02:09 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0f4a0e763db3afbdc4fb0558611f38326ca87151
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 23:03:24 2020 +0200
Switch back to pop-in terrain.
commit dd74fa7e4a53667b38811d7aec58d7f6a68889bb
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 22:58:55 2020 +0200
LOD shading closer to voxel shading.
commit ef67bd58ba0bdaf622b078892d768263b6cba268
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 28 20:49:03 2020 +0200
Experimental underwater lighting.
commit 2c5ad9d07605e80d5fd5679dd3a5d70c605b86a9
Merge: 748279835 303967a6f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 22:35:24 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7482798354eda18c8207950080fc24d443a369de
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 21:59:55 2020 +0200
Replace discard in figure-frag.
commit d83b4ae69be4912f69bf7835f509c68a1c7770a4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:45:57 2020 +0200
Fix sprite lighting, HDR from focus_pos.
commit 0594238004f116274905fa0ed7c2b6c417ed1d29
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:14:10 2020 +0200
Proper HDR from point lights.
commit 48c93d2b41ce5743103d18e76cc228f5ac766492
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 14:01:43 2020 +0200
Brighter ambiance, darker LOD shadows.
commit e0452e895ccfa8a43f368cae3b8b8aedc24dad93
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 13:13:23 2020 +0200
More proper HDR.
commit 4c6da3ed16cfeebb455e40da5f557b4af9a499d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 00:13:10 2020 +0200
Trying LOD noise.
commit 682a3d74c85df5503ffe1fc1cc891bce789df1ad
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 23:11:08 2020 +0200
Fix LOD heights in towns.
commit cc39e5734e8b18f9077bf42e66337c1319dd6b6e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 21:01:23 2020 +0200
More LOD fixes.
commit 8116b21c2e51c836e77894e309ac273caf2917b3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:54:43 2020 +0200
I like this coloring.
commit bc2560ea90b36f4b46190005344232d993043ac3
Merge: 14effdd5d e690efe71
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:48:33 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 14effdd5db8747fcf3eb34f03b46b7792e92d1c5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:24:35 2020 +0200
Re-saturate.
commit 48a643955d4435b78179acba0beb4a979905cc31
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:23:57 2020 +0200
Various fixes.
commit f7b497a0c25f4ad4682c71dd1ed6f608052feb9b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 03:22:49 2020 +0200
Render figures again.
commit 44e4aad48deba8266b9f8bdfd3db096b381f5327
Merge: e6f0a5a98 9ec319a18
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 02:01:04 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit e6f0a5a981a82533ba188fff0a54ce98577bb152
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 24 16:12:20 2020 +0200
Add atmospheric scattering.
commit f2953087f691a8edbc001cb98ebf5059fc6f8ac0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 23 00:01:20 2020 +0200
Fix shadowing for specular reflections.
commit ddd4a67a9799b8d08c7dc0c2bec90621c2bed0e3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Apr 22 22:56:12 2020 +0200
HDR fixes.
commit 1015e60deef3c447381996277df7496707a63bd0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 21 18:25:19 2020 +0200
More lighting changes.
commit 80c264abd111fb237e57843efcb5c071d4f84613
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 13 00:29:59 2020 +0200
Lighting experiments.
commit 8414987e589dd5102bad89762a3adaccc0bfe957
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 9 02:38:40 2020 +0200
WIP -- lighting changes and soft shadows.
commit 9cd2b3fb0d6b49776c6dfe463e4169637250b11a
Merge: c7ea687eb 8b149ad11
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:29 2020 +0200
Merge branch 'sharp/new-lighting' into sharp/small-fixes
commit c7ea687ebbc5aace1b455f134a5bf49ce2c7434a
Merge: 476441531 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:02 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 8b149ad11ad4bb75018fcf9519baec27d1c95951
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:32:39 2020 +0200
Trying out a new lighting model.
commit b0ac9f36f755dd06f7c17c46150568064790864f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 07:56:11 2020 +0200
Use bicubic interpolation for terrain.
commit f6fc9307a121514b614bc50ef8eb055953e7da8a
Merge: 33140a295 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 05:01:41 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 4764415312aae6e9ac2d00e86e84577cb958f1ab
Merge: ed2d0111d 13388ee6a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 04:54:48 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 13388ee6a42943f3f79a9cb488346cef18e272fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 20:30:08 2020 +0200
Various fixes (to coloring and to soft shadows).
commit fbd084a94a067082a87cd6d28b82054709bc9265
Merge: 5a089863b 4fdf6896a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 18:50:38 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/map-colors
commit ed2d0111d994262ae836d84d1fe5a45e4de72a0b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 06:49:27 2020 +0200
Combining colors and LOD.
commit 88342640c6b835114d01c797b89fdede3b0a2108
Merge: 33140a295 5a089863b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:49:20 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 33140a2951b8212725f42c758b277aaec4d888f7
Merge: 4c65a5aed f34d4b379
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:36:21 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 5a089863beb01d4794bbe3580ada47b278715ea2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 03:17:49 2020 +0200
Making maps brighter.
This is probably not the right way to do it, but oh well!
commit 32b2c99109dd486aa922886081068f9c550c83f2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 02:46:36 2020 +0200
Horizon mapping and "layered" map generation.
Horizon mapping is a method of shadow mapping specific to height maps.
It can handle any angle between 0 and 90 degrees from the ground, as
long as know the horizontal direction in advance, by remembering only a
single angle (the "horizon angle" of the shadow map). More is explained
in common/src/msg/server.rs. We also remember the approximate height of
the largest occluder, to try to be able to generate soft shadows and
create a vertical position where the shadows can't go higher.
Additionally, map generation has been reworked. Instead of computing
everything from explicit samples, we pass in sampling functions that
return exactly what the map generator needs. This allows us to cleanly
separate the way we sample things like altitudes and colors from the map
generation process. We exploit this to generate maps *partially* on the
server (with colors and rivers, but not shading). We can then send the
partially completed map to the client, which can combine it with shadow
information to generate the final map. This is useful for two reasons:
first, it makes sure the client can apply shadow information by itself,
and second, it lets us pass the unshaded map for use with level of
detail functionality.
For similar reasons, river generation is split
out into its own layer, but for now we opt to still generate rivers on
the server (since the river wire format is more complicated to compress
and may require some extra work to make sure we have enough precision to
draw rivers well enough for LoD).
Finally, the mostly ad-hoc lighting we were performing has been (mostly)
replaced with explicit Phong reflection shading (including specular
highlights). Regularizing this seems useful and helps clarify the
"meaning" of the various light intensities, and helps us keep a more
physically plausible basis. However, its interaction with soft shadows
is still imperfect, and it's not yet clear to me what we need to do to
turn this into something useful for LoD.
commit f8926a5737ddc51f3d585c651a64c43677aae0f4
Merge: a1aee931e 875ae6ced
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Mar 13 13:32:42 2020 +0100
Merge remote-tracking branch 'origin/master' into sharp/map-colors
commit 4c65a5aed353b119aea65a2aaeb94549b67beb42
Author: Treeco <5021038-Treeco@users.noreply.gitlab.com>
Date: Mon Feb 24 16:48:05 2020 +0000
Made LOD setting slider exponential
commit 2fa7b2d20d7233dc8bfd64f9f7f54617575248f1
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 17:49:53 2020 +0000
Added mist to LoD
commit aab059a450b5f635777129ff82cc15b662965c3c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 15:14:06 2020 +0000
Added LoD slider
commit 779c36b538121c5ade3633ae5cb67bb14c8c3877
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:54:55 2020 +0000
Reduced cost of vertex pushing
commit 9fea150473906b166365b738ebcea07c697daf3d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:38:53 2020 +0000
Fixed maths, improved LoD resolution
commit 5481df38fea5bf183ff376a3337179cfaa5233dc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 11:22:50 2020 +0000
Dynamically relocate LoD vertices to enhance details
commit a3e36a50ababd615da7db1b26158c7906a5def01
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 18:13:51 2020 +0000
Simpler terrain spiral rendering
commit 255f450ae9ac8763db4bede075fb409161ed57cc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:53:17 2020 +0000
Better LoD precision
commit 3d027aebe812a5b8658a4eb8123dc9f61b3776d2
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:04:03 2020 +0000
Better falloff
commit be775c9484b457b2c0b1a494aec03392d0c70e76
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 15:30:45 2020 +0000
Applied good ideas from experimental branch
commit 58587b68545a23c5c04ab4574a4b94b3bc982246
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 16:15:13 2020 +0000
Minor fixes to LoD merging
commit 7b42aebd709c14df2db766aad61d9280ad24d84d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 15:04:44 2020 +0000
Capped LoD dragging
commit 8aafc559f87124e1ea5ca6e3ddc2aa0c242d793c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:54:37 2020 +0000
Better blending between LoD and terrain border
commit edd3455d5161792d87ddc8eadc0ecbad5532b284
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:40:19 2020 +0000
Fixed LoD z depth, added sea level offset
commit b9b06744620114dd5556e73f64fa93c145503a7c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:27:43 2020 +0000
Better LoD smoothing
commit a1aee931e790431560cd2d953ad61d9497072afd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Feb 21 14:52:17 2020 +0100
Adding shadows.
commit 2400786c13dd891c131ed86d48d05df516a8a778
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 13:48:40 2020 +0000
Use world map as LoD source
commit dbf650f504a4c25fbbc2096ac3616c736bf52d23
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Jan 20 00:48:14 2020 +0000
Better clouds at distance
commit 5e6f81b86cdb9730b9b056877b19257075fd5fa8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Jan 19 23:59:02 2020 +0000
sync
commit 745e7540ddb000cc645f612767b337c2ddc3f7c0
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 12:40:48 2019 +0000
Improved cloud falloff mist, faster noise sampling
commit f6a200d0cb866196ba57697466755f9e0c7ea5d8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 10:09:00 2019 +0000
Improved long-range depth precision, removed unnecessary LoD polygons
commit 63d1b2bb2292898d59fb4f4e502201103dfeb86f
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 20:57:46 2019 +0000
Working LoD shader
commit f13d98ee3e58f881e8b978861a67663b59ed91ec
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 11:03:40 2019 +0000
LoD first attempt (stack overflow issue)
2020-08-20 18:34:59 +00:00
|
|
|
|
let flux_old = get_multi_drainage(map_size_lg, &mstack, &mrec, &*mwrec, boundary_len);
|
|
|
|
|
// let flux_rivers = get_drainage(map_size_lg, &water_alt_pos, &dh,
|
|
|
|
|
// boundary_len); TODO: Make rivers work with multi-direction flux as
|
|
|
|
|
// well.
|
|
|
|
|
let flux_rivers = flux_old.clone();
|
2019-10-16 11:39:41 +00:00
|
|
|
|
|
|
|
|
|
let water_height_initial = |chunk_idx| {
|
|
|
|
|
let indirection_idx = indirection[chunk_idx];
|
|
|
|
|
// Find the lake this point is flowing into.
|
|
|
|
|
let lake_idx = if indirection_idx < 0 {
|
|
|
|
|
chunk_idx
|
|
|
|
|
} else {
|
|
|
|
|
indirection_idx as usize
|
|
|
|
|
};
|
2020-01-22 14:31:10 +00:00
|
|
|
|
let chunk_water_alt = if dh[lake_idx] < 0 {
|
2020-02-01 20:39:39 +00:00
|
|
|
|
// This is either a boundary node (dh[chunk_idx] == -2, i.e. water is at sea
|
|
|
|
|
// level) or part of a lake that flows directly into the ocean.
|
|
|
|
|
// In the former case, water is at sea level so we just return
|
|
|
|
|
// 0.0. In the latter case, the lake bottom must have been a
|
|
|
|
|
// boundary node in the first place--meaning this node flows directly
|
2019-10-16 11:39:41 +00:00
|
|
|
|
// into the ocean. In that case, its lake bottom is ocean, meaning its water is
|
|
|
|
|
// also at sea level. Thus, we return 0.0 in both cases.
|
|
|
|
|
0.0
|
|
|
|
|
} else {
|
2020-02-01 20:39:39 +00:00
|
|
|
|
// This chunk is draining into a body of water that isn't the ocean (i.e., a
|
|
|
|
|
// lake). Then we just need to find the pass height of the
|
|
|
|
|
// surrounding lake in order to figure out the initial water
|
|
|
|
|
// height (which fill_sinks will then extend to make
|
2019-10-16 11:39:41 +00:00
|
|
|
|
// sure it fills the entire basin).
|
|
|
|
|
|
2020-02-01 20:39:39 +00:00
|
|
|
|
// Find the height of "our" side of the pass (the part of it that drains into
|
|
|
|
|
// this chunk's lake).
|
2019-11-22 02:55:19 +00:00
|
|
|
|
let pass_idx = -indirection[lake_idx] as usize;
|
|
|
|
|
let pass_height_i = alt[pass_idx];
|
|
|
|
|
// Find the pass this lake is flowing into (i.e. water at the lake bottom gets
|
|
|
|
|
// pushed towards the point identified by pass_idx).
|
|
|
|
|
let neighbor_pass_idx = dh[pass_idx/*lake_idx*/];
|
|
|
|
|
// Find the height of the pass into which our lake is flowing.
|
|
|
|
|
let pass_height_j = alt[neighbor_pass_idx as usize];
|
2019-10-16 11:39:41 +00:00
|
|
|
|
// Find the maximum of these two heights.
|
|
|
|
|
// Use the pass height as the initial water altitude.
|
2020-06-30 14:56:49 +00:00
|
|
|
|
pass_height_i.max(pass_height_j) /*pass_height*/
|
2019-10-16 11:39:41 +00:00
|
|
|
|
};
|
2020-02-01 20:39:39 +00:00
|
|
|
|
// Use the maximum of the pass height and chunk height as the parameter to
|
|
|
|
|
// fill_sinks.
|
2019-10-16 11:39:41 +00:00
|
|
|
|
let chunk_alt = alt[chunk_idx];
|
2020-01-11 21:05:22 +00:00
|
|
|
|
chunk_alt.max(chunk_water_alt)
|
2019-10-16 11:39:41 +00:00
|
|
|
|
};
|
|
|
|
|
|
2020-02-01 20:39:39 +00:00
|
|
|
|
// NOTE: If for for some reason you need to avoid the expensive `fill_sinks`
|
|
|
|
|
// step here, and we haven't yet replaced it with a faster version, you
|
|
|
|
|
// may comment out this line and replace it with the commented-out code
|
|
|
|
|
// below; however, there are no guarantees that this
|
2020-01-22 14:31:10 +00:00
|
|
|
|
// will work correctly.
|
(See sharp/lod-history) LOD, shadows, greedy meshing, new lighting, perf
---
Pretty much a Veloren fork at this point. Here's a high level overview of the changes (will be added to CHANGELOG just before merge).
At a high level this MR incorporates roughly two groups of changes.
The first group consists of new game features: more flexible map sizes, level of detail terrain, shadow maps, and a new lighting
engine. This is "feature work" that (mostly) only adds new things to Veloren, and mostly shouldn't affect old stuff.
The second big group of changes are those addressing the fallout from all the new features. These include performance fixes of
various sorts: the addition of multiple graphics options and optimization of the cheap ones to avoid work, switching all voxel
models to use some variant of greedy meshing, switching over much of our CPU-side vector math to exploit SIMD instructions
(coinciding with a fork of `vek`), and a rewrite of how the UI handles text rendering (coinciding with updates to our fork
of `conrod`). Making Veloren's hardcoded colors appear correct under the new lighting engine also required considerably
changes (TODO: Fill in this section when it's complete).
The second category of changes often heavily touches code owned by other people, including frequently modified code "owned" by a
handful of people, so I recommend that this code be reviewed particularly carefully.
---
At a high level (each will be described in more detail below):
- The world map has been refactored.
- The world size is no longer hardcoded (@zesterer).
- The map generation code was made generic to allow using it outside of the `world` crate (@zesterer).
- On world creation, we now compute *horizon maps* (@zesterer).
- The way we pass the world from the server to the client has been updated (@xMAC94x).
- Artifacts related to image rotation were fixed (@imbris).
- Multiflow rivers were enabled (@zesterer).
- In the process of making changes related to the world map, various incidental fixes and optimizations were required.
- The new *level of detail* feature was added (@zesterer wrote part of this and has checked out the rest).
- A new LOD terrain rendering step was added to the pipeline.
- The LOD terrain quality was made configurable via a graphics setting.
- Horizon maps were used to cast shadows from LOD chunks on both LOD and non-LOD terrain.
- A "voxelization" effect was incorporated into rendered LOD terrain to make it blend better into the world.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Veloren's lighting has been completely overhauled (@zesterer has already checked most of this out).
- A semi-accurate index of refraction was assigned to our materials.
- A new, more realistic, physically based approach to lighting was used using the *Ashikhmin Shirley* BRDF.
- We emulate *atmospheric scattering* using equations designed for measuring solar panel light exposure.
- We attempt to compute *realistic light attenuation* in water using its real material properties.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Point and directional lights now cast realistic shadows, using *shadow mapping.* (@imbris, @zesterer, @Treeco, @YuriMomo)
- Point light shadow maps were added to the rendering pipeline, using geometry shaders and *seamless cube maps*.
- Directional light shadows were added to the rendering pipeline, using LISPSM together with disabling *depth clamping*.
- "Shadow-only" chunks and NPCs were added to prevent shadows from models behind you from disappearing.
- In the process of making changes related to shadow maps, various incidental fixes and optimizations were required.
The addition of shadow maps, LOD terrain, and the new lighting all led to significant performance degradation, on top of other
changes happening in master. Therefore, a large number of performance improvements were also needed:
- The graphics options were made much more flexible and configurable, and shaders were optimize.
- New options were provided for how to render lights and shadows (@Pfauenauge, @zesterer).
- Graphic setting storage and configuration were overhauled to make adding new features easier (@Pfauenauge, @imbris).
- Shaders were rewritten to utilize GLSL's preprocessor to avoid overhead (@zesterer, @YuriMomo).
- In the process of making changes related to providing additional rendering options, various incidental fixes and optimizations were required.
- Voxel model creation was switched to use *greedy meshing.*
- A new voxel meshing method, greedy meshing, was added (@imbris).
- Uses of the older meshing methods were migrated to use greedy meshing (@imbris, @jshipsey, @Pfauenauge).
- New restrictions were added to terrain, figure, and sprites to future proof them for further optimizations (@jshipsey, @Pfauenauge, @zesterer).
- Most positions are now relative to either chunk or player position for better precision (@imbris, @zesterer, @scottc).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- Animation and terrain math were switched to use SIMD where possible.
- Fixes were made to vek to make its SIMD feature usable for us (@zesterer, @imbris).
- The interface and types used in bone animation were changed in various ways (@jshipsey, @Snowram, @Pfauenauge).
- Redundant code generation for body animation is now partly taken care of by a macro (@jshipsey, @Snowram, @Pfauenauge).
- Animation code was modified to to use vek's SIMD representation where possible (@jshipsey, @Snowram, @Pfauenauge).
- Terrain meshing code and shadow map math were also modified to use vek's SIMD representation (@imbris).
- SIMD instruction generation was enabled (@YuriMomo, @jshipsey, @Snowram, @imbris, @Angelonfira, @xMAC94x).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- The way we cache glyphs was completely refactored, fixed, and optimized.
- Our fork of `conrod` was optimized in various ways (@imbris).
- Our fork of `conrod` now exposes whether a widget was updated during the current frame (@imbris).
- Our use of the glyph cache was rewritten for correctness (@imbris).
- A *text cache* was introduced that lets us skip remeshing glyphs that have not changed (@imbris).
- Various changes were made to reduce pressure on the glyph cache, with more planned (@imbris, @Pfauenauge).
- In the process of making changes related to the glyph cache, various incidental fixes and optimizations were required.
- Colors were changed to keep Veloren's look consistent with master.
- Some older tree models were brought back (@Pfauenauge).
- TODO(@Sharp): All hardcoded colors were extracted and made hotloadable.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Hardcoded colors were fixed to conform to Veloren's style.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Color models were fixed to conform to Veloren's style.
A detailed description of the involved changes follows.
---
- The world size is no longer hardcoded. All functions dependent on world size now take a `WorldSizeLg`, which holds the base 2 logarithm of each actual world dimension and is guaranteed to maintain certain properties (outlined in `common/src/terrain/map.rs`). Additionally, many utility functions that utilize the world size were moved into `common` as well (mostly `common/src/terrain/mod.rs`). Finally, the world map format was updated in order to store its size explicitly, with a migration path from the old format that should work whenever the old formatted map was a square (practically always). See `world/src/sim/mod.rs` for these changes.
- The map generation code was made generic to allow using it outside of the `world` crate. The parts of the map generating code that do not need to query the world were moved over to `common/src/terrain/map.rs`, allowing them to be used from the client without creating a dependency on `world`. The rest of it was turned into helper functions in `world/src/sim/map.rs`, which can be passed as closures to the generic map generation code to complete its construction. This also means that colors are now passed in separately to the map generation function. See <https://veloren.net/devblog-78/> for more details.
- On world creation, we now compute *horizon maps*. See the function in `world/src/sim/util.rs`.
Given a height map and a plane intersecting that height map, our horizon maps allow us to encode enough information to reconstruct shadows for each point on the height map using only the *horizon angle* (the angle at which the sun starts to become visible). As Veloren's sun only covers one plane, this is sufficient for encoding sun shadows for LOD terrain, by encoding two angles per chunk (one for each 90 degrees the sun covers). We can also use this for the moon, if we want, since the moon follows the same path. Additionally, we store the *height* of the furthest occluder, to try to make the shadows volumetric; so this means 4 bytes in total for each chunk.
Support for horizon maps has been merged into the map functionality in common as well.
- The way we pass the world from the server to the client has been updated. Rather than passing the prerendered map, we instead pass three maps with values for each chunk; one with the color information, a second with altitude information, and a third with horizon map information. We then reconstruct the map on the client, together with some additional information we send from the server (like the sea level and maximum height). See `common/src/msg/server.rs` for a detailed description of the format of `WorldMapMsg`, and `server/src/libr.rs` and `client/src/lib.rs` for details of the map construction and parsing.
- Artifacts related to image rotation were fixed. See the commit message for commit SHA `cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e` for a detailed explanation. This involved changes to shaders, the addition of a new type of graphic (also reflected in the graphic cache) that allows specifying a border color (which automatically makes the associated texture immutable), and some related fixes. I reproduce the first two paragraphs of the MR description as well:
```
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
```
- Multiflow rivers were enabled.
This does not really need to be part of this MR, and would be easy to revert, but since it seemed to provide a nice improvement it's currently packaged with it.
We already computed multiple outflows from each chunk for erosion purposes long before this MR.
However, we never modified river rendering to be able to handle this case (just a single downhill river flow is complex enough!) so this was not exposed when deciding which chunks were rivers.
Now that
- In the process of making changes related to the world map, various incidental fixes and optimizations were required. Some examples of fixes include making sure terrain is never lowered to below sea level (to make the shadow maps report correct values), fixing map altitudes and colors to understand things like cliffs and "block level" coloring (that doesn'te xist on the column level), and fixing a crashbug when rendering images for the UI where source pixels are strongly rectangular. Some examples of related performance fixes include avoiding allocating a fresh vector for all the maps (i.e. copying it over to change the format from `[u32; n]` to `DynamicImage` and then copying again to convert to `RgbaImage`), and instead using the `gfx::memory::slice` function to accomplish the same thing. These sorts of changes are spread all arond the code.
This includes the additon of a new scene, `voxygen/src/scene/lod.rs`, a new pipeline `voxygen/src/render/pipeline/lod_terrain.rs`, and new shaders `assets/vxygen/shaders/lod-terrain-vert.glsl` and `assets/vxygen/shaders/lod-terrain-frag.glsl`, as well as associated changes to the renderer in `voxygen/src/render/renderer.rs`.
The main idea behind our initial approach to LOD was to take the world data we now get from the server (altitude, color, and horizon mapping).
- Some previously computed values were turned into shader uniforms for better prediction on weak processors. (@zesterer)
- Calls to power or trig functions were removed or replaced with multiplications, where possible.
- After some deliberation
- To properly handle sprite "waving" for nearby sprites,
We explicitly designed the greedy meshing system with figures and sprites in mind.
In both cases, we want to be able to *efficiently* pack many different models into the same texture, especially in cases where we know
we will either not be removing any of the grouped-together from the models from the texture, or will remove all of them at once (so
they can be packed into some specific subtexture).
For sprites, since we know every model in advance and never intend to deallocate them, we currently pack them all as efficiently as
possible into one giant tetxure atlas. However, in the future we might opt to pack them slightly less efficiently in exchange for
shrinking the sprite vertex size.
For figures, we pack all the textures for each *model* into the same atlas.
is a global texture atlas used for every sprite, and for figures which is why we have the ability to mesh multiple
models to the same texture area (using the simple texture atlas allocator) without requiring intermediate vector allocations.
This is accomplished by delaying the time when we actually write the color and light data to the texture until *after* all the
model vertices have been meshed; then, we can just allocate the whole color/light array at once, making the atlas we use an
exact fit. In computer science-y terms, we accomplish this delay by, after we perform the initial greedy meshing (without
texture information), not continuing to create the texture data, but instead constructing a *continuation*--that is, a function
that, when called, will execute the rest of the computation. We push this continuation (which in Rust terms is a `FnOnce` closure
that takes the `ColLightsInfo` that it is supposed to write to as context) onto a
onto a vector
resizing. To allow for suspended writes to texture data, Rust pointed out to me that the continuation that would eventually write the color and light data to the texture atlas (the one that is shared by all models sharing the same greedy mesher) would have to *own* whatever data it mshed. Because we often generate the model data to mesh as a temporary in `voxygen/src/load.rs`, the
- Matrix multiplications in the shader were reduced for figure data (@zesterer).
- Vertex "waves" for fluid data were removed.
- Terrain "bending" near edges was removed.
- Scaling was fixed to make sure empty space was not introduced in a space previously occupied by a block. It was also changed to take ownership of its voxel data,
rather than sharing it, to let it be used with meshing.
- Rust's nightly version was bumped in order to use the `array_map` function, which lets us reuse more code between the simple map and `FigureModelCache`.
- PositionedGlyph::standalone.
---
I tried to cite sources in many cases[^realtime],[^lloyd],[^lispsm],[^pbrt],[^greedy],[^tjunctions]
where I needed features from elsewhere but I am particularly grateful for the following resources,
esepcially where they have accompanying source code. I linked all of them that are accessible to the public (those that are not were
obtained through legal means).
[^realtime]: Eisemann, Elmar, Michael Schwarz, Ulf Assarsson, Michael Wimmer. Real-Time Shadows. A K Peters/CRC Press (T&F), 20160419.
[^lloyd]: Lloyd,B. 2007. [Logarithmic perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). PhD thesis, University of North Carolina.
[^lispsm]: Wimmer, M., Scherzer, D., and Purgathofer, W. 2004. [Light space perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). In Proceedings of Eurographics Symposium on Rendering 2004, pp. 143– 152.
[^pbrt]: Pharr, Matt, et al. [http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf](Physically Based Rendering: From Theory to Implementation). Third edition, Morgan Kaufmann Publishers/Elsevier, 2017.
[^greedy]: mikolalysenko. “Meshing in a Minecraft Game.” 0 FPS, 30 June 2012, <https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/>.
[^tjunctions]: blackflux. “Meshing in Voxel Engines – Part 1.” Blackflux.Com, 23 Feb. 2014, <https://blackflux.wordpress.com/2014/02/23/meshing-in-voxel-engines-part-1/>.
I am also especially grateful to Khronos, Wikiepdia, and stackoverflow for answering many of my specific questions while writing the MR.
---
Squashed commit of the following:
commit 300505e7305a2fdac722a808ee8538323f215f39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 18:46:25 2020 +0200
Fixing cargo doc and typo in CHANGELOG.
commit ec0aeb18e8499d7d84ef818331b4b65c3d76cea6
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 15:38:50 2020 +0200
Hopefully final commit for the LOD branch.
commit 5e8ea0b1eaac02903a02feb2eb038d195de4872f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 10:14:26 2020 +0200
Falling back to power as stopgap.
commit e44a1cbf46504ee9931a01bdc9033e145500d557
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 09:25:41 2020 +0200
Address imbris feedback.
Temporarily disables shiny water, lowers max VD.
These restrictions will be lifted soon after merging.
commit 561e25778a108ac3712f5ec2ce3a51234c4430d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 08:31:13 2020 +0200
Tweaking shaders a bit.
commit 7d19259078ce0dd7b3742ad7d0cb3fab3ece3fdc
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:59:43 2020 +0200
Fix view example as well.
commit 051cd4934e0fad2c0b15db4380a4189fa318679f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:29:06 2020 +0200
Fix meshing benchmark.
commit c95e07db3b4dcca285678985e65e31b927cb1c61
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 05:46:22 2020 +0200
Address MR feedback, fix scene clouds.
commit 1bfb816cabdb3ffc1e507a009c2d98696b4b573a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:39:36 2020 +0200
Incorporating Pfau's figure color changes.
New eyes and new humanoid colors.
commit 3f9b89a3ac7b3356b1dba0d1a8f6541357f81469
Merge: e2f5162e4 62c53963a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:29:41 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit e2f5162e4f96f4124aa43488f7245d341b3dcfd4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:28:38 2020 +0200
World colors are all hotloadable.
They live in assets/world/style/colors.ron.
Only a small handful of hardcoed colors remain in World; they are either
part of the map, or difficult to disentangle from the rest of the
computation. Comments are made where appropriate.
commit 62c53963abe1975009d34a8f9515a355bef24f31
Author: Marcel Märtens <marcel.cochem@googlemail.com>
Date: Wed Aug 19 15:59:00 2020 +0200
replace pretty_env_logger with tracing
commit 5b1625f99d9586fe80e2232f583ec5af9f953099
Merge: d71003acd 4942b5b39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:15:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit d71003acdabeff970b3928e97c26af6847b5b78e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:14:34 2020 +0200
Hotloading colors, part 1: colors in common.
Currently, this just entails humanoid colors. There are only three
colors not handled; the light emitter colors in
common/src/comp/inventory/item/tool.rs. These don't seem important
enough to me to warrant making hotloadable, at least not right now, but
if it's needed later we can always add them to the file.
commit 63b5e0e553eb2ea49276f192a6fc7dd65254270d
Merge: c32b337a4 6d2c4b9c1
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 13:05:37 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c32b337a46e10d9de473d178a94a3ccd61c39bb3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:52:04 2020 +0200
Fixing LOD grid, for real.
commit a166ae0360395387e09fb35a1f84210c2ce5ec24
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:28:05 2020 +0200
Addressing imbris's initial feedback.
Fixes two minor bugs: explosion particles were no longer spawning
randomly, and LOD grids were not perfectly even.
commit 4cbad004f44060994252dd3d38647a14a589712f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:27:58 2020 +0200
Bumping nightly per request.
commit 548680276aac77c25d43d16b5622f847d474dbef
Merge: acc098604 8f8b20c91
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:26:06 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit acc0986040589a3492f88a740bc3c3fc693b26d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:28:32 2020 +0200
Lower resolution due to lying drivers.
commit d3b878de2a52c358d2944a6bbd0555dad7fbdb10
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:15:38 2020 +0200
Fix issues msh encountered with Intel 4600.
commit 10245e0c1b0cb6fae10d86409435364edc6102ef
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 21:15:02 2020 +0200
Merge more models into one mesh than we did previously.
commit 3155c31e663c52ae5c3a53d5fb5665892a1a498a
Merge: 7204cc8a7 3c199280e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:35:22 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7204cc8a7a4f74a30306bd205d9834fee4bb944f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:34:43 2020 +0200
Fix not yet done NPC animations.
This forces them all to be the idle animation if not specified.
This fixes issues where you'd have giant NPCs in water.
commit bc83360f2a08918f19d417b5f772e1ff554dba08
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 19:36:37 2020 +0200
Try to fix some bugs:
- Z fighting with LOD terrain and water.
- Audio SFX not playing.
commit 1fd104aa603bf3781b6526a5cada46aeca3049dd
Merge: 862df3c99 7c2c392a3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 12:02:31 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 862df3c9976c4da9bd7cfd784f1a85973127968a
Merge: 0a4218ed9 75c1d4401
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 05:52:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0a4218ed9d541a2b34c133351bea38a99ddf4ea7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 22:27:14 2020 +0200
Fix particle depth.
commit f51dfdeb442d0dd5243dd2f344fa4be295bd0875
Merge: c6251a956 5e6dc0471
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:19:04 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit c6251a956ad376400dca5c23420cf8d213dc8fdf
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:15:46 2020 +0200
Cache figures more intelligently.
Cache figures for longer, and don't cache character states for the
player except where they actually affect the rendered model.
commit 0ed801d5404982c6fb63b1eaa4567d908b294c9d
Merge: c11b9bdf0 eea64f78f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 16:32:24 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c11b9bdf0a53bf9884d2f5a48fec9b01d582df1a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 11:47:15 2020 +0200
Remove unneeded Clippy annotation.
commit 16aa9ef40af56d69289d00aafb3deadfb8bd4f35
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 8 00:53:02 2020 +0200
Fix hotloading and Clippy.
commit 3dc973e0be5b758da1e9805eb764ad401374cd0c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 23:50:27 2020 +0200
Major speedups with SIMD.
commit fba64a7d93d5a96077ce87287bbce6ab9b7fbcae
Merge: 76429d00e d1e10b178
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:19 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 76429d00eea00d212fbd672a84ee91e75b19b938
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:10 2020 +0200
Add clippy.toml.
commit c79f512f84dbb83cb82b7954db68ff241dfd8e41
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 11:55:20 2020 +0200
Fix all clippy issues, clean up Rust code.
commit 6f90e010b3fbefb53b0d632e819931350015b6b8
Merge: 77a8c7c26 5929cfa5c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:30 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 77a8c7c267d3f44a1a62bd6b2274359973c5e4d4
Merge: b44e44232 44febaabd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:10 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 5929cfa5c713aa392110bbb62407f76caf53c3df
Author: jshipsey <jshipsey18@gmail.com>
Date: Thu Aug 6 20:47:27 2020 -0400
fixed in-hand arrow bug
commit b44e442325d828f1cd564d66908f89d09e80474b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 6 13:40:35 2020 +0200
Miscellaneous performance improvements.
commit be37acf287c1360d8085862526ac3365ffd1d768
Merge: 125d7fc6c c11876547
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 05:49:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 125d7fc6c4dcd8c8c5f27b8268a4d64f409f3644
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 04:55:31 2020 +0200
Abstract over simd vs. repr_c vectors.
Also some minor improvements to Event size.
commit d4d4956e9252e1241ce110b2aa85076c6b1e2a23
Merge: 5f3b7294a aced5f979
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:56:54 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 5f3b7294af1f8533edc2620b58863c248e2b07af
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:43:52 2020 +0200
Fix formatting issues I missed before.
commit a428a3ebba70dcab63dd0f8cd983120c90617271
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:41:51 2020 +0200
Fix clippy warnings, part 1.
There aer still a bunch of type too complex and
function takes too many arguments warnings that I'll fix later
(or ignore, since in the one case I did fix a function takes too
many arguments warning I think it made the code *less* readable).
commit ba54307540ed8a937ac08209730284fc653af85b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 30 13:22:42 2020 +0200
Fix light animations so they are removed when the light turns off.
commit 7e0f4bcbf0f4717145d8beac40d52e3acebbe2aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 21:10:20 2020 +0200
Fix crash in edge case for pixel art.
commit 56da06f7a351e2b949e9b014a90b974d511a0924
Merge: cf74d55f2 9f53a4a19
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:56:52 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:29:52 2020 +0200
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
The first concern was addressed by fixing the dimensions of the map
images drawn from the UI (so that we always use a square source
rectangle, rather than a rectangular one according to the dimensions of
the map). We also fixed the way rotation was done in the fragment
shader for north-facing sources to make it properly handle aspect ratio
(this was already done for north-facing targets). Together, these fix
rendering issues peculiar to rectangular maps.
The second and third concerns were jointly addressed by adding an
optional border color to every 2D image drawn by the UI. This turns
out not to waste extra space even though we hold a full f32 color
(to avoid an extra dependency on gfx's PackedColor), since voxel
images already take up more space than Optiion<[f32; 4]> requires.
This is then implemented automatically using the "border color"
wrapping method in the attached sampler.
Since this is implemented in graphics hardware, it only works (at
least naively) if the actual image bounds match the texture bounds.
Therefore, we altered the way the graphics cache stores images
with a border color to guarantee that they are always in their own
texture, whose size exactly matches their extent. Since the easiest
currently exposed way to set a border color is to do so for an
immutable texture, we went a bit further and added a new "immutable"
texture storage type used for these cases; currently, it is always
and automatically used only when there is a specified border color,
but in theory there's no reason we couldn't provide immutable-only
images that use the default wrapping mdoe (though clamp to border
is admittedly not a great default).
To fix the maps case specifically, we set the border color to a
translucent version of the ocean border color. This may need
tweaking going forward, which shouldn't be hard.
As part of this process, we had to modify graphics replacement to
make sure immutable images are *removed* when invalidated, rather
than just having a validity flag unset (this is normally done by
the UI to try to reuse allocations in place if images are updated
in benign ways, since the texture atlases used for Ui do not
support deallocation; currently this is only used for item images,
so there should be no overlap with immutable image replacement,
so this was purely precautionary).
Since we were already touching the relevant code, we also updated
the image dependency to a newer version that provides more ways
to avoid allocations, and made a few other changes that should
hopefully eliminate redundant most of the intermediate buffer
allocations we were performing for what should be zero-cost
conversions. This may slightly improve performance in some
cases.
commit ad18ce939940a8c697270f6e9b94db9942fd8295
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 13:21:09 2020 +0200
Fix continent scale hack.
commit 36b1cb074f5b195aebd7dbbc3da7f0246a1a18ec
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 12:11:40 2020 +0200
Enable loading different sized maps without a recompile.
We may want to tweak the effects of the continent_scale_hack.
commit 13b6d4d534cc4814b7cb3294ca41bbfea0a6b186
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 10:55:48 2020 +0200
Removing WORLD_SIZE, part 1.
Erased almost every instance of WORLD_SIZE and replaced it with a local
power of two, map_size_lg (which respects certain invariants; see
common/src/terrain/map.rs for more details about MapSizeLg). This also
means we can avoid a dependency on the world crate from client, as
desired.
Now that the rest of the code is not expecting a fixed WORLD_SIZE, the
next step is to arrange for maps to store their world size, and to use
that world size as a basis prior to loading the map (as well, probably,
as prior to configuring some of the noise functions).
commit 30b1d2c6428230a9eaa0d749cdcbbd6f1cbccd78
Merge: 7d56ba31b 1377b369f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:58 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 7d56ba31b445441461b28a07fc495d7d4f047c17
Merge: 2101113b4 598f14b25
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 1377b369f6db2258e910d467a5740f31789e3ded
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sun Jul 19 23:25:38 2020 +0200
more saturated pumpkins
commit ae8d50527f93bb0616c2ad46ce4dacb63bc37c6d
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sat Jul 18 20:29:56 2020 +0200
acacia models
commit 2101113b467e691de787392d7f20f1745f5637bd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 18 18:55:25 2020 +0200
Higher detail LOD.
commit add2cfae04b4385fa5590e11e2bd5229d9dee0aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 16 01:57:39 2020 +0200
Revert some irrelevant stuff.
commit 2e2ab3dc1eaa59a4aef7f8d34a53d8aae4c8553a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 15 13:30:49 2020 +0200
Fixing various things about shadows.
* Correcting optimal LISPSM parameter.
* Figure shadows are cast when they're not visible.
* Chunk shadows stay cast until you look away.
* Seamless cubemaps for point lights.
* Etc.
commit 6c31e6b56217274285b597af297036691ea5d897
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 19:50:26 2020 +0200
Fix shadow creation.
commit 6332cbe006115ae205597529cd8bbccd146c2cca
Merge: be438657c 930e0028b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:47:00 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit be438657c33d7b5bfb0a9582c3ed3fd366637323
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:28:08 2020 +0200
Tweaks to shadows.
Added shadow map resolution configuration, added seamless cubemaps,
documented all existing rendering options, and fixed a few Clippy
errors.
commit 23b4058906013c7d2a40c286e20e32c5fbd897ed
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 10:11:19 2020 +0200
Fix moon, use nonlinear noise for terrain.
Note that the latter has a bit of performance cost.
commit 7fbe5cbfbb9dc29607957b8e62f432a4deed193d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:23:02 2020 +0200
Address lies about max texture size.
commit bcfc62b5e13a1cdd83f57535fde4694720bebfd9
Merge: 75e3626a7 18a08e8fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:22:08 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 75e3626a785919f43fdcf2127c2b10e3e4df2f9f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:21:52 2020 +0200
OpenGL 3.3 minimum.
commit 18a08e8fe2739f02af99a5d2cb4e7c38c49e858b
Author: Monty Marz <m.marzouq@gmx.de>
Date: Tue Jul 7 23:57:52 2020 +0200
settings localization
commit 90c5d1ca3620092bc3ae10b2211489eb1cf6f5e8
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 21:11:48 2020 +0200
Lower near distance.
commit 0e66f02b25aaddaa2dfddbbc89cd67de54a9a7b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 20:09:01 2020 +0200
All sprites sway in the wind now.
commit db1401a6910bf42dcf502462c90038752ff5fbdb
Merge: 69e508d8c e8b4b29d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 19:34:17 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 69e508d8c94d8973033817ca86f357e466fc7c4d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 18:41:37 2020 +0200
Make it easy to switch to SIMD for math.
commit ffe0f5928c7a7e87d00cb5426b3b1d831d7e02fd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 21:21:12 2020 +0200
Fix some issues with underwater rendering.
commit bfda6da42f38fd02c31ee92c81ab785a3e50c2a0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 19:17:59 2020 +0200
Fix some minor display issues.
commit 0ed752e087968cf901301884aaeae698e32ef8a5
Merge: ccc6a06a8 518edcb85
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:14:21 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit ccc6a06a8d4504d6b9f7af7905a414d2ee06ab76
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:04:34 2020 +0200
Some minor changes.
commit 4e020246702889269efe1a191788992164c508d6
Merge: 50a64d927 e05c9267a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 16:17:40 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 50a64d927e6c4f4b0e4688e4cbfca694bc3f922a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 13:07:03 2020 +0200
Fix far plane.
commit 7dd06da34cae8f9ea3b6c889fe965181f3fd3949
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:25:35 2020 +0200
Add shadows.glsl.
commit 618a18c998778bf871b905a74657440fcc384c80
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:10:22 2020 +0200
Adding shadows, greedy meshing, and more.
commit eaea83fe6a5cb1cb0ba8beef888183c718258496
Merge: 267018495 2f89b863e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 22:47:07 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 2670184954a13e4a9e7a4e35ba79aac0c5fac2f7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 21:20:01 2020 +0200
Make civsim and sites deterministic.
For anything in worldgen where you use a HashMap, *please* think
carefully about which hasher you are going to use! This is
especially true if (for some reason) you are depending on hashmap
iteration order remaining stable for some aspect of worldgen.
commit f8376fd5dc72b4a9c2f51a6b4570d59c8b8e9343
Merge: 654f7e049 cdee191dd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 17:53:57 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 654f7e049258d9da27c09608bbe6a46ffa8787e5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed May 20 21:22:30 2020 +0200
Correct backface culling.
commit 560501df05ca725409b0f2e4eb31bdfdc15fd0c7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue May 19 17:22:06 2020 +0200
Greedy messhing for shadows.
commit a4d87e1875ca543436e6bbbeb20348facc5a52d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun May 17 05:59:00 2020 +0200
Shadow maps work for lantern.
commit 243d0837b8a3b08172c9a3c348d964d7ddc2a0a8
Merge: 04382dc28 71dd520cd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:53:13 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 04382dc28632b6c66e8821f6870c0daaa1c1901a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:22:17 2020 +0200
WIP: better graphics config, better LOD, shadow maps.
commit 22ddbad3eb32bfa70f0932176022208fe67ded81
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 18:54:09 2020 +0200
Minor shader fixes.
commit 746a10e8d01ac235f994b0cde78fa48998602a1f
Merge: 0f4a0e763 40ab94673
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 04:02:09 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0f4a0e763db3afbdc4fb0558611f38326ca87151
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 23:03:24 2020 +0200
Switch back to pop-in terrain.
commit dd74fa7e4a53667b38811d7aec58d7f6a68889bb
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 22:58:55 2020 +0200
LOD shading closer to voxel shading.
commit ef67bd58ba0bdaf622b078892d768263b6cba268
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 28 20:49:03 2020 +0200
Experimental underwater lighting.
commit 2c5ad9d07605e80d5fd5679dd3a5d70c605b86a9
Merge: 748279835 303967a6f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 22:35:24 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7482798354eda18c8207950080fc24d443a369de
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 21:59:55 2020 +0200
Replace discard in figure-frag.
commit d83b4ae69be4912f69bf7835f509c68a1c7770a4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:45:57 2020 +0200
Fix sprite lighting, HDR from focus_pos.
commit 0594238004f116274905fa0ed7c2b6c417ed1d29
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:14:10 2020 +0200
Proper HDR from point lights.
commit 48c93d2b41ce5743103d18e76cc228f5ac766492
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 14:01:43 2020 +0200
Brighter ambiance, darker LOD shadows.
commit e0452e895ccfa8a43f368cae3b8b8aedc24dad93
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 13:13:23 2020 +0200
More proper HDR.
commit 4c6da3ed16cfeebb455e40da5f557b4af9a499d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 00:13:10 2020 +0200
Trying LOD noise.
commit 682a3d74c85df5503ffe1fc1cc891bce789df1ad
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 23:11:08 2020 +0200
Fix LOD heights in towns.
commit cc39e5734e8b18f9077bf42e66337c1319dd6b6e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 21:01:23 2020 +0200
More LOD fixes.
commit 8116b21c2e51c836e77894e309ac273caf2917b3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:54:43 2020 +0200
I like this coloring.
commit bc2560ea90b36f4b46190005344232d993043ac3
Merge: 14effdd5d e690efe71
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:48:33 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 14effdd5db8747fcf3eb34f03b46b7792e92d1c5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:24:35 2020 +0200
Re-saturate.
commit 48a643955d4435b78179acba0beb4a979905cc31
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:23:57 2020 +0200
Various fixes.
commit f7b497a0c25f4ad4682c71dd1ed6f608052feb9b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 03:22:49 2020 +0200
Render figures again.
commit 44e4aad48deba8266b9f8bdfd3db096b381f5327
Merge: e6f0a5a98 9ec319a18
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 02:01:04 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit e6f0a5a981a82533ba188fff0a54ce98577bb152
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 24 16:12:20 2020 +0200
Add atmospheric scattering.
commit f2953087f691a8edbc001cb98ebf5059fc6f8ac0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 23 00:01:20 2020 +0200
Fix shadowing for specular reflections.
commit ddd4a67a9799b8d08c7dc0c2bec90621c2bed0e3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Apr 22 22:56:12 2020 +0200
HDR fixes.
commit 1015e60deef3c447381996277df7496707a63bd0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 21 18:25:19 2020 +0200
More lighting changes.
commit 80c264abd111fb237e57843efcb5c071d4f84613
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 13 00:29:59 2020 +0200
Lighting experiments.
commit 8414987e589dd5102bad89762a3adaccc0bfe957
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 9 02:38:40 2020 +0200
WIP -- lighting changes and soft shadows.
commit 9cd2b3fb0d6b49776c6dfe463e4169637250b11a
Merge: c7ea687eb 8b149ad11
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:29 2020 +0200
Merge branch 'sharp/new-lighting' into sharp/small-fixes
commit c7ea687ebbc5aace1b455f134a5bf49ce2c7434a
Merge: 476441531 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:02 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 8b149ad11ad4bb75018fcf9519baec27d1c95951
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:32:39 2020 +0200
Trying out a new lighting model.
commit b0ac9f36f755dd06f7c17c46150568064790864f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 07:56:11 2020 +0200
Use bicubic interpolation for terrain.
commit f6fc9307a121514b614bc50ef8eb055953e7da8a
Merge: 33140a295 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 05:01:41 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 4764415312aae6e9ac2d00e86e84577cb958f1ab
Merge: ed2d0111d 13388ee6a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 04:54:48 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 13388ee6a42943f3f79a9cb488346cef18e272fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 20:30:08 2020 +0200
Various fixes (to coloring and to soft shadows).
commit fbd084a94a067082a87cd6d28b82054709bc9265
Merge: 5a089863b 4fdf6896a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 18:50:38 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/map-colors
commit ed2d0111d994262ae836d84d1fe5a45e4de72a0b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 06:49:27 2020 +0200
Combining colors and LOD.
commit 88342640c6b835114d01c797b89fdede3b0a2108
Merge: 33140a295 5a089863b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:49:20 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 33140a2951b8212725f42c758b277aaec4d888f7
Merge: 4c65a5aed f34d4b379
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:36:21 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 5a089863beb01d4794bbe3580ada47b278715ea2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 03:17:49 2020 +0200
Making maps brighter.
This is probably not the right way to do it, but oh well!
commit 32b2c99109dd486aa922886081068f9c550c83f2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 02:46:36 2020 +0200
Horizon mapping and "layered" map generation.
Horizon mapping is a method of shadow mapping specific to height maps.
It can handle any angle between 0 and 90 degrees from the ground, as
long as know the horizontal direction in advance, by remembering only a
single angle (the "horizon angle" of the shadow map). More is explained
in common/src/msg/server.rs. We also remember the approximate height of
the largest occluder, to try to be able to generate soft shadows and
create a vertical position where the shadows can't go higher.
Additionally, map generation has been reworked. Instead of computing
everything from explicit samples, we pass in sampling functions that
return exactly what the map generator needs. This allows us to cleanly
separate the way we sample things like altitudes and colors from the map
generation process. We exploit this to generate maps *partially* on the
server (with colors and rivers, but not shading). We can then send the
partially completed map to the client, which can combine it with shadow
information to generate the final map. This is useful for two reasons:
first, it makes sure the client can apply shadow information by itself,
and second, it lets us pass the unshaded map for use with level of
detail functionality.
For similar reasons, river generation is split
out into its own layer, but for now we opt to still generate rivers on
the server (since the river wire format is more complicated to compress
and may require some extra work to make sure we have enough precision to
draw rivers well enough for LoD).
Finally, the mostly ad-hoc lighting we were performing has been (mostly)
replaced with explicit Phong reflection shading (including specular
highlights). Regularizing this seems useful and helps clarify the
"meaning" of the various light intensities, and helps us keep a more
physically plausible basis. However, its interaction with soft shadows
is still imperfect, and it's not yet clear to me what we need to do to
turn this into something useful for LoD.
commit f8926a5737ddc51f3d585c651a64c43677aae0f4
Merge: a1aee931e 875ae6ced
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Mar 13 13:32:42 2020 +0100
Merge remote-tracking branch 'origin/master' into sharp/map-colors
commit 4c65a5aed353b119aea65a2aaeb94549b67beb42
Author: Treeco <5021038-Treeco@users.noreply.gitlab.com>
Date: Mon Feb 24 16:48:05 2020 +0000
Made LOD setting slider exponential
commit 2fa7b2d20d7233dc8bfd64f9f7f54617575248f1
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 17:49:53 2020 +0000
Added mist to LoD
commit aab059a450b5f635777129ff82cc15b662965c3c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 15:14:06 2020 +0000
Added LoD slider
commit 779c36b538121c5ade3633ae5cb67bb14c8c3877
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:54:55 2020 +0000
Reduced cost of vertex pushing
commit 9fea150473906b166365b738ebcea07c697daf3d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:38:53 2020 +0000
Fixed maths, improved LoD resolution
commit 5481df38fea5bf183ff376a3337179cfaa5233dc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 11:22:50 2020 +0000
Dynamically relocate LoD vertices to enhance details
commit a3e36a50ababd615da7db1b26158c7906a5def01
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 18:13:51 2020 +0000
Simpler terrain spiral rendering
commit 255f450ae9ac8763db4bede075fb409161ed57cc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:53:17 2020 +0000
Better LoD precision
commit 3d027aebe812a5b8658a4eb8123dc9f61b3776d2
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:04:03 2020 +0000
Better falloff
commit be775c9484b457b2c0b1a494aec03392d0c70e76
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 15:30:45 2020 +0000
Applied good ideas from experimental branch
commit 58587b68545a23c5c04ab4574a4b94b3bc982246
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 16:15:13 2020 +0000
Minor fixes to LoD merging
commit 7b42aebd709c14df2db766aad61d9280ad24d84d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 15:04:44 2020 +0000
Capped LoD dragging
commit 8aafc559f87124e1ea5ca6e3ddc2aa0c242d793c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:54:37 2020 +0000
Better blending between LoD and terrain border
commit edd3455d5161792d87ddc8eadc0ecbad5532b284
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:40:19 2020 +0000
Fixed LoD z depth, added sea level offset
commit b9b06744620114dd5556e73f64fa93c145503a7c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:27:43 2020 +0000
Better LoD smoothing
commit a1aee931e790431560cd2d953ad61d9497072afd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Feb 21 14:52:17 2020 +0100
Adding shadows.
commit 2400786c13dd891c131ed86d48d05df516a8a778
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 13:48:40 2020 +0000
Use world map as LoD source
commit dbf650f504a4c25fbbc2096ac3616c736bf52d23
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Jan 20 00:48:14 2020 +0000
Better clouds at distance
commit 5e6f81b86cdb9730b9b056877b19257075fd5fa8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Jan 19 23:59:02 2020 +0000
sync
commit 745e7540ddb000cc645f612767b337c2ddc3f7c0
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 12:40:48 2019 +0000
Improved cloud falloff mist, faster noise sampling
commit f6a200d0cb866196ba57697466755f9e0c7ea5d8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 10:09:00 2019 +0000
Improved long-range depth precision, removed unnecessary LoD polygons
commit 63d1b2bb2292898d59fb4f4e502201103dfeb86f
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 20:57:46 2019 +0000
Working LoD shader
commit f13d98ee3e58f881e8b978861a67663b59ed91ec
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 11:03:40 2019 +0000
LoD first attempt (stack overflow issue)
2020-08-20 18:34:59 +00:00
|
|
|
|
let water_alt = fill_sinks(map_size_lg, water_height_initial, is_ocean_fn);
|
|
|
|
|
/* let water_alt = (0..map_size_lg.chunks_len())
|
2020-01-11 20:38:30 +00:00
|
|
|
|
.into_par_iter()
|
|
|
|
|
.map(|posi| water_height_initial(posi))
|
|
|
|
|
.collect::<Vec<_>>(); */
|
2019-12-03 01:07:44 +00:00
|
|
|
|
|
(See sharp/lod-history) LOD, shadows, greedy meshing, new lighting, perf
---
Pretty much a Veloren fork at this point. Here's a high level overview of the changes (will be added to CHANGELOG just before merge).
At a high level this MR incorporates roughly two groups of changes.
The first group consists of new game features: more flexible map sizes, level of detail terrain, shadow maps, and a new lighting
engine. This is "feature work" that (mostly) only adds new things to Veloren, and mostly shouldn't affect old stuff.
The second big group of changes are those addressing the fallout from all the new features. These include performance fixes of
various sorts: the addition of multiple graphics options and optimization of the cheap ones to avoid work, switching all voxel
models to use some variant of greedy meshing, switching over much of our CPU-side vector math to exploit SIMD instructions
(coinciding with a fork of `vek`), and a rewrite of how the UI handles text rendering (coinciding with updates to our fork
of `conrod`). Making Veloren's hardcoded colors appear correct under the new lighting engine also required considerably
changes (TODO: Fill in this section when it's complete).
The second category of changes often heavily touches code owned by other people, including frequently modified code "owned" by a
handful of people, so I recommend that this code be reviewed particularly carefully.
---
At a high level (each will be described in more detail below):
- The world map has been refactored.
- The world size is no longer hardcoded (@zesterer).
- The map generation code was made generic to allow using it outside of the `world` crate (@zesterer).
- On world creation, we now compute *horizon maps* (@zesterer).
- The way we pass the world from the server to the client has been updated (@xMAC94x).
- Artifacts related to image rotation were fixed (@imbris).
- Multiflow rivers were enabled (@zesterer).
- In the process of making changes related to the world map, various incidental fixes and optimizations were required.
- The new *level of detail* feature was added (@zesterer wrote part of this and has checked out the rest).
- A new LOD terrain rendering step was added to the pipeline.
- The LOD terrain quality was made configurable via a graphics setting.
- Horizon maps were used to cast shadows from LOD chunks on both LOD and non-LOD terrain.
- A "voxelization" effect was incorporated into rendered LOD terrain to make it blend better into the world.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Veloren's lighting has been completely overhauled (@zesterer has already checked most of this out).
- A semi-accurate index of refraction was assigned to our materials.
- A new, more realistic, physically based approach to lighting was used using the *Ashikhmin Shirley* BRDF.
- We emulate *atmospheric scattering* using equations designed for measuring solar panel light exposure.
- We attempt to compute *realistic light attenuation* in water using its real material properties.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Point and directional lights now cast realistic shadows, using *shadow mapping.* (@imbris, @zesterer, @Treeco, @YuriMomo)
- Point light shadow maps were added to the rendering pipeline, using geometry shaders and *seamless cube maps*.
- Directional light shadows were added to the rendering pipeline, using LISPSM together with disabling *depth clamping*.
- "Shadow-only" chunks and NPCs were added to prevent shadows from models behind you from disappearing.
- In the process of making changes related to shadow maps, various incidental fixes and optimizations were required.
The addition of shadow maps, LOD terrain, and the new lighting all led to significant performance degradation, on top of other
changes happening in master. Therefore, a large number of performance improvements were also needed:
- The graphics options were made much more flexible and configurable, and shaders were optimize.
- New options were provided for how to render lights and shadows (@Pfauenauge, @zesterer).
- Graphic setting storage and configuration were overhauled to make adding new features easier (@Pfauenauge, @imbris).
- Shaders were rewritten to utilize GLSL's preprocessor to avoid overhead (@zesterer, @YuriMomo).
- In the process of making changes related to providing additional rendering options, various incidental fixes and optimizations were required.
- Voxel model creation was switched to use *greedy meshing.*
- A new voxel meshing method, greedy meshing, was added (@imbris).
- Uses of the older meshing methods were migrated to use greedy meshing (@imbris, @jshipsey, @Pfauenauge).
- New restrictions were added to terrain, figure, and sprites to future proof them for further optimizations (@jshipsey, @Pfauenauge, @zesterer).
- Most positions are now relative to either chunk or player position for better precision (@imbris, @zesterer, @scottc).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- Animation and terrain math were switched to use SIMD where possible.
- Fixes were made to vek to make its SIMD feature usable for us (@zesterer, @imbris).
- The interface and types used in bone animation were changed in various ways (@jshipsey, @Snowram, @Pfauenauge).
- Redundant code generation for body animation is now partly taken care of by a macro (@jshipsey, @Snowram, @Pfauenauge).
- Animation code was modified to to use vek's SIMD representation where possible (@jshipsey, @Snowram, @Pfauenauge).
- Terrain meshing code and shadow map math were also modified to use vek's SIMD representation (@imbris).
- SIMD instruction generation was enabled (@YuriMomo, @jshipsey, @Snowram, @imbris, @Angelonfira, @xMAC94x).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- The way we cache glyphs was completely refactored, fixed, and optimized.
- Our fork of `conrod` was optimized in various ways (@imbris).
- Our fork of `conrod` now exposes whether a widget was updated during the current frame (@imbris).
- Our use of the glyph cache was rewritten for correctness (@imbris).
- A *text cache* was introduced that lets us skip remeshing glyphs that have not changed (@imbris).
- Various changes were made to reduce pressure on the glyph cache, with more planned (@imbris, @Pfauenauge).
- In the process of making changes related to the glyph cache, various incidental fixes and optimizations were required.
- Colors were changed to keep Veloren's look consistent with master.
- Some older tree models were brought back (@Pfauenauge).
- TODO(@Sharp): All hardcoded colors were extracted and made hotloadable.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Hardcoded colors were fixed to conform to Veloren's style.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Color models were fixed to conform to Veloren's style.
A detailed description of the involved changes follows.
---
- The world size is no longer hardcoded. All functions dependent on world size now take a `WorldSizeLg`, which holds the base 2 logarithm of each actual world dimension and is guaranteed to maintain certain properties (outlined in `common/src/terrain/map.rs`). Additionally, many utility functions that utilize the world size were moved into `common` as well (mostly `common/src/terrain/mod.rs`). Finally, the world map format was updated in order to store its size explicitly, with a migration path from the old format that should work whenever the old formatted map was a square (practically always). See `world/src/sim/mod.rs` for these changes.
- The map generation code was made generic to allow using it outside of the `world` crate. The parts of the map generating code that do not need to query the world were moved over to `common/src/terrain/map.rs`, allowing them to be used from the client without creating a dependency on `world`. The rest of it was turned into helper functions in `world/src/sim/map.rs`, which can be passed as closures to the generic map generation code to complete its construction. This also means that colors are now passed in separately to the map generation function. See <https://veloren.net/devblog-78/> for more details.
- On world creation, we now compute *horizon maps*. See the function in `world/src/sim/util.rs`.
Given a height map and a plane intersecting that height map, our horizon maps allow us to encode enough information to reconstruct shadows for each point on the height map using only the *horizon angle* (the angle at which the sun starts to become visible). As Veloren's sun only covers one plane, this is sufficient for encoding sun shadows for LOD terrain, by encoding two angles per chunk (one for each 90 degrees the sun covers). We can also use this for the moon, if we want, since the moon follows the same path. Additionally, we store the *height* of the furthest occluder, to try to make the shadows volumetric; so this means 4 bytes in total for each chunk.
Support for horizon maps has been merged into the map functionality in common as well.
- The way we pass the world from the server to the client has been updated. Rather than passing the prerendered map, we instead pass three maps with values for each chunk; one with the color information, a second with altitude information, and a third with horizon map information. We then reconstruct the map on the client, together with some additional information we send from the server (like the sea level and maximum height). See `common/src/msg/server.rs` for a detailed description of the format of `WorldMapMsg`, and `server/src/libr.rs` and `client/src/lib.rs` for details of the map construction and parsing.
- Artifacts related to image rotation were fixed. See the commit message for commit SHA `cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e` for a detailed explanation. This involved changes to shaders, the addition of a new type of graphic (also reflected in the graphic cache) that allows specifying a border color (which automatically makes the associated texture immutable), and some related fixes. I reproduce the first two paragraphs of the MR description as well:
```
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
```
- Multiflow rivers were enabled.
This does not really need to be part of this MR, and would be easy to revert, but since it seemed to provide a nice improvement it's currently packaged with it.
We already computed multiple outflows from each chunk for erosion purposes long before this MR.
However, we never modified river rendering to be able to handle this case (just a single downhill river flow is complex enough!) so this was not exposed when deciding which chunks were rivers.
Now that
- In the process of making changes related to the world map, various incidental fixes and optimizations were required. Some examples of fixes include making sure terrain is never lowered to below sea level (to make the shadow maps report correct values), fixing map altitudes and colors to understand things like cliffs and "block level" coloring (that doesn'te xist on the column level), and fixing a crashbug when rendering images for the UI where source pixels are strongly rectangular. Some examples of related performance fixes include avoiding allocating a fresh vector for all the maps (i.e. copying it over to change the format from `[u32; n]` to `DynamicImage` and then copying again to convert to `RgbaImage`), and instead using the `gfx::memory::slice` function to accomplish the same thing. These sorts of changes are spread all arond the code.
This includes the additon of a new scene, `voxygen/src/scene/lod.rs`, a new pipeline `voxygen/src/render/pipeline/lod_terrain.rs`, and new shaders `assets/vxygen/shaders/lod-terrain-vert.glsl` and `assets/vxygen/shaders/lod-terrain-frag.glsl`, as well as associated changes to the renderer in `voxygen/src/render/renderer.rs`.
The main idea behind our initial approach to LOD was to take the world data we now get from the server (altitude, color, and horizon mapping).
- Some previously computed values were turned into shader uniforms for better prediction on weak processors. (@zesterer)
- Calls to power or trig functions were removed or replaced with multiplications, where possible.
- After some deliberation
- To properly handle sprite "waving" for nearby sprites,
We explicitly designed the greedy meshing system with figures and sprites in mind.
In both cases, we want to be able to *efficiently* pack many different models into the same texture, especially in cases where we know
we will either not be removing any of the grouped-together from the models from the texture, or will remove all of them at once (so
they can be packed into some specific subtexture).
For sprites, since we know every model in advance and never intend to deallocate them, we currently pack them all as efficiently as
possible into one giant tetxure atlas. However, in the future we might opt to pack them slightly less efficiently in exchange for
shrinking the sprite vertex size.
For figures, we pack all the textures for each *model* into the same atlas.
is a global texture atlas used for every sprite, and for figures which is why we have the ability to mesh multiple
models to the same texture area (using the simple texture atlas allocator) without requiring intermediate vector allocations.
This is accomplished by delaying the time when we actually write the color and light data to the texture until *after* all the
model vertices have been meshed; then, we can just allocate the whole color/light array at once, making the atlas we use an
exact fit. In computer science-y terms, we accomplish this delay by, after we perform the initial greedy meshing (without
texture information), not continuing to create the texture data, but instead constructing a *continuation*--that is, a function
that, when called, will execute the rest of the computation. We push this continuation (which in Rust terms is a `FnOnce` closure
that takes the `ColLightsInfo` that it is supposed to write to as context) onto a
onto a vector
resizing. To allow for suspended writes to texture data, Rust pointed out to me that the continuation that would eventually write the color and light data to the texture atlas (the one that is shared by all models sharing the same greedy mesher) would have to *own* whatever data it mshed. Because we often generate the model data to mesh as a temporary in `voxygen/src/load.rs`, the
- Matrix multiplications in the shader were reduced for figure data (@zesterer).
- Vertex "waves" for fluid data were removed.
- Terrain "bending" near edges was removed.
- Scaling was fixed to make sure empty space was not introduced in a space previously occupied by a block. It was also changed to take ownership of its voxel data,
rather than sharing it, to let it be used with meshing.
- Rust's nightly version was bumped in order to use the `array_map` function, which lets us reuse more code between the simple map and `FigureModelCache`.
- PositionedGlyph::standalone.
---
I tried to cite sources in many cases[^realtime],[^lloyd],[^lispsm],[^pbrt],[^greedy],[^tjunctions]
where I needed features from elsewhere but I am particularly grateful for the following resources,
esepcially where they have accompanying source code. I linked all of them that are accessible to the public (those that are not were
obtained through legal means).
[^realtime]: Eisemann, Elmar, Michael Schwarz, Ulf Assarsson, Michael Wimmer. Real-Time Shadows. A K Peters/CRC Press (T&F), 20160419.
[^lloyd]: Lloyd,B. 2007. [Logarithmic perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). PhD thesis, University of North Carolina.
[^lispsm]: Wimmer, M., Scherzer, D., and Purgathofer, W. 2004. [Light space perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). In Proceedings of Eurographics Symposium on Rendering 2004, pp. 143– 152.
[^pbrt]: Pharr, Matt, et al. [http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf](Physically Based Rendering: From Theory to Implementation). Third edition, Morgan Kaufmann Publishers/Elsevier, 2017.
[^greedy]: mikolalysenko. “Meshing in a Minecraft Game.” 0 FPS, 30 June 2012, <https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/>.
[^tjunctions]: blackflux. “Meshing in Voxel Engines – Part 1.” Blackflux.Com, 23 Feb. 2014, <https://blackflux.wordpress.com/2014/02/23/meshing-in-voxel-engines-part-1/>.
I am also especially grateful to Khronos, Wikiepdia, and stackoverflow for answering many of my specific questions while writing the MR.
---
Squashed commit of the following:
commit 300505e7305a2fdac722a808ee8538323f215f39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 18:46:25 2020 +0200
Fixing cargo doc and typo in CHANGELOG.
commit ec0aeb18e8499d7d84ef818331b4b65c3d76cea6
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 15:38:50 2020 +0200
Hopefully final commit for the LOD branch.
commit 5e8ea0b1eaac02903a02feb2eb038d195de4872f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 10:14:26 2020 +0200
Falling back to power as stopgap.
commit e44a1cbf46504ee9931a01bdc9033e145500d557
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 09:25:41 2020 +0200
Address imbris feedback.
Temporarily disables shiny water, lowers max VD.
These restrictions will be lifted soon after merging.
commit 561e25778a108ac3712f5ec2ce3a51234c4430d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 08:31:13 2020 +0200
Tweaking shaders a bit.
commit 7d19259078ce0dd7b3742ad7d0cb3fab3ece3fdc
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:59:43 2020 +0200
Fix view example as well.
commit 051cd4934e0fad2c0b15db4380a4189fa318679f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:29:06 2020 +0200
Fix meshing benchmark.
commit c95e07db3b4dcca285678985e65e31b927cb1c61
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 05:46:22 2020 +0200
Address MR feedback, fix scene clouds.
commit 1bfb816cabdb3ffc1e507a009c2d98696b4b573a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:39:36 2020 +0200
Incorporating Pfau's figure color changes.
New eyes and new humanoid colors.
commit 3f9b89a3ac7b3356b1dba0d1a8f6541357f81469
Merge: e2f5162e4 62c53963a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:29:41 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit e2f5162e4f96f4124aa43488f7245d341b3dcfd4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:28:38 2020 +0200
World colors are all hotloadable.
They live in assets/world/style/colors.ron.
Only a small handful of hardcoed colors remain in World; they are either
part of the map, or difficult to disentangle from the rest of the
computation. Comments are made where appropriate.
commit 62c53963abe1975009d34a8f9515a355bef24f31
Author: Marcel Märtens <marcel.cochem@googlemail.com>
Date: Wed Aug 19 15:59:00 2020 +0200
replace pretty_env_logger with tracing
commit 5b1625f99d9586fe80e2232f583ec5af9f953099
Merge: d71003acd 4942b5b39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:15:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit d71003acdabeff970b3928e97c26af6847b5b78e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:14:34 2020 +0200
Hotloading colors, part 1: colors in common.
Currently, this just entails humanoid colors. There are only three
colors not handled; the light emitter colors in
common/src/comp/inventory/item/tool.rs. These don't seem important
enough to me to warrant making hotloadable, at least not right now, but
if it's needed later we can always add them to the file.
commit 63b5e0e553eb2ea49276f192a6fc7dd65254270d
Merge: c32b337a4 6d2c4b9c1
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 13:05:37 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c32b337a46e10d9de473d178a94a3ccd61c39bb3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:52:04 2020 +0200
Fixing LOD grid, for real.
commit a166ae0360395387e09fb35a1f84210c2ce5ec24
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:28:05 2020 +0200
Addressing imbris's initial feedback.
Fixes two minor bugs: explosion particles were no longer spawning
randomly, and LOD grids were not perfectly even.
commit 4cbad004f44060994252dd3d38647a14a589712f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:27:58 2020 +0200
Bumping nightly per request.
commit 548680276aac77c25d43d16b5622f847d474dbef
Merge: acc098604 8f8b20c91
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:26:06 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit acc0986040589a3492f88a740bc3c3fc693b26d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:28:32 2020 +0200
Lower resolution due to lying drivers.
commit d3b878de2a52c358d2944a6bbd0555dad7fbdb10
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:15:38 2020 +0200
Fix issues msh encountered with Intel 4600.
commit 10245e0c1b0cb6fae10d86409435364edc6102ef
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 21:15:02 2020 +0200
Merge more models into one mesh than we did previously.
commit 3155c31e663c52ae5c3a53d5fb5665892a1a498a
Merge: 7204cc8a7 3c199280e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:35:22 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7204cc8a7a4f74a30306bd205d9834fee4bb944f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:34:43 2020 +0200
Fix not yet done NPC animations.
This forces them all to be the idle animation if not specified.
This fixes issues where you'd have giant NPCs in water.
commit bc83360f2a08918f19d417b5f772e1ff554dba08
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 19:36:37 2020 +0200
Try to fix some bugs:
- Z fighting with LOD terrain and water.
- Audio SFX not playing.
commit 1fd104aa603bf3781b6526a5cada46aeca3049dd
Merge: 862df3c99 7c2c392a3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 12:02:31 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 862df3c9976c4da9bd7cfd784f1a85973127968a
Merge: 0a4218ed9 75c1d4401
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 05:52:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0a4218ed9d541a2b34c133351bea38a99ddf4ea7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 22:27:14 2020 +0200
Fix particle depth.
commit f51dfdeb442d0dd5243dd2f344fa4be295bd0875
Merge: c6251a956 5e6dc0471
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:19:04 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit c6251a956ad376400dca5c23420cf8d213dc8fdf
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:15:46 2020 +0200
Cache figures more intelligently.
Cache figures for longer, and don't cache character states for the
player except where they actually affect the rendered model.
commit 0ed801d5404982c6fb63b1eaa4567d908b294c9d
Merge: c11b9bdf0 eea64f78f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 16:32:24 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c11b9bdf0a53bf9884d2f5a48fec9b01d582df1a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 11:47:15 2020 +0200
Remove unneeded Clippy annotation.
commit 16aa9ef40af56d69289d00aafb3deadfb8bd4f35
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 8 00:53:02 2020 +0200
Fix hotloading and Clippy.
commit 3dc973e0be5b758da1e9805eb764ad401374cd0c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 23:50:27 2020 +0200
Major speedups with SIMD.
commit fba64a7d93d5a96077ce87287bbce6ab9b7fbcae
Merge: 76429d00e d1e10b178
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:19 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 76429d00eea00d212fbd672a84ee91e75b19b938
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:10 2020 +0200
Add clippy.toml.
commit c79f512f84dbb83cb82b7954db68ff241dfd8e41
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 11:55:20 2020 +0200
Fix all clippy issues, clean up Rust code.
commit 6f90e010b3fbefb53b0d632e819931350015b6b8
Merge: 77a8c7c26 5929cfa5c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:30 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 77a8c7c267d3f44a1a62bd6b2274359973c5e4d4
Merge: b44e44232 44febaabd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:10 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 5929cfa5c713aa392110bbb62407f76caf53c3df
Author: jshipsey <jshipsey18@gmail.com>
Date: Thu Aug 6 20:47:27 2020 -0400
fixed in-hand arrow bug
commit b44e442325d828f1cd564d66908f89d09e80474b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 6 13:40:35 2020 +0200
Miscellaneous performance improvements.
commit be37acf287c1360d8085862526ac3365ffd1d768
Merge: 125d7fc6c c11876547
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 05:49:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 125d7fc6c4dcd8c8c5f27b8268a4d64f409f3644
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 04:55:31 2020 +0200
Abstract over simd vs. repr_c vectors.
Also some minor improvements to Event size.
commit d4d4956e9252e1241ce110b2aa85076c6b1e2a23
Merge: 5f3b7294a aced5f979
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:56:54 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 5f3b7294af1f8533edc2620b58863c248e2b07af
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:43:52 2020 +0200
Fix formatting issues I missed before.
commit a428a3ebba70dcab63dd0f8cd983120c90617271
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:41:51 2020 +0200
Fix clippy warnings, part 1.
There aer still a bunch of type too complex and
function takes too many arguments warnings that I'll fix later
(or ignore, since in the one case I did fix a function takes too
many arguments warning I think it made the code *less* readable).
commit ba54307540ed8a937ac08209730284fc653af85b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 30 13:22:42 2020 +0200
Fix light animations so they are removed when the light turns off.
commit 7e0f4bcbf0f4717145d8beac40d52e3acebbe2aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 21:10:20 2020 +0200
Fix crash in edge case for pixel art.
commit 56da06f7a351e2b949e9b014a90b974d511a0924
Merge: cf74d55f2 9f53a4a19
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:56:52 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:29:52 2020 +0200
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
The first concern was addressed by fixing the dimensions of the map
images drawn from the UI (so that we always use a square source
rectangle, rather than a rectangular one according to the dimensions of
the map). We also fixed the way rotation was done in the fragment
shader for north-facing sources to make it properly handle aspect ratio
(this was already done for north-facing targets). Together, these fix
rendering issues peculiar to rectangular maps.
The second and third concerns were jointly addressed by adding an
optional border color to every 2D image drawn by the UI. This turns
out not to waste extra space even though we hold a full f32 color
(to avoid an extra dependency on gfx's PackedColor), since voxel
images already take up more space than Optiion<[f32; 4]> requires.
This is then implemented automatically using the "border color"
wrapping method in the attached sampler.
Since this is implemented in graphics hardware, it only works (at
least naively) if the actual image bounds match the texture bounds.
Therefore, we altered the way the graphics cache stores images
with a border color to guarantee that they are always in their own
texture, whose size exactly matches their extent. Since the easiest
currently exposed way to set a border color is to do so for an
immutable texture, we went a bit further and added a new "immutable"
texture storage type used for these cases; currently, it is always
and automatically used only when there is a specified border color,
but in theory there's no reason we couldn't provide immutable-only
images that use the default wrapping mdoe (though clamp to border
is admittedly not a great default).
To fix the maps case specifically, we set the border color to a
translucent version of the ocean border color. This may need
tweaking going forward, which shouldn't be hard.
As part of this process, we had to modify graphics replacement to
make sure immutable images are *removed* when invalidated, rather
than just having a validity flag unset (this is normally done by
the UI to try to reuse allocations in place if images are updated
in benign ways, since the texture atlases used for Ui do not
support deallocation; currently this is only used for item images,
so there should be no overlap with immutable image replacement,
so this was purely precautionary).
Since we were already touching the relevant code, we also updated
the image dependency to a newer version that provides more ways
to avoid allocations, and made a few other changes that should
hopefully eliminate redundant most of the intermediate buffer
allocations we were performing for what should be zero-cost
conversions. This may slightly improve performance in some
cases.
commit ad18ce939940a8c697270f6e9b94db9942fd8295
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 13:21:09 2020 +0200
Fix continent scale hack.
commit 36b1cb074f5b195aebd7dbbc3da7f0246a1a18ec
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 12:11:40 2020 +0200
Enable loading different sized maps without a recompile.
We may want to tweak the effects of the continent_scale_hack.
commit 13b6d4d534cc4814b7cb3294ca41bbfea0a6b186
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 10:55:48 2020 +0200
Removing WORLD_SIZE, part 1.
Erased almost every instance of WORLD_SIZE and replaced it with a local
power of two, map_size_lg (which respects certain invariants; see
common/src/terrain/map.rs for more details about MapSizeLg). This also
means we can avoid a dependency on the world crate from client, as
desired.
Now that the rest of the code is not expecting a fixed WORLD_SIZE, the
next step is to arrange for maps to store their world size, and to use
that world size as a basis prior to loading the map (as well, probably,
as prior to configuring some of the noise functions).
commit 30b1d2c6428230a9eaa0d749cdcbbd6f1cbccd78
Merge: 7d56ba31b 1377b369f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:58 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 7d56ba31b445441461b28a07fc495d7d4f047c17
Merge: 2101113b4 598f14b25
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 1377b369f6db2258e910d467a5740f31789e3ded
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sun Jul 19 23:25:38 2020 +0200
more saturated pumpkins
commit ae8d50527f93bb0616c2ad46ce4dacb63bc37c6d
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sat Jul 18 20:29:56 2020 +0200
acacia models
commit 2101113b467e691de787392d7f20f1745f5637bd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 18 18:55:25 2020 +0200
Higher detail LOD.
commit add2cfae04b4385fa5590e11e2bd5229d9dee0aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 16 01:57:39 2020 +0200
Revert some irrelevant stuff.
commit 2e2ab3dc1eaa59a4aef7f8d34a53d8aae4c8553a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 15 13:30:49 2020 +0200
Fixing various things about shadows.
* Correcting optimal LISPSM parameter.
* Figure shadows are cast when they're not visible.
* Chunk shadows stay cast until you look away.
* Seamless cubemaps for point lights.
* Etc.
commit 6c31e6b56217274285b597af297036691ea5d897
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 19:50:26 2020 +0200
Fix shadow creation.
commit 6332cbe006115ae205597529cd8bbccd146c2cca
Merge: be438657c 930e0028b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:47:00 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit be438657c33d7b5bfb0a9582c3ed3fd366637323
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:28:08 2020 +0200
Tweaks to shadows.
Added shadow map resolution configuration, added seamless cubemaps,
documented all existing rendering options, and fixed a few Clippy
errors.
commit 23b4058906013c7d2a40c286e20e32c5fbd897ed
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 10:11:19 2020 +0200
Fix moon, use nonlinear noise for terrain.
Note that the latter has a bit of performance cost.
commit 7fbe5cbfbb9dc29607957b8e62f432a4deed193d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:23:02 2020 +0200
Address lies about max texture size.
commit bcfc62b5e13a1cdd83f57535fde4694720bebfd9
Merge: 75e3626a7 18a08e8fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:22:08 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 75e3626a785919f43fdcf2127c2b10e3e4df2f9f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:21:52 2020 +0200
OpenGL 3.3 minimum.
commit 18a08e8fe2739f02af99a5d2cb4e7c38c49e858b
Author: Monty Marz <m.marzouq@gmx.de>
Date: Tue Jul 7 23:57:52 2020 +0200
settings localization
commit 90c5d1ca3620092bc3ae10b2211489eb1cf6f5e8
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 21:11:48 2020 +0200
Lower near distance.
commit 0e66f02b25aaddaa2dfddbbc89cd67de54a9a7b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 20:09:01 2020 +0200
All sprites sway in the wind now.
commit db1401a6910bf42dcf502462c90038752ff5fbdb
Merge: 69e508d8c e8b4b29d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 19:34:17 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 69e508d8c94d8973033817ca86f357e466fc7c4d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 18:41:37 2020 +0200
Make it easy to switch to SIMD for math.
commit ffe0f5928c7a7e87d00cb5426b3b1d831d7e02fd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 21:21:12 2020 +0200
Fix some issues with underwater rendering.
commit bfda6da42f38fd02c31ee92c81ab785a3e50c2a0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 19:17:59 2020 +0200
Fix some minor display issues.
commit 0ed752e087968cf901301884aaeae698e32ef8a5
Merge: ccc6a06a8 518edcb85
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:14:21 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit ccc6a06a8d4504d6b9f7af7905a414d2ee06ab76
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:04:34 2020 +0200
Some minor changes.
commit 4e020246702889269efe1a191788992164c508d6
Merge: 50a64d927 e05c9267a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 16:17:40 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 50a64d927e6c4f4b0e4688e4cbfca694bc3f922a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 13:07:03 2020 +0200
Fix far plane.
commit 7dd06da34cae8f9ea3b6c889fe965181f3fd3949
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:25:35 2020 +0200
Add shadows.glsl.
commit 618a18c998778bf871b905a74657440fcc384c80
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:10:22 2020 +0200
Adding shadows, greedy meshing, and more.
commit eaea83fe6a5cb1cb0ba8beef888183c718258496
Merge: 267018495 2f89b863e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 22:47:07 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 2670184954a13e4a9e7a4e35ba79aac0c5fac2f7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 21:20:01 2020 +0200
Make civsim and sites deterministic.
For anything in worldgen where you use a HashMap, *please* think
carefully about which hasher you are going to use! This is
especially true if (for some reason) you are depending on hashmap
iteration order remaining stable for some aspect of worldgen.
commit f8376fd5dc72b4a9c2f51a6b4570d59c8b8e9343
Merge: 654f7e049 cdee191dd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 17:53:57 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 654f7e049258d9da27c09608bbe6a46ffa8787e5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed May 20 21:22:30 2020 +0200
Correct backface culling.
commit 560501df05ca725409b0f2e4eb31bdfdc15fd0c7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue May 19 17:22:06 2020 +0200
Greedy messhing for shadows.
commit a4d87e1875ca543436e6bbbeb20348facc5a52d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun May 17 05:59:00 2020 +0200
Shadow maps work for lantern.
commit 243d0837b8a3b08172c9a3c348d964d7ddc2a0a8
Merge: 04382dc28 71dd520cd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:53:13 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 04382dc28632b6c66e8821f6870c0daaa1c1901a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:22:17 2020 +0200
WIP: better graphics config, better LOD, shadow maps.
commit 22ddbad3eb32bfa70f0932176022208fe67ded81
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 18:54:09 2020 +0200
Minor shader fixes.
commit 746a10e8d01ac235f994b0cde78fa48998602a1f
Merge: 0f4a0e763 40ab94673
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 04:02:09 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0f4a0e763db3afbdc4fb0558611f38326ca87151
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 23:03:24 2020 +0200
Switch back to pop-in terrain.
commit dd74fa7e4a53667b38811d7aec58d7f6a68889bb
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 22:58:55 2020 +0200
LOD shading closer to voxel shading.
commit ef67bd58ba0bdaf622b078892d768263b6cba268
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 28 20:49:03 2020 +0200
Experimental underwater lighting.
commit 2c5ad9d07605e80d5fd5679dd3a5d70c605b86a9
Merge: 748279835 303967a6f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 22:35:24 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7482798354eda18c8207950080fc24d443a369de
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 21:59:55 2020 +0200
Replace discard in figure-frag.
commit d83b4ae69be4912f69bf7835f509c68a1c7770a4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:45:57 2020 +0200
Fix sprite lighting, HDR from focus_pos.
commit 0594238004f116274905fa0ed7c2b6c417ed1d29
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:14:10 2020 +0200
Proper HDR from point lights.
commit 48c93d2b41ce5743103d18e76cc228f5ac766492
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 14:01:43 2020 +0200
Brighter ambiance, darker LOD shadows.
commit e0452e895ccfa8a43f368cae3b8b8aedc24dad93
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 13:13:23 2020 +0200
More proper HDR.
commit 4c6da3ed16cfeebb455e40da5f557b4af9a499d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 00:13:10 2020 +0200
Trying LOD noise.
commit 682a3d74c85df5503ffe1fc1cc891bce789df1ad
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 23:11:08 2020 +0200
Fix LOD heights in towns.
commit cc39e5734e8b18f9077bf42e66337c1319dd6b6e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 21:01:23 2020 +0200
More LOD fixes.
commit 8116b21c2e51c836e77894e309ac273caf2917b3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:54:43 2020 +0200
I like this coloring.
commit bc2560ea90b36f4b46190005344232d993043ac3
Merge: 14effdd5d e690efe71
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:48:33 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 14effdd5db8747fcf3eb34f03b46b7792e92d1c5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:24:35 2020 +0200
Re-saturate.
commit 48a643955d4435b78179acba0beb4a979905cc31
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:23:57 2020 +0200
Various fixes.
commit f7b497a0c25f4ad4682c71dd1ed6f608052feb9b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 03:22:49 2020 +0200
Render figures again.
commit 44e4aad48deba8266b9f8bdfd3db096b381f5327
Merge: e6f0a5a98 9ec319a18
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 02:01:04 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit e6f0a5a981a82533ba188fff0a54ce98577bb152
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 24 16:12:20 2020 +0200
Add atmospheric scattering.
commit f2953087f691a8edbc001cb98ebf5059fc6f8ac0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 23 00:01:20 2020 +0200
Fix shadowing for specular reflections.
commit ddd4a67a9799b8d08c7dc0c2bec90621c2bed0e3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Apr 22 22:56:12 2020 +0200
HDR fixes.
commit 1015e60deef3c447381996277df7496707a63bd0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 21 18:25:19 2020 +0200
More lighting changes.
commit 80c264abd111fb237e57843efcb5c071d4f84613
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 13 00:29:59 2020 +0200
Lighting experiments.
commit 8414987e589dd5102bad89762a3adaccc0bfe957
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 9 02:38:40 2020 +0200
WIP -- lighting changes and soft shadows.
commit 9cd2b3fb0d6b49776c6dfe463e4169637250b11a
Merge: c7ea687eb 8b149ad11
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:29 2020 +0200
Merge branch 'sharp/new-lighting' into sharp/small-fixes
commit c7ea687ebbc5aace1b455f134a5bf49ce2c7434a
Merge: 476441531 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:02 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 8b149ad11ad4bb75018fcf9519baec27d1c95951
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:32:39 2020 +0200
Trying out a new lighting model.
commit b0ac9f36f755dd06f7c17c46150568064790864f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 07:56:11 2020 +0200
Use bicubic interpolation for terrain.
commit f6fc9307a121514b614bc50ef8eb055953e7da8a
Merge: 33140a295 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 05:01:41 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 4764415312aae6e9ac2d00e86e84577cb958f1ab
Merge: ed2d0111d 13388ee6a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 04:54:48 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 13388ee6a42943f3f79a9cb488346cef18e272fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 20:30:08 2020 +0200
Various fixes (to coloring and to soft shadows).
commit fbd084a94a067082a87cd6d28b82054709bc9265
Merge: 5a089863b 4fdf6896a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 18:50:38 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/map-colors
commit ed2d0111d994262ae836d84d1fe5a45e4de72a0b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 06:49:27 2020 +0200
Combining colors and LOD.
commit 88342640c6b835114d01c797b89fdede3b0a2108
Merge: 33140a295 5a089863b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:49:20 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 33140a2951b8212725f42c758b277aaec4d888f7
Merge: 4c65a5aed f34d4b379
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:36:21 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 5a089863beb01d4794bbe3580ada47b278715ea2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 03:17:49 2020 +0200
Making maps brighter.
This is probably not the right way to do it, but oh well!
commit 32b2c99109dd486aa922886081068f9c550c83f2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 02:46:36 2020 +0200
Horizon mapping and "layered" map generation.
Horizon mapping is a method of shadow mapping specific to height maps.
It can handle any angle between 0 and 90 degrees from the ground, as
long as know the horizontal direction in advance, by remembering only a
single angle (the "horizon angle" of the shadow map). More is explained
in common/src/msg/server.rs. We also remember the approximate height of
the largest occluder, to try to be able to generate soft shadows and
create a vertical position where the shadows can't go higher.
Additionally, map generation has been reworked. Instead of computing
everything from explicit samples, we pass in sampling functions that
return exactly what the map generator needs. This allows us to cleanly
separate the way we sample things like altitudes and colors from the map
generation process. We exploit this to generate maps *partially* on the
server (with colors and rivers, but not shading). We can then send the
partially completed map to the client, which can combine it with shadow
information to generate the final map. This is useful for two reasons:
first, it makes sure the client can apply shadow information by itself,
and second, it lets us pass the unshaded map for use with level of
detail functionality.
For similar reasons, river generation is split
out into its own layer, but for now we opt to still generate rivers on
the server (since the river wire format is more complicated to compress
and may require some extra work to make sure we have enough precision to
draw rivers well enough for LoD).
Finally, the mostly ad-hoc lighting we were performing has been (mostly)
replaced with explicit Phong reflection shading (including specular
highlights). Regularizing this seems useful and helps clarify the
"meaning" of the various light intensities, and helps us keep a more
physically plausible basis. However, its interaction with soft shadows
is still imperfect, and it's not yet clear to me what we need to do to
turn this into something useful for LoD.
commit f8926a5737ddc51f3d585c651a64c43677aae0f4
Merge: a1aee931e 875ae6ced
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Mar 13 13:32:42 2020 +0100
Merge remote-tracking branch 'origin/master' into sharp/map-colors
commit 4c65a5aed353b119aea65a2aaeb94549b67beb42
Author: Treeco <5021038-Treeco@users.noreply.gitlab.com>
Date: Mon Feb 24 16:48:05 2020 +0000
Made LOD setting slider exponential
commit 2fa7b2d20d7233dc8bfd64f9f7f54617575248f1
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 17:49:53 2020 +0000
Added mist to LoD
commit aab059a450b5f635777129ff82cc15b662965c3c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 15:14:06 2020 +0000
Added LoD slider
commit 779c36b538121c5ade3633ae5cb67bb14c8c3877
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:54:55 2020 +0000
Reduced cost of vertex pushing
commit 9fea150473906b166365b738ebcea07c697daf3d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:38:53 2020 +0000
Fixed maths, improved LoD resolution
commit 5481df38fea5bf183ff376a3337179cfaa5233dc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 11:22:50 2020 +0000
Dynamically relocate LoD vertices to enhance details
commit a3e36a50ababd615da7db1b26158c7906a5def01
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 18:13:51 2020 +0000
Simpler terrain spiral rendering
commit 255f450ae9ac8763db4bede075fb409161ed57cc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:53:17 2020 +0000
Better LoD precision
commit 3d027aebe812a5b8658a4eb8123dc9f61b3776d2
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:04:03 2020 +0000
Better falloff
commit be775c9484b457b2c0b1a494aec03392d0c70e76
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 15:30:45 2020 +0000
Applied good ideas from experimental branch
commit 58587b68545a23c5c04ab4574a4b94b3bc982246
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 16:15:13 2020 +0000
Minor fixes to LoD merging
commit 7b42aebd709c14df2db766aad61d9280ad24d84d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 15:04:44 2020 +0000
Capped LoD dragging
commit 8aafc559f87124e1ea5ca6e3ddc2aa0c242d793c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:54:37 2020 +0000
Better blending between LoD and terrain border
commit edd3455d5161792d87ddc8eadc0ecbad5532b284
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:40:19 2020 +0000
Fixed LoD z depth, added sea level offset
commit b9b06744620114dd5556e73f64fa93c145503a7c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:27:43 2020 +0000
Better LoD smoothing
commit a1aee931e790431560cd2d953ad61d9497072afd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Feb 21 14:52:17 2020 +0100
Adding shadows.
commit 2400786c13dd891c131ed86d48d05df516a8a778
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 13:48:40 2020 +0000
Use world map as LoD source
commit dbf650f504a4c25fbbc2096ac3616c736bf52d23
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Jan 20 00:48:14 2020 +0000
Better clouds at distance
commit 5e6f81b86cdb9730b9b056877b19257075fd5fa8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Jan 19 23:59:02 2020 +0000
sync
commit 745e7540ddb000cc645f612767b337c2ddc3f7c0
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 12:40:48 2019 +0000
Improved cloud falloff mist, faster noise sampling
commit f6a200d0cb866196ba57697466755f9e0c7ea5d8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 10:09:00 2019 +0000
Improved long-range depth precision, removed unnecessary LoD polygons
commit 63d1b2bb2292898d59fb4f4e502201103dfeb86f
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 20:57:46 2019 +0000
Working LoD shader
commit f13d98ee3e58f881e8b978861a67663b59ed91ec
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 11:03:40 2019 +0000
LoD first attempt (stack overflow issue)
2020-08-20 18:34:59 +00:00
|
|
|
|
let rivers = get_rivers(
|
|
|
|
|
map_size_lg,
|
|
|
|
|
continent_scale_hack,
|
|
|
|
|
&water_alt_pos,
|
|
|
|
|
&water_alt,
|
|
|
|
|
&dh,
|
|
|
|
|
&indirection,
|
|
|
|
|
&flux_rivers,
|
|
|
|
|
);
|
2019-10-16 11:39:41 +00:00
|
|
|
|
|
|
|
|
|
let water_alt = indirection
|
|
|
|
|
.par_iter()
|
|
|
|
|
.enumerate()
|
|
|
|
|
.map(|(chunk_idx, &indirection_idx)| {
|
|
|
|
|
// Find the lake this point is flowing into.
|
|
|
|
|
let lake_idx = if indirection_idx < 0 {
|
|
|
|
|
chunk_idx
|
|
|
|
|
} else {
|
|
|
|
|
indirection_idx as usize
|
|
|
|
|
};
|
2020-01-22 14:31:10 +00:00
|
|
|
|
if dh[lake_idx] < 0 {
|
2020-02-01 20:39:39 +00:00
|
|
|
|
// This is either a boundary node (dh[chunk_idx] == -2, i.e. water is at sea
|
|
|
|
|
// level) or part of a lake that flows directly into the
|
|
|
|
|
// ocean. In the former case, water is at sea level so we
|
|
|
|
|
// just return 0.0. In the latter case, the lake bottom must
|
|
|
|
|
// have been a boundary node in the first place--meaning this node flows
|
|
|
|
|
// directly into the ocean. In that case, its lake bottom
|
|
|
|
|
// is ocean, meaning its water is also at sea level. Thus,
|
|
|
|
|
// we return 0.0 in both cases.
|
2019-10-16 11:39:41 +00:00
|
|
|
|
0.0
|
|
|
|
|
} else {
|
|
|
|
|
// This is not flowing into the ocean, so we can use the existing water_alt.
|
2020-01-11 21:05:22 +00:00
|
|
|
|
water_alt[chunk_idx] as f32
|
2019-10-16 11:39:41 +00:00
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
.collect::<Vec<_>>()
|
|
|
|
|
.into_boxed_slice();
|
|
|
|
|
|
|
|
|
|
let is_underwater = |chunk_idx: usize| match rivers[chunk_idx].river_kind {
|
|
|
|
|
Some(RiverKind::Ocean) | Some(RiverKind::Lake { .. }) => true,
|
|
|
|
|
Some(RiverKind::River { .. }) => false, // TODO: inspect width
|
|
|
|
|
None => false,
|
|
|
|
|
};
|
|
|
|
|
|
2020-02-01 20:39:39 +00:00
|
|
|
|
// Check whether any tiles around this tile are not water (since Lerp will
|
|
|
|
|
// ensure that they are included).
|
2019-10-16 11:39:41 +00:00
|
|
|
|
let pure_water = |posi: usize| {
|
(See sharp/lod-history) LOD, shadows, greedy meshing, new lighting, perf
---
Pretty much a Veloren fork at this point. Here's a high level overview of the changes (will be added to CHANGELOG just before merge).
At a high level this MR incorporates roughly two groups of changes.
The first group consists of new game features: more flexible map sizes, level of detail terrain, shadow maps, and a new lighting
engine. This is "feature work" that (mostly) only adds new things to Veloren, and mostly shouldn't affect old stuff.
The second big group of changes are those addressing the fallout from all the new features. These include performance fixes of
various sorts: the addition of multiple graphics options and optimization of the cheap ones to avoid work, switching all voxel
models to use some variant of greedy meshing, switching over much of our CPU-side vector math to exploit SIMD instructions
(coinciding with a fork of `vek`), and a rewrite of how the UI handles text rendering (coinciding with updates to our fork
of `conrod`). Making Veloren's hardcoded colors appear correct under the new lighting engine also required considerably
changes (TODO: Fill in this section when it's complete).
The second category of changes often heavily touches code owned by other people, including frequently modified code "owned" by a
handful of people, so I recommend that this code be reviewed particularly carefully.
---
At a high level (each will be described in more detail below):
- The world map has been refactored.
- The world size is no longer hardcoded (@zesterer).
- The map generation code was made generic to allow using it outside of the `world` crate (@zesterer).
- On world creation, we now compute *horizon maps* (@zesterer).
- The way we pass the world from the server to the client has been updated (@xMAC94x).
- Artifacts related to image rotation were fixed (@imbris).
- Multiflow rivers were enabled (@zesterer).
- In the process of making changes related to the world map, various incidental fixes and optimizations were required.
- The new *level of detail* feature was added (@zesterer wrote part of this and has checked out the rest).
- A new LOD terrain rendering step was added to the pipeline.
- The LOD terrain quality was made configurable via a graphics setting.
- Horizon maps were used to cast shadows from LOD chunks on both LOD and non-LOD terrain.
- A "voxelization" effect was incorporated into rendered LOD terrain to make it blend better into the world.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Veloren's lighting has been completely overhauled (@zesterer has already checked most of this out).
- A semi-accurate index of refraction was assigned to our materials.
- A new, more realistic, physically based approach to lighting was used using the *Ashikhmin Shirley* BRDF.
- We emulate *atmospheric scattering* using equations designed for measuring solar panel light exposure.
- We attempt to compute *realistic light attenuation* in water using its real material properties.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Point and directional lights now cast realistic shadows, using *shadow mapping.* (@imbris, @zesterer, @Treeco, @YuriMomo)
- Point light shadow maps were added to the rendering pipeline, using geometry shaders and *seamless cube maps*.
- Directional light shadows were added to the rendering pipeline, using LISPSM together with disabling *depth clamping*.
- "Shadow-only" chunks and NPCs were added to prevent shadows from models behind you from disappearing.
- In the process of making changes related to shadow maps, various incidental fixes and optimizations were required.
The addition of shadow maps, LOD terrain, and the new lighting all led to significant performance degradation, on top of other
changes happening in master. Therefore, a large number of performance improvements were also needed:
- The graphics options were made much more flexible and configurable, and shaders were optimize.
- New options were provided for how to render lights and shadows (@Pfauenauge, @zesterer).
- Graphic setting storage and configuration were overhauled to make adding new features easier (@Pfauenauge, @imbris).
- Shaders were rewritten to utilize GLSL's preprocessor to avoid overhead (@zesterer, @YuriMomo).
- In the process of making changes related to providing additional rendering options, various incidental fixes and optimizations were required.
- Voxel model creation was switched to use *greedy meshing.*
- A new voxel meshing method, greedy meshing, was added (@imbris).
- Uses of the older meshing methods were migrated to use greedy meshing (@imbris, @jshipsey, @Pfauenauge).
- New restrictions were added to terrain, figure, and sprites to future proof them for further optimizations (@jshipsey, @Pfauenauge, @zesterer).
- Most positions are now relative to either chunk or player position for better precision (@imbris, @zesterer, @scottc).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- Animation and terrain math were switched to use SIMD where possible.
- Fixes were made to vek to make its SIMD feature usable for us (@zesterer, @imbris).
- The interface and types used in bone animation were changed in various ways (@jshipsey, @Snowram, @Pfauenauge).
- Redundant code generation for body animation is now partly taken care of by a macro (@jshipsey, @Snowram, @Pfauenauge).
- Animation code was modified to to use vek's SIMD representation where possible (@jshipsey, @Snowram, @Pfauenauge).
- Terrain meshing code and shadow map math were also modified to use vek's SIMD representation (@imbris).
- SIMD instruction generation was enabled (@YuriMomo, @jshipsey, @Snowram, @imbris, @Angelonfira, @xMAC94x).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- The way we cache glyphs was completely refactored, fixed, and optimized.
- Our fork of `conrod` was optimized in various ways (@imbris).
- Our fork of `conrod` now exposes whether a widget was updated during the current frame (@imbris).
- Our use of the glyph cache was rewritten for correctness (@imbris).
- A *text cache* was introduced that lets us skip remeshing glyphs that have not changed (@imbris).
- Various changes were made to reduce pressure on the glyph cache, with more planned (@imbris, @Pfauenauge).
- In the process of making changes related to the glyph cache, various incidental fixes and optimizations were required.
- Colors were changed to keep Veloren's look consistent with master.
- Some older tree models were brought back (@Pfauenauge).
- TODO(@Sharp): All hardcoded colors were extracted and made hotloadable.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Hardcoded colors were fixed to conform to Veloren's style.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Color models were fixed to conform to Veloren's style.
A detailed description of the involved changes follows.
---
- The world size is no longer hardcoded. All functions dependent on world size now take a `WorldSizeLg`, which holds the base 2 logarithm of each actual world dimension and is guaranteed to maintain certain properties (outlined in `common/src/terrain/map.rs`). Additionally, many utility functions that utilize the world size were moved into `common` as well (mostly `common/src/terrain/mod.rs`). Finally, the world map format was updated in order to store its size explicitly, with a migration path from the old format that should work whenever the old formatted map was a square (practically always). See `world/src/sim/mod.rs` for these changes.
- The map generation code was made generic to allow using it outside of the `world` crate. The parts of the map generating code that do not need to query the world were moved over to `common/src/terrain/map.rs`, allowing them to be used from the client without creating a dependency on `world`. The rest of it was turned into helper functions in `world/src/sim/map.rs`, which can be passed as closures to the generic map generation code to complete its construction. This also means that colors are now passed in separately to the map generation function. See <https://veloren.net/devblog-78/> for more details.
- On world creation, we now compute *horizon maps*. See the function in `world/src/sim/util.rs`.
Given a height map and a plane intersecting that height map, our horizon maps allow us to encode enough information to reconstruct shadows for each point on the height map using only the *horizon angle* (the angle at which the sun starts to become visible). As Veloren's sun only covers one plane, this is sufficient for encoding sun shadows for LOD terrain, by encoding two angles per chunk (one for each 90 degrees the sun covers). We can also use this for the moon, if we want, since the moon follows the same path. Additionally, we store the *height* of the furthest occluder, to try to make the shadows volumetric; so this means 4 bytes in total for each chunk.
Support for horizon maps has been merged into the map functionality in common as well.
- The way we pass the world from the server to the client has been updated. Rather than passing the prerendered map, we instead pass three maps with values for each chunk; one with the color information, a second with altitude information, and a third with horizon map information. We then reconstruct the map on the client, together with some additional information we send from the server (like the sea level and maximum height). See `common/src/msg/server.rs` for a detailed description of the format of `WorldMapMsg`, and `server/src/libr.rs` and `client/src/lib.rs` for details of the map construction and parsing.
- Artifacts related to image rotation were fixed. See the commit message for commit SHA `cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e` for a detailed explanation. This involved changes to shaders, the addition of a new type of graphic (also reflected in the graphic cache) that allows specifying a border color (which automatically makes the associated texture immutable), and some related fixes. I reproduce the first two paragraphs of the MR description as well:
```
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
```
- Multiflow rivers were enabled.
This does not really need to be part of this MR, and would be easy to revert, but since it seemed to provide a nice improvement it's currently packaged with it.
We already computed multiple outflows from each chunk for erosion purposes long before this MR.
However, we never modified river rendering to be able to handle this case (just a single downhill river flow is complex enough!) so this was not exposed when deciding which chunks were rivers.
Now that
- In the process of making changes related to the world map, various incidental fixes and optimizations were required. Some examples of fixes include making sure terrain is never lowered to below sea level (to make the shadow maps report correct values), fixing map altitudes and colors to understand things like cliffs and "block level" coloring (that doesn'te xist on the column level), and fixing a crashbug when rendering images for the UI where source pixels are strongly rectangular. Some examples of related performance fixes include avoiding allocating a fresh vector for all the maps (i.e. copying it over to change the format from `[u32; n]` to `DynamicImage` and then copying again to convert to `RgbaImage`), and instead using the `gfx::memory::slice` function to accomplish the same thing. These sorts of changes are spread all arond the code.
This includes the additon of a new scene, `voxygen/src/scene/lod.rs`, a new pipeline `voxygen/src/render/pipeline/lod_terrain.rs`, and new shaders `assets/vxygen/shaders/lod-terrain-vert.glsl` and `assets/vxygen/shaders/lod-terrain-frag.glsl`, as well as associated changes to the renderer in `voxygen/src/render/renderer.rs`.
The main idea behind our initial approach to LOD was to take the world data we now get from the server (altitude, color, and horizon mapping).
- Some previously computed values were turned into shader uniforms for better prediction on weak processors. (@zesterer)
- Calls to power or trig functions were removed or replaced with multiplications, where possible.
- After some deliberation
- To properly handle sprite "waving" for nearby sprites,
We explicitly designed the greedy meshing system with figures and sprites in mind.
In both cases, we want to be able to *efficiently* pack many different models into the same texture, especially in cases where we know
we will either not be removing any of the grouped-together from the models from the texture, or will remove all of them at once (so
they can be packed into some specific subtexture).
For sprites, since we know every model in advance and never intend to deallocate them, we currently pack them all as efficiently as
possible into one giant tetxure atlas. However, in the future we might opt to pack them slightly less efficiently in exchange for
shrinking the sprite vertex size.
For figures, we pack all the textures for each *model* into the same atlas.
is a global texture atlas used for every sprite, and for figures which is why we have the ability to mesh multiple
models to the same texture area (using the simple texture atlas allocator) without requiring intermediate vector allocations.
This is accomplished by delaying the time when we actually write the color and light data to the texture until *after* all the
model vertices have been meshed; then, we can just allocate the whole color/light array at once, making the atlas we use an
exact fit. In computer science-y terms, we accomplish this delay by, after we perform the initial greedy meshing (without
texture information), not continuing to create the texture data, but instead constructing a *continuation*--that is, a function
that, when called, will execute the rest of the computation. We push this continuation (which in Rust terms is a `FnOnce` closure
that takes the `ColLightsInfo` that it is supposed to write to as context) onto a
onto a vector
resizing. To allow for suspended writes to texture data, Rust pointed out to me that the continuation that would eventually write the color and light data to the texture atlas (the one that is shared by all models sharing the same greedy mesher) would have to *own* whatever data it mshed. Because we often generate the model data to mesh as a temporary in `voxygen/src/load.rs`, the
- Matrix multiplications in the shader were reduced for figure data (@zesterer).
- Vertex "waves" for fluid data were removed.
- Terrain "bending" near edges was removed.
- Scaling was fixed to make sure empty space was not introduced in a space previously occupied by a block. It was also changed to take ownership of its voxel data,
rather than sharing it, to let it be used with meshing.
- Rust's nightly version was bumped in order to use the `array_map` function, which lets us reuse more code between the simple map and `FigureModelCache`.
- PositionedGlyph::standalone.
---
I tried to cite sources in many cases[^realtime],[^lloyd],[^lispsm],[^pbrt],[^greedy],[^tjunctions]
where I needed features from elsewhere but I am particularly grateful for the following resources,
esepcially where they have accompanying source code. I linked all of them that are accessible to the public (those that are not were
obtained through legal means).
[^realtime]: Eisemann, Elmar, Michael Schwarz, Ulf Assarsson, Michael Wimmer. Real-Time Shadows. A K Peters/CRC Press (T&F), 20160419.
[^lloyd]: Lloyd,B. 2007. [Logarithmic perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). PhD thesis, University of North Carolina.
[^lispsm]: Wimmer, M., Scherzer, D., and Purgathofer, W. 2004. [Light space perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). In Proceedings of Eurographics Symposium on Rendering 2004, pp. 143– 152.
[^pbrt]: Pharr, Matt, et al. [http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf](Physically Based Rendering: From Theory to Implementation). Third edition, Morgan Kaufmann Publishers/Elsevier, 2017.
[^greedy]: mikolalysenko. “Meshing in a Minecraft Game.” 0 FPS, 30 June 2012, <https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/>.
[^tjunctions]: blackflux. “Meshing in Voxel Engines – Part 1.” Blackflux.Com, 23 Feb. 2014, <https://blackflux.wordpress.com/2014/02/23/meshing-in-voxel-engines-part-1/>.
I am also especially grateful to Khronos, Wikiepdia, and stackoverflow for answering many of my specific questions while writing the MR.
---
Squashed commit of the following:
commit 300505e7305a2fdac722a808ee8538323f215f39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 18:46:25 2020 +0200
Fixing cargo doc and typo in CHANGELOG.
commit ec0aeb18e8499d7d84ef818331b4b65c3d76cea6
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 15:38:50 2020 +0200
Hopefully final commit for the LOD branch.
commit 5e8ea0b1eaac02903a02feb2eb038d195de4872f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 10:14:26 2020 +0200
Falling back to power as stopgap.
commit e44a1cbf46504ee9931a01bdc9033e145500d557
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 09:25:41 2020 +0200
Address imbris feedback.
Temporarily disables shiny water, lowers max VD.
These restrictions will be lifted soon after merging.
commit 561e25778a108ac3712f5ec2ce3a51234c4430d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 08:31:13 2020 +0200
Tweaking shaders a bit.
commit 7d19259078ce0dd7b3742ad7d0cb3fab3ece3fdc
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:59:43 2020 +0200
Fix view example as well.
commit 051cd4934e0fad2c0b15db4380a4189fa318679f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:29:06 2020 +0200
Fix meshing benchmark.
commit c95e07db3b4dcca285678985e65e31b927cb1c61
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 05:46:22 2020 +0200
Address MR feedback, fix scene clouds.
commit 1bfb816cabdb3ffc1e507a009c2d98696b4b573a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:39:36 2020 +0200
Incorporating Pfau's figure color changes.
New eyes and new humanoid colors.
commit 3f9b89a3ac7b3356b1dba0d1a8f6541357f81469
Merge: e2f5162e4 62c53963a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:29:41 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit e2f5162e4f96f4124aa43488f7245d341b3dcfd4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:28:38 2020 +0200
World colors are all hotloadable.
They live in assets/world/style/colors.ron.
Only a small handful of hardcoed colors remain in World; they are either
part of the map, or difficult to disentangle from the rest of the
computation. Comments are made where appropriate.
commit 62c53963abe1975009d34a8f9515a355bef24f31
Author: Marcel Märtens <marcel.cochem@googlemail.com>
Date: Wed Aug 19 15:59:00 2020 +0200
replace pretty_env_logger with tracing
commit 5b1625f99d9586fe80e2232f583ec5af9f953099
Merge: d71003acd 4942b5b39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:15:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit d71003acdabeff970b3928e97c26af6847b5b78e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:14:34 2020 +0200
Hotloading colors, part 1: colors in common.
Currently, this just entails humanoid colors. There are only three
colors not handled; the light emitter colors in
common/src/comp/inventory/item/tool.rs. These don't seem important
enough to me to warrant making hotloadable, at least not right now, but
if it's needed later we can always add them to the file.
commit 63b5e0e553eb2ea49276f192a6fc7dd65254270d
Merge: c32b337a4 6d2c4b9c1
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 13:05:37 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c32b337a46e10d9de473d178a94a3ccd61c39bb3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:52:04 2020 +0200
Fixing LOD grid, for real.
commit a166ae0360395387e09fb35a1f84210c2ce5ec24
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:28:05 2020 +0200
Addressing imbris's initial feedback.
Fixes two minor bugs: explosion particles were no longer spawning
randomly, and LOD grids were not perfectly even.
commit 4cbad004f44060994252dd3d38647a14a589712f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:27:58 2020 +0200
Bumping nightly per request.
commit 548680276aac77c25d43d16b5622f847d474dbef
Merge: acc098604 8f8b20c91
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:26:06 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit acc0986040589a3492f88a740bc3c3fc693b26d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:28:32 2020 +0200
Lower resolution due to lying drivers.
commit d3b878de2a52c358d2944a6bbd0555dad7fbdb10
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:15:38 2020 +0200
Fix issues msh encountered with Intel 4600.
commit 10245e0c1b0cb6fae10d86409435364edc6102ef
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 21:15:02 2020 +0200
Merge more models into one mesh than we did previously.
commit 3155c31e663c52ae5c3a53d5fb5665892a1a498a
Merge: 7204cc8a7 3c199280e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:35:22 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7204cc8a7a4f74a30306bd205d9834fee4bb944f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:34:43 2020 +0200
Fix not yet done NPC animations.
This forces them all to be the idle animation if not specified.
This fixes issues where you'd have giant NPCs in water.
commit bc83360f2a08918f19d417b5f772e1ff554dba08
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 19:36:37 2020 +0200
Try to fix some bugs:
- Z fighting with LOD terrain and water.
- Audio SFX not playing.
commit 1fd104aa603bf3781b6526a5cada46aeca3049dd
Merge: 862df3c99 7c2c392a3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 12:02:31 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 862df3c9976c4da9bd7cfd784f1a85973127968a
Merge: 0a4218ed9 75c1d4401
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 05:52:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0a4218ed9d541a2b34c133351bea38a99ddf4ea7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 22:27:14 2020 +0200
Fix particle depth.
commit f51dfdeb442d0dd5243dd2f344fa4be295bd0875
Merge: c6251a956 5e6dc0471
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:19:04 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit c6251a956ad376400dca5c23420cf8d213dc8fdf
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:15:46 2020 +0200
Cache figures more intelligently.
Cache figures for longer, and don't cache character states for the
player except where they actually affect the rendered model.
commit 0ed801d5404982c6fb63b1eaa4567d908b294c9d
Merge: c11b9bdf0 eea64f78f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 16:32:24 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c11b9bdf0a53bf9884d2f5a48fec9b01d582df1a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 11:47:15 2020 +0200
Remove unneeded Clippy annotation.
commit 16aa9ef40af56d69289d00aafb3deadfb8bd4f35
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 8 00:53:02 2020 +0200
Fix hotloading and Clippy.
commit 3dc973e0be5b758da1e9805eb764ad401374cd0c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 23:50:27 2020 +0200
Major speedups with SIMD.
commit fba64a7d93d5a96077ce87287bbce6ab9b7fbcae
Merge: 76429d00e d1e10b178
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:19 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 76429d00eea00d212fbd672a84ee91e75b19b938
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:10 2020 +0200
Add clippy.toml.
commit c79f512f84dbb83cb82b7954db68ff241dfd8e41
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 11:55:20 2020 +0200
Fix all clippy issues, clean up Rust code.
commit 6f90e010b3fbefb53b0d632e819931350015b6b8
Merge: 77a8c7c26 5929cfa5c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:30 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 77a8c7c267d3f44a1a62bd6b2274359973c5e4d4
Merge: b44e44232 44febaabd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:10 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 5929cfa5c713aa392110bbb62407f76caf53c3df
Author: jshipsey <jshipsey18@gmail.com>
Date: Thu Aug 6 20:47:27 2020 -0400
fixed in-hand arrow bug
commit b44e442325d828f1cd564d66908f89d09e80474b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 6 13:40:35 2020 +0200
Miscellaneous performance improvements.
commit be37acf287c1360d8085862526ac3365ffd1d768
Merge: 125d7fc6c c11876547
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 05:49:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 125d7fc6c4dcd8c8c5f27b8268a4d64f409f3644
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 04:55:31 2020 +0200
Abstract over simd vs. repr_c vectors.
Also some minor improvements to Event size.
commit d4d4956e9252e1241ce110b2aa85076c6b1e2a23
Merge: 5f3b7294a aced5f979
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:56:54 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 5f3b7294af1f8533edc2620b58863c248e2b07af
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:43:52 2020 +0200
Fix formatting issues I missed before.
commit a428a3ebba70dcab63dd0f8cd983120c90617271
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:41:51 2020 +0200
Fix clippy warnings, part 1.
There aer still a bunch of type too complex and
function takes too many arguments warnings that I'll fix later
(or ignore, since in the one case I did fix a function takes too
many arguments warning I think it made the code *less* readable).
commit ba54307540ed8a937ac08209730284fc653af85b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 30 13:22:42 2020 +0200
Fix light animations so they are removed when the light turns off.
commit 7e0f4bcbf0f4717145d8beac40d52e3acebbe2aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 21:10:20 2020 +0200
Fix crash in edge case for pixel art.
commit 56da06f7a351e2b949e9b014a90b974d511a0924
Merge: cf74d55f2 9f53a4a19
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:56:52 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:29:52 2020 +0200
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
The first concern was addressed by fixing the dimensions of the map
images drawn from the UI (so that we always use a square source
rectangle, rather than a rectangular one according to the dimensions of
the map). We also fixed the way rotation was done in the fragment
shader for north-facing sources to make it properly handle aspect ratio
(this was already done for north-facing targets). Together, these fix
rendering issues peculiar to rectangular maps.
The second and third concerns were jointly addressed by adding an
optional border color to every 2D image drawn by the UI. This turns
out not to waste extra space even though we hold a full f32 color
(to avoid an extra dependency on gfx's PackedColor), since voxel
images already take up more space than Optiion<[f32; 4]> requires.
This is then implemented automatically using the "border color"
wrapping method in the attached sampler.
Since this is implemented in graphics hardware, it only works (at
least naively) if the actual image bounds match the texture bounds.
Therefore, we altered the way the graphics cache stores images
with a border color to guarantee that they are always in their own
texture, whose size exactly matches their extent. Since the easiest
currently exposed way to set a border color is to do so for an
immutable texture, we went a bit further and added a new "immutable"
texture storage type used for these cases; currently, it is always
and automatically used only when there is a specified border color,
but in theory there's no reason we couldn't provide immutable-only
images that use the default wrapping mdoe (though clamp to border
is admittedly not a great default).
To fix the maps case specifically, we set the border color to a
translucent version of the ocean border color. This may need
tweaking going forward, which shouldn't be hard.
As part of this process, we had to modify graphics replacement to
make sure immutable images are *removed* when invalidated, rather
than just having a validity flag unset (this is normally done by
the UI to try to reuse allocations in place if images are updated
in benign ways, since the texture atlases used for Ui do not
support deallocation; currently this is only used for item images,
so there should be no overlap with immutable image replacement,
so this was purely precautionary).
Since we were already touching the relevant code, we also updated
the image dependency to a newer version that provides more ways
to avoid allocations, and made a few other changes that should
hopefully eliminate redundant most of the intermediate buffer
allocations we were performing for what should be zero-cost
conversions. This may slightly improve performance in some
cases.
commit ad18ce939940a8c697270f6e9b94db9942fd8295
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 13:21:09 2020 +0200
Fix continent scale hack.
commit 36b1cb074f5b195aebd7dbbc3da7f0246a1a18ec
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 12:11:40 2020 +0200
Enable loading different sized maps without a recompile.
We may want to tweak the effects of the continent_scale_hack.
commit 13b6d4d534cc4814b7cb3294ca41bbfea0a6b186
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 10:55:48 2020 +0200
Removing WORLD_SIZE, part 1.
Erased almost every instance of WORLD_SIZE and replaced it with a local
power of two, map_size_lg (which respects certain invariants; see
common/src/terrain/map.rs for more details about MapSizeLg). This also
means we can avoid a dependency on the world crate from client, as
desired.
Now that the rest of the code is not expecting a fixed WORLD_SIZE, the
next step is to arrange for maps to store their world size, and to use
that world size as a basis prior to loading the map (as well, probably,
as prior to configuring some of the noise functions).
commit 30b1d2c6428230a9eaa0d749cdcbbd6f1cbccd78
Merge: 7d56ba31b 1377b369f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:58 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 7d56ba31b445441461b28a07fc495d7d4f047c17
Merge: 2101113b4 598f14b25
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 1377b369f6db2258e910d467a5740f31789e3ded
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sun Jul 19 23:25:38 2020 +0200
more saturated pumpkins
commit ae8d50527f93bb0616c2ad46ce4dacb63bc37c6d
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sat Jul 18 20:29:56 2020 +0200
acacia models
commit 2101113b467e691de787392d7f20f1745f5637bd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 18 18:55:25 2020 +0200
Higher detail LOD.
commit add2cfae04b4385fa5590e11e2bd5229d9dee0aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 16 01:57:39 2020 +0200
Revert some irrelevant stuff.
commit 2e2ab3dc1eaa59a4aef7f8d34a53d8aae4c8553a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 15 13:30:49 2020 +0200
Fixing various things about shadows.
* Correcting optimal LISPSM parameter.
* Figure shadows are cast when they're not visible.
* Chunk shadows stay cast until you look away.
* Seamless cubemaps for point lights.
* Etc.
commit 6c31e6b56217274285b597af297036691ea5d897
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 19:50:26 2020 +0200
Fix shadow creation.
commit 6332cbe006115ae205597529cd8bbccd146c2cca
Merge: be438657c 930e0028b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:47:00 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit be438657c33d7b5bfb0a9582c3ed3fd366637323
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:28:08 2020 +0200
Tweaks to shadows.
Added shadow map resolution configuration, added seamless cubemaps,
documented all existing rendering options, and fixed a few Clippy
errors.
commit 23b4058906013c7d2a40c286e20e32c5fbd897ed
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 10:11:19 2020 +0200
Fix moon, use nonlinear noise for terrain.
Note that the latter has a bit of performance cost.
commit 7fbe5cbfbb9dc29607957b8e62f432a4deed193d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:23:02 2020 +0200
Address lies about max texture size.
commit bcfc62b5e13a1cdd83f57535fde4694720bebfd9
Merge: 75e3626a7 18a08e8fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:22:08 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 75e3626a785919f43fdcf2127c2b10e3e4df2f9f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:21:52 2020 +0200
OpenGL 3.3 minimum.
commit 18a08e8fe2739f02af99a5d2cb4e7c38c49e858b
Author: Monty Marz <m.marzouq@gmx.de>
Date: Tue Jul 7 23:57:52 2020 +0200
settings localization
commit 90c5d1ca3620092bc3ae10b2211489eb1cf6f5e8
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 21:11:48 2020 +0200
Lower near distance.
commit 0e66f02b25aaddaa2dfddbbc89cd67de54a9a7b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 20:09:01 2020 +0200
All sprites sway in the wind now.
commit db1401a6910bf42dcf502462c90038752ff5fbdb
Merge: 69e508d8c e8b4b29d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 19:34:17 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 69e508d8c94d8973033817ca86f357e466fc7c4d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 18:41:37 2020 +0200
Make it easy to switch to SIMD for math.
commit ffe0f5928c7a7e87d00cb5426b3b1d831d7e02fd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 21:21:12 2020 +0200
Fix some issues with underwater rendering.
commit bfda6da42f38fd02c31ee92c81ab785a3e50c2a0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 19:17:59 2020 +0200
Fix some minor display issues.
commit 0ed752e087968cf901301884aaeae698e32ef8a5
Merge: ccc6a06a8 518edcb85
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:14:21 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit ccc6a06a8d4504d6b9f7af7905a414d2ee06ab76
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:04:34 2020 +0200
Some minor changes.
commit 4e020246702889269efe1a191788992164c508d6
Merge: 50a64d927 e05c9267a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 16:17:40 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 50a64d927e6c4f4b0e4688e4cbfca694bc3f922a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 13:07:03 2020 +0200
Fix far plane.
commit 7dd06da34cae8f9ea3b6c889fe965181f3fd3949
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:25:35 2020 +0200
Add shadows.glsl.
commit 618a18c998778bf871b905a74657440fcc384c80
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:10:22 2020 +0200
Adding shadows, greedy meshing, and more.
commit eaea83fe6a5cb1cb0ba8beef888183c718258496
Merge: 267018495 2f89b863e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 22:47:07 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 2670184954a13e4a9e7a4e35ba79aac0c5fac2f7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 21:20:01 2020 +0200
Make civsim and sites deterministic.
For anything in worldgen where you use a HashMap, *please* think
carefully about which hasher you are going to use! This is
especially true if (for some reason) you are depending on hashmap
iteration order remaining stable for some aspect of worldgen.
commit f8376fd5dc72b4a9c2f51a6b4570d59c8b8e9343
Merge: 654f7e049 cdee191dd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 17:53:57 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 654f7e049258d9da27c09608bbe6a46ffa8787e5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed May 20 21:22:30 2020 +0200
Correct backface culling.
commit 560501df05ca725409b0f2e4eb31bdfdc15fd0c7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue May 19 17:22:06 2020 +0200
Greedy messhing for shadows.
commit a4d87e1875ca543436e6bbbeb20348facc5a52d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun May 17 05:59:00 2020 +0200
Shadow maps work for lantern.
commit 243d0837b8a3b08172c9a3c348d964d7ddc2a0a8
Merge: 04382dc28 71dd520cd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:53:13 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 04382dc28632b6c66e8821f6870c0daaa1c1901a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:22:17 2020 +0200
WIP: better graphics config, better LOD, shadow maps.
commit 22ddbad3eb32bfa70f0932176022208fe67ded81
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 18:54:09 2020 +0200
Minor shader fixes.
commit 746a10e8d01ac235f994b0cde78fa48998602a1f
Merge: 0f4a0e763 40ab94673
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 04:02:09 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0f4a0e763db3afbdc4fb0558611f38326ca87151
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 23:03:24 2020 +0200
Switch back to pop-in terrain.
commit dd74fa7e4a53667b38811d7aec58d7f6a68889bb
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 22:58:55 2020 +0200
LOD shading closer to voxel shading.
commit ef67bd58ba0bdaf622b078892d768263b6cba268
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 28 20:49:03 2020 +0200
Experimental underwater lighting.
commit 2c5ad9d07605e80d5fd5679dd3a5d70c605b86a9
Merge: 748279835 303967a6f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 22:35:24 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7482798354eda18c8207950080fc24d443a369de
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 21:59:55 2020 +0200
Replace discard in figure-frag.
commit d83b4ae69be4912f69bf7835f509c68a1c7770a4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:45:57 2020 +0200
Fix sprite lighting, HDR from focus_pos.
commit 0594238004f116274905fa0ed7c2b6c417ed1d29
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:14:10 2020 +0200
Proper HDR from point lights.
commit 48c93d2b41ce5743103d18e76cc228f5ac766492
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 14:01:43 2020 +0200
Brighter ambiance, darker LOD shadows.
commit e0452e895ccfa8a43f368cae3b8b8aedc24dad93
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 13:13:23 2020 +0200
More proper HDR.
commit 4c6da3ed16cfeebb455e40da5f557b4af9a499d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 00:13:10 2020 +0200
Trying LOD noise.
commit 682a3d74c85df5503ffe1fc1cc891bce789df1ad
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 23:11:08 2020 +0200
Fix LOD heights in towns.
commit cc39e5734e8b18f9077bf42e66337c1319dd6b6e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 21:01:23 2020 +0200
More LOD fixes.
commit 8116b21c2e51c836e77894e309ac273caf2917b3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:54:43 2020 +0200
I like this coloring.
commit bc2560ea90b36f4b46190005344232d993043ac3
Merge: 14effdd5d e690efe71
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:48:33 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 14effdd5db8747fcf3eb34f03b46b7792e92d1c5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:24:35 2020 +0200
Re-saturate.
commit 48a643955d4435b78179acba0beb4a979905cc31
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:23:57 2020 +0200
Various fixes.
commit f7b497a0c25f4ad4682c71dd1ed6f608052feb9b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 03:22:49 2020 +0200
Render figures again.
commit 44e4aad48deba8266b9f8bdfd3db096b381f5327
Merge: e6f0a5a98 9ec319a18
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 02:01:04 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit e6f0a5a981a82533ba188fff0a54ce98577bb152
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 24 16:12:20 2020 +0200
Add atmospheric scattering.
commit f2953087f691a8edbc001cb98ebf5059fc6f8ac0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 23 00:01:20 2020 +0200
Fix shadowing for specular reflections.
commit ddd4a67a9799b8d08c7dc0c2bec90621c2bed0e3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Apr 22 22:56:12 2020 +0200
HDR fixes.
commit 1015e60deef3c447381996277df7496707a63bd0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 21 18:25:19 2020 +0200
More lighting changes.
commit 80c264abd111fb237e57843efcb5c071d4f84613
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 13 00:29:59 2020 +0200
Lighting experiments.
commit 8414987e589dd5102bad89762a3adaccc0bfe957
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 9 02:38:40 2020 +0200
WIP -- lighting changes and soft shadows.
commit 9cd2b3fb0d6b49776c6dfe463e4169637250b11a
Merge: c7ea687eb 8b149ad11
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:29 2020 +0200
Merge branch 'sharp/new-lighting' into sharp/small-fixes
commit c7ea687ebbc5aace1b455f134a5bf49ce2c7434a
Merge: 476441531 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:02 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 8b149ad11ad4bb75018fcf9519baec27d1c95951
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:32:39 2020 +0200
Trying out a new lighting model.
commit b0ac9f36f755dd06f7c17c46150568064790864f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 07:56:11 2020 +0200
Use bicubic interpolation for terrain.
commit f6fc9307a121514b614bc50ef8eb055953e7da8a
Merge: 33140a295 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 05:01:41 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 4764415312aae6e9ac2d00e86e84577cb958f1ab
Merge: ed2d0111d 13388ee6a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 04:54:48 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 13388ee6a42943f3f79a9cb488346cef18e272fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 20:30:08 2020 +0200
Various fixes (to coloring and to soft shadows).
commit fbd084a94a067082a87cd6d28b82054709bc9265
Merge: 5a089863b 4fdf6896a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 18:50:38 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/map-colors
commit ed2d0111d994262ae836d84d1fe5a45e4de72a0b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 06:49:27 2020 +0200
Combining colors and LOD.
commit 88342640c6b835114d01c797b89fdede3b0a2108
Merge: 33140a295 5a089863b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:49:20 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 33140a2951b8212725f42c758b277aaec4d888f7
Merge: 4c65a5aed f34d4b379
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:36:21 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 5a089863beb01d4794bbe3580ada47b278715ea2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 03:17:49 2020 +0200
Making maps brighter.
This is probably not the right way to do it, but oh well!
commit 32b2c99109dd486aa922886081068f9c550c83f2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 02:46:36 2020 +0200
Horizon mapping and "layered" map generation.
Horizon mapping is a method of shadow mapping specific to height maps.
It can handle any angle between 0 and 90 degrees from the ground, as
long as know the horizontal direction in advance, by remembering only a
single angle (the "horizon angle" of the shadow map). More is explained
in common/src/msg/server.rs. We also remember the approximate height of
the largest occluder, to try to be able to generate soft shadows and
create a vertical position where the shadows can't go higher.
Additionally, map generation has been reworked. Instead of computing
everything from explicit samples, we pass in sampling functions that
return exactly what the map generator needs. This allows us to cleanly
separate the way we sample things like altitudes and colors from the map
generation process. We exploit this to generate maps *partially* on the
server (with colors and rivers, but not shading). We can then send the
partially completed map to the client, which can combine it with shadow
information to generate the final map. This is useful for two reasons:
first, it makes sure the client can apply shadow information by itself,
and second, it lets us pass the unshaded map for use with level of
detail functionality.
For similar reasons, river generation is split
out into its own layer, but for now we opt to still generate rivers on
the server (since the river wire format is more complicated to compress
and may require some extra work to make sure we have enough precision to
draw rivers well enough for LoD).
Finally, the mostly ad-hoc lighting we were performing has been (mostly)
replaced with explicit Phong reflection shading (including specular
highlights). Regularizing this seems useful and helps clarify the
"meaning" of the various light intensities, and helps us keep a more
physically plausible basis. However, its interaction with soft shadows
is still imperfect, and it's not yet clear to me what we need to do to
turn this into something useful for LoD.
commit f8926a5737ddc51f3d585c651a64c43677aae0f4
Merge: a1aee931e 875ae6ced
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Mar 13 13:32:42 2020 +0100
Merge remote-tracking branch 'origin/master' into sharp/map-colors
commit 4c65a5aed353b119aea65a2aaeb94549b67beb42
Author: Treeco <5021038-Treeco@users.noreply.gitlab.com>
Date: Mon Feb 24 16:48:05 2020 +0000
Made LOD setting slider exponential
commit 2fa7b2d20d7233dc8bfd64f9f7f54617575248f1
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 17:49:53 2020 +0000
Added mist to LoD
commit aab059a450b5f635777129ff82cc15b662965c3c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 15:14:06 2020 +0000
Added LoD slider
commit 779c36b538121c5ade3633ae5cb67bb14c8c3877
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:54:55 2020 +0000
Reduced cost of vertex pushing
commit 9fea150473906b166365b738ebcea07c697daf3d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:38:53 2020 +0000
Fixed maths, improved LoD resolution
commit 5481df38fea5bf183ff376a3337179cfaa5233dc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 11:22:50 2020 +0000
Dynamically relocate LoD vertices to enhance details
commit a3e36a50ababd615da7db1b26158c7906a5def01
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 18:13:51 2020 +0000
Simpler terrain spiral rendering
commit 255f450ae9ac8763db4bede075fb409161ed57cc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:53:17 2020 +0000
Better LoD precision
commit 3d027aebe812a5b8658a4eb8123dc9f61b3776d2
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:04:03 2020 +0000
Better falloff
commit be775c9484b457b2c0b1a494aec03392d0c70e76
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 15:30:45 2020 +0000
Applied good ideas from experimental branch
commit 58587b68545a23c5c04ab4574a4b94b3bc982246
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 16:15:13 2020 +0000
Minor fixes to LoD merging
commit 7b42aebd709c14df2db766aad61d9280ad24d84d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 15:04:44 2020 +0000
Capped LoD dragging
commit 8aafc559f87124e1ea5ca6e3ddc2aa0c242d793c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:54:37 2020 +0000
Better blending between LoD and terrain border
commit edd3455d5161792d87ddc8eadc0ecbad5532b284
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:40:19 2020 +0000
Fixed LoD z depth, added sea level offset
commit b9b06744620114dd5556e73f64fa93c145503a7c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:27:43 2020 +0000
Better LoD smoothing
commit a1aee931e790431560cd2d953ad61d9497072afd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Feb 21 14:52:17 2020 +0100
Adding shadows.
commit 2400786c13dd891c131ed86d48d05df516a8a778
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 13:48:40 2020 +0000
Use world map as LoD source
commit dbf650f504a4c25fbbc2096ac3616c736bf52d23
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Jan 20 00:48:14 2020 +0000
Better clouds at distance
commit 5e6f81b86cdb9730b9b056877b19257075fd5fa8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Jan 19 23:59:02 2020 +0000
sync
commit 745e7540ddb000cc645f612767b337c2ddc3f7c0
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 12:40:48 2019 +0000
Improved cloud falloff mist, faster noise sampling
commit f6a200d0cb866196ba57697466755f9e0c7ea5d8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 10:09:00 2019 +0000
Improved long-range depth precision, removed unnecessary LoD polygons
commit 63d1b2bb2292898d59fb4f4e502201103dfeb86f
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 20:57:46 2019 +0000
Working LoD shader
commit f13d98ee3e58f881e8b978861a67663b59ed91ec
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 11:03:40 2019 +0000
LoD first attempt (stack overflow issue)
2020-08-20 18:34:59 +00:00
|
|
|
|
let pos = uniform_idx_as_vec2(map_size_lg, posi);
|
2020-01-12 14:45:20 +00:00
|
|
|
|
for x in pos.x - 1..(pos.x + 1) + 1 {
|
|
|
|
|
for y in pos.y - 1..(pos.y + 1) + 1 {
|
(See sharp/lod-history) LOD, shadows, greedy meshing, new lighting, perf
---
Pretty much a Veloren fork at this point. Here's a high level overview of the changes (will be added to CHANGELOG just before merge).
At a high level this MR incorporates roughly two groups of changes.
The first group consists of new game features: more flexible map sizes, level of detail terrain, shadow maps, and a new lighting
engine. This is "feature work" that (mostly) only adds new things to Veloren, and mostly shouldn't affect old stuff.
The second big group of changes are those addressing the fallout from all the new features. These include performance fixes of
various sorts: the addition of multiple graphics options and optimization of the cheap ones to avoid work, switching all voxel
models to use some variant of greedy meshing, switching over much of our CPU-side vector math to exploit SIMD instructions
(coinciding with a fork of `vek`), and a rewrite of how the UI handles text rendering (coinciding with updates to our fork
of `conrod`). Making Veloren's hardcoded colors appear correct under the new lighting engine also required considerably
changes (TODO: Fill in this section when it's complete).
The second category of changes often heavily touches code owned by other people, including frequently modified code "owned" by a
handful of people, so I recommend that this code be reviewed particularly carefully.
---
At a high level (each will be described in more detail below):
- The world map has been refactored.
- The world size is no longer hardcoded (@zesterer).
- The map generation code was made generic to allow using it outside of the `world` crate (@zesterer).
- On world creation, we now compute *horizon maps* (@zesterer).
- The way we pass the world from the server to the client has been updated (@xMAC94x).
- Artifacts related to image rotation were fixed (@imbris).
- Multiflow rivers were enabled (@zesterer).
- In the process of making changes related to the world map, various incidental fixes and optimizations were required.
- The new *level of detail* feature was added (@zesterer wrote part of this and has checked out the rest).
- A new LOD terrain rendering step was added to the pipeline.
- The LOD terrain quality was made configurable via a graphics setting.
- Horizon maps were used to cast shadows from LOD chunks on both LOD and non-LOD terrain.
- A "voxelization" effect was incorporated into rendered LOD terrain to make it blend better into the world.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Veloren's lighting has been completely overhauled (@zesterer has already checked most of this out).
- A semi-accurate index of refraction was assigned to our materials.
- A new, more realistic, physically based approach to lighting was used using the *Ashikhmin Shirley* BRDF.
- We emulate *atmospheric scattering* using equations designed for measuring solar panel light exposure.
- We attempt to compute *realistic light attenuation* in water using its real material properties.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Point and directional lights now cast realistic shadows, using *shadow mapping.* (@imbris, @zesterer, @Treeco, @YuriMomo)
- Point light shadow maps were added to the rendering pipeline, using geometry shaders and *seamless cube maps*.
- Directional light shadows were added to the rendering pipeline, using LISPSM together with disabling *depth clamping*.
- "Shadow-only" chunks and NPCs were added to prevent shadows from models behind you from disappearing.
- In the process of making changes related to shadow maps, various incidental fixes and optimizations were required.
The addition of shadow maps, LOD terrain, and the new lighting all led to significant performance degradation, on top of other
changes happening in master. Therefore, a large number of performance improvements were also needed:
- The graphics options were made much more flexible and configurable, and shaders were optimize.
- New options were provided for how to render lights and shadows (@Pfauenauge, @zesterer).
- Graphic setting storage and configuration were overhauled to make adding new features easier (@Pfauenauge, @imbris).
- Shaders were rewritten to utilize GLSL's preprocessor to avoid overhead (@zesterer, @YuriMomo).
- In the process of making changes related to providing additional rendering options, various incidental fixes and optimizations were required.
- Voxel model creation was switched to use *greedy meshing.*
- A new voxel meshing method, greedy meshing, was added (@imbris).
- Uses of the older meshing methods were migrated to use greedy meshing (@imbris, @jshipsey, @Pfauenauge).
- New restrictions were added to terrain, figure, and sprites to future proof them for further optimizations (@jshipsey, @Pfauenauge, @zesterer).
- Most positions are now relative to either chunk or player position for better precision (@imbris, @zesterer, @scottc).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- Animation and terrain math were switched to use SIMD where possible.
- Fixes were made to vek to make its SIMD feature usable for us (@zesterer, @imbris).
- The interface and types used in bone animation were changed in various ways (@jshipsey, @Snowram, @Pfauenauge).
- Redundant code generation for body animation is now partly taken care of by a macro (@jshipsey, @Snowram, @Pfauenauge).
- Animation code was modified to to use vek's SIMD representation where possible (@jshipsey, @Snowram, @Pfauenauge).
- Terrain meshing code and shadow map math were also modified to use vek's SIMD representation (@imbris).
- SIMD instruction generation was enabled (@YuriMomo, @jshipsey, @Snowram, @imbris, @Angelonfira, @xMAC94x).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- The way we cache glyphs was completely refactored, fixed, and optimized.
- Our fork of `conrod` was optimized in various ways (@imbris).
- Our fork of `conrod` now exposes whether a widget was updated during the current frame (@imbris).
- Our use of the glyph cache was rewritten for correctness (@imbris).
- A *text cache* was introduced that lets us skip remeshing glyphs that have not changed (@imbris).
- Various changes were made to reduce pressure on the glyph cache, with more planned (@imbris, @Pfauenauge).
- In the process of making changes related to the glyph cache, various incidental fixes and optimizations were required.
- Colors were changed to keep Veloren's look consistent with master.
- Some older tree models were brought back (@Pfauenauge).
- TODO(@Sharp): All hardcoded colors were extracted and made hotloadable.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Hardcoded colors were fixed to conform to Veloren's style.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Color models were fixed to conform to Veloren's style.
A detailed description of the involved changes follows.
---
- The world size is no longer hardcoded. All functions dependent on world size now take a `WorldSizeLg`, which holds the base 2 logarithm of each actual world dimension and is guaranteed to maintain certain properties (outlined in `common/src/terrain/map.rs`). Additionally, many utility functions that utilize the world size were moved into `common` as well (mostly `common/src/terrain/mod.rs`). Finally, the world map format was updated in order to store its size explicitly, with a migration path from the old format that should work whenever the old formatted map was a square (practically always). See `world/src/sim/mod.rs` for these changes.
- The map generation code was made generic to allow using it outside of the `world` crate. The parts of the map generating code that do not need to query the world were moved over to `common/src/terrain/map.rs`, allowing them to be used from the client without creating a dependency on `world`. The rest of it was turned into helper functions in `world/src/sim/map.rs`, which can be passed as closures to the generic map generation code to complete its construction. This also means that colors are now passed in separately to the map generation function. See <https://veloren.net/devblog-78/> for more details.
- On world creation, we now compute *horizon maps*. See the function in `world/src/sim/util.rs`.
Given a height map and a plane intersecting that height map, our horizon maps allow us to encode enough information to reconstruct shadows for each point on the height map using only the *horizon angle* (the angle at which the sun starts to become visible). As Veloren's sun only covers one plane, this is sufficient for encoding sun shadows for LOD terrain, by encoding two angles per chunk (one for each 90 degrees the sun covers). We can also use this for the moon, if we want, since the moon follows the same path. Additionally, we store the *height* of the furthest occluder, to try to make the shadows volumetric; so this means 4 bytes in total for each chunk.
Support for horizon maps has been merged into the map functionality in common as well.
- The way we pass the world from the server to the client has been updated. Rather than passing the prerendered map, we instead pass three maps with values for each chunk; one with the color information, a second with altitude information, and a third with horizon map information. We then reconstruct the map on the client, together with some additional information we send from the server (like the sea level and maximum height). See `common/src/msg/server.rs` for a detailed description of the format of `WorldMapMsg`, and `server/src/libr.rs` and `client/src/lib.rs` for details of the map construction and parsing.
- Artifacts related to image rotation were fixed. See the commit message for commit SHA `cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e` for a detailed explanation. This involved changes to shaders, the addition of a new type of graphic (also reflected in the graphic cache) that allows specifying a border color (which automatically makes the associated texture immutable), and some related fixes. I reproduce the first two paragraphs of the MR description as well:
```
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
```
- Multiflow rivers were enabled.
This does not really need to be part of this MR, and would be easy to revert, but since it seemed to provide a nice improvement it's currently packaged with it.
We already computed multiple outflows from each chunk for erosion purposes long before this MR.
However, we never modified river rendering to be able to handle this case (just a single downhill river flow is complex enough!) so this was not exposed when deciding which chunks were rivers.
Now that
- In the process of making changes related to the world map, various incidental fixes and optimizations were required. Some examples of fixes include making sure terrain is never lowered to below sea level (to make the shadow maps report correct values), fixing map altitudes and colors to understand things like cliffs and "block level" coloring (that doesn'te xist on the column level), and fixing a crashbug when rendering images for the UI where source pixels are strongly rectangular. Some examples of related performance fixes include avoiding allocating a fresh vector for all the maps (i.e. copying it over to change the format from `[u32; n]` to `DynamicImage` and then copying again to convert to `RgbaImage`), and instead using the `gfx::memory::slice` function to accomplish the same thing. These sorts of changes are spread all arond the code.
This includes the additon of a new scene, `voxygen/src/scene/lod.rs`, a new pipeline `voxygen/src/render/pipeline/lod_terrain.rs`, and new shaders `assets/vxygen/shaders/lod-terrain-vert.glsl` and `assets/vxygen/shaders/lod-terrain-frag.glsl`, as well as associated changes to the renderer in `voxygen/src/render/renderer.rs`.
The main idea behind our initial approach to LOD was to take the world data we now get from the server (altitude, color, and horizon mapping).
- Some previously computed values were turned into shader uniforms for better prediction on weak processors. (@zesterer)
- Calls to power or trig functions were removed or replaced with multiplications, where possible.
- After some deliberation
- To properly handle sprite "waving" for nearby sprites,
We explicitly designed the greedy meshing system with figures and sprites in mind.
In both cases, we want to be able to *efficiently* pack many different models into the same texture, especially in cases where we know
we will either not be removing any of the grouped-together from the models from the texture, or will remove all of them at once (so
they can be packed into some specific subtexture).
For sprites, since we know every model in advance and never intend to deallocate them, we currently pack them all as efficiently as
possible into one giant tetxure atlas. However, in the future we might opt to pack them slightly less efficiently in exchange for
shrinking the sprite vertex size.
For figures, we pack all the textures for each *model* into the same atlas.
is a global texture atlas used for every sprite, and for figures which is why we have the ability to mesh multiple
models to the same texture area (using the simple texture atlas allocator) without requiring intermediate vector allocations.
This is accomplished by delaying the time when we actually write the color and light data to the texture until *after* all the
model vertices have been meshed; then, we can just allocate the whole color/light array at once, making the atlas we use an
exact fit. In computer science-y terms, we accomplish this delay by, after we perform the initial greedy meshing (without
texture information), not continuing to create the texture data, but instead constructing a *continuation*--that is, a function
that, when called, will execute the rest of the computation. We push this continuation (which in Rust terms is a `FnOnce` closure
that takes the `ColLightsInfo` that it is supposed to write to as context) onto a
onto a vector
resizing. To allow for suspended writes to texture data, Rust pointed out to me that the continuation that would eventually write the color and light data to the texture atlas (the one that is shared by all models sharing the same greedy mesher) would have to *own* whatever data it mshed. Because we often generate the model data to mesh as a temporary in `voxygen/src/load.rs`, the
- Matrix multiplications in the shader were reduced for figure data (@zesterer).
- Vertex "waves" for fluid data were removed.
- Terrain "bending" near edges was removed.
- Scaling was fixed to make sure empty space was not introduced in a space previously occupied by a block. It was also changed to take ownership of its voxel data,
rather than sharing it, to let it be used with meshing.
- Rust's nightly version was bumped in order to use the `array_map` function, which lets us reuse more code between the simple map and `FigureModelCache`.
- PositionedGlyph::standalone.
---
I tried to cite sources in many cases[^realtime],[^lloyd],[^lispsm],[^pbrt],[^greedy],[^tjunctions]
where I needed features from elsewhere but I am particularly grateful for the following resources,
esepcially where they have accompanying source code. I linked all of them that are accessible to the public (those that are not were
obtained through legal means).
[^realtime]: Eisemann, Elmar, Michael Schwarz, Ulf Assarsson, Michael Wimmer. Real-Time Shadows. A K Peters/CRC Press (T&F), 20160419.
[^lloyd]: Lloyd,B. 2007. [Logarithmic perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). PhD thesis, University of North Carolina.
[^lispsm]: Wimmer, M., Scherzer, D., and Purgathofer, W. 2004. [Light space perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). In Proceedings of Eurographics Symposium on Rendering 2004, pp. 143– 152.
[^pbrt]: Pharr, Matt, et al. [http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf](Physically Based Rendering: From Theory to Implementation). Third edition, Morgan Kaufmann Publishers/Elsevier, 2017.
[^greedy]: mikolalysenko. “Meshing in a Minecraft Game.” 0 FPS, 30 June 2012, <https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/>.
[^tjunctions]: blackflux. “Meshing in Voxel Engines – Part 1.” Blackflux.Com, 23 Feb. 2014, <https://blackflux.wordpress.com/2014/02/23/meshing-in-voxel-engines-part-1/>.
I am also especially grateful to Khronos, Wikiepdia, and stackoverflow for answering many of my specific questions while writing the MR.
---
Squashed commit of the following:
commit 300505e7305a2fdac722a808ee8538323f215f39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 18:46:25 2020 +0200
Fixing cargo doc and typo in CHANGELOG.
commit ec0aeb18e8499d7d84ef818331b4b65c3d76cea6
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 15:38:50 2020 +0200
Hopefully final commit for the LOD branch.
commit 5e8ea0b1eaac02903a02feb2eb038d195de4872f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 10:14:26 2020 +0200
Falling back to power as stopgap.
commit e44a1cbf46504ee9931a01bdc9033e145500d557
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 09:25:41 2020 +0200
Address imbris feedback.
Temporarily disables shiny water, lowers max VD.
These restrictions will be lifted soon after merging.
commit 561e25778a108ac3712f5ec2ce3a51234c4430d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 08:31:13 2020 +0200
Tweaking shaders a bit.
commit 7d19259078ce0dd7b3742ad7d0cb3fab3ece3fdc
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:59:43 2020 +0200
Fix view example as well.
commit 051cd4934e0fad2c0b15db4380a4189fa318679f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:29:06 2020 +0200
Fix meshing benchmark.
commit c95e07db3b4dcca285678985e65e31b927cb1c61
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 05:46:22 2020 +0200
Address MR feedback, fix scene clouds.
commit 1bfb816cabdb3ffc1e507a009c2d98696b4b573a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:39:36 2020 +0200
Incorporating Pfau's figure color changes.
New eyes and new humanoid colors.
commit 3f9b89a3ac7b3356b1dba0d1a8f6541357f81469
Merge: e2f5162e4 62c53963a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:29:41 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit e2f5162e4f96f4124aa43488f7245d341b3dcfd4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:28:38 2020 +0200
World colors are all hotloadable.
They live in assets/world/style/colors.ron.
Only a small handful of hardcoed colors remain in World; they are either
part of the map, or difficult to disentangle from the rest of the
computation. Comments are made where appropriate.
commit 62c53963abe1975009d34a8f9515a355bef24f31
Author: Marcel Märtens <marcel.cochem@googlemail.com>
Date: Wed Aug 19 15:59:00 2020 +0200
replace pretty_env_logger with tracing
commit 5b1625f99d9586fe80e2232f583ec5af9f953099
Merge: d71003acd 4942b5b39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:15:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit d71003acdabeff970b3928e97c26af6847b5b78e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:14:34 2020 +0200
Hotloading colors, part 1: colors in common.
Currently, this just entails humanoid colors. There are only three
colors not handled; the light emitter colors in
common/src/comp/inventory/item/tool.rs. These don't seem important
enough to me to warrant making hotloadable, at least not right now, but
if it's needed later we can always add them to the file.
commit 63b5e0e553eb2ea49276f192a6fc7dd65254270d
Merge: c32b337a4 6d2c4b9c1
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 13:05:37 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c32b337a46e10d9de473d178a94a3ccd61c39bb3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:52:04 2020 +0200
Fixing LOD grid, for real.
commit a166ae0360395387e09fb35a1f84210c2ce5ec24
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:28:05 2020 +0200
Addressing imbris's initial feedback.
Fixes two minor bugs: explosion particles were no longer spawning
randomly, and LOD grids were not perfectly even.
commit 4cbad004f44060994252dd3d38647a14a589712f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:27:58 2020 +0200
Bumping nightly per request.
commit 548680276aac77c25d43d16b5622f847d474dbef
Merge: acc098604 8f8b20c91
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:26:06 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit acc0986040589a3492f88a740bc3c3fc693b26d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:28:32 2020 +0200
Lower resolution due to lying drivers.
commit d3b878de2a52c358d2944a6bbd0555dad7fbdb10
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:15:38 2020 +0200
Fix issues msh encountered with Intel 4600.
commit 10245e0c1b0cb6fae10d86409435364edc6102ef
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 21:15:02 2020 +0200
Merge more models into one mesh than we did previously.
commit 3155c31e663c52ae5c3a53d5fb5665892a1a498a
Merge: 7204cc8a7 3c199280e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:35:22 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7204cc8a7a4f74a30306bd205d9834fee4bb944f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:34:43 2020 +0200
Fix not yet done NPC animations.
This forces them all to be the idle animation if not specified.
This fixes issues where you'd have giant NPCs in water.
commit bc83360f2a08918f19d417b5f772e1ff554dba08
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 19:36:37 2020 +0200
Try to fix some bugs:
- Z fighting with LOD terrain and water.
- Audio SFX not playing.
commit 1fd104aa603bf3781b6526a5cada46aeca3049dd
Merge: 862df3c99 7c2c392a3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 12:02:31 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 862df3c9976c4da9bd7cfd784f1a85973127968a
Merge: 0a4218ed9 75c1d4401
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 05:52:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0a4218ed9d541a2b34c133351bea38a99ddf4ea7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 22:27:14 2020 +0200
Fix particle depth.
commit f51dfdeb442d0dd5243dd2f344fa4be295bd0875
Merge: c6251a956 5e6dc0471
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:19:04 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit c6251a956ad376400dca5c23420cf8d213dc8fdf
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:15:46 2020 +0200
Cache figures more intelligently.
Cache figures for longer, and don't cache character states for the
player except where they actually affect the rendered model.
commit 0ed801d5404982c6fb63b1eaa4567d908b294c9d
Merge: c11b9bdf0 eea64f78f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 16:32:24 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c11b9bdf0a53bf9884d2f5a48fec9b01d582df1a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 11:47:15 2020 +0200
Remove unneeded Clippy annotation.
commit 16aa9ef40af56d69289d00aafb3deadfb8bd4f35
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 8 00:53:02 2020 +0200
Fix hotloading and Clippy.
commit 3dc973e0be5b758da1e9805eb764ad401374cd0c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 23:50:27 2020 +0200
Major speedups with SIMD.
commit fba64a7d93d5a96077ce87287bbce6ab9b7fbcae
Merge: 76429d00e d1e10b178
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:19 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 76429d00eea00d212fbd672a84ee91e75b19b938
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:10 2020 +0200
Add clippy.toml.
commit c79f512f84dbb83cb82b7954db68ff241dfd8e41
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 11:55:20 2020 +0200
Fix all clippy issues, clean up Rust code.
commit 6f90e010b3fbefb53b0d632e819931350015b6b8
Merge: 77a8c7c26 5929cfa5c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:30 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 77a8c7c267d3f44a1a62bd6b2274359973c5e4d4
Merge: b44e44232 44febaabd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:10 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 5929cfa5c713aa392110bbb62407f76caf53c3df
Author: jshipsey <jshipsey18@gmail.com>
Date: Thu Aug 6 20:47:27 2020 -0400
fixed in-hand arrow bug
commit b44e442325d828f1cd564d66908f89d09e80474b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 6 13:40:35 2020 +0200
Miscellaneous performance improvements.
commit be37acf287c1360d8085862526ac3365ffd1d768
Merge: 125d7fc6c c11876547
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 05:49:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 125d7fc6c4dcd8c8c5f27b8268a4d64f409f3644
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 04:55:31 2020 +0200
Abstract over simd vs. repr_c vectors.
Also some minor improvements to Event size.
commit d4d4956e9252e1241ce110b2aa85076c6b1e2a23
Merge: 5f3b7294a aced5f979
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:56:54 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 5f3b7294af1f8533edc2620b58863c248e2b07af
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:43:52 2020 +0200
Fix formatting issues I missed before.
commit a428a3ebba70dcab63dd0f8cd983120c90617271
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:41:51 2020 +0200
Fix clippy warnings, part 1.
There aer still a bunch of type too complex and
function takes too many arguments warnings that I'll fix later
(or ignore, since in the one case I did fix a function takes too
many arguments warning I think it made the code *less* readable).
commit ba54307540ed8a937ac08209730284fc653af85b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 30 13:22:42 2020 +0200
Fix light animations so they are removed when the light turns off.
commit 7e0f4bcbf0f4717145d8beac40d52e3acebbe2aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 21:10:20 2020 +0200
Fix crash in edge case for pixel art.
commit 56da06f7a351e2b949e9b014a90b974d511a0924
Merge: cf74d55f2 9f53a4a19
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:56:52 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:29:52 2020 +0200
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
The first concern was addressed by fixing the dimensions of the map
images drawn from the UI (so that we always use a square source
rectangle, rather than a rectangular one according to the dimensions of
the map). We also fixed the way rotation was done in the fragment
shader for north-facing sources to make it properly handle aspect ratio
(this was already done for north-facing targets). Together, these fix
rendering issues peculiar to rectangular maps.
The second and third concerns were jointly addressed by adding an
optional border color to every 2D image drawn by the UI. This turns
out not to waste extra space even though we hold a full f32 color
(to avoid an extra dependency on gfx's PackedColor), since voxel
images already take up more space than Optiion<[f32; 4]> requires.
This is then implemented automatically using the "border color"
wrapping method in the attached sampler.
Since this is implemented in graphics hardware, it only works (at
least naively) if the actual image bounds match the texture bounds.
Therefore, we altered the way the graphics cache stores images
with a border color to guarantee that they are always in their own
texture, whose size exactly matches their extent. Since the easiest
currently exposed way to set a border color is to do so for an
immutable texture, we went a bit further and added a new "immutable"
texture storage type used for these cases; currently, it is always
and automatically used only when there is a specified border color,
but in theory there's no reason we couldn't provide immutable-only
images that use the default wrapping mdoe (though clamp to border
is admittedly not a great default).
To fix the maps case specifically, we set the border color to a
translucent version of the ocean border color. This may need
tweaking going forward, which shouldn't be hard.
As part of this process, we had to modify graphics replacement to
make sure immutable images are *removed* when invalidated, rather
than just having a validity flag unset (this is normally done by
the UI to try to reuse allocations in place if images are updated
in benign ways, since the texture atlases used for Ui do not
support deallocation; currently this is only used for item images,
so there should be no overlap with immutable image replacement,
so this was purely precautionary).
Since we were already touching the relevant code, we also updated
the image dependency to a newer version that provides more ways
to avoid allocations, and made a few other changes that should
hopefully eliminate redundant most of the intermediate buffer
allocations we were performing for what should be zero-cost
conversions. This may slightly improve performance in some
cases.
commit ad18ce939940a8c697270f6e9b94db9942fd8295
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 13:21:09 2020 +0200
Fix continent scale hack.
commit 36b1cb074f5b195aebd7dbbc3da7f0246a1a18ec
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 12:11:40 2020 +0200
Enable loading different sized maps without a recompile.
We may want to tweak the effects of the continent_scale_hack.
commit 13b6d4d534cc4814b7cb3294ca41bbfea0a6b186
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 10:55:48 2020 +0200
Removing WORLD_SIZE, part 1.
Erased almost every instance of WORLD_SIZE and replaced it with a local
power of two, map_size_lg (which respects certain invariants; see
common/src/terrain/map.rs for more details about MapSizeLg). This also
means we can avoid a dependency on the world crate from client, as
desired.
Now that the rest of the code is not expecting a fixed WORLD_SIZE, the
next step is to arrange for maps to store their world size, and to use
that world size as a basis prior to loading the map (as well, probably,
as prior to configuring some of the noise functions).
commit 30b1d2c6428230a9eaa0d749cdcbbd6f1cbccd78
Merge: 7d56ba31b 1377b369f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:58 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 7d56ba31b445441461b28a07fc495d7d4f047c17
Merge: 2101113b4 598f14b25
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 1377b369f6db2258e910d467a5740f31789e3ded
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sun Jul 19 23:25:38 2020 +0200
more saturated pumpkins
commit ae8d50527f93bb0616c2ad46ce4dacb63bc37c6d
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sat Jul 18 20:29:56 2020 +0200
acacia models
commit 2101113b467e691de787392d7f20f1745f5637bd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 18 18:55:25 2020 +0200
Higher detail LOD.
commit add2cfae04b4385fa5590e11e2bd5229d9dee0aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 16 01:57:39 2020 +0200
Revert some irrelevant stuff.
commit 2e2ab3dc1eaa59a4aef7f8d34a53d8aae4c8553a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 15 13:30:49 2020 +0200
Fixing various things about shadows.
* Correcting optimal LISPSM parameter.
* Figure shadows are cast when they're not visible.
* Chunk shadows stay cast until you look away.
* Seamless cubemaps for point lights.
* Etc.
commit 6c31e6b56217274285b597af297036691ea5d897
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 19:50:26 2020 +0200
Fix shadow creation.
commit 6332cbe006115ae205597529cd8bbccd146c2cca
Merge: be438657c 930e0028b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:47:00 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit be438657c33d7b5bfb0a9582c3ed3fd366637323
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:28:08 2020 +0200
Tweaks to shadows.
Added shadow map resolution configuration, added seamless cubemaps,
documented all existing rendering options, and fixed a few Clippy
errors.
commit 23b4058906013c7d2a40c286e20e32c5fbd897ed
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 10:11:19 2020 +0200
Fix moon, use nonlinear noise for terrain.
Note that the latter has a bit of performance cost.
commit 7fbe5cbfbb9dc29607957b8e62f432a4deed193d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:23:02 2020 +0200
Address lies about max texture size.
commit bcfc62b5e13a1cdd83f57535fde4694720bebfd9
Merge: 75e3626a7 18a08e8fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:22:08 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 75e3626a785919f43fdcf2127c2b10e3e4df2f9f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:21:52 2020 +0200
OpenGL 3.3 minimum.
commit 18a08e8fe2739f02af99a5d2cb4e7c38c49e858b
Author: Monty Marz <m.marzouq@gmx.de>
Date: Tue Jul 7 23:57:52 2020 +0200
settings localization
commit 90c5d1ca3620092bc3ae10b2211489eb1cf6f5e8
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 21:11:48 2020 +0200
Lower near distance.
commit 0e66f02b25aaddaa2dfddbbc89cd67de54a9a7b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 20:09:01 2020 +0200
All sprites sway in the wind now.
commit db1401a6910bf42dcf502462c90038752ff5fbdb
Merge: 69e508d8c e8b4b29d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 19:34:17 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 69e508d8c94d8973033817ca86f357e466fc7c4d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 18:41:37 2020 +0200
Make it easy to switch to SIMD for math.
commit ffe0f5928c7a7e87d00cb5426b3b1d831d7e02fd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 21:21:12 2020 +0200
Fix some issues with underwater rendering.
commit bfda6da42f38fd02c31ee92c81ab785a3e50c2a0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 19:17:59 2020 +0200
Fix some minor display issues.
commit 0ed752e087968cf901301884aaeae698e32ef8a5
Merge: ccc6a06a8 518edcb85
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:14:21 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit ccc6a06a8d4504d6b9f7af7905a414d2ee06ab76
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:04:34 2020 +0200
Some minor changes.
commit 4e020246702889269efe1a191788992164c508d6
Merge: 50a64d927 e05c9267a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 16:17:40 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 50a64d927e6c4f4b0e4688e4cbfca694bc3f922a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 13:07:03 2020 +0200
Fix far plane.
commit 7dd06da34cae8f9ea3b6c889fe965181f3fd3949
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:25:35 2020 +0200
Add shadows.glsl.
commit 618a18c998778bf871b905a74657440fcc384c80
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:10:22 2020 +0200
Adding shadows, greedy meshing, and more.
commit eaea83fe6a5cb1cb0ba8beef888183c718258496
Merge: 267018495 2f89b863e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 22:47:07 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 2670184954a13e4a9e7a4e35ba79aac0c5fac2f7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 21:20:01 2020 +0200
Make civsim and sites deterministic.
For anything in worldgen where you use a HashMap, *please* think
carefully about which hasher you are going to use! This is
especially true if (for some reason) you are depending on hashmap
iteration order remaining stable for some aspect of worldgen.
commit f8376fd5dc72b4a9c2f51a6b4570d59c8b8e9343
Merge: 654f7e049 cdee191dd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 17:53:57 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 654f7e049258d9da27c09608bbe6a46ffa8787e5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed May 20 21:22:30 2020 +0200
Correct backface culling.
commit 560501df05ca725409b0f2e4eb31bdfdc15fd0c7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue May 19 17:22:06 2020 +0200
Greedy messhing for shadows.
commit a4d87e1875ca543436e6bbbeb20348facc5a52d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun May 17 05:59:00 2020 +0200
Shadow maps work for lantern.
commit 243d0837b8a3b08172c9a3c348d964d7ddc2a0a8
Merge: 04382dc28 71dd520cd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:53:13 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 04382dc28632b6c66e8821f6870c0daaa1c1901a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:22:17 2020 +0200
WIP: better graphics config, better LOD, shadow maps.
commit 22ddbad3eb32bfa70f0932176022208fe67ded81
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 18:54:09 2020 +0200
Minor shader fixes.
commit 746a10e8d01ac235f994b0cde78fa48998602a1f
Merge: 0f4a0e763 40ab94673
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 04:02:09 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0f4a0e763db3afbdc4fb0558611f38326ca87151
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 23:03:24 2020 +0200
Switch back to pop-in terrain.
commit dd74fa7e4a53667b38811d7aec58d7f6a68889bb
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 22:58:55 2020 +0200
LOD shading closer to voxel shading.
commit ef67bd58ba0bdaf622b078892d768263b6cba268
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 28 20:49:03 2020 +0200
Experimental underwater lighting.
commit 2c5ad9d07605e80d5fd5679dd3a5d70c605b86a9
Merge: 748279835 303967a6f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 22:35:24 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7482798354eda18c8207950080fc24d443a369de
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 21:59:55 2020 +0200
Replace discard in figure-frag.
commit d83b4ae69be4912f69bf7835f509c68a1c7770a4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:45:57 2020 +0200
Fix sprite lighting, HDR from focus_pos.
commit 0594238004f116274905fa0ed7c2b6c417ed1d29
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:14:10 2020 +0200
Proper HDR from point lights.
commit 48c93d2b41ce5743103d18e76cc228f5ac766492
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 14:01:43 2020 +0200
Brighter ambiance, darker LOD shadows.
commit e0452e895ccfa8a43f368cae3b8b8aedc24dad93
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 13:13:23 2020 +0200
More proper HDR.
commit 4c6da3ed16cfeebb455e40da5f557b4af9a499d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 00:13:10 2020 +0200
Trying LOD noise.
commit 682a3d74c85df5503ffe1fc1cc891bce789df1ad
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 23:11:08 2020 +0200
Fix LOD heights in towns.
commit cc39e5734e8b18f9077bf42e66337c1319dd6b6e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 21:01:23 2020 +0200
More LOD fixes.
commit 8116b21c2e51c836e77894e309ac273caf2917b3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:54:43 2020 +0200
I like this coloring.
commit bc2560ea90b36f4b46190005344232d993043ac3
Merge: 14effdd5d e690efe71
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:48:33 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 14effdd5db8747fcf3eb34f03b46b7792e92d1c5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:24:35 2020 +0200
Re-saturate.
commit 48a643955d4435b78179acba0beb4a979905cc31
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:23:57 2020 +0200
Various fixes.
commit f7b497a0c25f4ad4682c71dd1ed6f608052feb9b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 03:22:49 2020 +0200
Render figures again.
commit 44e4aad48deba8266b9f8bdfd3db096b381f5327
Merge: e6f0a5a98 9ec319a18
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 02:01:04 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit e6f0a5a981a82533ba188fff0a54ce98577bb152
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 24 16:12:20 2020 +0200
Add atmospheric scattering.
commit f2953087f691a8edbc001cb98ebf5059fc6f8ac0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 23 00:01:20 2020 +0200
Fix shadowing for specular reflections.
commit ddd4a67a9799b8d08c7dc0c2bec90621c2bed0e3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Apr 22 22:56:12 2020 +0200
HDR fixes.
commit 1015e60deef3c447381996277df7496707a63bd0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 21 18:25:19 2020 +0200
More lighting changes.
commit 80c264abd111fb237e57843efcb5c071d4f84613
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 13 00:29:59 2020 +0200
Lighting experiments.
commit 8414987e589dd5102bad89762a3adaccc0bfe957
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 9 02:38:40 2020 +0200
WIP -- lighting changes and soft shadows.
commit 9cd2b3fb0d6b49776c6dfe463e4169637250b11a
Merge: c7ea687eb 8b149ad11
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:29 2020 +0200
Merge branch 'sharp/new-lighting' into sharp/small-fixes
commit c7ea687ebbc5aace1b455f134a5bf49ce2c7434a
Merge: 476441531 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:02 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 8b149ad11ad4bb75018fcf9519baec27d1c95951
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:32:39 2020 +0200
Trying out a new lighting model.
commit b0ac9f36f755dd06f7c17c46150568064790864f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 07:56:11 2020 +0200
Use bicubic interpolation for terrain.
commit f6fc9307a121514b614bc50ef8eb055953e7da8a
Merge: 33140a295 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 05:01:41 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 4764415312aae6e9ac2d00e86e84577cb958f1ab
Merge: ed2d0111d 13388ee6a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 04:54:48 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 13388ee6a42943f3f79a9cb488346cef18e272fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 20:30:08 2020 +0200
Various fixes (to coloring and to soft shadows).
commit fbd084a94a067082a87cd6d28b82054709bc9265
Merge: 5a089863b 4fdf6896a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 18:50:38 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/map-colors
commit ed2d0111d994262ae836d84d1fe5a45e4de72a0b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 06:49:27 2020 +0200
Combining colors and LOD.
commit 88342640c6b835114d01c797b89fdede3b0a2108
Merge: 33140a295 5a089863b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:49:20 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 33140a2951b8212725f42c758b277aaec4d888f7
Merge: 4c65a5aed f34d4b379
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:36:21 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 5a089863beb01d4794bbe3580ada47b278715ea2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 03:17:49 2020 +0200
Making maps brighter.
This is probably not the right way to do it, but oh well!
commit 32b2c99109dd486aa922886081068f9c550c83f2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 02:46:36 2020 +0200
Horizon mapping and "layered" map generation.
Horizon mapping is a method of shadow mapping specific to height maps.
It can handle any angle between 0 and 90 degrees from the ground, as
long as know the horizontal direction in advance, by remembering only a
single angle (the "horizon angle" of the shadow map). More is explained
in common/src/msg/server.rs. We also remember the approximate height of
the largest occluder, to try to be able to generate soft shadows and
create a vertical position where the shadows can't go higher.
Additionally, map generation has been reworked. Instead of computing
everything from explicit samples, we pass in sampling functions that
return exactly what the map generator needs. This allows us to cleanly
separate the way we sample things like altitudes and colors from the map
generation process. We exploit this to generate maps *partially* on the
server (with colors and rivers, but not shading). We can then send the
partially completed map to the client, which can combine it with shadow
information to generate the final map. This is useful for two reasons:
first, it makes sure the client can apply shadow information by itself,
and second, it lets us pass the unshaded map for use with level of
detail functionality.
For similar reasons, river generation is split
out into its own layer, but for now we opt to still generate rivers on
the server (since the river wire format is more complicated to compress
and may require some extra work to make sure we have enough precision to
draw rivers well enough for LoD).
Finally, the mostly ad-hoc lighting we were performing has been (mostly)
replaced with explicit Phong reflection shading (including specular
highlights). Regularizing this seems useful and helps clarify the
"meaning" of the various light intensities, and helps us keep a more
physically plausible basis. However, its interaction with soft shadows
is still imperfect, and it's not yet clear to me what we need to do to
turn this into something useful for LoD.
commit f8926a5737ddc51f3d585c651a64c43677aae0f4
Merge: a1aee931e 875ae6ced
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Mar 13 13:32:42 2020 +0100
Merge remote-tracking branch 'origin/master' into sharp/map-colors
commit 4c65a5aed353b119aea65a2aaeb94549b67beb42
Author: Treeco <5021038-Treeco@users.noreply.gitlab.com>
Date: Mon Feb 24 16:48:05 2020 +0000
Made LOD setting slider exponential
commit 2fa7b2d20d7233dc8bfd64f9f7f54617575248f1
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 17:49:53 2020 +0000
Added mist to LoD
commit aab059a450b5f635777129ff82cc15b662965c3c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 15:14:06 2020 +0000
Added LoD slider
commit 779c36b538121c5ade3633ae5cb67bb14c8c3877
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:54:55 2020 +0000
Reduced cost of vertex pushing
commit 9fea150473906b166365b738ebcea07c697daf3d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:38:53 2020 +0000
Fixed maths, improved LoD resolution
commit 5481df38fea5bf183ff376a3337179cfaa5233dc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 11:22:50 2020 +0000
Dynamically relocate LoD vertices to enhance details
commit a3e36a50ababd615da7db1b26158c7906a5def01
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 18:13:51 2020 +0000
Simpler terrain spiral rendering
commit 255f450ae9ac8763db4bede075fb409161ed57cc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:53:17 2020 +0000
Better LoD precision
commit 3d027aebe812a5b8658a4eb8123dc9f61b3776d2
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:04:03 2020 +0000
Better falloff
commit be775c9484b457b2c0b1a494aec03392d0c70e76
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 15:30:45 2020 +0000
Applied good ideas from experimental branch
commit 58587b68545a23c5c04ab4574a4b94b3bc982246
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 16:15:13 2020 +0000
Minor fixes to LoD merging
commit 7b42aebd709c14df2db766aad61d9280ad24d84d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 15:04:44 2020 +0000
Capped LoD dragging
commit 8aafc559f87124e1ea5ca6e3ddc2aa0c242d793c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:54:37 2020 +0000
Better blending between LoD and terrain border
commit edd3455d5161792d87ddc8eadc0ecbad5532b284
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:40:19 2020 +0000
Fixed LoD z depth, added sea level offset
commit b9b06744620114dd5556e73f64fa93c145503a7c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:27:43 2020 +0000
Better LoD smoothing
commit a1aee931e790431560cd2d953ad61d9497072afd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Feb 21 14:52:17 2020 +0100
Adding shadows.
commit 2400786c13dd891c131ed86d48d05df516a8a778
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 13:48:40 2020 +0000
Use world map as LoD source
commit dbf650f504a4c25fbbc2096ac3616c736bf52d23
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Jan 20 00:48:14 2020 +0000
Better clouds at distance
commit 5e6f81b86cdb9730b9b056877b19257075fd5fa8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Jan 19 23:59:02 2020 +0000
sync
commit 745e7540ddb000cc645f612767b337c2ddc3f7c0
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 12:40:48 2019 +0000
Improved cloud falloff mist, faster noise sampling
commit f6a200d0cb866196ba57697466755f9e0c7ea5d8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 10:09:00 2019 +0000
Improved long-range depth precision, removed unnecessary LoD polygons
commit 63d1b2bb2292898d59fb4f4e502201103dfeb86f
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 20:57:46 2019 +0000
Working LoD shader
commit f13d98ee3e58f881e8b978861a67663b59ed91ec
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 11:03:40 2019 +0000
LoD first attempt (stack overflow issue)
2020-08-20 18:34:59 +00:00
|
|
|
|
if x >= 0
|
|
|
|
|
&& y >= 0
|
|
|
|
|
&& x < map_size_lg.chunks().x as i32
|
|
|
|
|
&& y < map_size_lg.chunks().y as i32
|
|
|
|
|
{
|
|
|
|
|
let posi = vec2_as_uniform_idx(map_size_lg, Vec2::new(x, y));
|
2019-10-16 11:39:41 +00:00
|
|
|
|
if !is_underwater(posi) {
|
2019-08-25 16:17:51 +00:00
|
|
|
|
return false;
|
2019-08-25 15:49:33 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
true
|
|
|
|
|
};
|
|
|
|
|
|
2019-11-07 20:25:30 +00:00
|
|
|
|
// NaNs in these uniform vectors wherever pure_water() returns true.
|
|
|
|
|
let (((alt_no_water, _), (pure_flux, _)), ((temp_base, _), (humid_base, _))) = rayon::join(
|
2019-10-16 11:39:41 +00:00
|
|
|
|
|| {
|
2019-11-07 20:25:30 +00:00
|
|
|
|
rayon::join(
|
|
|
|
|
|| {
|
(See sharp/lod-history) LOD, shadows, greedy meshing, new lighting, perf
---
Pretty much a Veloren fork at this point. Here's a high level overview of the changes (will be added to CHANGELOG just before merge).
At a high level this MR incorporates roughly two groups of changes.
The first group consists of new game features: more flexible map sizes, level of detail terrain, shadow maps, and a new lighting
engine. This is "feature work" that (mostly) only adds new things to Veloren, and mostly shouldn't affect old stuff.
The second big group of changes are those addressing the fallout from all the new features. These include performance fixes of
various sorts: the addition of multiple graphics options and optimization of the cheap ones to avoid work, switching all voxel
models to use some variant of greedy meshing, switching over much of our CPU-side vector math to exploit SIMD instructions
(coinciding with a fork of `vek`), and a rewrite of how the UI handles text rendering (coinciding with updates to our fork
of `conrod`). Making Veloren's hardcoded colors appear correct under the new lighting engine also required considerably
changes (TODO: Fill in this section when it's complete).
The second category of changes often heavily touches code owned by other people, including frequently modified code "owned" by a
handful of people, so I recommend that this code be reviewed particularly carefully.
---
At a high level (each will be described in more detail below):
- The world map has been refactored.
- The world size is no longer hardcoded (@zesterer).
- The map generation code was made generic to allow using it outside of the `world` crate (@zesterer).
- On world creation, we now compute *horizon maps* (@zesterer).
- The way we pass the world from the server to the client has been updated (@xMAC94x).
- Artifacts related to image rotation were fixed (@imbris).
- Multiflow rivers were enabled (@zesterer).
- In the process of making changes related to the world map, various incidental fixes and optimizations were required.
- The new *level of detail* feature was added (@zesterer wrote part of this and has checked out the rest).
- A new LOD terrain rendering step was added to the pipeline.
- The LOD terrain quality was made configurable via a graphics setting.
- Horizon maps were used to cast shadows from LOD chunks on both LOD and non-LOD terrain.
- A "voxelization" effect was incorporated into rendered LOD terrain to make it blend better into the world.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Veloren's lighting has been completely overhauled (@zesterer has already checked most of this out).
- A semi-accurate index of refraction was assigned to our materials.
- A new, more realistic, physically based approach to lighting was used using the *Ashikhmin Shirley* BRDF.
- We emulate *atmospheric scattering* using equations designed for measuring solar panel light exposure.
- We attempt to compute *realistic light attenuation* in water using its real material properties.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Point and directional lights now cast realistic shadows, using *shadow mapping.* (@imbris, @zesterer, @Treeco, @YuriMomo)
- Point light shadow maps were added to the rendering pipeline, using geometry shaders and *seamless cube maps*.
- Directional light shadows were added to the rendering pipeline, using LISPSM together with disabling *depth clamping*.
- "Shadow-only" chunks and NPCs were added to prevent shadows from models behind you from disappearing.
- In the process of making changes related to shadow maps, various incidental fixes and optimizations were required.
The addition of shadow maps, LOD terrain, and the new lighting all led to significant performance degradation, on top of other
changes happening in master. Therefore, a large number of performance improvements were also needed:
- The graphics options were made much more flexible and configurable, and shaders were optimize.
- New options were provided for how to render lights and shadows (@Pfauenauge, @zesterer).
- Graphic setting storage and configuration were overhauled to make adding new features easier (@Pfauenauge, @imbris).
- Shaders were rewritten to utilize GLSL's preprocessor to avoid overhead (@zesterer, @YuriMomo).
- In the process of making changes related to providing additional rendering options, various incidental fixes and optimizations were required.
- Voxel model creation was switched to use *greedy meshing.*
- A new voxel meshing method, greedy meshing, was added (@imbris).
- Uses of the older meshing methods were migrated to use greedy meshing (@imbris, @jshipsey, @Pfauenauge).
- New restrictions were added to terrain, figure, and sprites to future proof them for further optimizations (@jshipsey, @Pfauenauge, @zesterer).
- Most positions are now relative to either chunk or player position for better precision (@imbris, @zesterer, @scottc).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- Animation and terrain math were switched to use SIMD where possible.
- Fixes were made to vek to make its SIMD feature usable for us (@zesterer, @imbris).
- The interface and types used in bone animation were changed in various ways (@jshipsey, @Snowram, @Pfauenauge).
- Redundant code generation for body animation is now partly taken care of by a macro (@jshipsey, @Snowram, @Pfauenauge).
- Animation code was modified to to use vek's SIMD representation where possible (@jshipsey, @Snowram, @Pfauenauge).
- Terrain meshing code and shadow map math were also modified to use vek's SIMD representation (@imbris).
- SIMD instruction generation was enabled (@YuriMomo, @jshipsey, @Snowram, @imbris, @Angelonfira, @xMAC94x).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- The way we cache glyphs was completely refactored, fixed, and optimized.
- Our fork of `conrod` was optimized in various ways (@imbris).
- Our fork of `conrod` now exposes whether a widget was updated during the current frame (@imbris).
- Our use of the glyph cache was rewritten for correctness (@imbris).
- A *text cache* was introduced that lets us skip remeshing glyphs that have not changed (@imbris).
- Various changes were made to reduce pressure on the glyph cache, with more planned (@imbris, @Pfauenauge).
- In the process of making changes related to the glyph cache, various incidental fixes and optimizations were required.
- Colors were changed to keep Veloren's look consistent with master.
- Some older tree models were brought back (@Pfauenauge).
- TODO(@Sharp): All hardcoded colors were extracted and made hotloadable.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Hardcoded colors were fixed to conform to Veloren's style.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Color models were fixed to conform to Veloren's style.
A detailed description of the involved changes follows.
---
- The world size is no longer hardcoded. All functions dependent on world size now take a `WorldSizeLg`, which holds the base 2 logarithm of each actual world dimension and is guaranteed to maintain certain properties (outlined in `common/src/terrain/map.rs`). Additionally, many utility functions that utilize the world size were moved into `common` as well (mostly `common/src/terrain/mod.rs`). Finally, the world map format was updated in order to store its size explicitly, with a migration path from the old format that should work whenever the old formatted map was a square (practically always). See `world/src/sim/mod.rs` for these changes.
- The map generation code was made generic to allow using it outside of the `world` crate. The parts of the map generating code that do not need to query the world were moved over to `common/src/terrain/map.rs`, allowing them to be used from the client without creating a dependency on `world`. The rest of it was turned into helper functions in `world/src/sim/map.rs`, which can be passed as closures to the generic map generation code to complete its construction. This also means that colors are now passed in separately to the map generation function. See <https://veloren.net/devblog-78/> for more details.
- On world creation, we now compute *horizon maps*. See the function in `world/src/sim/util.rs`.
Given a height map and a plane intersecting that height map, our horizon maps allow us to encode enough information to reconstruct shadows for each point on the height map using only the *horizon angle* (the angle at which the sun starts to become visible). As Veloren's sun only covers one plane, this is sufficient for encoding sun shadows for LOD terrain, by encoding two angles per chunk (one for each 90 degrees the sun covers). We can also use this for the moon, if we want, since the moon follows the same path. Additionally, we store the *height* of the furthest occluder, to try to make the shadows volumetric; so this means 4 bytes in total for each chunk.
Support for horizon maps has been merged into the map functionality in common as well.
- The way we pass the world from the server to the client has been updated. Rather than passing the prerendered map, we instead pass three maps with values for each chunk; one with the color information, a second with altitude information, and a third with horizon map information. We then reconstruct the map on the client, together with some additional information we send from the server (like the sea level and maximum height). See `common/src/msg/server.rs` for a detailed description of the format of `WorldMapMsg`, and `server/src/libr.rs` and `client/src/lib.rs` for details of the map construction and parsing.
- Artifacts related to image rotation were fixed. See the commit message for commit SHA `cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e` for a detailed explanation. This involved changes to shaders, the addition of a new type of graphic (also reflected in the graphic cache) that allows specifying a border color (which automatically makes the associated texture immutable), and some related fixes. I reproduce the first two paragraphs of the MR description as well:
```
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
```
- Multiflow rivers were enabled.
This does not really need to be part of this MR, and would be easy to revert, but since it seemed to provide a nice improvement it's currently packaged with it.
We already computed multiple outflows from each chunk for erosion purposes long before this MR.
However, we never modified river rendering to be able to handle this case (just a single downhill river flow is complex enough!) so this was not exposed when deciding which chunks were rivers.
Now that
- In the process of making changes related to the world map, various incidental fixes and optimizations were required. Some examples of fixes include making sure terrain is never lowered to below sea level (to make the shadow maps report correct values), fixing map altitudes and colors to understand things like cliffs and "block level" coloring (that doesn'te xist on the column level), and fixing a crashbug when rendering images for the UI where source pixels are strongly rectangular. Some examples of related performance fixes include avoiding allocating a fresh vector for all the maps (i.e. copying it over to change the format from `[u32; n]` to `DynamicImage` and then copying again to convert to `RgbaImage`), and instead using the `gfx::memory::slice` function to accomplish the same thing. These sorts of changes are spread all arond the code.
This includes the additon of a new scene, `voxygen/src/scene/lod.rs`, a new pipeline `voxygen/src/render/pipeline/lod_terrain.rs`, and new shaders `assets/vxygen/shaders/lod-terrain-vert.glsl` and `assets/vxygen/shaders/lod-terrain-frag.glsl`, as well as associated changes to the renderer in `voxygen/src/render/renderer.rs`.
The main idea behind our initial approach to LOD was to take the world data we now get from the server (altitude, color, and horizon mapping).
- Some previously computed values were turned into shader uniforms for better prediction on weak processors. (@zesterer)
- Calls to power or trig functions were removed or replaced with multiplications, where possible.
- After some deliberation
- To properly handle sprite "waving" for nearby sprites,
We explicitly designed the greedy meshing system with figures and sprites in mind.
In both cases, we want to be able to *efficiently* pack many different models into the same texture, especially in cases where we know
we will either not be removing any of the grouped-together from the models from the texture, or will remove all of them at once (so
they can be packed into some specific subtexture).
For sprites, since we know every model in advance and never intend to deallocate them, we currently pack them all as efficiently as
possible into one giant tetxure atlas. However, in the future we might opt to pack them slightly less efficiently in exchange for
shrinking the sprite vertex size.
For figures, we pack all the textures for each *model* into the same atlas.
is a global texture atlas used for every sprite, and for figures which is why we have the ability to mesh multiple
models to the same texture area (using the simple texture atlas allocator) without requiring intermediate vector allocations.
This is accomplished by delaying the time when we actually write the color and light data to the texture until *after* all the
model vertices have been meshed; then, we can just allocate the whole color/light array at once, making the atlas we use an
exact fit. In computer science-y terms, we accomplish this delay by, after we perform the initial greedy meshing (without
texture information), not continuing to create the texture data, but instead constructing a *continuation*--that is, a function
that, when called, will execute the rest of the computation. We push this continuation (which in Rust terms is a `FnOnce` closure
that takes the `ColLightsInfo` that it is supposed to write to as context) onto a
onto a vector
resizing. To allow for suspended writes to texture data, Rust pointed out to me that the continuation that would eventually write the color and light data to the texture atlas (the one that is shared by all models sharing the same greedy mesher) would have to *own* whatever data it mshed. Because we often generate the model data to mesh as a temporary in `voxygen/src/load.rs`, the
- Matrix multiplications in the shader were reduced for figure data (@zesterer).
- Vertex "waves" for fluid data were removed.
- Terrain "bending" near edges was removed.
- Scaling was fixed to make sure empty space was not introduced in a space previously occupied by a block. It was also changed to take ownership of its voxel data,
rather than sharing it, to let it be used with meshing.
- Rust's nightly version was bumped in order to use the `array_map` function, which lets us reuse more code between the simple map and `FigureModelCache`.
- PositionedGlyph::standalone.
---
I tried to cite sources in many cases[^realtime],[^lloyd],[^lispsm],[^pbrt],[^greedy],[^tjunctions]
where I needed features from elsewhere but I am particularly grateful for the following resources,
esepcially where they have accompanying source code. I linked all of them that are accessible to the public (those that are not were
obtained through legal means).
[^realtime]: Eisemann, Elmar, Michael Schwarz, Ulf Assarsson, Michael Wimmer. Real-Time Shadows. A K Peters/CRC Press (T&F), 20160419.
[^lloyd]: Lloyd,B. 2007. [Logarithmic perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). PhD thesis, University of North Carolina.
[^lispsm]: Wimmer, M., Scherzer, D., and Purgathofer, W. 2004. [Light space perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). In Proceedings of Eurographics Symposium on Rendering 2004, pp. 143– 152.
[^pbrt]: Pharr, Matt, et al. [http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf](Physically Based Rendering: From Theory to Implementation). Third edition, Morgan Kaufmann Publishers/Elsevier, 2017.
[^greedy]: mikolalysenko. “Meshing in a Minecraft Game.” 0 FPS, 30 June 2012, <https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/>.
[^tjunctions]: blackflux. “Meshing in Voxel Engines – Part 1.” Blackflux.Com, 23 Feb. 2014, <https://blackflux.wordpress.com/2014/02/23/meshing-in-voxel-engines-part-1/>.
I am also especially grateful to Khronos, Wikiepdia, and stackoverflow for answering many of my specific questions while writing the MR.
---
Squashed commit of the following:
commit 300505e7305a2fdac722a808ee8538323f215f39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 18:46:25 2020 +0200
Fixing cargo doc and typo in CHANGELOG.
commit ec0aeb18e8499d7d84ef818331b4b65c3d76cea6
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 15:38:50 2020 +0200
Hopefully final commit for the LOD branch.
commit 5e8ea0b1eaac02903a02feb2eb038d195de4872f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 10:14:26 2020 +0200
Falling back to power as stopgap.
commit e44a1cbf46504ee9931a01bdc9033e145500d557
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 09:25:41 2020 +0200
Address imbris feedback.
Temporarily disables shiny water, lowers max VD.
These restrictions will be lifted soon after merging.
commit 561e25778a108ac3712f5ec2ce3a51234c4430d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 08:31:13 2020 +0200
Tweaking shaders a bit.
commit 7d19259078ce0dd7b3742ad7d0cb3fab3ece3fdc
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:59:43 2020 +0200
Fix view example as well.
commit 051cd4934e0fad2c0b15db4380a4189fa318679f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:29:06 2020 +0200
Fix meshing benchmark.
commit c95e07db3b4dcca285678985e65e31b927cb1c61
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 05:46:22 2020 +0200
Address MR feedback, fix scene clouds.
commit 1bfb816cabdb3ffc1e507a009c2d98696b4b573a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:39:36 2020 +0200
Incorporating Pfau's figure color changes.
New eyes and new humanoid colors.
commit 3f9b89a3ac7b3356b1dba0d1a8f6541357f81469
Merge: e2f5162e4 62c53963a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:29:41 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit e2f5162e4f96f4124aa43488f7245d341b3dcfd4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:28:38 2020 +0200
World colors are all hotloadable.
They live in assets/world/style/colors.ron.
Only a small handful of hardcoed colors remain in World; they are either
part of the map, or difficult to disentangle from the rest of the
computation. Comments are made where appropriate.
commit 62c53963abe1975009d34a8f9515a355bef24f31
Author: Marcel Märtens <marcel.cochem@googlemail.com>
Date: Wed Aug 19 15:59:00 2020 +0200
replace pretty_env_logger with tracing
commit 5b1625f99d9586fe80e2232f583ec5af9f953099
Merge: d71003acd 4942b5b39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:15:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit d71003acdabeff970b3928e97c26af6847b5b78e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:14:34 2020 +0200
Hotloading colors, part 1: colors in common.
Currently, this just entails humanoid colors. There are only three
colors not handled; the light emitter colors in
common/src/comp/inventory/item/tool.rs. These don't seem important
enough to me to warrant making hotloadable, at least not right now, but
if it's needed later we can always add them to the file.
commit 63b5e0e553eb2ea49276f192a6fc7dd65254270d
Merge: c32b337a4 6d2c4b9c1
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 13:05:37 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c32b337a46e10d9de473d178a94a3ccd61c39bb3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:52:04 2020 +0200
Fixing LOD grid, for real.
commit a166ae0360395387e09fb35a1f84210c2ce5ec24
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:28:05 2020 +0200
Addressing imbris's initial feedback.
Fixes two minor bugs: explosion particles were no longer spawning
randomly, and LOD grids were not perfectly even.
commit 4cbad004f44060994252dd3d38647a14a589712f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:27:58 2020 +0200
Bumping nightly per request.
commit 548680276aac77c25d43d16b5622f847d474dbef
Merge: acc098604 8f8b20c91
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:26:06 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit acc0986040589a3492f88a740bc3c3fc693b26d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:28:32 2020 +0200
Lower resolution due to lying drivers.
commit d3b878de2a52c358d2944a6bbd0555dad7fbdb10
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:15:38 2020 +0200
Fix issues msh encountered with Intel 4600.
commit 10245e0c1b0cb6fae10d86409435364edc6102ef
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 21:15:02 2020 +0200
Merge more models into one mesh than we did previously.
commit 3155c31e663c52ae5c3a53d5fb5665892a1a498a
Merge: 7204cc8a7 3c199280e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:35:22 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7204cc8a7a4f74a30306bd205d9834fee4bb944f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:34:43 2020 +0200
Fix not yet done NPC animations.
This forces them all to be the idle animation if not specified.
This fixes issues where you'd have giant NPCs in water.
commit bc83360f2a08918f19d417b5f772e1ff554dba08
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 19:36:37 2020 +0200
Try to fix some bugs:
- Z fighting with LOD terrain and water.
- Audio SFX not playing.
commit 1fd104aa603bf3781b6526a5cada46aeca3049dd
Merge: 862df3c99 7c2c392a3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 12:02:31 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 862df3c9976c4da9bd7cfd784f1a85973127968a
Merge: 0a4218ed9 75c1d4401
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 05:52:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0a4218ed9d541a2b34c133351bea38a99ddf4ea7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 22:27:14 2020 +0200
Fix particle depth.
commit f51dfdeb442d0dd5243dd2f344fa4be295bd0875
Merge: c6251a956 5e6dc0471
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:19:04 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit c6251a956ad376400dca5c23420cf8d213dc8fdf
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:15:46 2020 +0200
Cache figures more intelligently.
Cache figures for longer, and don't cache character states for the
player except where they actually affect the rendered model.
commit 0ed801d5404982c6fb63b1eaa4567d908b294c9d
Merge: c11b9bdf0 eea64f78f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 16:32:24 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c11b9bdf0a53bf9884d2f5a48fec9b01d582df1a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 11:47:15 2020 +0200
Remove unneeded Clippy annotation.
commit 16aa9ef40af56d69289d00aafb3deadfb8bd4f35
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 8 00:53:02 2020 +0200
Fix hotloading and Clippy.
commit 3dc973e0be5b758da1e9805eb764ad401374cd0c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 23:50:27 2020 +0200
Major speedups with SIMD.
commit fba64a7d93d5a96077ce87287bbce6ab9b7fbcae
Merge: 76429d00e d1e10b178
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:19 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 76429d00eea00d212fbd672a84ee91e75b19b938
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:10 2020 +0200
Add clippy.toml.
commit c79f512f84dbb83cb82b7954db68ff241dfd8e41
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 11:55:20 2020 +0200
Fix all clippy issues, clean up Rust code.
commit 6f90e010b3fbefb53b0d632e819931350015b6b8
Merge: 77a8c7c26 5929cfa5c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:30 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 77a8c7c267d3f44a1a62bd6b2274359973c5e4d4
Merge: b44e44232 44febaabd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:10 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 5929cfa5c713aa392110bbb62407f76caf53c3df
Author: jshipsey <jshipsey18@gmail.com>
Date: Thu Aug 6 20:47:27 2020 -0400
fixed in-hand arrow bug
commit b44e442325d828f1cd564d66908f89d09e80474b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 6 13:40:35 2020 +0200
Miscellaneous performance improvements.
commit be37acf287c1360d8085862526ac3365ffd1d768
Merge: 125d7fc6c c11876547
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 05:49:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 125d7fc6c4dcd8c8c5f27b8268a4d64f409f3644
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 04:55:31 2020 +0200
Abstract over simd vs. repr_c vectors.
Also some minor improvements to Event size.
commit d4d4956e9252e1241ce110b2aa85076c6b1e2a23
Merge: 5f3b7294a aced5f979
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:56:54 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 5f3b7294af1f8533edc2620b58863c248e2b07af
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:43:52 2020 +0200
Fix formatting issues I missed before.
commit a428a3ebba70dcab63dd0f8cd983120c90617271
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:41:51 2020 +0200
Fix clippy warnings, part 1.
There aer still a bunch of type too complex and
function takes too many arguments warnings that I'll fix later
(or ignore, since in the one case I did fix a function takes too
many arguments warning I think it made the code *less* readable).
commit ba54307540ed8a937ac08209730284fc653af85b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 30 13:22:42 2020 +0200
Fix light animations so they are removed when the light turns off.
commit 7e0f4bcbf0f4717145d8beac40d52e3acebbe2aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 21:10:20 2020 +0200
Fix crash in edge case for pixel art.
commit 56da06f7a351e2b949e9b014a90b974d511a0924
Merge: cf74d55f2 9f53a4a19
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:56:52 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:29:52 2020 +0200
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
The first concern was addressed by fixing the dimensions of the map
images drawn from the UI (so that we always use a square source
rectangle, rather than a rectangular one according to the dimensions of
the map). We also fixed the way rotation was done in the fragment
shader for north-facing sources to make it properly handle aspect ratio
(this was already done for north-facing targets). Together, these fix
rendering issues peculiar to rectangular maps.
The second and third concerns were jointly addressed by adding an
optional border color to every 2D image drawn by the UI. This turns
out not to waste extra space even though we hold a full f32 color
(to avoid an extra dependency on gfx's PackedColor), since voxel
images already take up more space than Optiion<[f32; 4]> requires.
This is then implemented automatically using the "border color"
wrapping method in the attached sampler.
Since this is implemented in graphics hardware, it only works (at
least naively) if the actual image bounds match the texture bounds.
Therefore, we altered the way the graphics cache stores images
with a border color to guarantee that they are always in their own
texture, whose size exactly matches their extent. Since the easiest
currently exposed way to set a border color is to do so for an
immutable texture, we went a bit further and added a new "immutable"
texture storage type used for these cases; currently, it is always
and automatically used only when there is a specified border color,
but in theory there's no reason we couldn't provide immutable-only
images that use the default wrapping mdoe (though clamp to border
is admittedly not a great default).
To fix the maps case specifically, we set the border color to a
translucent version of the ocean border color. This may need
tweaking going forward, which shouldn't be hard.
As part of this process, we had to modify graphics replacement to
make sure immutable images are *removed* when invalidated, rather
than just having a validity flag unset (this is normally done by
the UI to try to reuse allocations in place if images are updated
in benign ways, since the texture atlases used for Ui do not
support deallocation; currently this is only used for item images,
so there should be no overlap with immutable image replacement,
so this was purely precautionary).
Since we were already touching the relevant code, we also updated
the image dependency to a newer version that provides more ways
to avoid allocations, and made a few other changes that should
hopefully eliminate redundant most of the intermediate buffer
allocations we were performing for what should be zero-cost
conversions. This may slightly improve performance in some
cases.
commit ad18ce939940a8c697270f6e9b94db9942fd8295
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 13:21:09 2020 +0200
Fix continent scale hack.
commit 36b1cb074f5b195aebd7dbbc3da7f0246a1a18ec
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 12:11:40 2020 +0200
Enable loading different sized maps without a recompile.
We may want to tweak the effects of the continent_scale_hack.
commit 13b6d4d534cc4814b7cb3294ca41bbfea0a6b186
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 10:55:48 2020 +0200
Removing WORLD_SIZE, part 1.
Erased almost every instance of WORLD_SIZE and replaced it with a local
power of two, map_size_lg (which respects certain invariants; see
common/src/terrain/map.rs for more details about MapSizeLg). This also
means we can avoid a dependency on the world crate from client, as
desired.
Now that the rest of the code is not expecting a fixed WORLD_SIZE, the
next step is to arrange for maps to store their world size, and to use
that world size as a basis prior to loading the map (as well, probably,
as prior to configuring some of the noise functions).
commit 30b1d2c6428230a9eaa0d749cdcbbd6f1cbccd78
Merge: 7d56ba31b 1377b369f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:58 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 7d56ba31b445441461b28a07fc495d7d4f047c17
Merge: 2101113b4 598f14b25
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 1377b369f6db2258e910d467a5740f31789e3ded
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sun Jul 19 23:25:38 2020 +0200
more saturated pumpkins
commit ae8d50527f93bb0616c2ad46ce4dacb63bc37c6d
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sat Jul 18 20:29:56 2020 +0200
acacia models
commit 2101113b467e691de787392d7f20f1745f5637bd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 18 18:55:25 2020 +0200
Higher detail LOD.
commit add2cfae04b4385fa5590e11e2bd5229d9dee0aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 16 01:57:39 2020 +0200
Revert some irrelevant stuff.
commit 2e2ab3dc1eaa59a4aef7f8d34a53d8aae4c8553a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 15 13:30:49 2020 +0200
Fixing various things about shadows.
* Correcting optimal LISPSM parameter.
* Figure shadows are cast when they're not visible.
* Chunk shadows stay cast until you look away.
* Seamless cubemaps for point lights.
* Etc.
commit 6c31e6b56217274285b597af297036691ea5d897
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 19:50:26 2020 +0200
Fix shadow creation.
commit 6332cbe006115ae205597529cd8bbccd146c2cca
Merge: be438657c 930e0028b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:47:00 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit be438657c33d7b5bfb0a9582c3ed3fd366637323
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:28:08 2020 +0200
Tweaks to shadows.
Added shadow map resolution configuration, added seamless cubemaps,
documented all existing rendering options, and fixed a few Clippy
errors.
commit 23b4058906013c7d2a40c286e20e32c5fbd897ed
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 10:11:19 2020 +0200
Fix moon, use nonlinear noise for terrain.
Note that the latter has a bit of performance cost.
commit 7fbe5cbfbb9dc29607957b8e62f432a4deed193d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:23:02 2020 +0200
Address lies about max texture size.
commit bcfc62b5e13a1cdd83f57535fde4694720bebfd9
Merge: 75e3626a7 18a08e8fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:22:08 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 75e3626a785919f43fdcf2127c2b10e3e4df2f9f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:21:52 2020 +0200
OpenGL 3.3 minimum.
commit 18a08e8fe2739f02af99a5d2cb4e7c38c49e858b
Author: Monty Marz <m.marzouq@gmx.de>
Date: Tue Jul 7 23:57:52 2020 +0200
settings localization
commit 90c5d1ca3620092bc3ae10b2211489eb1cf6f5e8
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 21:11:48 2020 +0200
Lower near distance.
commit 0e66f02b25aaddaa2dfddbbc89cd67de54a9a7b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 20:09:01 2020 +0200
All sprites sway in the wind now.
commit db1401a6910bf42dcf502462c90038752ff5fbdb
Merge: 69e508d8c e8b4b29d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 19:34:17 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 69e508d8c94d8973033817ca86f357e466fc7c4d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 18:41:37 2020 +0200
Make it easy to switch to SIMD for math.
commit ffe0f5928c7a7e87d00cb5426b3b1d831d7e02fd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 21:21:12 2020 +0200
Fix some issues with underwater rendering.
commit bfda6da42f38fd02c31ee92c81ab785a3e50c2a0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 19:17:59 2020 +0200
Fix some minor display issues.
commit 0ed752e087968cf901301884aaeae698e32ef8a5
Merge: ccc6a06a8 518edcb85
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:14:21 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit ccc6a06a8d4504d6b9f7af7905a414d2ee06ab76
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:04:34 2020 +0200
Some minor changes.
commit 4e020246702889269efe1a191788992164c508d6
Merge: 50a64d927 e05c9267a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 16:17:40 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 50a64d927e6c4f4b0e4688e4cbfca694bc3f922a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 13:07:03 2020 +0200
Fix far plane.
commit 7dd06da34cae8f9ea3b6c889fe965181f3fd3949
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:25:35 2020 +0200
Add shadows.glsl.
commit 618a18c998778bf871b905a74657440fcc384c80
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:10:22 2020 +0200
Adding shadows, greedy meshing, and more.
commit eaea83fe6a5cb1cb0ba8beef888183c718258496
Merge: 267018495 2f89b863e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 22:47:07 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 2670184954a13e4a9e7a4e35ba79aac0c5fac2f7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 21:20:01 2020 +0200
Make civsim and sites deterministic.
For anything in worldgen where you use a HashMap, *please* think
carefully about which hasher you are going to use! This is
especially true if (for some reason) you are depending on hashmap
iteration order remaining stable for some aspect of worldgen.
commit f8376fd5dc72b4a9c2f51a6b4570d59c8b8e9343
Merge: 654f7e049 cdee191dd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 17:53:57 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 654f7e049258d9da27c09608bbe6a46ffa8787e5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed May 20 21:22:30 2020 +0200
Correct backface culling.
commit 560501df05ca725409b0f2e4eb31bdfdc15fd0c7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue May 19 17:22:06 2020 +0200
Greedy messhing for shadows.
commit a4d87e1875ca543436e6bbbeb20348facc5a52d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun May 17 05:59:00 2020 +0200
Shadow maps work for lantern.
commit 243d0837b8a3b08172c9a3c348d964d7ddc2a0a8
Merge: 04382dc28 71dd520cd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:53:13 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 04382dc28632b6c66e8821f6870c0daaa1c1901a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:22:17 2020 +0200
WIP: better graphics config, better LOD, shadow maps.
commit 22ddbad3eb32bfa70f0932176022208fe67ded81
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 18:54:09 2020 +0200
Minor shader fixes.
commit 746a10e8d01ac235f994b0cde78fa48998602a1f
Merge: 0f4a0e763 40ab94673
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 04:02:09 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0f4a0e763db3afbdc4fb0558611f38326ca87151
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 23:03:24 2020 +0200
Switch back to pop-in terrain.
commit dd74fa7e4a53667b38811d7aec58d7f6a68889bb
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 22:58:55 2020 +0200
LOD shading closer to voxel shading.
commit ef67bd58ba0bdaf622b078892d768263b6cba268
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 28 20:49:03 2020 +0200
Experimental underwater lighting.
commit 2c5ad9d07605e80d5fd5679dd3a5d70c605b86a9
Merge: 748279835 303967a6f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 22:35:24 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7482798354eda18c8207950080fc24d443a369de
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 21:59:55 2020 +0200
Replace discard in figure-frag.
commit d83b4ae69be4912f69bf7835f509c68a1c7770a4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:45:57 2020 +0200
Fix sprite lighting, HDR from focus_pos.
commit 0594238004f116274905fa0ed7c2b6c417ed1d29
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:14:10 2020 +0200
Proper HDR from point lights.
commit 48c93d2b41ce5743103d18e76cc228f5ac766492
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 14:01:43 2020 +0200
Brighter ambiance, darker LOD shadows.
commit e0452e895ccfa8a43f368cae3b8b8aedc24dad93
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 13:13:23 2020 +0200
More proper HDR.
commit 4c6da3ed16cfeebb455e40da5f557b4af9a499d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 00:13:10 2020 +0200
Trying LOD noise.
commit 682a3d74c85df5503ffe1fc1cc891bce789df1ad
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 23:11:08 2020 +0200
Fix LOD heights in towns.
commit cc39e5734e8b18f9077bf42e66337c1319dd6b6e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 21:01:23 2020 +0200
More LOD fixes.
commit 8116b21c2e51c836e77894e309ac273caf2917b3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:54:43 2020 +0200
I like this coloring.
commit bc2560ea90b36f4b46190005344232d993043ac3
Merge: 14effdd5d e690efe71
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:48:33 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 14effdd5db8747fcf3eb34f03b46b7792e92d1c5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:24:35 2020 +0200
Re-saturate.
commit 48a643955d4435b78179acba0beb4a979905cc31
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:23:57 2020 +0200
Various fixes.
commit f7b497a0c25f4ad4682c71dd1ed6f608052feb9b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 03:22:49 2020 +0200
Render figures again.
commit 44e4aad48deba8266b9f8bdfd3db096b381f5327
Merge: e6f0a5a98 9ec319a18
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 02:01:04 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit e6f0a5a981a82533ba188fff0a54ce98577bb152
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 24 16:12:20 2020 +0200
Add atmospheric scattering.
commit f2953087f691a8edbc001cb98ebf5059fc6f8ac0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 23 00:01:20 2020 +0200
Fix shadowing for specular reflections.
commit ddd4a67a9799b8d08c7dc0c2bec90621c2bed0e3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Apr 22 22:56:12 2020 +0200
HDR fixes.
commit 1015e60deef3c447381996277df7496707a63bd0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 21 18:25:19 2020 +0200
More lighting changes.
commit 80c264abd111fb237e57843efcb5c071d4f84613
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 13 00:29:59 2020 +0200
Lighting experiments.
commit 8414987e589dd5102bad89762a3adaccc0bfe957
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 9 02:38:40 2020 +0200
WIP -- lighting changes and soft shadows.
commit 9cd2b3fb0d6b49776c6dfe463e4169637250b11a
Merge: c7ea687eb 8b149ad11
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:29 2020 +0200
Merge branch 'sharp/new-lighting' into sharp/small-fixes
commit c7ea687ebbc5aace1b455f134a5bf49ce2c7434a
Merge: 476441531 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:02 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 8b149ad11ad4bb75018fcf9519baec27d1c95951
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:32:39 2020 +0200
Trying out a new lighting model.
commit b0ac9f36f755dd06f7c17c46150568064790864f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 07:56:11 2020 +0200
Use bicubic interpolation for terrain.
commit f6fc9307a121514b614bc50ef8eb055953e7da8a
Merge: 33140a295 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 05:01:41 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 4764415312aae6e9ac2d00e86e84577cb958f1ab
Merge: ed2d0111d 13388ee6a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 04:54:48 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 13388ee6a42943f3f79a9cb488346cef18e272fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 20:30:08 2020 +0200
Various fixes (to coloring and to soft shadows).
commit fbd084a94a067082a87cd6d28b82054709bc9265
Merge: 5a089863b 4fdf6896a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 18:50:38 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/map-colors
commit ed2d0111d994262ae836d84d1fe5a45e4de72a0b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 06:49:27 2020 +0200
Combining colors and LOD.
commit 88342640c6b835114d01c797b89fdede3b0a2108
Merge: 33140a295 5a089863b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:49:20 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 33140a2951b8212725f42c758b277aaec4d888f7
Merge: 4c65a5aed f34d4b379
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:36:21 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 5a089863beb01d4794bbe3580ada47b278715ea2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 03:17:49 2020 +0200
Making maps brighter.
This is probably not the right way to do it, but oh well!
commit 32b2c99109dd486aa922886081068f9c550c83f2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 02:46:36 2020 +0200
Horizon mapping and "layered" map generation.
Horizon mapping is a method of shadow mapping specific to height maps.
It can handle any angle between 0 and 90 degrees from the ground, as
long as know the horizontal direction in advance, by remembering only a
single angle (the "horizon angle" of the shadow map). More is explained
in common/src/msg/server.rs. We also remember the approximate height of
the largest occluder, to try to be able to generate soft shadows and
create a vertical position where the shadows can't go higher.
Additionally, map generation has been reworked. Instead of computing
everything from explicit samples, we pass in sampling functions that
return exactly what the map generator needs. This allows us to cleanly
separate the way we sample things like altitudes and colors from the map
generation process. We exploit this to generate maps *partially* on the
server (with colors and rivers, but not shading). We can then send the
partially completed map to the client, which can combine it with shadow
information to generate the final map. This is useful for two reasons:
first, it makes sure the client can apply shadow information by itself,
and second, it lets us pass the unshaded map for use with level of
detail functionality.
For similar reasons, river generation is split
out into its own layer, but for now we opt to still generate rivers on
the server (since the river wire format is more complicated to compress
and may require some extra work to make sure we have enough precision to
draw rivers well enough for LoD).
Finally, the mostly ad-hoc lighting we were performing has been (mostly)
replaced with explicit Phong reflection shading (including specular
highlights). Regularizing this seems useful and helps clarify the
"meaning" of the various light intensities, and helps us keep a more
physically plausible basis. However, its interaction with soft shadows
is still imperfect, and it's not yet clear to me what we need to do to
turn this into something useful for LoD.
commit f8926a5737ddc51f3d585c651a64c43677aae0f4
Merge: a1aee931e 875ae6ced
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Mar 13 13:32:42 2020 +0100
Merge remote-tracking branch 'origin/master' into sharp/map-colors
commit 4c65a5aed353b119aea65a2aaeb94549b67beb42
Author: Treeco <5021038-Treeco@users.noreply.gitlab.com>
Date: Mon Feb 24 16:48:05 2020 +0000
Made LOD setting slider exponential
commit 2fa7b2d20d7233dc8bfd64f9f7f54617575248f1
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 17:49:53 2020 +0000
Added mist to LoD
commit aab059a450b5f635777129ff82cc15b662965c3c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 15:14:06 2020 +0000
Added LoD slider
commit 779c36b538121c5ade3633ae5cb67bb14c8c3877
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:54:55 2020 +0000
Reduced cost of vertex pushing
commit 9fea150473906b166365b738ebcea07c697daf3d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:38:53 2020 +0000
Fixed maths, improved LoD resolution
commit 5481df38fea5bf183ff376a3337179cfaa5233dc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 11:22:50 2020 +0000
Dynamically relocate LoD vertices to enhance details
commit a3e36a50ababd615da7db1b26158c7906a5def01
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 18:13:51 2020 +0000
Simpler terrain spiral rendering
commit 255f450ae9ac8763db4bede075fb409161ed57cc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:53:17 2020 +0000
Better LoD precision
commit 3d027aebe812a5b8658a4eb8123dc9f61b3776d2
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:04:03 2020 +0000
Better falloff
commit be775c9484b457b2c0b1a494aec03392d0c70e76
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 15:30:45 2020 +0000
Applied good ideas from experimental branch
commit 58587b68545a23c5c04ab4574a4b94b3bc982246
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 16:15:13 2020 +0000
Minor fixes to LoD merging
commit 7b42aebd709c14df2db766aad61d9280ad24d84d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 15:04:44 2020 +0000
Capped LoD dragging
commit 8aafc559f87124e1ea5ca6e3ddc2aa0c242d793c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:54:37 2020 +0000
Better blending between LoD and terrain border
commit edd3455d5161792d87ddc8eadc0ecbad5532b284
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:40:19 2020 +0000
Fixed LoD z depth, added sea level offset
commit b9b06744620114dd5556e73f64fa93c145503a7c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:27:43 2020 +0000
Better LoD smoothing
commit a1aee931e790431560cd2d953ad61d9497072afd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Feb 21 14:52:17 2020 +0100
Adding shadows.
commit 2400786c13dd891c131ed86d48d05df516a8a778
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 13:48:40 2020 +0000
Use world map as LoD source
commit dbf650f504a4c25fbbc2096ac3616c736bf52d23
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Jan 20 00:48:14 2020 +0000
Better clouds at distance
commit 5e6f81b86cdb9730b9b056877b19257075fd5fa8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Jan 19 23:59:02 2020 +0000
sync
commit 745e7540ddb000cc645f612767b337c2ddc3f7c0
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 12:40:48 2019 +0000
Improved cloud falloff mist, faster noise sampling
commit f6a200d0cb866196ba57697466755f9e0c7ea5d8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 10:09:00 2019 +0000
Improved long-range depth precision, removed unnecessary LoD polygons
commit 63d1b2bb2292898d59fb4f4e502201103dfeb86f
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 20:57:46 2019 +0000
Working LoD shader
commit f13d98ee3e58f881e8b978861a67663b59ed91ec
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 11:03:40 2019 +0000
LoD first attempt (stack overflow issue)
2020-08-20 18:34:59 +00:00
|
|
|
|
uniform_noise(map_size_lg, |posi, _| {
|
2019-11-07 20:25:30 +00:00
|
|
|
|
if pure_water(posi) {
|
|
|
|
|
None
|
|
|
|
|
} else {
|
2020-02-01 20:39:39 +00:00
|
|
|
|
// A version of alt that is uniform over *non-water* (or
|
|
|
|
|
// land-adjacent water) chunks.
|
2019-12-03 18:14:29 +00:00
|
|
|
|
Some(alt[posi] as f32)
|
2019-11-07 20:25:30 +00:00
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
|| {
|
(See sharp/lod-history) LOD, shadows, greedy meshing, new lighting, perf
---
Pretty much a Veloren fork at this point. Here's a high level overview of the changes (will be added to CHANGELOG just before merge).
At a high level this MR incorporates roughly two groups of changes.
The first group consists of new game features: more flexible map sizes, level of detail terrain, shadow maps, and a new lighting
engine. This is "feature work" that (mostly) only adds new things to Veloren, and mostly shouldn't affect old stuff.
The second big group of changes are those addressing the fallout from all the new features. These include performance fixes of
various sorts: the addition of multiple graphics options and optimization of the cheap ones to avoid work, switching all voxel
models to use some variant of greedy meshing, switching over much of our CPU-side vector math to exploit SIMD instructions
(coinciding with a fork of `vek`), and a rewrite of how the UI handles text rendering (coinciding with updates to our fork
of `conrod`). Making Veloren's hardcoded colors appear correct under the new lighting engine also required considerably
changes (TODO: Fill in this section when it's complete).
The second category of changes often heavily touches code owned by other people, including frequently modified code "owned" by a
handful of people, so I recommend that this code be reviewed particularly carefully.
---
At a high level (each will be described in more detail below):
- The world map has been refactored.
- The world size is no longer hardcoded (@zesterer).
- The map generation code was made generic to allow using it outside of the `world` crate (@zesterer).
- On world creation, we now compute *horizon maps* (@zesterer).
- The way we pass the world from the server to the client has been updated (@xMAC94x).
- Artifacts related to image rotation were fixed (@imbris).
- Multiflow rivers were enabled (@zesterer).
- In the process of making changes related to the world map, various incidental fixes and optimizations were required.
- The new *level of detail* feature was added (@zesterer wrote part of this and has checked out the rest).
- A new LOD terrain rendering step was added to the pipeline.
- The LOD terrain quality was made configurable via a graphics setting.
- Horizon maps were used to cast shadows from LOD chunks on both LOD and non-LOD terrain.
- A "voxelization" effect was incorporated into rendered LOD terrain to make it blend better into the world.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Veloren's lighting has been completely overhauled (@zesterer has already checked most of this out).
- A semi-accurate index of refraction was assigned to our materials.
- A new, more realistic, physically based approach to lighting was used using the *Ashikhmin Shirley* BRDF.
- We emulate *atmospheric scattering* using equations designed for measuring solar panel light exposure.
- We attempt to compute *realistic light attenuation* in water using its real material properties.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Point and directional lights now cast realistic shadows, using *shadow mapping.* (@imbris, @zesterer, @Treeco, @YuriMomo)
- Point light shadow maps were added to the rendering pipeline, using geometry shaders and *seamless cube maps*.
- Directional light shadows were added to the rendering pipeline, using LISPSM together with disabling *depth clamping*.
- "Shadow-only" chunks and NPCs were added to prevent shadows from models behind you from disappearing.
- In the process of making changes related to shadow maps, various incidental fixes and optimizations were required.
The addition of shadow maps, LOD terrain, and the new lighting all led to significant performance degradation, on top of other
changes happening in master. Therefore, a large number of performance improvements were also needed:
- The graphics options were made much more flexible and configurable, and shaders were optimize.
- New options were provided for how to render lights and shadows (@Pfauenauge, @zesterer).
- Graphic setting storage and configuration were overhauled to make adding new features easier (@Pfauenauge, @imbris).
- Shaders were rewritten to utilize GLSL's preprocessor to avoid overhead (@zesterer, @YuriMomo).
- In the process of making changes related to providing additional rendering options, various incidental fixes and optimizations were required.
- Voxel model creation was switched to use *greedy meshing.*
- A new voxel meshing method, greedy meshing, was added (@imbris).
- Uses of the older meshing methods were migrated to use greedy meshing (@imbris, @jshipsey, @Pfauenauge).
- New restrictions were added to terrain, figure, and sprites to future proof them for further optimizations (@jshipsey, @Pfauenauge, @zesterer).
- Most positions are now relative to either chunk or player position for better precision (@imbris, @zesterer, @scottc).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- Animation and terrain math were switched to use SIMD where possible.
- Fixes were made to vek to make its SIMD feature usable for us (@zesterer, @imbris).
- The interface and types used in bone animation were changed in various ways (@jshipsey, @Snowram, @Pfauenauge).
- Redundant code generation for body animation is now partly taken care of by a macro (@jshipsey, @Snowram, @Pfauenauge).
- Animation code was modified to to use vek's SIMD representation where possible (@jshipsey, @Snowram, @Pfauenauge).
- Terrain meshing code and shadow map math were also modified to use vek's SIMD representation (@imbris).
- SIMD instruction generation was enabled (@YuriMomo, @jshipsey, @Snowram, @imbris, @Angelonfira, @xMAC94x).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- The way we cache glyphs was completely refactored, fixed, and optimized.
- Our fork of `conrod` was optimized in various ways (@imbris).
- Our fork of `conrod` now exposes whether a widget was updated during the current frame (@imbris).
- Our use of the glyph cache was rewritten for correctness (@imbris).
- A *text cache* was introduced that lets us skip remeshing glyphs that have not changed (@imbris).
- Various changes were made to reduce pressure on the glyph cache, with more planned (@imbris, @Pfauenauge).
- In the process of making changes related to the glyph cache, various incidental fixes and optimizations were required.
- Colors were changed to keep Veloren's look consistent with master.
- Some older tree models were brought back (@Pfauenauge).
- TODO(@Sharp): All hardcoded colors were extracted and made hotloadable.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Hardcoded colors were fixed to conform to Veloren's style.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Color models were fixed to conform to Veloren's style.
A detailed description of the involved changes follows.
---
- The world size is no longer hardcoded. All functions dependent on world size now take a `WorldSizeLg`, which holds the base 2 logarithm of each actual world dimension and is guaranteed to maintain certain properties (outlined in `common/src/terrain/map.rs`). Additionally, many utility functions that utilize the world size were moved into `common` as well (mostly `common/src/terrain/mod.rs`). Finally, the world map format was updated in order to store its size explicitly, with a migration path from the old format that should work whenever the old formatted map was a square (practically always). See `world/src/sim/mod.rs` for these changes.
- The map generation code was made generic to allow using it outside of the `world` crate. The parts of the map generating code that do not need to query the world were moved over to `common/src/terrain/map.rs`, allowing them to be used from the client without creating a dependency on `world`. The rest of it was turned into helper functions in `world/src/sim/map.rs`, which can be passed as closures to the generic map generation code to complete its construction. This also means that colors are now passed in separately to the map generation function. See <https://veloren.net/devblog-78/> for more details.
- On world creation, we now compute *horizon maps*. See the function in `world/src/sim/util.rs`.
Given a height map and a plane intersecting that height map, our horizon maps allow us to encode enough information to reconstruct shadows for each point on the height map using only the *horizon angle* (the angle at which the sun starts to become visible). As Veloren's sun only covers one plane, this is sufficient for encoding sun shadows for LOD terrain, by encoding two angles per chunk (one for each 90 degrees the sun covers). We can also use this for the moon, if we want, since the moon follows the same path. Additionally, we store the *height* of the furthest occluder, to try to make the shadows volumetric; so this means 4 bytes in total for each chunk.
Support for horizon maps has been merged into the map functionality in common as well.
- The way we pass the world from the server to the client has been updated. Rather than passing the prerendered map, we instead pass three maps with values for each chunk; one with the color information, a second with altitude information, and a third with horizon map information. We then reconstruct the map on the client, together with some additional information we send from the server (like the sea level and maximum height). See `common/src/msg/server.rs` for a detailed description of the format of `WorldMapMsg`, and `server/src/libr.rs` and `client/src/lib.rs` for details of the map construction and parsing.
- Artifacts related to image rotation were fixed. See the commit message for commit SHA `cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e` for a detailed explanation. This involved changes to shaders, the addition of a new type of graphic (also reflected in the graphic cache) that allows specifying a border color (which automatically makes the associated texture immutable), and some related fixes. I reproduce the first two paragraphs of the MR description as well:
```
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
```
- Multiflow rivers were enabled.
This does not really need to be part of this MR, and would be easy to revert, but since it seemed to provide a nice improvement it's currently packaged with it.
We already computed multiple outflows from each chunk for erosion purposes long before this MR.
However, we never modified river rendering to be able to handle this case (just a single downhill river flow is complex enough!) so this was not exposed when deciding which chunks were rivers.
Now that
- In the process of making changes related to the world map, various incidental fixes and optimizations were required. Some examples of fixes include making sure terrain is never lowered to below sea level (to make the shadow maps report correct values), fixing map altitudes and colors to understand things like cliffs and "block level" coloring (that doesn'te xist on the column level), and fixing a crashbug when rendering images for the UI where source pixels are strongly rectangular. Some examples of related performance fixes include avoiding allocating a fresh vector for all the maps (i.e. copying it over to change the format from `[u32; n]` to `DynamicImage` and then copying again to convert to `RgbaImage`), and instead using the `gfx::memory::slice` function to accomplish the same thing. These sorts of changes are spread all arond the code.
This includes the additon of a new scene, `voxygen/src/scene/lod.rs`, a new pipeline `voxygen/src/render/pipeline/lod_terrain.rs`, and new shaders `assets/vxygen/shaders/lod-terrain-vert.glsl` and `assets/vxygen/shaders/lod-terrain-frag.glsl`, as well as associated changes to the renderer in `voxygen/src/render/renderer.rs`.
The main idea behind our initial approach to LOD was to take the world data we now get from the server (altitude, color, and horizon mapping).
- Some previously computed values were turned into shader uniforms for better prediction on weak processors. (@zesterer)
- Calls to power or trig functions were removed or replaced with multiplications, where possible.
- After some deliberation
- To properly handle sprite "waving" for nearby sprites,
We explicitly designed the greedy meshing system with figures and sprites in mind.
In both cases, we want to be able to *efficiently* pack many different models into the same texture, especially in cases where we know
we will either not be removing any of the grouped-together from the models from the texture, or will remove all of them at once (so
they can be packed into some specific subtexture).
For sprites, since we know every model in advance and never intend to deallocate them, we currently pack them all as efficiently as
possible into one giant tetxure atlas. However, in the future we might opt to pack them slightly less efficiently in exchange for
shrinking the sprite vertex size.
For figures, we pack all the textures for each *model* into the same atlas.
is a global texture atlas used for every sprite, and for figures which is why we have the ability to mesh multiple
models to the same texture area (using the simple texture atlas allocator) without requiring intermediate vector allocations.
This is accomplished by delaying the time when we actually write the color and light data to the texture until *after* all the
model vertices have been meshed; then, we can just allocate the whole color/light array at once, making the atlas we use an
exact fit. In computer science-y terms, we accomplish this delay by, after we perform the initial greedy meshing (without
texture information), not continuing to create the texture data, but instead constructing a *continuation*--that is, a function
that, when called, will execute the rest of the computation. We push this continuation (which in Rust terms is a `FnOnce` closure
that takes the `ColLightsInfo` that it is supposed to write to as context) onto a
onto a vector
resizing. To allow for suspended writes to texture data, Rust pointed out to me that the continuation that would eventually write the color and light data to the texture atlas (the one that is shared by all models sharing the same greedy mesher) would have to *own* whatever data it mshed. Because we often generate the model data to mesh as a temporary in `voxygen/src/load.rs`, the
- Matrix multiplications in the shader were reduced for figure data (@zesterer).
- Vertex "waves" for fluid data were removed.
- Terrain "bending" near edges was removed.
- Scaling was fixed to make sure empty space was not introduced in a space previously occupied by a block. It was also changed to take ownership of its voxel data,
rather than sharing it, to let it be used with meshing.
- Rust's nightly version was bumped in order to use the `array_map` function, which lets us reuse more code between the simple map and `FigureModelCache`.
- PositionedGlyph::standalone.
---
I tried to cite sources in many cases[^realtime],[^lloyd],[^lispsm],[^pbrt],[^greedy],[^tjunctions]
where I needed features from elsewhere but I am particularly grateful for the following resources,
esepcially where they have accompanying source code. I linked all of them that are accessible to the public (those that are not were
obtained through legal means).
[^realtime]: Eisemann, Elmar, Michael Schwarz, Ulf Assarsson, Michael Wimmer. Real-Time Shadows. A K Peters/CRC Press (T&F), 20160419.
[^lloyd]: Lloyd,B. 2007. [Logarithmic perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). PhD thesis, University of North Carolina.
[^lispsm]: Wimmer, M., Scherzer, D., and Purgathofer, W. 2004. [Light space perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). In Proceedings of Eurographics Symposium on Rendering 2004, pp. 143– 152.
[^pbrt]: Pharr, Matt, et al. [http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf](Physically Based Rendering: From Theory to Implementation). Third edition, Morgan Kaufmann Publishers/Elsevier, 2017.
[^greedy]: mikolalysenko. “Meshing in a Minecraft Game.” 0 FPS, 30 June 2012, <https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/>.
[^tjunctions]: blackflux. “Meshing in Voxel Engines – Part 1.” Blackflux.Com, 23 Feb. 2014, <https://blackflux.wordpress.com/2014/02/23/meshing-in-voxel-engines-part-1/>.
I am also especially grateful to Khronos, Wikiepdia, and stackoverflow for answering many of my specific questions while writing the MR.
---
Squashed commit of the following:
commit 300505e7305a2fdac722a808ee8538323f215f39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 18:46:25 2020 +0200
Fixing cargo doc and typo in CHANGELOG.
commit ec0aeb18e8499d7d84ef818331b4b65c3d76cea6
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 15:38:50 2020 +0200
Hopefully final commit for the LOD branch.
commit 5e8ea0b1eaac02903a02feb2eb038d195de4872f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 10:14:26 2020 +0200
Falling back to power as stopgap.
commit e44a1cbf46504ee9931a01bdc9033e145500d557
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 09:25:41 2020 +0200
Address imbris feedback.
Temporarily disables shiny water, lowers max VD.
These restrictions will be lifted soon after merging.
commit 561e25778a108ac3712f5ec2ce3a51234c4430d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 08:31:13 2020 +0200
Tweaking shaders a bit.
commit 7d19259078ce0dd7b3742ad7d0cb3fab3ece3fdc
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:59:43 2020 +0200
Fix view example as well.
commit 051cd4934e0fad2c0b15db4380a4189fa318679f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:29:06 2020 +0200
Fix meshing benchmark.
commit c95e07db3b4dcca285678985e65e31b927cb1c61
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 05:46:22 2020 +0200
Address MR feedback, fix scene clouds.
commit 1bfb816cabdb3ffc1e507a009c2d98696b4b573a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:39:36 2020 +0200
Incorporating Pfau's figure color changes.
New eyes and new humanoid colors.
commit 3f9b89a3ac7b3356b1dba0d1a8f6541357f81469
Merge: e2f5162e4 62c53963a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:29:41 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit e2f5162e4f96f4124aa43488f7245d341b3dcfd4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:28:38 2020 +0200
World colors are all hotloadable.
They live in assets/world/style/colors.ron.
Only a small handful of hardcoed colors remain in World; they are either
part of the map, or difficult to disentangle from the rest of the
computation. Comments are made where appropriate.
commit 62c53963abe1975009d34a8f9515a355bef24f31
Author: Marcel Märtens <marcel.cochem@googlemail.com>
Date: Wed Aug 19 15:59:00 2020 +0200
replace pretty_env_logger with tracing
commit 5b1625f99d9586fe80e2232f583ec5af9f953099
Merge: d71003acd 4942b5b39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:15:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit d71003acdabeff970b3928e97c26af6847b5b78e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:14:34 2020 +0200
Hotloading colors, part 1: colors in common.
Currently, this just entails humanoid colors. There are only three
colors not handled; the light emitter colors in
common/src/comp/inventory/item/tool.rs. These don't seem important
enough to me to warrant making hotloadable, at least not right now, but
if it's needed later we can always add them to the file.
commit 63b5e0e553eb2ea49276f192a6fc7dd65254270d
Merge: c32b337a4 6d2c4b9c1
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 13:05:37 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c32b337a46e10d9de473d178a94a3ccd61c39bb3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:52:04 2020 +0200
Fixing LOD grid, for real.
commit a166ae0360395387e09fb35a1f84210c2ce5ec24
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:28:05 2020 +0200
Addressing imbris's initial feedback.
Fixes two minor bugs: explosion particles were no longer spawning
randomly, and LOD grids were not perfectly even.
commit 4cbad004f44060994252dd3d38647a14a589712f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:27:58 2020 +0200
Bumping nightly per request.
commit 548680276aac77c25d43d16b5622f847d474dbef
Merge: acc098604 8f8b20c91
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:26:06 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit acc0986040589a3492f88a740bc3c3fc693b26d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:28:32 2020 +0200
Lower resolution due to lying drivers.
commit d3b878de2a52c358d2944a6bbd0555dad7fbdb10
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:15:38 2020 +0200
Fix issues msh encountered with Intel 4600.
commit 10245e0c1b0cb6fae10d86409435364edc6102ef
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 21:15:02 2020 +0200
Merge more models into one mesh than we did previously.
commit 3155c31e663c52ae5c3a53d5fb5665892a1a498a
Merge: 7204cc8a7 3c199280e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:35:22 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7204cc8a7a4f74a30306bd205d9834fee4bb944f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:34:43 2020 +0200
Fix not yet done NPC animations.
This forces them all to be the idle animation if not specified.
This fixes issues where you'd have giant NPCs in water.
commit bc83360f2a08918f19d417b5f772e1ff554dba08
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 19:36:37 2020 +0200
Try to fix some bugs:
- Z fighting with LOD terrain and water.
- Audio SFX not playing.
commit 1fd104aa603bf3781b6526a5cada46aeca3049dd
Merge: 862df3c99 7c2c392a3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 12:02:31 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 862df3c9976c4da9bd7cfd784f1a85973127968a
Merge: 0a4218ed9 75c1d4401
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 05:52:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0a4218ed9d541a2b34c133351bea38a99ddf4ea7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 22:27:14 2020 +0200
Fix particle depth.
commit f51dfdeb442d0dd5243dd2f344fa4be295bd0875
Merge: c6251a956 5e6dc0471
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:19:04 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit c6251a956ad376400dca5c23420cf8d213dc8fdf
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:15:46 2020 +0200
Cache figures more intelligently.
Cache figures for longer, and don't cache character states for the
player except where they actually affect the rendered model.
commit 0ed801d5404982c6fb63b1eaa4567d908b294c9d
Merge: c11b9bdf0 eea64f78f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 16:32:24 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c11b9bdf0a53bf9884d2f5a48fec9b01d582df1a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 11:47:15 2020 +0200
Remove unneeded Clippy annotation.
commit 16aa9ef40af56d69289d00aafb3deadfb8bd4f35
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 8 00:53:02 2020 +0200
Fix hotloading and Clippy.
commit 3dc973e0be5b758da1e9805eb764ad401374cd0c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 23:50:27 2020 +0200
Major speedups with SIMD.
commit fba64a7d93d5a96077ce87287bbce6ab9b7fbcae
Merge: 76429d00e d1e10b178
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:19 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 76429d00eea00d212fbd672a84ee91e75b19b938
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:10 2020 +0200
Add clippy.toml.
commit c79f512f84dbb83cb82b7954db68ff241dfd8e41
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 11:55:20 2020 +0200
Fix all clippy issues, clean up Rust code.
commit 6f90e010b3fbefb53b0d632e819931350015b6b8
Merge: 77a8c7c26 5929cfa5c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:30 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 77a8c7c267d3f44a1a62bd6b2274359973c5e4d4
Merge: b44e44232 44febaabd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:10 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 5929cfa5c713aa392110bbb62407f76caf53c3df
Author: jshipsey <jshipsey18@gmail.com>
Date: Thu Aug 6 20:47:27 2020 -0400
fixed in-hand arrow bug
commit b44e442325d828f1cd564d66908f89d09e80474b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 6 13:40:35 2020 +0200
Miscellaneous performance improvements.
commit be37acf287c1360d8085862526ac3365ffd1d768
Merge: 125d7fc6c c11876547
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 05:49:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 125d7fc6c4dcd8c8c5f27b8268a4d64f409f3644
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 04:55:31 2020 +0200
Abstract over simd vs. repr_c vectors.
Also some minor improvements to Event size.
commit d4d4956e9252e1241ce110b2aa85076c6b1e2a23
Merge: 5f3b7294a aced5f979
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:56:54 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 5f3b7294af1f8533edc2620b58863c248e2b07af
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:43:52 2020 +0200
Fix formatting issues I missed before.
commit a428a3ebba70dcab63dd0f8cd983120c90617271
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:41:51 2020 +0200
Fix clippy warnings, part 1.
There aer still a bunch of type too complex and
function takes too many arguments warnings that I'll fix later
(or ignore, since in the one case I did fix a function takes too
many arguments warning I think it made the code *less* readable).
commit ba54307540ed8a937ac08209730284fc653af85b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 30 13:22:42 2020 +0200
Fix light animations so they are removed when the light turns off.
commit 7e0f4bcbf0f4717145d8beac40d52e3acebbe2aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 21:10:20 2020 +0200
Fix crash in edge case for pixel art.
commit 56da06f7a351e2b949e9b014a90b974d511a0924
Merge: cf74d55f2 9f53a4a19
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:56:52 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:29:52 2020 +0200
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
The first concern was addressed by fixing the dimensions of the map
images drawn from the UI (so that we always use a square source
rectangle, rather than a rectangular one according to the dimensions of
the map). We also fixed the way rotation was done in the fragment
shader for north-facing sources to make it properly handle aspect ratio
(this was already done for north-facing targets). Together, these fix
rendering issues peculiar to rectangular maps.
The second and third concerns were jointly addressed by adding an
optional border color to every 2D image drawn by the UI. This turns
out not to waste extra space even though we hold a full f32 color
(to avoid an extra dependency on gfx's PackedColor), since voxel
images already take up more space than Optiion<[f32; 4]> requires.
This is then implemented automatically using the "border color"
wrapping method in the attached sampler.
Since this is implemented in graphics hardware, it only works (at
least naively) if the actual image bounds match the texture bounds.
Therefore, we altered the way the graphics cache stores images
with a border color to guarantee that they are always in their own
texture, whose size exactly matches their extent. Since the easiest
currently exposed way to set a border color is to do so for an
immutable texture, we went a bit further and added a new "immutable"
texture storage type used for these cases; currently, it is always
and automatically used only when there is a specified border color,
but in theory there's no reason we couldn't provide immutable-only
images that use the default wrapping mdoe (though clamp to border
is admittedly not a great default).
To fix the maps case specifically, we set the border color to a
translucent version of the ocean border color. This may need
tweaking going forward, which shouldn't be hard.
As part of this process, we had to modify graphics replacement to
make sure immutable images are *removed* when invalidated, rather
than just having a validity flag unset (this is normally done by
the UI to try to reuse allocations in place if images are updated
in benign ways, since the texture atlases used for Ui do not
support deallocation; currently this is only used for item images,
so there should be no overlap with immutable image replacement,
so this was purely precautionary).
Since we were already touching the relevant code, we also updated
the image dependency to a newer version that provides more ways
to avoid allocations, and made a few other changes that should
hopefully eliminate redundant most of the intermediate buffer
allocations we were performing for what should be zero-cost
conversions. This may slightly improve performance in some
cases.
commit ad18ce939940a8c697270f6e9b94db9942fd8295
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 13:21:09 2020 +0200
Fix continent scale hack.
commit 36b1cb074f5b195aebd7dbbc3da7f0246a1a18ec
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 12:11:40 2020 +0200
Enable loading different sized maps without a recompile.
We may want to tweak the effects of the continent_scale_hack.
commit 13b6d4d534cc4814b7cb3294ca41bbfea0a6b186
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 10:55:48 2020 +0200
Removing WORLD_SIZE, part 1.
Erased almost every instance of WORLD_SIZE and replaced it with a local
power of two, map_size_lg (which respects certain invariants; see
common/src/terrain/map.rs for more details about MapSizeLg). This also
means we can avoid a dependency on the world crate from client, as
desired.
Now that the rest of the code is not expecting a fixed WORLD_SIZE, the
next step is to arrange for maps to store their world size, and to use
that world size as a basis prior to loading the map (as well, probably,
as prior to configuring some of the noise functions).
commit 30b1d2c6428230a9eaa0d749cdcbbd6f1cbccd78
Merge: 7d56ba31b 1377b369f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:58 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 7d56ba31b445441461b28a07fc495d7d4f047c17
Merge: 2101113b4 598f14b25
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 1377b369f6db2258e910d467a5740f31789e3ded
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sun Jul 19 23:25:38 2020 +0200
more saturated pumpkins
commit ae8d50527f93bb0616c2ad46ce4dacb63bc37c6d
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sat Jul 18 20:29:56 2020 +0200
acacia models
commit 2101113b467e691de787392d7f20f1745f5637bd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 18 18:55:25 2020 +0200
Higher detail LOD.
commit add2cfae04b4385fa5590e11e2bd5229d9dee0aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 16 01:57:39 2020 +0200
Revert some irrelevant stuff.
commit 2e2ab3dc1eaa59a4aef7f8d34a53d8aae4c8553a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 15 13:30:49 2020 +0200
Fixing various things about shadows.
* Correcting optimal LISPSM parameter.
* Figure shadows are cast when they're not visible.
* Chunk shadows stay cast until you look away.
* Seamless cubemaps for point lights.
* Etc.
commit 6c31e6b56217274285b597af297036691ea5d897
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 19:50:26 2020 +0200
Fix shadow creation.
commit 6332cbe006115ae205597529cd8bbccd146c2cca
Merge: be438657c 930e0028b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:47:00 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit be438657c33d7b5bfb0a9582c3ed3fd366637323
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:28:08 2020 +0200
Tweaks to shadows.
Added shadow map resolution configuration, added seamless cubemaps,
documented all existing rendering options, and fixed a few Clippy
errors.
commit 23b4058906013c7d2a40c286e20e32c5fbd897ed
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 10:11:19 2020 +0200
Fix moon, use nonlinear noise for terrain.
Note that the latter has a bit of performance cost.
commit 7fbe5cbfbb9dc29607957b8e62f432a4deed193d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:23:02 2020 +0200
Address lies about max texture size.
commit bcfc62b5e13a1cdd83f57535fde4694720bebfd9
Merge: 75e3626a7 18a08e8fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:22:08 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 75e3626a785919f43fdcf2127c2b10e3e4df2f9f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:21:52 2020 +0200
OpenGL 3.3 minimum.
commit 18a08e8fe2739f02af99a5d2cb4e7c38c49e858b
Author: Monty Marz <m.marzouq@gmx.de>
Date: Tue Jul 7 23:57:52 2020 +0200
settings localization
commit 90c5d1ca3620092bc3ae10b2211489eb1cf6f5e8
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 21:11:48 2020 +0200
Lower near distance.
commit 0e66f02b25aaddaa2dfddbbc89cd67de54a9a7b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 20:09:01 2020 +0200
All sprites sway in the wind now.
commit db1401a6910bf42dcf502462c90038752ff5fbdb
Merge: 69e508d8c e8b4b29d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 19:34:17 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 69e508d8c94d8973033817ca86f357e466fc7c4d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 18:41:37 2020 +0200
Make it easy to switch to SIMD for math.
commit ffe0f5928c7a7e87d00cb5426b3b1d831d7e02fd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 21:21:12 2020 +0200
Fix some issues with underwater rendering.
commit bfda6da42f38fd02c31ee92c81ab785a3e50c2a0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 19:17:59 2020 +0200
Fix some minor display issues.
commit 0ed752e087968cf901301884aaeae698e32ef8a5
Merge: ccc6a06a8 518edcb85
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:14:21 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit ccc6a06a8d4504d6b9f7af7905a414d2ee06ab76
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:04:34 2020 +0200
Some minor changes.
commit 4e020246702889269efe1a191788992164c508d6
Merge: 50a64d927 e05c9267a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 16:17:40 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 50a64d927e6c4f4b0e4688e4cbfca694bc3f922a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 13:07:03 2020 +0200
Fix far plane.
commit 7dd06da34cae8f9ea3b6c889fe965181f3fd3949
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:25:35 2020 +0200
Add shadows.glsl.
commit 618a18c998778bf871b905a74657440fcc384c80
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:10:22 2020 +0200
Adding shadows, greedy meshing, and more.
commit eaea83fe6a5cb1cb0ba8beef888183c718258496
Merge: 267018495 2f89b863e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 22:47:07 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 2670184954a13e4a9e7a4e35ba79aac0c5fac2f7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 21:20:01 2020 +0200
Make civsim and sites deterministic.
For anything in worldgen where you use a HashMap, *please* think
carefully about which hasher you are going to use! This is
especially true if (for some reason) you are depending on hashmap
iteration order remaining stable for some aspect of worldgen.
commit f8376fd5dc72b4a9c2f51a6b4570d59c8b8e9343
Merge: 654f7e049 cdee191dd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 17:53:57 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 654f7e049258d9da27c09608bbe6a46ffa8787e5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed May 20 21:22:30 2020 +0200
Correct backface culling.
commit 560501df05ca725409b0f2e4eb31bdfdc15fd0c7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue May 19 17:22:06 2020 +0200
Greedy messhing for shadows.
commit a4d87e1875ca543436e6bbbeb20348facc5a52d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun May 17 05:59:00 2020 +0200
Shadow maps work for lantern.
commit 243d0837b8a3b08172c9a3c348d964d7ddc2a0a8
Merge: 04382dc28 71dd520cd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:53:13 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 04382dc28632b6c66e8821f6870c0daaa1c1901a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:22:17 2020 +0200
WIP: better graphics config, better LOD, shadow maps.
commit 22ddbad3eb32bfa70f0932176022208fe67ded81
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 18:54:09 2020 +0200
Minor shader fixes.
commit 746a10e8d01ac235f994b0cde78fa48998602a1f
Merge: 0f4a0e763 40ab94673
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 04:02:09 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0f4a0e763db3afbdc4fb0558611f38326ca87151
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 23:03:24 2020 +0200
Switch back to pop-in terrain.
commit dd74fa7e4a53667b38811d7aec58d7f6a68889bb
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 22:58:55 2020 +0200
LOD shading closer to voxel shading.
commit ef67bd58ba0bdaf622b078892d768263b6cba268
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 28 20:49:03 2020 +0200
Experimental underwater lighting.
commit 2c5ad9d07605e80d5fd5679dd3a5d70c605b86a9
Merge: 748279835 303967a6f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 22:35:24 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7482798354eda18c8207950080fc24d443a369de
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 21:59:55 2020 +0200
Replace discard in figure-frag.
commit d83b4ae69be4912f69bf7835f509c68a1c7770a4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:45:57 2020 +0200
Fix sprite lighting, HDR from focus_pos.
commit 0594238004f116274905fa0ed7c2b6c417ed1d29
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:14:10 2020 +0200
Proper HDR from point lights.
commit 48c93d2b41ce5743103d18e76cc228f5ac766492
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 14:01:43 2020 +0200
Brighter ambiance, darker LOD shadows.
commit e0452e895ccfa8a43f368cae3b8b8aedc24dad93
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 13:13:23 2020 +0200
More proper HDR.
commit 4c6da3ed16cfeebb455e40da5f557b4af9a499d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 00:13:10 2020 +0200
Trying LOD noise.
commit 682a3d74c85df5503ffe1fc1cc891bce789df1ad
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 23:11:08 2020 +0200
Fix LOD heights in towns.
commit cc39e5734e8b18f9077bf42e66337c1319dd6b6e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 21:01:23 2020 +0200
More LOD fixes.
commit 8116b21c2e51c836e77894e309ac273caf2917b3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:54:43 2020 +0200
I like this coloring.
commit bc2560ea90b36f4b46190005344232d993043ac3
Merge: 14effdd5d e690efe71
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:48:33 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 14effdd5db8747fcf3eb34f03b46b7792e92d1c5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:24:35 2020 +0200
Re-saturate.
commit 48a643955d4435b78179acba0beb4a979905cc31
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:23:57 2020 +0200
Various fixes.
commit f7b497a0c25f4ad4682c71dd1ed6f608052feb9b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 03:22:49 2020 +0200
Render figures again.
commit 44e4aad48deba8266b9f8bdfd3db096b381f5327
Merge: e6f0a5a98 9ec319a18
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 02:01:04 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit e6f0a5a981a82533ba188fff0a54ce98577bb152
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 24 16:12:20 2020 +0200
Add atmospheric scattering.
commit f2953087f691a8edbc001cb98ebf5059fc6f8ac0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 23 00:01:20 2020 +0200
Fix shadowing for specular reflections.
commit ddd4a67a9799b8d08c7dc0c2bec90621c2bed0e3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Apr 22 22:56:12 2020 +0200
HDR fixes.
commit 1015e60deef3c447381996277df7496707a63bd0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 21 18:25:19 2020 +0200
More lighting changes.
commit 80c264abd111fb237e57843efcb5c071d4f84613
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 13 00:29:59 2020 +0200
Lighting experiments.
commit 8414987e589dd5102bad89762a3adaccc0bfe957
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 9 02:38:40 2020 +0200
WIP -- lighting changes and soft shadows.
commit 9cd2b3fb0d6b49776c6dfe463e4169637250b11a
Merge: c7ea687eb 8b149ad11
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:29 2020 +0200
Merge branch 'sharp/new-lighting' into sharp/small-fixes
commit c7ea687ebbc5aace1b455f134a5bf49ce2c7434a
Merge: 476441531 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:02 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 8b149ad11ad4bb75018fcf9519baec27d1c95951
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:32:39 2020 +0200
Trying out a new lighting model.
commit b0ac9f36f755dd06f7c17c46150568064790864f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 07:56:11 2020 +0200
Use bicubic interpolation for terrain.
commit f6fc9307a121514b614bc50ef8eb055953e7da8a
Merge: 33140a295 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 05:01:41 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 4764415312aae6e9ac2d00e86e84577cb958f1ab
Merge: ed2d0111d 13388ee6a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 04:54:48 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 13388ee6a42943f3f79a9cb488346cef18e272fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 20:30:08 2020 +0200
Various fixes (to coloring and to soft shadows).
commit fbd084a94a067082a87cd6d28b82054709bc9265
Merge: 5a089863b 4fdf6896a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 18:50:38 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/map-colors
commit ed2d0111d994262ae836d84d1fe5a45e4de72a0b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 06:49:27 2020 +0200
Combining colors and LOD.
commit 88342640c6b835114d01c797b89fdede3b0a2108
Merge: 33140a295 5a089863b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:49:20 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 33140a2951b8212725f42c758b277aaec4d888f7
Merge: 4c65a5aed f34d4b379
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:36:21 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 5a089863beb01d4794bbe3580ada47b278715ea2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 03:17:49 2020 +0200
Making maps brighter.
This is probably not the right way to do it, but oh well!
commit 32b2c99109dd486aa922886081068f9c550c83f2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 02:46:36 2020 +0200
Horizon mapping and "layered" map generation.
Horizon mapping is a method of shadow mapping specific to height maps.
It can handle any angle between 0 and 90 degrees from the ground, as
long as know the horizontal direction in advance, by remembering only a
single angle (the "horizon angle" of the shadow map). More is explained
in common/src/msg/server.rs. We also remember the approximate height of
the largest occluder, to try to be able to generate soft shadows and
create a vertical position where the shadows can't go higher.
Additionally, map generation has been reworked. Instead of computing
everything from explicit samples, we pass in sampling functions that
return exactly what the map generator needs. This allows us to cleanly
separate the way we sample things like altitudes and colors from the map
generation process. We exploit this to generate maps *partially* on the
server (with colors and rivers, but not shading). We can then send the
partially completed map to the client, which can combine it with shadow
information to generate the final map. This is useful for two reasons:
first, it makes sure the client can apply shadow information by itself,
and second, it lets us pass the unshaded map for use with level of
detail functionality.
For similar reasons, river generation is split
out into its own layer, but for now we opt to still generate rivers on
the server (since the river wire format is more complicated to compress
and may require some extra work to make sure we have enough precision to
draw rivers well enough for LoD).
Finally, the mostly ad-hoc lighting we were performing has been (mostly)
replaced with explicit Phong reflection shading (including specular
highlights). Regularizing this seems useful and helps clarify the
"meaning" of the various light intensities, and helps us keep a more
physically plausible basis. However, its interaction with soft shadows
is still imperfect, and it's not yet clear to me what we need to do to
turn this into something useful for LoD.
commit f8926a5737ddc51f3d585c651a64c43677aae0f4
Merge: a1aee931e 875ae6ced
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Mar 13 13:32:42 2020 +0100
Merge remote-tracking branch 'origin/master' into sharp/map-colors
commit 4c65a5aed353b119aea65a2aaeb94549b67beb42
Author: Treeco <5021038-Treeco@users.noreply.gitlab.com>
Date: Mon Feb 24 16:48:05 2020 +0000
Made LOD setting slider exponential
commit 2fa7b2d20d7233dc8bfd64f9f7f54617575248f1
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 17:49:53 2020 +0000
Added mist to LoD
commit aab059a450b5f635777129ff82cc15b662965c3c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 15:14:06 2020 +0000
Added LoD slider
commit 779c36b538121c5ade3633ae5cb67bb14c8c3877
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:54:55 2020 +0000
Reduced cost of vertex pushing
commit 9fea150473906b166365b738ebcea07c697daf3d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:38:53 2020 +0000
Fixed maths, improved LoD resolution
commit 5481df38fea5bf183ff376a3337179cfaa5233dc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 11:22:50 2020 +0000
Dynamically relocate LoD vertices to enhance details
commit a3e36a50ababd615da7db1b26158c7906a5def01
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 18:13:51 2020 +0000
Simpler terrain spiral rendering
commit 255f450ae9ac8763db4bede075fb409161ed57cc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:53:17 2020 +0000
Better LoD precision
commit 3d027aebe812a5b8658a4eb8123dc9f61b3776d2
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:04:03 2020 +0000
Better falloff
commit be775c9484b457b2c0b1a494aec03392d0c70e76
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 15:30:45 2020 +0000
Applied good ideas from experimental branch
commit 58587b68545a23c5c04ab4574a4b94b3bc982246
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 16:15:13 2020 +0000
Minor fixes to LoD merging
commit 7b42aebd709c14df2db766aad61d9280ad24d84d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 15:04:44 2020 +0000
Capped LoD dragging
commit 8aafc559f87124e1ea5ca6e3ddc2aa0c242d793c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:54:37 2020 +0000
Better blending between LoD and terrain border
commit edd3455d5161792d87ddc8eadc0ecbad5532b284
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:40:19 2020 +0000
Fixed LoD z depth, added sea level offset
commit b9b06744620114dd5556e73f64fa93c145503a7c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:27:43 2020 +0000
Better LoD smoothing
commit a1aee931e790431560cd2d953ad61d9497072afd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Feb 21 14:52:17 2020 +0100
Adding shadows.
commit 2400786c13dd891c131ed86d48d05df516a8a778
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 13:48:40 2020 +0000
Use world map as LoD source
commit dbf650f504a4c25fbbc2096ac3616c736bf52d23
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Jan 20 00:48:14 2020 +0000
Better clouds at distance
commit 5e6f81b86cdb9730b9b056877b19257075fd5fa8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Jan 19 23:59:02 2020 +0000
sync
commit 745e7540ddb000cc645f612767b337c2ddc3f7c0
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 12:40:48 2019 +0000
Improved cloud falloff mist, faster noise sampling
commit f6a200d0cb866196ba57697466755f9e0c7ea5d8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 10:09:00 2019 +0000
Improved long-range depth precision, removed unnecessary LoD polygons
commit 63d1b2bb2292898d59fb4f4e502201103dfeb86f
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 20:57:46 2019 +0000
Working LoD shader
commit f13d98ee3e58f881e8b978861a67663b59ed91ec
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 11:03:40 2019 +0000
LoD first attempt (stack overflow issue)
2020-08-20 18:34:59 +00:00
|
|
|
|
uniform_noise(map_size_lg, |posi, _| {
|
2019-11-07 20:25:30 +00:00
|
|
|
|
if pure_water(posi) {
|
|
|
|
|
None
|
|
|
|
|
} else {
|
|
|
|
|
Some(flux_old[posi])
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
)
|
2019-10-16 11:39:41 +00:00
|
|
|
|
},
|
|
|
|
|
|| {
|
|
|
|
|
rayon::join(
|
|
|
|
|
|| {
|
(See sharp/lod-history) LOD, shadows, greedy meshing, new lighting, perf
---
Pretty much a Veloren fork at this point. Here's a high level overview of the changes (will be added to CHANGELOG just before merge).
At a high level this MR incorporates roughly two groups of changes.
The first group consists of new game features: more flexible map sizes, level of detail terrain, shadow maps, and a new lighting
engine. This is "feature work" that (mostly) only adds new things to Veloren, and mostly shouldn't affect old stuff.
The second big group of changes are those addressing the fallout from all the new features. These include performance fixes of
various sorts: the addition of multiple graphics options and optimization of the cheap ones to avoid work, switching all voxel
models to use some variant of greedy meshing, switching over much of our CPU-side vector math to exploit SIMD instructions
(coinciding with a fork of `vek`), and a rewrite of how the UI handles text rendering (coinciding with updates to our fork
of `conrod`). Making Veloren's hardcoded colors appear correct under the new lighting engine also required considerably
changes (TODO: Fill in this section when it's complete).
The second category of changes often heavily touches code owned by other people, including frequently modified code "owned" by a
handful of people, so I recommend that this code be reviewed particularly carefully.
---
At a high level (each will be described in more detail below):
- The world map has been refactored.
- The world size is no longer hardcoded (@zesterer).
- The map generation code was made generic to allow using it outside of the `world` crate (@zesterer).
- On world creation, we now compute *horizon maps* (@zesterer).
- The way we pass the world from the server to the client has been updated (@xMAC94x).
- Artifacts related to image rotation were fixed (@imbris).
- Multiflow rivers were enabled (@zesterer).
- In the process of making changes related to the world map, various incidental fixes and optimizations were required.
- The new *level of detail* feature was added (@zesterer wrote part of this and has checked out the rest).
- A new LOD terrain rendering step was added to the pipeline.
- The LOD terrain quality was made configurable via a graphics setting.
- Horizon maps were used to cast shadows from LOD chunks on both LOD and non-LOD terrain.
- A "voxelization" effect was incorporated into rendered LOD terrain to make it blend better into the world.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Veloren's lighting has been completely overhauled (@zesterer has already checked most of this out).
- A semi-accurate index of refraction was assigned to our materials.
- A new, more realistic, physically based approach to lighting was used using the *Ashikhmin Shirley* BRDF.
- We emulate *atmospheric scattering* using equations designed for measuring solar panel light exposure.
- We attempt to compute *realistic light attenuation* in water using its real material properties.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Point and directional lights now cast realistic shadows, using *shadow mapping.* (@imbris, @zesterer, @Treeco, @YuriMomo)
- Point light shadow maps were added to the rendering pipeline, using geometry shaders and *seamless cube maps*.
- Directional light shadows were added to the rendering pipeline, using LISPSM together with disabling *depth clamping*.
- "Shadow-only" chunks and NPCs were added to prevent shadows from models behind you from disappearing.
- In the process of making changes related to shadow maps, various incidental fixes and optimizations were required.
The addition of shadow maps, LOD terrain, and the new lighting all led to significant performance degradation, on top of other
changes happening in master. Therefore, a large number of performance improvements were also needed:
- The graphics options were made much more flexible and configurable, and shaders were optimize.
- New options were provided for how to render lights and shadows (@Pfauenauge, @zesterer).
- Graphic setting storage and configuration were overhauled to make adding new features easier (@Pfauenauge, @imbris).
- Shaders were rewritten to utilize GLSL's preprocessor to avoid overhead (@zesterer, @YuriMomo).
- In the process of making changes related to providing additional rendering options, various incidental fixes and optimizations were required.
- Voxel model creation was switched to use *greedy meshing.*
- A new voxel meshing method, greedy meshing, was added (@imbris).
- Uses of the older meshing methods were migrated to use greedy meshing (@imbris, @jshipsey, @Pfauenauge).
- New restrictions were added to terrain, figure, and sprites to future proof them for further optimizations (@jshipsey, @Pfauenauge, @zesterer).
- Most positions are now relative to either chunk or player position for better precision (@imbris, @zesterer, @scottc).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- Animation and terrain math were switched to use SIMD where possible.
- Fixes were made to vek to make its SIMD feature usable for us (@zesterer, @imbris).
- The interface and types used in bone animation were changed in various ways (@jshipsey, @Snowram, @Pfauenauge).
- Redundant code generation for body animation is now partly taken care of by a macro (@jshipsey, @Snowram, @Pfauenauge).
- Animation code was modified to to use vek's SIMD representation where possible (@jshipsey, @Snowram, @Pfauenauge).
- Terrain meshing code and shadow map math were also modified to use vek's SIMD representation (@imbris).
- SIMD instruction generation was enabled (@YuriMomo, @jshipsey, @Snowram, @imbris, @Angelonfira, @xMAC94x).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- The way we cache glyphs was completely refactored, fixed, and optimized.
- Our fork of `conrod` was optimized in various ways (@imbris).
- Our fork of `conrod` now exposes whether a widget was updated during the current frame (@imbris).
- Our use of the glyph cache was rewritten for correctness (@imbris).
- A *text cache* was introduced that lets us skip remeshing glyphs that have not changed (@imbris).
- Various changes were made to reduce pressure on the glyph cache, with more planned (@imbris, @Pfauenauge).
- In the process of making changes related to the glyph cache, various incidental fixes and optimizations were required.
- Colors were changed to keep Veloren's look consistent with master.
- Some older tree models were brought back (@Pfauenauge).
- TODO(@Sharp): All hardcoded colors were extracted and made hotloadable.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Hardcoded colors were fixed to conform to Veloren's style.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Color models were fixed to conform to Veloren's style.
A detailed description of the involved changes follows.
---
- The world size is no longer hardcoded. All functions dependent on world size now take a `WorldSizeLg`, which holds the base 2 logarithm of each actual world dimension and is guaranteed to maintain certain properties (outlined in `common/src/terrain/map.rs`). Additionally, many utility functions that utilize the world size were moved into `common` as well (mostly `common/src/terrain/mod.rs`). Finally, the world map format was updated in order to store its size explicitly, with a migration path from the old format that should work whenever the old formatted map was a square (practically always). See `world/src/sim/mod.rs` for these changes.
- The map generation code was made generic to allow using it outside of the `world` crate. The parts of the map generating code that do not need to query the world were moved over to `common/src/terrain/map.rs`, allowing them to be used from the client without creating a dependency on `world`. The rest of it was turned into helper functions in `world/src/sim/map.rs`, which can be passed as closures to the generic map generation code to complete its construction. This also means that colors are now passed in separately to the map generation function. See <https://veloren.net/devblog-78/> for more details.
- On world creation, we now compute *horizon maps*. See the function in `world/src/sim/util.rs`.
Given a height map and a plane intersecting that height map, our horizon maps allow us to encode enough information to reconstruct shadows for each point on the height map using only the *horizon angle* (the angle at which the sun starts to become visible). As Veloren's sun only covers one plane, this is sufficient for encoding sun shadows for LOD terrain, by encoding two angles per chunk (one for each 90 degrees the sun covers). We can also use this for the moon, if we want, since the moon follows the same path. Additionally, we store the *height* of the furthest occluder, to try to make the shadows volumetric; so this means 4 bytes in total for each chunk.
Support for horizon maps has been merged into the map functionality in common as well.
- The way we pass the world from the server to the client has been updated. Rather than passing the prerendered map, we instead pass three maps with values for each chunk; one with the color information, a second with altitude information, and a third with horizon map information. We then reconstruct the map on the client, together with some additional information we send from the server (like the sea level and maximum height). See `common/src/msg/server.rs` for a detailed description of the format of `WorldMapMsg`, and `server/src/libr.rs` and `client/src/lib.rs` for details of the map construction and parsing.
- Artifacts related to image rotation were fixed. See the commit message for commit SHA `cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e` for a detailed explanation. This involved changes to shaders, the addition of a new type of graphic (also reflected in the graphic cache) that allows specifying a border color (which automatically makes the associated texture immutable), and some related fixes. I reproduce the first two paragraphs of the MR description as well:
```
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
```
- Multiflow rivers were enabled.
This does not really need to be part of this MR, and would be easy to revert, but since it seemed to provide a nice improvement it's currently packaged with it.
We already computed multiple outflows from each chunk for erosion purposes long before this MR.
However, we never modified river rendering to be able to handle this case (just a single downhill river flow is complex enough!) so this was not exposed when deciding which chunks were rivers.
Now that
- In the process of making changes related to the world map, various incidental fixes and optimizations were required. Some examples of fixes include making sure terrain is never lowered to below sea level (to make the shadow maps report correct values), fixing map altitudes and colors to understand things like cliffs and "block level" coloring (that doesn'te xist on the column level), and fixing a crashbug when rendering images for the UI where source pixels are strongly rectangular. Some examples of related performance fixes include avoiding allocating a fresh vector for all the maps (i.e. copying it over to change the format from `[u32; n]` to `DynamicImage` and then copying again to convert to `RgbaImage`), and instead using the `gfx::memory::slice` function to accomplish the same thing. These sorts of changes are spread all arond the code.
This includes the additon of a new scene, `voxygen/src/scene/lod.rs`, a new pipeline `voxygen/src/render/pipeline/lod_terrain.rs`, and new shaders `assets/vxygen/shaders/lod-terrain-vert.glsl` and `assets/vxygen/shaders/lod-terrain-frag.glsl`, as well as associated changes to the renderer in `voxygen/src/render/renderer.rs`.
The main idea behind our initial approach to LOD was to take the world data we now get from the server (altitude, color, and horizon mapping).
- Some previously computed values were turned into shader uniforms for better prediction on weak processors. (@zesterer)
- Calls to power or trig functions were removed or replaced with multiplications, where possible.
- After some deliberation
- To properly handle sprite "waving" for nearby sprites,
We explicitly designed the greedy meshing system with figures and sprites in mind.
In both cases, we want to be able to *efficiently* pack many different models into the same texture, especially in cases where we know
we will either not be removing any of the grouped-together from the models from the texture, or will remove all of them at once (so
they can be packed into some specific subtexture).
For sprites, since we know every model in advance and never intend to deallocate them, we currently pack them all as efficiently as
possible into one giant tetxure atlas. However, in the future we might opt to pack them slightly less efficiently in exchange for
shrinking the sprite vertex size.
For figures, we pack all the textures for each *model* into the same atlas.
is a global texture atlas used for every sprite, and for figures which is why we have the ability to mesh multiple
models to the same texture area (using the simple texture atlas allocator) without requiring intermediate vector allocations.
This is accomplished by delaying the time when we actually write the color and light data to the texture until *after* all the
model vertices have been meshed; then, we can just allocate the whole color/light array at once, making the atlas we use an
exact fit. In computer science-y terms, we accomplish this delay by, after we perform the initial greedy meshing (without
texture information), not continuing to create the texture data, but instead constructing a *continuation*--that is, a function
that, when called, will execute the rest of the computation. We push this continuation (which in Rust terms is a `FnOnce` closure
that takes the `ColLightsInfo` that it is supposed to write to as context) onto a
onto a vector
resizing. To allow for suspended writes to texture data, Rust pointed out to me that the continuation that would eventually write the color and light data to the texture atlas (the one that is shared by all models sharing the same greedy mesher) would have to *own* whatever data it mshed. Because we often generate the model data to mesh as a temporary in `voxygen/src/load.rs`, the
- Matrix multiplications in the shader were reduced for figure data (@zesterer).
- Vertex "waves" for fluid data were removed.
- Terrain "bending" near edges was removed.
- Scaling was fixed to make sure empty space was not introduced in a space previously occupied by a block. It was also changed to take ownership of its voxel data,
rather than sharing it, to let it be used with meshing.
- Rust's nightly version was bumped in order to use the `array_map` function, which lets us reuse more code between the simple map and `FigureModelCache`.
- PositionedGlyph::standalone.
---
I tried to cite sources in many cases[^realtime],[^lloyd],[^lispsm],[^pbrt],[^greedy],[^tjunctions]
where I needed features from elsewhere but I am particularly grateful for the following resources,
esepcially where they have accompanying source code. I linked all of them that are accessible to the public (those that are not were
obtained through legal means).
[^realtime]: Eisemann, Elmar, Michael Schwarz, Ulf Assarsson, Michael Wimmer. Real-Time Shadows. A K Peters/CRC Press (T&F), 20160419.
[^lloyd]: Lloyd,B. 2007. [Logarithmic perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). PhD thesis, University of North Carolina.
[^lispsm]: Wimmer, M., Scherzer, D., and Purgathofer, W. 2004. [Light space perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). In Proceedings of Eurographics Symposium on Rendering 2004, pp. 143– 152.
[^pbrt]: Pharr, Matt, et al. [http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf](Physically Based Rendering: From Theory to Implementation). Third edition, Morgan Kaufmann Publishers/Elsevier, 2017.
[^greedy]: mikolalysenko. “Meshing in a Minecraft Game.” 0 FPS, 30 June 2012, <https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/>.
[^tjunctions]: blackflux. “Meshing in Voxel Engines – Part 1.” Blackflux.Com, 23 Feb. 2014, <https://blackflux.wordpress.com/2014/02/23/meshing-in-voxel-engines-part-1/>.
I am also especially grateful to Khronos, Wikiepdia, and stackoverflow for answering many of my specific questions while writing the MR.
---
Squashed commit of the following:
commit 300505e7305a2fdac722a808ee8538323f215f39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 18:46:25 2020 +0200
Fixing cargo doc and typo in CHANGELOG.
commit ec0aeb18e8499d7d84ef818331b4b65c3d76cea6
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 15:38:50 2020 +0200
Hopefully final commit for the LOD branch.
commit 5e8ea0b1eaac02903a02feb2eb038d195de4872f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 10:14:26 2020 +0200
Falling back to power as stopgap.
commit e44a1cbf46504ee9931a01bdc9033e145500d557
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 09:25:41 2020 +0200
Address imbris feedback.
Temporarily disables shiny water, lowers max VD.
These restrictions will be lifted soon after merging.
commit 561e25778a108ac3712f5ec2ce3a51234c4430d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 08:31:13 2020 +0200
Tweaking shaders a bit.
commit 7d19259078ce0dd7b3742ad7d0cb3fab3ece3fdc
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:59:43 2020 +0200
Fix view example as well.
commit 051cd4934e0fad2c0b15db4380a4189fa318679f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:29:06 2020 +0200
Fix meshing benchmark.
commit c95e07db3b4dcca285678985e65e31b927cb1c61
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 05:46:22 2020 +0200
Address MR feedback, fix scene clouds.
commit 1bfb816cabdb3ffc1e507a009c2d98696b4b573a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:39:36 2020 +0200
Incorporating Pfau's figure color changes.
New eyes and new humanoid colors.
commit 3f9b89a3ac7b3356b1dba0d1a8f6541357f81469
Merge: e2f5162e4 62c53963a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:29:41 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit e2f5162e4f96f4124aa43488f7245d341b3dcfd4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:28:38 2020 +0200
World colors are all hotloadable.
They live in assets/world/style/colors.ron.
Only a small handful of hardcoed colors remain in World; they are either
part of the map, or difficult to disentangle from the rest of the
computation. Comments are made where appropriate.
commit 62c53963abe1975009d34a8f9515a355bef24f31
Author: Marcel Märtens <marcel.cochem@googlemail.com>
Date: Wed Aug 19 15:59:00 2020 +0200
replace pretty_env_logger with tracing
commit 5b1625f99d9586fe80e2232f583ec5af9f953099
Merge: d71003acd 4942b5b39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:15:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit d71003acdabeff970b3928e97c26af6847b5b78e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:14:34 2020 +0200
Hotloading colors, part 1: colors in common.
Currently, this just entails humanoid colors. There are only three
colors not handled; the light emitter colors in
common/src/comp/inventory/item/tool.rs. These don't seem important
enough to me to warrant making hotloadable, at least not right now, but
if it's needed later we can always add them to the file.
commit 63b5e0e553eb2ea49276f192a6fc7dd65254270d
Merge: c32b337a4 6d2c4b9c1
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 13:05:37 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c32b337a46e10d9de473d178a94a3ccd61c39bb3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:52:04 2020 +0200
Fixing LOD grid, for real.
commit a166ae0360395387e09fb35a1f84210c2ce5ec24
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:28:05 2020 +0200
Addressing imbris's initial feedback.
Fixes two minor bugs: explosion particles were no longer spawning
randomly, and LOD grids were not perfectly even.
commit 4cbad004f44060994252dd3d38647a14a589712f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:27:58 2020 +0200
Bumping nightly per request.
commit 548680276aac77c25d43d16b5622f847d474dbef
Merge: acc098604 8f8b20c91
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:26:06 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit acc0986040589a3492f88a740bc3c3fc693b26d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:28:32 2020 +0200
Lower resolution due to lying drivers.
commit d3b878de2a52c358d2944a6bbd0555dad7fbdb10
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:15:38 2020 +0200
Fix issues msh encountered with Intel 4600.
commit 10245e0c1b0cb6fae10d86409435364edc6102ef
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 21:15:02 2020 +0200
Merge more models into one mesh than we did previously.
commit 3155c31e663c52ae5c3a53d5fb5665892a1a498a
Merge: 7204cc8a7 3c199280e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:35:22 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7204cc8a7a4f74a30306bd205d9834fee4bb944f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:34:43 2020 +0200
Fix not yet done NPC animations.
This forces them all to be the idle animation if not specified.
This fixes issues where you'd have giant NPCs in water.
commit bc83360f2a08918f19d417b5f772e1ff554dba08
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 19:36:37 2020 +0200
Try to fix some bugs:
- Z fighting with LOD terrain and water.
- Audio SFX not playing.
commit 1fd104aa603bf3781b6526a5cada46aeca3049dd
Merge: 862df3c99 7c2c392a3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 12:02:31 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 862df3c9976c4da9bd7cfd784f1a85973127968a
Merge: 0a4218ed9 75c1d4401
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 05:52:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0a4218ed9d541a2b34c133351bea38a99ddf4ea7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 22:27:14 2020 +0200
Fix particle depth.
commit f51dfdeb442d0dd5243dd2f344fa4be295bd0875
Merge: c6251a956 5e6dc0471
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:19:04 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit c6251a956ad376400dca5c23420cf8d213dc8fdf
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:15:46 2020 +0200
Cache figures more intelligently.
Cache figures for longer, and don't cache character states for the
player except where they actually affect the rendered model.
commit 0ed801d5404982c6fb63b1eaa4567d908b294c9d
Merge: c11b9bdf0 eea64f78f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 16:32:24 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c11b9bdf0a53bf9884d2f5a48fec9b01d582df1a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 11:47:15 2020 +0200
Remove unneeded Clippy annotation.
commit 16aa9ef40af56d69289d00aafb3deadfb8bd4f35
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 8 00:53:02 2020 +0200
Fix hotloading and Clippy.
commit 3dc973e0be5b758da1e9805eb764ad401374cd0c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 23:50:27 2020 +0200
Major speedups with SIMD.
commit fba64a7d93d5a96077ce87287bbce6ab9b7fbcae
Merge: 76429d00e d1e10b178
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:19 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 76429d00eea00d212fbd672a84ee91e75b19b938
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:10 2020 +0200
Add clippy.toml.
commit c79f512f84dbb83cb82b7954db68ff241dfd8e41
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 11:55:20 2020 +0200
Fix all clippy issues, clean up Rust code.
commit 6f90e010b3fbefb53b0d632e819931350015b6b8
Merge: 77a8c7c26 5929cfa5c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:30 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 77a8c7c267d3f44a1a62bd6b2274359973c5e4d4
Merge: b44e44232 44febaabd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:10 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 5929cfa5c713aa392110bbb62407f76caf53c3df
Author: jshipsey <jshipsey18@gmail.com>
Date: Thu Aug 6 20:47:27 2020 -0400
fixed in-hand arrow bug
commit b44e442325d828f1cd564d66908f89d09e80474b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 6 13:40:35 2020 +0200
Miscellaneous performance improvements.
commit be37acf287c1360d8085862526ac3365ffd1d768
Merge: 125d7fc6c c11876547
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 05:49:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 125d7fc6c4dcd8c8c5f27b8268a4d64f409f3644
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 04:55:31 2020 +0200
Abstract over simd vs. repr_c vectors.
Also some minor improvements to Event size.
commit d4d4956e9252e1241ce110b2aa85076c6b1e2a23
Merge: 5f3b7294a aced5f979
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:56:54 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 5f3b7294af1f8533edc2620b58863c248e2b07af
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:43:52 2020 +0200
Fix formatting issues I missed before.
commit a428a3ebba70dcab63dd0f8cd983120c90617271
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:41:51 2020 +0200
Fix clippy warnings, part 1.
There aer still a bunch of type too complex and
function takes too many arguments warnings that I'll fix later
(or ignore, since in the one case I did fix a function takes too
many arguments warning I think it made the code *less* readable).
commit ba54307540ed8a937ac08209730284fc653af85b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 30 13:22:42 2020 +0200
Fix light animations so they are removed when the light turns off.
commit 7e0f4bcbf0f4717145d8beac40d52e3acebbe2aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 21:10:20 2020 +0200
Fix crash in edge case for pixel art.
commit 56da06f7a351e2b949e9b014a90b974d511a0924
Merge: cf74d55f2 9f53a4a19
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:56:52 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:29:52 2020 +0200
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
The first concern was addressed by fixing the dimensions of the map
images drawn from the UI (so that we always use a square source
rectangle, rather than a rectangular one according to the dimensions of
the map). We also fixed the way rotation was done in the fragment
shader for north-facing sources to make it properly handle aspect ratio
(this was already done for north-facing targets). Together, these fix
rendering issues peculiar to rectangular maps.
The second and third concerns were jointly addressed by adding an
optional border color to every 2D image drawn by the UI. This turns
out not to waste extra space even though we hold a full f32 color
(to avoid an extra dependency on gfx's PackedColor), since voxel
images already take up more space than Optiion<[f32; 4]> requires.
This is then implemented automatically using the "border color"
wrapping method in the attached sampler.
Since this is implemented in graphics hardware, it only works (at
least naively) if the actual image bounds match the texture bounds.
Therefore, we altered the way the graphics cache stores images
with a border color to guarantee that they are always in their own
texture, whose size exactly matches their extent. Since the easiest
currently exposed way to set a border color is to do so for an
immutable texture, we went a bit further and added a new "immutable"
texture storage type used for these cases; currently, it is always
and automatically used only when there is a specified border color,
but in theory there's no reason we couldn't provide immutable-only
images that use the default wrapping mdoe (though clamp to border
is admittedly not a great default).
To fix the maps case specifically, we set the border color to a
translucent version of the ocean border color. This may need
tweaking going forward, which shouldn't be hard.
As part of this process, we had to modify graphics replacement to
make sure immutable images are *removed* when invalidated, rather
than just having a validity flag unset (this is normally done by
the UI to try to reuse allocations in place if images are updated
in benign ways, since the texture atlases used for Ui do not
support deallocation; currently this is only used for item images,
so there should be no overlap with immutable image replacement,
so this was purely precautionary).
Since we were already touching the relevant code, we also updated
the image dependency to a newer version that provides more ways
to avoid allocations, and made a few other changes that should
hopefully eliminate redundant most of the intermediate buffer
allocations we were performing for what should be zero-cost
conversions. This may slightly improve performance in some
cases.
commit ad18ce939940a8c697270f6e9b94db9942fd8295
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 13:21:09 2020 +0200
Fix continent scale hack.
commit 36b1cb074f5b195aebd7dbbc3da7f0246a1a18ec
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 12:11:40 2020 +0200
Enable loading different sized maps without a recompile.
We may want to tweak the effects of the continent_scale_hack.
commit 13b6d4d534cc4814b7cb3294ca41bbfea0a6b186
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 10:55:48 2020 +0200
Removing WORLD_SIZE, part 1.
Erased almost every instance of WORLD_SIZE and replaced it with a local
power of two, map_size_lg (which respects certain invariants; see
common/src/terrain/map.rs for more details about MapSizeLg). This also
means we can avoid a dependency on the world crate from client, as
desired.
Now that the rest of the code is not expecting a fixed WORLD_SIZE, the
next step is to arrange for maps to store their world size, and to use
that world size as a basis prior to loading the map (as well, probably,
as prior to configuring some of the noise functions).
commit 30b1d2c6428230a9eaa0d749cdcbbd6f1cbccd78
Merge: 7d56ba31b 1377b369f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:58 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 7d56ba31b445441461b28a07fc495d7d4f047c17
Merge: 2101113b4 598f14b25
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 1377b369f6db2258e910d467a5740f31789e3ded
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sun Jul 19 23:25:38 2020 +0200
more saturated pumpkins
commit ae8d50527f93bb0616c2ad46ce4dacb63bc37c6d
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sat Jul 18 20:29:56 2020 +0200
acacia models
commit 2101113b467e691de787392d7f20f1745f5637bd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 18 18:55:25 2020 +0200
Higher detail LOD.
commit add2cfae04b4385fa5590e11e2bd5229d9dee0aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 16 01:57:39 2020 +0200
Revert some irrelevant stuff.
commit 2e2ab3dc1eaa59a4aef7f8d34a53d8aae4c8553a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 15 13:30:49 2020 +0200
Fixing various things about shadows.
* Correcting optimal LISPSM parameter.
* Figure shadows are cast when they're not visible.
* Chunk shadows stay cast until you look away.
* Seamless cubemaps for point lights.
* Etc.
commit 6c31e6b56217274285b597af297036691ea5d897
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 19:50:26 2020 +0200
Fix shadow creation.
commit 6332cbe006115ae205597529cd8bbccd146c2cca
Merge: be438657c 930e0028b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:47:00 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit be438657c33d7b5bfb0a9582c3ed3fd366637323
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:28:08 2020 +0200
Tweaks to shadows.
Added shadow map resolution configuration, added seamless cubemaps,
documented all existing rendering options, and fixed a few Clippy
errors.
commit 23b4058906013c7d2a40c286e20e32c5fbd897ed
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 10:11:19 2020 +0200
Fix moon, use nonlinear noise for terrain.
Note that the latter has a bit of performance cost.
commit 7fbe5cbfbb9dc29607957b8e62f432a4deed193d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:23:02 2020 +0200
Address lies about max texture size.
commit bcfc62b5e13a1cdd83f57535fde4694720bebfd9
Merge: 75e3626a7 18a08e8fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:22:08 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 75e3626a785919f43fdcf2127c2b10e3e4df2f9f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:21:52 2020 +0200
OpenGL 3.3 minimum.
commit 18a08e8fe2739f02af99a5d2cb4e7c38c49e858b
Author: Monty Marz <m.marzouq@gmx.de>
Date: Tue Jul 7 23:57:52 2020 +0200
settings localization
commit 90c5d1ca3620092bc3ae10b2211489eb1cf6f5e8
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 21:11:48 2020 +0200
Lower near distance.
commit 0e66f02b25aaddaa2dfddbbc89cd67de54a9a7b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 20:09:01 2020 +0200
All sprites sway in the wind now.
commit db1401a6910bf42dcf502462c90038752ff5fbdb
Merge: 69e508d8c e8b4b29d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 19:34:17 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 69e508d8c94d8973033817ca86f357e466fc7c4d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 18:41:37 2020 +0200
Make it easy to switch to SIMD for math.
commit ffe0f5928c7a7e87d00cb5426b3b1d831d7e02fd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 21:21:12 2020 +0200
Fix some issues with underwater rendering.
commit bfda6da42f38fd02c31ee92c81ab785a3e50c2a0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 19:17:59 2020 +0200
Fix some minor display issues.
commit 0ed752e087968cf901301884aaeae698e32ef8a5
Merge: ccc6a06a8 518edcb85
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:14:21 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit ccc6a06a8d4504d6b9f7af7905a414d2ee06ab76
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:04:34 2020 +0200
Some minor changes.
commit 4e020246702889269efe1a191788992164c508d6
Merge: 50a64d927 e05c9267a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 16:17:40 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 50a64d927e6c4f4b0e4688e4cbfca694bc3f922a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 13:07:03 2020 +0200
Fix far plane.
commit 7dd06da34cae8f9ea3b6c889fe965181f3fd3949
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:25:35 2020 +0200
Add shadows.glsl.
commit 618a18c998778bf871b905a74657440fcc384c80
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:10:22 2020 +0200
Adding shadows, greedy meshing, and more.
commit eaea83fe6a5cb1cb0ba8beef888183c718258496
Merge: 267018495 2f89b863e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 22:47:07 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 2670184954a13e4a9e7a4e35ba79aac0c5fac2f7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 21:20:01 2020 +0200
Make civsim and sites deterministic.
For anything in worldgen where you use a HashMap, *please* think
carefully about which hasher you are going to use! This is
especially true if (for some reason) you are depending on hashmap
iteration order remaining stable for some aspect of worldgen.
commit f8376fd5dc72b4a9c2f51a6b4570d59c8b8e9343
Merge: 654f7e049 cdee191dd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 17:53:57 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 654f7e049258d9da27c09608bbe6a46ffa8787e5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed May 20 21:22:30 2020 +0200
Correct backface culling.
commit 560501df05ca725409b0f2e4eb31bdfdc15fd0c7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue May 19 17:22:06 2020 +0200
Greedy messhing for shadows.
commit a4d87e1875ca543436e6bbbeb20348facc5a52d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun May 17 05:59:00 2020 +0200
Shadow maps work for lantern.
commit 243d0837b8a3b08172c9a3c348d964d7ddc2a0a8
Merge: 04382dc28 71dd520cd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:53:13 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 04382dc28632b6c66e8821f6870c0daaa1c1901a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:22:17 2020 +0200
WIP: better graphics config, better LOD, shadow maps.
commit 22ddbad3eb32bfa70f0932176022208fe67ded81
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 18:54:09 2020 +0200
Minor shader fixes.
commit 746a10e8d01ac235f994b0cde78fa48998602a1f
Merge: 0f4a0e763 40ab94673
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 04:02:09 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0f4a0e763db3afbdc4fb0558611f38326ca87151
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 23:03:24 2020 +0200
Switch back to pop-in terrain.
commit dd74fa7e4a53667b38811d7aec58d7f6a68889bb
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 22:58:55 2020 +0200
LOD shading closer to voxel shading.
commit ef67bd58ba0bdaf622b078892d768263b6cba268
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 28 20:49:03 2020 +0200
Experimental underwater lighting.
commit 2c5ad9d07605e80d5fd5679dd3a5d70c605b86a9
Merge: 748279835 303967a6f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 22:35:24 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7482798354eda18c8207950080fc24d443a369de
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 21:59:55 2020 +0200
Replace discard in figure-frag.
commit d83b4ae69be4912f69bf7835f509c68a1c7770a4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:45:57 2020 +0200
Fix sprite lighting, HDR from focus_pos.
commit 0594238004f116274905fa0ed7c2b6c417ed1d29
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:14:10 2020 +0200
Proper HDR from point lights.
commit 48c93d2b41ce5743103d18e76cc228f5ac766492
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 14:01:43 2020 +0200
Brighter ambiance, darker LOD shadows.
commit e0452e895ccfa8a43f368cae3b8b8aedc24dad93
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 13:13:23 2020 +0200
More proper HDR.
commit 4c6da3ed16cfeebb455e40da5f557b4af9a499d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 00:13:10 2020 +0200
Trying LOD noise.
commit 682a3d74c85df5503ffe1fc1cc891bce789df1ad
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 23:11:08 2020 +0200
Fix LOD heights in towns.
commit cc39e5734e8b18f9077bf42e66337c1319dd6b6e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 21:01:23 2020 +0200
More LOD fixes.
commit 8116b21c2e51c836e77894e309ac273caf2917b3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:54:43 2020 +0200
I like this coloring.
commit bc2560ea90b36f4b46190005344232d993043ac3
Merge: 14effdd5d e690efe71
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:48:33 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 14effdd5db8747fcf3eb34f03b46b7792e92d1c5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:24:35 2020 +0200
Re-saturate.
commit 48a643955d4435b78179acba0beb4a979905cc31
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:23:57 2020 +0200
Various fixes.
commit f7b497a0c25f4ad4682c71dd1ed6f608052feb9b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 03:22:49 2020 +0200
Render figures again.
commit 44e4aad48deba8266b9f8bdfd3db096b381f5327
Merge: e6f0a5a98 9ec319a18
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 02:01:04 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit e6f0a5a981a82533ba188fff0a54ce98577bb152
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 24 16:12:20 2020 +0200
Add atmospheric scattering.
commit f2953087f691a8edbc001cb98ebf5059fc6f8ac0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 23 00:01:20 2020 +0200
Fix shadowing for specular reflections.
commit ddd4a67a9799b8d08c7dc0c2bec90621c2bed0e3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Apr 22 22:56:12 2020 +0200
HDR fixes.
commit 1015e60deef3c447381996277df7496707a63bd0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 21 18:25:19 2020 +0200
More lighting changes.
commit 80c264abd111fb237e57843efcb5c071d4f84613
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 13 00:29:59 2020 +0200
Lighting experiments.
commit 8414987e589dd5102bad89762a3adaccc0bfe957
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 9 02:38:40 2020 +0200
WIP -- lighting changes and soft shadows.
commit 9cd2b3fb0d6b49776c6dfe463e4169637250b11a
Merge: c7ea687eb 8b149ad11
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:29 2020 +0200
Merge branch 'sharp/new-lighting' into sharp/small-fixes
commit c7ea687ebbc5aace1b455f134a5bf49ce2c7434a
Merge: 476441531 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:02 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 8b149ad11ad4bb75018fcf9519baec27d1c95951
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:32:39 2020 +0200
Trying out a new lighting model.
commit b0ac9f36f755dd06f7c17c46150568064790864f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 07:56:11 2020 +0200
Use bicubic interpolation for terrain.
commit f6fc9307a121514b614bc50ef8eb055953e7da8a
Merge: 33140a295 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 05:01:41 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 4764415312aae6e9ac2d00e86e84577cb958f1ab
Merge: ed2d0111d 13388ee6a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 04:54:48 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 13388ee6a42943f3f79a9cb488346cef18e272fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 20:30:08 2020 +0200
Various fixes (to coloring and to soft shadows).
commit fbd084a94a067082a87cd6d28b82054709bc9265
Merge: 5a089863b 4fdf6896a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 18:50:38 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/map-colors
commit ed2d0111d994262ae836d84d1fe5a45e4de72a0b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 06:49:27 2020 +0200
Combining colors and LOD.
commit 88342640c6b835114d01c797b89fdede3b0a2108
Merge: 33140a295 5a089863b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:49:20 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 33140a2951b8212725f42c758b277aaec4d888f7
Merge: 4c65a5aed f34d4b379
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:36:21 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 5a089863beb01d4794bbe3580ada47b278715ea2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 03:17:49 2020 +0200
Making maps brighter.
This is probably not the right way to do it, but oh well!
commit 32b2c99109dd486aa922886081068f9c550c83f2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 02:46:36 2020 +0200
Horizon mapping and "layered" map generation.
Horizon mapping is a method of shadow mapping specific to height maps.
It can handle any angle between 0 and 90 degrees from the ground, as
long as know the horizontal direction in advance, by remembering only a
single angle (the "horizon angle" of the shadow map). More is explained
in common/src/msg/server.rs. We also remember the approximate height of
the largest occluder, to try to be able to generate soft shadows and
create a vertical position where the shadows can't go higher.
Additionally, map generation has been reworked. Instead of computing
everything from explicit samples, we pass in sampling functions that
return exactly what the map generator needs. This allows us to cleanly
separate the way we sample things like altitudes and colors from the map
generation process. We exploit this to generate maps *partially* on the
server (with colors and rivers, but not shading). We can then send the
partially completed map to the client, which can combine it with shadow
information to generate the final map. This is useful for two reasons:
first, it makes sure the client can apply shadow information by itself,
and second, it lets us pass the unshaded map for use with level of
detail functionality.
For similar reasons, river generation is split
out into its own layer, but for now we opt to still generate rivers on
the server (since the river wire format is more complicated to compress
and may require some extra work to make sure we have enough precision to
draw rivers well enough for LoD).
Finally, the mostly ad-hoc lighting we were performing has been (mostly)
replaced with explicit Phong reflection shading (including specular
highlights). Regularizing this seems useful and helps clarify the
"meaning" of the various light intensities, and helps us keep a more
physically plausible basis. However, its interaction with soft shadows
is still imperfect, and it's not yet clear to me what we need to do to
turn this into something useful for LoD.
commit f8926a5737ddc51f3d585c651a64c43677aae0f4
Merge: a1aee931e 875ae6ced
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Mar 13 13:32:42 2020 +0100
Merge remote-tracking branch 'origin/master' into sharp/map-colors
commit 4c65a5aed353b119aea65a2aaeb94549b67beb42
Author: Treeco <5021038-Treeco@users.noreply.gitlab.com>
Date: Mon Feb 24 16:48:05 2020 +0000
Made LOD setting slider exponential
commit 2fa7b2d20d7233dc8bfd64f9f7f54617575248f1
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 17:49:53 2020 +0000
Added mist to LoD
commit aab059a450b5f635777129ff82cc15b662965c3c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 15:14:06 2020 +0000
Added LoD slider
commit 779c36b538121c5ade3633ae5cb67bb14c8c3877
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:54:55 2020 +0000
Reduced cost of vertex pushing
commit 9fea150473906b166365b738ebcea07c697daf3d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:38:53 2020 +0000
Fixed maths, improved LoD resolution
commit 5481df38fea5bf183ff376a3337179cfaa5233dc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 11:22:50 2020 +0000
Dynamically relocate LoD vertices to enhance details
commit a3e36a50ababd615da7db1b26158c7906a5def01
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 18:13:51 2020 +0000
Simpler terrain spiral rendering
commit 255f450ae9ac8763db4bede075fb409161ed57cc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:53:17 2020 +0000
Better LoD precision
commit 3d027aebe812a5b8658a4eb8123dc9f61b3776d2
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:04:03 2020 +0000
Better falloff
commit be775c9484b457b2c0b1a494aec03392d0c70e76
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 15:30:45 2020 +0000
Applied good ideas from experimental branch
commit 58587b68545a23c5c04ab4574a4b94b3bc982246
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 16:15:13 2020 +0000
Minor fixes to LoD merging
commit 7b42aebd709c14df2db766aad61d9280ad24d84d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 15:04:44 2020 +0000
Capped LoD dragging
commit 8aafc559f87124e1ea5ca6e3ddc2aa0c242d793c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:54:37 2020 +0000
Better blending between LoD and terrain border
commit edd3455d5161792d87ddc8eadc0ecbad5532b284
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:40:19 2020 +0000
Fixed LoD z depth, added sea level offset
commit b9b06744620114dd5556e73f64fa93c145503a7c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:27:43 2020 +0000
Better LoD smoothing
commit a1aee931e790431560cd2d953ad61d9497072afd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Feb 21 14:52:17 2020 +0100
Adding shadows.
commit 2400786c13dd891c131ed86d48d05df516a8a778
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 13:48:40 2020 +0000
Use world map as LoD source
commit dbf650f504a4c25fbbc2096ac3616c736bf52d23
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Jan 20 00:48:14 2020 +0000
Better clouds at distance
commit 5e6f81b86cdb9730b9b056877b19257075fd5fa8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Jan 19 23:59:02 2020 +0000
sync
commit 745e7540ddb000cc645f612767b337c2ddc3f7c0
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 12:40:48 2019 +0000
Improved cloud falloff mist, faster noise sampling
commit f6a200d0cb866196ba57697466755f9e0c7ea5d8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 10:09:00 2019 +0000
Improved long-range depth precision, removed unnecessary LoD polygons
commit 63d1b2bb2292898d59fb4f4e502201103dfeb86f
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 20:57:46 2019 +0000
Working LoD shader
commit f13d98ee3e58f881e8b978861a67663b59ed91ec
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 11:03:40 2019 +0000
LoD first attempt (stack overflow issue)
2020-08-20 18:34:59 +00:00
|
|
|
|
uniform_noise(map_size_lg, |posi, wposf| {
|
2019-10-16 11:39:41 +00:00
|
|
|
|
if pure_water(posi) {
|
|
|
|
|
None
|
|
|
|
|
} else {
|
|
|
|
|
// -1 to 1.
|
2020-01-22 14:31:10 +00:00
|
|
|
|
Some(gen_ctx.temp_nz.get((wposf).into_array()) as f32)
|
2019-10-16 11:39:41 +00:00
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
|| {
|
(See sharp/lod-history) LOD, shadows, greedy meshing, new lighting, perf
---
Pretty much a Veloren fork at this point. Here's a high level overview of the changes (will be added to CHANGELOG just before merge).
At a high level this MR incorporates roughly two groups of changes.
The first group consists of new game features: more flexible map sizes, level of detail terrain, shadow maps, and a new lighting
engine. This is "feature work" that (mostly) only adds new things to Veloren, and mostly shouldn't affect old stuff.
The second big group of changes are those addressing the fallout from all the new features. These include performance fixes of
various sorts: the addition of multiple graphics options and optimization of the cheap ones to avoid work, switching all voxel
models to use some variant of greedy meshing, switching over much of our CPU-side vector math to exploit SIMD instructions
(coinciding with a fork of `vek`), and a rewrite of how the UI handles text rendering (coinciding with updates to our fork
of `conrod`). Making Veloren's hardcoded colors appear correct under the new lighting engine also required considerably
changes (TODO: Fill in this section when it's complete).
The second category of changes often heavily touches code owned by other people, including frequently modified code "owned" by a
handful of people, so I recommend that this code be reviewed particularly carefully.
---
At a high level (each will be described in more detail below):
- The world map has been refactored.
- The world size is no longer hardcoded (@zesterer).
- The map generation code was made generic to allow using it outside of the `world` crate (@zesterer).
- On world creation, we now compute *horizon maps* (@zesterer).
- The way we pass the world from the server to the client has been updated (@xMAC94x).
- Artifacts related to image rotation were fixed (@imbris).
- Multiflow rivers were enabled (@zesterer).
- In the process of making changes related to the world map, various incidental fixes and optimizations were required.
- The new *level of detail* feature was added (@zesterer wrote part of this and has checked out the rest).
- A new LOD terrain rendering step was added to the pipeline.
- The LOD terrain quality was made configurable via a graphics setting.
- Horizon maps were used to cast shadows from LOD chunks on both LOD and non-LOD terrain.
- A "voxelization" effect was incorporated into rendered LOD terrain to make it blend better into the world.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Veloren's lighting has been completely overhauled (@zesterer has already checked most of this out).
- A semi-accurate index of refraction was assigned to our materials.
- A new, more realistic, physically based approach to lighting was used using the *Ashikhmin Shirley* BRDF.
- We emulate *atmospheric scattering* using equations designed for measuring solar panel light exposure.
- We attempt to compute *realistic light attenuation* in water using its real material properties.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Point and directional lights now cast realistic shadows, using *shadow mapping.* (@imbris, @zesterer, @Treeco, @YuriMomo)
- Point light shadow maps were added to the rendering pipeline, using geometry shaders and *seamless cube maps*.
- Directional light shadows were added to the rendering pipeline, using LISPSM together with disabling *depth clamping*.
- "Shadow-only" chunks and NPCs were added to prevent shadows from models behind you from disappearing.
- In the process of making changes related to shadow maps, various incidental fixes and optimizations were required.
The addition of shadow maps, LOD terrain, and the new lighting all led to significant performance degradation, on top of other
changes happening in master. Therefore, a large number of performance improvements were also needed:
- The graphics options were made much more flexible and configurable, and shaders were optimize.
- New options were provided for how to render lights and shadows (@Pfauenauge, @zesterer).
- Graphic setting storage and configuration were overhauled to make adding new features easier (@Pfauenauge, @imbris).
- Shaders were rewritten to utilize GLSL's preprocessor to avoid overhead (@zesterer, @YuriMomo).
- In the process of making changes related to providing additional rendering options, various incidental fixes and optimizations were required.
- Voxel model creation was switched to use *greedy meshing.*
- A new voxel meshing method, greedy meshing, was added (@imbris).
- Uses of the older meshing methods were migrated to use greedy meshing (@imbris, @jshipsey, @Pfauenauge).
- New restrictions were added to terrain, figure, and sprites to future proof them for further optimizations (@jshipsey, @Pfauenauge, @zesterer).
- Most positions are now relative to either chunk or player position for better precision (@imbris, @zesterer, @scottc).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- Animation and terrain math were switched to use SIMD where possible.
- Fixes were made to vek to make its SIMD feature usable for us (@zesterer, @imbris).
- The interface and types used in bone animation were changed in various ways (@jshipsey, @Snowram, @Pfauenauge).
- Redundant code generation for body animation is now partly taken care of by a macro (@jshipsey, @Snowram, @Pfauenauge).
- Animation code was modified to to use vek's SIMD representation where possible (@jshipsey, @Snowram, @Pfauenauge).
- Terrain meshing code and shadow map math were also modified to use vek's SIMD representation (@imbris).
- SIMD instruction generation was enabled (@YuriMomo, @jshipsey, @Snowram, @imbris, @Angelonfira, @xMAC94x).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- The way we cache glyphs was completely refactored, fixed, and optimized.
- Our fork of `conrod` was optimized in various ways (@imbris).
- Our fork of `conrod` now exposes whether a widget was updated during the current frame (@imbris).
- Our use of the glyph cache was rewritten for correctness (@imbris).
- A *text cache* was introduced that lets us skip remeshing glyphs that have not changed (@imbris).
- Various changes were made to reduce pressure on the glyph cache, with more planned (@imbris, @Pfauenauge).
- In the process of making changes related to the glyph cache, various incidental fixes and optimizations were required.
- Colors were changed to keep Veloren's look consistent with master.
- Some older tree models were brought back (@Pfauenauge).
- TODO(@Sharp): All hardcoded colors were extracted and made hotloadable.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Hardcoded colors were fixed to conform to Veloren's style.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Color models were fixed to conform to Veloren's style.
A detailed description of the involved changes follows.
---
- The world size is no longer hardcoded. All functions dependent on world size now take a `WorldSizeLg`, which holds the base 2 logarithm of each actual world dimension and is guaranteed to maintain certain properties (outlined in `common/src/terrain/map.rs`). Additionally, many utility functions that utilize the world size were moved into `common` as well (mostly `common/src/terrain/mod.rs`). Finally, the world map format was updated in order to store its size explicitly, with a migration path from the old format that should work whenever the old formatted map was a square (practically always). See `world/src/sim/mod.rs` for these changes.
- The map generation code was made generic to allow using it outside of the `world` crate. The parts of the map generating code that do not need to query the world were moved over to `common/src/terrain/map.rs`, allowing them to be used from the client without creating a dependency on `world`. The rest of it was turned into helper functions in `world/src/sim/map.rs`, which can be passed as closures to the generic map generation code to complete its construction. This also means that colors are now passed in separately to the map generation function. See <https://veloren.net/devblog-78/> for more details.
- On world creation, we now compute *horizon maps*. See the function in `world/src/sim/util.rs`.
Given a height map and a plane intersecting that height map, our horizon maps allow us to encode enough information to reconstruct shadows for each point on the height map using only the *horizon angle* (the angle at which the sun starts to become visible). As Veloren's sun only covers one plane, this is sufficient for encoding sun shadows for LOD terrain, by encoding two angles per chunk (one for each 90 degrees the sun covers). We can also use this for the moon, if we want, since the moon follows the same path. Additionally, we store the *height* of the furthest occluder, to try to make the shadows volumetric; so this means 4 bytes in total for each chunk.
Support for horizon maps has been merged into the map functionality in common as well.
- The way we pass the world from the server to the client has been updated. Rather than passing the prerendered map, we instead pass three maps with values for each chunk; one with the color information, a second with altitude information, and a third with horizon map information. We then reconstruct the map on the client, together with some additional information we send from the server (like the sea level and maximum height). See `common/src/msg/server.rs` for a detailed description of the format of `WorldMapMsg`, and `server/src/libr.rs` and `client/src/lib.rs` for details of the map construction and parsing.
- Artifacts related to image rotation were fixed. See the commit message for commit SHA `cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e` for a detailed explanation. This involved changes to shaders, the addition of a new type of graphic (also reflected in the graphic cache) that allows specifying a border color (which automatically makes the associated texture immutable), and some related fixes. I reproduce the first two paragraphs of the MR description as well:
```
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
```
- Multiflow rivers were enabled.
This does not really need to be part of this MR, and would be easy to revert, but since it seemed to provide a nice improvement it's currently packaged with it.
We already computed multiple outflows from each chunk for erosion purposes long before this MR.
However, we never modified river rendering to be able to handle this case (just a single downhill river flow is complex enough!) so this was not exposed when deciding which chunks were rivers.
Now that
- In the process of making changes related to the world map, various incidental fixes and optimizations were required. Some examples of fixes include making sure terrain is never lowered to below sea level (to make the shadow maps report correct values), fixing map altitudes and colors to understand things like cliffs and "block level" coloring (that doesn'te xist on the column level), and fixing a crashbug when rendering images for the UI where source pixels are strongly rectangular. Some examples of related performance fixes include avoiding allocating a fresh vector for all the maps (i.e. copying it over to change the format from `[u32; n]` to `DynamicImage` and then copying again to convert to `RgbaImage`), and instead using the `gfx::memory::slice` function to accomplish the same thing. These sorts of changes are spread all arond the code.
This includes the additon of a new scene, `voxygen/src/scene/lod.rs`, a new pipeline `voxygen/src/render/pipeline/lod_terrain.rs`, and new shaders `assets/vxygen/shaders/lod-terrain-vert.glsl` and `assets/vxygen/shaders/lod-terrain-frag.glsl`, as well as associated changes to the renderer in `voxygen/src/render/renderer.rs`.
The main idea behind our initial approach to LOD was to take the world data we now get from the server (altitude, color, and horizon mapping).
- Some previously computed values were turned into shader uniforms for better prediction on weak processors. (@zesterer)
- Calls to power or trig functions were removed or replaced with multiplications, where possible.
- After some deliberation
- To properly handle sprite "waving" for nearby sprites,
We explicitly designed the greedy meshing system with figures and sprites in mind.
In both cases, we want to be able to *efficiently* pack many different models into the same texture, especially in cases where we know
we will either not be removing any of the grouped-together from the models from the texture, or will remove all of them at once (so
they can be packed into some specific subtexture).
For sprites, since we know every model in advance and never intend to deallocate them, we currently pack them all as efficiently as
possible into one giant tetxure atlas. However, in the future we might opt to pack them slightly less efficiently in exchange for
shrinking the sprite vertex size.
For figures, we pack all the textures for each *model* into the same atlas.
is a global texture atlas used for every sprite, and for figures which is why we have the ability to mesh multiple
models to the same texture area (using the simple texture atlas allocator) without requiring intermediate vector allocations.
This is accomplished by delaying the time when we actually write the color and light data to the texture until *after* all the
model vertices have been meshed; then, we can just allocate the whole color/light array at once, making the atlas we use an
exact fit. In computer science-y terms, we accomplish this delay by, after we perform the initial greedy meshing (without
texture information), not continuing to create the texture data, but instead constructing a *continuation*--that is, a function
that, when called, will execute the rest of the computation. We push this continuation (which in Rust terms is a `FnOnce` closure
that takes the `ColLightsInfo` that it is supposed to write to as context) onto a
onto a vector
resizing. To allow for suspended writes to texture data, Rust pointed out to me that the continuation that would eventually write the color and light data to the texture atlas (the one that is shared by all models sharing the same greedy mesher) would have to *own* whatever data it mshed. Because we often generate the model data to mesh as a temporary in `voxygen/src/load.rs`, the
- Matrix multiplications in the shader were reduced for figure data (@zesterer).
- Vertex "waves" for fluid data were removed.
- Terrain "bending" near edges was removed.
- Scaling was fixed to make sure empty space was not introduced in a space previously occupied by a block. It was also changed to take ownership of its voxel data,
rather than sharing it, to let it be used with meshing.
- Rust's nightly version was bumped in order to use the `array_map` function, which lets us reuse more code between the simple map and `FigureModelCache`.
- PositionedGlyph::standalone.
---
I tried to cite sources in many cases[^realtime],[^lloyd],[^lispsm],[^pbrt],[^greedy],[^tjunctions]
where I needed features from elsewhere but I am particularly grateful for the following resources,
esepcially where they have accompanying source code. I linked all of them that are accessible to the public (those that are not were
obtained through legal means).
[^realtime]: Eisemann, Elmar, Michael Schwarz, Ulf Assarsson, Michael Wimmer. Real-Time Shadows. A K Peters/CRC Press (T&F), 20160419.
[^lloyd]: Lloyd,B. 2007. [Logarithmic perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). PhD thesis, University of North Carolina.
[^lispsm]: Wimmer, M., Scherzer, D., and Purgathofer, W. 2004. [Light space perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). In Proceedings of Eurographics Symposium on Rendering 2004, pp. 143– 152.
[^pbrt]: Pharr, Matt, et al. [http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf](Physically Based Rendering: From Theory to Implementation). Third edition, Morgan Kaufmann Publishers/Elsevier, 2017.
[^greedy]: mikolalysenko. “Meshing in a Minecraft Game.” 0 FPS, 30 June 2012, <https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/>.
[^tjunctions]: blackflux. “Meshing in Voxel Engines – Part 1.” Blackflux.Com, 23 Feb. 2014, <https://blackflux.wordpress.com/2014/02/23/meshing-in-voxel-engines-part-1/>.
I am also especially grateful to Khronos, Wikiepdia, and stackoverflow for answering many of my specific questions while writing the MR.
---
Squashed commit of the following:
commit 300505e7305a2fdac722a808ee8538323f215f39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 18:46:25 2020 +0200
Fixing cargo doc and typo in CHANGELOG.
commit ec0aeb18e8499d7d84ef818331b4b65c3d76cea6
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 15:38:50 2020 +0200
Hopefully final commit for the LOD branch.
commit 5e8ea0b1eaac02903a02feb2eb038d195de4872f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 10:14:26 2020 +0200
Falling back to power as stopgap.
commit e44a1cbf46504ee9931a01bdc9033e145500d557
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 09:25:41 2020 +0200
Address imbris feedback.
Temporarily disables shiny water, lowers max VD.
These restrictions will be lifted soon after merging.
commit 561e25778a108ac3712f5ec2ce3a51234c4430d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 08:31:13 2020 +0200
Tweaking shaders a bit.
commit 7d19259078ce0dd7b3742ad7d0cb3fab3ece3fdc
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:59:43 2020 +0200
Fix view example as well.
commit 051cd4934e0fad2c0b15db4380a4189fa318679f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:29:06 2020 +0200
Fix meshing benchmark.
commit c95e07db3b4dcca285678985e65e31b927cb1c61
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 05:46:22 2020 +0200
Address MR feedback, fix scene clouds.
commit 1bfb816cabdb3ffc1e507a009c2d98696b4b573a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:39:36 2020 +0200
Incorporating Pfau's figure color changes.
New eyes and new humanoid colors.
commit 3f9b89a3ac7b3356b1dba0d1a8f6541357f81469
Merge: e2f5162e4 62c53963a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:29:41 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit e2f5162e4f96f4124aa43488f7245d341b3dcfd4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:28:38 2020 +0200
World colors are all hotloadable.
They live in assets/world/style/colors.ron.
Only a small handful of hardcoed colors remain in World; they are either
part of the map, or difficult to disentangle from the rest of the
computation. Comments are made where appropriate.
commit 62c53963abe1975009d34a8f9515a355bef24f31
Author: Marcel Märtens <marcel.cochem@googlemail.com>
Date: Wed Aug 19 15:59:00 2020 +0200
replace pretty_env_logger with tracing
commit 5b1625f99d9586fe80e2232f583ec5af9f953099
Merge: d71003acd 4942b5b39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:15:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit d71003acdabeff970b3928e97c26af6847b5b78e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:14:34 2020 +0200
Hotloading colors, part 1: colors in common.
Currently, this just entails humanoid colors. There are only three
colors not handled; the light emitter colors in
common/src/comp/inventory/item/tool.rs. These don't seem important
enough to me to warrant making hotloadable, at least not right now, but
if it's needed later we can always add them to the file.
commit 63b5e0e553eb2ea49276f192a6fc7dd65254270d
Merge: c32b337a4 6d2c4b9c1
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 13:05:37 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c32b337a46e10d9de473d178a94a3ccd61c39bb3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:52:04 2020 +0200
Fixing LOD grid, for real.
commit a166ae0360395387e09fb35a1f84210c2ce5ec24
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:28:05 2020 +0200
Addressing imbris's initial feedback.
Fixes two minor bugs: explosion particles were no longer spawning
randomly, and LOD grids were not perfectly even.
commit 4cbad004f44060994252dd3d38647a14a589712f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:27:58 2020 +0200
Bumping nightly per request.
commit 548680276aac77c25d43d16b5622f847d474dbef
Merge: acc098604 8f8b20c91
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:26:06 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit acc0986040589a3492f88a740bc3c3fc693b26d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:28:32 2020 +0200
Lower resolution due to lying drivers.
commit d3b878de2a52c358d2944a6bbd0555dad7fbdb10
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:15:38 2020 +0200
Fix issues msh encountered with Intel 4600.
commit 10245e0c1b0cb6fae10d86409435364edc6102ef
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 21:15:02 2020 +0200
Merge more models into one mesh than we did previously.
commit 3155c31e663c52ae5c3a53d5fb5665892a1a498a
Merge: 7204cc8a7 3c199280e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:35:22 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7204cc8a7a4f74a30306bd205d9834fee4bb944f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:34:43 2020 +0200
Fix not yet done NPC animations.
This forces them all to be the idle animation if not specified.
This fixes issues where you'd have giant NPCs in water.
commit bc83360f2a08918f19d417b5f772e1ff554dba08
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 19:36:37 2020 +0200
Try to fix some bugs:
- Z fighting with LOD terrain and water.
- Audio SFX not playing.
commit 1fd104aa603bf3781b6526a5cada46aeca3049dd
Merge: 862df3c99 7c2c392a3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 12:02:31 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 862df3c9976c4da9bd7cfd784f1a85973127968a
Merge: 0a4218ed9 75c1d4401
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 05:52:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0a4218ed9d541a2b34c133351bea38a99ddf4ea7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 22:27:14 2020 +0200
Fix particle depth.
commit f51dfdeb442d0dd5243dd2f344fa4be295bd0875
Merge: c6251a956 5e6dc0471
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:19:04 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit c6251a956ad376400dca5c23420cf8d213dc8fdf
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:15:46 2020 +0200
Cache figures more intelligently.
Cache figures for longer, and don't cache character states for the
player except where they actually affect the rendered model.
commit 0ed801d5404982c6fb63b1eaa4567d908b294c9d
Merge: c11b9bdf0 eea64f78f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 16:32:24 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c11b9bdf0a53bf9884d2f5a48fec9b01d582df1a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 11:47:15 2020 +0200
Remove unneeded Clippy annotation.
commit 16aa9ef40af56d69289d00aafb3deadfb8bd4f35
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 8 00:53:02 2020 +0200
Fix hotloading and Clippy.
commit 3dc973e0be5b758da1e9805eb764ad401374cd0c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 23:50:27 2020 +0200
Major speedups with SIMD.
commit fba64a7d93d5a96077ce87287bbce6ab9b7fbcae
Merge: 76429d00e d1e10b178
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:19 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 76429d00eea00d212fbd672a84ee91e75b19b938
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:10 2020 +0200
Add clippy.toml.
commit c79f512f84dbb83cb82b7954db68ff241dfd8e41
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 11:55:20 2020 +0200
Fix all clippy issues, clean up Rust code.
commit 6f90e010b3fbefb53b0d632e819931350015b6b8
Merge: 77a8c7c26 5929cfa5c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:30 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 77a8c7c267d3f44a1a62bd6b2274359973c5e4d4
Merge: b44e44232 44febaabd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:10 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 5929cfa5c713aa392110bbb62407f76caf53c3df
Author: jshipsey <jshipsey18@gmail.com>
Date: Thu Aug 6 20:47:27 2020 -0400
fixed in-hand arrow bug
commit b44e442325d828f1cd564d66908f89d09e80474b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 6 13:40:35 2020 +0200
Miscellaneous performance improvements.
commit be37acf287c1360d8085862526ac3365ffd1d768
Merge: 125d7fc6c c11876547
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 05:49:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 125d7fc6c4dcd8c8c5f27b8268a4d64f409f3644
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 04:55:31 2020 +0200
Abstract over simd vs. repr_c vectors.
Also some minor improvements to Event size.
commit d4d4956e9252e1241ce110b2aa85076c6b1e2a23
Merge: 5f3b7294a aced5f979
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:56:54 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 5f3b7294af1f8533edc2620b58863c248e2b07af
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:43:52 2020 +0200
Fix formatting issues I missed before.
commit a428a3ebba70dcab63dd0f8cd983120c90617271
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:41:51 2020 +0200
Fix clippy warnings, part 1.
There aer still a bunch of type too complex and
function takes too many arguments warnings that I'll fix later
(or ignore, since in the one case I did fix a function takes too
many arguments warning I think it made the code *less* readable).
commit ba54307540ed8a937ac08209730284fc653af85b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 30 13:22:42 2020 +0200
Fix light animations so they are removed when the light turns off.
commit 7e0f4bcbf0f4717145d8beac40d52e3acebbe2aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 21:10:20 2020 +0200
Fix crash in edge case for pixel art.
commit 56da06f7a351e2b949e9b014a90b974d511a0924
Merge: cf74d55f2 9f53a4a19
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:56:52 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:29:52 2020 +0200
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
The first concern was addressed by fixing the dimensions of the map
images drawn from the UI (so that we always use a square source
rectangle, rather than a rectangular one according to the dimensions of
the map). We also fixed the way rotation was done in the fragment
shader for north-facing sources to make it properly handle aspect ratio
(this was already done for north-facing targets). Together, these fix
rendering issues peculiar to rectangular maps.
The second and third concerns were jointly addressed by adding an
optional border color to every 2D image drawn by the UI. This turns
out not to waste extra space even though we hold a full f32 color
(to avoid an extra dependency on gfx's PackedColor), since voxel
images already take up more space than Optiion<[f32; 4]> requires.
This is then implemented automatically using the "border color"
wrapping method in the attached sampler.
Since this is implemented in graphics hardware, it only works (at
least naively) if the actual image bounds match the texture bounds.
Therefore, we altered the way the graphics cache stores images
with a border color to guarantee that they are always in their own
texture, whose size exactly matches their extent. Since the easiest
currently exposed way to set a border color is to do so for an
immutable texture, we went a bit further and added a new "immutable"
texture storage type used for these cases; currently, it is always
and automatically used only when there is a specified border color,
but in theory there's no reason we couldn't provide immutable-only
images that use the default wrapping mdoe (though clamp to border
is admittedly not a great default).
To fix the maps case specifically, we set the border color to a
translucent version of the ocean border color. This may need
tweaking going forward, which shouldn't be hard.
As part of this process, we had to modify graphics replacement to
make sure immutable images are *removed* when invalidated, rather
than just having a validity flag unset (this is normally done by
the UI to try to reuse allocations in place if images are updated
in benign ways, since the texture atlases used for Ui do not
support deallocation; currently this is only used for item images,
so there should be no overlap with immutable image replacement,
so this was purely precautionary).
Since we were already touching the relevant code, we also updated
the image dependency to a newer version that provides more ways
to avoid allocations, and made a few other changes that should
hopefully eliminate redundant most of the intermediate buffer
allocations we were performing for what should be zero-cost
conversions. This may slightly improve performance in some
cases.
commit ad18ce939940a8c697270f6e9b94db9942fd8295
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 13:21:09 2020 +0200
Fix continent scale hack.
commit 36b1cb074f5b195aebd7dbbc3da7f0246a1a18ec
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 12:11:40 2020 +0200
Enable loading different sized maps without a recompile.
We may want to tweak the effects of the continent_scale_hack.
commit 13b6d4d534cc4814b7cb3294ca41bbfea0a6b186
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 10:55:48 2020 +0200
Removing WORLD_SIZE, part 1.
Erased almost every instance of WORLD_SIZE and replaced it with a local
power of two, map_size_lg (which respects certain invariants; see
common/src/terrain/map.rs for more details about MapSizeLg). This also
means we can avoid a dependency on the world crate from client, as
desired.
Now that the rest of the code is not expecting a fixed WORLD_SIZE, the
next step is to arrange for maps to store their world size, and to use
that world size as a basis prior to loading the map (as well, probably,
as prior to configuring some of the noise functions).
commit 30b1d2c6428230a9eaa0d749cdcbbd6f1cbccd78
Merge: 7d56ba31b 1377b369f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:58 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 7d56ba31b445441461b28a07fc495d7d4f047c17
Merge: 2101113b4 598f14b25
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 1377b369f6db2258e910d467a5740f31789e3ded
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sun Jul 19 23:25:38 2020 +0200
more saturated pumpkins
commit ae8d50527f93bb0616c2ad46ce4dacb63bc37c6d
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sat Jul 18 20:29:56 2020 +0200
acacia models
commit 2101113b467e691de787392d7f20f1745f5637bd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 18 18:55:25 2020 +0200
Higher detail LOD.
commit add2cfae04b4385fa5590e11e2bd5229d9dee0aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 16 01:57:39 2020 +0200
Revert some irrelevant stuff.
commit 2e2ab3dc1eaa59a4aef7f8d34a53d8aae4c8553a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 15 13:30:49 2020 +0200
Fixing various things about shadows.
* Correcting optimal LISPSM parameter.
* Figure shadows are cast when they're not visible.
* Chunk shadows stay cast until you look away.
* Seamless cubemaps for point lights.
* Etc.
commit 6c31e6b56217274285b597af297036691ea5d897
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 19:50:26 2020 +0200
Fix shadow creation.
commit 6332cbe006115ae205597529cd8bbccd146c2cca
Merge: be438657c 930e0028b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:47:00 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit be438657c33d7b5bfb0a9582c3ed3fd366637323
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:28:08 2020 +0200
Tweaks to shadows.
Added shadow map resolution configuration, added seamless cubemaps,
documented all existing rendering options, and fixed a few Clippy
errors.
commit 23b4058906013c7d2a40c286e20e32c5fbd897ed
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 10:11:19 2020 +0200
Fix moon, use nonlinear noise for terrain.
Note that the latter has a bit of performance cost.
commit 7fbe5cbfbb9dc29607957b8e62f432a4deed193d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:23:02 2020 +0200
Address lies about max texture size.
commit bcfc62b5e13a1cdd83f57535fde4694720bebfd9
Merge: 75e3626a7 18a08e8fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:22:08 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 75e3626a785919f43fdcf2127c2b10e3e4df2f9f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:21:52 2020 +0200
OpenGL 3.3 minimum.
commit 18a08e8fe2739f02af99a5d2cb4e7c38c49e858b
Author: Monty Marz <m.marzouq@gmx.de>
Date: Tue Jul 7 23:57:52 2020 +0200
settings localization
commit 90c5d1ca3620092bc3ae10b2211489eb1cf6f5e8
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 21:11:48 2020 +0200
Lower near distance.
commit 0e66f02b25aaddaa2dfddbbc89cd67de54a9a7b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 20:09:01 2020 +0200
All sprites sway in the wind now.
commit db1401a6910bf42dcf502462c90038752ff5fbdb
Merge: 69e508d8c e8b4b29d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 19:34:17 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 69e508d8c94d8973033817ca86f357e466fc7c4d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 18:41:37 2020 +0200
Make it easy to switch to SIMD for math.
commit ffe0f5928c7a7e87d00cb5426b3b1d831d7e02fd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 21:21:12 2020 +0200
Fix some issues with underwater rendering.
commit bfda6da42f38fd02c31ee92c81ab785a3e50c2a0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 19:17:59 2020 +0200
Fix some minor display issues.
commit 0ed752e087968cf901301884aaeae698e32ef8a5
Merge: ccc6a06a8 518edcb85
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:14:21 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit ccc6a06a8d4504d6b9f7af7905a414d2ee06ab76
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:04:34 2020 +0200
Some minor changes.
commit 4e020246702889269efe1a191788992164c508d6
Merge: 50a64d927 e05c9267a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 16:17:40 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 50a64d927e6c4f4b0e4688e4cbfca694bc3f922a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 13:07:03 2020 +0200
Fix far plane.
commit 7dd06da34cae8f9ea3b6c889fe965181f3fd3949
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:25:35 2020 +0200
Add shadows.glsl.
commit 618a18c998778bf871b905a74657440fcc384c80
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:10:22 2020 +0200
Adding shadows, greedy meshing, and more.
commit eaea83fe6a5cb1cb0ba8beef888183c718258496
Merge: 267018495 2f89b863e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 22:47:07 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 2670184954a13e4a9e7a4e35ba79aac0c5fac2f7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 21:20:01 2020 +0200
Make civsim and sites deterministic.
For anything in worldgen where you use a HashMap, *please* think
carefully about which hasher you are going to use! This is
especially true if (for some reason) you are depending on hashmap
iteration order remaining stable for some aspect of worldgen.
commit f8376fd5dc72b4a9c2f51a6b4570d59c8b8e9343
Merge: 654f7e049 cdee191dd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 17:53:57 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 654f7e049258d9da27c09608bbe6a46ffa8787e5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed May 20 21:22:30 2020 +0200
Correct backface culling.
commit 560501df05ca725409b0f2e4eb31bdfdc15fd0c7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue May 19 17:22:06 2020 +0200
Greedy messhing for shadows.
commit a4d87e1875ca543436e6bbbeb20348facc5a52d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun May 17 05:59:00 2020 +0200
Shadow maps work for lantern.
commit 243d0837b8a3b08172c9a3c348d964d7ddc2a0a8
Merge: 04382dc28 71dd520cd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:53:13 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 04382dc28632b6c66e8821f6870c0daaa1c1901a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:22:17 2020 +0200
WIP: better graphics config, better LOD, shadow maps.
commit 22ddbad3eb32bfa70f0932176022208fe67ded81
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 18:54:09 2020 +0200
Minor shader fixes.
commit 746a10e8d01ac235f994b0cde78fa48998602a1f
Merge: 0f4a0e763 40ab94673
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 04:02:09 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0f4a0e763db3afbdc4fb0558611f38326ca87151
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 23:03:24 2020 +0200
Switch back to pop-in terrain.
commit dd74fa7e4a53667b38811d7aec58d7f6a68889bb
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 22:58:55 2020 +0200
LOD shading closer to voxel shading.
commit ef67bd58ba0bdaf622b078892d768263b6cba268
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 28 20:49:03 2020 +0200
Experimental underwater lighting.
commit 2c5ad9d07605e80d5fd5679dd3a5d70c605b86a9
Merge: 748279835 303967a6f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 22:35:24 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7482798354eda18c8207950080fc24d443a369de
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 21:59:55 2020 +0200
Replace discard in figure-frag.
commit d83b4ae69be4912f69bf7835f509c68a1c7770a4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:45:57 2020 +0200
Fix sprite lighting, HDR from focus_pos.
commit 0594238004f116274905fa0ed7c2b6c417ed1d29
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:14:10 2020 +0200
Proper HDR from point lights.
commit 48c93d2b41ce5743103d18e76cc228f5ac766492
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 14:01:43 2020 +0200
Brighter ambiance, darker LOD shadows.
commit e0452e895ccfa8a43f368cae3b8b8aedc24dad93
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 13:13:23 2020 +0200
More proper HDR.
commit 4c6da3ed16cfeebb455e40da5f557b4af9a499d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 00:13:10 2020 +0200
Trying LOD noise.
commit 682a3d74c85df5503ffe1fc1cc891bce789df1ad
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 23:11:08 2020 +0200
Fix LOD heights in towns.
commit cc39e5734e8b18f9077bf42e66337c1319dd6b6e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 21:01:23 2020 +0200
More LOD fixes.
commit 8116b21c2e51c836e77894e309ac273caf2917b3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:54:43 2020 +0200
I like this coloring.
commit bc2560ea90b36f4b46190005344232d993043ac3
Merge: 14effdd5d e690efe71
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:48:33 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 14effdd5db8747fcf3eb34f03b46b7792e92d1c5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:24:35 2020 +0200
Re-saturate.
commit 48a643955d4435b78179acba0beb4a979905cc31
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:23:57 2020 +0200
Various fixes.
commit f7b497a0c25f4ad4682c71dd1ed6f608052feb9b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 03:22:49 2020 +0200
Render figures again.
commit 44e4aad48deba8266b9f8bdfd3db096b381f5327
Merge: e6f0a5a98 9ec319a18
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 02:01:04 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit e6f0a5a981a82533ba188fff0a54ce98577bb152
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 24 16:12:20 2020 +0200
Add atmospheric scattering.
commit f2953087f691a8edbc001cb98ebf5059fc6f8ac0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 23 00:01:20 2020 +0200
Fix shadowing for specular reflections.
commit ddd4a67a9799b8d08c7dc0c2bec90621c2bed0e3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Apr 22 22:56:12 2020 +0200
HDR fixes.
commit 1015e60deef3c447381996277df7496707a63bd0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 21 18:25:19 2020 +0200
More lighting changes.
commit 80c264abd111fb237e57843efcb5c071d4f84613
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 13 00:29:59 2020 +0200
Lighting experiments.
commit 8414987e589dd5102bad89762a3adaccc0bfe957
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 9 02:38:40 2020 +0200
WIP -- lighting changes and soft shadows.
commit 9cd2b3fb0d6b49776c6dfe463e4169637250b11a
Merge: c7ea687eb 8b149ad11
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:29 2020 +0200
Merge branch 'sharp/new-lighting' into sharp/small-fixes
commit c7ea687ebbc5aace1b455f134a5bf49ce2c7434a
Merge: 476441531 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:02 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 8b149ad11ad4bb75018fcf9519baec27d1c95951
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:32:39 2020 +0200
Trying out a new lighting model.
commit b0ac9f36f755dd06f7c17c46150568064790864f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 07:56:11 2020 +0200
Use bicubic interpolation for terrain.
commit f6fc9307a121514b614bc50ef8eb055953e7da8a
Merge: 33140a295 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 05:01:41 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 4764415312aae6e9ac2d00e86e84577cb958f1ab
Merge: ed2d0111d 13388ee6a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 04:54:48 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 13388ee6a42943f3f79a9cb488346cef18e272fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 20:30:08 2020 +0200
Various fixes (to coloring and to soft shadows).
commit fbd084a94a067082a87cd6d28b82054709bc9265
Merge: 5a089863b 4fdf6896a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 18:50:38 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/map-colors
commit ed2d0111d994262ae836d84d1fe5a45e4de72a0b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 06:49:27 2020 +0200
Combining colors and LOD.
commit 88342640c6b835114d01c797b89fdede3b0a2108
Merge: 33140a295 5a089863b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:49:20 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 33140a2951b8212725f42c758b277aaec4d888f7
Merge: 4c65a5aed f34d4b379
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:36:21 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 5a089863beb01d4794bbe3580ada47b278715ea2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 03:17:49 2020 +0200
Making maps brighter.
This is probably not the right way to do it, but oh well!
commit 32b2c99109dd486aa922886081068f9c550c83f2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 02:46:36 2020 +0200
Horizon mapping and "layered" map generation.
Horizon mapping is a method of shadow mapping specific to height maps.
It can handle any angle between 0 and 90 degrees from the ground, as
long as know the horizontal direction in advance, by remembering only a
single angle (the "horizon angle" of the shadow map). More is explained
in common/src/msg/server.rs. We also remember the approximate height of
the largest occluder, to try to be able to generate soft shadows and
create a vertical position where the shadows can't go higher.
Additionally, map generation has been reworked. Instead of computing
everything from explicit samples, we pass in sampling functions that
return exactly what the map generator needs. This allows us to cleanly
separate the way we sample things like altitudes and colors from the map
generation process. We exploit this to generate maps *partially* on the
server (with colors and rivers, but not shading). We can then send the
partially completed map to the client, which can combine it with shadow
information to generate the final map. This is useful for two reasons:
first, it makes sure the client can apply shadow information by itself,
and second, it lets us pass the unshaded map for use with level of
detail functionality.
For similar reasons, river generation is split
out into its own layer, but for now we opt to still generate rivers on
the server (since the river wire format is more complicated to compress
and may require some extra work to make sure we have enough precision to
draw rivers well enough for LoD).
Finally, the mostly ad-hoc lighting we were performing has been (mostly)
replaced with explicit Phong reflection shading (including specular
highlights). Regularizing this seems useful and helps clarify the
"meaning" of the various light intensities, and helps us keep a more
physically plausible basis. However, its interaction with soft shadows
is still imperfect, and it's not yet clear to me what we need to do to
turn this into something useful for LoD.
commit f8926a5737ddc51f3d585c651a64c43677aae0f4
Merge: a1aee931e 875ae6ced
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Mar 13 13:32:42 2020 +0100
Merge remote-tracking branch 'origin/master' into sharp/map-colors
commit 4c65a5aed353b119aea65a2aaeb94549b67beb42
Author: Treeco <5021038-Treeco@users.noreply.gitlab.com>
Date: Mon Feb 24 16:48:05 2020 +0000
Made LOD setting slider exponential
commit 2fa7b2d20d7233dc8bfd64f9f7f54617575248f1
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 17:49:53 2020 +0000
Added mist to LoD
commit aab059a450b5f635777129ff82cc15b662965c3c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 15:14:06 2020 +0000
Added LoD slider
commit 779c36b538121c5ade3633ae5cb67bb14c8c3877
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:54:55 2020 +0000
Reduced cost of vertex pushing
commit 9fea150473906b166365b738ebcea07c697daf3d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:38:53 2020 +0000
Fixed maths, improved LoD resolution
commit 5481df38fea5bf183ff376a3337179cfaa5233dc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 11:22:50 2020 +0000
Dynamically relocate LoD vertices to enhance details
commit a3e36a50ababd615da7db1b26158c7906a5def01
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 18:13:51 2020 +0000
Simpler terrain spiral rendering
commit 255f450ae9ac8763db4bede075fb409161ed57cc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:53:17 2020 +0000
Better LoD precision
commit 3d027aebe812a5b8658a4eb8123dc9f61b3776d2
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:04:03 2020 +0000
Better falloff
commit be775c9484b457b2c0b1a494aec03392d0c70e76
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 15:30:45 2020 +0000
Applied good ideas from experimental branch
commit 58587b68545a23c5c04ab4574a4b94b3bc982246
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 16:15:13 2020 +0000
Minor fixes to LoD merging
commit 7b42aebd709c14df2db766aad61d9280ad24d84d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 15:04:44 2020 +0000
Capped LoD dragging
commit 8aafc559f87124e1ea5ca6e3ddc2aa0c242d793c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:54:37 2020 +0000
Better blending between LoD and terrain border
commit edd3455d5161792d87ddc8eadc0ecbad5532b284
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:40:19 2020 +0000
Fixed LoD z depth, added sea level offset
commit b9b06744620114dd5556e73f64fa93c145503a7c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:27:43 2020 +0000
Better LoD smoothing
commit a1aee931e790431560cd2d953ad61d9497072afd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Feb 21 14:52:17 2020 +0100
Adding shadows.
commit 2400786c13dd891c131ed86d48d05df516a8a778
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 13:48:40 2020 +0000
Use world map as LoD source
commit dbf650f504a4c25fbbc2096ac3616c736bf52d23
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Jan 20 00:48:14 2020 +0000
Better clouds at distance
commit 5e6f81b86cdb9730b9b056877b19257075fd5fa8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Jan 19 23:59:02 2020 +0000
sync
commit 745e7540ddb000cc645f612767b337c2ddc3f7c0
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 12:40:48 2019 +0000
Improved cloud falloff mist, faster noise sampling
commit f6a200d0cb866196ba57697466755f9e0c7ea5d8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 10:09:00 2019 +0000
Improved long-range depth precision, removed unnecessary LoD polygons
commit 63d1b2bb2292898d59fb4f4e502201103dfeb86f
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 20:57:46 2019 +0000
Working LoD shader
commit f13d98ee3e58f881e8b978861a67663b59ed91ec
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 11:03:40 2019 +0000
LoD first attempt (stack overflow issue)
2020-08-20 18:34:59 +00:00
|
|
|
|
uniform_noise(map_size_lg, |posi, wposf| {
|
2019-10-16 11:39:41 +00:00
|
|
|
|
// Check whether any tiles around this tile are water.
|
|
|
|
|
if pure_water(posi) {
|
|
|
|
|
None
|
|
|
|
|
} else {
|
|
|
|
|
// 0 to 1, hopefully.
|
|
|
|
|
Some(
|
|
|
|
|
(gen_ctx.humid_nz.get(wposf.div(1024.0).into_array()) as f32)
|
|
|
|
|
.add(1.0)
|
|
|
|
|
.mul(0.5),
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
},
|
2019-08-24 19:32:07 +00:00
|
|
|
|
)
|
2019-10-16 11:39:41 +00:00
|
|
|
|
},
|
|
|
|
|
);
|
2019-08-21 18:41:32 +00:00
|
|
|
|
|
|
|
|
|
let gen_cdf = GenCdf {
|
|
|
|
|
humid_base,
|
|
|
|
|
temp_base,
|
2019-08-22 19:03:42 +00:00
|
|
|
|
chaos,
|
2019-08-22 22:57:42 +00:00
|
|
|
|
alt,
|
2019-11-19 18:34:52 +00:00
|
|
|
|
basement,
|
2019-10-16 11:39:41 +00:00
|
|
|
|
water_alt,
|
|
|
|
|
dh,
|
|
|
|
|
flux: flux_old,
|
|
|
|
|
pure_flux,
|
|
|
|
|
alt_no_water,
|
|
|
|
|
rivers,
|
2019-08-21 18:41:32 +00:00
|
|
|
|
};
|
|
|
|
|
|
(See sharp/lod-history) LOD, shadows, greedy meshing, new lighting, perf
---
Pretty much a Veloren fork at this point. Here's a high level overview of the changes (will be added to CHANGELOG just before merge).
At a high level this MR incorporates roughly two groups of changes.
The first group consists of new game features: more flexible map sizes, level of detail terrain, shadow maps, and a new lighting
engine. This is "feature work" that (mostly) only adds new things to Veloren, and mostly shouldn't affect old stuff.
The second big group of changes are those addressing the fallout from all the new features. These include performance fixes of
various sorts: the addition of multiple graphics options and optimization of the cheap ones to avoid work, switching all voxel
models to use some variant of greedy meshing, switching over much of our CPU-side vector math to exploit SIMD instructions
(coinciding with a fork of `vek`), and a rewrite of how the UI handles text rendering (coinciding with updates to our fork
of `conrod`). Making Veloren's hardcoded colors appear correct under the new lighting engine also required considerably
changes (TODO: Fill in this section when it's complete).
The second category of changes often heavily touches code owned by other people, including frequently modified code "owned" by a
handful of people, so I recommend that this code be reviewed particularly carefully.
---
At a high level (each will be described in more detail below):
- The world map has been refactored.
- The world size is no longer hardcoded (@zesterer).
- The map generation code was made generic to allow using it outside of the `world` crate (@zesterer).
- On world creation, we now compute *horizon maps* (@zesterer).
- The way we pass the world from the server to the client has been updated (@xMAC94x).
- Artifacts related to image rotation were fixed (@imbris).
- Multiflow rivers were enabled (@zesterer).
- In the process of making changes related to the world map, various incidental fixes and optimizations were required.
- The new *level of detail* feature was added (@zesterer wrote part of this and has checked out the rest).
- A new LOD terrain rendering step was added to the pipeline.
- The LOD terrain quality was made configurable via a graphics setting.
- Horizon maps were used to cast shadows from LOD chunks on both LOD and non-LOD terrain.
- A "voxelization" effect was incorporated into rendered LOD terrain to make it blend better into the world.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Veloren's lighting has been completely overhauled (@zesterer has already checked most of this out).
- A semi-accurate index of refraction was assigned to our materials.
- A new, more realistic, physically based approach to lighting was used using the *Ashikhmin Shirley* BRDF.
- We emulate *atmospheric scattering* using equations designed for measuring solar panel light exposure.
- We attempt to compute *realistic light attenuation* in water using its real material properties.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Point and directional lights now cast realistic shadows, using *shadow mapping.* (@imbris, @zesterer, @Treeco, @YuriMomo)
- Point light shadow maps were added to the rendering pipeline, using geometry shaders and *seamless cube maps*.
- Directional light shadows were added to the rendering pipeline, using LISPSM together with disabling *depth clamping*.
- "Shadow-only" chunks and NPCs were added to prevent shadows from models behind you from disappearing.
- In the process of making changes related to shadow maps, various incidental fixes and optimizations were required.
The addition of shadow maps, LOD terrain, and the new lighting all led to significant performance degradation, on top of other
changes happening in master. Therefore, a large number of performance improvements were also needed:
- The graphics options were made much more flexible and configurable, and shaders were optimize.
- New options were provided for how to render lights and shadows (@Pfauenauge, @zesterer).
- Graphic setting storage and configuration were overhauled to make adding new features easier (@Pfauenauge, @imbris).
- Shaders were rewritten to utilize GLSL's preprocessor to avoid overhead (@zesterer, @YuriMomo).
- In the process of making changes related to providing additional rendering options, various incidental fixes and optimizations were required.
- Voxel model creation was switched to use *greedy meshing.*
- A new voxel meshing method, greedy meshing, was added (@imbris).
- Uses of the older meshing methods were migrated to use greedy meshing (@imbris, @jshipsey, @Pfauenauge).
- New restrictions were added to terrain, figure, and sprites to future proof them for further optimizations (@jshipsey, @Pfauenauge, @zesterer).
- Most positions are now relative to either chunk or player position for better precision (@imbris, @zesterer, @scottc).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- Animation and terrain math were switched to use SIMD where possible.
- Fixes were made to vek to make its SIMD feature usable for us (@zesterer, @imbris).
- The interface and types used in bone animation were changed in various ways (@jshipsey, @Snowram, @Pfauenauge).
- Redundant code generation for body animation is now partly taken care of by a macro (@jshipsey, @Snowram, @Pfauenauge).
- Animation code was modified to to use vek's SIMD representation where possible (@jshipsey, @Snowram, @Pfauenauge).
- Terrain meshing code and shadow map math were also modified to use vek's SIMD representation (@imbris).
- SIMD instruction generation was enabled (@YuriMomo, @jshipsey, @Snowram, @imbris, @Angelonfira, @xMAC94x).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- The way we cache glyphs was completely refactored, fixed, and optimized.
- Our fork of `conrod` was optimized in various ways (@imbris).
- Our fork of `conrod` now exposes whether a widget was updated during the current frame (@imbris).
- Our use of the glyph cache was rewritten for correctness (@imbris).
- A *text cache* was introduced that lets us skip remeshing glyphs that have not changed (@imbris).
- Various changes were made to reduce pressure on the glyph cache, with more planned (@imbris, @Pfauenauge).
- In the process of making changes related to the glyph cache, various incidental fixes and optimizations were required.
- Colors were changed to keep Veloren's look consistent with master.
- Some older tree models were brought back (@Pfauenauge).
- TODO(@Sharp): All hardcoded colors were extracted and made hotloadable.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Hardcoded colors were fixed to conform to Veloren's style.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Color models were fixed to conform to Veloren's style.
A detailed description of the involved changes follows.
---
- The world size is no longer hardcoded. All functions dependent on world size now take a `WorldSizeLg`, which holds the base 2 logarithm of each actual world dimension and is guaranteed to maintain certain properties (outlined in `common/src/terrain/map.rs`). Additionally, many utility functions that utilize the world size were moved into `common` as well (mostly `common/src/terrain/mod.rs`). Finally, the world map format was updated in order to store its size explicitly, with a migration path from the old format that should work whenever the old formatted map was a square (practically always). See `world/src/sim/mod.rs` for these changes.
- The map generation code was made generic to allow using it outside of the `world` crate. The parts of the map generating code that do not need to query the world were moved over to `common/src/terrain/map.rs`, allowing them to be used from the client without creating a dependency on `world`. The rest of it was turned into helper functions in `world/src/sim/map.rs`, which can be passed as closures to the generic map generation code to complete its construction. This also means that colors are now passed in separately to the map generation function. See <https://veloren.net/devblog-78/> for more details.
- On world creation, we now compute *horizon maps*. See the function in `world/src/sim/util.rs`.
Given a height map and a plane intersecting that height map, our horizon maps allow us to encode enough information to reconstruct shadows for each point on the height map using only the *horizon angle* (the angle at which the sun starts to become visible). As Veloren's sun only covers one plane, this is sufficient for encoding sun shadows for LOD terrain, by encoding two angles per chunk (one for each 90 degrees the sun covers). We can also use this for the moon, if we want, since the moon follows the same path. Additionally, we store the *height* of the furthest occluder, to try to make the shadows volumetric; so this means 4 bytes in total for each chunk.
Support for horizon maps has been merged into the map functionality in common as well.
- The way we pass the world from the server to the client has been updated. Rather than passing the prerendered map, we instead pass three maps with values for each chunk; one with the color information, a second with altitude information, and a third with horizon map information. We then reconstruct the map on the client, together with some additional information we send from the server (like the sea level and maximum height). See `common/src/msg/server.rs` for a detailed description of the format of `WorldMapMsg`, and `server/src/libr.rs` and `client/src/lib.rs` for details of the map construction and parsing.
- Artifacts related to image rotation were fixed. See the commit message for commit SHA `cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e` for a detailed explanation. This involved changes to shaders, the addition of a new type of graphic (also reflected in the graphic cache) that allows specifying a border color (which automatically makes the associated texture immutable), and some related fixes. I reproduce the first two paragraphs of the MR description as well:
```
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
```
- Multiflow rivers were enabled.
This does not really need to be part of this MR, and would be easy to revert, but since it seemed to provide a nice improvement it's currently packaged with it.
We already computed multiple outflows from each chunk for erosion purposes long before this MR.
However, we never modified river rendering to be able to handle this case (just a single downhill river flow is complex enough!) so this was not exposed when deciding which chunks were rivers.
Now that
- In the process of making changes related to the world map, various incidental fixes and optimizations were required. Some examples of fixes include making sure terrain is never lowered to below sea level (to make the shadow maps report correct values), fixing map altitudes and colors to understand things like cliffs and "block level" coloring (that doesn'te xist on the column level), and fixing a crashbug when rendering images for the UI where source pixels are strongly rectangular. Some examples of related performance fixes include avoiding allocating a fresh vector for all the maps (i.e. copying it over to change the format from `[u32; n]` to `DynamicImage` and then copying again to convert to `RgbaImage`), and instead using the `gfx::memory::slice` function to accomplish the same thing. These sorts of changes are spread all arond the code.
This includes the additon of a new scene, `voxygen/src/scene/lod.rs`, a new pipeline `voxygen/src/render/pipeline/lod_terrain.rs`, and new shaders `assets/vxygen/shaders/lod-terrain-vert.glsl` and `assets/vxygen/shaders/lod-terrain-frag.glsl`, as well as associated changes to the renderer in `voxygen/src/render/renderer.rs`.
The main idea behind our initial approach to LOD was to take the world data we now get from the server (altitude, color, and horizon mapping).
- Some previously computed values were turned into shader uniforms for better prediction on weak processors. (@zesterer)
- Calls to power or trig functions were removed or replaced with multiplications, where possible.
- After some deliberation
- To properly handle sprite "waving" for nearby sprites,
We explicitly designed the greedy meshing system with figures and sprites in mind.
In both cases, we want to be able to *efficiently* pack many different models into the same texture, especially in cases where we know
we will either not be removing any of the grouped-together from the models from the texture, or will remove all of them at once (so
they can be packed into some specific subtexture).
For sprites, since we know every model in advance and never intend to deallocate them, we currently pack them all as efficiently as
possible into one giant tetxure atlas. However, in the future we might opt to pack them slightly less efficiently in exchange for
shrinking the sprite vertex size.
For figures, we pack all the textures for each *model* into the same atlas.
is a global texture atlas used for every sprite, and for figures which is why we have the ability to mesh multiple
models to the same texture area (using the simple texture atlas allocator) without requiring intermediate vector allocations.
This is accomplished by delaying the time when we actually write the color and light data to the texture until *after* all the
model vertices have been meshed; then, we can just allocate the whole color/light array at once, making the atlas we use an
exact fit. In computer science-y terms, we accomplish this delay by, after we perform the initial greedy meshing (without
texture information), not continuing to create the texture data, but instead constructing a *continuation*--that is, a function
that, when called, will execute the rest of the computation. We push this continuation (which in Rust terms is a `FnOnce` closure
that takes the `ColLightsInfo` that it is supposed to write to as context) onto a
onto a vector
resizing. To allow for suspended writes to texture data, Rust pointed out to me that the continuation that would eventually write the color and light data to the texture atlas (the one that is shared by all models sharing the same greedy mesher) would have to *own* whatever data it mshed. Because we often generate the model data to mesh as a temporary in `voxygen/src/load.rs`, the
- Matrix multiplications in the shader were reduced for figure data (@zesterer).
- Vertex "waves" for fluid data were removed.
- Terrain "bending" near edges was removed.
- Scaling was fixed to make sure empty space was not introduced in a space previously occupied by a block. It was also changed to take ownership of its voxel data,
rather than sharing it, to let it be used with meshing.
- Rust's nightly version was bumped in order to use the `array_map` function, which lets us reuse more code between the simple map and `FigureModelCache`.
- PositionedGlyph::standalone.
---
I tried to cite sources in many cases[^realtime],[^lloyd],[^lispsm],[^pbrt],[^greedy],[^tjunctions]
where I needed features from elsewhere but I am particularly grateful for the following resources,
esepcially where they have accompanying source code. I linked all of them that are accessible to the public (those that are not were
obtained through legal means).
[^realtime]: Eisemann, Elmar, Michael Schwarz, Ulf Assarsson, Michael Wimmer. Real-Time Shadows. A K Peters/CRC Press (T&F), 20160419.
[^lloyd]: Lloyd,B. 2007. [Logarithmic perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). PhD thesis, University of North Carolina.
[^lispsm]: Wimmer, M., Scherzer, D., and Purgathofer, W. 2004. [Light space perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). In Proceedings of Eurographics Symposium on Rendering 2004, pp. 143– 152.
[^pbrt]: Pharr, Matt, et al. [http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf](Physically Based Rendering: From Theory to Implementation). Third edition, Morgan Kaufmann Publishers/Elsevier, 2017.
[^greedy]: mikolalysenko. “Meshing in a Minecraft Game.” 0 FPS, 30 June 2012, <https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/>.
[^tjunctions]: blackflux. “Meshing in Voxel Engines – Part 1.” Blackflux.Com, 23 Feb. 2014, <https://blackflux.wordpress.com/2014/02/23/meshing-in-voxel-engines-part-1/>.
I am also especially grateful to Khronos, Wikiepdia, and stackoverflow for answering many of my specific questions while writing the MR.
---
Squashed commit of the following:
commit 300505e7305a2fdac722a808ee8538323f215f39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 18:46:25 2020 +0200
Fixing cargo doc and typo in CHANGELOG.
commit ec0aeb18e8499d7d84ef818331b4b65c3d76cea6
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 15:38:50 2020 +0200
Hopefully final commit for the LOD branch.
commit 5e8ea0b1eaac02903a02feb2eb038d195de4872f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 10:14:26 2020 +0200
Falling back to power as stopgap.
commit e44a1cbf46504ee9931a01bdc9033e145500d557
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 09:25:41 2020 +0200
Address imbris feedback.
Temporarily disables shiny water, lowers max VD.
These restrictions will be lifted soon after merging.
commit 561e25778a108ac3712f5ec2ce3a51234c4430d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 08:31:13 2020 +0200
Tweaking shaders a bit.
commit 7d19259078ce0dd7b3742ad7d0cb3fab3ece3fdc
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:59:43 2020 +0200
Fix view example as well.
commit 051cd4934e0fad2c0b15db4380a4189fa318679f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:29:06 2020 +0200
Fix meshing benchmark.
commit c95e07db3b4dcca285678985e65e31b927cb1c61
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 05:46:22 2020 +0200
Address MR feedback, fix scene clouds.
commit 1bfb816cabdb3ffc1e507a009c2d98696b4b573a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:39:36 2020 +0200
Incorporating Pfau's figure color changes.
New eyes and new humanoid colors.
commit 3f9b89a3ac7b3356b1dba0d1a8f6541357f81469
Merge: e2f5162e4 62c53963a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:29:41 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit e2f5162e4f96f4124aa43488f7245d341b3dcfd4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:28:38 2020 +0200
World colors are all hotloadable.
They live in assets/world/style/colors.ron.
Only a small handful of hardcoed colors remain in World; they are either
part of the map, or difficult to disentangle from the rest of the
computation. Comments are made where appropriate.
commit 62c53963abe1975009d34a8f9515a355bef24f31
Author: Marcel Märtens <marcel.cochem@googlemail.com>
Date: Wed Aug 19 15:59:00 2020 +0200
replace pretty_env_logger with tracing
commit 5b1625f99d9586fe80e2232f583ec5af9f953099
Merge: d71003acd 4942b5b39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:15:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit d71003acdabeff970b3928e97c26af6847b5b78e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:14:34 2020 +0200
Hotloading colors, part 1: colors in common.
Currently, this just entails humanoid colors. There are only three
colors not handled; the light emitter colors in
common/src/comp/inventory/item/tool.rs. These don't seem important
enough to me to warrant making hotloadable, at least not right now, but
if it's needed later we can always add them to the file.
commit 63b5e0e553eb2ea49276f192a6fc7dd65254270d
Merge: c32b337a4 6d2c4b9c1
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 13:05:37 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c32b337a46e10d9de473d178a94a3ccd61c39bb3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:52:04 2020 +0200
Fixing LOD grid, for real.
commit a166ae0360395387e09fb35a1f84210c2ce5ec24
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:28:05 2020 +0200
Addressing imbris's initial feedback.
Fixes two minor bugs: explosion particles were no longer spawning
randomly, and LOD grids were not perfectly even.
commit 4cbad004f44060994252dd3d38647a14a589712f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:27:58 2020 +0200
Bumping nightly per request.
commit 548680276aac77c25d43d16b5622f847d474dbef
Merge: acc098604 8f8b20c91
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:26:06 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit acc0986040589a3492f88a740bc3c3fc693b26d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:28:32 2020 +0200
Lower resolution due to lying drivers.
commit d3b878de2a52c358d2944a6bbd0555dad7fbdb10
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:15:38 2020 +0200
Fix issues msh encountered with Intel 4600.
commit 10245e0c1b0cb6fae10d86409435364edc6102ef
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 21:15:02 2020 +0200
Merge more models into one mesh than we did previously.
commit 3155c31e663c52ae5c3a53d5fb5665892a1a498a
Merge: 7204cc8a7 3c199280e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:35:22 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7204cc8a7a4f74a30306bd205d9834fee4bb944f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:34:43 2020 +0200
Fix not yet done NPC animations.
This forces them all to be the idle animation if not specified.
This fixes issues where you'd have giant NPCs in water.
commit bc83360f2a08918f19d417b5f772e1ff554dba08
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 19:36:37 2020 +0200
Try to fix some bugs:
- Z fighting with LOD terrain and water.
- Audio SFX not playing.
commit 1fd104aa603bf3781b6526a5cada46aeca3049dd
Merge: 862df3c99 7c2c392a3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 12:02:31 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 862df3c9976c4da9bd7cfd784f1a85973127968a
Merge: 0a4218ed9 75c1d4401
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 05:52:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0a4218ed9d541a2b34c133351bea38a99ddf4ea7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 22:27:14 2020 +0200
Fix particle depth.
commit f51dfdeb442d0dd5243dd2f344fa4be295bd0875
Merge: c6251a956 5e6dc0471
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:19:04 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit c6251a956ad376400dca5c23420cf8d213dc8fdf
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:15:46 2020 +0200
Cache figures more intelligently.
Cache figures for longer, and don't cache character states for the
player except where they actually affect the rendered model.
commit 0ed801d5404982c6fb63b1eaa4567d908b294c9d
Merge: c11b9bdf0 eea64f78f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 16:32:24 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c11b9bdf0a53bf9884d2f5a48fec9b01d582df1a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 11:47:15 2020 +0200
Remove unneeded Clippy annotation.
commit 16aa9ef40af56d69289d00aafb3deadfb8bd4f35
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 8 00:53:02 2020 +0200
Fix hotloading and Clippy.
commit 3dc973e0be5b758da1e9805eb764ad401374cd0c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 23:50:27 2020 +0200
Major speedups with SIMD.
commit fba64a7d93d5a96077ce87287bbce6ab9b7fbcae
Merge: 76429d00e d1e10b178
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:19 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 76429d00eea00d212fbd672a84ee91e75b19b938
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:10 2020 +0200
Add clippy.toml.
commit c79f512f84dbb83cb82b7954db68ff241dfd8e41
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 11:55:20 2020 +0200
Fix all clippy issues, clean up Rust code.
commit 6f90e010b3fbefb53b0d632e819931350015b6b8
Merge: 77a8c7c26 5929cfa5c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:30 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 77a8c7c267d3f44a1a62bd6b2274359973c5e4d4
Merge: b44e44232 44febaabd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:10 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 5929cfa5c713aa392110bbb62407f76caf53c3df
Author: jshipsey <jshipsey18@gmail.com>
Date: Thu Aug 6 20:47:27 2020 -0400
fixed in-hand arrow bug
commit b44e442325d828f1cd564d66908f89d09e80474b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 6 13:40:35 2020 +0200
Miscellaneous performance improvements.
commit be37acf287c1360d8085862526ac3365ffd1d768
Merge: 125d7fc6c c11876547
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 05:49:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 125d7fc6c4dcd8c8c5f27b8268a4d64f409f3644
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 04:55:31 2020 +0200
Abstract over simd vs. repr_c vectors.
Also some minor improvements to Event size.
commit d4d4956e9252e1241ce110b2aa85076c6b1e2a23
Merge: 5f3b7294a aced5f979
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:56:54 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 5f3b7294af1f8533edc2620b58863c248e2b07af
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:43:52 2020 +0200
Fix formatting issues I missed before.
commit a428a3ebba70dcab63dd0f8cd983120c90617271
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:41:51 2020 +0200
Fix clippy warnings, part 1.
There aer still a bunch of type too complex and
function takes too many arguments warnings that I'll fix later
(or ignore, since in the one case I did fix a function takes too
many arguments warning I think it made the code *less* readable).
commit ba54307540ed8a937ac08209730284fc653af85b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 30 13:22:42 2020 +0200
Fix light animations so they are removed when the light turns off.
commit 7e0f4bcbf0f4717145d8beac40d52e3acebbe2aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 21:10:20 2020 +0200
Fix crash in edge case for pixel art.
commit 56da06f7a351e2b949e9b014a90b974d511a0924
Merge: cf74d55f2 9f53a4a19
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:56:52 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:29:52 2020 +0200
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
The first concern was addressed by fixing the dimensions of the map
images drawn from the UI (so that we always use a square source
rectangle, rather than a rectangular one according to the dimensions of
the map). We also fixed the way rotation was done in the fragment
shader for north-facing sources to make it properly handle aspect ratio
(this was already done for north-facing targets). Together, these fix
rendering issues peculiar to rectangular maps.
The second and third concerns were jointly addressed by adding an
optional border color to every 2D image drawn by the UI. This turns
out not to waste extra space even though we hold a full f32 color
(to avoid an extra dependency on gfx's PackedColor), since voxel
images already take up more space than Optiion<[f32; 4]> requires.
This is then implemented automatically using the "border color"
wrapping method in the attached sampler.
Since this is implemented in graphics hardware, it only works (at
least naively) if the actual image bounds match the texture bounds.
Therefore, we altered the way the graphics cache stores images
with a border color to guarantee that they are always in their own
texture, whose size exactly matches their extent. Since the easiest
currently exposed way to set a border color is to do so for an
immutable texture, we went a bit further and added a new "immutable"
texture storage type used for these cases; currently, it is always
and automatically used only when there is a specified border color,
but in theory there's no reason we couldn't provide immutable-only
images that use the default wrapping mdoe (though clamp to border
is admittedly not a great default).
To fix the maps case specifically, we set the border color to a
translucent version of the ocean border color. This may need
tweaking going forward, which shouldn't be hard.
As part of this process, we had to modify graphics replacement to
make sure immutable images are *removed* when invalidated, rather
than just having a validity flag unset (this is normally done by
the UI to try to reuse allocations in place if images are updated
in benign ways, since the texture atlases used for Ui do not
support deallocation; currently this is only used for item images,
so there should be no overlap with immutable image replacement,
so this was purely precautionary).
Since we were already touching the relevant code, we also updated
the image dependency to a newer version that provides more ways
to avoid allocations, and made a few other changes that should
hopefully eliminate redundant most of the intermediate buffer
allocations we were performing for what should be zero-cost
conversions. This may slightly improve performance in some
cases.
commit ad18ce939940a8c697270f6e9b94db9942fd8295
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 13:21:09 2020 +0200
Fix continent scale hack.
commit 36b1cb074f5b195aebd7dbbc3da7f0246a1a18ec
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 12:11:40 2020 +0200
Enable loading different sized maps without a recompile.
We may want to tweak the effects of the continent_scale_hack.
commit 13b6d4d534cc4814b7cb3294ca41bbfea0a6b186
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 10:55:48 2020 +0200
Removing WORLD_SIZE, part 1.
Erased almost every instance of WORLD_SIZE and replaced it with a local
power of two, map_size_lg (which respects certain invariants; see
common/src/terrain/map.rs for more details about MapSizeLg). This also
means we can avoid a dependency on the world crate from client, as
desired.
Now that the rest of the code is not expecting a fixed WORLD_SIZE, the
next step is to arrange for maps to store their world size, and to use
that world size as a basis prior to loading the map (as well, probably,
as prior to configuring some of the noise functions).
commit 30b1d2c6428230a9eaa0d749cdcbbd6f1cbccd78
Merge: 7d56ba31b 1377b369f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:58 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 7d56ba31b445441461b28a07fc495d7d4f047c17
Merge: 2101113b4 598f14b25
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 1377b369f6db2258e910d467a5740f31789e3ded
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sun Jul 19 23:25:38 2020 +0200
more saturated pumpkins
commit ae8d50527f93bb0616c2ad46ce4dacb63bc37c6d
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sat Jul 18 20:29:56 2020 +0200
acacia models
commit 2101113b467e691de787392d7f20f1745f5637bd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 18 18:55:25 2020 +0200
Higher detail LOD.
commit add2cfae04b4385fa5590e11e2bd5229d9dee0aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 16 01:57:39 2020 +0200
Revert some irrelevant stuff.
commit 2e2ab3dc1eaa59a4aef7f8d34a53d8aae4c8553a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 15 13:30:49 2020 +0200
Fixing various things about shadows.
* Correcting optimal LISPSM parameter.
* Figure shadows are cast when they're not visible.
* Chunk shadows stay cast until you look away.
* Seamless cubemaps for point lights.
* Etc.
commit 6c31e6b56217274285b597af297036691ea5d897
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 19:50:26 2020 +0200
Fix shadow creation.
commit 6332cbe006115ae205597529cd8bbccd146c2cca
Merge: be438657c 930e0028b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:47:00 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit be438657c33d7b5bfb0a9582c3ed3fd366637323
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:28:08 2020 +0200
Tweaks to shadows.
Added shadow map resolution configuration, added seamless cubemaps,
documented all existing rendering options, and fixed a few Clippy
errors.
commit 23b4058906013c7d2a40c286e20e32c5fbd897ed
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 10:11:19 2020 +0200
Fix moon, use nonlinear noise for terrain.
Note that the latter has a bit of performance cost.
commit 7fbe5cbfbb9dc29607957b8e62f432a4deed193d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:23:02 2020 +0200
Address lies about max texture size.
commit bcfc62b5e13a1cdd83f57535fde4694720bebfd9
Merge: 75e3626a7 18a08e8fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:22:08 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 75e3626a785919f43fdcf2127c2b10e3e4df2f9f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:21:52 2020 +0200
OpenGL 3.3 minimum.
commit 18a08e8fe2739f02af99a5d2cb4e7c38c49e858b
Author: Monty Marz <m.marzouq@gmx.de>
Date: Tue Jul 7 23:57:52 2020 +0200
settings localization
commit 90c5d1ca3620092bc3ae10b2211489eb1cf6f5e8
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 21:11:48 2020 +0200
Lower near distance.
commit 0e66f02b25aaddaa2dfddbbc89cd67de54a9a7b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 20:09:01 2020 +0200
All sprites sway in the wind now.
commit db1401a6910bf42dcf502462c90038752ff5fbdb
Merge: 69e508d8c e8b4b29d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 19:34:17 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 69e508d8c94d8973033817ca86f357e466fc7c4d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 18:41:37 2020 +0200
Make it easy to switch to SIMD for math.
commit ffe0f5928c7a7e87d00cb5426b3b1d831d7e02fd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 21:21:12 2020 +0200
Fix some issues with underwater rendering.
commit bfda6da42f38fd02c31ee92c81ab785a3e50c2a0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 19:17:59 2020 +0200
Fix some minor display issues.
commit 0ed752e087968cf901301884aaeae698e32ef8a5
Merge: ccc6a06a8 518edcb85
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:14:21 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit ccc6a06a8d4504d6b9f7af7905a414d2ee06ab76
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:04:34 2020 +0200
Some minor changes.
commit 4e020246702889269efe1a191788992164c508d6
Merge: 50a64d927 e05c9267a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 16:17:40 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 50a64d927e6c4f4b0e4688e4cbfca694bc3f922a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 13:07:03 2020 +0200
Fix far plane.
commit 7dd06da34cae8f9ea3b6c889fe965181f3fd3949
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:25:35 2020 +0200
Add shadows.glsl.
commit 618a18c998778bf871b905a74657440fcc384c80
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:10:22 2020 +0200
Adding shadows, greedy meshing, and more.
commit eaea83fe6a5cb1cb0ba8beef888183c718258496
Merge: 267018495 2f89b863e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 22:47:07 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 2670184954a13e4a9e7a4e35ba79aac0c5fac2f7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 21:20:01 2020 +0200
Make civsim and sites deterministic.
For anything in worldgen where you use a HashMap, *please* think
carefully about which hasher you are going to use! This is
especially true if (for some reason) you are depending on hashmap
iteration order remaining stable for some aspect of worldgen.
commit f8376fd5dc72b4a9c2f51a6b4570d59c8b8e9343
Merge: 654f7e049 cdee191dd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 17:53:57 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 654f7e049258d9da27c09608bbe6a46ffa8787e5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed May 20 21:22:30 2020 +0200
Correct backface culling.
commit 560501df05ca725409b0f2e4eb31bdfdc15fd0c7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue May 19 17:22:06 2020 +0200
Greedy messhing for shadows.
commit a4d87e1875ca543436e6bbbeb20348facc5a52d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun May 17 05:59:00 2020 +0200
Shadow maps work for lantern.
commit 243d0837b8a3b08172c9a3c348d964d7ddc2a0a8
Merge: 04382dc28 71dd520cd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:53:13 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 04382dc28632b6c66e8821f6870c0daaa1c1901a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:22:17 2020 +0200
WIP: better graphics config, better LOD, shadow maps.
commit 22ddbad3eb32bfa70f0932176022208fe67ded81
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 18:54:09 2020 +0200
Minor shader fixes.
commit 746a10e8d01ac235f994b0cde78fa48998602a1f
Merge: 0f4a0e763 40ab94673
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 04:02:09 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0f4a0e763db3afbdc4fb0558611f38326ca87151
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 23:03:24 2020 +0200
Switch back to pop-in terrain.
commit dd74fa7e4a53667b38811d7aec58d7f6a68889bb
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 22:58:55 2020 +0200
LOD shading closer to voxel shading.
commit ef67bd58ba0bdaf622b078892d768263b6cba268
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 28 20:49:03 2020 +0200
Experimental underwater lighting.
commit 2c5ad9d07605e80d5fd5679dd3a5d70c605b86a9
Merge: 748279835 303967a6f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 22:35:24 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7482798354eda18c8207950080fc24d443a369de
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 21:59:55 2020 +0200
Replace discard in figure-frag.
commit d83b4ae69be4912f69bf7835f509c68a1c7770a4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:45:57 2020 +0200
Fix sprite lighting, HDR from focus_pos.
commit 0594238004f116274905fa0ed7c2b6c417ed1d29
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:14:10 2020 +0200
Proper HDR from point lights.
commit 48c93d2b41ce5743103d18e76cc228f5ac766492
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 14:01:43 2020 +0200
Brighter ambiance, darker LOD shadows.
commit e0452e895ccfa8a43f368cae3b8b8aedc24dad93
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 13:13:23 2020 +0200
More proper HDR.
commit 4c6da3ed16cfeebb455e40da5f557b4af9a499d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 00:13:10 2020 +0200
Trying LOD noise.
commit 682a3d74c85df5503ffe1fc1cc891bce789df1ad
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 23:11:08 2020 +0200
Fix LOD heights in towns.
commit cc39e5734e8b18f9077bf42e66337c1319dd6b6e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 21:01:23 2020 +0200
More LOD fixes.
commit 8116b21c2e51c836e77894e309ac273caf2917b3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:54:43 2020 +0200
I like this coloring.
commit bc2560ea90b36f4b46190005344232d993043ac3
Merge: 14effdd5d e690efe71
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:48:33 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 14effdd5db8747fcf3eb34f03b46b7792e92d1c5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:24:35 2020 +0200
Re-saturate.
commit 48a643955d4435b78179acba0beb4a979905cc31
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:23:57 2020 +0200
Various fixes.
commit f7b497a0c25f4ad4682c71dd1ed6f608052feb9b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 03:22:49 2020 +0200
Render figures again.
commit 44e4aad48deba8266b9f8bdfd3db096b381f5327
Merge: e6f0a5a98 9ec319a18
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 02:01:04 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit e6f0a5a981a82533ba188fff0a54ce98577bb152
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 24 16:12:20 2020 +0200
Add atmospheric scattering.
commit f2953087f691a8edbc001cb98ebf5059fc6f8ac0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 23 00:01:20 2020 +0200
Fix shadowing for specular reflections.
commit ddd4a67a9799b8d08c7dc0c2bec90621c2bed0e3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Apr 22 22:56:12 2020 +0200
HDR fixes.
commit 1015e60deef3c447381996277df7496707a63bd0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 21 18:25:19 2020 +0200
More lighting changes.
commit 80c264abd111fb237e57843efcb5c071d4f84613
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 13 00:29:59 2020 +0200
Lighting experiments.
commit 8414987e589dd5102bad89762a3adaccc0bfe957
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 9 02:38:40 2020 +0200
WIP -- lighting changes and soft shadows.
commit 9cd2b3fb0d6b49776c6dfe463e4169637250b11a
Merge: c7ea687eb 8b149ad11
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:29 2020 +0200
Merge branch 'sharp/new-lighting' into sharp/small-fixes
commit c7ea687ebbc5aace1b455f134a5bf49ce2c7434a
Merge: 476441531 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:02 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 8b149ad11ad4bb75018fcf9519baec27d1c95951
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:32:39 2020 +0200
Trying out a new lighting model.
commit b0ac9f36f755dd06f7c17c46150568064790864f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 07:56:11 2020 +0200
Use bicubic interpolation for terrain.
commit f6fc9307a121514b614bc50ef8eb055953e7da8a
Merge: 33140a295 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 05:01:41 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 4764415312aae6e9ac2d00e86e84577cb958f1ab
Merge: ed2d0111d 13388ee6a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 04:54:48 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 13388ee6a42943f3f79a9cb488346cef18e272fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 20:30:08 2020 +0200
Various fixes (to coloring and to soft shadows).
commit fbd084a94a067082a87cd6d28b82054709bc9265
Merge: 5a089863b 4fdf6896a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 18:50:38 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/map-colors
commit ed2d0111d994262ae836d84d1fe5a45e4de72a0b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 06:49:27 2020 +0200
Combining colors and LOD.
commit 88342640c6b835114d01c797b89fdede3b0a2108
Merge: 33140a295 5a089863b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:49:20 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 33140a2951b8212725f42c758b277aaec4d888f7
Merge: 4c65a5aed f34d4b379
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:36:21 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 5a089863beb01d4794bbe3580ada47b278715ea2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 03:17:49 2020 +0200
Making maps brighter.
This is probably not the right way to do it, but oh well!
commit 32b2c99109dd486aa922886081068f9c550c83f2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 02:46:36 2020 +0200
Horizon mapping and "layered" map generation.
Horizon mapping is a method of shadow mapping specific to height maps.
It can handle any angle between 0 and 90 degrees from the ground, as
long as know the horizontal direction in advance, by remembering only a
single angle (the "horizon angle" of the shadow map). More is explained
in common/src/msg/server.rs. We also remember the approximate height of
the largest occluder, to try to be able to generate soft shadows and
create a vertical position where the shadows can't go higher.
Additionally, map generation has been reworked. Instead of computing
everything from explicit samples, we pass in sampling functions that
return exactly what the map generator needs. This allows us to cleanly
separate the way we sample things like altitudes and colors from the map
generation process. We exploit this to generate maps *partially* on the
server (with colors and rivers, but not shading). We can then send the
partially completed map to the client, which can combine it with shadow
information to generate the final map. This is useful for two reasons:
first, it makes sure the client can apply shadow information by itself,
and second, it lets us pass the unshaded map for use with level of
detail functionality.
For similar reasons, river generation is split
out into its own layer, but for now we opt to still generate rivers on
the server (since the river wire format is more complicated to compress
and may require some extra work to make sure we have enough precision to
draw rivers well enough for LoD).
Finally, the mostly ad-hoc lighting we were performing has been (mostly)
replaced with explicit Phong reflection shading (including specular
highlights). Regularizing this seems useful and helps clarify the
"meaning" of the various light intensities, and helps us keep a more
physically plausible basis. However, its interaction with soft shadows
is still imperfect, and it's not yet clear to me what we need to do to
turn this into something useful for LoD.
commit f8926a5737ddc51f3d585c651a64c43677aae0f4
Merge: a1aee931e 875ae6ced
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Mar 13 13:32:42 2020 +0100
Merge remote-tracking branch 'origin/master' into sharp/map-colors
commit 4c65a5aed353b119aea65a2aaeb94549b67beb42
Author: Treeco <5021038-Treeco@users.noreply.gitlab.com>
Date: Mon Feb 24 16:48:05 2020 +0000
Made LOD setting slider exponential
commit 2fa7b2d20d7233dc8bfd64f9f7f54617575248f1
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 17:49:53 2020 +0000
Added mist to LoD
commit aab059a450b5f635777129ff82cc15b662965c3c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 15:14:06 2020 +0000
Added LoD slider
commit 779c36b538121c5ade3633ae5cb67bb14c8c3877
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:54:55 2020 +0000
Reduced cost of vertex pushing
commit 9fea150473906b166365b738ebcea07c697daf3d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:38:53 2020 +0000
Fixed maths, improved LoD resolution
commit 5481df38fea5bf183ff376a3337179cfaa5233dc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 11:22:50 2020 +0000
Dynamically relocate LoD vertices to enhance details
commit a3e36a50ababd615da7db1b26158c7906a5def01
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 18:13:51 2020 +0000
Simpler terrain spiral rendering
commit 255f450ae9ac8763db4bede075fb409161ed57cc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:53:17 2020 +0000
Better LoD precision
commit 3d027aebe812a5b8658a4eb8123dc9f61b3776d2
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:04:03 2020 +0000
Better falloff
commit be775c9484b457b2c0b1a494aec03392d0c70e76
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 15:30:45 2020 +0000
Applied good ideas from experimental branch
commit 58587b68545a23c5c04ab4574a4b94b3bc982246
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 16:15:13 2020 +0000
Minor fixes to LoD merging
commit 7b42aebd709c14df2db766aad61d9280ad24d84d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 15:04:44 2020 +0000
Capped LoD dragging
commit 8aafc559f87124e1ea5ca6e3ddc2aa0c242d793c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:54:37 2020 +0000
Better blending between LoD and terrain border
commit edd3455d5161792d87ddc8eadc0ecbad5532b284
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:40:19 2020 +0000
Fixed LoD z depth, added sea level offset
commit b9b06744620114dd5556e73f64fa93c145503a7c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:27:43 2020 +0000
Better LoD smoothing
commit a1aee931e790431560cd2d953ad61d9497072afd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Feb 21 14:52:17 2020 +0100
Adding shadows.
commit 2400786c13dd891c131ed86d48d05df516a8a778
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 13:48:40 2020 +0000
Use world map as LoD source
commit dbf650f504a4c25fbbc2096ac3616c736bf52d23
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Jan 20 00:48:14 2020 +0000
Better clouds at distance
commit 5e6f81b86cdb9730b9b056877b19257075fd5fa8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Jan 19 23:59:02 2020 +0000
sync
commit 745e7540ddb000cc645f612767b337c2ddc3f7c0
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 12:40:48 2019 +0000
Improved cloud falloff mist, faster noise sampling
commit f6a200d0cb866196ba57697466755f9e0c7ea5d8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 10:09:00 2019 +0000
Improved long-range depth precision, removed unnecessary LoD polygons
commit 63d1b2bb2292898d59fb4f4e502201103dfeb86f
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 20:57:46 2019 +0000
Working LoD shader
commit f13d98ee3e58f881e8b978861a67663b59ed91ec
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 11:03:40 2019 +0000
LoD first attempt (stack overflow issue)
2020-08-20 18:34:59 +00:00
|
|
|
|
let chunks = (0..map_size_lg.chunks_len())
|
2019-10-16 11:39:41 +00:00
|
|
|
|
.into_par_iter()
|
(See sharp/lod-history) LOD, shadows, greedy meshing, new lighting, perf
---
Pretty much a Veloren fork at this point. Here's a high level overview of the changes (will be added to CHANGELOG just before merge).
At a high level this MR incorporates roughly two groups of changes.
The first group consists of new game features: more flexible map sizes, level of detail terrain, shadow maps, and a new lighting
engine. This is "feature work" that (mostly) only adds new things to Veloren, and mostly shouldn't affect old stuff.
The second big group of changes are those addressing the fallout from all the new features. These include performance fixes of
various sorts: the addition of multiple graphics options and optimization of the cheap ones to avoid work, switching all voxel
models to use some variant of greedy meshing, switching over much of our CPU-side vector math to exploit SIMD instructions
(coinciding with a fork of `vek`), and a rewrite of how the UI handles text rendering (coinciding with updates to our fork
of `conrod`). Making Veloren's hardcoded colors appear correct under the new lighting engine also required considerably
changes (TODO: Fill in this section when it's complete).
The second category of changes often heavily touches code owned by other people, including frequently modified code "owned" by a
handful of people, so I recommend that this code be reviewed particularly carefully.
---
At a high level (each will be described in more detail below):
- The world map has been refactored.
- The world size is no longer hardcoded (@zesterer).
- The map generation code was made generic to allow using it outside of the `world` crate (@zesterer).
- On world creation, we now compute *horizon maps* (@zesterer).
- The way we pass the world from the server to the client has been updated (@xMAC94x).
- Artifacts related to image rotation were fixed (@imbris).
- Multiflow rivers were enabled (@zesterer).
- In the process of making changes related to the world map, various incidental fixes and optimizations were required.
- The new *level of detail* feature was added (@zesterer wrote part of this and has checked out the rest).
- A new LOD terrain rendering step was added to the pipeline.
- The LOD terrain quality was made configurable via a graphics setting.
- Horizon maps were used to cast shadows from LOD chunks on both LOD and non-LOD terrain.
- A "voxelization" effect was incorporated into rendered LOD terrain to make it blend better into the world.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Veloren's lighting has been completely overhauled (@zesterer has already checked most of this out).
- A semi-accurate index of refraction was assigned to our materials.
- A new, more realistic, physically based approach to lighting was used using the *Ashikhmin Shirley* BRDF.
- We emulate *atmospheric scattering* using equations designed for measuring solar panel light exposure.
- We attempt to compute *realistic light attenuation* in water using its real material properties.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Point and directional lights now cast realistic shadows, using *shadow mapping.* (@imbris, @zesterer, @Treeco, @YuriMomo)
- Point light shadow maps were added to the rendering pipeline, using geometry shaders and *seamless cube maps*.
- Directional light shadows were added to the rendering pipeline, using LISPSM together with disabling *depth clamping*.
- "Shadow-only" chunks and NPCs were added to prevent shadows from models behind you from disappearing.
- In the process of making changes related to shadow maps, various incidental fixes and optimizations were required.
The addition of shadow maps, LOD terrain, and the new lighting all led to significant performance degradation, on top of other
changes happening in master. Therefore, a large number of performance improvements were also needed:
- The graphics options were made much more flexible and configurable, and shaders were optimize.
- New options were provided for how to render lights and shadows (@Pfauenauge, @zesterer).
- Graphic setting storage and configuration were overhauled to make adding new features easier (@Pfauenauge, @imbris).
- Shaders were rewritten to utilize GLSL's preprocessor to avoid overhead (@zesterer, @YuriMomo).
- In the process of making changes related to providing additional rendering options, various incidental fixes and optimizations were required.
- Voxel model creation was switched to use *greedy meshing.*
- A new voxel meshing method, greedy meshing, was added (@imbris).
- Uses of the older meshing methods were migrated to use greedy meshing (@imbris, @jshipsey, @Pfauenauge).
- New restrictions were added to terrain, figure, and sprites to future proof them for further optimizations (@jshipsey, @Pfauenauge, @zesterer).
- Most positions are now relative to either chunk or player position for better precision (@imbris, @zesterer, @scottc).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- Animation and terrain math were switched to use SIMD where possible.
- Fixes were made to vek to make its SIMD feature usable for us (@zesterer, @imbris).
- The interface and types used in bone animation were changed in various ways (@jshipsey, @Snowram, @Pfauenauge).
- Redundant code generation for body animation is now partly taken care of by a macro (@jshipsey, @Snowram, @Pfauenauge).
- Animation code was modified to to use vek's SIMD representation where possible (@jshipsey, @Snowram, @Pfauenauge).
- Terrain meshing code and shadow map math were also modified to use vek's SIMD representation (@imbris).
- SIMD instruction generation was enabled (@YuriMomo, @jshipsey, @Snowram, @imbris, @Angelonfira, @xMAC94x).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- The way we cache glyphs was completely refactored, fixed, and optimized.
- Our fork of `conrod` was optimized in various ways (@imbris).
- Our fork of `conrod` now exposes whether a widget was updated during the current frame (@imbris).
- Our use of the glyph cache was rewritten for correctness (@imbris).
- A *text cache* was introduced that lets us skip remeshing glyphs that have not changed (@imbris).
- Various changes were made to reduce pressure on the glyph cache, with more planned (@imbris, @Pfauenauge).
- In the process of making changes related to the glyph cache, various incidental fixes and optimizations were required.
- Colors were changed to keep Veloren's look consistent with master.
- Some older tree models were brought back (@Pfauenauge).
- TODO(@Sharp): All hardcoded colors were extracted and made hotloadable.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Hardcoded colors were fixed to conform to Veloren's style.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Color models were fixed to conform to Veloren's style.
A detailed description of the involved changes follows.
---
- The world size is no longer hardcoded. All functions dependent on world size now take a `WorldSizeLg`, which holds the base 2 logarithm of each actual world dimension and is guaranteed to maintain certain properties (outlined in `common/src/terrain/map.rs`). Additionally, many utility functions that utilize the world size were moved into `common` as well (mostly `common/src/terrain/mod.rs`). Finally, the world map format was updated in order to store its size explicitly, with a migration path from the old format that should work whenever the old formatted map was a square (practically always). See `world/src/sim/mod.rs` for these changes.
- The map generation code was made generic to allow using it outside of the `world` crate. The parts of the map generating code that do not need to query the world were moved over to `common/src/terrain/map.rs`, allowing them to be used from the client without creating a dependency on `world`. The rest of it was turned into helper functions in `world/src/sim/map.rs`, which can be passed as closures to the generic map generation code to complete its construction. This also means that colors are now passed in separately to the map generation function. See <https://veloren.net/devblog-78/> for more details.
- On world creation, we now compute *horizon maps*. See the function in `world/src/sim/util.rs`.
Given a height map and a plane intersecting that height map, our horizon maps allow us to encode enough information to reconstruct shadows for each point on the height map using only the *horizon angle* (the angle at which the sun starts to become visible). As Veloren's sun only covers one plane, this is sufficient for encoding sun shadows for LOD terrain, by encoding two angles per chunk (one for each 90 degrees the sun covers). We can also use this for the moon, if we want, since the moon follows the same path. Additionally, we store the *height* of the furthest occluder, to try to make the shadows volumetric; so this means 4 bytes in total for each chunk.
Support for horizon maps has been merged into the map functionality in common as well.
- The way we pass the world from the server to the client has been updated. Rather than passing the prerendered map, we instead pass three maps with values for each chunk; one with the color information, a second with altitude information, and a third with horizon map information. We then reconstruct the map on the client, together with some additional information we send from the server (like the sea level and maximum height). See `common/src/msg/server.rs` for a detailed description of the format of `WorldMapMsg`, and `server/src/libr.rs` and `client/src/lib.rs` for details of the map construction and parsing.
- Artifacts related to image rotation were fixed. See the commit message for commit SHA `cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e` for a detailed explanation. This involved changes to shaders, the addition of a new type of graphic (also reflected in the graphic cache) that allows specifying a border color (which automatically makes the associated texture immutable), and some related fixes. I reproduce the first two paragraphs of the MR description as well:
```
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
```
- Multiflow rivers were enabled.
This does not really need to be part of this MR, and would be easy to revert, but since it seemed to provide a nice improvement it's currently packaged with it.
We already computed multiple outflows from each chunk for erosion purposes long before this MR.
However, we never modified river rendering to be able to handle this case (just a single downhill river flow is complex enough!) so this was not exposed when deciding which chunks were rivers.
Now that
- In the process of making changes related to the world map, various incidental fixes and optimizations were required. Some examples of fixes include making sure terrain is never lowered to below sea level (to make the shadow maps report correct values), fixing map altitudes and colors to understand things like cliffs and "block level" coloring (that doesn'te xist on the column level), and fixing a crashbug when rendering images for the UI where source pixels are strongly rectangular. Some examples of related performance fixes include avoiding allocating a fresh vector for all the maps (i.e. copying it over to change the format from `[u32; n]` to `DynamicImage` and then copying again to convert to `RgbaImage`), and instead using the `gfx::memory::slice` function to accomplish the same thing. These sorts of changes are spread all arond the code.
This includes the additon of a new scene, `voxygen/src/scene/lod.rs`, a new pipeline `voxygen/src/render/pipeline/lod_terrain.rs`, and new shaders `assets/vxygen/shaders/lod-terrain-vert.glsl` and `assets/vxygen/shaders/lod-terrain-frag.glsl`, as well as associated changes to the renderer in `voxygen/src/render/renderer.rs`.
The main idea behind our initial approach to LOD was to take the world data we now get from the server (altitude, color, and horizon mapping).
- Some previously computed values were turned into shader uniforms for better prediction on weak processors. (@zesterer)
- Calls to power or trig functions were removed or replaced with multiplications, where possible.
- After some deliberation
- To properly handle sprite "waving" for nearby sprites,
We explicitly designed the greedy meshing system with figures and sprites in mind.
In both cases, we want to be able to *efficiently* pack many different models into the same texture, especially in cases where we know
we will either not be removing any of the grouped-together from the models from the texture, or will remove all of them at once (so
they can be packed into some specific subtexture).
For sprites, since we know every model in advance and never intend to deallocate them, we currently pack them all as efficiently as
possible into one giant tetxure atlas. However, in the future we might opt to pack them slightly less efficiently in exchange for
shrinking the sprite vertex size.
For figures, we pack all the textures for each *model* into the same atlas.
is a global texture atlas used for every sprite, and for figures which is why we have the ability to mesh multiple
models to the same texture area (using the simple texture atlas allocator) without requiring intermediate vector allocations.
This is accomplished by delaying the time when we actually write the color and light data to the texture until *after* all the
model vertices have been meshed; then, we can just allocate the whole color/light array at once, making the atlas we use an
exact fit. In computer science-y terms, we accomplish this delay by, after we perform the initial greedy meshing (without
texture information), not continuing to create the texture data, but instead constructing a *continuation*--that is, a function
that, when called, will execute the rest of the computation. We push this continuation (which in Rust terms is a `FnOnce` closure
that takes the `ColLightsInfo` that it is supposed to write to as context) onto a
onto a vector
resizing. To allow for suspended writes to texture data, Rust pointed out to me that the continuation that would eventually write the color and light data to the texture atlas (the one that is shared by all models sharing the same greedy mesher) would have to *own* whatever data it mshed. Because we often generate the model data to mesh as a temporary in `voxygen/src/load.rs`, the
- Matrix multiplications in the shader were reduced for figure data (@zesterer).
- Vertex "waves" for fluid data were removed.
- Terrain "bending" near edges was removed.
- Scaling was fixed to make sure empty space was not introduced in a space previously occupied by a block. It was also changed to take ownership of its voxel data,
rather than sharing it, to let it be used with meshing.
- Rust's nightly version was bumped in order to use the `array_map` function, which lets us reuse more code between the simple map and `FigureModelCache`.
- PositionedGlyph::standalone.
---
I tried to cite sources in many cases[^realtime],[^lloyd],[^lispsm],[^pbrt],[^greedy],[^tjunctions]
where I needed features from elsewhere but I am particularly grateful for the following resources,
esepcially where they have accompanying source code. I linked all of them that are accessible to the public (those that are not were
obtained through legal means).
[^realtime]: Eisemann, Elmar, Michael Schwarz, Ulf Assarsson, Michael Wimmer. Real-Time Shadows. A K Peters/CRC Press (T&F), 20160419.
[^lloyd]: Lloyd,B. 2007. [Logarithmic perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). PhD thesis, University of North Carolina.
[^lispsm]: Wimmer, M., Scherzer, D., and Purgathofer, W. 2004. [Light space perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). In Proceedings of Eurographics Symposium on Rendering 2004, pp. 143– 152.
[^pbrt]: Pharr, Matt, et al. [http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf](Physically Based Rendering: From Theory to Implementation). Third edition, Morgan Kaufmann Publishers/Elsevier, 2017.
[^greedy]: mikolalysenko. “Meshing in a Minecraft Game.” 0 FPS, 30 June 2012, <https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/>.
[^tjunctions]: blackflux. “Meshing in Voxel Engines – Part 1.” Blackflux.Com, 23 Feb. 2014, <https://blackflux.wordpress.com/2014/02/23/meshing-in-voxel-engines-part-1/>.
I am also especially grateful to Khronos, Wikiepdia, and stackoverflow for answering many of my specific questions while writing the MR.
---
Squashed commit of the following:
commit 300505e7305a2fdac722a808ee8538323f215f39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 18:46:25 2020 +0200
Fixing cargo doc and typo in CHANGELOG.
commit ec0aeb18e8499d7d84ef818331b4b65c3d76cea6
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 15:38:50 2020 +0200
Hopefully final commit for the LOD branch.
commit 5e8ea0b1eaac02903a02feb2eb038d195de4872f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 10:14:26 2020 +0200
Falling back to power as stopgap.
commit e44a1cbf46504ee9931a01bdc9033e145500d557
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 09:25:41 2020 +0200
Address imbris feedback.
Temporarily disables shiny water, lowers max VD.
These restrictions will be lifted soon after merging.
commit 561e25778a108ac3712f5ec2ce3a51234c4430d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 08:31:13 2020 +0200
Tweaking shaders a bit.
commit 7d19259078ce0dd7b3742ad7d0cb3fab3ece3fdc
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:59:43 2020 +0200
Fix view example as well.
commit 051cd4934e0fad2c0b15db4380a4189fa318679f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:29:06 2020 +0200
Fix meshing benchmark.
commit c95e07db3b4dcca285678985e65e31b927cb1c61
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 05:46:22 2020 +0200
Address MR feedback, fix scene clouds.
commit 1bfb816cabdb3ffc1e507a009c2d98696b4b573a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:39:36 2020 +0200
Incorporating Pfau's figure color changes.
New eyes and new humanoid colors.
commit 3f9b89a3ac7b3356b1dba0d1a8f6541357f81469
Merge: e2f5162e4 62c53963a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:29:41 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit e2f5162e4f96f4124aa43488f7245d341b3dcfd4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:28:38 2020 +0200
World colors are all hotloadable.
They live in assets/world/style/colors.ron.
Only a small handful of hardcoed colors remain in World; they are either
part of the map, or difficult to disentangle from the rest of the
computation. Comments are made where appropriate.
commit 62c53963abe1975009d34a8f9515a355bef24f31
Author: Marcel Märtens <marcel.cochem@googlemail.com>
Date: Wed Aug 19 15:59:00 2020 +0200
replace pretty_env_logger with tracing
commit 5b1625f99d9586fe80e2232f583ec5af9f953099
Merge: d71003acd 4942b5b39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:15:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit d71003acdabeff970b3928e97c26af6847b5b78e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:14:34 2020 +0200
Hotloading colors, part 1: colors in common.
Currently, this just entails humanoid colors. There are only three
colors not handled; the light emitter colors in
common/src/comp/inventory/item/tool.rs. These don't seem important
enough to me to warrant making hotloadable, at least not right now, but
if it's needed later we can always add them to the file.
commit 63b5e0e553eb2ea49276f192a6fc7dd65254270d
Merge: c32b337a4 6d2c4b9c1
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 13:05:37 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c32b337a46e10d9de473d178a94a3ccd61c39bb3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:52:04 2020 +0200
Fixing LOD grid, for real.
commit a166ae0360395387e09fb35a1f84210c2ce5ec24
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:28:05 2020 +0200
Addressing imbris's initial feedback.
Fixes two minor bugs: explosion particles were no longer spawning
randomly, and LOD grids were not perfectly even.
commit 4cbad004f44060994252dd3d38647a14a589712f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:27:58 2020 +0200
Bumping nightly per request.
commit 548680276aac77c25d43d16b5622f847d474dbef
Merge: acc098604 8f8b20c91
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:26:06 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit acc0986040589a3492f88a740bc3c3fc693b26d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:28:32 2020 +0200
Lower resolution due to lying drivers.
commit d3b878de2a52c358d2944a6bbd0555dad7fbdb10
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:15:38 2020 +0200
Fix issues msh encountered with Intel 4600.
commit 10245e0c1b0cb6fae10d86409435364edc6102ef
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 21:15:02 2020 +0200
Merge more models into one mesh than we did previously.
commit 3155c31e663c52ae5c3a53d5fb5665892a1a498a
Merge: 7204cc8a7 3c199280e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:35:22 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7204cc8a7a4f74a30306bd205d9834fee4bb944f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:34:43 2020 +0200
Fix not yet done NPC animations.
This forces them all to be the idle animation if not specified.
This fixes issues where you'd have giant NPCs in water.
commit bc83360f2a08918f19d417b5f772e1ff554dba08
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 19:36:37 2020 +0200
Try to fix some bugs:
- Z fighting with LOD terrain and water.
- Audio SFX not playing.
commit 1fd104aa603bf3781b6526a5cada46aeca3049dd
Merge: 862df3c99 7c2c392a3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 12:02:31 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 862df3c9976c4da9bd7cfd784f1a85973127968a
Merge: 0a4218ed9 75c1d4401
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 05:52:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0a4218ed9d541a2b34c133351bea38a99ddf4ea7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 22:27:14 2020 +0200
Fix particle depth.
commit f51dfdeb442d0dd5243dd2f344fa4be295bd0875
Merge: c6251a956 5e6dc0471
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:19:04 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit c6251a956ad376400dca5c23420cf8d213dc8fdf
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:15:46 2020 +0200
Cache figures more intelligently.
Cache figures for longer, and don't cache character states for the
player except where they actually affect the rendered model.
commit 0ed801d5404982c6fb63b1eaa4567d908b294c9d
Merge: c11b9bdf0 eea64f78f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 16:32:24 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c11b9bdf0a53bf9884d2f5a48fec9b01d582df1a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 11:47:15 2020 +0200
Remove unneeded Clippy annotation.
commit 16aa9ef40af56d69289d00aafb3deadfb8bd4f35
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 8 00:53:02 2020 +0200
Fix hotloading and Clippy.
commit 3dc973e0be5b758da1e9805eb764ad401374cd0c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 23:50:27 2020 +0200
Major speedups with SIMD.
commit fba64a7d93d5a96077ce87287bbce6ab9b7fbcae
Merge: 76429d00e d1e10b178
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:19 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 76429d00eea00d212fbd672a84ee91e75b19b938
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:10 2020 +0200
Add clippy.toml.
commit c79f512f84dbb83cb82b7954db68ff241dfd8e41
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 11:55:20 2020 +0200
Fix all clippy issues, clean up Rust code.
commit 6f90e010b3fbefb53b0d632e819931350015b6b8
Merge: 77a8c7c26 5929cfa5c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:30 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 77a8c7c267d3f44a1a62bd6b2274359973c5e4d4
Merge: b44e44232 44febaabd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:10 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 5929cfa5c713aa392110bbb62407f76caf53c3df
Author: jshipsey <jshipsey18@gmail.com>
Date: Thu Aug 6 20:47:27 2020 -0400
fixed in-hand arrow bug
commit b44e442325d828f1cd564d66908f89d09e80474b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 6 13:40:35 2020 +0200
Miscellaneous performance improvements.
commit be37acf287c1360d8085862526ac3365ffd1d768
Merge: 125d7fc6c c11876547
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 05:49:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 125d7fc6c4dcd8c8c5f27b8268a4d64f409f3644
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 04:55:31 2020 +0200
Abstract over simd vs. repr_c vectors.
Also some minor improvements to Event size.
commit d4d4956e9252e1241ce110b2aa85076c6b1e2a23
Merge: 5f3b7294a aced5f979
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:56:54 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 5f3b7294af1f8533edc2620b58863c248e2b07af
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:43:52 2020 +0200
Fix formatting issues I missed before.
commit a428a3ebba70dcab63dd0f8cd983120c90617271
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:41:51 2020 +0200
Fix clippy warnings, part 1.
There aer still a bunch of type too complex and
function takes too many arguments warnings that I'll fix later
(or ignore, since in the one case I did fix a function takes too
many arguments warning I think it made the code *less* readable).
commit ba54307540ed8a937ac08209730284fc653af85b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 30 13:22:42 2020 +0200
Fix light animations so they are removed when the light turns off.
commit 7e0f4bcbf0f4717145d8beac40d52e3acebbe2aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 21:10:20 2020 +0200
Fix crash in edge case for pixel art.
commit 56da06f7a351e2b949e9b014a90b974d511a0924
Merge: cf74d55f2 9f53a4a19
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:56:52 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:29:52 2020 +0200
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
The first concern was addressed by fixing the dimensions of the map
images drawn from the UI (so that we always use a square source
rectangle, rather than a rectangular one according to the dimensions of
the map). We also fixed the way rotation was done in the fragment
shader for north-facing sources to make it properly handle aspect ratio
(this was already done for north-facing targets). Together, these fix
rendering issues peculiar to rectangular maps.
The second and third concerns were jointly addressed by adding an
optional border color to every 2D image drawn by the UI. This turns
out not to waste extra space even though we hold a full f32 color
(to avoid an extra dependency on gfx's PackedColor), since voxel
images already take up more space than Optiion<[f32; 4]> requires.
This is then implemented automatically using the "border color"
wrapping method in the attached sampler.
Since this is implemented in graphics hardware, it only works (at
least naively) if the actual image bounds match the texture bounds.
Therefore, we altered the way the graphics cache stores images
with a border color to guarantee that they are always in their own
texture, whose size exactly matches their extent. Since the easiest
currently exposed way to set a border color is to do so for an
immutable texture, we went a bit further and added a new "immutable"
texture storage type used for these cases; currently, it is always
and automatically used only when there is a specified border color,
but in theory there's no reason we couldn't provide immutable-only
images that use the default wrapping mdoe (though clamp to border
is admittedly not a great default).
To fix the maps case specifically, we set the border color to a
translucent version of the ocean border color. This may need
tweaking going forward, which shouldn't be hard.
As part of this process, we had to modify graphics replacement to
make sure immutable images are *removed* when invalidated, rather
than just having a validity flag unset (this is normally done by
the UI to try to reuse allocations in place if images are updated
in benign ways, since the texture atlases used for Ui do not
support deallocation; currently this is only used for item images,
so there should be no overlap with immutable image replacement,
so this was purely precautionary).
Since we were already touching the relevant code, we also updated
the image dependency to a newer version that provides more ways
to avoid allocations, and made a few other changes that should
hopefully eliminate redundant most of the intermediate buffer
allocations we were performing for what should be zero-cost
conversions. This may slightly improve performance in some
cases.
commit ad18ce939940a8c697270f6e9b94db9942fd8295
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 13:21:09 2020 +0200
Fix continent scale hack.
commit 36b1cb074f5b195aebd7dbbc3da7f0246a1a18ec
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 12:11:40 2020 +0200
Enable loading different sized maps without a recompile.
We may want to tweak the effects of the continent_scale_hack.
commit 13b6d4d534cc4814b7cb3294ca41bbfea0a6b186
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 10:55:48 2020 +0200
Removing WORLD_SIZE, part 1.
Erased almost every instance of WORLD_SIZE and replaced it with a local
power of two, map_size_lg (which respects certain invariants; see
common/src/terrain/map.rs for more details about MapSizeLg). This also
means we can avoid a dependency on the world crate from client, as
desired.
Now that the rest of the code is not expecting a fixed WORLD_SIZE, the
next step is to arrange for maps to store their world size, and to use
that world size as a basis prior to loading the map (as well, probably,
as prior to configuring some of the noise functions).
commit 30b1d2c6428230a9eaa0d749cdcbbd6f1cbccd78
Merge: 7d56ba31b 1377b369f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:58 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 7d56ba31b445441461b28a07fc495d7d4f047c17
Merge: 2101113b4 598f14b25
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 1377b369f6db2258e910d467a5740f31789e3ded
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sun Jul 19 23:25:38 2020 +0200
more saturated pumpkins
commit ae8d50527f93bb0616c2ad46ce4dacb63bc37c6d
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sat Jul 18 20:29:56 2020 +0200
acacia models
commit 2101113b467e691de787392d7f20f1745f5637bd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 18 18:55:25 2020 +0200
Higher detail LOD.
commit add2cfae04b4385fa5590e11e2bd5229d9dee0aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 16 01:57:39 2020 +0200
Revert some irrelevant stuff.
commit 2e2ab3dc1eaa59a4aef7f8d34a53d8aae4c8553a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 15 13:30:49 2020 +0200
Fixing various things about shadows.
* Correcting optimal LISPSM parameter.
* Figure shadows are cast when they're not visible.
* Chunk shadows stay cast until you look away.
* Seamless cubemaps for point lights.
* Etc.
commit 6c31e6b56217274285b597af297036691ea5d897
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 19:50:26 2020 +0200
Fix shadow creation.
commit 6332cbe006115ae205597529cd8bbccd146c2cca
Merge: be438657c 930e0028b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:47:00 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit be438657c33d7b5bfb0a9582c3ed3fd366637323
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:28:08 2020 +0200
Tweaks to shadows.
Added shadow map resolution configuration, added seamless cubemaps,
documented all existing rendering options, and fixed a few Clippy
errors.
commit 23b4058906013c7d2a40c286e20e32c5fbd897ed
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 10:11:19 2020 +0200
Fix moon, use nonlinear noise for terrain.
Note that the latter has a bit of performance cost.
commit 7fbe5cbfbb9dc29607957b8e62f432a4deed193d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:23:02 2020 +0200
Address lies about max texture size.
commit bcfc62b5e13a1cdd83f57535fde4694720bebfd9
Merge: 75e3626a7 18a08e8fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:22:08 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 75e3626a785919f43fdcf2127c2b10e3e4df2f9f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:21:52 2020 +0200
OpenGL 3.3 minimum.
commit 18a08e8fe2739f02af99a5d2cb4e7c38c49e858b
Author: Monty Marz <m.marzouq@gmx.de>
Date: Tue Jul 7 23:57:52 2020 +0200
settings localization
commit 90c5d1ca3620092bc3ae10b2211489eb1cf6f5e8
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 21:11:48 2020 +0200
Lower near distance.
commit 0e66f02b25aaddaa2dfddbbc89cd67de54a9a7b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 20:09:01 2020 +0200
All sprites sway in the wind now.
commit db1401a6910bf42dcf502462c90038752ff5fbdb
Merge: 69e508d8c e8b4b29d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 19:34:17 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 69e508d8c94d8973033817ca86f357e466fc7c4d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 18:41:37 2020 +0200
Make it easy to switch to SIMD for math.
commit ffe0f5928c7a7e87d00cb5426b3b1d831d7e02fd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 21:21:12 2020 +0200
Fix some issues with underwater rendering.
commit bfda6da42f38fd02c31ee92c81ab785a3e50c2a0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 19:17:59 2020 +0200
Fix some minor display issues.
commit 0ed752e087968cf901301884aaeae698e32ef8a5
Merge: ccc6a06a8 518edcb85
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:14:21 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit ccc6a06a8d4504d6b9f7af7905a414d2ee06ab76
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:04:34 2020 +0200
Some minor changes.
commit 4e020246702889269efe1a191788992164c508d6
Merge: 50a64d927 e05c9267a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 16:17:40 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 50a64d927e6c4f4b0e4688e4cbfca694bc3f922a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 13:07:03 2020 +0200
Fix far plane.
commit 7dd06da34cae8f9ea3b6c889fe965181f3fd3949
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:25:35 2020 +0200
Add shadows.glsl.
commit 618a18c998778bf871b905a74657440fcc384c80
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:10:22 2020 +0200
Adding shadows, greedy meshing, and more.
commit eaea83fe6a5cb1cb0ba8beef888183c718258496
Merge: 267018495 2f89b863e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 22:47:07 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 2670184954a13e4a9e7a4e35ba79aac0c5fac2f7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 21:20:01 2020 +0200
Make civsim and sites deterministic.
For anything in worldgen where you use a HashMap, *please* think
carefully about which hasher you are going to use! This is
especially true if (for some reason) you are depending on hashmap
iteration order remaining stable for some aspect of worldgen.
commit f8376fd5dc72b4a9c2f51a6b4570d59c8b8e9343
Merge: 654f7e049 cdee191dd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 17:53:57 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 654f7e049258d9da27c09608bbe6a46ffa8787e5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed May 20 21:22:30 2020 +0200
Correct backface culling.
commit 560501df05ca725409b0f2e4eb31bdfdc15fd0c7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue May 19 17:22:06 2020 +0200
Greedy messhing for shadows.
commit a4d87e1875ca543436e6bbbeb20348facc5a52d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun May 17 05:59:00 2020 +0200
Shadow maps work for lantern.
commit 243d0837b8a3b08172c9a3c348d964d7ddc2a0a8
Merge: 04382dc28 71dd520cd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:53:13 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 04382dc28632b6c66e8821f6870c0daaa1c1901a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:22:17 2020 +0200
WIP: better graphics config, better LOD, shadow maps.
commit 22ddbad3eb32bfa70f0932176022208fe67ded81
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 18:54:09 2020 +0200
Minor shader fixes.
commit 746a10e8d01ac235f994b0cde78fa48998602a1f
Merge: 0f4a0e763 40ab94673
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 04:02:09 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0f4a0e763db3afbdc4fb0558611f38326ca87151
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 23:03:24 2020 +0200
Switch back to pop-in terrain.
commit dd74fa7e4a53667b38811d7aec58d7f6a68889bb
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 22:58:55 2020 +0200
LOD shading closer to voxel shading.
commit ef67bd58ba0bdaf622b078892d768263b6cba268
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 28 20:49:03 2020 +0200
Experimental underwater lighting.
commit 2c5ad9d07605e80d5fd5679dd3a5d70c605b86a9
Merge: 748279835 303967a6f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 22:35:24 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7482798354eda18c8207950080fc24d443a369de
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 21:59:55 2020 +0200
Replace discard in figure-frag.
commit d83b4ae69be4912f69bf7835f509c68a1c7770a4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:45:57 2020 +0200
Fix sprite lighting, HDR from focus_pos.
commit 0594238004f116274905fa0ed7c2b6c417ed1d29
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:14:10 2020 +0200
Proper HDR from point lights.
commit 48c93d2b41ce5743103d18e76cc228f5ac766492
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 14:01:43 2020 +0200
Brighter ambiance, darker LOD shadows.
commit e0452e895ccfa8a43f368cae3b8b8aedc24dad93
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 13:13:23 2020 +0200
More proper HDR.
commit 4c6da3ed16cfeebb455e40da5f557b4af9a499d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 00:13:10 2020 +0200
Trying LOD noise.
commit 682a3d74c85df5503ffe1fc1cc891bce789df1ad
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 23:11:08 2020 +0200
Fix LOD heights in towns.
commit cc39e5734e8b18f9077bf42e66337c1319dd6b6e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 21:01:23 2020 +0200
More LOD fixes.
commit 8116b21c2e51c836e77894e309ac273caf2917b3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:54:43 2020 +0200
I like this coloring.
commit bc2560ea90b36f4b46190005344232d993043ac3
Merge: 14effdd5d e690efe71
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:48:33 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 14effdd5db8747fcf3eb34f03b46b7792e92d1c5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:24:35 2020 +0200
Re-saturate.
commit 48a643955d4435b78179acba0beb4a979905cc31
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:23:57 2020 +0200
Various fixes.
commit f7b497a0c25f4ad4682c71dd1ed6f608052feb9b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 03:22:49 2020 +0200
Render figures again.
commit 44e4aad48deba8266b9f8bdfd3db096b381f5327
Merge: e6f0a5a98 9ec319a18
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 02:01:04 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit e6f0a5a981a82533ba188fff0a54ce98577bb152
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 24 16:12:20 2020 +0200
Add atmospheric scattering.
commit f2953087f691a8edbc001cb98ebf5059fc6f8ac0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 23 00:01:20 2020 +0200
Fix shadowing for specular reflections.
commit ddd4a67a9799b8d08c7dc0c2bec90621c2bed0e3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Apr 22 22:56:12 2020 +0200
HDR fixes.
commit 1015e60deef3c447381996277df7496707a63bd0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 21 18:25:19 2020 +0200
More lighting changes.
commit 80c264abd111fb237e57843efcb5c071d4f84613
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 13 00:29:59 2020 +0200
Lighting experiments.
commit 8414987e589dd5102bad89762a3adaccc0bfe957
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 9 02:38:40 2020 +0200
WIP -- lighting changes and soft shadows.
commit 9cd2b3fb0d6b49776c6dfe463e4169637250b11a
Merge: c7ea687eb 8b149ad11
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:29 2020 +0200
Merge branch 'sharp/new-lighting' into sharp/small-fixes
commit c7ea687ebbc5aace1b455f134a5bf49ce2c7434a
Merge: 476441531 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:02 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 8b149ad11ad4bb75018fcf9519baec27d1c95951
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:32:39 2020 +0200
Trying out a new lighting model.
commit b0ac9f36f755dd06f7c17c46150568064790864f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 07:56:11 2020 +0200
Use bicubic interpolation for terrain.
commit f6fc9307a121514b614bc50ef8eb055953e7da8a
Merge: 33140a295 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 05:01:41 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 4764415312aae6e9ac2d00e86e84577cb958f1ab
Merge: ed2d0111d 13388ee6a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 04:54:48 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 13388ee6a42943f3f79a9cb488346cef18e272fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 20:30:08 2020 +0200
Various fixes (to coloring and to soft shadows).
commit fbd084a94a067082a87cd6d28b82054709bc9265
Merge: 5a089863b 4fdf6896a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 18:50:38 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/map-colors
commit ed2d0111d994262ae836d84d1fe5a45e4de72a0b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 06:49:27 2020 +0200
Combining colors and LOD.
commit 88342640c6b835114d01c797b89fdede3b0a2108
Merge: 33140a295 5a089863b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:49:20 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 33140a2951b8212725f42c758b277aaec4d888f7
Merge: 4c65a5aed f34d4b379
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:36:21 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 5a089863beb01d4794bbe3580ada47b278715ea2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 03:17:49 2020 +0200
Making maps brighter.
This is probably not the right way to do it, but oh well!
commit 32b2c99109dd486aa922886081068f9c550c83f2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 02:46:36 2020 +0200
Horizon mapping and "layered" map generation.
Horizon mapping is a method of shadow mapping specific to height maps.
It can handle any angle between 0 and 90 degrees from the ground, as
long as know the horizontal direction in advance, by remembering only a
single angle (the "horizon angle" of the shadow map). More is explained
in common/src/msg/server.rs. We also remember the approximate height of
the largest occluder, to try to be able to generate soft shadows and
create a vertical position where the shadows can't go higher.
Additionally, map generation has been reworked. Instead of computing
everything from explicit samples, we pass in sampling functions that
return exactly what the map generator needs. This allows us to cleanly
separate the way we sample things like altitudes and colors from the map
generation process. We exploit this to generate maps *partially* on the
server (with colors and rivers, but not shading). We can then send the
partially completed map to the client, which can combine it with shadow
information to generate the final map. This is useful for two reasons:
first, it makes sure the client can apply shadow information by itself,
and second, it lets us pass the unshaded map for use with level of
detail functionality.
For similar reasons, river generation is split
out into its own layer, but for now we opt to still generate rivers on
the server (since the river wire format is more complicated to compress
and may require some extra work to make sure we have enough precision to
draw rivers well enough for LoD).
Finally, the mostly ad-hoc lighting we were performing has been (mostly)
replaced with explicit Phong reflection shading (including specular
highlights). Regularizing this seems useful and helps clarify the
"meaning" of the various light intensities, and helps us keep a more
physically plausible basis. However, its interaction with soft shadows
is still imperfect, and it's not yet clear to me what we need to do to
turn this into something useful for LoD.
commit f8926a5737ddc51f3d585c651a64c43677aae0f4
Merge: a1aee931e 875ae6ced
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Mar 13 13:32:42 2020 +0100
Merge remote-tracking branch 'origin/master' into sharp/map-colors
commit 4c65a5aed353b119aea65a2aaeb94549b67beb42
Author: Treeco <5021038-Treeco@users.noreply.gitlab.com>
Date: Mon Feb 24 16:48:05 2020 +0000
Made LOD setting slider exponential
commit 2fa7b2d20d7233dc8bfd64f9f7f54617575248f1
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 17:49:53 2020 +0000
Added mist to LoD
commit aab059a450b5f635777129ff82cc15b662965c3c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 15:14:06 2020 +0000
Added LoD slider
commit 779c36b538121c5ade3633ae5cb67bb14c8c3877
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:54:55 2020 +0000
Reduced cost of vertex pushing
commit 9fea150473906b166365b738ebcea07c697daf3d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:38:53 2020 +0000
Fixed maths, improved LoD resolution
commit 5481df38fea5bf183ff376a3337179cfaa5233dc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 11:22:50 2020 +0000
Dynamically relocate LoD vertices to enhance details
commit a3e36a50ababd615da7db1b26158c7906a5def01
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 18:13:51 2020 +0000
Simpler terrain spiral rendering
commit 255f450ae9ac8763db4bede075fb409161ed57cc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:53:17 2020 +0000
Better LoD precision
commit 3d027aebe812a5b8658a4eb8123dc9f61b3776d2
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:04:03 2020 +0000
Better falloff
commit be775c9484b457b2c0b1a494aec03392d0c70e76
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 15:30:45 2020 +0000
Applied good ideas from experimental branch
commit 58587b68545a23c5c04ab4574a4b94b3bc982246
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 16:15:13 2020 +0000
Minor fixes to LoD merging
commit 7b42aebd709c14df2db766aad61d9280ad24d84d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 15:04:44 2020 +0000
Capped LoD dragging
commit 8aafc559f87124e1ea5ca6e3ddc2aa0c242d793c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:54:37 2020 +0000
Better blending between LoD and terrain border
commit edd3455d5161792d87ddc8eadc0ecbad5532b284
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:40:19 2020 +0000
Fixed LoD z depth, added sea level offset
commit b9b06744620114dd5556e73f64fa93c145503a7c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:27:43 2020 +0000
Better LoD smoothing
commit a1aee931e790431560cd2d953ad61d9497072afd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Feb 21 14:52:17 2020 +0100
Adding shadows.
commit 2400786c13dd891c131ed86d48d05df516a8a778
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 13:48:40 2020 +0000
Use world map as LoD source
commit dbf650f504a4c25fbbc2096ac3616c736bf52d23
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Jan 20 00:48:14 2020 +0000
Better clouds at distance
commit 5e6f81b86cdb9730b9b056877b19257075fd5fa8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Jan 19 23:59:02 2020 +0000
sync
commit 745e7540ddb000cc645f612767b337c2ddc3f7c0
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 12:40:48 2019 +0000
Improved cloud falloff mist, faster noise sampling
commit f6a200d0cb866196ba57697466755f9e0c7ea5d8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 10:09:00 2019 +0000
Improved long-range depth precision, removed unnecessary LoD polygons
commit 63d1b2bb2292898d59fb4f4e502201103dfeb86f
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 20:57:46 2019 +0000
Working LoD shader
commit f13d98ee3e58f881e8b978861a67663b59ed91ec
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 11:03:40 2019 +0000
LoD first attempt (stack overflow issue)
2020-08-20 18:34:59 +00:00
|
|
|
|
.map(|i| SimChunk::generate(map_size_lg, i, &gen_ctx, &gen_cdf))
|
2019-10-16 11:39:41 +00:00
|
|
|
|
.collect::<Vec<_>>();
|
2019-05-18 08:59:58 +00:00
|
|
|
|
|
2019-06-10 16:28:02 +00:00
|
|
|
|
let mut this = Self {
|
2020-02-01 20:39:39 +00:00
|
|
|
|
seed,
|
(See sharp/lod-history) LOD, shadows, greedy meshing, new lighting, perf
---
Pretty much a Veloren fork at this point. Here's a high level overview of the changes (will be added to CHANGELOG just before merge).
At a high level this MR incorporates roughly two groups of changes.
The first group consists of new game features: more flexible map sizes, level of detail terrain, shadow maps, and a new lighting
engine. This is "feature work" that (mostly) only adds new things to Veloren, and mostly shouldn't affect old stuff.
The second big group of changes are those addressing the fallout from all the new features. These include performance fixes of
various sorts: the addition of multiple graphics options and optimization of the cheap ones to avoid work, switching all voxel
models to use some variant of greedy meshing, switching over much of our CPU-side vector math to exploit SIMD instructions
(coinciding with a fork of `vek`), and a rewrite of how the UI handles text rendering (coinciding with updates to our fork
of `conrod`). Making Veloren's hardcoded colors appear correct under the new lighting engine also required considerably
changes (TODO: Fill in this section when it's complete).
The second category of changes often heavily touches code owned by other people, including frequently modified code "owned" by a
handful of people, so I recommend that this code be reviewed particularly carefully.
---
At a high level (each will be described in more detail below):
- The world map has been refactored.
- The world size is no longer hardcoded (@zesterer).
- The map generation code was made generic to allow using it outside of the `world` crate (@zesterer).
- On world creation, we now compute *horizon maps* (@zesterer).
- The way we pass the world from the server to the client has been updated (@xMAC94x).
- Artifacts related to image rotation were fixed (@imbris).
- Multiflow rivers were enabled (@zesterer).
- In the process of making changes related to the world map, various incidental fixes and optimizations were required.
- The new *level of detail* feature was added (@zesterer wrote part of this and has checked out the rest).
- A new LOD terrain rendering step was added to the pipeline.
- The LOD terrain quality was made configurable via a graphics setting.
- Horizon maps were used to cast shadows from LOD chunks on both LOD and non-LOD terrain.
- A "voxelization" effect was incorporated into rendered LOD terrain to make it blend better into the world.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Veloren's lighting has been completely overhauled (@zesterer has already checked most of this out).
- A semi-accurate index of refraction was assigned to our materials.
- A new, more realistic, physically based approach to lighting was used using the *Ashikhmin Shirley* BRDF.
- We emulate *atmospheric scattering* using equations designed for measuring solar panel light exposure.
- We attempt to compute *realistic light attenuation* in water using its real material properties.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Point and directional lights now cast realistic shadows, using *shadow mapping.* (@imbris, @zesterer, @Treeco, @YuriMomo)
- Point light shadow maps were added to the rendering pipeline, using geometry shaders and *seamless cube maps*.
- Directional light shadows were added to the rendering pipeline, using LISPSM together with disabling *depth clamping*.
- "Shadow-only" chunks and NPCs were added to prevent shadows from models behind you from disappearing.
- In the process of making changes related to shadow maps, various incidental fixes and optimizations were required.
The addition of shadow maps, LOD terrain, and the new lighting all led to significant performance degradation, on top of other
changes happening in master. Therefore, a large number of performance improvements were also needed:
- The graphics options were made much more flexible and configurable, and shaders were optimize.
- New options were provided for how to render lights and shadows (@Pfauenauge, @zesterer).
- Graphic setting storage and configuration were overhauled to make adding new features easier (@Pfauenauge, @imbris).
- Shaders were rewritten to utilize GLSL's preprocessor to avoid overhead (@zesterer, @YuriMomo).
- In the process of making changes related to providing additional rendering options, various incidental fixes and optimizations were required.
- Voxel model creation was switched to use *greedy meshing.*
- A new voxel meshing method, greedy meshing, was added (@imbris).
- Uses of the older meshing methods were migrated to use greedy meshing (@imbris, @jshipsey, @Pfauenauge).
- New restrictions were added to terrain, figure, and sprites to future proof them for further optimizations (@jshipsey, @Pfauenauge, @zesterer).
- Most positions are now relative to either chunk or player position for better precision (@imbris, @zesterer, @scottc).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- Animation and terrain math were switched to use SIMD where possible.
- Fixes were made to vek to make its SIMD feature usable for us (@zesterer, @imbris).
- The interface and types used in bone animation were changed in various ways (@jshipsey, @Snowram, @Pfauenauge).
- Redundant code generation for body animation is now partly taken care of by a macro (@jshipsey, @Snowram, @Pfauenauge).
- Animation code was modified to to use vek's SIMD representation where possible (@jshipsey, @Snowram, @Pfauenauge).
- Terrain meshing code and shadow map math were also modified to use vek's SIMD representation (@imbris).
- SIMD instruction generation was enabled (@YuriMomo, @jshipsey, @Snowram, @imbris, @Angelonfira, @xMAC94x).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- The way we cache glyphs was completely refactored, fixed, and optimized.
- Our fork of `conrod` was optimized in various ways (@imbris).
- Our fork of `conrod` now exposes whether a widget was updated during the current frame (@imbris).
- Our use of the glyph cache was rewritten for correctness (@imbris).
- A *text cache* was introduced that lets us skip remeshing glyphs that have not changed (@imbris).
- Various changes were made to reduce pressure on the glyph cache, with more planned (@imbris, @Pfauenauge).
- In the process of making changes related to the glyph cache, various incidental fixes and optimizations were required.
- Colors were changed to keep Veloren's look consistent with master.
- Some older tree models were brought back (@Pfauenauge).
- TODO(@Sharp): All hardcoded colors were extracted and made hotloadable.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Hardcoded colors were fixed to conform to Veloren's style.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Color models were fixed to conform to Veloren's style.
A detailed description of the involved changes follows.
---
- The world size is no longer hardcoded. All functions dependent on world size now take a `WorldSizeLg`, which holds the base 2 logarithm of each actual world dimension and is guaranteed to maintain certain properties (outlined in `common/src/terrain/map.rs`). Additionally, many utility functions that utilize the world size were moved into `common` as well (mostly `common/src/terrain/mod.rs`). Finally, the world map format was updated in order to store its size explicitly, with a migration path from the old format that should work whenever the old formatted map was a square (practically always). See `world/src/sim/mod.rs` for these changes.
- The map generation code was made generic to allow using it outside of the `world` crate. The parts of the map generating code that do not need to query the world were moved over to `common/src/terrain/map.rs`, allowing them to be used from the client without creating a dependency on `world`. The rest of it was turned into helper functions in `world/src/sim/map.rs`, which can be passed as closures to the generic map generation code to complete its construction. This also means that colors are now passed in separately to the map generation function. See <https://veloren.net/devblog-78/> for more details.
- On world creation, we now compute *horizon maps*. See the function in `world/src/sim/util.rs`.
Given a height map and a plane intersecting that height map, our horizon maps allow us to encode enough information to reconstruct shadows for each point on the height map using only the *horizon angle* (the angle at which the sun starts to become visible). As Veloren's sun only covers one plane, this is sufficient for encoding sun shadows for LOD terrain, by encoding two angles per chunk (one for each 90 degrees the sun covers). We can also use this for the moon, if we want, since the moon follows the same path. Additionally, we store the *height* of the furthest occluder, to try to make the shadows volumetric; so this means 4 bytes in total for each chunk.
Support for horizon maps has been merged into the map functionality in common as well.
- The way we pass the world from the server to the client has been updated. Rather than passing the prerendered map, we instead pass three maps with values for each chunk; one with the color information, a second with altitude information, and a third with horizon map information. We then reconstruct the map on the client, together with some additional information we send from the server (like the sea level and maximum height). See `common/src/msg/server.rs` for a detailed description of the format of `WorldMapMsg`, and `server/src/libr.rs` and `client/src/lib.rs` for details of the map construction and parsing.
- Artifacts related to image rotation were fixed. See the commit message for commit SHA `cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e` for a detailed explanation. This involved changes to shaders, the addition of a new type of graphic (also reflected in the graphic cache) that allows specifying a border color (which automatically makes the associated texture immutable), and some related fixes. I reproduce the first two paragraphs of the MR description as well:
```
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
```
- Multiflow rivers were enabled.
This does not really need to be part of this MR, and would be easy to revert, but since it seemed to provide a nice improvement it's currently packaged with it.
We already computed multiple outflows from each chunk for erosion purposes long before this MR.
However, we never modified river rendering to be able to handle this case (just a single downhill river flow is complex enough!) so this was not exposed when deciding which chunks were rivers.
Now that
- In the process of making changes related to the world map, various incidental fixes and optimizations were required. Some examples of fixes include making sure terrain is never lowered to below sea level (to make the shadow maps report correct values), fixing map altitudes and colors to understand things like cliffs and "block level" coloring (that doesn'te xist on the column level), and fixing a crashbug when rendering images for the UI where source pixels are strongly rectangular. Some examples of related performance fixes include avoiding allocating a fresh vector for all the maps (i.e. copying it over to change the format from `[u32; n]` to `DynamicImage` and then copying again to convert to `RgbaImage`), and instead using the `gfx::memory::slice` function to accomplish the same thing. These sorts of changes are spread all arond the code.
This includes the additon of a new scene, `voxygen/src/scene/lod.rs`, a new pipeline `voxygen/src/render/pipeline/lod_terrain.rs`, and new shaders `assets/vxygen/shaders/lod-terrain-vert.glsl` and `assets/vxygen/shaders/lod-terrain-frag.glsl`, as well as associated changes to the renderer in `voxygen/src/render/renderer.rs`.
The main idea behind our initial approach to LOD was to take the world data we now get from the server (altitude, color, and horizon mapping).
- Some previously computed values were turned into shader uniforms for better prediction on weak processors. (@zesterer)
- Calls to power or trig functions were removed or replaced with multiplications, where possible.
- After some deliberation
- To properly handle sprite "waving" for nearby sprites,
We explicitly designed the greedy meshing system with figures and sprites in mind.
In both cases, we want to be able to *efficiently* pack many different models into the same texture, especially in cases where we know
we will either not be removing any of the grouped-together from the models from the texture, or will remove all of them at once (so
they can be packed into some specific subtexture).
For sprites, since we know every model in advance and never intend to deallocate them, we currently pack them all as efficiently as
possible into one giant tetxure atlas. However, in the future we might opt to pack them slightly less efficiently in exchange for
shrinking the sprite vertex size.
For figures, we pack all the textures for each *model* into the same atlas.
is a global texture atlas used for every sprite, and for figures which is why we have the ability to mesh multiple
models to the same texture area (using the simple texture atlas allocator) without requiring intermediate vector allocations.
This is accomplished by delaying the time when we actually write the color and light data to the texture until *after* all the
model vertices have been meshed; then, we can just allocate the whole color/light array at once, making the atlas we use an
exact fit. In computer science-y terms, we accomplish this delay by, after we perform the initial greedy meshing (without
texture information), not continuing to create the texture data, but instead constructing a *continuation*--that is, a function
that, when called, will execute the rest of the computation. We push this continuation (which in Rust terms is a `FnOnce` closure
that takes the `ColLightsInfo` that it is supposed to write to as context) onto a
onto a vector
resizing. To allow for suspended writes to texture data, Rust pointed out to me that the continuation that would eventually write the color and light data to the texture atlas (the one that is shared by all models sharing the same greedy mesher) would have to *own* whatever data it mshed. Because we often generate the model data to mesh as a temporary in `voxygen/src/load.rs`, the
- Matrix multiplications in the shader were reduced for figure data (@zesterer).
- Vertex "waves" for fluid data were removed.
- Terrain "bending" near edges was removed.
- Scaling was fixed to make sure empty space was not introduced in a space previously occupied by a block. It was also changed to take ownership of its voxel data,
rather than sharing it, to let it be used with meshing.
- Rust's nightly version was bumped in order to use the `array_map` function, which lets us reuse more code between the simple map and `FigureModelCache`.
- PositionedGlyph::standalone.
---
I tried to cite sources in many cases[^realtime],[^lloyd],[^lispsm],[^pbrt],[^greedy],[^tjunctions]
where I needed features from elsewhere but I am particularly grateful for the following resources,
esepcially where they have accompanying source code. I linked all of them that are accessible to the public (those that are not were
obtained through legal means).
[^realtime]: Eisemann, Elmar, Michael Schwarz, Ulf Assarsson, Michael Wimmer. Real-Time Shadows. A K Peters/CRC Press (T&F), 20160419.
[^lloyd]: Lloyd,B. 2007. [Logarithmic perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). PhD thesis, University of North Carolina.
[^lispsm]: Wimmer, M., Scherzer, D., and Purgathofer, W. 2004. [Light space perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). In Proceedings of Eurographics Symposium on Rendering 2004, pp. 143– 152.
[^pbrt]: Pharr, Matt, et al. [http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf](Physically Based Rendering: From Theory to Implementation). Third edition, Morgan Kaufmann Publishers/Elsevier, 2017.
[^greedy]: mikolalysenko. “Meshing in a Minecraft Game.” 0 FPS, 30 June 2012, <https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/>.
[^tjunctions]: blackflux. “Meshing in Voxel Engines – Part 1.” Blackflux.Com, 23 Feb. 2014, <https://blackflux.wordpress.com/2014/02/23/meshing-in-voxel-engines-part-1/>.
I am also especially grateful to Khronos, Wikiepdia, and stackoverflow for answering many of my specific questions while writing the MR.
---
Squashed commit of the following:
commit 300505e7305a2fdac722a808ee8538323f215f39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 18:46:25 2020 +0200
Fixing cargo doc and typo in CHANGELOG.
commit ec0aeb18e8499d7d84ef818331b4b65c3d76cea6
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 15:38:50 2020 +0200
Hopefully final commit for the LOD branch.
commit 5e8ea0b1eaac02903a02feb2eb038d195de4872f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 10:14:26 2020 +0200
Falling back to power as stopgap.
commit e44a1cbf46504ee9931a01bdc9033e145500d557
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 09:25:41 2020 +0200
Address imbris feedback.
Temporarily disables shiny water, lowers max VD.
These restrictions will be lifted soon after merging.
commit 561e25778a108ac3712f5ec2ce3a51234c4430d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 08:31:13 2020 +0200
Tweaking shaders a bit.
commit 7d19259078ce0dd7b3742ad7d0cb3fab3ece3fdc
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:59:43 2020 +0200
Fix view example as well.
commit 051cd4934e0fad2c0b15db4380a4189fa318679f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:29:06 2020 +0200
Fix meshing benchmark.
commit c95e07db3b4dcca285678985e65e31b927cb1c61
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 05:46:22 2020 +0200
Address MR feedback, fix scene clouds.
commit 1bfb816cabdb3ffc1e507a009c2d98696b4b573a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:39:36 2020 +0200
Incorporating Pfau's figure color changes.
New eyes and new humanoid colors.
commit 3f9b89a3ac7b3356b1dba0d1a8f6541357f81469
Merge: e2f5162e4 62c53963a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:29:41 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit e2f5162e4f96f4124aa43488f7245d341b3dcfd4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:28:38 2020 +0200
World colors are all hotloadable.
They live in assets/world/style/colors.ron.
Only a small handful of hardcoed colors remain in World; they are either
part of the map, or difficult to disentangle from the rest of the
computation. Comments are made where appropriate.
commit 62c53963abe1975009d34a8f9515a355bef24f31
Author: Marcel Märtens <marcel.cochem@googlemail.com>
Date: Wed Aug 19 15:59:00 2020 +0200
replace pretty_env_logger with tracing
commit 5b1625f99d9586fe80e2232f583ec5af9f953099
Merge: d71003acd 4942b5b39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:15:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit d71003acdabeff970b3928e97c26af6847b5b78e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:14:34 2020 +0200
Hotloading colors, part 1: colors in common.
Currently, this just entails humanoid colors. There are only three
colors not handled; the light emitter colors in
common/src/comp/inventory/item/tool.rs. These don't seem important
enough to me to warrant making hotloadable, at least not right now, but
if it's needed later we can always add them to the file.
commit 63b5e0e553eb2ea49276f192a6fc7dd65254270d
Merge: c32b337a4 6d2c4b9c1
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 13:05:37 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c32b337a46e10d9de473d178a94a3ccd61c39bb3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:52:04 2020 +0200
Fixing LOD grid, for real.
commit a166ae0360395387e09fb35a1f84210c2ce5ec24
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:28:05 2020 +0200
Addressing imbris's initial feedback.
Fixes two minor bugs: explosion particles were no longer spawning
randomly, and LOD grids were not perfectly even.
commit 4cbad004f44060994252dd3d38647a14a589712f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:27:58 2020 +0200
Bumping nightly per request.
commit 548680276aac77c25d43d16b5622f847d474dbef
Merge: acc098604 8f8b20c91
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:26:06 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit acc0986040589a3492f88a740bc3c3fc693b26d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:28:32 2020 +0200
Lower resolution due to lying drivers.
commit d3b878de2a52c358d2944a6bbd0555dad7fbdb10
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:15:38 2020 +0200
Fix issues msh encountered with Intel 4600.
commit 10245e0c1b0cb6fae10d86409435364edc6102ef
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 21:15:02 2020 +0200
Merge more models into one mesh than we did previously.
commit 3155c31e663c52ae5c3a53d5fb5665892a1a498a
Merge: 7204cc8a7 3c199280e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:35:22 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7204cc8a7a4f74a30306bd205d9834fee4bb944f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:34:43 2020 +0200
Fix not yet done NPC animations.
This forces them all to be the idle animation if not specified.
This fixes issues where you'd have giant NPCs in water.
commit bc83360f2a08918f19d417b5f772e1ff554dba08
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 19:36:37 2020 +0200
Try to fix some bugs:
- Z fighting with LOD terrain and water.
- Audio SFX not playing.
commit 1fd104aa603bf3781b6526a5cada46aeca3049dd
Merge: 862df3c99 7c2c392a3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 12:02:31 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 862df3c9976c4da9bd7cfd784f1a85973127968a
Merge: 0a4218ed9 75c1d4401
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 05:52:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0a4218ed9d541a2b34c133351bea38a99ddf4ea7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 22:27:14 2020 +0200
Fix particle depth.
commit f51dfdeb442d0dd5243dd2f344fa4be295bd0875
Merge: c6251a956 5e6dc0471
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:19:04 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit c6251a956ad376400dca5c23420cf8d213dc8fdf
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:15:46 2020 +0200
Cache figures more intelligently.
Cache figures for longer, and don't cache character states for the
player except where they actually affect the rendered model.
commit 0ed801d5404982c6fb63b1eaa4567d908b294c9d
Merge: c11b9bdf0 eea64f78f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 16:32:24 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c11b9bdf0a53bf9884d2f5a48fec9b01d582df1a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 11:47:15 2020 +0200
Remove unneeded Clippy annotation.
commit 16aa9ef40af56d69289d00aafb3deadfb8bd4f35
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 8 00:53:02 2020 +0200
Fix hotloading and Clippy.
commit 3dc973e0be5b758da1e9805eb764ad401374cd0c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 23:50:27 2020 +0200
Major speedups with SIMD.
commit fba64a7d93d5a96077ce87287bbce6ab9b7fbcae
Merge: 76429d00e d1e10b178
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:19 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 76429d00eea00d212fbd672a84ee91e75b19b938
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:10 2020 +0200
Add clippy.toml.
commit c79f512f84dbb83cb82b7954db68ff241dfd8e41
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 11:55:20 2020 +0200
Fix all clippy issues, clean up Rust code.
commit 6f90e010b3fbefb53b0d632e819931350015b6b8
Merge: 77a8c7c26 5929cfa5c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:30 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 77a8c7c267d3f44a1a62bd6b2274359973c5e4d4
Merge: b44e44232 44febaabd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:10 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 5929cfa5c713aa392110bbb62407f76caf53c3df
Author: jshipsey <jshipsey18@gmail.com>
Date: Thu Aug 6 20:47:27 2020 -0400
fixed in-hand arrow bug
commit b44e442325d828f1cd564d66908f89d09e80474b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 6 13:40:35 2020 +0200
Miscellaneous performance improvements.
commit be37acf287c1360d8085862526ac3365ffd1d768
Merge: 125d7fc6c c11876547
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 05:49:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 125d7fc6c4dcd8c8c5f27b8268a4d64f409f3644
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 04:55:31 2020 +0200
Abstract over simd vs. repr_c vectors.
Also some minor improvements to Event size.
commit d4d4956e9252e1241ce110b2aa85076c6b1e2a23
Merge: 5f3b7294a aced5f979
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:56:54 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 5f3b7294af1f8533edc2620b58863c248e2b07af
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:43:52 2020 +0200
Fix formatting issues I missed before.
commit a428a3ebba70dcab63dd0f8cd983120c90617271
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:41:51 2020 +0200
Fix clippy warnings, part 1.
There aer still a bunch of type too complex and
function takes too many arguments warnings that I'll fix later
(or ignore, since in the one case I did fix a function takes too
many arguments warning I think it made the code *less* readable).
commit ba54307540ed8a937ac08209730284fc653af85b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 30 13:22:42 2020 +0200
Fix light animations so they are removed when the light turns off.
commit 7e0f4bcbf0f4717145d8beac40d52e3acebbe2aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 21:10:20 2020 +0200
Fix crash in edge case for pixel art.
commit 56da06f7a351e2b949e9b014a90b974d511a0924
Merge: cf74d55f2 9f53a4a19
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:56:52 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:29:52 2020 +0200
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
The first concern was addressed by fixing the dimensions of the map
images drawn from the UI (so that we always use a square source
rectangle, rather than a rectangular one according to the dimensions of
the map). We also fixed the way rotation was done in the fragment
shader for north-facing sources to make it properly handle aspect ratio
(this was already done for north-facing targets). Together, these fix
rendering issues peculiar to rectangular maps.
The second and third concerns were jointly addressed by adding an
optional border color to every 2D image drawn by the UI. This turns
out not to waste extra space even though we hold a full f32 color
(to avoid an extra dependency on gfx's PackedColor), since voxel
images already take up more space than Optiion<[f32; 4]> requires.
This is then implemented automatically using the "border color"
wrapping method in the attached sampler.
Since this is implemented in graphics hardware, it only works (at
least naively) if the actual image bounds match the texture bounds.
Therefore, we altered the way the graphics cache stores images
with a border color to guarantee that they are always in their own
texture, whose size exactly matches their extent. Since the easiest
currently exposed way to set a border color is to do so for an
immutable texture, we went a bit further and added a new "immutable"
texture storage type used for these cases; currently, it is always
and automatically used only when there is a specified border color,
but in theory there's no reason we couldn't provide immutable-only
images that use the default wrapping mdoe (though clamp to border
is admittedly not a great default).
To fix the maps case specifically, we set the border color to a
translucent version of the ocean border color. This may need
tweaking going forward, which shouldn't be hard.
As part of this process, we had to modify graphics replacement to
make sure immutable images are *removed* when invalidated, rather
than just having a validity flag unset (this is normally done by
the UI to try to reuse allocations in place if images are updated
in benign ways, since the texture atlases used for Ui do not
support deallocation; currently this is only used for item images,
so there should be no overlap with immutable image replacement,
so this was purely precautionary).
Since we were already touching the relevant code, we also updated
the image dependency to a newer version that provides more ways
to avoid allocations, and made a few other changes that should
hopefully eliminate redundant most of the intermediate buffer
allocations we were performing for what should be zero-cost
conversions. This may slightly improve performance in some
cases.
commit ad18ce939940a8c697270f6e9b94db9942fd8295
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 13:21:09 2020 +0200
Fix continent scale hack.
commit 36b1cb074f5b195aebd7dbbc3da7f0246a1a18ec
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 12:11:40 2020 +0200
Enable loading different sized maps without a recompile.
We may want to tweak the effects of the continent_scale_hack.
commit 13b6d4d534cc4814b7cb3294ca41bbfea0a6b186
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 10:55:48 2020 +0200
Removing WORLD_SIZE, part 1.
Erased almost every instance of WORLD_SIZE and replaced it with a local
power of two, map_size_lg (which respects certain invariants; see
common/src/terrain/map.rs for more details about MapSizeLg). This also
means we can avoid a dependency on the world crate from client, as
desired.
Now that the rest of the code is not expecting a fixed WORLD_SIZE, the
next step is to arrange for maps to store their world size, and to use
that world size as a basis prior to loading the map (as well, probably,
as prior to configuring some of the noise functions).
commit 30b1d2c6428230a9eaa0d749cdcbbd6f1cbccd78
Merge: 7d56ba31b 1377b369f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:58 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 7d56ba31b445441461b28a07fc495d7d4f047c17
Merge: 2101113b4 598f14b25
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 1377b369f6db2258e910d467a5740f31789e3ded
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sun Jul 19 23:25:38 2020 +0200
more saturated pumpkins
commit ae8d50527f93bb0616c2ad46ce4dacb63bc37c6d
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sat Jul 18 20:29:56 2020 +0200
acacia models
commit 2101113b467e691de787392d7f20f1745f5637bd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 18 18:55:25 2020 +0200
Higher detail LOD.
commit add2cfae04b4385fa5590e11e2bd5229d9dee0aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 16 01:57:39 2020 +0200
Revert some irrelevant stuff.
commit 2e2ab3dc1eaa59a4aef7f8d34a53d8aae4c8553a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 15 13:30:49 2020 +0200
Fixing various things about shadows.
* Correcting optimal LISPSM parameter.
* Figure shadows are cast when they're not visible.
* Chunk shadows stay cast until you look away.
* Seamless cubemaps for point lights.
* Etc.
commit 6c31e6b56217274285b597af297036691ea5d897
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 19:50:26 2020 +0200
Fix shadow creation.
commit 6332cbe006115ae205597529cd8bbccd146c2cca
Merge: be438657c 930e0028b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:47:00 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit be438657c33d7b5bfb0a9582c3ed3fd366637323
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:28:08 2020 +0200
Tweaks to shadows.
Added shadow map resolution configuration, added seamless cubemaps,
documented all existing rendering options, and fixed a few Clippy
errors.
commit 23b4058906013c7d2a40c286e20e32c5fbd897ed
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 10:11:19 2020 +0200
Fix moon, use nonlinear noise for terrain.
Note that the latter has a bit of performance cost.
commit 7fbe5cbfbb9dc29607957b8e62f432a4deed193d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:23:02 2020 +0200
Address lies about max texture size.
commit bcfc62b5e13a1cdd83f57535fde4694720bebfd9
Merge: 75e3626a7 18a08e8fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:22:08 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 75e3626a785919f43fdcf2127c2b10e3e4df2f9f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:21:52 2020 +0200
OpenGL 3.3 minimum.
commit 18a08e8fe2739f02af99a5d2cb4e7c38c49e858b
Author: Monty Marz <m.marzouq@gmx.de>
Date: Tue Jul 7 23:57:52 2020 +0200
settings localization
commit 90c5d1ca3620092bc3ae10b2211489eb1cf6f5e8
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 21:11:48 2020 +0200
Lower near distance.
commit 0e66f02b25aaddaa2dfddbbc89cd67de54a9a7b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 20:09:01 2020 +0200
All sprites sway in the wind now.
commit db1401a6910bf42dcf502462c90038752ff5fbdb
Merge: 69e508d8c e8b4b29d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 19:34:17 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 69e508d8c94d8973033817ca86f357e466fc7c4d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 18:41:37 2020 +0200
Make it easy to switch to SIMD for math.
commit ffe0f5928c7a7e87d00cb5426b3b1d831d7e02fd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 21:21:12 2020 +0200
Fix some issues with underwater rendering.
commit bfda6da42f38fd02c31ee92c81ab785a3e50c2a0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 19:17:59 2020 +0200
Fix some minor display issues.
commit 0ed752e087968cf901301884aaeae698e32ef8a5
Merge: ccc6a06a8 518edcb85
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:14:21 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit ccc6a06a8d4504d6b9f7af7905a414d2ee06ab76
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:04:34 2020 +0200
Some minor changes.
commit 4e020246702889269efe1a191788992164c508d6
Merge: 50a64d927 e05c9267a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 16:17:40 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 50a64d927e6c4f4b0e4688e4cbfca694bc3f922a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 13:07:03 2020 +0200
Fix far plane.
commit 7dd06da34cae8f9ea3b6c889fe965181f3fd3949
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:25:35 2020 +0200
Add shadows.glsl.
commit 618a18c998778bf871b905a74657440fcc384c80
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:10:22 2020 +0200
Adding shadows, greedy meshing, and more.
commit eaea83fe6a5cb1cb0ba8beef888183c718258496
Merge: 267018495 2f89b863e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 22:47:07 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 2670184954a13e4a9e7a4e35ba79aac0c5fac2f7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 21:20:01 2020 +0200
Make civsim and sites deterministic.
For anything in worldgen where you use a HashMap, *please* think
carefully about which hasher you are going to use! This is
especially true if (for some reason) you are depending on hashmap
iteration order remaining stable for some aspect of worldgen.
commit f8376fd5dc72b4a9c2f51a6b4570d59c8b8e9343
Merge: 654f7e049 cdee191dd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 17:53:57 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 654f7e049258d9da27c09608bbe6a46ffa8787e5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed May 20 21:22:30 2020 +0200
Correct backface culling.
commit 560501df05ca725409b0f2e4eb31bdfdc15fd0c7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue May 19 17:22:06 2020 +0200
Greedy messhing for shadows.
commit a4d87e1875ca543436e6bbbeb20348facc5a52d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun May 17 05:59:00 2020 +0200
Shadow maps work for lantern.
commit 243d0837b8a3b08172c9a3c348d964d7ddc2a0a8
Merge: 04382dc28 71dd520cd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:53:13 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 04382dc28632b6c66e8821f6870c0daaa1c1901a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:22:17 2020 +0200
WIP: better graphics config, better LOD, shadow maps.
commit 22ddbad3eb32bfa70f0932176022208fe67ded81
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 18:54:09 2020 +0200
Minor shader fixes.
commit 746a10e8d01ac235f994b0cde78fa48998602a1f
Merge: 0f4a0e763 40ab94673
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 04:02:09 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0f4a0e763db3afbdc4fb0558611f38326ca87151
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 23:03:24 2020 +0200
Switch back to pop-in terrain.
commit dd74fa7e4a53667b38811d7aec58d7f6a68889bb
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 22:58:55 2020 +0200
LOD shading closer to voxel shading.
commit ef67bd58ba0bdaf622b078892d768263b6cba268
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 28 20:49:03 2020 +0200
Experimental underwater lighting.
commit 2c5ad9d07605e80d5fd5679dd3a5d70c605b86a9
Merge: 748279835 303967a6f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 22:35:24 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7482798354eda18c8207950080fc24d443a369de
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 21:59:55 2020 +0200
Replace discard in figure-frag.
commit d83b4ae69be4912f69bf7835f509c68a1c7770a4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:45:57 2020 +0200
Fix sprite lighting, HDR from focus_pos.
commit 0594238004f116274905fa0ed7c2b6c417ed1d29
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:14:10 2020 +0200
Proper HDR from point lights.
commit 48c93d2b41ce5743103d18e76cc228f5ac766492
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 14:01:43 2020 +0200
Brighter ambiance, darker LOD shadows.
commit e0452e895ccfa8a43f368cae3b8b8aedc24dad93
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 13:13:23 2020 +0200
More proper HDR.
commit 4c6da3ed16cfeebb455e40da5f557b4af9a499d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 00:13:10 2020 +0200
Trying LOD noise.
commit 682a3d74c85df5503ffe1fc1cc891bce789df1ad
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 23:11:08 2020 +0200
Fix LOD heights in towns.
commit cc39e5734e8b18f9077bf42e66337c1319dd6b6e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 21:01:23 2020 +0200
More LOD fixes.
commit 8116b21c2e51c836e77894e309ac273caf2917b3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:54:43 2020 +0200
I like this coloring.
commit bc2560ea90b36f4b46190005344232d993043ac3
Merge: 14effdd5d e690efe71
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:48:33 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 14effdd5db8747fcf3eb34f03b46b7792e92d1c5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:24:35 2020 +0200
Re-saturate.
commit 48a643955d4435b78179acba0beb4a979905cc31
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:23:57 2020 +0200
Various fixes.
commit f7b497a0c25f4ad4682c71dd1ed6f608052feb9b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 03:22:49 2020 +0200
Render figures again.
commit 44e4aad48deba8266b9f8bdfd3db096b381f5327
Merge: e6f0a5a98 9ec319a18
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 02:01:04 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit e6f0a5a981a82533ba188fff0a54ce98577bb152
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 24 16:12:20 2020 +0200
Add atmospheric scattering.
commit f2953087f691a8edbc001cb98ebf5059fc6f8ac0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 23 00:01:20 2020 +0200
Fix shadowing for specular reflections.
commit ddd4a67a9799b8d08c7dc0c2bec90621c2bed0e3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Apr 22 22:56:12 2020 +0200
HDR fixes.
commit 1015e60deef3c447381996277df7496707a63bd0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 21 18:25:19 2020 +0200
More lighting changes.
commit 80c264abd111fb237e57843efcb5c071d4f84613
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 13 00:29:59 2020 +0200
Lighting experiments.
commit 8414987e589dd5102bad89762a3adaccc0bfe957
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 9 02:38:40 2020 +0200
WIP -- lighting changes and soft shadows.
commit 9cd2b3fb0d6b49776c6dfe463e4169637250b11a
Merge: c7ea687eb 8b149ad11
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:29 2020 +0200
Merge branch 'sharp/new-lighting' into sharp/small-fixes
commit c7ea687ebbc5aace1b455f134a5bf49ce2c7434a
Merge: 476441531 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:02 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 8b149ad11ad4bb75018fcf9519baec27d1c95951
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:32:39 2020 +0200
Trying out a new lighting model.
commit b0ac9f36f755dd06f7c17c46150568064790864f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 07:56:11 2020 +0200
Use bicubic interpolation for terrain.
commit f6fc9307a121514b614bc50ef8eb055953e7da8a
Merge: 33140a295 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 05:01:41 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 4764415312aae6e9ac2d00e86e84577cb958f1ab
Merge: ed2d0111d 13388ee6a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 04:54:48 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 13388ee6a42943f3f79a9cb488346cef18e272fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 20:30:08 2020 +0200
Various fixes (to coloring and to soft shadows).
commit fbd084a94a067082a87cd6d28b82054709bc9265
Merge: 5a089863b 4fdf6896a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 18:50:38 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/map-colors
commit ed2d0111d994262ae836d84d1fe5a45e4de72a0b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 06:49:27 2020 +0200
Combining colors and LOD.
commit 88342640c6b835114d01c797b89fdede3b0a2108
Merge: 33140a295 5a089863b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:49:20 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 33140a2951b8212725f42c758b277aaec4d888f7
Merge: 4c65a5aed f34d4b379
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:36:21 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 5a089863beb01d4794bbe3580ada47b278715ea2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 03:17:49 2020 +0200
Making maps brighter.
This is probably not the right way to do it, but oh well!
commit 32b2c99109dd486aa922886081068f9c550c83f2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 02:46:36 2020 +0200
Horizon mapping and "layered" map generation.
Horizon mapping is a method of shadow mapping specific to height maps.
It can handle any angle between 0 and 90 degrees from the ground, as
long as know the horizontal direction in advance, by remembering only a
single angle (the "horizon angle" of the shadow map). More is explained
in common/src/msg/server.rs. We also remember the approximate height of
the largest occluder, to try to be able to generate soft shadows and
create a vertical position where the shadows can't go higher.
Additionally, map generation has been reworked. Instead of computing
everything from explicit samples, we pass in sampling functions that
return exactly what the map generator needs. This allows us to cleanly
separate the way we sample things like altitudes and colors from the map
generation process. We exploit this to generate maps *partially* on the
server (with colors and rivers, but not shading). We can then send the
partially completed map to the client, which can combine it with shadow
information to generate the final map. This is useful for two reasons:
first, it makes sure the client can apply shadow information by itself,
and second, it lets us pass the unshaded map for use with level of
detail functionality.
For similar reasons, river generation is split
out into its own layer, but for now we opt to still generate rivers on
the server (since the river wire format is more complicated to compress
and may require some extra work to make sure we have enough precision to
draw rivers well enough for LoD).
Finally, the mostly ad-hoc lighting we were performing has been (mostly)
replaced with explicit Phong reflection shading (including specular
highlights). Regularizing this seems useful and helps clarify the
"meaning" of the various light intensities, and helps us keep a more
physically plausible basis. However, its interaction with soft shadows
is still imperfect, and it's not yet clear to me what we need to do to
turn this into something useful for LoD.
commit f8926a5737ddc51f3d585c651a64c43677aae0f4
Merge: a1aee931e 875ae6ced
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Mar 13 13:32:42 2020 +0100
Merge remote-tracking branch 'origin/master' into sharp/map-colors
commit 4c65a5aed353b119aea65a2aaeb94549b67beb42
Author: Treeco <5021038-Treeco@users.noreply.gitlab.com>
Date: Mon Feb 24 16:48:05 2020 +0000
Made LOD setting slider exponential
commit 2fa7b2d20d7233dc8bfd64f9f7f54617575248f1
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 17:49:53 2020 +0000
Added mist to LoD
commit aab059a450b5f635777129ff82cc15b662965c3c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 15:14:06 2020 +0000
Added LoD slider
commit 779c36b538121c5ade3633ae5cb67bb14c8c3877
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:54:55 2020 +0000
Reduced cost of vertex pushing
commit 9fea150473906b166365b738ebcea07c697daf3d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:38:53 2020 +0000
Fixed maths, improved LoD resolution
commit 5481df38fea5bf183ff376a3337179cfaa5233dc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 11:22:50 2020 +0000
Dynamically relocate LoD vertices to enhance details
commit a3e36a50ababd615da7db1b26158c7906a5def01
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 18:13:51 2020 +0000
Simpler terrain spiral rendering
commit 255f450ae9ac8763db4bede075fb409161ed57cc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:53:17 2020 +0000
Better LoD precision
commit 3d027aebe812a5b8658a4eb8123dc9f61b3776d2
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:04:03 2020 +0000
Better falloff
commit be775c9484b457b2c0b1a494aec03392d0c70e76
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 15:30:45 2020 +0000
Applied good ideas from experimental branch
commit 58587b68545a23c5c04ab4574a4b94b3bc982246
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 16:15:13 2020 +0000
Minor fixes to LoD merging
commit 7b42aebd709c14df2db766aad61d9280ad24d84d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 15:04:44 2020 +0000
Capped LoD dragging
commit 8aafc559f87124e1ea5ca6e3ddc2aa0c242d793c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:54:37 2020 +0000
Better blending between LoD and terrain border
commit edd3455d5161792d87ddc8eadc0ecbad5532b284
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:40:19 2020 +0000
Fixed LoD z depth, added sea level offset
commit b9b06744620114dd5556e73f64fa93c145503a7c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:27:43 2020 +0000
Better LoD smoothing
commit a1aee931e790431560cd2d953ad61d9497072afd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Feb 21 14:52:17 2020 +0100
Adding shadows.
commit 2400786c13dd891c131ed86d48d05df516a8a778
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 13:48:40 2020 +0000
Use world map as LoD source
commit dbf650f504a4c25fbbc2096ac3616c736bf52d23
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Jan 20 00:48:14 2020 +0000
Better clouds at distance
commit 5e6f81b86cdb9730b9b056877b19257075fd5fa8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Jan 19 23:59:02 2020 +0000
sync
commit 745e7540ddb000cc645f612767b337c2ddc3f7c0
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 12:40:48 2019 +0000
Improved cloud falloff mist, faster noise sampling
commit f6a200d0cb866196ba57697466755f9e0c7ea5d8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 10:09:00 2019 +0000
Improved long-range depth precision, removed unnecessary LoD polygons
commit 63d1b2bb2292898d59fb4f4e502201103dfeb86f
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 20:57:46 2019 +0000
Working LoD shader
commit f13d98ee3e58f881e8b978861a67663b59ed91ec
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 11:03:40 2019 +0000
LoD first attempt (stack overflow issue)
2020-08-20 18:34:59 +00:00
|
|
|
|
map_size_lg,
|
2020-02-06 17:34:32 +00:00
|
|
|
|
max_height: maxh as f32,
|
2019-05-18 08:59:58 +00:00
|
|
|
|
chunks,
|
2019-06-25 15:59:09 +00:00
|
|
|
|
locations: Vec::new(),
|
2019-05-21 00:57:16 +00:00
|
|
|
|
gen_ctx,
|
2019-09-17 14:05:08 +00:00
|
|
|
|
rng,
|
2019-06-10 16:28:02 +00:00
|
|
|
|
};
|
|
|
|
|
|
2019-12-03 01:07:44 +00:00
|
|
|
|
if opts.seed_elements {
|
|
|
|
|
this.seed_elements();
|
|
|
|
|
}
|
2019-06-10 16:28:02 +00:00
|
|
|
|
|
|
|
|
|
this
|
|
|
|
|
}
|
|
|
|
|
|
(See sharp/lod-history) LOD, shadows, greedy meshing, new lighting, perf
---
Pretty much a Veloren fork at this point. Here's a high level overview of the changes (will be added to CHANGELOG just before merge).
At a high level this MR incorporates roughly two groups of changes.
The first group consists of new game features: more flexible map sizes, level of detail terrain, shadow maps, and a new lighting
engine. This is "feature work" that (mostly) only adds new things to Veloren, and mostly shouldn't affect old stuff.
The second big group of changes are those addressing the fallout from all the new features. These include performance fixes of
various sorts: the addition of multiple graphics options and optimization of the cheap ones to avoid work, switching all voxel
models to use some variant of greedy meshing, switching over much of our CPU-side vector math to exploit SIMD instructions
(coinciding with a fork of `vek`), and a rewrite of how the UI handles text rendering (coinciding with updates to our fork
of `conrod`). Making Veloren's hardcoded colors appear correct under the new lighting engine also required considerably
changes (TODO: Fill in this section when it's complete).
The second category of changes often heavily touches code owned by other people, including frequently modified code "owned" by a
handful of people, so I recommend that this code be reviewed particularly carefully.
---
At a high level (each will be described in more detail below):
- The world map has been refactored.
- The world size is no longer hardcoded (@zesterer).
- The map generation code was made generic to allow using it outside of the `world` crate (@zesterer).
- On world creation, we now compute *horizon maps* (@zesterer).
- The way we pass the world from the server to the client has been updated (@xMAC94x).
- Artifacts related to image rotation were fixed (@imbris).
- Multiflow rivers were enabled (@zesterer).
- In the process of making changes related to the world map, various incidental fixes and optimizations were required.
- The new *level of detail* feature was added (@zesterer wrote part of this and has checked out the rest).
- A new LOD terrain rendering step was added to the pipeline.
- The LOD terrain quality was made configurable via a graphics setting.
- Horizon maps were used to cast shadows from LOD chunks on both LOD and non-LOD terrain.
- A "voxelization" effect was incorporated into rendered LOD terrain to make it blend better into the world.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Veloren's lighting has been completely overhauled (@zesterer has already checked most of this out).
- A semi-accurate index of refraction was assigned to our materials.
- A new, more realistic, physically based approach to lighting was used using the *Ashikhmin Shirley* BRDF.
- We emulate *atmospheric scattering* using equations designed for measuring solar panel light exposure.
- We attempt to compute *realistic light attenuation* in water using its real material properties.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Point and directional lights now cast realistic shadows, using *shadow mapping.* (@imbris, @zesterer, @Treeco, @YuriMomo)
- Point light shadow maps were added to the rendering pipeline, using geometry shaders and *seamless cube maps*.
- Directional light shadows were added to the rendering pipeline, using LISPSM together with disabling *depth clamping*.
- "Shadow-only" chunks and NPCs were added to prevent shadows from models behind you from disappearing.
- In the process of making changes related to shadow maps, various incidental fixes and optimizations were required.
The addition of shadow maps, LOD terrain, and the new lighting all led to significant performance degradation, on top of other
changes happening in master. Therefore, a large number of performance improvements were also needed:
- The graphics options were made much more flexible and configurable, and shaders were optimize.
- New options were provided for how to render lights and shadows (@Pfauenauge, @zesterer).
- Graphic setting storage and configuration were overhauled to make adding new features easier (@Pfauenauge, @imbris).
- Shaders were rewritten to utilize GLSL's preprocessor to avoid overhead (@zesterer, @YuriMomo).
- In the process of making changes related to providing additional rendering options, various incidental fixes and optimizations were required.
- Voxel model creation was switched to use *greedy meshing.*
- A new voxel meshing method, greedy meshing, was added (@imbris).
- Uses of the older meshing methods were migrated to use greedy meshing (@imbris, @jshipsey, @Pfauenauge).
- New restrictions were added to terrain, figure, and sprites to future proof them for further optimizations (@jshipsey, @Pfauenauge, @zesterer).
- Most positions are now relative to either chunk or player position for better precision (@imbris, @zesterer, @scottc).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- Animation and terrain math were switched to use SIMD where possible.
- Fixes were made to vek to make its SIMD feature usable for us (@zesterer, @imbris).
- The interface and types used in bone animation were changed in various ways (@jshipsey, @Snowram, @Pfauenauge).
- Redundant code generation for body animation is now partly taken care of by a macro (@jshipsey, @Snowram, @Pfauenauge).
- Animation code was modified to to use vek's SIMD representation where possible (@jshipsey, @Snowram, @Pfauenauge).
- Terrain meshing code and shadow map math were also modified to use vek's SIMD representation (@imbris).
- SIMD instruction generation was enabled (@YuriMomo, @jshipsey, @Snowram, @imbris, @Angelonfira, @xMAC94x).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- The way we cache glyphs was completely refactored, fixed, and optimized.
- Our fork of `conrod` was optimized in various ways (@imbris).
- Our fork of `conrod` now exposes whether a widget was updated during the current frame (@imbris).
- Our use of the glyph cache was rewritten for correctness (@imbris).
- A *text cache* was introduced that lets us skip remeshing glyphs that have not changed (@imbris).
- Various changes were made to reduce pressure on the glyph cache, with more planned (@imbris, @Pfauenauge).
- In the process of making changes related to the glyph cache, various incidental fixes and optimizations were required.
- Colors were changed to keep Veloren's look consistent with master.
- Some older tree models were brought back (@Pfauenauge).
- TODO(@Sharp): All hardcoded colors were extracted and made hotloadable.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Hardcoded colors were fixed to conform to Veloren's style.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Color models were fixed to conform to Veloren's style.
A detailed description of the involved changes follows.
---
- The world size is no longer hardcoded. All functions dependent on world size now take a `WorldSizeLg`, which holds the base 2 logarithm of each actual world dimension and is guaranteed to maintain certain properties (outlined in `common/src/terrain/map.rs`). Additionally, many utility functions that utilize the world size were moved into `common` as well (mostly `common/src/terrain/mod.rs`). Finally, the world map format was updated in order to store its size explicitly, with a migration path from the old format that should work whenever the old formatted map was a square (practically always). See `world/src/sim/mod.rs` for these changes.
- The map generation code was made generic to allow using it outside of the `world` crate. The parts of the map generating code that do not need to query the world were moved over to `common/src/terrain/map.rs`, allowing them to be used from the client without creating a dependency on `world`. The rest of it was turned into helper functions in `world/src/sim/map.rs`, which can be passed as closures to the generic map generation code to complete its construction. This also means that colors are now passed in separately to the map generation function. See <https://veloren.net/devblog-78/> for more details.
- On world creation, we now compute *horizon maps*. See the function in `world/src/sim/util.rs`.
Given a height map and a plane intersecting that height map, our horizon maps allow us to encode enough information to reconstruct shadows for each point on the height map using only the *horizon angle* (the angle at which the sun starts to become visible). As Veloren's sun only covers one plane, this is sufficient for encoding sun shadows for LOD terrain, by encoding two angles per chunk (one for each 90 degrees the sun covers). We can also use this for the moon, if we want, since the moon follows the same path. Additionally, we store the *height* of the furthest occluder, to try to make the shadows volumetric; so this means 4 bytes in total for each chunk.
Support for horizon maps has been merged into the map functionality in common as well.
- The way we pass the world from the server to the client has been updated. Rather than passing the prerendered map, we instead pass three maps with values for each chunk; one with the color information, a second with altitude information, and a third with horizon map information. We then reconstruct the map on the client, together with some additional information we send from the server (like the sea level and maximum height). See `common/src/msg/server.rs` for a detailed description of the format of `WorldMapMsg`, and `server/src/libr.rs` and `client/src/lib.rs` for details of the map construction and parsing.
- Artifacts related to image rotation were fixed. See the commit message for commit SHA `cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e` for a detailed explanation. This involved changes to shaders, the addition of a new type of graphic (also reflected in the graphic cache) that allows specifying a border color (which automatically makes the associated texture immutable), and some related fixes. I reproduce the first two paragraphs of the MR description as well:
```
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
```
- Multiflow rivers were enabled.
This does not really need to be part of this MR, and would be easy to revert, but since it seemed to provide a nice improvement it's currently packaged with it.
We already computed multiple outflows from each chunk for erosion purposes long before this MR.
However, we never modified river rendering to be able to handle this case (just a single downhill river flow is complex enough!) so this was not exposed when deciding which chunks were rivers.
Now that
- In the process of making changes related to the world map, various incidental fixes and optimizations were required. Some examples of fixes include making sure terrain is never lowered to below sea level (to make the shadow maps report correct values), fixing map altitudes and colors to understand things like cliffs and "block level" coloring (that doesn'te xist on the column level), and fixing a crashbug when rendering images for the UI where source pixels are strongly rectangular. Some examples of related performance fixes include avoiding allocating a fresh vector for all the maps (i.e. copying it over to change the format from `[u32; n]` to `DynamicImage` and then copying again to convert to `RgbaImage`), and instead using the `gfx::memory::slice` function to accomplish the same thing. These sorts of changes are spread all arond the code.
This includes the additon of a new scene, `voxygen/src/scene/lod.rs`, a new pipeline `voxygen/src/render/pipeline/lod_terrain.rs`, and new shaders `assets/vxygen/shaders/lod-terrain-vert.glsl` and `assets/vxygen/shaders/lod-terrain-frag.glsl`, as well as associated changes to the renderer in `voxygen/src/render/renderer.rs`.
The main idea behind our initial approach to LOD was to take the world data we now get from the server (altitude, color, and horizon mapping).
- Some previously computed values were turned into shader uniforms for better prediction on weak processors. (@zesterer)
- Calls to power or trig functions were removed or replaced with multiplications, where possible.
- After some deliberation
- To properly handle sprite "waving" for nearby sprites,
We explicitly designed the greedy meshing system with figures and sprites in mind.
In both cases, we want to be able to *efficiently* pack many different models into the same texture, especially in cases where we know
we will either not be removing any of the grouped-together from the models from the texture, or will remove all of them at once (so
they can be packed into some specific subtexture).
For sprites, since we know every model in advance and never intend to deallocate them, we currently pack them all as efficiently as
possible into one giant tetxure atlas. However, in the future we might opt to pack them slightly less efficiently in exchange for
shrinking the sprite vertex size.
For figures, we pack all the textures for each *model* into the same atlas.
is a global texture atlas used for every sprite, and for figures which is why we have the ability to mesh multiple
models to the same texture area (using the simple texture atlas allocator) without requiring intermediate vector allocations.
This is accomplished by delaying the time when we actually write the color and light data to the texture until *after* all the
model vertices have been meshed; then, we can just allocate the whole color/light array at once, making the atlas we use an
exact fit. In computer science-y terms, we accomplish this delay by, after we perform the initial greedy meshing (without
texture information), not continuing to create the texture data, but instead constructing a *continuation*--that is, a function
that, when called, will execute the rest of the computation. We push this continuation (which in Rust terms is a `FnOnce` closure
that takes the `ColLightsInfo` that it is supposed to write to as context) onto a
onto a vector
resizing. To allow for suspended writes to texture data, Rust pointed out to me that the continuation that would eventually write the color and light data to the texture atlas (the one that is shared by all models sharing the same greedy mesher) would have to *own* whatever data it mshed. Because we often generate the model data to mesh as a temporary in `voxygen/src/load.rs`, the
- Matrix multiplications in the shader were reduced for figure data (@zesterer).
- Vertex "waves" for fluid data were removed.
- Terrain "bending" near edges was removed.
- Scaling was fixed to make sure empty space was not introduced in a space previously occupied by a block. It was also changed to take ownership of its voxel data,
rather than sharing it, to let it be used with meshing.
- Rust's nightly version was bumped in order to use the `array_map` function, which lets us reuse more code between the simple map and `FigureModelCache`.
- PositionedGlyph::standalone.
---
I tried to cite sources in many cases[^realtime],[^lloyd],[^lispsm],[^pbrt],[^greedy],[^tjunctions]
where I needed features from elsewhere but I am particularly grateful for the following resources,
esepcially where they have accompanying source code. I linked all of them that are accessible to the public (those that are not were
obtained through legal means).
[^realtime]: Eisemann, Elmar, Michael Schwarz, Ulf Assarsson, Michael Wimmer. Real-Time Shadows. A K Peters/CRC Press (T&F), 20160419.
[^lloyd]: Lloyd,B. 2007. [Logarithmic perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). PhD thesis, University of North Carolina.
[^lispsm]: Wimmer, M., Scherzer, D., and Purgathofer, W. 2004. [Light space perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). In Proceedings of Eurographics Symposium on Rendering 2004, pp. 143– 152.
[^pbrt]: Pharr, Matt, et al. [http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf](Physically Based Rendering: From Theory to Implementation). Third edition, Morgan Kaufmann Publishers/Elsevier, 2017.
[^greedy]: mikolalysenko. “Meshing in a Minecraft Game.” 0 FPS, 30 June 2012, <https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/>.
[^tjunctions]: blackflux. “Meshing in Voxel Engines – Part 1.” Blackflux.Com, 23 Feb. 2014, <https://blackflux.wordpress.com/2014/02/23/meshing-in-voxel-engines-part-1/>.
I am also especially grateful to Khronos, Wikiepdia, and stackoverflow for answering many of my specific questions while writing the MR.
---
Squashed commit of the following:
commit 300505e7305a2fdac722a808ee8538323f215f39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 18:46:25 2020 +0200
Fixing cargo doc and typo in CHANGELOG.
commit ec0aeb18e8499d7d84ef818331b4b65c3d76cea6
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 15:38:50 2020 +0200
Hopefully final commit for the LOD branch.
commit 5e8ea0b1eaac02903a02feb2eb038d195de4872f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 10:14:26 2020 +0200
Falling back to power as stopgap.
commit e44a1cbf46504ee9931a01bdc9033e145500d557
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 09:25:41 2020 +0200
Address imbris feedback.
Temporarily disables shiny water, lowers max VD.
These restrictions will be lifted soon after merging.
commit 561e25778a108ac3712f5ec2ce3a51234c4430d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 08:31:13 2020 +0200
Tweaking shaders a bit.
commit 7d19259078ce0dd7b3742ad7d0cb3fab3ece3fdc
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:59:43 2020 +0200
Fix view example as well.
commit 051cd4934e0fad2c0b15db4380a4189fa318679f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:29:06 2020 +0200
Fix meshing benchmark.
commit c95e07db3b4dcca285678985e65e31b927cb1c61
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 05:46:22 2020 +0200
Address MR feedback, fix scene clouds.
commit 1bfb816cabdb3ffc1e507a009c2d98696b4b573a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:39:36 2020 +0200
Incorporating Pfau's figure color changes.
New eyes and new humanoid colors.
commit 3f9b89a3ac7b3356b1dba0d1a8f6541357f81469
Merge: e2f5162e4 62c53963a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:29:41 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit e2f5162e4f96f4124aa43488f7245d341b3dcfd4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:28:38 2020 +0200
World colors are all hotloadable.
They live in assets/world/style/colors.ron.
Only a small handful of hardcoed colors remain in World; they are either
part of the map, or difficult to disentangle from the rest of the
computation. Comments are made where appropriate.
commit 62c53963abe1975009d34a8f9515a355bef24f31
Author: Marcel Märtens <marcel.cochem@googlemail.com>
Date: Wed Aug 19 15:59:00 2020 +0200
replace pretty_env_logger with tracing
commit 5b1625f99d9586fe80e2232f583ec5af9f953099
Merge: d71003acd 4942b5b39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:15:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit d71003acdabeff970b3928e97c26af6847b5b78e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:14:34 2020 +0200
Hotloading colors, part 1: colors in common.
Currently, this just entails humanoid colors. There are only three
colors not handled; the light emitter colors in
common/src/comp/inventory/item/tool.rs. These don't seem important
enough to me to warrant making hotloadable, at least not right now, but
if it's needed later we can always add them to the file.
commit 63b5e0e553eb2ea49276f192a6fc7dd65254270d
Merge: c32b337a4 6d2c4b9c1
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 13:05:37 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c32b337a46e10d9de473d178a94a3ccd61c39bb3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:52:04 2020 +0200
Fixing LOD grid, for real.
commit a166ae0360395387e09fb35a1f84210c2ce5ec24
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:28:05 2020 +0200
Addressing imbris's initial feedback.
Fixes two minor bugs: explosion particles were no longer spawning
randomly, and LOD grids were not perfectly even.
commit 4cbad004f44060994252dd3d38647a14a589712f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:27:58 2020 +0200
Bumping nightly per request.
commit 548680276aac77c25d43d16b5622f847d474dbef
Merge: acc098604 8f8b20c91
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:26:06 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit acc0986040589a3492f88a740bc3c3fc693b26d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:28:32 2020 +0200
Lower resolution due to lying drivers.
commit d3b878de2a52c358d2944a6bbd0555dad7fbdb10
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:15:38 2020 +0200
Fix issues msh encountered with Intel 4600.
commit 10245e0c1b0cb6fae10d86409435364edc6102ef
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 21:15:02 2020 +0200
Merge more models into one mesh than we did previously.
commit 3155c31e663c52ae5c3a53d5fb5665892a1a498a
Merge: 7204cc8a7 3c199280e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:35:22 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7204cc8a7a4f74a30306bd205d9834fee4bb944f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:34:43 2020 +0200
Fix not yet done NPC animations.
This forces them all to be the idle animation if not specified.
This fixes issues where you'd have giant NPCs in water.
commit bc83360f2a08918f19d417b5f772e1ff554dba08
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 19:36:37 2020 +0200
Try to fix some bugs:
- Z fighting with LOD terrain and water.
- Audio SFX not playing.
commit 1fd104aa603bf3781b6526a5cada46aeca3049dd
Merge: 862df3c99 7c2c392a3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 12:02:31 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 862df3c9976c4da9bd7cfd784f1a85973127968a
Merge: 0a4218ed9 75c1d4401
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 05:52:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0a4218ed9d541a2b34c133351bea38a99ddf4ea7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 22:27:14 2020 +0200
Fix particle depth.
commit f51dfdeb442d0dd5243dd2f344fa4be295bd0875
Merge: c6251a956 5e6dc0471
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:19:04 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit c6251a956ad376400dca5c23420cf8d213dc8fdf
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:15:46 2020 +0200
Cache figures more intelligently.
Cache figures for longer, and don't cache character states for the
player except where they actually affect the rendered model.
commit 0ed801d5404982c6fb63b1eaa4567d908b294c9d
Merge: c11b9bdf0 eea64f78f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 16:32:24 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c11b9bdf0a53bf9884d2f5a48fec9b01d582df1a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 11:47:15 2020 +0200
Remove unneeded Clippy annotation.
commit 16aa9ef40af56d69289d00aafb3deadfb8bd4f35
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 8 00:53:02 2020 +0200
Fix hotloading and Clippy.
commit 3dc973e0be5b758da1e9805eb764ad401374cd0c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 23:50:27 2020 +0200
Major speedups with SIMD.
commit fba64a7d93d5a96077ce87287bbce6ab9b7fbcae
Merge: 76429d00e d1e10b178
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:19 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 76429d00eea00d212fbd672a84ee91e75b19b938
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:10 2020 +0200
Add clippy.toml.
commit c79f512f84dbb83cb82b7954db68ff241dfd8e41
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 11:55:20 2020 +0200
Fix all clippy issues, clean up Rust code.
commit 6f90e010b3fbefb53b0d632e819931350015b6b8
Merge: 77a8c7c26 5929cfa5c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:30 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 77a8c7c267d3f44a1a62bd6b2274359973c5e4d4
Merge: b44e44232 44febaabd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:10 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 5929cfa5c713aa392110bbb62407f76caf53c3df
Author: jshipsey <jshipsey18@gmail.com>
Date: Thu Aug 6 20:47:27 2020 -0400
fixed in-hand arrow bug
commit b44e442325d828f1cd564d66908f89d09e80474b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 6 13:40:35 2020 +0200
Miscellaneous performance improvements.
commit be37acf287c1360d8085862526ac3365ffd1d768
Merge: 125d7fc6c c11876547
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 05:49:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 125d7fc6c4dcd8c8c5f27b8268a4d64f409f3644
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 04:55:31 2020 +0200
Abstract over simd vs. repr_c vectors.
Also some minor improvements to Event size.
commit d4d4956e9252e1241ce110b2aa85076c6b1e2a23
Merge: 5f3b7294a aced5f979
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:56:54 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 5f3b7294af1f8533edc2620b58863c248e2b07af
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:43:52 2020 +0200
Fix formatting issues I missed before.
commit a428a3ebba70dcab63dd0f8cd983120c90617271
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:41:51 2020 +0200
Fix clippy warnings, part 1.
There aer still a bunch of type too complex and
function takes too many arguments warnings that I'll fix later
(or ignore, since in the one case I did fix a function takes too
many arguments warning I think it made the code *less* readable).
commit ba54307540ed8a937ac08209730284fc653af85b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 30 13:22:42 2020 +0200
Fix light animations so they are removed when the light turns off.
commit 7e0f4bcbf0f4717145d8beac40d52e3acebbe2aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 21:10:20 2020 +0200
Fix crash in edge case for pixel art.
commit 56da06f7a351e2b949e9b014a90b974d511a0924
Merge: cf74d55f2 9f53a4a19
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:56:52 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:29:52 2020 +0200
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
The first concern was addressed by fixing the dimensions of the map
images drawn from the UI (so that we always use a square source
rectangle, rather than a rectangular one according to the dimensions of
the map). We also fixed the way rotation was done in the fragment
shader for north-facing sources to make it properly handle aspect ratio
(this was already done for north-facing targets). Together, these fix
rendering issues peculiar to rectangular maps.
The second and third concerns were jointly addressed by adding an
optional border color to every 2D image drawn by the UI. This turns
out not to waste extra space even though we hold a full f32 color
(to avoid an extra dependency on gfx's PackedColor), since voxel
images already take up more space than Optiion<[f32; 4]> requires.
This is then implemented automatically using the "border color"
wrapping method in the attached sampler.
Since this is implemented in graphics hardware, it only works (at
least naively) if the actual image bounds match the texture bounds.
Therefore, we altered the way the graphics cache stores images
with a border color to guarantee that they are always in their own
texture, whose size exactly matches their extent. Since the easiest
currently exposed way to set a border color is to do so for an
immutable texture, we went a bit further and added a new "immutable"
texture storage type used for these cases; currently, it is always
and automatically used only when there is a specified border color,
but in theory there's no reason we couldn't provide immutable-only
images that use the default wrapping mdoe (though clamp to border
is admittedly not a great default).
To fix the maps case specifically, we set the border color to a
translucent version of the ocean border color. This may need
tweaking going forward, which shouldn't be hard.
As part of this process, we had to modify graphics replacement to
make sure immutable images are *removed* when invalidated, rather
than just having a validity flag unset (this is normally done by
the UI to try to reuse allocations in place if images are updated
in benign ways, since the texture atlases used for Ui do not
support deallocation; currently this is only used for item images,
so there should be no overlap with immutable image replacement,
so this was purely precautionary).
Since we were already touching the relevant code, we also updated
the image dependency to a newer version that provides more ways
to avoid allocations, and made a few other changes that should
hopefully eliminate redundant most of the intermediate buffer
allocations we were performing for what should be zero-cost
conversions. This may slightly improve performance in some
cases.
commit ad18ce939940a8c697270f6e9b94db9942fd8295
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 13:21:09 2020 +0200
Fix continent scale hack.
commit 36b1cb074f5b195aebd7dbbc3da7f0246a1a18ec
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 12:11:40 2020 +0200
Enable loading different sized maps without a recompile.
We may want to tweak the effects of the continent_scale_hack.
commit 13b6d4d534cc4814b7cb3294ca41bbfea0a6b186
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 10:55:48 2020 +0200
Removing WORLD_SIZE, part 1.
Erased almost every instance of WORLD_SIZE and replaced it with a local
power of two, map_size_lg (which respects certain invariants; see
common/src/terrain/map.rs for more details about MapSizeLg). This also
means we can avoid a dependency on the world crate from client, as
desired.
Now that the rest of the code is not expecting a fixed WORLD_SIZE, the
next step is to arrange for maps to store their world size, and to use
that world size as a basis prior to loading the map (as well, probably,
as prior to configuring some of the noise functions).
commit 30b1d2c6428230a9eaa0d749cdcbbd6f1cbccd78
Merge: 7d56ba31b 1377b369f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:58 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 7d56ba31b445441461b28a07fc495d7d4f047c17
Merge: 2101113b4 598f14b25
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 1377b369f6db2258e910d467a5740f31789e3ded
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sun Jul 19 23:25:38 2020 +0200
more saturated pumpkins
commit ae8d50527f93bb0616c2ad46ce4dacb63bc37c6d
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sat Jul 18 20:29:56 2020 +0200
acacia models
commit 2101113b467e691de787392d7f20f1745f5637bd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 18 18:55:25 2020 +0200
Higher detail LOD.
commit add2cfae04b4385fa5590e11e2bd5229d9dee0aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 16 01:57:39 2020 +0200
Revert some irrelevant stuff.
commit 2e2ab3dc1eaa59a4aef7f8d34a53d8aae4c8553a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 15 13:30:49 2020 +0200
Fixing various things about shadows.
* Correcting optimal LISPSM parameter.
* Figure shadows are cast when they're not visible.
* Chunk shadows stay cast until you look away.
* Seamless cubemaps for point lights.
* Etc.
commit 6c31e6b56217274285b597af297036691ea5d897
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 19:50:26 2020 +0200
Fix shadow creation.
commit 6332cbe006115ae205597529cd8bbccd146c2cca
Merge: be438657c 930e0028b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:47:00 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit be438657c33d7b5bfb0a9582c3ed3fd366637323
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:28:08 2020 +0200
Tweaks to shadows.
Added shadow map resolution configuration, added seamless cubemaps,
documented all existing rendering options, and fixed a few Clippy
errors.
commit 23b4058906013c7d2a40c286e20e32c5fbd897ed
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 10:11:19 2020 +0200
Fix moon, use nonlinear noise for terrain.
Note that the latter has a bit of performance cost.
commit 7fbe5cbfbb9dc29607957b8e62f432a4deed193d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:23:02 2020 +0200
Address lies about max texture size.
commit bcfc62b5e13a1cdd83f57535fde4694720bebfd9
Merge: 75e3626a7 18a08e8fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:22:08 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 75e3626a785919f43fdcf2127c2b10e3e4df2f9f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:21:52 2020 +0200
OpenGL 3.3 minimum.
commit 18a08e8fe2739f02af99a5d2cb4e7c38c49e858b
Author: Monty Marz <m.marzouq@gmx.de>
Date: Tue Jul 7 23:57:52 2020 +0200
settings localization
commit 90c5d1ca3620092bc3ae10b2211489eb1cf6f5e8
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 21:11:48 2020 +0200
Lower near distance.
commit 0e66f02b25aaddaa2dfddbbc89cd67de54a9a7b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 20:09:01 2020 +0200
All sprites sway in the wind now.
commit db1401a6910bf42dcf502462c90038752ff5fbdb
Merge: 69e508d8c e8b4b29d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 19:34:17 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 69e508d8c94d8973033817ca86f357e466fc7c4d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 18:41:37 2020 +0200
Make it easy to switch to SIMD for math.
commit ffe0f5928c7a7e87d00cb5426b3b1d831d7e02fd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 21:21:12 2020 +0200
Fix some issues with underwater rendering.
commit bfda6da42f38fd02c31ee92c81ab785a3e50c2a0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 19:17:59 2020 +0200
Fix some minor display issues.
commit 0ed752e087968cf901301884aaeae698e32ef8a5
Merge: ccc6a06a8 518edcb85
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:14:21 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit ccc6a06a8d4504d6b9f7af7905a414d2ee06ab76
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:04:34 2020 +0200
Some minor changes.
commit 4e020246702889269efe1a191788992164c508d6
Merge: 50a64d927 e05c9267a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 16:17:40 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 50a64d927e6c4f4b0e4688e4cbfca694bc3f922a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 13:07:03 2020 +0200
Fix far plane.
commit 7dd06da34cae8f9ea3b6c889fe965181f3fd3949
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:25:35 2020 +0200
Add shadows.glsl.
commit 618a18c998778bf871b905a74657440fcc384c80
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:10:22 2020 +0200
Adding shadows, greedy meshing, and more.
commit eaea83fe6a5cb1cb0ba8beef888183c718258496
Merge: 267018495 2f89b863e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 22:47:07 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 2670184954a13e4a9e7a4e35ba79aac0c5fac2f7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 21:20:01 2020 +0200
Make civsim and sites deterministic.
For anything in worldgen where you use a HashMap, *please* think
carefully about which hasher you are going to use! This is
especially true if (for some reason) you are depending on hashmap
iteration order remaining stable for some aspect of worldgen.
commit f8376fd5dc72b4a9c2f51a6b4570d59c8b8e9343
Merge: 654f7e049 cdee191dd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 17:53:57 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 654f7e049258d9da27c09608bbe6a46ffa8787e5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed May 20 21:22:30 2020 +0200
Correct backface culling.
commit 560501df05ca725409b0f2e4eb31bdfdc15fd0c7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue May 19 17:22:06 2020 +0200
Greedy messhing for shadows.
commit a4d87e1875ca543436e6bbbeb20348facc5a52d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun May 17 05:59:00 2020 +0200
Shadow maps work for lantern.
commit 243d0837b8a3b08172c9a3c348d964d7ddc2a0a8
Merge: 04382dc28 71dd520cd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:53:13 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 04382dc28632b6c66e8821f6870c0daaa1c1901a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:22:17 2020 +0200
WIP: better graphics config, better LOD, shadow maps.
commit 22ddbad3eb32bfa70f0932176022208fe67ded81
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 18:54:09 2020 +0200
Minor shader fixes.
commit 746a10e8d01ac235f994b0cde78fa48998602a1f
Merge: 0f4a0e763 40ab94673
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 04:02:09 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0f4a0e763db3afbdc4fb0558611f38326ca87151
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 23:03:24 2020 +0200
Switch back to pop-in terrain.
commit dd74fa7e4a53667b38811d7aec58d7f6a68889bb
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 22:58:55 2020 +0200
LOD shading closer to voxel shading.
commit ef67bd58ba0bdaf622b078892d768263b6cba268
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 28 20:49:03 2020 +0200
Experimental underwater lighting.
commit 2c5ad9d07605e80d5fd5679dd3a5d70c605b86a9
Merge: 748279835 303967a6f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 22:35:24 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7482798354eda18c8207950080fc24d443a369de
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 21:59:55 2020 +0200
Replace discard in figure-frag.
commit d83b4ae69be4912f69bf7835f509c68a1c7770a4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:45:57 2020 +0200
Fix sprite lighting, HDR from focus_pos.
commit 0594238004f116274905fa0ed7c2b6c417ed1d29
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:14:10 2020 +0200
Proper HDR from point lights.
commit 48c93d2b41ce5743103d18e76cc228f5ac766492
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 14:01:43 2020 +0200
Brighter ambiance, darker LOD shadows.
commit e0452e895ccfa8a43f368cae3b8b8aedc24dad93
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 13:13:23 2020 +0200
More proper HDR.
commit 4c6da3ed16cfeebb455e40da5f557b4af9a499d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 00:13:10 2020 +0200
Trying LOD noise.
commit 682a3d74c85df5503ffe1fc1cc891bce789df1ad
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 23:11:08 2020 +0200
Fix LOD heights in towns.
commit cc39e5734e8b18f9077bf42e66337c1319dd6b6e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 21:01:23 2020 +0200
More LOD fixes.
commit 8116b21c2e51c836e77894e309ac273caf2917b3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:54:43 2020 +0200
I like this coloring.
commit bc2560ea90b36f4b46190005344232d993043ac3
Merge: 14effdd5d e690efe71
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:48:33 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 14effdd5db8747fcf3eb34f03b46b7792e92d1c5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:24:35 2020 +0200
Re-saturate.
commit 48a643955d4435b78179acba0beb4a979905cc31
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:23:57 2020 +0200
Various fixes.
commit f7b497a0c25f4ad4682c71dd1ed6f608052feb9b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 03:22:49 2020 +0200
Render figures again.
commit 44e4aad48deba8266b9f8bdfd3db096b381f5327
Merge: e6f0a5a98 9ec319a18
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 02:01:04 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit e6f0a5a981a82533ba188fff0a54ce98577bb152
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 24 16:12:20 2020 +0200
Add atmospheric scattering.
commit f2953087f691a8edbc001cb98ebf5059fc6f8ac0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 23 00:01:20 2020 +0200
Fix shadowing for specular reflections.
commit ddd4a67a9799b8d08c7dc0c2bec90621c2bed0e3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Apr 22 22:56:12 2020 +0200
HDR fixes.
commit 1015e60deef3c447381996277df7496707a63bd0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 21 18:25:19 2020 +0200
More lighting changes.
commit 80c264abd111fb237e57843efcb5c071d4f84613
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 13 00:29:59 2020 +0200
Lighting experiments.
commit 8414987e589dd5102bad89762a3adaccc0bfe957
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 9 02:38:40 2020 +0200
WIP -- lighting changes and soft shadows.
commit 9cd2b3fb0d6b49776c6dfe463e4169637250b11a
Merge: c7ea687eb 8b149ad11
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:29 2020 +0200
Merge branch 'sharp/new-lighting' into sharp/small-fixes
commit c7ea687ebbc5aace1b455f134a5bf49ce2c7434a
Merge: 476441531 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:02 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 8b149ad11ad4bb75018fcf9519baec27d1c95951
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:32:39 2020 +0200
Trying out a new lighting model.
commit b0ac9f36f755dd06f7c17c46150568064790864f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 07:56:11 2020 +0200
Use bicubic interpolation for terrain.
commit f6fc9307a121514b614bc50ef8eb055953e7da8a
Merge: 33140a295 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 05:01:41 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 4764415312aae6e9ac2d00e86e84577cb958f1ab
Merge: ed2d0111d 13388ee6a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 04:54:48 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 13388ee6a42943f3f79a9cb488346cef18e272fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 20:30:08 2020 +0200
Various fixes (to coloring and to soft shadows).
commit fbd084a94a067082a87cd6d28b82054709bc9265
Merge: 5a089863b 4fdf6896a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 18:50:38 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/map-colors
commit ed2d0111d994262ae836d84d1fe5a45e4de72a0b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 06:49:27 2020 +0200
Combining colors and LOD.
commit 88342640c6b835114d01c797b89fdede3b0a2108
Merge: 33140a295 5a089863b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:49:20 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 33140a2951b8212725f42c758b277aaec4d888f7
Merge: 4c65a5aed f34d4b379
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:36:21 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 5a089863beb01d4794bbe3580ada47b278715ea2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 03:17:49 2020 +0200
Making maps brighter.
This is probably not the right way to do it, but oh well!
commit 32b2c99109dd486aa922886081068f9c550c83f2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 02:46:36 2020 +0200
Horizon mapping and "layered" map generation.
Horizon mapping is a method of shadow mapping specific to height maps.
It can handle any angle between 0 and 90 degrees from the ground, as
long as know the horizontal direction in advance, by remembering only a
single angle (the "horizon angle" of the shadow map). More is explained
in common/src/msg/server.rs. We also remember the approximate height of
the largest occluder, to try to be able to generate soft shadows and
create a vertical position where the shadows can't go higher.
Additionally, map generation has been reworked. Instead of computing
everything from explicit samples, we pass in sampling functions that
return exactly what the map generator needs. This allows us to cleanly
separate the way we sample things like altitudes and colors from the map
generation process. We exploit this to generate maps *partially* on the
server (with colors and rivers, but not shading). We can then send the
partially completed map to the client, which can combine it with shadow
information to generate the final map. This is useful for two reasons:
first, it makes sure the client can apply shadow information by itself,
and second, it lets us pass the unshaded map for use with level of
detail functionality.
For similar reasons, river generation is split
out into its own layer, but for now we opt to still generate rivers on
the server (since the river wire format is more complicated to compress
and may require some extra work to make sure we have enough precision to
draw rivers well enough for LoD).
Finally, the mostly ad-hoc lighting we were performing has been (mostly)
replaced with explicit Phong reflection shading (including specular
highlights). Regularizing this seems useful and helps clarify the
"meaning" of the various light intensities, and helps us keep a more
physically plausible basis. However, its interaction with soft shadows
is still imperfect, and it's not yet clear to me what we need to do to
turn this into something useful for LoD.
commit f8926a5737ddc51f3d585c651a64c43677aae0f4
Merge: a1aee931e 875ae6ced
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Mar 13 13:32:42 2020 +0100
Merge remote-tracking branch 'origin/master' into sharp/map-colors
commit 4c65a5aed353b119aea65a2aaeb94549b67beb42
Author: Treeco <5021038-Treeco@users.noreply.gitlab.com>
Date: Mon Feb 24 16:48:05 2020 +0000
Made LOD setting slider exponential
commit 2fa7b2d20d7233dc8bfd64f9f7f54617575248f1
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 17:49:53 2020 +0000
Added mist to LoD
commit aab059a450b5f635777129ff82cc15b662965c3c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 15:14:06 2020 +0000
Added LoD slider
commit 779c36b538121c5ade3633ae5cb67bb14c8c3877
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:54:55 2020 +0000
Reduced cost of vertex pushing
commit 9fea150473906b166365b738ebcea07c697daf3d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:38:53 2020 +0000
Fixed maths, improved LoD resolution
commit 5481df38fea5bf183ff376a3337179cfaa5233dc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 11:22:50 2020 +0000
Dynamically relocate LoD vertices to enhance details
commit a3e36a50ababd615da7db1b26158c7906a5def01
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 18:13:51 2020 +0000
Simpler terrain spiral rendering
commit 255f450ae9ac8763db4bede075fb409161ed57cc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:53:17 2020 +0000
Better LoD precision
commit 3d027aebe812a5b8658a4eb8123dc9f61b3776d2
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:04:03 2020 +0000
Better falloff
commit be775c9484b457b2c0b1a494aec03392d0c70e76
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 15:30:45 2020 +0000
Applied good ideas from experimental branch
commit 58587b68545a23c5c04ab4574a4b94b3bc982246
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 16:15:13 2020 +0000
Minor fixes to LoD merging
commit 7b42aebd709c14df2db766aad61d9280ad24d84d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 15:04:44 2020 +0000
Capped LoD dragging
commit 8aafc559f87124e1ea5ca6e3ddc2aa0c242d793c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:54:37 2020 +0000
Better blending between LoD and terrain border
commit edd3455d5161792d87ddc8eadc0ecbad5532b284
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:40:19 2020 +0000
Fixed LoD z depth, added sea level offset
commit b9b06744620114dd5556e73f64fa93c145503a7c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:27:43 2020 +0000
Better LoD smoothing
commit a1aee931e790431560cd2d953ad61d9497072afd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Feb 21 14:52:17 2020 +0100
Adding shadows.
commit 2400786c13dd891c131ed86d48d05df516a8a778
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 13:48:40 2020 +0000
Use world map as LoD source
commit dbf650f504a4c25fbbc2096ac3616c736bf52d23
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Jan 20 00:48:14 2020 +0000
Better clouds at distance
commit 5e6f81b86cdb9730b9b056877b19257075fd5fa8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Jan 19 23:59:02 2020 +0000
sync
commit 745e7540ddb000cc645f612767b337c2ddc3f7c0
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 12:40:48 2019 +0000
Improved cloud falloff mist, faster noise sampling
commit f6a200d0cb866196ba57697466755f9e0c7ea5d8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 10:09:00 2019 +0000
Improved long-range depth precision, removed unnecessary LoD polygons
commit 63d1b2bb2292898d59fb4f4e502201103dfeb86f
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 20:57:46 2019 +0000
Working LoD shader
commit f13d98ee3e58f881e8b978861a67663b59ed91ec
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 11:03:40 2019 +0000
LoD first attempt (stack overflow issue)
2020-08-20 18:34:59 +00:00
|
|
|
|
#[inline(always)]
|
|
|
|
|
pub const fn map_size_lg(&self) -> MapSizeLg { self.map_size_lg }
|
|
|
|
|
|
|
|
|
|
pub fn get_size(&self) -> Vec2<u32> { self.map_size_lg().chunks().map(u32::from) }
|
2020-03-27 13:16:02 +00:00
|
|
|
|
|
2020-02-01 20:39:39 +00:00
|
|
|
|
/// Draw a map of the world based on chunk information. Returns a buffer of
|
|
|
|
|
/// u32s.
|
(See sharp/lod-history) LOD, shadows, greedy meshing, new lighting, perf
---
Pretty much a Veloren fork at this point. Here's a high level overview of the changes (will be added to CHANGELOG just before merge).
At a high level this MR incorporates roughly two groups of changes.
The first group consists of new game features: more flexible map sizes, level of detail terrain, shadow maps, and a new lighting
engine. This is "feature work" that (mostly) only adds new things to Veloren, and mostly shouldn't affect old stuff.
The second big group of changes are those addressing the fallout from all the new features. These include performance fixes of
various sorts: the addition of multiple graphics options and optimization of the cheap ones to avoid work, switching all voxel
models to use some variant of greedy meshing, switching over much of our CPU-side vector math to exploit SIMD instructions
(coinciding with a fork of `vek`), and a rewrite of how the UI handles text rendering (coinciding with updates to our fork
of `conrod`). Making Veloren's hardcoded colors appear correct under the new lighting engine also required considerably
changes (TODO: Fill in this section when it's complete).
The second category of changes often heavily touches code owned by other people, including frequently modified code "owned" by a
handful of people, so I recommend that this code be reviewed particularly carefully.
---
At a high level (each will be described in more detail below):
- The world map has been refactored.
- The world size is no longer hardcoded (@zesterer).
- The map generation code was made generic to allow using it outside of the `world` crate (@zesterer).
- On world creation, we now compute *horizon maps* (@zesterer).
- The way we pass the world from the server to the client has been updated (@xMAC94x).
- Artifacts related to image rotation were fixed (@imbris).
- Multiflow rivers were enabled (@zesterer).
- In the process of making changes related to the world map, various incidental fixes and optimizations were required.
- The new *level of detail* feature was added (@zesterer wrote part of this and has checked out the rest).
- A new LOD terrain rendering step was added to the pipeline.
- The LOD terrain quality was made configurable via a graphics setting.
- Horizon maps were used to cast shadows from LOD chunks on both LOD and non-LOD terrain.
- A "voxelization" effect was incorporated into rendered LOD terrain to make it blend better into the world.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Veloren's lighting has been completely overhauled (@zesterer has already checked most of this out).
- A semi-accurate index of refraction was assigned to our materials.
- A new, more realistic, physically based approach to lighting was used using the *Ashikhmin Shirley* BRDF.
- We emulate *atmospheric scattering* using equations designed for measuring solar panel light exposure.
- We attempt to compute *realistic light attenuation* in water using its real material properties.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Point and directional lights now cast realistic shadows, using *shadow mapping.* (@imbris, @zesterer, @Treeco, @YuriMomo)
- Point light shadow maps were added to the rendering pipeline, using geometry shaders and *seamless cube maps*.
- Directional light shadows were added to the rendering pipeline, using LISPSM together with disabling *depth clamping*.
- "Shadow-only" chunks and NPCs were added to prevent shadows from models behind you from disappearing.
- In the process of making changes related to shadow maps, various incidental fixes and optimizations were required.
The addition of shadow maps, LOD terrain, and the new lighting all led to significant performance degradation, on top of other
changes happening in master. Therefore, a large number of performance improvements were also needed:
- The graphics options were made much more flexible and configurable, and shaders were optimize.
- New options were provided for how to render lights and shadows (@Pfauenauge, @zesterer).
- Graphic setting storage and configuration were overhauled to make adding new features easier (@Pfauenauge, @imbris).
- Shaders were rewritten to utilize GLSL's preprocessor to avoid overhead (@zesterer, @YuriMomo).
- In the process of making changes related to providing additional rendering options, various incidental fixes and optimizations were required.
- Voxel model creation was switched to use *greedy meshing.*
- A new voxel meshing method, greedy meshing, was added (@imbris).
- Uses of the older meshing methods were migrated to use greedy meshing (@imbris, @jshipsey, @Pfauenauge).
- New restrictions were added to terrain, figure, and sprites to future proof them for further optimizations (@jshipsey, @Pfauenauge, @zesterer).
- Most positions are now relative to either chunk or player position for better precision (@imbris, @zesterer, @scottc).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- Animation and terrain math were switched to use SIMD where possible.
- Fixes were made to vek to make its SIMD feature usable for us (@zesterer, @imbris).
- The interface and types used in bone animation were changed in various ways (@jshipsey, @Snowram, @Pfauenauge).
- Redundant code generation for body animation is now partly taken care of by a macro (@jshipsey, @Snowram, @Pfauenauge).
- Animation code was modified to to use vek's SIMD representation where possible (@jshipsey, @Snowram, @Pfauenauge).
- Terrain meshing code and shadow map math were also modified to use vek's SIMD representation (@imbris).
- SIMD instruction generation was enabled (@YuriMomo, @jshipsey, @Snowram, @imbris, @Angelonfira, @xMAC94x).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- The way we cache glyphs was completely refactored, fixed, and optimized.
- Our fork of `conrod` was optimized in various ways (@imbris).
- Our fork of `conrod` now exposes whether a widget was updated during the current frame (@imbris).
- Our use of the glyph cache was rewritten for correctness (@imbris).
- A *text cache* was introduced that lets us skip remeshing glyphs that have not changed (@imbris).
- Various changes were made to reduce pressure on the glyph cache, with more planned (@imbris, @Pfauenauge).
- In the process of making changes related to the glyph cache, various incidental fixes and optimizations were required.
- Colors were changed to keep Veloren's look consistent with master.
- Some older tree models were brought back (@Pfauenauge).
- TODO(@Sharp): All hardcoded colors were extracted and made hotloadable.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Hardcoded colors were fixed to conform to Veloren's style.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Color models were fixed to conform to Veloren's style.
A detailed description of the involved changes follows.
---
- The world size is no longer hardcoded. All functions dependent on world size now take a `WorldSizeLg`, which holds the base 2 logarithm of each actual world dimension and is guaranteed to maintain certain properties (outlined in `common/src/terrain/map.rs`). Additionally, many utility functions that utilize the world size were moved into `common` as well (mostly `common/src/terrain/mod.rs`). Finally, the world map format was updated in order to store its size explicitly, with a migration path from the old format that should work whenever the old formatted map was a square (practically always). See `world/src/sim/mod.rs` for these changes.
- The map generation code was made generic to allow using it outside of the `world` crate. The parts of the map generating code that do not need to query the world were moved over to `common/src/terrain/map.rs`, allowing them to be used from the client without creating a dependency on `world`. The rest of it was turned into helper functions in `world/src/sim/map.rs`, which can be passed as closures to the generic map generation code to complete its construction. This also means that colors are now passed in separately to the map generation function. See <https://veloren.net/devblog-78/> for more details.
- On world creation, we now compute *horizon maps*. See the function in `world/src/sim/util.rs`.
Given a height map and a plane intersecting that height map, our horizon maps allow us to encode enough information to reconstruct shadows for each point on the height map using only the *horizon angle* (the angle at which the sun starts to become visible). As Veloren's sun only covers one plane, this is sufficient for encoding sun shadows for LOD terrain, by encoding two angles per chunk (one for each 90 degrees the sun covers). We can also use this for the moon, if we want, since the moon follows the same path. Additionally, we store the *height* of the furthest occluder, to try to make the shadows volumetric; so this means 4 bytes in total for each chunk.
Support for horizon maps has been merged into the map functionality in common as well.
- The way we pass the world from the server to the client has been updated. Rather than passing the prerendered map, we instead pass three maps with values for each chunk; one with the color information, a second with altitude information, and a third with horizon map information. We then reconstruct the map on the client, together with some additional information we send from the server (like the sea level and maximum height). See `common/src/msg/server.rs` for a detailed description of the format of `WorldMapMsg`, and `server/src/libr.rs` and `client/src/lib.rs` for details of the map construction and parsing.
- Artifacts related to image rotation were fixed. See the commit message for commit SHA `cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e` for a detailed explanation. This involved changes to shaders, the addition of a new type of graphic (also reflected in the graphic cache) that allows specifying a border color (which automatically makes the associated texture immutable), and some related fixes. I reproduce the first two paragraphs of the MR description as well:
```
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
```
- Multiflow rivers were enabled.
This does not really need to be part of this MR, and would be easy to revert, but since it seemed to provide a nice improvement it's currently packaged with it.
We already computed multiple outflows from each chunk for erosion purposes long before this MR.
However, we never modified river rendering to be able to handle this case (just a single downhill river flow is complex enough!) so this was not exposed when deciding which chunks were rivers.
Now that
- In the process of making changes related to the world map, various incidental fixes and optimizations were required. Some examples of fixes include making sure terrain is never lowered to below sea level (to make the shadow maps report correct values), fixing map altitudes and colors to understand things like cliffs and "block level" coloring (that doesn'te xist on the column level), and fixing a crashbug when rendering images for the UI where source pixels are strongly rectangular. Some examples of related performance fixes include avoiding allocating a fresh vector for all the maps (i.e. copying it over to change the format from `[u32; n]` to `DynamicImage` and then copying again to convert to `RgbaImage`), and instead using the `gfx::memory::slice` function to accomplish the same thing. These sorts of changes are spread all arond the code.
This includes the additon of a new scene, `voxygen/src/scene/lod.rs`, a new pipeline `voxygen/src/render/pipeline/lod_terrain.rs`, and new shaders `assets/vxygen/shaders/lod-terrain-vert.glsl` and `assets/vxygen/shaders/lod-terrain-frag.glsl`, as well as associated changes to the renderer in `voxygen/src/render/renderer.rs`.
The main idea behind our initial approach to LOD was to take the world data we now get from the server (altitude, color, and horizon mapping).
- Some previously computed values were turned into shader uniforms for better prediction on weak processors. (@zesterer)
- Calls to power or trig functions were removed or replaced with multiplications, where possible.
- After some deliberation
- To properly handle sprite "waving" for nearby sprites,
We explicitly designed the greedy meshing system with figures and sprites in mind.
In both cases, we want to be able to *efficiently* pack many different models into the same texture, especially in cases where we know
we will either not be removing any of the grouped-together from the models from the texture, or will remove all of them at once (so
they can be packed into some specific subtexture).
For sprites, since we know every model in advance and never intend to deallocate them, we currently pack them all as efficiently as
possible into one giant tetxure atlas. However, in the future we might opt to pack them slightly less efficiently in exchange for
shrinking the sprite vertex size.
For figures, we pack all the textures for each *model* into the same atlas.
is a global texture atlas used for every sprite, and for figures which is why we have the ability to mesh multiple
models to the same texture area (using the simple texture atlas allocator) without requiring intermediate vector allocations.
This is accomplished by delaying the time when we actually write the color and light data to the texture until *after* all the
model vertices have been meshed; then, we can just allocate the whole color/light array at once, making the atlas we use an
exact fit. In computer science-y terms, we accomplish this delay by, after we perform the initial greedy meshing (without
texture information), not continuing to create the texture data, but instead constructing a *continuation*--that is, a function
that, when called, will execute the rest of the computation. We push this continuation (which in Rust terms is a `FnOnce` closure
that takes the `ColLightsInfo` that it is supposed to write to as context) onto a
onto a vector
resizing. To allow for suspended writes to texture data, Rust pointed out to me that the continuation that would eventually write the color and light data to the texture atlas (the one that is shared by all models sharing the same greedy mesher) would have to *own* whatever data it mshed. Because we often generate the model data to mesh as a temporary in `voxygen/src/load.rs`, the
- Matrix multiplications in the shader were reduced for figure data (@zesterer).
- Vertex "waves" for fluid data were removed.
- Terrain "bending" near edges was removed.
- Scaling was fixed to make sure empty space was not introduced in a space previously occupied by a block. It was also changed to take ownership of its voxel data,
rather than sharing it, to let it be used with meshing.
- Rust's nightly version was bumped in order to use the `array_map` function, which lets us reuse more code between the simple map and `FigureModelCache`.
- PositionedGlyph::standalone.
---
I tried to cite sources in many cases[^realtime],[^lloyd],[^lispsm],[^pbrt],[^greedy],[^tjunctions]
where I needed features from elsewhere but I am particularly grateful for the following resources,
esepcially where they have accompanying source code. I linked all of them that are accessible to the public (those that are not were
obtained through legal means).
[^realtime]: Eisemann, Elmar, Michael Schwarz, Ulf Assarsson, Michael Wimmer. Real-Time Shadows. A K Peters/CRC Press (T&F), 20160419.
[^lloyd]: Lloyd,B. 2007. [Logarithmic perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). PhD thesis, University of North Carolina.
[^lispsm]: Wimmer, M., Scherzer, D., and Purgathofer, W. 2004. [Light space perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). In Proceedings of Eurographics Symposium on Rendering 2004, pp. 143– 152.
[^pbrt]: Pharr, Matt, et al. [http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf](Physically Based Rendering: From Theory to Implementation). Third edition, Morgan Kaufmann Publishers/Elsevier, 2017.
[^greedy]: mikolalysenko. “Meshing in a Minecraft Game.” 0 FPS, 30 June 2012, <https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/>.
[^tjunctions]: blackflux. “Meshing in Voxel Engines – Part 1.” Blackflux.Com, 23 Feb. 2014, <https://blackflux.wordpress.com/2014/02/23/meshing-in-voxel-engines-part-1/>.
I am also especially grateful to Khronos, Wikiepdia, and stackoverflow for answering many of my specific questions while writing the MR.
---
Squashed commit of the following:
commit 300505e7305a2fdac722a808ee8538323f215f39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 18:46:25 2020 +0200
Fixing cargo doc and typo in CHANGELOG.
commit ec0aeb18e8499d7d84ef818331b4b65c3d76cea6
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 15:38:50 2020 +0200
Hopefully final commit for the LOD branch.
commit 5e8ea0b1eaac02903a02feb2eb038d195de4872f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 10:14:26 2020 +0200
Falling back to power as stopgap.
commit e44a1cbf46504ee9931a01bdc9033e145500d557
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 09:25:41 2020 +0200
Address imbris feedback.
Temporarily disables shiny water, lowers max VD.
These restrictions will be lifted soon after merging.
commit 561e25778a108ac3712f5ec2ce3a51234c4430d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 08:31:13 2020 +0200
Tweaking shaders a bit.
commit 7d19259078ce0dd7b3742ad7d0cb3fab3ece3fdc
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:59:43 2020 +0200
Fix view example as well.
commit 051cd4934e0fad2c0b15db4380a4189fa318679f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:29:06 2020 +0200
Fix meshing benchmark.
commit c95e07db3b4dcca285678985e65e31b927cb1c61
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 05:46:22 2020 +0200
Address MR feedback, fix scene clouds.
commit 1bfb816cabdb3ffc1e507a009c2d98696b4b573a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:39:36 2020 +0200
Incorporating Pfau's figure color changes.
New eyes and new humanoid colors.
commit 3f9b89a3ac7b3356b1dba0d1a8f6541357f81469
Merge: e2f5162e4 62c53963a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:29:41 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit e2f5162e4f96f4124aa43488f7245d341b3dcfd4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:28:38 2020 +0200
World colors are all hotloadable.
They live in assets/world/style/colors.ron.
Only a small handful of hardcoed colors remain in World; they are either
part of the map, or difficult to disentangle from the rest of the
computation. Comments are made where appropriate.
commit 62c53963abe1975009d34a8f9515a355bef24f31
Author: Marcel Märtens <marcel.cochem@googlemail.com>
Date: Wed Aug 19 15:59:00 2020 +0200
replace pretty_env_logger with tracing
commit 5b1625f99d9586fe80e2232f583ec5af9f953099
Merge: d71003acd 4942b5b39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:15:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit d71003acdabeff970b3928e97c26af6847b5b78e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:14:34 2020 +0200
Hotloading colors, part 1: colors in common.
Currently, this just entails humanoid colors. There are only three
colors not handled; the light emitter colors in
common/src/comp/inventory/item/tool.rs. These don't seem important
enough to me to warrant making hotloadable, at least not right now, but
if it's needed later we can always add them to the file.
commit 63b5e0e553eb2ea49276f192a6fc7dd65254270d
Merge: c32b337a4 6d2c4b9c1
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 13:05:37 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c32b337a46e10d9de473d178a94a3ccd61c39bb3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:52:04 2020 +0200
Fixing LOD grid, for real.
commit a166ae0360395387e09fb35a1f84210c2ce5ec24
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:28:05 2020 +0200
Addressing imbris's initial feedback.
Fixes two minor bugs: explosion particles were no longer spawning
randomly, and LOD grids were not perfectly even.
commit 4cbad004f44060994252dd3d38647a14a589712f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:27:58 2020 +0200
Bumping nightly per request.
commit 548680276aac77c25d43d16b5622f847d474dbef
Merge: acc098604 8f8b20c91
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:26:06 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit acc0986040589a3492f88a740bc3c3fc693b26d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:28:32 2020 +0200
Lower resolution due to lying drivers.
commit d3b878de2a52c358d2944a6bbd0555dad7fbdb10
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:15:38 2020 +0200
Fix issues msh encountered with Intel 4600.
commit 10245e0c1b0cb6fae10d86409435364edc6102ef
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 21:15:02 2020 +0200
Merge more models into one mesh than we did previously.
commit 3155c31e663c52ae5c3a53d5fb5665892a1a498a
Merge: 7204cc8a7 3c199280e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:35:22 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7204cc8a7a4f74a30306bd205d9834fee4bb944f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:34:43 2020 +0200
Fix not yet done NPC animations.
This forces them all to be the idle animation if not specified.
This fixes issues where you'd have giant NPCs in water.
commit bc83360f2a08918f19d417b5f772e1ff554dba08
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 19:36:37 2020 +0200
Try to fix some bugs:
- Z fighting with LOD terrain and water.
- Audio SFX not playing.
commit 1fd104aa603bf3781b6526a5cada46aeca3049dd
Merge: 862df3c99 7c2c392a3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 12:02:31 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 862df3c9976c4da9bd7cfd784f1a85973127968a
Merge: 0a4218ed9 75c1d4401
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 05:52:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0a4218ed9d541a2b34c133351bea38a99ddf4ea7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 22:27:14 2020 +0200
Fix particle depth.
commit f51dfdeb442d0dd5243dd2f344fa4be295bd0875
Merge: c6251a956 5e6dc0471
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:19:04 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit c6251a956ad376400dca5c23420cf8d213dc8fdf
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:15:46 2020 +0200
Cache figures more intelligently.
Cache figures for longer, and don't cache character states for the
player except where they actually affect the rendered model.
commit 0ed801d5404982c6fb63b1eaa4567d908b294c9d
Merge: c11b9bdf0 eea64f78f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 16:32:24 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c11b9bdf0a53bf9884d2f5a48fec9b01d582df1a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 11:47:15 2020 +0200
Remove unneeded Clippy annotation.
commit 16aa9ef40af56d69289d00aafb3deadfb8bd4f35
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 8 00:53:02 2020 +0200
Fix hotloading and Clippy.
commit 3dc973e0be5b758da1e9805eb764ad401374cd0c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 23:50:27 2020 +0200
Major speedups with SIMD.
commit fba64a7d93d5a96077ce87287bbce6ab9b7fbcae
Merge: 76429d00e d1e10b178
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:19 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 76429d00eea00d212fbd672a84ee91e75b19b938
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:10 2020 +0200
Add clippy.toml.
commit c79f512f84dbb83cb82b7954db68ff241dfd8e41
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 11:55:20 2020 +0200
Fix all clippy issues, clean up Rust code.
commit 6f90e010b3fbefb53b0d632e819931350015b6b8
Merge: 77a8c7c26 5929cfa5c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:30 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 77a8c7c267d3f44a1a62bd6b2274359973c5e4d4
Merge: b44e44232 44febaabd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:10 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 5929cfa5c713aa392110bbb62407f76caf53c3df
Author: jshipsey <jshipsey18@gmail.com>
Date: Thu Aug 6 20:47:27 2020 -0400
fixed in-hand arrow bug
commit b44e442325d828f1cd564d66908f89d09e80474b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 6 13:40:35 2020 +0200
Miscellaneous performance improvements.
commit be37acf287c1360d8085862526ac3365ffd1d768
Merge: 125d7fc6c c11876547
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 05:49:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 125d7fc6c4dcd8c8c5f27b8268a4d64f409f3644
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 04:55:31 2020 +0200
Abstract over simd vs. repr_c vectors.
Also some minor improvements to Event size.
commit d4d4956e9252e1241ce110b2aa85076c6b1e2a23
Merge: 5f3b7294a aced5f979
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:56:54 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 5f3b7294af1f8533edc2620b58863c248e2b07af
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:43:52 2020 +0200
Fix formatting issues I missed before.
commit a428a3ebba70dcab63dd0f8cd983120c90617271
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:41:51 2020 +0200
Fix clippy warnings, part 1.
There aer still a bunch of type too complex and
function takes too many arguments warnings that I'll fix later
(or ignore, since in the one case I did fix a function takes too
many arguments warning I think it made the code *less* readable).
commit ba54307540ed8a937ac08209730284fc653af85b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 30 13:22:42 2020 +0200
Fix light animations so they are removed when the light turns off.
commit 7e0f4bcbf0f4717145d8beac40d52e3acebbe2aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 21:10:20 2020 +0200
Fix crash in edge case for pixel art.
commit 56da06f7a351e2b949e9b014a90b974d511a0924
Merge: cf74d55f2 9f53a4a19
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:56:52 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:29:52 2020 +0200
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
The first concern was addressed by fixing the dimensions of the map
images drawn from the UI (so that we always use a square source
rectangle, rather than a rectangular one according to the dimensions of
the map). We also fixed the way rotation was done in the fragment
shader for north-facing sources to make it properly handle aspect ratio
(this was already done for north-facing targets). Together, these fix
rendering issues peculiar to rectangular maps.
The second and third concerns were jointly addressed by adding an
optional border color to every 2D image drawn by the UI. This turns
out not to waste extra space even though we hold a full f32 color
(to avoid an extra dependency on gfx's PackedColor), since voxel
images already take up more space than Optiion<[f32; 4]> requires.
This is then implemented automatically using the "border color"
wrapping method in the attached sampler.
Since this is implemented in graphics hardware, it only works (at
least naively) if the actual image bounds match the texture bounds.
Therefore, we altered the way the graphics cache stores images
with a border color to guarantee that they are always in their own
texture, whose size exactly matches their extent. Since the easiest
currently exposed way to set a border color is to do so for an
immutable texture, we went a bit further and added a new "immutable"
texture storage type used for these cases; currently, it is always
and automatically used only when there is a specified border color,
but in theory there's no reason we couldn't provide immutable-only
images that use the default wrapping mdoe (though clamp to border
is admittedly not a great default).
To fix the maps case specifically, we set the border color to a
translucent version of the ocean border color. This may need
tweaking going forward, which shouldn't be hard.
As part of this process, we had to modify graphics replacement to
make sure immutable images are *removed* when invalidated, rather
than just having a validity flag unset (this is normally done by
the UI to try to reuse allocations in place if images are updated
in benign ways, since the texture atlases used for Ui do not
support deallocation; currently this is only used for item images,
so there should be no overlap with immutable image replacement,
so this was purely precautionary).
Since we were already touching the relevant code, we also updated
the image dependency to a newer version that provides more ways
to avoid allocations, and made a few other changes that should
hopefully eliminate redundant most of the intermediate buffer
allocations we were performing for what should be zero-cost
conversions. This may slightly improve performance in some
cases.
commit ad18ce939940a8c697270f6e9b94db9942fd8295
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 13:21:09 2020 +0200
Fix continent scale hack.
commit 36b1cb074f5b195aebd7dbbc3da7f0246a1a18ec
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 12:11:40 2020 +0200
Enable loading different sized maps without a recompile.
We may want to tweak the effects of the continent_scale_hack.
commit 13b6d4d534cc4814b7cb3294ca41bbfea0a6b186
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 10:55:48 2020 +0200
Removing WORLD_SIZE, part 1.
Erased almost every instance of WORLD_SIZE and replaced it with a local
power of two, map_size_lg (which respects certain invariants; see
common/src/terrain/map.rs for more details about MapSizeLg). This also
means we can avoid a dependency on the world crate from client, as
desired.
Now that the rest of the code is not expecting a fixed WORLD_SIZE, the
next step is to arrange for maps to store their world size, and to use
that world size as a basis prior to loading the map (as well, probably,
as prior to configuring some of the noise functions).
commit 30b1d2c6428230a9eaa0d749cdcbbd6f1cbccd78
Merge: 7d56ba31b 1377b369f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:58 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 7d56ba31b445441461b28a07fc495d7d4f047c17
Merge: 2101113b4 598f14b25
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 1377b369f6db2258e910d467a5740f31789e3ded
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sun Jul 19 23:25:38 2020 +0200
more saturated pumpkins
commit ae8d50527f93bb0616c2ad46ce4dacb63bc37c6d
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sat Jul 18 20:29:56 2020 +0200
acacia models
commit 2101113b467e691de787392d7f20f1745f5637bd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 18 18:55:25 2020 +0200
Higher detail LOD.
commit add2cfae04b4385fa5590e11e2bd5229d9dee0aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 16 01:57:39 2020 +0200
Revert some irrelevant stuff.
commit 2e2ab3dc1eaa59a4aef7f8d34a53d8aae4c8553a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 15 13:30:49 2020 +0200
Fixing various things about shadows.
* Correcting optimal LISPSM parameter.
* Figure shadows are cast when they're not visible.
* Chunk shadows stay cast until you look away.
* Seamless cubemaps for point lights.
* Etc.
commit 6c31e6b56217274285b597af297036691ea5d897
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 19:50:26 2020 +0200
Fix shadow creation.
commit 6332cbe006115ae205597529cd8bbccd146c2cca
Merge: be438657c 930e0028b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:47:00 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit be438657c33d7b5bfb0a9582c3ed3fd366637323
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:28:08 2020 +0200
Tweaks to shadows.
Added shadow map resolution configuration, added seamless cubemaps,
documented all existing rendering options, and fixed a few Clippy
errors.
commit 23b4058906013c7d2a40c286e20e32c5fbd897ed
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 10:11:19 2020 +0200
Fix moon, use nonlinear noise for terrain.
Note that the latter has a bit of performance cost.
commit 7fbe5cbfbb9dc29607957b8e62f432a4deed193d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:23:02 2020 +0200
Address lies about max texture size.
commit bcfc62b5e13a1cdd83f57535fde4694720bebfd9
Merge: 75e3626a7 18a08e8fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:22:08 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 75e3626a785919f43fdcf2127c2b10e3e4df2f9f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:21:52 2020 +0200
OpenGL 3.3 minimum.
commit 18a08e8fe2739f02af99a5d2cb4e7c38c49e858b
Author: Monty Marz <m.marzouq@gmx.de>
Date: Tue Jul 7 23:57:52 2020 +0200
settings localization
commit 90c5d1ca3620092bc3ae10b2211489eb1cf6f5e8
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 21:11:48 2020 +0200
Lower near distance.
commit 0e66f02b25aaddaa2dfddbbc89cd67de54a9a7b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 20:09:01 2020 +0200
All sprites sway in the wind now.
commit db1401a6910bf42dcf502462c90038752ff5fbdb
Merge: 69e508d8c e8b4b29d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 19:34:17 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 69e508d8c94d8973033817ca86f357e466fc7c4d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 18:41:37 2020 +0200
Make it easy to switch to SIMD for math.
commit ffe0f5928c7a7e87d00cb5426b3b1d831d7e02fd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 21:21:12 2020 +0200
Fix some issues with underwater rendering.
commit bfda6da42f38fd02c31ee92c81ab785a3e50c2a0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 19:17:59 2020 +0200
Fix some minor display issues.
commit 0ed752e087968cf901301884aaeae698e32ef8a5
Merge: ccc6a06a8 518edcb85
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:14:21 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit ccc6a06a8d4504d6b9f7af7905a414d2ee06ab76
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:04:34 2020 +0200
Some minor changes.
commit 4e020246702889269efe1a191788992164c508d6
Merge: 50a64d927 e05c9267a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 16:17:40 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 50a64d927e6c4f4b0e4688e4cbfca694bc3f922a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 13:07:03 2020 +0200
Fix far plane.
commit 7dd06da34cae8f9ea3b6c889fe965181f3fd3949
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:25:35 2020 +0200
Add shadows.glsl.
commit 618a18c998778bf871b905a74657440fcc384c80
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:10:22 2020 +0200
Adding shadows, greedy meshing, and more.
commit eaea83fe6a5cb1cb0ba8beef888183c718258496
Merge: 267018495 2f89b863e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 22:47:07 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 2670184954a13e4a9e7a4e35ba79aac0c5fac2f7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 21:20:01 2020 +0200
Make civsim and sites deterministic.
For anything in worldgen where you use a HashMap, *please* think
carefully about which hasher you are going to use! This is
especially true if (for some reason) you are depending on hashmap
iteration order remaining stable for some aspect of worldgen.
commit f8376fd5dc72b4a9c2f51a6b4570d59c8b8e9343
Merge: 654f7e049 cdee191dd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 17:53:57 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 654f7e049258d9da27c09608bbe6a46ffa8787e5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed May 20 21:22:30 2020 +0200
Correct backface culling.
commit 560501df05ca725409b0f2e4eb31bdfdc15fd0c7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue May 19 17:22:06 2020 +0200
Greedy messhing for shadows.
commit a4d87e1875ca543436e6bbbeb20348facc5a52d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun May 17 05:59:00 2020 +0200
Shadow maps work for lantern.
commit 243d0837b8a3b08172c9a3c348d964d7ddc2a0a8
Merge: 04382dc28 71dd520cd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:53:13 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 04382dc28632b6c66e8821f6870c0daaa1c1901a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:22:17 2020 +0200
WIP: better graphics config, better LOD, shadow maps.
commit 22ddbad3eb32bfa70f0932176022208fe67ded81
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 18:54:09 2020 +0200
Minor shader fixes.
commit 746a10e8d01ac235f994b0cde78fa48998602a1f
Merge: 0f4a0e763 40ab94673
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 04:02:09 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0f4a0e763db3afbdc4fb0558611f38326ca87151
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 23:03:24 2020 +0200
Switch back to pop-in terrain.
commit dd74fa7e4a53667b38811d7aec58d7f6a68889bb
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 22:58:55 2020 +0200
LOD shading closer to voxel shading.
commit ef67bd58ba0bdaf622b078892d768263b6cba268
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 28 20:49:03 2020 +0200
Experimental underwater lighting.
commit 2c5ad9d07605e80d5fd5679dd3a5d70c605b86a9
Merge: 748279835 303967a6f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 22:35:24 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7482798354eda18c8207950080fc24d443a369de
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 21:59:55 2020 +0200
Replace discard in figure-frag.
commit d83b4ae69be4912f69bf7835f509c68a1c7770a4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:45:57 2020 +0200
Fix sprite lighting, HDR from focus_pos.
commit 0594238004f116274905fa0ed7c2b6c417ed1d29
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:14:10 2020 +0200
Proper HDR from point lights.
commit 48c93d2b41ce5743103d18e76cc228f5ac766492
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 14:01:43 2020 +0200
Brighter ambiance, darker LOD shadows.
commit e0452e895ccfa8a43f368cae3b8b8aedc24dad93
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 13:13:23 2020 +0200
More proper HDR.
commit 4c6da3ed16cfeebb455e40da5f557b4af9a499d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 00:13:10 2020 +0200
Trying LOD noise.
commit 682a3d74c85df5503ffe1fc1cc891bce789df1ad
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 23:11:08 2020 +0200
Fix LOD heights in towns.
commit cc39e5734e8b18f9077bf42e66337c1319dd6b6e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 21:01:23 2020 +0200
More LOD fixes.
commit 8116b21c2e51c836e77894e309ac273caf2917b3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:54:43 2020 +0200
I like this coloring.
commit bc2560ea90b36f4b46190005344232d993043ac3
Merge: 14effdd5d e690efe71
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:48:33 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 14effdd5db8747fcf3eb34f03b46b7792e92d1c5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:24:35 2020 +0200
Re-saturate.
commit 48a643955d4435b78179acba0beb4a979905cc31
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:23:57 2020 +0200
Various fixes.
commit f7b497a0c25f4ad4682c71dd1ed6f608052feb9b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 03:22:49 2020 +0200
Render figures again.
commit 44e4aad48deba8266b9f8bdfd3db096b381f5327
Merge: e6f0a5a98 9ec319a18
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 02:01:04 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit e6f0a5a981a82533ba188fff0a54ce98577bb152
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 24 16:12:20 2020 +0200
Add atmospheric scattering.
commit f2953087f691a8edbc001cb98ebf5059fc6f8ac0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 23 00:01:20 2020 +0200
Fix shadowing for specular reflections.
commit ddd4a67a9799b8d08c7dc0c2bec90621c2bed0e3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Apr 22 22:56:12 2020 +0200
HDR fixes.
commit 1015e60deef3c447381996277df7496707a63bd0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 21 18:25:19 2020 +0200
More lighting changes.
commit 80c264abd111fb237e57843efcb5c071d4f84613
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 13 00:29:59 2020 +0200
Lighting experiments.
commit 8414987e589dd5102bad89762a3adaccc0bfe957
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 9 02:38:40 2020 +0200
WIP -- lighting changes and soft shadows.
commit 9cd2b3fb0d6b49776c6dfe463e4169637250b11a
Merge: c7ea687eb 8b149ad11
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:29 2020 +0200
Merge branch 'sharp/new-lighting' into sharp/small-fixes
commit c7ea687ebbc5aace1b455f134a5bf49ce2c7434a
Merge: 476441531 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:02 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 8b149ad11ad4bb75018fcf9519baec27d1c95951
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:32:39 2020 +0200
Trying out a new lighting model.
commit b0ac9f36f755dd06f7c17c46150568064790864f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 07:56:11 2020 +0200
Use bicubic interpolation for terrain.
commit f6fc9307a121514b614bc50ef8eb055953e7da8a
Merge: 33140a295 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 05:01:41 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 4764415312aae6e9ac2d00e86e84577cb958f1ab
Merge: ed2d0111d 13388ee6a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 04:54:48 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 13388ee6a42943f3f79a9cb488346cef18e272fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 20:30:08 2020 +0200
Various fixes (to coloring and to soft shadows).
commit fbd084a94a067082a87cd6d28b82054709bc9265
Merge: 5a089863b 4fdf6896a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 18:50:38 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/map-colors
commit ed2d0111d994262ae836d84d1fe5a45e4de72a0b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 06:49:27 2020 +0200
Combining colors and LOD.
commit 88342640c6b835114d01c797b89fdede3b0a2108
Merge: 33140a295 5a089863b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:49:20 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 33140a2951b8212725f42c758b277aaec4d888f7
Merge: 4c65a5aed f34d4b379
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:36:21 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 5a089863beb01d4794bbe3580ada47b278715ea2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 03:17:49 2020 +0200
Making maps brighter.
This is probably not the right way to do it, but oh well!
commit 32b2c99109dd486aa922886081068f9c550c83f2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 02:46:36 2020 +0200
Horizon mapping and "layered" map generation.
Horizon mapping is a method of shadow mapping specific to height maps.
It can handle any angle between 0 and 90 degrees from the ground, as
long as know the horizontal direction in advance, by remembering only a
single angle (the "horizon angle" of the shadow map). More is explained
in common/src/msg/server.rs. We also remember the approximate height of
the largest occluder, to try to be able to generate soft shadows and
create a vertical position where the shadows can't go higher.
Additionally, map generation has been reworked. Instead of computing
everything from explicit samples, we pass in sampling functions that
return exactly what the map generator needs. This allows us to cleanly
separate the way we sample things like altitudes and colors from the map
generation process. We exploit this to generate maps *partially* on the
server (with colors and rivers, but not shading). We can then send the
partially completed map to the client, which can combine it with shadow
information to generate the final map. This is useful for two reasons:
first, it makes sure the client can apply shadow information by itself,
and second, it lets us pass the unshaded map for use with level of
detail functionality.
For similar reasons, river generation is split
out into its own layer, but for now we opt to still generate rivers on
the server (since the river wire format is more complicated to compress
and may require some extra work to make sure we have enough precision to
draw rivers well enough for LoD).
Finally, the mostly ad-hoc lighting we were performing has been (mostly)
replaced with explicit Phong reflection shading (including specular
highlights). Regularizing this seems useful and helps clarify the
"meaning" of the various light intensities, and helps us keep a more
physically plausible basis. However, its interaction with soft shadows
is still imperfect, and it's not yet clear to me what we need to do to
turn this into something useful for LoD.
commit f8926a5737ddc51f3d585c651a64c43677aae0f4
Merge: a1aee931e 875ae6ced
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Mar 13 13:32:42 2020 +0100
Merge remote-tracking branch 'origin/master' into sharp/map-colors
commit 4c65a5aed353b119aea65a2aaeb94549b67beb42
Author: Treeco <5021038-Treeco@users.noreply.gitlab.com>
Date: Mon Feb 24 16:48:05 2020 +0000
Made LOD setting slider exponential
commit 2fa7b2d20d7233dc8bfd64f9f7f54617575248f1
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 17:49:53 2020 +0000
Added mist to LoD
commit aab059a450b5f635777129ff82cc15b662965c3c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 15:14:06 2020 +0000
Added LoD slider
commit 779c36b538121c5ade3633ae5cb67bb14c8c3877
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:54:55 2020 +0000
Reduced cost of vertex pushing
commit 9fea150473906b166365b738ebcea07c697daf3d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:38:53 2020 +0000
Fixed maths, improved LoD resolution
commit 5481df38fea5bf183ff376a3337179cfaa5233dc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 11:22:50 2020 +0000
Dynamically relocate LoD vertices to enhance details
commit a3e36a50ababd615da7db1b26158c7906a5def01
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 18:13:51 2020 +0000
Simpler terrain spiral rendering
commit 255f450ae9ac8763db4bede075fb409161ed57cc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:53:17 2020 +0000
Better LoD precision
commit 3d027aebe812a5b8658a4eb8123dc9f61b3776d2
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:04:03 2020 +0000
Better falloff
commit be775c9484b457b2c0b1a494aec03392d0c70e76
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 15:30:45 2020 +0000
Applied good ideas from experimental branch
commit 58587b68545a23c5c04ab4574a4b94b3bc982246
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 16:15:13 2020 +0000
Minor fixes to LoD merging
commit 7b42aebd709c14df2db766aad61d9280ad24d84d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 15:04:44 2020 +0000
Capped LoD dragging
commit 8aafc559f87124e1ea5ca6e3ddc2aa0c242d793c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:54:37 2020 +0000
Better blending between LoD and terrain border
commit edd3455d5161792d87ddc8eadc0ecbad5532b284
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:40:19 2020 +0000
Fixed LoD z depth, added sea level offset
commit b9b06744620114dd5556e73f64fa93c145503a7c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:27:43 2020 +0000
Better LoD smoothing
commit a1aee931e790431560cd2d953ad61d9497072afd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Feb 21 14:52:17 2020 +0100
Adding shadows.
commit 2400786c13dd891c131ed86d48d05df516a8a778
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 13:48:40 2020 +0000
Use world map as LoD source
commit dbf650f504a4c25fbbc2096ac3616c736bf52d23
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Jan 20 00:48:14 2020 +0000
Better clouds at distance
commit 5e6f81b86cdb9730b9b056877b19257075fd5fa8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Jan 19 23:59:02 2020 +0000
sync
commit 745e7540ddb000cc645f612767b337c2ddc3f7c0
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 12:40:48 2019 +0000
Improved cloud falloff mist, faster noise sampling
commit f6a200d0cb866196ba57697466755f9e0c7ea5d8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 10:09:00 2019 +0000
Improved long-range depth precision, removed unnecessary LoD polygons
commit 63d1b2bb2292898d59fb4f4e502201103dfeb86f
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 20:57:46 2019 +0000
Working LoD shader
commit f13d98ee3e58f881e8b978861a67663b59ed91ec
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 11:03:40 2019 +0000
LoD first attempt (stack overflow issue)
2020-08-20 18:34:59 +00:00
|
|
|
|
pub fn get_map(&self, index: IndexRef) -> WorldMapMsg {
|
|
|
|
|
let mut map_config = MapConfig::orthographic(
|
|
|
|
|
self.map_size_lg(),
|
|
|
|
|
core::ops::RangeInclusive::new(CONFIG.sea_level, CONFIG.sea_level + self.max_height),
|
|
|
|
|
);
|
|
|
|
|
// Build a horizon map.
|
|
|
|
|
let scale_angle = |angle: Alt| {
|
|
|
|
|
(/* 0.0.max( */angle /* ) */
|
|
|
|
|
.atan()
|
|
|
|
|
* <Alt as FloatConst>::FRAC_2_PI()
|
|
|
|
|
* 255.0)
|
|
|
|
|
.floor() as u8
|
|
|
|
|
};
|
|
|
|
|
let scale_height = |height: Alt| {
|
|
|
|
|
(/* 0.0.max( */height/*)*/ as Alt * 255.0 / self.max_height as Alt).floor() as u8
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
let samples_data = {
|
|
|
|
|
let column_sample = ColumnGen::new(self);
|
|
|
|
|
(0..self.map_size_lg().chunks_len())
|
|
|
|
|
.into_par_iter()
|
|
|
|
|
.map_init(
|
|
|
|
|
|| Box::new(BlockGen::new(ColumnGen::new(self))),
|
|
|
|
|
|block_gen, posi| {
|
|
|
|
|
let wpos = uniform_idx_as_vec2(self.map_size_lg(), posi);
|
|
|
|
|
let mut sample = column_sample.get(
|
|
|
|
|
(uniform_idx_as_vec2(self.map_size_lg(), posi) * TerrainChunkSize::RECT_SIZE.map(|e| e as i32),
|
|
|
|
|
index)
|
|
|
|
|
)?;
|
|
|
|
|
let alt = sample.alt;
|
|
|
|
|
/* let z_cache = block_gen.get_z_cache(wpos);
|
|
|
|
|
sample.alt = alt.max(z_cache.get_z_limits(&mut block_gen).2); */
|
|
|
|
|
sample.alt = alt.max(BlockGen::get_cliff_height(
|
|
|
|
|
&block_gen.column_gen,
|
|
|
|
|
&mut block_gen.column_cache,
|
|
|
|
|
wpos.map(|e| e as f32),
|
|
|
|
|
&sample.close_cliffs,
|
|
|
|
|
sample.cliff_hill,
|
|
|
|
|
32.0,
|
|
|
|
|
index,
|
|
|
|
|
));
|
|
|
|
|
sample.basement += sample.alt - alt;
|
|
|
|
|
// sample.water_level = CONFIG.sea_level.max(sample.water_level);
|
|
|
|
|
|
|
|
|
|
Some(sample)
|
|
|
|
|
},
|
|
|
|
|
)
|
|
|
|
|
/* .map(|posi| {
|
|
|
|
|
let mut sample = column_sample.get(
|
|
|
|
|
uniform_idx_as_vec2(self.map_size_lg(), posi) * TerrainChunkSize::RECT_SIZE.map(|e| e as i32),
|
|
|
|
|
);
|
|
|
|
|
}) */
|
|
|
|
|
.collect::<Vec<_>>()
|
|
|
|
|
.into_boxed_slice()
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
let horizons = get_horizon_map(
|
|
|
|
|
self.map_size_lg(),
|
|
|
|
|
Aabr {
|
|
|
|
|
min: Vec2::zero(),
|
|
|
|
|
max: self.map_size_lg().chunks().map(|e| e as i32),
|
|
|
|
|
},
|
|
|
|
|
CONFIG.sea_level,
|
|
|
|
|
CONFIG.sea_level + self.max_height,
|
|
|
|
|
|posi| {
|
|
|
|
|
/* let chunk = &self.chunks[posi];
|
|
|
|
|
chunk.alt.max(chunk.water_alt) as Alt */
|
|
|
|
|
let sample = samples_data[posi].as_ref();
|
|
|
|
|
sample
|
|
|
|
|
.map(|s| s.alt.max(s.water_level))
|
|
|
|
|
.unwrap_or(CONFIG.sea_level)
|
|
|
|
|
},
|
|
|
|
|
|a| scale_angle(a.into()),
|
|
|
|
|
|h| scale_height(h.into()),
|
|
|
|
|
)
|
|
|
|
|
.unwrap();
|
|
|
|
|
|
|
|
|
|
let mut v = vec![0u32; self.map_size_lg().chunks_len()];
|
|
|
|
|
let mut alts = vec![0u32; self.map_size_lg().chunks_len()];
|
2020-01-13 07:10:38 +00:00
|
|
|
|
// TODO: Parallelize again.
|
(See sharp/lod-history) LOD, shadows, greedy meshing, new lighting, perf
---
Pretty much a Veloren fork at this point. Here's a high level overview of the changes (will be added to CHANGELOG just before merge).
At a high level this MR incorporates roughly two groups of changes.
The first group consists of new game features: more flexible map sizes, level of detail terrain, shadow maps, and a new lighting
engine. This is "feature work" that (mostly) only adds new things to Veloren, and mostly shouldn't affect old stuff.
The second big group of changes are those addressing the fallout from all the new features. These include performance fixes of
various sorts: the addition of multiple graphics options and optimization of the cheap ones to avoid work, switching all voxel
models to use some variant of greedy meshing, switching over much of our CPU-side vector math to exploit SIMD instructions
(coinciding with a fork of `vek`), and a rewrite of how the UI handles text rendering (coinciding with updates to our fork
of `conrod`). Making Veloren's hardcoded colors appear correct under the new lighting engine also required considerably
changes (TODO: Fill in this section when it's complete).
The second category of changes often heavily touches code owned by other people, including frequently modified code "owned" by a
handful of people, so I recommend that this code be reviewed particularly carefully.
---
At a high level (each will be described in more detail below):
- The world map has been refactored.
- The world size is no longer hardcoded (@zesterer).
- The map generation code was made generic to allow using it outside of the `world` crate (@zesterer).
- On world creation, we now compute *horizon maps* (@zesterer).
- The way we pass the world from the server to the client has been updated (@xMAC94x).
- Artifacts related to image rotation were fixed (@imbris).
- Multiflow rivers were enabled (@zesterer).
- In the process of making changes related to the world map, various incidental fixes and optimizations were required.
- The new *level of detail* feature was added (@zesterer wrote part of this and has checked out the rest).
- A new LOD terrain rendering step was added to the pipeline.
- The LOD terrain quality was made configurable via a graphics setting.
- Horizon maps were used to cast shadows from LOD chunks on both LOD and non-LOD terrain.
- A "voxelization" effect was incorporated into rendered LOD terrain to make it blend better into the world.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Veloren's lighting has been completely overhauled (@zesterer has already checked most of this out).
- A semi-accurate index of refraction was assigned to our materials.
- A new, more realistic, physically based approach to lighting was used using the *Ashikhmin Shirley* BRDF.
- We emulate *atmospheric scattering* using equations designed for measuring solar panel light exposure.
- We attempt to compute *realistic light attenuation* in water using its real material properties.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Point and directional lights now cast realistic shadows, using *shadow mapping.* (@imbris, @zesterer, @Treeco, @YuriMomo)
- Point light shadow maps were added to the rendering pipeline, using geometry shaders and *seamless cube maps*.
- Directional light shadows were added to the rendering pipeline, using LISPSM together with disabling *depth clamping*.
- "Shadow-only" chunks and NPCs were added to prevent shadows from models behind you from disappearing.
- In the process of making changes related to shadow maps, various incidental fixes and optimizations were required.
The addition of shadow maps, LOD terrain, and the new lighting all led to significant performance degradation, on top of other
changes happening in master. Therefore, a large number of performance improvements were also needed:
- The graphics options were made much more flexible and configurable, and shaders were optimize.
- New options were provided for how to render lights and shadows (@Pfauenauge, @zesterer).
- Graphic setting storage and configuration were overhauled to make adding new features easier (@Pfauenauge, @imbris).
- Shaders were rewritten to utilize GLSL's preprocessor to avoid overhead (@zesterer, @YuriMomo).
- In the process of making changes related to providing additional rendering options, various incidental fixes and optimizations were required.
- Voxel model creation was switched to use *greedy meshing.*
- A new voxel meshing method, greedy meshing, was added (@imbris).
- Uses of the older meshing methods were migrated to use greedy meshing (@imbris, @jshipsey, @Pfauenauge).
- New restrictions were added to terrain, figure, and sprites to future proof them for further optimizations (@jshipsey, @Pfauenauge, @zesterer).
- Most positions are now relative to either chunk or player position for better precision (@imbris, @zesterer, @scottc).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- Animation and terrain math were switched to use SIMD where possible.
- Fixes were made to vek to make its SIMD feature usable for us (@zesterer, @imbris).
- The interface and types used in bone animation were changed in various ways (@jshipsey, @Snowram, @Pfauenauge).
- Redundant code generation for body animation is now partly taken care of by a macro (@jshipsey, @Snowram, @Pfauenauge).
- Animation code was modified to to use vek's SIMD representation where possible (@jshipsey, @Snowram, @Pfauenauge).
- Terrain meshing code and shadow map math were also modified to use vek's SIMD representation (@imbris).
- SIMD instruction generation was enabled (@YuriMomo, @jshipsey, @Snowram, @imbris, @Angelonfira, @xMAC94x).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- The way we cache glyphs was completely refactored, fixed, and optimized.
- Our fork of `conrod` was optimized in various ways (@imbris).
- Our fork of `conrod` now exposes whether a widget was updated during the current frame (@imbris).
- Our use of the glyph cache was rewritten for correctness (@imbris).
- A *text cache* was introduced that lets us skip remeshing glyphs that have not changed (@imbris).
- Various changes were made to reduce pressure on the glyph cache, with more planned (@imbris, @Pfauenauge).
- In the process of making changes related to the glyph cache, various incidental fixes and optimizations were required.
- Colors were changed to keep Veloren's look consistent with master.
- Some older tree models were brought back (@Pfauenauge).
- TODO(@Sharp): All hardcoded colors were extracted and made hotloadable.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Hardcoded colors were fixed to conform to Veloren's style.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Color models were fixed to conform to Veloren's style.
A detailed description of the involved changes follows.
---
- The world size is no longer hardcoded. All functions dependent on world size now take a `WorldSizeLg`, which holds the base 2 logarithm of each actual world dimension and is guaranteed to maintain certain properties (outlined in `common/src/terrain/map.rs`). Additionally, many utility functions that utilize the world size were moved into `common` as well (mostly `common/src/terrain/mod.rs`). Finally, the world map format was updated in order to store its size explicitly, with a migration path from the old format that should work whenever the old formatted map was a square (practically always). See `world/src/sim/mod.rs` for these changes.
- The map generation code was made generic to allow using it outside of the `world` crate. The parts of the map generating code that do not need to query the world were moved over to `common/src/terrain/map.rs`, allowing them to be used from the client without creating a dependency on `world`. The rest of it was turned into helper functions in `world/src/sim/map.rs`, which can be passed as closures to the generic map generation code to complete its construction. This also means that colors are now passed in separately to the map generation function. See <https://veloren.net/devblog-78/> for more details.
- On world creation, we now compute *horizon maps*. See the function in `world/src/sim/util.rs`.
Given a height map and a plane intersecting that height map, our horizon maps allow us to encode enough information to reconstruct shadows for each point on the height map using only the *horizon angle* (the angle at which the sun starts to become visible). As Veloren's sun only covers one plane, this is sufficient for encoding sun shadows for LOD terrain, by encoding two angles per chunk (one for each 90 degrees the sun covers). We can also use this for the moon, if we want, since the moon follows the same path. Additionally, we store the *height* of the furthest occluder, to try to make the shadows volumetric; so this means 4 bytes in total for each chunk.
Support for horizon maps has been merged into the map functionality in common as well.
- The way we pass the world from the server to the client has been updated. Rather than passing the prerendered map, we instead pass three maps with values for each chunk; one with the color information, a second with altitude information, and a third with horizon map information. We then reconstruct the map on the client, together with some additional information we send from the server (like the sea level and maximum height). See `common/src/msg/server.rs` for a detailed description of the format of `WorldMapMsg`, and `server/src/libr.rs` and `client/src/lib.rs` for details of the map construction and parsing.
- Artifacts related to image rotation were fixed. See the commit message for commit SHA `cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e` for a detailed explanation. This involved changes to shaders, the addition of a new type of graphic (also reflected in the graphic cache) that allows specifying a border color (which automatically makes the associated texture immutable), and some related fixes. I reproduce the first two paragraphs of the MR description as well:
```
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
```
- Multiflow rivers were enabled.
This does not really need to be part of this MR, and would be easy to revert, but since it seemed to provide a nice improvement it's currently packaged with it.
We already computed multiple outflows from each chunk for erosion purposes long before this MR.
However, we never modified river rendering to be able to handle this case (just a single downhill river flow is complex enough!) so this was not exposed when deciding which chunks were rivers.
Now that
- In the process of making changes related to the world map, various incidental fixes and optimizations were required. Some examples of fixes include making sure terrain is never lowered to below sea level (to make the shadow maps report correct values), fixing map altitudes and colors to understand things like cliffs and "block level" coloring (that doesn'te xist on the column level), and fixing a crashbug when rendering images for the UI where source pixels are strongly rectangular. Some examples of related performance fixes include avoiding allocating a fresh vector for all the maps (i.e. copying it over to change the format from `[u32; n]` to `DynamicImage` and then copying again to convert to `RgbaImage`), and instead using the `gfx::memory::slice` function to accomplish the same thing. These sorts of changes are spread all arond the code.
This includes the additon of a new scene, `voxygen/src/scene/lod.rs`, a new pipeline `voxygen/src/render/pipeline/lod_terrain.rs`, and new shaders `assets/vxygen/shaders/lod-terrain-vert.glsl` and `assets/vxygen/shaders/lod-terrain-frag.glsl`, as well as associated changes to the renderer in `voxygen/src/render/renderer.rs`.
The main idea behind our initial approach to LOD was to take the world data we now get from the server (altitude, color, and horizon mapping).
- Some previously computed values were turned into shader uniforms for better prediction on weak processors. (@zesterer)
- Calls to power or trig functions were removed or replaced with multiplications, where possible.
- After some deliberation
- To properly handle sprite "waving" for nearby sprites,
We explicitly designed the greedy meshing system with figures and sprites in mind.
In both cases, we want to be able to *efficiently* pack many different models into the same texture, especially in cases where we know
we will either not be removing any of the grouped-together from the models from the texture, or will remove all of them at once (so
they can be packed into some specific subtexture).
For sprites, since we know every model in advance and never intend to deallocate them, we currently pack them all as efficiently as
possible into one giant tetxure atlas. However, in the future we might opt to pack them slightly less efficiently in exchange for
shrinking the sprite vertex size.
For figures, we pack all the textures for each *model* into the same atlas.
is a global texture atlas used for every sprite, and for figures which is why we have the ability to mesh multiple
models to the same texture area (using the simple texture atlas allocator) without requiring intermediate vector allocations.
This is accomplished by delaying the time when we actually write the color and light data to the texture until *after* all the
model vertices have been meshed; then, we can just allocate the whole color/light array at once, making the atlas we use an
exact fit. In computer science-y terms, we accomplish this delay by, after we perform the initial greedy meshing (without
texture information), not continuing to create the texture data, but instead constructing a *continuation*--that is, a function
that, when called, will execute the rest of the computation. We push this continuation (which in Rust terms is a `FnOnce` closure
that takes the `ColLightsInfo` that it is supposed to write to as context) onto a
onto a vector
resizing. To allow for suspended writes to texture data, Rust pointed out to me that the continuation that would eventually write the color and light data to the texture atlas (the one that is shared by all models sharing the same greedy mesher) would have to *own* whatever data it mshed. Because we often generate the model data to mesh as a temporary in `voxygen/src/load.rs`, the
- Matrix multiplications in the shader were reduced for figure data (@zesterer).
- Vertex "waves" for fluid data were removed.
- Terrain "bending" near edges was removed.
- Scaling was fixed to make sure empty space was not introduced in a space previously occupied by a block. It was also changed to take ownership of its voxel data,
rather than sharing it, to let it be used with meshing.
- Rust's nightly version was bumped in order to use the `array_map` function, which lets us reuse more code between the simple map and `FigureModelCache`.
- PositionedGlyph::standalone.
---
I tried to cite sources in many cases[^realtime],[^lloyd],[^lispsm],[^pbrt],[^greedy],[^tjunctions]
where I needed features from elsewhere but I am particularly grateful for the following resources,
esepcially where they have accompanying source code. I linked all of them that are accessible to the public (those that are not were
obtained through legal means).
[^realtime]: Eisemann, Elmar, Michael Schwarz, Ulf Assarsson, Michael Wimmer. Real-Time Shadows. A K Peters/CRC Press (T&F), 20160419.
[^lloyd]: Lloyd,B. 2007. [Logarithmic perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). PhD thesis, University of North Carolina.
[^lispsm]: Wimmer, M., Scherzer, D., and Purgathofer, W. 2004. [Light space perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). In Proceedings of Eurographics Symposium on Rendering 2004, pp. 143– 152.
[^pbrt]: Pharr, Matt, et al. [http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf](Physically Based Rendering: From Theory to Implementation). Third edition, Morgan Kaufmann Publishers/Elsevier, 2017.
[^greedy]: mikolalysenko. “Meshing in a Minecraft Game.” 0 FPS, 30 June 2012, <https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/>.
[^tjunctions]: blackflux. “Meshing in Voxel Engines – Part 1.” Blackflux.Com, 23 Feb. 2014, <https://blackflux.wordpress.com/2014/02/23/meshing-in-voxel-engines-part-1/>.
I am also especially grateful to Khronos, Wikiepdia, and stackoverflow for answering many of my specific questions while writing the MR.
---
Squashed commit of the following:
commit 300505e7305a2fdac722a808ee8538323f215f39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 18:46:25 2020 +0200
Fixing cargo doc and typo in CHANGELOG.
commit ec0aeb18e8499d7d84ef818331b4b65c3d76cea6
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 15:38:50 2020 +0200
Hopefully final commit for the LOD branch.
commit 5e8ea0b1eaac02903a02feb2eb038d195de4872f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 10:14:26 2020 +0200
Falling back to power as stopgap.
commit e44a1cbf46504ee9931a01bdc9033e145500d557
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 09:25:41 2020 +0200
Address imbris feedback.
Temporarily disables shiny water, lowers max VD.
These restrictions will be lifted soon after merging.
commit 561e25778a108ac3712f5ec2ce3a51234c4430d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 08:31:13 2020 +0200
Tweaking shaders a bit.
commit 7d19259078ce0dd7b3742ad7d0cb3fab3ece3fdc
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:59:43 2020 +0200
Fix view example as well.
commit 051cd4934e0fad2c0b15db4380a4189fa318679f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:29:06 2020 +0200
Fix meshing benchmark.
commit c95e07db3b4dcca285678985e65e31b927cb1c61
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 05:46:22 2020 +0200
Address MR feedback, fix scene clouds.
commit 1bfb816cabdb3ffc1e507a009c2d98696b4b573a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:39:36 2020 +0200
Incorporating Pfau's figure color changes.
New eyes and new humanoid colors.
commit 3f9b89a3ac7b3356b1dba0d1a8f6541357f81469
Merge: e2f5162e4 62c53963a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:29:41 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit e2f5162e4f96f4124aa43488f7245d341b3dcfd4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:28:38 2020 +0200
World colors are all hotloadable.
They live in assets/world/style/colors.ron.
Only a small handful of hardcoed colors remain in World; they are either
part of the map, or difficult to disentangle from the rest of the
computation. Comments are made where appropriate.
commit 62c53963abe1975009d34a8f9515a355bef24f31
Author: Marcel Märtens <marcel.cochem@googlemail.com>
Date: Wed Aug 19 15:59:00 2020 +0200
replace pretty_env_logger with tracing
commit 5b1625f99d9586fe80e2232f583ec5af9f953099
Merge: d71003acd 4942b5b39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:15:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit d71003acdabeff970b3928e97c26af6847b5b78e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:14:34 2020 +0200
Hotloading colors, part 1: colors in common.
Currently, this just entails humanoid colors. There are only three
colors not handled; the light emitter colors in
common/src/comp/inventory/item/tool.rs. These don't seem important
enough to me to warrant making hotloadable, at least not right now, but
if it's needed later we can always add them to the file.
commit 63b5e0e553eb2ea49276f192a6fc7dd65254270d
Merge: c32b337a4 6d2c4b9c1
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 13:05:37 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c32b337a46e10d9de473d178a94a3ccd61c39bb3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:52:04 2020 +0200
Fixing LOD grid, for real.
commit a166ae0360395387e09fb35a1f84210c2ce5ec24
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:28:05 2020 +0200
Addressing imbris's initial feedback.
Fixes two minor bugs: explosion particles were no longer spawning
randomly, and LOD grids were not perfectly even.
commit 4cbad004f44060994252dd3d38647a14a589712f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:27:58 2020 +0200
Bumping nightly per request.
commit 548680276aac77c25d43d16b5622f847d474dbef
Merge: acc098604 8f8b20c91
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:26:06 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit acc0986040589a3492f88a740bc3c3fc693b26d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:28:32 2020 +0200
Lower resolution due to lying drivers.
commit d3b878de2a52c358d2944a6bbd0555dad7fbdb10
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:15:38 2020 +0200
Fix issues msh encountered with Intel 4600.
commit 10245e0c1b0cb6fae10d86409435364edc6102ef
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 21:15:02 2020 +0200
Merge more models into one mesh than we did previously.
commit 3155c31e663c52ae5c3a53d5fb5665892a1a498a
Merge: 7204cc8a7 3c199280e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:35:22 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7204cc8a7a4f74a30306bd205d9834fee4bb944f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:34:43 2020 +0200
Fix not yet done NPC animations.
This forces them all to be the idle animation if not specified.
This fixes issues where you'd have giant NPCs in water.
commit bc83360f2a08918f19d417b5f772e1ff554dba08
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 19:36:37 2020 +0200
Try to fix some bugs:
- Z fighting with LOD terrain and water.
- Audio SFX not playing.
commit 1fd104aa603bf3781b6526a5cada46aeca3049dd
Merge: 862df3c99 7c2c392a3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 12:02:31 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 862df3c9976c4da9bd7cfd784f1a85973127968a
Merge: 0a4218ed9 75c1d4401
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 05:52:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0a4218ed9d541a2b34c133351bea38a99ddf4ea7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 22:27:14 2020 +0200
Fix particle depth.
commit f51dfdeb442d0dd5243dd2f344fa4be295bd0875
Merge: c6251a956 5e6dc0471
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:19:04 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit c6251a956ad376400dca5c23420cf8d213dc8fdf
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:15:46 2020 +0200
Cache figures more intelligently.
Cache figures for longer, and don't cache character states for the
player except where they actually affect the rendered model.
commit 0ed801d5404982c6fb63b1eaa4567d908b294c9d
Merge: c11b9bdf0 eea64f78f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 16:32:24 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c11b9bdf0a53bf9884d2f5a48fec9b01d582df1a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 11:47:15 2020 +0200
Remove unneeded Clippy annotation.
commit 16aa9ef40af56d69289d00aafb3deadfb8bd4f35
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 8 00:53:02 2020 +0200
Fix hotloading and Clippy.
commit 3dc973e0be5b758da1e9805eb764ad401374cd0c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 23:50:27 2020 +0200
Major speedups with SIMD.
commit fba64a7d93d5a96077ce87287bbce6ab9b7fbcae
Merge: 76429d00e d1e10b178
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:19 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 76429d00eea00d212fbd672a84ee91e75b19b938
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:10 2020 +0200
Add clippy.toml.
commit c79f512f84dbb83cb82b7954db68ff241dfd8e41
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 11:55:20 2020 +0200
Fix all clippy issues, clean up Rust code.
commit 6f90e010b3fbefb53b0d632e819931350015b6b8
Merge: 77a8c7c26 5929cfa5c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:30 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 77a8c7c267d3f44a1a62bd6b2274359973c5e4d4
Merge: b44e44232 44febaabd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:10 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 5929cfa5c713aa392110bbb62407f76caf53c3df
Author: jshipsey <jshipsey18@gmail.com>
Date: Thu Aug 6 20:47:27 2020 -0400
fixed in-hand arrow bug
commit b44e442325d828f1cd564d66908f89d09e80474b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 6 13:40:35 2020 +0200
Miscellaneous performance improvements.
commit be37acf287c1360d8085862526ac3365ffd1d768
Merge: 125d7fc6c c11876547
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 05:49:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 125d7fc6c4dcd8c8c5f27b8268a4d64f409f3644
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 04:55:31 2020 +0200
Abstract over simd vs. repr_c vectors.
Also some minor improvements to Event size.
commit d4d4956e9252e1241ce110b2aa85076c6b1e2a23
Merge: 5f3b7294a aced5f979
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:56:54 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 5f3b7294af1f8533edc2620b58863c248e2b07af
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:43:52 2020 +0200
Fix formatting issues I missed before.
commit a428a3ebba70dcab63dd0f8cd983120c90617271
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:41:51 2020 +0200
Fix clippy warnings, part 1.
There aer still a bunch of type too complex and
function takes too many arguments warnings that I'll fix later
(or ignore, since in the one case I did fix a function takes too
many arguments warning I think it made the code *less* readable).
commit ba54307540ed8a937ac08209730284fc653af85b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 30 13:22:42 2020 +0200
Fix light animations so they are removed when the light turns off.
commit 7e0f4bcbf0f4717145d8beac40d52e3acebbe2aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 21:10:20 2020 +0200
Fix crash in edge case for pixel art.
commit 56da06f7a351e2b949e9b014a90b974d511a0924
Merge: cf74d55f2 9f53a4a19
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:56:52 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:29:52 2020 +0200
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
The first concern was addressed by fixing the dimensions of the map
images drawn from the UI (so that we always use a square source
rectangle, rather than a rectangular one according to the dimensions of
the map). We also fixed the way rotation was done in the fragment
shader for north-facing sources to make it properly handle aspect ratio
(this was already done for north-facing targets). Together, these fix
rendering issues peculiar to rectangular maps.
The second and third concerns were jointly addressed by adding an
optional border color to every 2D image drawn by the UI. This turns
out not to waste extra space even though we hold a full f32 color
(to avoid an extra dependency on gfx's PackedColor), since voxel
images already take up more space than Optiion<[f32; 4]> requires.
This is then implemented automatically using the "border color"
wrapping method in the attached sampler.
Since this is implemented in graphics hardware, it only works (at
least naively) if the actual image bounds match the texture bounds.
Therefore, we altered the way the graphics cache stores images
with a border color to guarantee that they are always in their own
texture, whose size exactly matches their extent. Since the easiest
currently exposed way to set a border color is to do so for an
immutable texture, we went a bit further and added a new "immutable"
texture storage type used for these cases; currently, it is always
and automatically used only when there is a specified border color,
but in theory there's no reason we couldn't provide immutable-only
images that use the default wrapping mdoe (though clamp to border
is admittedly not a great default).
To fix the maps case specifically, we set the border color to a
translucent version of the ocean border color. This may need
tweaking going forward, which shouldn't be hard.
As part of this process, we had to modify graphics replacement to
make sure immutable images are *removed* when invalidated, rather
than just having a validity flag unset (this is normally done by
the UI to try to reuse allocations in place if images are updated
in benign ways, since the texture atlases used for Ui do not
support deallocation; currently this is only used for item images,
so there should be no overlap with immutable image replacement,
so this was purely precautionary).
Since we were already touching the relevant code, we also updated
the image dependency to a newer version that provides more ways
to avoid allocations, and made a few other changes that should
hopefully eliminate redundant most of the intermediate buffer
allocations we were performing for what should be zero-cost
conversions. This may slightly improve performance in some
cases.
commit ad18ce939940a8c697270f6e9b94db9942fd8295
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 13:21:09 2020 +0200
Fix continent scale hack.
commit 36b1cb074f5b195aebd7dbbc3da7f0246a1a18ec
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 12:11:40 2020 +0200
Enable loading different sized maps without a recompile.
We may want to tweak the effects of the continent_scale_hack.
commit 13b6d4d534cc4814b7cb3294ca41bbfea0a6b186
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 10:55:48 2020 +0200
Removing WORLD_SIZE, part 1.
Erased almost every instance of WORLD_SIZE and replaced it with a local
power of two, map_size_lg (which respects certain invariants; see
common/src/terrain/map.rs for more details about MapSizeLg). This also
means we can avoid a dependency on the world crate from client, as
desired.
Now that the rest of the code is not expecting a fixed WORLD_SIZE, the
next step is to arrange for maps to store their world size, and to use
that world size as a basis prior to loading the map (as well, probably,
as prior to configuring some of the noise functions).
commit 30b1d2c6428230a9eaa0d749cdcbbd6f1cbccd78
Merge: 7d56ba31b 1377b369f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:58 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 7d56ba31b445441461b28a07fc495d7d4f047c17
Merge: 2101113b4 598f14b25
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 1377b369f6db2258e910d467a5740f31789e3ded
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sun Jul 19 23:25:38 2020 +0200
more saturated pumpkins
commit ae8d50527f93bb0616c2ad46ce4dacb63bc37c6d
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sat Jul 18 20:29:56 2020 +0200
acacia models
commit 2101113b467e691de787392d7f20f1745f5637bd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 18 18:55:25 2020 +0200
Higher detail LOD.
commit add2cfae04b4385fa5590e11e2bd5229d9dee0aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 16 01:57:39 2020 +0200
Revert some irrelevant stuff.
commit 2e2ab3dc1eaa59a4aef7f8d34a53d8aae4c8553a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 15 13:30:49 2020 +0200
Fixing various things about shadows.
* Correcting optimal LISPSM parameter.
* Figure shadows are cast when they're not visible.
* Chunk shadows stay cast until you look away.
* Seamless cubemaps for point lights.
* Etc.
commit 6c31e6b56217274285b597af297036691ea5d897
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 19:50:26 2020 +0200
Fix shadow creation.
commit 6332cbe006115ae205597529cd8bbccd146c2cca
Merge: be438657c 930e0028b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:47:00 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit be438657c33d7b5bfb0a9582c3ed3fd366637323
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:28:08 2020 +0200
Tweaks to shadows.
Added shadow map resolution configuration, added seamless cubemaps,
documented all existing rendering options, and fixed a few Clippy
errors.
commit 23b4058906013c7d2a40c286e20e32c5fbd897ed
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 10:11:19 2020 +0200
Fix moon, use nonlinear noise for terrain.
Note that the latter has a bit of performance cost.
commit 7fbe5cbfbb9dc29607957b8e62f432a4deed193d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:23:02 2020 +0200
Address lies about max texture size.
commit bcfc62b5e13a1cdd83f57535fde4694720bebfd9
Merge: 75e3626a7 18a08e8fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:22:08 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 75e3626a785919f43fdcf2127c2b10e3e4df2f9f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:21:52 2020 +0200
OpenGL 3.3 minimum.
commit 18a08e8fe2739f02af99a5d2cb4e7c38c49e858b
Author: Monty Marz <m.marzouq@gmx.de>
Date: Tue Jul 7 23:57:52 2020 +0200
settings localization
commit 90c5d1ca3620092bc3ae10b2211489eb1cf6f5e8
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 21:11:48 2020 +0200
Lower near distance.
commit 0e66f02b25aaddaa2dfddbbc89cd67de54a9a7b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 20:09:01 2020 +0200
All sprites sway in the wind now.
commit db1401a6910bf42dcf502462c90038752ff5fbdb
Merge: 69e508d8c e8b4b29d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 19:34:17 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 69e508d8c94d8973033817ca86f357e466fc7c4d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 18:41:37 2020 +0200
Make it easy to switch to SIMD for math.
commit ffe0f5928c7a7e87d00cb5426b3b1d831d7e02fd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 21:21:12 2020 +0200
Fix some issues with underwater rendering.
commit bfda6da42f38fd02c31ee92c81ab785a3e50c2a0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 19:17:59 2020 +0200
Fix some minor display issues.
commit 0ed752e087968cf901301884aaeae698e32ef8a5
Merge: ccc6a06a8 518edcb85
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:14:21 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit ccc6a06a8d4504d6b9f7af7905a414d2ee06ab76
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:04:34 2020 +0200
Some minor changes.
commit 4e020246702889269efe1a191788992164c508d6
Merge: 50a64d927 e05c9267a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 16:17:40 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 50a64d927e6c4f4b0e4688e4cbfca694bc3f922a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 13:07:03 2020 +0200
Fix far plane.
commit 7dd06da34cae8f9ea3b6c889fe965181f3fd3949
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:25:35 2020 +0200
Add shadows.glsl.
commit 618a18c998778bf871b905a74657440fcc384c80
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:10:22 2020 +0200
Adding shadows, greedy meshing, and more.
commit eaea83fe6a5cb1cb0ba8beef888183c718258496
Merge: 267018495 2f89b863e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 22:47:07 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 2670184954a13e4a9e7a4e35ba79aac0c5fac2f7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 21:20:01 2020 +0200
Make civsim and sites deterministic.
For anything in worldgen where you use a HashMap, *please* think
carefully about which hasher you are going to use! This is
especially true if (for some reason) you are depending on hashmap
iteration order remaining stable for some aspect of worldgen.
commit f8376fd5dc72b4a9c2f51a6b4570d59c8b8e9343
Merge: 654f7e049 cdee191dd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 17:53:57 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 654f7e049258d9da27c09608bbe6a46ffa8787e5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed May 20 21:22:30 2020 +0200
Correct backface culling.
commit 560501df05ca725409b0f2e4eb31bdfdc15fd0c7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue May 19 17:22:06 2020 +0200
Greedy messhing for shadows.
commit a4d87e1875ca543436e6bbbeb20348facc5a52d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun May 17 05:59:00 2020 +0200
Shadow maps work for lantern.
commit 243d0837b8a3b08172c9a3c348d964d7ddc2a0a8
Merge: 04382dc28 71dd520cd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:53:13 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 04382dc28632b6c66e8821f6870c0daaa1c1901a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:22:17 2020 +0200
WIP: better graphics config, better LOD, shadow maps.
commit 22ddbad3eb32bfa70f0932176022208fe67ded81
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 18:54:09 2020 +0200
Minor shader fixes.
commit 746a10e8d01ac235f994b0cde78fa48998602a1f
Merge: 0f4a0e763 40ab94673
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 04:02:09 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0f4a0e763db3afbdc4fb0558611f38326ca87151
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 23:03:24 2020 +0200
Switch back to pop-in terrain.
commit dd74fa7e4a53667b38811d7aec58d7f6a68889bb
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 22:58:55 2020 +0200
LOD shading closer to voxel shading.
commit ef67bd58ba0bdaf622b078892d768263b6cba268
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 28 20:49:03 2020 +0200
Experimental underwater lighting.
commit 2c5ad9d07605e80d5fd5679dd3a5d70c605b86a9
Merge: 748279835 303967a6f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 22:35:24 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7482798354eda18c8207950080fc24d443a369de
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 21:59:55 2020 +0200
Replace discard in figure-frag.
commit d83b4ae69be4912f69bf7835f509c68a1c7770a4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:45:57 2020 +0200
Fix sprite lighting, HDR from focus_pos.
commit 0594238004f116274905fa0ed7c2b6c417ed1d29
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:14:10 2020 +0200
Proper HDR from point lights.
commit 48c93d2b41ce5743103d18e76cc228f5ac766492
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 14:01:43 2020 +0200
Brighter ambiance, darker LOD shadows.
commit e0452e895ccfa8a43f368cae3b8b8aedc24dad93
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 13:13:23 2020 +0200
More proper HDR.
commit 4c6da3ed16cfeebb455e40da5f557b4af9a499d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 00:13:10 2020 +0200
Trying LOD noise.
commit 682a3d74c85df5503ffe1fc1cc891bce789df1ad
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 23:11:08 2020 +0200
Fix LOD heights in towns.
commit cc39e5734e8b18f9077bf42e66337c1319dd6b6e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 21:01:23 2020 +0200
More LOD fixes.
commit 8116b21c2e51c836e77894e309ac273caf2917b3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:54:43 2020 +0200
I like this coloring.
commit bc2560ea90b36f4b46190005344232d993043ac3
Merge: 14effdd5d e690efe71
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:48:33 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 14effdd5db8747fcf3eb34f03b46b7792e92d1c5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:24:35 2020 +0200
Re-saturate.
commit 48a643955d4435b78179acba0beb4a979905cc31
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:23:57 2020 +0200
Various fixes.
commit f7b497a0c25f4ad4682c71dd1ed6f608052feb9b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 03:22:49 2020 +0200
Render figures again.
commit 44e4aad48deba8266b9f8bdfd3db096b381f5327
Merge: e6f0a5a98 9ec319a18
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 02:01:04 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit e6f0a5a981a82533ba188fff0a54ce98577bb152
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 24 16:12:20 2020 +0200
Add atmospheric scattering.
commit f2953087f691a8edbc001cb98ebf5059fc6f8ac0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 23 00:01:20 2020 +0200
Fix shadowing for specular reflections.
commit ddd4a67a9799b8d08c7dc0c2bec90621c2bed0e3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Apr 22 22:56:12 2020 +0200
HDR fixes.
commit 1015e60deef3c447381996277df7496707a63bd0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 21 18:25:19 2020 +0200
More lighting changes.
commit 80c264abd111fb237e57843efcb5c071d4f84613
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 13 00:29:59 2020 +0200
Lighting experiments.
commit 8414987e589dd5102bad89762a3adaccc0bfe957
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 9 02:38:40 2020 +0200
WIP -- lighting changes and soft shadows.
commit 9cd2b3fb0d6b49776c6dfe463e4169637250b11a
Merge: c7ea687eb 8b149ad11
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:29 2020 +0200
Merge branch 'sharp/new-lighting' into sharp/small-fixes
commit c7ea687ebbc5aace1b455f134a5bf49ce2c7434a
Merge: 476441531 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:02 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 8b149ad11ad4bb75018fcf9519baec27d1c95951
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:32:39 2020 +0200
Trying out a new lighting model.
commit b0ac9f36f755dd06f7c17c46150568064790864f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 07:56:11 2020 +0200
Use bicubic interpolation for terrain.
commit f6fc9307a121514b614bc50ef8eb055953e7da8a
Merge: 33140a295 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 05:01:41 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 4764415312aae6e9ac2d00e86e84577cb958f1ab
Merge: ed2d0111d 13388ee6a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 04:54:48 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 13388ee6a42943f3f79a9cb488346cef18e272fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 20:30:08 2020 +0200
Various fixes (to coloring and to soft shadows).
commit fbd084a94a067082a87cd6d28b82054709bc9265
Merge: 5a089863b 4fdf6896a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 18:50:38 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/map-colors
commit ed2d0111d994262ae836d84d1fe5a45e4de72a0b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 06:49:27 2020 +0200
Combining colors and LOD.
commit 88342640c6b835114d01c797b89fdede3b0a2108
Merge: 33140a295 5a089863b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:49:20 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 33140a2951b8212725f42c758b277aaec4d888f7
Merge: 4c65a5aed f34d4b379
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:36:21 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 5a089863beb01d4794bbe3580ada47b278715ea2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 03:17:49 2020 +0200
Making maps brighter.
This is probably not the right way to do it, but oh well!
commit 32b2c99109dd486aa922886081068f9c550c83f2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 02:46:36 2020 +0200
Horizon mapping and "layered" map generation.
Horizon mapping is a method of shadow mapping specific to height maps.
It can handle any angle between 0 and 90 degrees from the ground, as
long as know the horizontal direction in advance, by remembering only a
single angle (the "horizon angle" of the shadow map). More is explained
in common/src/msg/server.rs. We also remember the approximate height of
the largest occluder, to try to be able to generate soft shadows and
create a vertical position where the shadows can't go higher.
Additionally, map generation has been reworked. Instead of computing
everything from explicit samples, we pass in sampling functions that
return exactly what the map generator needs. This allows us to cleanly
separate the way we sample things like altitudes and colors from the map
generation process. We exploit this to generate maps *partially* on the
server (with colors and rivers, but not shading). We can then send the
partially completed map to the client, which can combine it with shadow
information to generate the final map. This is useful for two reasons:
first, it makes sure the client can apply shadow information by itself,
and second, it lets us pass the unshaded map for use with level of
detail functionality.
For similar reasons, river generation is split
out into its own layer, but for now we opt to still generate rivers on
the server (since the river wire format is more complicated to compress
and may require some extra work to make sure we have enough precision to
draw rivers well enough for LoD).
Finally, the mostly ad-hoc lighting we were performing has been (mostly)
replaced with explicit Phong reflection shading (including specular
highlights). Regularizing this seems useful and helps clarify the
"meaning" of the various light intensities, and helps us keep a more
physically plausible basis. However, its interaction with soft shadows
is still imperfect, and it's not yet clear to me what we need to do to
turn this into something useful for LoD.
commit f8926a5737ddc51f3d585c651a64c43677aae0f4
Merge: a1aee931e 875ae6ced
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Mar 13 13:32:42 2020 +0100
Merge remote-tracking branch 'origin/master' into sharp/map-colors
commit 4c65a5aed353b119aea65a2aaeb94549b67beb42
Author: Treeco <5021038-Treeco@users.noreply.gitlab.com>
Date: Mon Feb 24 16:48:05 2020 +0000
Made LOD setting slider exponential
commit 2fa7b2d20d7233dc8bfd64f9f7f54617575248f1
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 17:49:53 2020 +0000
Added mist to LoD
commit aab059a450b5f635777129ff82cc15b662965c3c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 15:14:06 2020 +0000
Added LoD slider
commit 779c36b538121c5ade3633ae5cb67bb14c8c3877
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:54:55 2020 +0000
Reduced cost of vertex pushing
commit 9fea150473906b166365b738ebcea07c697daf3d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:38:53 2020 +0000
Fixed maths, improved LoD resolution
commit 5481df38fea5bf183ff376a3337179cfaa5233dc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 11:22:50 2020 +0000
Dynamically relocate LoD vertices to enhance details
commit a3e36a50ababd615da7db1b26158c7906a5def01
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 18:13:51 2020 +0000
Simpler terrain spiral rendering
commit 255f450ae9ac8763db4bede075fb409161ed57cc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:53:17 2020 +0000
Better LoD precision
commit 3d027aebe812a5b8658a4eb8123dc9f61b3776d2
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:04:03 2020 +0000
Better falloff
commit be775c9484b457b2c0b1a494aec03392d0c70e76
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 15:30:45 2020 +0000
Applied good ideas from experimental branch
commit 58587b68545a23c5c04ab4574a4b94b3bc982246
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 16:15:13 2020 +0000
Minor fixes to LoD merging
commit 7b42aebd709c14df2db766aad61d9280ad24d84d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 15:04:44 2020 +0000
Capped LoD dragging
commit 8aafc559f87124e1ea5ca6e3ddc2aa0c242d793c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:54:37 2020 +0000
Better blending between LoD and terrain border
commit edd3455d5161792d87ddc8eadc0ecbad5532b284
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:40:19 2020 +0000
Fixed LoD z depth, added sea level offset
commit b9b06744620114dd5556e73f64fa93c145503a7c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:27:43 2020 +0000
Better LoD smoothing
commit a1aee931e790431560cd2d953ad61d9497072afd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Feb 21 14:52:17 2020 +0100
Adding shadows.
commit 2400786c13dd891c131ed86d48d05df516a8a778
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 13:48:40 2020 +0000
Use world map as LoD source
commit dbf650f504a4c25fbbc2096ac3616c736bf52d23
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Jan 20 00:48:14 2020 +0000
Better clouds at distance
commit 5e6f81b86cdb9730b9b056877b19257075fd5fa8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Jan 19 23:59:02 2020 +0000
sync
commit 745e7540ddb000cc645f612767b337c2ddc3f7c0
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 12:40:48 2019 +0000
Improved cloud falloff mist, faster noise sampling
commit f6a200d0cb866196ba57697466755f9e0c7ea5d8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 10:09:00 2019 +0000
Improved long-range depth precision, removed unnecessary LoD polygons
commit 63d1b2bb2292898d59fb4f4e502201103dfeb86f
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 20:57:46 2019 +0000
Working LoD shader
commit f13d98ee3e58f881e8b978861a67663b59ed91ec
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 11:03:40 2019 +0000
LoD first attempt (stack overflow issue)
2020-08-20 18:34:59 +00:00
|
|
|
|
map_config.is_shaded = false;
|
|
|
|
|
|
|
|
|
|
map_config.generate(
|
|
|
|
|
|pos| sample_pos(&map_config, self, index, Some(&samples_data), pos),
|
|
|
|
|
|pos| sample_wpos(&map_config, self, pos),
|
|
|
|
|
|pos, (r, g, b, _a)| {
|
|
|
|
|
// We currently ignore alpha and replace it with the height at pos, scaled to
|
|
|
|
|
// u8.
|
|
|
|
|
let alt = sample_wpos(
|
|
|
|
|
&map_config,
|
|
|
|
|
self,
|
|
|
|
|
pos.map(|e| e as i32) * TerrainChunkSize::RECT_SIZE.map(|e| e as i32),
|
|
|
|
|
);
|
|
|
|
|
let a = 0; //(alt.min(1.0).max(0.0) * 255.0) as u8;
|
|
|
|
|
|
|
|
|
|
// NOTE: Safe by invariants on map_size_lg.
|
|
|
|
|
let posi = (pos.y << self.map_size_lg().vec().x) | pos.x;
|
|
|
|
|
v[posi] = u32::from_le_bytes([r, g, b, a]);
|
|
|
|
|
alts[posi] = (((alt.min(1.0).max(0.0) * 8191.0) as u32) & 0x1FFF) << 3;
|
|
|
|
|
},
|
|
|
|
|
);
|
|
|
|
|
WorldMapMsg {
|
|
|
|
|
dimensions_lg: self.map_size_lg().vec(),
|
|
|
|
|
sea_level: CONFIG.sea_level,
|
|
|
|
|
max_height: self.max_height,
|
|
|
|
|
rgba: v,
|
|
|
|
|
alt: alts,
|
|
|
|
|
horizons,
|
2020-02-06 17:34:32 +00:00
|
|
|
|
}
|
2019-10-16 11:39:41 +00:00
|
|
|
|
}
|
|
|
|
|
|
2019-06-18 21:22:31 +00:00
|
|
|
|
/// Prepare the world for simulation
|
|
|
|
|
pub fn seed_elements(&mut self) {
|
|
|
|
|
let mut rng = self.rng.clone();
|
|
|
|
|
|
2019-07-03 19:58:09 +00:00
|
|
|
|
let cell_size = 16;
|
(See sharp/lod-history) LOD, shadows, greedy meshing, new lighting, perf
---
Pretty much a Veloren fork at this point. Here's a high level overview of the changes (will be added to CHANGELOG just before merge).
At a high level this MR incorporates roughly two groups of changes.
The first group consists of new game features: more flexible map sizes, level of detail terrain, shadow maps, and a new lighting
engine. This is "feature work" that (mostly) only adds new things to Veloren, and mostly shouldn't affect old stuff.
The second big group of changes are those addressing the fallout from all the new features. These include performance fixes of
various sorts: the addition of multiple graphics options and optimization of the cheap ones to avoid work, switching all voxel
models to use some variant of greedy meshing, switching over much of our CPU-side vector math to exploit SIMD instructions
(coinciding with a fork of `vek`), and a rewrite of how the UI handles text rendering (coinciding with updates to our fork
of `conrod`). Making Veloren's hardcoded colors appear correct under the new lighting engine also required considerably
changes (TODO: Fill in this section when it's complete).
The second category of changes often heavily touches code owned by other people, including frequently modified code "owned" by a
handful of people, so I recommend that this code be reviewed particularly carefully.
---
At a high level (each will be described in more detail below):
- The world map has been refactored.
- The world size is no longer hardcoded (@zesterer).
- The map generation code was made generic to allow using it outside of the `world` crate (@zesterer).
- On world creation, we now compute *horizon maps* (@zesterer).
- The way we pass the world from the server to the client has been updated (@xMAC94x).
- Artifacts related to image rotation were fixed (@imbris).
- Multiflow rivers were enabled (@zesterer).
- In the process of making changes related to the world map, various incidental fixes and optimizations were required.
- The new *level of detail* feature was added (@zesterer wrote part of this and has checked out the rest).
- A new LOD terrain rendering step was added to the pipeline.
- The LOD terrain quality was made configurable via a graphics setting.
- Horizon maps were used to cast shadows from LOD chunks on both LOD and non-LOD terrain.
- A "voxelization" effect was incorporated into rendered LOD terrain to make it blend better into the world.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Veloren's lighting has been completely overhauled (@zesterer has already checked most of this out).
- A semi-accurate index of refraction was assigned to our materials.
- A new, more realistic, physically based approach to lighting was used using the *Ashikhmin Shirley* BRDF.
- We emulate *atmospheric scattering* using equations designed for measuring solar panel light exposure.
- We attempt to compute *realistic light attenuation* in water using its real material properties.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Point and directional lights now cast realistic shadows, using *shadow mapping.* (@imbris, @zesterer, @Treeco, @YuriMomo)
- Point light shadow maps were added to the rendering pipeline, using geometry shaders and *seamless cube maps*.
- Directional light shadows were added to the rendering pipeline, using LISPSM together with disabling *depth clamping*.
- "Shadow-only" chunks and NPCs were added to prevent shadows from models behind you from disappearing.
- In the process of making changes related to shadow maps, various incidental fixes and optimizations were required.
The addition of shadow maps, LOD terrain, and the new lighting all led to significant performance degradation, on top of other
changes happening in master. Therefore, a large number of performance improvements were also needed:
- The graphics options were made much more flexible and configurable, and shaders were optimize.
- New options were provided for how to render lights and shadows (@Pfauenauge, @zesterer).
- Graphic setting storage and configuration were overhauled to make adding new features easier (@Pfauenauge, @imbris).
- Shaders were rewritten to utilize GLSL's preprocessor to avoid overhead (@zesterer, @YuriMomo).
- In the process of making changes related to providing additional rendering options, various incidental fixes and optimizations were required.
- Voxel model creation was switched to use *greedy meshing.*
- A new voxel meshing method, greedy meshing, was added (@imbris).
- Uses of the older meshing methods were migrated to use greedy meshing (@imbris, @jshipsey, @Pfauenauge).
- New restrictions were added to terrain, figure, and sprites to future proof them for further optimizations (@jshipsey, @Pfauenauge, @zesterer).
- Most positions are now relative to either chunk or player position for better precision (@imbris, @zesterer, @scottc).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- Animation and terrain math were switched to use SIMD where possible.
- Fixes were made to vek to make its SIMD feature usable for us (@zesterer, @imbris).
- The interface and types used in bone animation were changed in various ways (@jshipsey, @Snowram, @Pfauenauge).
- Redundant code generation for body animation is now partly taken care of by a macro (@jshipsey, @Snowram, @Pfauenauge).
- Animation code was modified to to use vek's SIMD representation where possible (@jshipsey, @Snowram, @Pfauenauge).
- Terrain meshing code and shadow map math were also modified to use vek's SIMD representation (@imbris).
- SIMD instruction generation was enabled (@YuriMomo, @jshipsey, @Snowram, @imbris, @Angelonfira, @xMAC94x).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- The way we cache glyphs was completely refactored, fixed, and optimized.
- Our fork of `conrod` was optimized in various ways (@imbris).
- Our fork of `conrod` now exposes whether a widget was updated during the current frame (@imbris).
- Our use of the glyph cache was rewritten for correctness (@imbris).
- A *text cache* was introduced that lets us skip remeshing glyphs that have not changed (@imbris).
- Various changes were made to reduce pressure on the glyph cache, with more planned (@imbris, @Pfauenauge).
- In the process of making changes related to the glyph cache, various incidental fixes and optimizations were required.
- Colors were changed to keep Veloren's look consistent with master.
- Some older tree models were brought back (@Pfauenauge).
- TODO(@Sharp): All hardcoded colors were extracted and made hotloadable.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Hardcoded colors were fixed to conform to Veloren's style.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Color models were fixed to conform to Veloren's style.
A detailed description of the involved changes follows.
---
- The world size is no longer hardcoded. All functions dependent on world size now take a `WorldSizeLg`, which holds the base 2 logarithm of each actual world dimension and is guaranteed to maintain certain properties (outlined in `common/src/terrain/map.rs`). Additionally, many utility functions that utilize the world size were moved into `common` as well (mostly `common/src/terrain/mod.rs`). Finally, the world map format was updated in order to store its size explicitly, with a migration path from the old format that should work whenever the old formatted map was a square (practically always). See `world/src/sim/mod.rs` for these changes.
- The map generation code was made generic to allow using it outside of the `world` crate. The parts of the map generating code that do not need to query the world were moved over to `common/src/terrain/map.rs`, allowing them to be used from the client without creating a dependency on `world`. The rest of it was turned into helper functions in `world/src/sim/map.rs`, which can be passed as closures to the generic map generation code to complete its construction. This also means that colors are now passed in separately to the map generation function. See <https://veloren.net/devblog-78/> for more details.
- On world creation, we now compute *horizon maps*. See the function in `world/src/sim/util.rs`.
Given a height map and a plane intersecting that height map, our horizon maps allow us to encode enough information to reconstruct shadows for each point on the height map using only the *horizon angle* (the angle at which the sun starts to become visible). As Veloren's sun only covers one plane, this is sufficient for encoding sun shadows for LOD terrain, by encoding two angles per chunk (one for each 90 degrees the sun covers). We can also use this for the moon, if we want, since the moon follows the same path. Additionally, we store the *height* of the furthest occluder, to try to make the shadows volumetric; so this means 4 bytes in total for each chunk.
Support for horizon maps has been merged into the map functionality in common as well.
- The way we pass the world from the server to the client has been updated. Rather than passing the prerendered map, we instead pass three maps with values for each chunk; one with the color information, a second with altitude information, and a third with horizon map information. We then reconstruct the map on the client, together with some additional information we send from the server (like the sea level and maximum height). See `common/src/msg/server.rs` for a detailed description of the format of `WorldMapMsg`, and `server/src/libr.rs` and `client/src/lib.rs` for details of the map construction and parsing.
- Artifacts related to image rotation were fixed. See the commit message for commit SHA `cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e` for a detailed explanation. This involved changes to shaders, the addition of a new type of graphic (also reflected in the graphic cache) that allows specifying a border color (which automatically makes the associated texture immutable), and some related fixes. I reproduce the first two paragraphs of the MR description as well:
```
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
```
- Multiflow rivers were enabled.
This does not really need to be part of this MR, and would be easy to revert, but since it seemed to provide a nice improvement it's currently packaged with it.
We already computed multiple outflows from each chunk for erosion purposes long before this MR.
However, we never modified river rendering to be able to handle this case (just a single downhill river flow is complex enough!) so this was not exposed when deciding which chunks were rivers.
Now that
- In the process of making changes related to the world map, various incidental fixes and optimizations were required. Some examples of fixes include making sure terrain is never lowered to below sea level (to make the shadow maps report correct values), fixing map altitudes and colors to understand things like cliffs and "block level" coloring (that doesn'te xist on the column level), and fixing a crashbug when rendering images for the UI where source pixels are strongly rectangular. Some examples of related performance fixes include avoiding allocating a fresh vector for all the maps (i.e. copying it over to change the format from `[u32; n]` to `DynamicImage` and then copying again to convert to `RgbaImage`), and instead using the `gfx::memory::slice` function to accomplish the same thing. These sorts of changes are spread all arond the code.
This includes the additon of a new scene, `voxygen/src/scene/lod.rs`, a new pipeline `voxygen/src/render/pipeline/lod_terrain.rs`, and new shaders `assets/vxygen/shaders/lod-terrain-vert.glsl` and `assets/vxygen/shaders/lod-terrain-frag.glsl`, as well as associated changes to the renderer in `voxygen/src/render/renderer.rs`.
The main idea behind our initial approach to LOD was to take the world data we now get from the server (altitude, color, and horizon mapping).
- Some previously computed values were turned into shader uniforms for better prediction on weak processors. (@zesterer)
- Calls to power or trig functions were removed or replaced with multiplications, where possible.
- After some deliberation
- To properly handle sprite "waving" for nearby sprites,
We explicitly designed the greedy meshing system with figures and sprites in mind.
In both cases, we want to be able to *efficiently* pack many different models into the same texture, especially in cases where we know
we will either not be removing any of the grouped-together from the models from the texture, or will remove all of them at once (so
they can be packed into some specific subtexture).
For sprites, since we know every model in advance and never intend to deallocate them, we currently pack them all as efficiently as
possible into one giant tetxure atlas. However, in the future we might opt to pack them slightly less efficiently in exchange for
shrinking the sprite vertex size.
For figures, we pack all the textures for each *model* into the same atlas.
is a global texture atlas used for every sprite, and for figures which is why we have the ability to mesh multiple
models to the same texture area (using the simple texture atlas allocator) without requiring intermediate vector allocations.
This is accomplished by delaying the time when we actually write the color and light data to the texture until *after* all the
model vertices have been meshed; then, we can just allocate the whole color/light array at once, making the atlas we use an
exact fit. In computer science-y terms, we accomplish this delay by, after we perform the initial greedy meshing (without
texture information), not continuing to create the texture data, but instead constructing a *continuation*--that is, a function
that, when called, will execute the rest of the computation. We push this continuation (which in Rust terms is a `FnOnce` closure
that takes the `ColLightsInfo` that it is supposed to write to as context) onto a
onto a vector
resizing. To allow for suspended writes to texture data, Rust pointed out to me that the continuation that would eventually write the color and light data to the texture atlas (the one that is shared by all models sharing the same greedy mesher) would have to *own* whatever data it mshed. Because we often generate the model data to mesh as a temporary in `voxygen/src/load.rs`, the
- Matrix multiplications in the shader were reduced for figure data (@zesterer).
- Vertex "waves" for fluid data were removed.
- Terrain "bending" near edges was removed.
- Scaling was fixed to make sure empty space was not introduced in a space previously occupied by a block. It was also changed to take ownership of its voxel data,
rather than sharing it, to let it be used with meshing.
- Rust's nightly version was bumped in order to use the `array_map` function, which lets us reuse more code between the simple map and `FigureModelCache`.
- PositionedGlyph::standalone.
---
I tried to cite sources in many cases[^realtime],[^lloyd],[^lispsm],[^pbrt],[^greedy],[^tjunctions]
where I needed features from elsewhere but I am particularly grateful for the following resources,
esepcially where they have accompanying source code. I linked all of them that are accessible to the public (those that are not were
obtained through legal means).
[^realtime]: Eisemann, Elmar, Michael Schwarz, Ulf Assarsson, Michael Wimmer. Real-Time Shadows. A K Peters/CRC Press (T&F), 20160419.
[^lloyd]: Lloyd,B. 2007. [Logarithmic perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). PhD thesis, University of North Carolina.
[^lispsm]: Wimmer, M., Scherzer, D., and Purgathofer, W. 2004. [Light space perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). In Proceedings of Eurographics Symposium on Rendering 2004, pp. 143– 152.
[^pbrt]: Pharr, Matt, et al. [http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf](Physically Based Rendering: From Theory to Implementation). Third edition, Morgan Kaufmann Publishers/Elsevier, 2017.
[^greedy]: mikolalysenko. “Meshing in a Minecraft Game.” 0 FPS, 30 June 2012, <https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/>.
[^tjunctions]: blackflux. “Meshing in Voxel Engines – Part 1.” Blackflux.Com, 23 Feb. 2014, <https://blackflux.wordpress.com/2014/02/23/meshing-in-voxel-engines-part-1/>.
I am also especially grateful to Khronos, Wikiepdia, and stackoverflow for answering many of my specific questions while writing the MR.
---
Squashed commit of the following:
commit 300505e7305a2fdac722a808ee8538323f215f39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 18:46:25 2020 +0200
Fixing cargo doc and typo in CHANGELOG.
commit ec0aeb18e8499d7d84ef818331b4b65c3d76cea6
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 15:38:50 2020 +0200
Hopefully final commit for the LOD branch.
commit 5e8ea0b1eaac02903a02feb2eb038d195de4872f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 10:14:26 2020 +0200
Falling back to power as stopgap.
commit e44a1cbf46504ee9931a01bdc9033e145500d557
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 09:25:41 2020 +0200
Address imbris feedback.
Temporarily disables shiny water, lowers max VD.
These restrictions will be lifted soon after merging.
commit 561e25778a108ac3712f5ec2ce3a51234c4430d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 08:31:13 2020 +0200
Tweaking shaders a bit.
commit 7d19259078ce0dd7b3742ad7d0cb3fab3ece3fdc
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:59:43 2020 +0200
Fix view example as well.
commit 051cd4934e0fad2c0b15db4380a4189fa318679f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:29:06 2020 +0200
Fix meshing benchmark.
commit c95e07db3b4dcca285678985e65e31b927cb1c61
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 05:46:22 2020 +0200
Address MR feedback, fix scene clouds.
commit 1bfb816cabdb3ffc1e507a009c2d98696b4b573a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:39:36 2020 +0200
Incorporating Pfau's figure color changes.
New eyes and new humanoid colors.
commit 3f9b89a3ac7b3356b1dba0d1a8f6541357f81469
Merge: e2f5162e4 62c53963a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:29:41 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit e2f5162e4f96f4124aa43488f7245d341b3dcfd4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:28:38 2020 +0200
World colors are all hotloadable.
They live in assets/world/style/colors.ron.
Only a small handful of hardcoed colors remain in World; they are either
part of the map, or difficult to disentangle from the rest of the
computation. Comments are made where appropriate.
commit 62c53963abe1975009d34a8f9515a355bef24f31
Author: Marcel Märtens <marcel.cochem@googlemail.com>
Date: Wed Aug 19 15:59:00 2020 +0200
replace pretty_env_logger with tracing
commit 5b1625f99d9586fe80e2232f583ec5af9f953099
Merge: d71003acd 4942b5b39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:15:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit d71003acdabeff970b3928e97c26af6847b5b78e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:14:34 2020 +0200
Hotloading colors, part 1: colors in common.
Currently, this just entails humanoid colors. There are only three
colors not handled; the light emitter colors in
common/src/comp/inventory/item/tool.rs. These don't seem important
enough to me to warrant making hotloadable, at least not right now, but
if it's needed later we can always add them to the file.
commit 63b5e0e553eb2ea49276f192a6fc7dd65254270d
Merge: c32b337a4 6d2c4b9c1
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 13:05:37 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c32b337a46e10d9de473d178a94a3ccd61c39bb3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:52:04 2020 +0200
Fixing LOD grid, for real.
commit a166ae0360395387e09fb35a1f84210c2ce5ec24
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:28:05 2020 +0200
Addressing imbris's initial feedback.
Fixes two minor bugs: explosion particles were no longer spawning
randomly, and LOD grids were not perfectly even.
commit 4cbad004f44060994252dd3d38647a14a589712f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:27:58 2020 +0200
Bumping nightly per request.
commit 548680276aac77c25d43d16b5622f847d474dbef
Merge: acc098604 8f8b20c91
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:26:06 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit acc0986040589a3492f88a740bc3c3fc693b26d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:28:32 2020 +0200
Lower resolution due to lying drivers.
commit d3b878de2a52c358d2944a6bbd0555dad7fbdb10
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:15:38 2020 +0200
Fix issues msh encountered with Intel 4600.
commit 10245e0c1b0cb6fae10d86409435364edc6102ef
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 21:15:02 2020 +0200
Merge more models into one mesh than we did previously.
commit 3155c31e663c52ae5c3a53d5fb5665892a1a498a
Merge: 7204cc8a7 3c199280e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:35:22 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7204cc8a7a4f74a30306bd205d9834fee4bb944f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:34:43 2020 +0200
Fix not yet done NPC animations.
This forces them all to be the idle animation if not specified.
This fixes issues where you'd have giant NPCs in water.
commit bc83360f2a08918f19d417b5f772e1ff554dba08
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 19:36:37 2020 +0200
Try to fix some bugs:
- Z fighting with LOD terrain and water.
- Audio SFX not playing.
commit 1fd104aa603bf3781b6526a5cada46aeca3049dd
Merge: 862df3c99 7c2c392a3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 12:02:31 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 862df3c9976c4da9bd7cfd784f1a85973127968a
Merge: 0a4218ed9 75c1d4401
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 05:52:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0a4218ed9d541a2b34c133351bea38a99ddf4ea7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 22:27:14 2020 +0200
Fix particle depth.
commit f51dfdeb442d0dd5243dd2f344fa4be295bd0875
Merge: c6251a956 5e6dc0471
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:19:04 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit c6251a956ad376400dca5c23420cf8d213dc8fdf
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:15:46 2020 +0200
Cache figures more intelligently.
Cache figures for longer, and don't cache character states for the
player except where they actually affect the rendered model.
commit 0ed801d5404982c6fb63b1eaa4567d908b294c9d
Merge: c11b9bdf0 eea64f78f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 16:32:24 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c11b9bdf0a53bf9884d2f5a48fec9b01d582df1a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 11:47:15 2020 +0200
Remove unneeded Clippy annotation.
commit 16aa9ef40af56d69289d00aafb3deadfb8bd4f35
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 8 00:53:02 2020 +0200
Fix hotloading and Clippy.
commit 3dc973e0be5b758da1e9805eb764ad401374cd0c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 23:50:27 2020 +0200
Major speedups with SIMD.
commit fba64a7d93d5a96077ce87287bbce6ab9b7fbcae
Merge: 76429d00e d1e10b178
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:19 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 76429d00eea00d212fbd672a84ee91e75b19b938
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:10 2020 +0200
Add clippy.toml.
commit c79f512f84dbb83cb82b7954db68ff241dfd8e41
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 11:55:20 2020 +0200
Fix all clippy issues, clean up Rust code.
commit 6f90e010b3fbefb53b0d632e819931350015b6b8
Merge: 77a8c7c26 5929cfa5c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:30 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 77a8c7c267d3f44a1a62bd6b2274359973c5e4d4
Merge: b44e44232 44febaabd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:10 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 5929cfa5c713aa392110bbb62407f76caf53c3df
Author: jshipsey <jshipsey18@gmail.com>
Date: Thu Aug 6 20:47:27 2020 -0400
fixed in-hand arrow bug
commit b44e442325d828f1cd564d66908f89d09e80474b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 6 13:40:35 2020 +0200
Miscellaneous performance improvements.
commit be37acf287c1360d8085862526ac3365ffd1d768
Merge: 125d7fc6c c11876547
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 05:49:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 125d7fc6c4dcd8c8c5f27b8268a4d64f409f3644
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 04:55:31 2020 +0200
Abstract over simd vs. repr_c vectors.
Also some minor improvements to Event size.
commit d4d4956e9252e1241ce110b2aa85076c6b1e2a23
Merge: 5f3b7294a aced5f979
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:56:54 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 5f3b7294af1f8533edc2620b58863c248e2b07af
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:43:52 2020 +0200
Fix formatting issues I missed before.
commit a428a3ebba70dcab63dd0f8cd983120c90617271
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:41:51 2020 +0200
Fix clippy warnings, part 1.
There aer still a bunch of type too complex and
function takes too many arguments warnings that I'll fix later
(or ignore, since in the one case I did fix a function takes too
many arguments warning I think it made the code *less* readable).
commit ba54307540ed8a937ac08209730284fc653af85b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 30 13:22:42 2020 +0200
Fix light animations so they are removed when the light turns off.
commit 7e0f4bcbf0f4717145d8beac40d52e3acebbe2aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 21:10:20 2020 +0200
Fix crash in edge case for pixel art.
commit 56da06f7a351e2b949e9b014a90b974d511a0924
Merge: cf74d55f2 9f53a4a19
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:56:52 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:29:52 2020 +0200
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
The first concern was addressed by fixing the dimensions of the map
images drawn from the UI (so that we always use a square source
rectangle, rather than a rectangular one according to the dimensions of
the map). We also fixed the way rotation was done in the fragment
shader for north-facing sources to make it properly handle aspect ratio
(this was already done for north-facing targets). Together, these fix
rendering issues peculiar to rectangular maps.
The second and third concerns were jointly addressed by adding an
optional border color to every 2D image drawn by the UI. This turns
out not to waste extra space even though we hold a full f32 color
(to avoid an extra dependency on gfx's PackedColor), since voxel
images already take up more space than Optiion<[f32; 4]> requires.
This is then implemented automatically using the "border color"
wrapping method in the attached sampler.
Since this is implemented in graphics hardware, it only works (at
least naively) if the actual image bounds match the texture bounds.
Therefore, we altered the way the graphics cache stores images
with a border color to guarantee that they are always in their own
texture, whose size exactly matches their extent. Since the easiest
currently exposed way to set a border color is to do so for an
immutable texture, we went a bit further and added a new "immutable"
texture storage type used for these cases; currently, it is always
and automatically used only when there is a specified border color,
but in theory there's no reason we couldn't provide immutable-only
images that use the default wrapping mdoe (though clamp to border
is admittedly not a great default).
To fix the maps case specifically, we set the border color to a
translucent version of the ocean border color. This may need
tweaking going forward, which shouldn't be hard.
As part of this process, we had to modify graphics replacement to
make sure immutable images are *removed* when invalidated, rather
than just having a validity flag unset (this is normally done by
the UI to try to reuse allocations in place if images are updated
in benign ways, since the texture atlases used for Ui do not
support deallocation; currently this is only used for item images,
so there should be no overlap with immutable image replacement,
so this was purely precautionary).
Since we were already touching the relevant code, we also updated
the image dependency to a newer version that provides more ways
to avoid allocations, and made a few other changes that should
hopefully eliminate redundant most of the intermediate buffer
allocations we were performing for what should be zero-cost
conversions. This may slightly improve performance in some
cases.
commit ad18ce939940a8c697270f6e9b94db9942fd8295
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 13:21:09 2020 +0200
Fix continent scale hack.
commit 36b1cb074f5b195aebd7dbbc3da7f0246a1a18ec
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 12:11:40 2020 +0200
Enable loading different sized maps without a recompile.
We may want to tweak the effects of the continent_scale_hack.
commit 13b6d4d534cc4814b7cb3294ca41bbfea0a6b186
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 10:55:48 2020 +0200
Removing WORLD_SIZE, part 1.
Erased almost every instance of WORLD_SIZE and replaced it with a local
power of two, map_size_lg (which respects certain invariants; see
common/src/terrain/map.rs for more details about MapSizeLg). This also
means we can avoid a dependency on the world crate from client, as
desired.
Now that the rest of the code is not expecting a fixed WORLD_SIZE, the
next step is to arrange for maps to store their world size, and to use
that world size as a basis prior to loading the map (as well, probably,
as prior to configuring some of the noise functions).
commit 30b1d2c6428230a9eaa0d749cdcbbd6f1cbccd78
Merge: 7d56ba31b 1377b369f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:58 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 7d56ba31b445441461b28a07fc495d7d4f047c17
Merge: 2101113b4 598f14b25
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 1377b369f6db2258e910d467a5740f31789e3ded
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sun Jul 19 23:25:38 2020 +0200
more saturated pumpkins
commit ae8d50527f93bb0616c2ad46ce4dacb63bc37c6d
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sat Jul 18 20:29:56 2020 +0200
acacia models
commit 2101113b467e691de787392d7f20f1745f5637bd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 18 18:55:25 2020 +0200
Higher detail LOD.
commit add2cfae04b4385fa5590e11e2bd5229d9dee0aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 16 01:57:39 2020 +0200
Revert some irrelevant stuff.
commit 2e2ab3dc1eaa59a4aef7f8d34a53d8aae4c8553a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 15 13:30:49 2020 +0200
Fixing various things about shadows.
* Correcting optimal LISPSM parameter.
* Figure shadows are cast when they're not visible.
* Chunk shadows stay cast until you look away.
* Seamless cubemaps for point lights.
* Etc.
commit 6c31e6b56217274285b597af297036691ea5d897
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 19:50:26 2020 +0200
Fix shadow creation.
commit 6332cbe006115ae205597529cd8bbccd146c2cca
Merge: be438657c 930e0028b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:47:00 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit be438657c33d7b5bfb0a9582c3ed3fd366637323
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:28:08 2020 +0200
Tweaks to shadows.
Added shadow map resolution configuration, added seamless cubemaps,
documented all existing rendering options, and fixed a few Clippy
errors.
commit 23b4058906013c7d2a40c286e20e32c5fbd897ed
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 10:11:19 2020 +0200
Fix moon, use nonlinear noise for terrain.
Note that the latter has a bit of performance cost.
commit 7fbe5cbfbb9dc29607957b8e62f432a4deed193d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:23:02 2020 +0200
Address lies about max texture size.
commit bcfc62b5e13a1cdd83f57535fde4694720bebfd9
Merge: 75e3626a7 18a08e8fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:22:08 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 75e3626a785919f43fdcf2127c2b10e3e4df2f9f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:21:52 2020 +0200
OpenGL 3.3 minimum.
commit 18a08e8fe2739f02af99a5d2cb4e7c38c49e858b
Author: Monty Marz <m.marzouq@gmx.de>
Date: Tue Jul 7 23:57:52 2020 +0200
settings localization
commit 90c5d1ca3620092bc3ae10b2211489eb1cf6f5e8
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 21:11:48 2020 +0200
Lower near distance.
commit 0e66f02b25aaddaa2dfddbbc89cd67de54a9a7b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 20:09:01 2020 +0200
All sprites sway in the wind now.
commit db1401a6910bf42dcf502462c90038752ff5fbdb
Merge: 69e508d8c e8b4b29d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 19:34:17 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 69e508d8c94d8973033817ca86f357e466fc7c4d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 18:41:37 2020 +0200
Make it easy to switch to SIMD for math.
commit ffe0f5928c7a7e87d00cb5426b3b1d831d7e02fd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 21:21:12 2020 +0200
Fix some issues with underwater rendering.
commit bfda6da42f38fd02c31ee92c81ab785a3e50c2a0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 19:17:59 2020 +0200
Fix some minor display issues.
commit 0ed752e087968cf901301884aaeae698e32ef8a5
Merge: ccc6a06a8 518edcb85
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:14:21 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit ccc6a06a8d4504d6b9f7af7905a414d2ee06ab76
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:04:34 2020 +0200
Some minor changes.
commit 4e020246702889269efe1a191788992164c508d6
Merge: 50a64d927 e05c9267a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 16:17:40 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 50a64d927e6c4f4b0e4688e4cbfca694bc3f922a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 13:07:03 2020 +0200
Fix far plane.
commit 7dd06da34cae8f9ea3b6c889fe965181f3fd3949
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:25:35 2020 +0200
Add shadows.glsl.
commit 618a18c998778bf871b905a74657440fcc384c80
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:10:22 2020 +0200
Adding shadows, greedy meshing, and more.
commit eaea83fe6a5cb1cb0ba8beef888183c718258496
Merge: 267018495 2f89b863e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 22:47:07 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 2670184954a13e4a9e7a4e35ba79aac0c5fac2f7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 21:20:01 2020 +0200
Make civsim and sites deterministic.
For anything in worldgen where you use a HashMap, *please* think
carefully about which hasher you are going to use! This is
especially true if (for some reason) you are depending on hashmap
iteration order remaining stable for some aspect of worldgen.
commit f8376fd5dc72b4a9c2f51a6b4570d59c8b8e9343
Merge: 654f7e049 cdee191dd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 17:53:57 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 654f7e049258d9da27c09608bbe6a46ffa8787e5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed May 20 21:22:30 2020 +0200
Correct backface culling.
commit 560501df05ca725409b0f2e4eb31bdfdc15fd0c7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue May 19 17:22:06 2020 +0200
Greedy messhing for shadows.
commit a4d87e1875ca543436e6bbbeb20348facc5a52d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun May 17 05:59:00 2020 +0200
Shadow maps work for lantern.
commit 243d0837b8a3b08172c9a3c348d964d7ddc2a0a8
Merge: 04382dc28 71dd520cd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:53:13 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 04382dc28632b6c66e8821f6870c0daaa1c1901a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:22:17 2020 +0200
WIP: better graphics config, better LOD, shadow maps.
commit 22ddbad3eb32bfa70f0932176022208fe67ded81
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 18:54:09 2020 +0200
Minor shader fixes.
commit 746a10e8d01ac235f994b0cde78fa48998602a1f
Merge: 0f4a0e763 40ab94673
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 04:02:09 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0f4a0e763db3afbdc4fb0558611f38326ca87151
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 23:03:24 2020 +0200
Switch back to pop-in terrain.
commit dd74fa7e4a53667b38811d7aec58d7f6a68889bb
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 22:58:55 2020 +0200
LOD shading closer to voxel shading.
commit ef67bd58ba0bdaf622b078892d768263b6cba268
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 28 20:49:03 2020 +0200
Experimental underwater lighting.
commit 2c5ad9d07605e80d5fd5679dd3a5d70c605b86a9
Merge: 748279835 303967a6f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 22:35:24 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7482798354eda18c8207950080fc24d443a369de
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 21:59:55 2020 +0200
Replace discard in figure-frag.
commit d83b4ae69be4912f69bf7835f509c68a1c7770a4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:45:57 2020 +0200
Fix sprite lighting, HDR from focus_pos.
commit 0594238004f116274905fa0ed7c2b6c417ed1d29
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:14:10 2020 +0200
Proper HDR from point lights.
commit 48c93d2b41ce5743103d18e76cc228f5ac766492
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 14:01:43 2020 +0200
Brighter ambiance, darker LOD shadows.
commit e0452e895ccfa8a43f368cae3b8b8aedc24dad93
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 13:13:23 2020 +0200
More proper HDR.
commit 4c6da3ed16cfeebb455e40da5f557b4af9a499d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 00:13:10 2020 +0200
Trying LOD noise.
commit 682a3d74c85df5503ffe1fc1cc891bce789df1ad
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 23:11:08 2020 +0200
Fix LOD heights in towns.
commit cc39e5734e8b18f9077bf42e66337c1319dd6b6e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 21:01:23 2020 +0200
More LOD fixes.
commit 8116b21c2e51c836e77894e309ac273caf2917b3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:54:43 2020 +0200
I like this coloring.
commit bc2560ea90b36f4b46190005344232d993043ac3
Merge: 14effdd5d e690efe71
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:48:33 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 14effdd5db8747fcf3eb34f03b46b7792e92d1c5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:24:35 2020 +0200
Re-saturate.
commit 48a643955d4435b78179acba0beb4a979905cc31
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:23:57 2020 +0200
Various fixes.
commit f7b497a0c25f4ad4682c71dd1ed6f608052feb9b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 03:22:49 2020 +0200
Render figures again.
commit 44e4aad48deba8266b9f8bdfd3db096b381f5327
Merge: e6f0a5a98 9ec319a18
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 02:01:04 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit e6f0a5a981a82533ba188fff0a54ce98577bb152
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 24 16:12:20 2020 +0200
Add atmospheric scattering.
commit f2953087f691a8edbc001cb98ebf5059fc6f8ac0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 23 00:01:20 2020 +0200
Fix shadowing for specular reflections.
commit ddd4a67a9799b8d08c7dc0c2bec90621c2bed0e3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Apr 22 22:56:12 2020 +0200
HDR fixes.
commit 1015e60deef3c447381996277df7496707a63bd0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 21 18:25:19 2020 +0200
More lighting changes.
commit 80c264abd111fb237e57843efcb5c071d4f84613
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 13 00:29:59 2020 +0200
Lighting experiments.
commit 8414987e589dd5102bad89762a3adaccc0bfe957
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 9 02:38:40 2020 +0200
WIP -- lighting changes and soft shadows.
commit 9cd2b3fb0d6b49776c6dfe463e4169637250b11a
Merge: c7ea687eb 8b149ad11
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:29 2020 +0200
Merge branch 'sharp/new-lighting' into sharp/small-fixes
commit c7ea687ebbc5aace1b455f134a5bf49ce2c7434a
Merge: 476441531 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:02 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 8b149ad11ad4bb75018fcf9519baec27d1c95951
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:32:39 2020 +0200
Trying out a new lighting model.
commit b0ac9f36f755dd06f7c17c46150568064790864f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 07:56:11 2020 +0200
Use bicubic interpolation for terrain.
commit f6fc9307a121514b614bc50ef8eb055953e7da8a
Merge: 33140a295 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 05:01:41 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 4764415312aae6e9ac2d00e86e84577cb958f1ab
Merge: ed2d0111d 13388ee6a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 04:54:48 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 13388ee6a42943f3f79a9cb488346cef18e272fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 20:30:08 2020 +0200
Various fixes (to coloring and to soft shadows).
commit fbd084a94a067082a87cd6d28b82054709bc9265
Merge: 5a089863b 4fdf6896a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 18:50:38 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/map-colors
commit ed2d0111d994262ae836d84d1fe5a45e4de72a0b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 06:49:27 2020 +0200
Combining colors and LOD.
commit 88342640c6b835114d01c797b89fdede3b0a2108
Merge: 33140a295 5a089863b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:49:20 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 33140a2951b8212725f42c758b277aaec4d888f7
Merge: 4c65a5aed f34d4b379
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:36:21 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 5a089863beb01d4794bbe3580ada47b278715ea2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 03:17:49 2020 +0200
Making maps brighter.
This is probably not the right way to do it, but oh well!
commit 32b2c99109dd486aa922886081068f9c550c83f2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 02:46:36 2020 +0200
Horizon mapping and "layered" map generation.
Horizon mapping is a method of shadow mapping specific to height maps.
It can handle any angle between 0 and 90 degrees from the ground, as
long as know the horizontal direction in advance, by remembering only a
single angle (the "horizon angle" of the shadow map). More is explained
in common/src/msg/server.rs. We also remember the approximate height of
the largest occluder, to try to be able to generate soft shadows and
create a vertical position where the shadows can't go higher.
Additionally, map generation has been reworked. Instead of computing
everything from explicit samples, we pass in sampling functions that
return exactly what the map generator needs. This allows us to cleanly
separate the way we sample things like altitudes and colors from the map
generation process. We exploit this to generate maps *partially* on the
server (with colors and rivers, but not shading). We can then send the
partially completed map to the client, which can combine it with shadow
information to generate the final map. This is useful for two reasons:
first, it makes sure the client can apply shadow information by itself,
and second, it lets us pass the unshaded map for use with level of
detail functionality.
For similar reasons, river generation is split
out into its own layer, but for now we opt to still generate rivers on
the server (since the river wire format is more complicated to compress
and may require some extra work to make sure we have enough precision to
draw rivers well enough for LoD).
Finally, the mostly ad-hoc lighting we were performing has been (mostly)
replaced with explicit Phong reflection shading (including specular
highlights). Regularizing this seems useful and helps clarify the
"meaning" of the various light intensities, and helps us keep a more
physically plausible basis. However, its interaction with soft shadows
is still imperfect, and it's not yet clear to me what we need to do to
turn this into something useful for LoD.
commit f8926a5737ddc51f3d585c651a64c43677aae0f4
Merge: a1aee931e 875ae6ced
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Mar 13 13:32:42 2020 +0100
Merge remote-tracking branch 'origin/master' into sharp/map-colors
commit 4c65a5aed353b119aea65a2aaeb94549b67beb42
Author: Treeco <5021038-Treeco@users.noreply.gitlab.com>
Date: Mon Feb 24 16:48:05 2020 +0000
Made LOD setting slider exponential
commit 2fa7b2d20d7233dc8bfd64f9f7f54617575248f1
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 17:49:53 2020 +0000
Added mist to LoD
commit aab059a450b5f635777129ff82cc15b662965c3c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 15:14:06 2020 +0000
Added LoD slider
commit 779c36b538121c5ade3633ae5cb67bb14c8c3877
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:54:55 2020 +0000
Reduced cost of vertex pushing
commit 9fea150473906b166365b738ebcea07c697daf3d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:38:53 2020 +0000
Fixed maths, improved LoD resolution
commit 5481df38fea5bf183ff376a3337179cfaa5233dc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 11:22:50 2020 +0000
Dynamically relocate LoD vertices to enhance details
commit a3e36a50ababd615da7db1b26158c7906a5def01
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 18:13:51 2020 +0000
Simpler terrain spiral rendering
commit 255f450ae9ac8763db4bede075fb409161ed57cc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:53:17 2020 +0000
Better LoD precision
commit 3d027aebe812a5b8658a4eb8123dc9f61b3776d2
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:04:03 2020 +0000
Better falloff
commit be775c9484b457b2c0b1a494aec03392d0c70e76
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 15:30:45 2020 +0000
Applied good ideas from experimental branch
commit 58587b68545a23c5c04ab4574a4b94b3bc982246
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 16:15:13 2020 +0000
Minor fixes to LoD merging
commit 7b42aebd709c14df2db766aad61d9280ad24d84d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 15:04:44 2020 +0000
Capped LoD dragging
commit 8aafc559f87124e1ea5ca6e3ddc2aa0c242d793c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:54:37 2020 +0000
Better blending between LoD and terrain border
commit edd3455d5161792d87ddc8eadc0ecbad5532b284
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:40:19 2020 +0000
Fixed LoD z depth, added sea level offset
commit b9b06744620114dd5556e73f64fa93c145503a7c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:27:43 2020 +0000
Better LoD smoothing
commit a1aee931e790431560cd2d953ad61d9497072afd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Feb 21 14:52:17 2020 +0100
Adding shadows.
commit 2400786c13dd891c131ed86d48d05df516a8a778
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 13:48:40 2020 +0000
Use world map as LoD source
commit dbf650f504a4c25fbbc2096ac3616c736bf52d23
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Jan 20 00:48:14 2020 +0000
Better clouds at distance
commit 5e6f81b86cdb9730b9b056877b19257075fd5fa8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Jan 19 23:59:02 2020 +0000
sync
commit 745e7540ddb000cc645f612767b337c2ddc3f7c0
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 12:40:48 2019 +0000
Improved cloud falloff mist, faster noise sampling
commit f6a200d0cb866196ba57697466755f9e0c7ea5d8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 10:09:00 2019 +0000
Improved long-range depth precision, removed unnecessary LoD polygons
commit 63d1b2bb2292898d59fb4f4e502201103dfeb86f
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 20:57:46 2019 +0000
Working LoD shader
commit f13d98ee3e58f881e8b978861a67663b59ed91ec
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 11:03:40 2019 +0000
LoD first attempt (stack overflow issue)
2020-08-20 18:34:59 +00:00
|
|
|
|
let grid_size = self.map_size_lg().chunks().map(usize::from) / cell_size;
|
2019-07-03 19:58:09 +00:00
|
|
|
|
let loc_count = 100;
|
2019-06-22 21:44:27 +00:00
|
|
|
|
|
2019-06-25 15:59:09 +00:00
|
|
|
|
let mut loc_grid = vec![None; grid_size.product()];
|
|
|
|
|
let mut locations = Vec::new();
|
2019-06-22 21:44:27 +00:00
|
|
|
|
|
|
|
|
|
// Seed the world with some locations
|
2020-01-13 04:12:56 +00:00
|
|
|
|
(0..loc_count).for_each(|_| {
|
2019-06-22 21:44:27 +00:00
|
|
|
|
let cell_pos = Vec2::new(
|
|
|
|
|
self.rng.gen::<usize>() % grid_size.x,
|
|
|
|
|
self.rng.gen::<usize>() % grid_size.y,
|
2019-06-18 21:22:31 +00:00
|
|
|
|
);
|
2019-06-25 15:59:09 +00:00
|
|
|
|
let wpos = (cell_pos * cell_size + cell_size / 2)
|
common: Rework volume API
See the doc comments in `common/src/vol.rs` for more information on
the API itself.
The changes include:
* Consistent `Err`/`Error` naming.
* Types are named `...Error`.
* `enum` variants are named `...Err`.
* Rename `VolMap{2d, 3d}` -> `VolGrid{2d, 3d}`. This is in preparation
to an upcoming change where a “map” in the game related sense will
be added.
* Add volume iterators. There are two types of them:
* _Position_ iterators obtained from the trait `IntoPosIterator`
using the method
`fn pos_iter(self, lower_bound: Vec3<i32>, upper_bound: Vec3<i32>) -> ...`
which returns an iterator over `Vec3<i32>`.
* _Volume_ iterators obtained from the trait `IntoVolIterator`
using the method
`fn vol_iter(self, lower_bound: Vec3<i32>, upper_bound: Vec3<i32>) -> ...`
which returns an iterator over `(Vec3<i32>, &Self::Vox)`.
Those traits will usually be implemented by references to volume
types (i.e. `impl IntoVolIterator<'a> for &'a T` where `T` is some
type which usually implements several volume traits, such as `Chunk`).
* _Position_ iterators iterate over the positions valid for that
volume.
* _Volume_ iterators do the same but return not only the position
but also the voxel at that position, in each iteration.
* Introduce trait `RectSizedVol` for the use case which we have with
`Chonk`: A `Chonk` is sized only in x and y direction.
* Introduce traits `RasterableVol`, `RectRasterableVol`
* `RasterableVol` represents a volume that is compile-time sized and has
its lower bound at `(0, 0, 0)`. The name `RasterableVol` was chosen
because such a volume can be used with `VolGrid3d`.
* `RectRasterableVol` represents a volume that is compile-time sized at
least in x and y direction and has its lower bound at `(0, 0, z)`.
There's no requirement on he lower bound or size in z direction.
The name `RectRasterableVol` was chosen because such a volume can be
used with `VolGrid2d`.
2019-09-03 22:23:29 +00:00
|
|
|
|
.map2(TerrainChunkSize::RECT_SIZE, |e, sz: u32| {
|
2019-06-25 15:59:09 +00:00
|
|
|
|
e as i32 * sz as i32 + sz as i32 / 2
|
2019-06-23 19:43:02 +00:00
|
|
|
|
});
|
2019-06-22 21:44:27 +00:00
|
|
|
|
|
2019-06-25 15:59:09 +00:00
|
|
|
|
locations.push(Location::generate(wpos, &mut rng));
|
|
|
|
|
|
|
|
|
|
loc_grid[cell_pos.y * grid_size.x + cell_pos.x] = Some(locations.len() - 1);
|
2020-01-13 04:12:56 +00:00
|
|
|
|
});
|
2019-06-25 15:59:09 +00:00
|
|
|
|
|
|
|
|
|
// Find neighbours
|
|
|
|
|
let mut loc_clone = locations
|
|
|
|
|
.iter()
|
|
|
|
|
.map(|l| l.center)
|
|
|
|
|
.enumerate()
|
|
|
|
|
.collect::<Vec<_>>();
|
2020-05-21 19:20:01 +00:00
|
|
|
|
// NOTE: We assume that usize is 8 or fewer bytes.
|
2020-01-13 04:12:56 +00:00
|
|
|
|
(0..locations.len()).for_each(|i| {
|
2019-10-16 11:39:41 +00:00
|
|
|
|
let pos = locations[i].center.map(|e| e as i64);
|
2019-06-25 15:59:09 +00:00
|
|
|
|
|
2019-10-16 11:39:41 +00:00
|
|
|
|
loc_clone.sort_by_key(|(_, l)| l.map(|e| e as i64).distance_squared(pos));
|
2019-06-25 15:59:09 +00:00
|
|
|
|
|
2019-06-26 00:27:41 +00:00
|
|
|
|
loc_clone.iter().skip(1).take(2).for_each(|(j, _)| {
|
2020-05-21 19:20:01 +00:00
|
|
|
|
locations[i].neighbours.insert(*j as u64);
|
|
|
|
|
locations[*j].neighbours.insert(i as u64);
|
2019-06-26 00:27:41 +00:00
|
|
|
|
});
|
2020-01-13 04:12:56 +00:00
|
|
|
|
});
|
2019-06-18 21:22:31 +00:00
|
|
|
|
|
2019-06-22 21:44:27 +00:00
|
|
|
|
// Simulate invasion!
|
|
|
|
|
let invasion_cycles = 25;
|
2020-01-13 04:12:56 +00:00
|
|
|
|
(0..invasion_cycles).for_each(|_| {
|
|
|
|
|
(0..grid_size.y).for_each(|j| {
|
|
|
|
|
(0..grid_size.x).for_each(|i| {
|
2019-06-25 15:59:09 +00:00
|
|
|
|
if loc_grid[j * grid_size.x + i].is_none() {
|
2019-06-22 21:44:27 +00:00
|
|
|
|
const R_COORDS: [i32; 5] = [-1, 0, 1, 0, -1];
|
|
|
|
|
let idx = self.rng.gen::<usize>() % 4;
|
2019-10-16 11:39:41 +00:00
|
|
|
|
let new_i = i as i32 + R_COORDS[idx];
|
|
|
|
|
let new_j = j as i32 + R_COORDS[idx + 1];
|
|
|
|
|
if new_i >= 0 && new_j >= 0 {
|
|
|
|
|
let loc = Vec2::new(new_i as usize, new_j as usize);
|
|
|
|
|
loc_grid[j * grid_size.x + i] =
|
|
|
|
|
loc_grid.get(loc.y * grid_size.x + loc.x).cloned().flatten();
|
|
|
|
|
}
|
2019-06-22 21:44:27 +00:00
|
|
|
|
}
|
2020-01-13 04:12:56 +00:00
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
});
|
2019-06-22 21:44:27 +00:00
|
|
|
|
|
|
|
|
|
// Place the locations onto the world
|
2020-04-23 15:16:08 +00:00
|
|
|
|
/*
|
2019-06-22 21:44:27 +00:00
|
|
|
|
let gen = StructureGen2d::new(self.seed, cell_size as u32, cell_size as u32 / 2);
|
2020-01-13 04:12:56 +00:00
|
|
|
|
|
|
|
|
|
self.chunks
|
|
|
|
|
.par_iter_mut()
|
|
|
|
|
.enumerate()
|
|
|
|
|
.for_each(|(ij, chunk)| {
|
(See sharp/lod-history) LOD, shadows, greedy meshing, new lighting, perf
---
Pretty much a Veloren fork at this point. Here's a high level overview of the changes (will be added to CHANGELOG just before merge).
At a high level this MR incorporates roughly two groups of changes.
The first group consists of new game features: more flexible map sizes, level of detail terrain, shadow maps, and a new lighting
engine. This is "feature work" that (mostly) only adds new things to Veloren, and mostly shouldn't affect old stuff.
The second big group of changes are those addressing the fallout from all the new features. These include performance fixes of
various sorts: the addition of multiple graphics options and optimization of the cheap ones to avoid work, switching all voxel
models to use some variant of greedy meshing, switching over much of our CPU-side vector math to exploit SIMD instructions
(coinciding with a fork of `vek`), and a rewrite of how the UI handles text rendering (coinciding with updates to our fork
of `conrod`). Making Veloren's hardcoded colors appear correct under the new lighting engine also required considerably
changes (TODO: Fill in this section when it's complete).
The second category of changes often heavily touches code owned by other people, including frequently modified code "owned" by a
handful of people, so I recommend that this code be reviewed particularly carefully.
---
At a high level (each will be described in more detail below):
- The world map has been refactored.
- The world size is no longer hardcoded (@zesterer).
- The map generation code was made generic to allow using it outside of the `world` crate (@zesterer).
- On world creation, we now compute *horizon maps* (@zesterer).
- The way we pass the world from the server to the client has been updated (@xMAC94x).
- Artifacts related to image rotation were fixed (@imbris).
- Multiflow rivers were enabled (@zesterer).
- In the process of making changes related to the world map, various incidental fixes and optimizations were required.
- The new *level of detail* feature was added (@zesterer wrote part of this and has checked out the rest).
- A new LOD terrain rendering step was added to the pipeline.
- The LOD terrain quality was made configurable via a graphics setting.
- Horizon maps were used to cast shadows from LOD chunks on both LOD and non-LOD terrain.
- A "voxelization" effect was incorporated into rendered LOD terrain to make it blend better into the world.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Veloren's lighting has been completely overhauled (@zesterer has already checked most of this out).
- A semi-accurate index of refraction was assigned to our materials.
- A new, more realistic, physically based approach to lighting was used using the *Ashikhmin Shirley* BRDF.
- We emulate *atmospheric scattering* using equations designed for measuring solar panel light exposure.
- We attempt to compute *realistic light attenuation* in water using its real material properties.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Point and directional lights now cast realistic shadows, using *shadow mapping.* (@imbris, @zesterer, @Treeco, @YuriMomo)
- Point light shadow maps were added to the rendering pipeline, using geometry shaders and *seamless cube maps*.
- Directional light shadows were added to the rendering pipeline, using LISPSM together with disabling *depth clamping*.
- "Shadow-only" chunks and NPCs were added to prevent shadows from models behind you from disappearing.
- In the process of making changes related to shadow maps, various incidental fixes and optimizations were required.
The addition of shadow maps, LOD terrain, and the new lighting all led to significant performance degradation, on top of other
changes happening in master. Therefore, a large number of performance improvements were also needed:
- The graphics options were made much more flexible and configurable, and shaders were optimize.
- New options were provided for how to render lights and shadows (@Pfauenauge, @zesterer).
- Graphic setting storage and configuration were overhauled to make adding new features easier (@Pfauenauge, @imbris).
- Shaders were rewritten to utilize GLSL's preprocessor to avoid overhead (@zesterer, @YuriMomo).
- In the process of making changes related to providing additional rendering options, various incidental fixes and optimizations were required.
- Voxel model creation was switched to use *greedy meshing.*
- A new voxel meshing method, greedy meshing, was added (@imbris).
- Uses of the older meshing methods were migrated to use greedy meshing (@imbris, @jshipsey, @Pfauenauge).
- New restrictions were added to terrain, figure, and sprites to future proof them for further optimizations (@jshipsey, @Pfauenauge, @zesterer).
- Most positions are now relative to either chunk or player position for better precision (@imbris, @zesterer, @scottc).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- Animation and terrain math were switched to use SIMD where possible.
- Fixes were made to vek to make its SIMD feature usable for us (@zesterer, @imbris).
- The interface and types used in bone animation were changed in various ways (@jshipsey, @Snowram, @Pfauenauge).
- Redundant code generation for body animation is now partly taken care of by a macro (@jshipsey, @Snowram, @Pfauenauge).
- Animation code was modified to to use vek's SIMD representation where possible (@jshipsey, @Snowram, @Pfauenauge).
- Terrain meshing code and shadow map math were also modified to use vek's SIMD representation (@imbris).
- SIMD instruction generation was enabled (@YuriMomo, @jshipsey, @Snowram, @imbris, @Angelonfira, @xMAC94x).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- The way we cache glyphs was completely refactored, fixed, and optimized.
- Our fork of `conrod` was optimized in various ways (@imbris).
- Our fork of `conrod` now exposes whether a widget was updated during the current frame (@imbris).
- Our use of the glyph cache was rewritten for correctness (@imbris).
- A *text cache* was introduced that lets us skip remeshing glyphs that have not changed (@imbris).
- Various changes were made to reduce pressure on the glyph cache, with more planned (@imbris, @Pfauenauge).
- In the process of making changes related to the glyph cache, various incidental fixes and optimizations were required.
- Colors were changed to keep Veloren's look consistent with master.
- Some older tree models were brought back (@Pfauenauge).
- TODO(@Sharp): All hardcoded colors were extracted and made hotloadable.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Hardcoded colors were fixed to conform to Veloren's style.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Color models were fixed to conform to Veloren's style.
A detailed description of the involved changes follows.
---
- The world size is no longer hardcoded. All functions dependent on world size now take a `WorldSizeLg`, which holds the base 2 logarithm of each actual world dimension and is guaranteed to maintain certain properties (outlined in `common/src/terrain/map.rs`). Additionally, many utility functions that utilize the world size were moved into `common` as well (mostly `common/src/terrain/mod.rs`). Finally, the world map format was updated in order to store its size explicitly, with a migration path from the old format that should work whenever the old formatted map was a square (practically always). See `world/src/sim/mod.rs` for these changes.
- The map generation code was made generic to allow using it outside of the `world` crate. The parts of the map generating code that do not need to query the world were moved over to `common/src/terrain/map.rs`, allowing them to be used from the client without creating a dependency on `world`. The rest of it was turned into helper functions in `world/src/sim/map.rs`, which can be passed as closures to the generic map generation code to complete its construction. This also means that colors are now passed in separately to the map generation function. See <https://veloren.net/devblog-78/> for more details.
- On world creation, we now compute *horizon maps*. See the function in `world/src/sim/util.rs`.
Given a height map and a plane intersecting that height map, our horizon maps allow us to encode enough information to reconstruct shadows for each point on the height map using only the *horizon angle* (the angle at which the sun starts to become visible). As Veloren's sun only covers one plane, this is sufficient for encoding sun shadows for LOD terrain, by encoding two angles per chunk (one for each 90 degrees the sun covers). We can also use this for the moon, if we want, since the moon follows the same path. Additionally, we store the *height* of the furthest occluder, to try to make the shadows volumetric; so this means 4 bytes in total for each chunk.
Support for horizon maps has been merged into the map functionality in common as well.
- The way we pass the world from the server to the client has been updated. Rather than passing the prerendered map, we instead pass three maps with values for each chunk; one with the color information, a second with altitude information, and a third with horizon map information. We then reconstruct the map on the client, together with some additional information we send from the server (like the sea level and maximum height). See `common/src/msg/server.rs` for a detailed description of the format of `WorldMapMsg`, and `server/src/libr.rs` and `client/src/lib.rs` for details of the map construction and parsing.
- Artifacts related to image rotation were fixed. See the commit message for commit SHA `cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e` for a detailed explanation. This involved changes to shaders, the addition of a new type of graphic (also reflected in the graphic cache) that allows specifying a border color (which automatically makes the associated texture immutable), and some related fixes. I reproduce the first two paragraphs of the MR description as well:
```
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
```
- Multiflow rivers were enabled.
This does not really need to be part of this MR, and would be easy to revert, but since it seemed to provide a nice improvement it's currently packaged with it.
We already computed multiple outflows from each chunk for erosion purposes long before this MR.
However, we never modified river rendering to be able to handle this case (just a single downhill river flow is complex enough!) so this was not exposed when deciding which chunks were rivers.
Now that
- In the process of making changes related to the world map, various incidental fixes and optimizations were required. Some examples of fixes include making sure terrain is never lowered to below sea level (to make the shadow maps report correct values), fixing map altitudes and colors to understand things like cliffs and "block level" coloring (that doesn'te xist on the column level), and fixing a crashbug when rendering images for the UI where source pixels are strongly rectangular. Some examples of related performance fixes include avoiding allocating a fresh vector for all the maps (i.e. copying it over to change the format from `[u32; n]` to `DynamicImage` and then copying again to convert to `RgbaImage`), and instead using the `gfx::memory::slice` function to accomplish the same thing. These sorts of changes are spread all arond the code.
This includes the additon of a new scene, `voxygen/src/scene/lod.rs`, a new pipeline `voxygen/src/render/pipeline/lod_terrain.rs`, and new shaders `assets/vxygen/shaders/lod-terrain-vert.glsl` and `assets/vxygen/shaders/lod-terrain-frag.glsl`, as well as associated changes to the renderer in `voxygen/src/render/renderer.rs`.
The main idea behind our initial approach to LOD was to take the world data we now get from the server (altitude, color, and horizon mapping).
- Some previously computed values were turned into shader uniforms for better prediction on weak processors. (@zesterer)
- Calls to power or trig functions were removed or replaced with multiplications, where possible.
- After some deliberation
- To properly handle sprite "waving" for nearby sprites,
We explicitly designed the greedy meshing system with figures and sprites in mind.
In both cases, we want to be able to *efficiently* pack many different models into the same texture, especially in cases where we know
we will either not be removing any of the grouped-together from the models from the texture, or will remove all of them at once (so
they can be packed into some specific subtexture).
For sprites, since we know every model in advance and never intend to deallocate them, we currently pack them all as efficiently as
possible into one giant tetxure atlas. However, in the future we might opt to pack them slightly less efficiently in exchange for
shrinking the sprite vertex size.
For figures, we pack all the textures for each *model* into the same atlas.
is a global texture atlas used for every sprite, and for figures which is why we have the ability to mesh multiple
models to the same texture area (using the simple texture atlas allocator) without requiring intermediate vector allocations.
This is accomplished by delaying the time when we actually write the color and light data to the texture until *after* all the
model vertices have been meshed; then, we can just allocate the whole color/light array at once, making the atlas we use an
exact fit. In computer science-y terms, we accomplish this delay by, after we perform the initial greedy meshing (without
texture information), not continuing to create the texture data, but instead constructing a *continuation*--that is, a function
that, when called, will execute the rest of the computation. We push this continuation (which in Rust terms is a `FnOnce` closure
that takes the `ColLightsInfo` that it is supposed to write to as context) onto a
onto a vector
resizing. To allow for suspended writes to texture data, Rust pointed out to me that the continuation that would eventually write the color and light data to the texture atlas (the one that is shared by all models sharing the same greedy mesher) would have to *own* whatever data it mshed. Because we often generate the model data to mesh as a temporary in `voxygen/src/load.rs`, the
- Matrix multiplications in the shader were reduced for figure data (@zesterer).
- Vertex "waves" for fluid data were removed.
- Terrain "bending" near edges was removed.
- Scaling was fixed to make sure empty space was not introduced in a space previously occupied by a block. It was also changed to take ownership of its voxel data,
rather than sharing it, to let it be used with meshing.
- Rust's nightly version was bumped in order to use the `array_map` function, which lets us reuse more code between the simple map and `FigureModelCache`.
- PositionedGlyph::standalone.
---
I tried to cite sources in many cases[^realtime],[^lloyd],[^lispsm],[^pbrt],[^greedy],[^tjunctions]
where I needed features from elsewhere but I am particularly grateful for the following resources,
esepcially where they have accompanying source code. I linked all of them that are accessible to the public (those that are not were
obtained through legal means).
[^realtime]: Eisemann, Elmar, Michael Schwarz, Ulf Assarsson, Michael Wimmer. Real-Time Shadows. A K Peters/CRC Press (T&F), 20160419.
[^lloyd]: Lloyd,B. 2007. [Logarithmic perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). PhD thesis, University of North Carolina.
[^lispsm]: Wimmer, M., Scherzer, D., and Purgathofer, W. 2004. [Light space perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). In Proceedings of Eurographics Symposium on Rendering 2004, pp. 143– 152.
[^pbrt]: Pharr, Matt, et al. [http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf](Physically Based Rendering: From Theory to Implementation). Third edition, Morgan Kaufmann Publishers/Elsevier, 2017.
[^greedy]: mikolalysenko. “Meshing in a Minecraft Game.” 0 FPS, 30 June 2012, <https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/>.
[^tjunctions]: blackflux. “Meshing in Voxel Engines – Part 1.” Blackflux.Com, 23 Feb. 2014, <https://blackflux.wordpress.com/2014/02/23/meshing-in-voxel-engines-part-1/>.
I am also especially grateful to Khronos, Wikiepdia, and stackoverflow for answering many of my specific questions while writing the MR.
---
Squashed commit of the following:
commit 300505e7305a2fdac722a808ee8538323f215f39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 18:46:25 2020 +0200
Fixing cargo doc and typo in CHANGELOG.
commit ec0aeb18e8499d7d84ef818331b4b65c3d76cea6
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 15:38:50 2020 +0200
Hopefully final commit for the LOD branch.
commit 5e8ea0b1eaac02903a02feb2eb038d195de4872f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 10:14:26 2020 +0200
Falling back to power as stopgap.
commit e44a1cbf46504ee9931a01bdc9033e145500d557
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 09:25:41 2020 +0200
Address imbris feedback.
Temporarily disables shiny water, lowers max VD.
These restrictions will be lifted soon after merging.
commit 561e25778a108ac3712f5ec2ce3a51234c4430d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 08:31:13 2020 +0200
Tweaking shaders a bit.
commit 7d19259078ce0dd7b3742ad7d0cb3fab3ece3fdc
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:59:43 2020 +0200
Fix view example as well.
commit 051cd4934e0fad2c0b15db4380a4189fa318679f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:29:06 2020 +0200
Fix meshing benchmark.
commit c95e07db3b4dcca285678985e65e31b927cb1c61
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 05:46:22 2020 +0200
Address MR feedback, fix scene clouds.
commit 1bfb816cabdb3ffc1e507a009c2d98696b4b573a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:39:36 2020 +0200
Incorporating Pfau's figure color changes.
New eyes and new humanoid colors.
commit 3f9b89a3ac7b3356b1dba0d1a8f6541357f81469
Merge: e2f5162e4 62c53963a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:29:41 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit e2f5162e4f96f4124aa43488f7245d341b3dcfd4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:28:38 2020 +0200
World colors are all hotloadable.
They live in assets/world/style/colors.ron.
Only a small handful of hardcoed colors remain in World; they are either
part of the map, or difficult to disentangle from the rest of the
computation. Comments are made where appropriate.
commit 62c53963abe1975009d34a8f9515a355bef24f31
Author: Marcel Märtens <marcel.cochem@googlemail.com>
Date: Wed Aug 19 15:59:00 2020 +0200
replace pretty_env_logger with tracing
commit 5b1625f99d9586fe80e2232f583ec5af9f953099
Merge: d71003acd 4942b5b39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:15:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit d71003acdabeff970b3928e97c26af6847b5b78e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:14:34 2020 +0200
Hotloading colors, part 1: colors in common.
Currently, this just entails humanoid colors. There are only three
colors not handled; the light emitter colors in
common/src/comp/inventory/item/tool.rs. These don't seem important
enough to me to warrant making hotloadable, at least not right now, but
if it's needed later we can always add them to the file.
commit 63b5e0e553eb2ea49276f192a6fc7dd65254270d
Merge: c32b337a4 6d2c4b9c1
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 13:05:37 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c32b337a46e10d9de473d178a94a3ccd61c39bb3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:52:04 2020 +0200
Fixing LOD grid, for real.
commit a166ae0360395387e09fb35a1f84210c2ce5ec24
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:28:05 2020 +0200
Addressing imbris's initial feedback.
Fixes two minor bugs: explosion particles were no longer spawning
randomly, and LOD grids were not perfectly even.
commit 4cbad004f44060994252dd3d38647a14a589712f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:27:58 2020 +0200
Bumping nightly per request.
commit 548680276aac77c25d43d16b5622f847d474dbef
Merge: acc098604 8f8b20c91
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:26:06 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit acc0986040589a3492f88a740bc3c3fc693b26d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:28:32 2020 +0200
Lower resolution due to lying drivers.
commit d3b878de2a52c358d2944a6bbd0555dad7fbdb10
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:15:38 2020 +0200
Fix issues msh encountered with Intel 4600.
commit 10245e0c1b0cb6fae10d86409435364edc6102ef
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 21:15:02 2020 +0200
Merge more models into one mesh than we did previously.
commit 3155c31e663c52ae5c3a53d5fb5665892a1a498a
Merge: 7204cc8a7 3c199280e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:35:22 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7204cc8a7a4f74a30306bd205d9834fee4bb944f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:34:43 2020 +0200
Fix not yet done NPC animations.
This forces them all to be the idle animation if not specified.
This fixes issues where you'd have giant NPCs in water.
commit bc83360f2a08918f19d417b5f772e1ff554dba08
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 19:36:37 2020 +0200
Try to fix some bugs:
- Z fighting with LOD terrain and water.
- Audio SFX not playing.
commit 1fd104aa603bf3781b6526a5cada46aeca3049dd
Merge: 862df3c99 7c2c392a3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 12:02:31 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 862df3c9976c4da9bd7cfd784f1a85973127968a
Merge: 0a4218ed9 75c1d4401
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 05:52:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0a4218ed9d541a2b34c133351bea38a99ddf4ea7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 22:27:14 2020 +0200
Fix particle depth.
commit f51dfdeb442d0dd5243dd2f344fa4be295bd0875
Merge: c6251a956 5e6dc0471
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:19:04 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit c6251a956ad376400dca5c23420cf8d213dc8fdf
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:15:46 2020 +0200
Cache figures more intelligently.
Cache figures for longer, and don't cache character states for the
player except where they actually affect the rendered model.
commit 0ed801d5404982c6fb63b1eaa4567d908b294c9d
Merge: c11b9bdf0 eea64f78f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 16:32:24 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c11b9bdf0a53bf9884d2f5a48fec9b01d582df1a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 11:47:15 2020 +0200
Remove unneeded Clippy annotation.
commit 16aa9ef40af56d69289d00aafb3deadfb8bd4f35
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 8 00:53:02 2020 +0200
Fix hotloading and Clippy.
commit 3dc973e0be5b758da1e9805eb764ad401374cd0c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 23:50:27 2020 +0200
Major speedups with SIMD.
commit fba64a7d93d5a96077ce87287bbce6ab9b7fbcae
Merge: 76429d00e d1e10b178
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:19 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 76429d00eea00d212fbd672a84ee91e75b19b938
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:10 2020 +0200
Add clippy.toml.
commit c79f512f84dbb83cb82b7954db68ff241dfd8e41
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 11:55:20 2020 +0200
Fix all clippy issues, clean up Rust code.
commit 6f90e010b3fbefb53b0d632e819931350015b6b8
Merge: 77a8c7c26 5929cfa5c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:30 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 77a8c7c267d3f44a1a62bd6b2274359973c5e4d4
Merge: b44e44232 44febaabd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:10 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 5929cfa5c713aa392110bbb62407f76caf53c3df
Author: jshipsey <jshipsey18@gmail.com>
Date: Thu Aug 6 20:47:27 2020 -0400
fixed in-hand arrow bug
commit b44e442325d828f1cd564d66908f89d09e80474b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 6 13:40:35 2020 +0200
Miscellaneous performance improvements.
commit be37acf287c1360d8085862526ac3365ffd1d768
Merge: 125d7fc6c c11876547
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 05:49:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 125d7fc6c4dcd8c8c5f27b8268a4d64f409f3644
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 04:55:31 2020 +0200
Abstract over simd vs. repr_c vectors.
Also some minor improvements to Event size.
commit d4d4956e9252e1241ce110b2aa85076c6b1e2a23
Merge: 5f3b7294a aced5f979
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:56:54 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 5f3b7294af1f8533edc2620b58863c248e2b07af
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:43:52 2020 +0200
Fix formatting issues I missed before.
commit a428a3ebba70dcab63dd0f8cd983120c90617271
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:41:51 2020 +0200
Fix clippy warnings, part 1.
There aer still a bunch of type too complex and
function takes too many arguments warnings that I'll fix later
(or ignore, since in the one case I did fix a function takes too
many arguments warning I think it made the code *less* readable).
commit ba54307540ed8a937ac08209730284fc653af85b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 30 13:22:42 2020 +0200
Fix light animations so they are removed when the light turns off.
commit 7e0f4bcbf0f4717145d8beac40d52e3acebbe2aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 21:10:20 2020 +0200
Fix crash in edge case for pixel art.
commit 56da06f7a351e2b949e9b014a90b974d511a0924
Merge: cf74d55f2 9f53a4a19
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:56:52 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:29:52 2020 +0200
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
The first concern was addressed by fixing the dimensions of the map
images drawn from the UI (so that we always use a square source
rectangle, rather than a rectangular one according to the dimensions of
the map). We also fixed the way rotation was done in the fragment
shader for north-facing sources to make it properly handle aspect ratio
(this was already done for north-facing targets). Together, these fix
rendering issues peculiar to rectangular maps.
The second and third concerns were jointly addressed by adding an
optional border color to every 2D image drawn by the UI. This turns
out not to waste extra space even though we hold a full f32 color
(to avoid an extra dependency on gfx's PackedColor), since voxel
images already take up more space than Optiion<[f32; 4]> requires.
This is then implemented automatically using the "border color"
wrapping method in the attached sampler.
Since this is implemented in graphics hardware, it only works (at
least naively) if the actual image bounds match the texture bounds.
Therefore, we altered the way the graphics cache stores images
with a border color to guarantee that they are always in their own
texture, whose size exactly matches their extent. Since the easiest
currently exposed way to set a border color is to do so for an
immutable texture, we went a bit further and added a new "immutable"
texture storage type used for these cases; currently, it is always
and automatically used only when there is a specified border color,
but in theory there's no reason we couldn't provide immutable-only
images that use the default wrapping mdoe (though clamp to border
is admittedly not a great default).
To fix the maps case specifically, we set the border color to a
translucent version of the ocean border color. This may need
tweaking going forward, which shouldn't be hard.
As part of this process, we had to modify graphics replacement to
make sure immutable images are *removed* when invalidated, rather
than just having a validity flag unset (this is normally done by
the UI to try to reuse allocations in place if images are updated
in benign ways, since the texture atlases used for Ui do not
support deallocation; currently this is only used for item images,
so there should be no overlap with immutable image replacement,
so this was purely precautionary).
Since we were already touching the relevant code, we also updated
the image dependency to a newer version that provides more ways
to avoid allocations, and made a few other changes that should
hopefully eliminate redundant most of the intermediate buffer
allocations we were performing for what should be zero-cost
conversions. This may slightly improve performance in some
cases.
commit ad18ce939940a8c697270f6e9b94db9942fd8295
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 13:21:09 2020 +0200
Fix continent scale hack.
commit 36b1cb074f5b195aebd7dbbc3da7f0246a1a18ec
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 12:11:40 2020 +0200
Enable loading different sized maps without a recompile.
We may want to tweak the effects of the continent_scale_hack.
commit 13b6d4d534cc4814b7cb3294ca41bbfea0a6b186
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 10:55:48 2020 +0200
Removing WORLD_SIZE, part 1.
Erased almost every instance of WORLD_SIZE and replaced it with a local
power of two, map_size_lg (which respects certain invariants; see
common/src/terrain/map.rs for more details about MapSizeLg). This also
means we can avoid a dependency on the world crate from client, as
desired.
Now that the rest of the code is not expecting a fixed WORLD_SIZE, the
next step is to arrange for maps to store their world size, and to use
that world size as a basis prior to loading the map (as well, probably,
as prior to configuring some of the noise functions).
commit 30b1d2c6428230a9eaa0d749cdcbbd6f1cbccd78
Merge: 7d56ba31b 1377b369f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:58 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 7d56ba31b445441461b28a07fc495d7d4f047c17
Merge: 2101113b4 598f14b25
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 1377b369f6db2258e910d467a5740f31789e3ded
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sun Jul 19 23:25:38 2020 +0200
more saturated pumpkins
commit ae8d50527f93bb0616c2ad46ce4dacb63bc37c6d
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sat Jul 18 20:29:56 2020 +0200
acacia models
commit 2101113b467e691de787392d7f20f1745f5637bd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 18 18:55:25 2020 +0200
Higher detail LOD.
commit add2cfae04b4385fa5590e11e2bd5229d9dee0aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 16 01:57:39 2020 +0200
Revert some irrelevant stuff.
commit 2e2ab3dc1eaa59a4aef7f8d34a53d8aae4c8553a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 15 13:30:49 2020 +0200
Fixing various things about shadows.
* Correcting optimal LISPSM parameter.
* Figure shadows are cast when they're not visible.
* Chunk shadows stay cast until you look away.
* Seamless cubemaps for point lights.
* Etc.
commit 6c31e6b56217274285b597af297036691ea5d897
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 19:50:26 2020 +0200
Fix shadow creation.
commit 6332cbe006115ae205597529cd8bbccd146c2cca
Merge: be438657c 930e0028b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:47:00 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit be438657c33d7b5bfb0a9582c3ed3fd366637323
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:28:08 2020 +0200
Tweaks to shadows.
Added shadow map resolution configuration, added seamless cubemaps,
documented all existing rendering options, and fixed a few Clippy
errors.
commit 23b4058906013c7d2a40c286e20e32c5fbd897ed
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 10:11:19 2020 +0200
Fix moon, use nonlinear noise for terrain.
Note that the latter has a bit of performance cost.
commit 7fbe5cbfbb9dc29607957b8e62f432a4deed193d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:23:02 2020 +0200
Address lies about max texture size.
commit bcfc62b5e13a1cdd83f57535fde4694720bebfd9
Merge: 75e3626a7 18a08e8fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:22:08 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 75e3626a785919f43fdcf2127c2b10e3e4df2f9f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:21:52 2020 +0200
OpenGL 3.3 minimum.
commit 18a08e8fe2739f02af99a5d2cb4e7c38c49e858b
Author: Monty Marz <m.marzouq@gmx.de>
Date: Tue Jul 7 23:57:52 2020 +0200
settings localization
commit 90c5d1ca3620092bc3ae10b2211489eb1cf6f5e8
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 21:11:48 2020 +0200
Lower near distance.
commit 0e66f02b25aaddaa2dfddbbc89cd67de54a9a7b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 20:09:01 2020 +0200
All sprites sway in the wind now.
commit db1401a6910bf42dcf502462c90038752ff5fbdb
Merge: 69e508d8c e8b4b29d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 19:34:17 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 69e508d8c94d8973033817ca86f357e466fc7c4d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 18:41:37 2020 +0200
Make it easy to switch to SIMD for math.
commit ffe0f5928c7a7e87d00cb5426b3b1d831d7e02fd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 21:21:12 2020 +0200
Fix some issues with underwater rendering.
commit bfda6da42f38fd02c31ee92c81ab785a3e50c2a0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 19:17:59 2020 +0200
Fix some minor display issues.
commit 0ed752e087968cf901301884aaeae698e32ef8a5
Merge: ccc6a06a8 518edcb85
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:14:21 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit ccc6a06a8d4504d6b9f7af7905a414d2ee06ab76
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:04:34 2020 +0200
Some minor changes.
commit 4e020246702889269efe1a191788992164c508d6
Merge: 50a64d927 e05c9267a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 16:17:40 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 50a64d927e6c4f4b0e4688e4cbfca694bc3f922a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 13:07:03 2020 +0200
Fix far plane.
commit 7dd06da34cae8f9ea3b6c889fe965181f3fd3949
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:25:35 2020 +0200
Add shadows.glsl.
commit 618a18c998778bf871b905a74657440fcc384c80
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:10:22 2020 +0200
Adding shadows, greedy meshing, and more.
commit eaea83fe6a5cb1cb0ba8beef888183c718258496
Merge: 267018495 2f89b863e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 22:47:07 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 2670184954a13e4a9e7a4e35ba79aac0c5fac2f7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 21:20:01 2020 +0200
Make civsim and sites deterministic.
For anything in worldgen where you use a HashMap, *please* think
carefully about which hasher you are going to use! This is
especially true if (for some reason) you are depending on hashmap
iteration order remaining stable for some aspect of worldgen.
commit f8376fd5dc72b4a9c2f51a6b4570d59c8b8e9343
Merge: 654f7e049 cdee191dd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 17:53:57 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 654f7e049258d9da27c09608bbe6a46ffa8787e5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed May 20 21:22:30 2020 +0200
Correct backface culling.
commit 560501df05ca725409b0f2e4eb31bdfdc15fd0c7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue May 19 17:22:06 2020 +0200
Greedy messhing for shadows.
commit a4d87e1875ca543436e6bbbeb20348facc5a52d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun May 17 05:59:00 2020 +0200
Shadow maps work for lantern.
commit 243d0837b8a3b08172c9a3c348d964d7ddc2a0a8
Merge: 04382dc28 71dd520cd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:53:13 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 04382dc28632b6c66e8821f6870c0daaa1c1901a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:22:17 2020 +0200
WIP: better graphics config, better LOD, shadow maps.
commit 22ddbad3eb32bfa70f0932176022208fe67ded81
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 18:54:09 2020 +0200
Minor shader fixes.
commit 746a10e8d01ac235f994b0cde78fa48998602a1f
Merge: 0f4a0e763 40ab94673
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 04:02:09 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0f4a0e763db3afbdc4fb0558611f38326ca87151
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 23:03:24 2020 +0200
Switch back to pop-in terrain.
commit dd74fa7e4a53667b38811d7aec58d7f6a68889bb
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 22:58:55 2020 +0200
LOD shading closer to voxel shading.
commit ef67bd58ba0bdaf622b078892d768263b6cba268
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 28 20:49:03 2020 +0200
Experimental underwater lighting.
commit 2c5ad9d07605e80d5fd5679dd3a5d70c605b86a9
Merge: 748279835 303967a6f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 22:35:24 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7482798354eda18c8207950080fc24d443a369de
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 21:59:55 2020 +0200
Replace discard in figure-frag.
commit d83b4ae69be4912f69bf7835f509c68a1c7770a4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:45:57 2020 +0200
Fix sprite lighting, HDR from focus_pos.
commit 0594238004f116274905fa0ed7c2b6c417ed1d29
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:14:10 2020 +0200
Proper HDR from point lights.
commit 48c93d2b41ce5743103d18e76cc228f5ac766492
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 14:01:43 2020 +0200
Brighter ambiance, darker LOD shadows.
commit e0452e895ccfa8a43f368cae3b8b8aedc24dad93
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 13:13:23 2020 +0200
More proper HDR.
commit 4c6da3ed16cfeebb455e40da5f557b4af9a499d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 00:13:10 2020 +0200
Trying LOD noise.
commit 682a3d74c85df5503ffe1fc1cc891bce789df1ad
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 23:11:08 2020 +0200
Fix LOD heights in towns.
commit cc39e5734e8b18f9077bf42e66337c1319dd6b6e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 21:01:23 2020 +0200
More LOD fixes.
commit 8116b21c2e51c836e77894e309ac273caf2917b3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:54:43 2020 +0200
I like this coloring.
commit bc2560ea90b36f4b46190005344232d993043ac3
Merge: 14effdd5d e690efe71
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:48:33 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 14effdd5db8747fcf3eb34f03b46b7792e92d1c5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:24:35 2020 +0200
Re-saturate.
commit 48a643955d4435b78179acba0beb4a979905cc31
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:23:57 2020 +0200
Various fixes.
commit f7b497a0c25f4ad4682c71dd1ed6f608052feb9b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 03:22:49 2020 +0200
Render figures again.
commit 44e4aad48deba8266b9f8bdfd3db096b381f5327
Merge: e6f0a5a98 9ec319a18
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 02:01:04 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit e6f0a5a981a82533ba188fff0a54ce98577bb152
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 24 16:12:20 2020 +0200
Add atmospheric scattering.
commit f2953087f691a8edbc001cb98ebf5059fc6f8ac0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 23 00:01:20 2020 +0200
Fix shadowing for specular reflections.
commit ddd4a67a9799b8d08c7dc0c2bec90621c2bed0e3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Apr 22 22:56:12 2020 +0200
HDR fixes.
commit 1015e60deef3c447381996277df7496707a63bd0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 21 18:25:19 2020 +0200
More lighting changes.
commit 80c264abd111fb237e57843efcb5c071d4f84613
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 13 00:29:59 2020 +0200
Lighting experiments.
commit 8414987e589dd5102bad89762a3adaccc0bfe957
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 9 02:38:40 2020 +0200
WIP -- lighting changes and soft shadows.
commit 9cd2b3fb0d6b49776c6dfe463e4169637250b11a
Merge: c7ea687eb 8b149ad11
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:29 2020 +0200
Merge branch 'sharp/new-lighting' into sharp/small-fixes
commit c7ea687ebbc5aace1b455f134a5bf49ce2c7434a
Merge: 476441531 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:02 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 8b149ad11ad4bb75018fcf9519baec27d1c95951
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:32:39 2020 +0200
Trying out a new lighting model.
commit b0ac9f36f755dd06f7c17c46150568064790864f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 07:56:11 2020 +0200
Use bicubic interpolation for terrain.
commit f6fc9307a121514b614bc50ef8eb055953e7da8a
Merge: 33140a295 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 05:01:41 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 4764415312aae6e9ac2d00e86e84577cb958f1ab
Merge: ed2d0111d 13388ee6a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 04:54:48 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 13388ee6a42943f3f79a9cb488346cef18e272fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 20:30:08 2020 +0200
Various fixes (to coloring and to soft shadows).
commit fbd084a94a067082a87cd6d28b82054709bc9265
Merge: 5a089863b 4fdf6896a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 18:50:38 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/map-colors
commit ed2d0111d994262ae836d84d1fe5a45e4de72a0b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 06:49:27 2020 +0200
Combining colors and LOD.
commit 88342640c6b835114d01c797b89fdede3b0a2108
Merge: 33140a295 5a089863b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:49:20 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 33140a2951b8212725f42c758b277aaec4d888f7
Merge: 4c65a5aed f34d4b379
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:36:21 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 5a089863beb01d4794bbe3580ada47b278715ea2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 03:17:49 2020 +0200
Making maps brighter.
This is probably not the right way to do it, but oh well!
commit 32b2c99109dd486aa922886081068f9c550c83f2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 02:46:36 2020 +0200
Horizon mapping and "layered" map generation.
Horizon mapping is a method of shadow mapping specific to height maps.
It can handle any angle between 0 and 90 degrees from the ground, as
long as know the horizontal direction in advance, by remembering only a
single angle (the "horizon angle" of the shadow map). More is explained
in common/src/msg/server.rs. We also remember the approximate height of
the largest occluder, to try to be able to generate soft shadows and
create a vertical position where the shadows can't go higher.
Additionally, map generation has been reworked. Instead of computing
everything from explicit samples, we pass in sampling functions that
return exactly what the map generator needs. This allows us to cleanly
separate the way we sample things like altitudes and colors from the map
generation process. We exploit this to generate maps *partially* on the
server (with colors and rivers, but not shading). We can then send the
partially completed map to the client, which can combine it with shadow
information to generate the final map. This is useful for two reasons:
first, it makes sure the client can apply shadow information by itself,
and second, it lets us pass the unshaded map for use with level of
detail functionality.
For similar reasons, river generation is split
out into its own layer, but for now we opt to still generate rivers on
the server (since the river wire format is more complicated to compress
and may require some extra work to make sure we have enough precision to
draw rivers well enough for LoD).
Finally, the mostly ad-hoc lighting we were performing has been (mostly)
replaced with explicit Phong reflection shading (including specular
highlights). Regularizing this seems useful and helps clarify the
"meaning" of the various light intensities, and helps us keep a more
physically plausible basis. However, its interaction with soft shadows
is still imperfect, and it's not yet clear to me what we need to do to
turn this into something useful for LoD.
commit f8926a5737ddc51f3d585c651a64c43677aae0f4
Merge: a1aee931e 875ae6ced
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Mar 13 13:32:42 2020 +0100
Merge remote-tracking branch 'origin/master' into sharp/map-colors
commit 4c65a5aed353b119aea65a2aaeb94549b67beb42
Author: Treeco <5021038-Treeco@users.noreply.gitlab.com>
Date: Mon Feb 24 16:48:05 2020 +0000
Made LOD setting slider exponential
commit 2fa7b2d20d7233dc8bfd64f9f7f54617575248f1
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 17:49:53 2020 +0000
Added mist to LoD
commit aab059a450b5f635777129ff82cc15b662965c3c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 15:14:06 2020 +0000
Added LoD slider
commit 779c36b538121c5ade3633ae5cb67bb14c8c3877
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:54:55 2020 +0000
Reduced cost of vertex pushing
commit 9fea150473906b166365b738ebcea07c697daf3d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:38:53 2020 +0000
Fixed maths, improved LoD resolution
commit 5481df38fea5bf183ff376a3337179cfaa5233dc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 11:22:50 2020 +0000
Dynamically relocate LoD vertices to enhance details
commit a3e36a50ababd615da7db1b26158c7906a5def01
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 18:13:51 2020 +0000
Simpler terrain spiral rendering
commit 255f450ae9ac8763db4bede075fb409161ed57cc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:53:17 2020 +0000
Better LoD precision
commit 3d027aebe812a5b8658a4eb8123dc9f61b3776d2
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:04:03 2020 +0000
Better falloff
commit be775c9484b457b2c0b1a494aec03392d0c70e76
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 15:30:45 2020 +0000
Applied good ideas from experimental branch
commit 58587b68545a23c5c04ab4574a4b94b3bc982246
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 16:15:13 2020 +0000
Minor fixes to LoD merging
commit 7b42aebd709c14df2db766aad61d9280ad24d84d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 15:04:44 2020 +0000
Capped LoD dragging
commit 8aafc559f87124e1ea5ca6e3ddc2aa0c242d793c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:54:37 2020 +0000
Better blending between LoD and terrain border
commit edd3455d5161792d87ddc8eadc0ecbad5532b284
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:40:19 2020 +0000
Fixed LoD z depth, added sea level offset
commit b9b06744620114dd5556e73f64fa93c145503a7c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:27:43 2020 +0000
Better LoD smoothing
commit a1aee931e790431560cd2d953ad61d9497072afd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Feb 21 14:52:17 2020 +0100
Adding shadows.
commit 2400786c13dd891c131ed86d48d05df516a8a778
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 13:48:40 2020 +0000
Use world map as LoD source
commit dbf650f504a4c25fbbc2096ac3616c736bf52d23
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Jan 20 00:48:14 2020 +0000
Better clouds at distance
commit 5e6f81b86cdb9730b9b056877b19257075fd5fa8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Jan 19 23:59:02 2020 +0000
sync
commit 745e7540ddb000cc645f612767b337c2ddc3f7c0
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 12:40:48 2019 +0000
Improved cloud falloff mist, faster noise sampling
commit f6a200d0cb866196ba57697466755f9e0c7ea5d8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 10:09:00 2019 +0000
Improved long-range depth precision, removed unnecessary LoD polygons
commit 63d1b2bb2292898d59fb4f4e502201103dfeb86f
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 20:57:46 2019 +0000
Working LoD shader
commit f13d98ee3e58f881e8b978861a67663b59ed91ec
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 11:03:40 2019 +0000
LoD first attempt (stack overflow issue)
2020-08-20 18:34:59 +00:00
|
|
|
|
let chunk_pos = uniform_idx_as_vec2(self.map_size_lg(), ij);
|
2020-01-13 04:12:56 +00:00
|
|
|
|
let i = chunk_pos.x as usize;
|
|
|
|
|
let j = chunk_pos.y as usize;
|
2019-06-26 00:27:41 +00:00
|
|
|
|
let block_pos = Vec2::new(
|
common: Rework volume API
See the doc comments in `common/src/vol.rs` for more information on
the API itself.
The changes include:
* Consistent `Err`/`Error` naming.
* Types are named `...Error`.
* `enum` variants are named `...Err`.
* Rename `VolMap{2d, 3d}` -> `VolGrid{2d, 3d}`. This is in preparation
to an upcoming change where a “map” in the game related sense will
be added.
* Add volume iterators. There are two types of them:
* _Position_ iterators obtained from the trait `IntoPosIterator`
using the method
`fn pos_iter(self, lower_bound: Vec3<i32>, upper_bound: Vec3<i32>) -> ...`
which returns an iterator over `Vec3<i32>`.
* _Volume_ iterators obtained from the trait `IntoVolIterator`
using the method
`fn vol_iter(self, lower_bound: Vec3<i32>, upper_bound: Vec3<i32>) -> ...`
which returns an iterator over `(Vec3<i32>, &Self::Vox)`.
Those traits will usually be implemented by references to volume
types (i.e. `impl IntoVolIterator<'a> for &'a T` where `T` is some
type which usually implements several volume traits, such as `Chunk`).
* _Position_ iterators iterate over the positions valid for that
volume.
* _Volume_ iterators do the same but return not only the position
but also the voxel at that position, in each iteration.
* Introduce trait `RectSizedVol` for the use case which we have with
`Chonk`: A `Chonk` is sized only in x and y direction.
* Introduce traits `RasterableVol`, `RectRasterableVol`
* `RasterableVol` represents a volume that is compile-time sized and has
its lower bound at `(0, 0, 0)`. The name `RasterableVol` was chosen
because such a volume can be used with `VolGrid3d`.
* `RectRasterableVol` represents a volume that is compile-time sized at
least in x and y direction and has its lower bound at `(0, 0, z)`.
There's no requirement on he lower bound or size in z direction.
The name `RectRasterableVol` was chosen because such a volume can be
used with `VolGrid2d`.
2019-09-03 22:23:29 +00:00
|
|
|
|
chunk_pos.x * TerrainChunkSize::RECT_SIZE.x as i32,
|
|
|
|
|
chunk_pos.y * TerrainChunkSize::RECT_SIZE.y as i32,
|
2019-06-26 00:27:41 +00:00
|
|
|
|
);
|
2019-07-01 18:40:41 +00:00
|
|
|
|
let _cell_pos = Vec2::new(i / cell_size, j / cell_size);
|
2019-06-22 21:44:27 +00:00
|
|
|
|
|
|
|
|
|
// Find the distance to each region
|
|
|
|
|
let near = gen.get(chunk_pos);
|
|
|
|
|
let mut near = near
|
|
|
|
|
.iter()
|
|
|
|
|
.map(|(pos, seed)| RegionInfo {
|
|
|
|
|
chunk_pos: *pos,
|
common: Rework volume API
See the doc comments in `common/src/vol.rs` for more information on
the API itself.
The changes include:
* Consistent `Err`/`Error` naming.
* Types are named `...Error`.
* `enum` variants are named `...Err`.
* Rename `VolMap{2d, 3d}` -> `VolGrid{2d, 3d}`. This is in preparation
to an upcoming change where a “map” in the game related sense will
be added.
* Add volume iterators. There are two types of them:
* _Position_ iterators obtained from the trait `IntoPosIterator`
using the method
`fn pos_iter(self, lower_bound: Vec3<i32>, upper_bound: Vec3<i32>) -> ...`
which returns an iterator over `Vec3<i32>`.
* _Volume_ iterators obtained from the trait `IntoVolIterator`
using the method
`fn vol_iter(self, lower_bound: Vec3<i32>, upper_bound: Vec3<i32>) -> ...`
which returns an iterator over `(Vec3<i32>, &Self::Vox)`.
Those traits will usually be implemented by references to volume
types (i.e. `impl IntoVolIterator<'a> for &'a T` where `T` is some
type which usually implements several volume traits, such as `Chunk`).
* _Position_ iterators iterate over the positions valid for that
volume.
* _Volume_ iterators do the same but return not only the position
but also the voxel at that position, in each iteration.
* Introduce trait `RectSizedVol` for the use case which we have with
`Chonk`: A `Chonk` is sized only in x and y direction.
* Introduce traits `RasterableVol`, `RectRasterableVol`
* `RasterableVol` represents a volume that is compile-time sized and has
its lower bound at `(0, 0, 0)`. The name `RasterableVol` was chosen
because such a volume can be used with `VolGrid3d`.
* `RectRasterableVol` represents a volume that is compile-time sized at
least in x and y direction and has its lower bound at `(0, 0, z)`.
There's no requirement on he lower bound or size in z direction.
The name `RectRasterableVol` was chosen because such a volume can be
used with `VolGrid2d`.
2019-09-03 22:23:29 +00:00
|
|
|
|
block_pos: pos
|
|
|
|
|
.map2(TerrainChunkSize::RECT_SIZE, |e, sz: u32| e * sz as i32),
|
2019-06-22 21:44:27 +00:00
|
|
|
|
dist: (pos - chunk_pos).map(|e| e as f32).magnitude(),
|
|
|
|
|
seed: *seed,
|
|
|
|
|
})
|
|
|
|
|
.collect::<Vec<_>>();
|
|
|
|
|
|
|
|
|
|
// Sort regions based on distance
|
|
|
|
|
near.sort_by(|a, b| a.dist.partial_cmp(&b.dist).unwrap());
|
|
|
|
|
|
2019-10-16 11:39:41 +00:00
|
|
|
|
let nearest_cell_pos = near[0].chunk_pos;
|
|
|
|
|
if nearest_cell_pos.x >= 0 && nearest_cell_pos.y >= 0 {
|
|
|
|
|
let nearest_cell_pos = nearest_cell_pos.map(|e| e as usize) / cell_size;
|
2020-01-13 04:12:56 +00:00
|
|
|
|
chunk.location = loc_grid
|
2019-10-16 11:39:41 +00:00
|
|
|
|
.get(nearest_cell_pos.y * grid_size.x + nearest_cell_pos.x)
|
|
|
|
|
.cloned()
|
|
|
|
|
.unwrap_or(None)
|
|
|
|
|
.map(|loc_idx| LocationInfo { loc_idx, near });
|
2020-02-07 22:19:25 +00:00
|
|
|
|
}
|
2020-01-13 04:12:56 +00:00
|
|
|
|
});
|
2020-04-11 00:09:01 +00:00
|
|
|
|
*/
|
2019-08-24 13:23:42 +00:00
|
|
|
|
|
2020-01-25 20:43:34 +00:00
|
|
|
|
// Create waypoints
|
2020-01-26 00:06:03 +00:00
|
|
|
|
const WAYPOINT_EVERY: usize = 16;
|
2020-01-25 20:43:34 +00:00
|
|
|
|
let this = &self;
|
(See sharp/lod-history) LOD, shadows, greedy meshing, new lighting, perf
---
Pretty much a Veloren fork at this point. Here's a high level overview of the changes (will be added to CHANGELOG just before merge).
At a high level this MR incorporates roughly two groups of changes.
The first group consists of new game features: more flexible map sizes, level of detail terrain, shadow maps, and a new lighting
engine. This is "feature work" that (mostly) only adds new things to Veloren, and mostly shouldn't affect old stuff.
The second big group of changes are those addressing the fallout from all the new features. These include performance fixes of
various sorts: the addition of multiple graphics options and optimization of the cheap ones to avoid work, switching all voxel
models to use some variant of greedy meshing, switching over much of our CPU-side vector math to exploit SIMD instructions
(coinciding with a fork of `vek`), and a rewrite of how the UI handles text rendering (coinciding with updates to our fork
of `conrod`). Making Veloren's hardcoded colors appear correct under the new lighting engine also required considerably
changes (TODO: Fill in this section when it's complete).
The second category of changes often heavily touches code owned by other people, including frequently modified code "owned" by a
handful of people, so I recommend that this code be reviewed particularly carefully.
---
At a high level (each will be described in more detail below):
- The world map has been refactored.
- The world size is no longer hardcoded (@zesterer).
- The map generation code was made generic to allow using it outside of the `world` crate (@zesterer).
- On world creation, we now compute *horizon maps* (@zesterer).
- The way we pass the world from the server to the client has been updated (@xMAC94x).
- Artifacts related to image rotation were fixed (@imbris).
- Multiflow rivers were enabled (@zesterer).
- In the process of making changes related to the world map, various incidental fixes and optimizations were required.
- The new *level of detail* feature was added (@zesterer wrote part of this and has checked out the rest).
- A new LOD terrain rendering step was added to the pipeline.
- The LOD terrain quality was made configurable via a graphics setting.
- Horizon maps were used to cast shadows from LOD chunks on both LOD and non-LOD terrain.
- A "voxelization" effect was incorporated into rendered LOD terrain to make it blend better into the world.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Veloren's lighting has been completely overhauled (@zesterer has already checked most of this out).
- A semi-accurate index of refraction was assigned to our materials.
- A new, more realistic, physically based approach to lighting was used using the *Ashikhmin Shirley* BRDF.
- We emulate *atmospheric scattering* using equations designed for measuring solar panel light exposure.
- We attempt to compute *realistic light attenuation* in water using its real material properties.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Point and directional lights now cast realistic shadows, using *shadow mapping.* (@imbris, @zesterer, @Treeco, @YuriMomo)
- Point light shadow maps were added to the rendering pipeline, using geometry shaders and *seamless cube maps*.
- Directional light shadows were added to the rendering pipeline, using LISPSM together with disabling *depth clamping*.
- "Shadow-only" chunks and NPCs were added to prevent shadows from models behind you from disappearing.
- In the process of making changes related to shadow maps, various incidental fixes and optimizations were required.
The addition of shadow maps, LOD terrain, and the new lighting all led to significant performance degradation, on top of other
changes happening in master. Therefore, a large number of performance improvements were also needed:
- The graphics options were made much more flexible and configurable, and shaders were optimize.
- New options were provided for how to render lights and shadows (@Pfauenauge, @zesterer).
- Graphic setting storage and configuration were overhauled to make adding new features easier (@Pfauenauge, @imbris).
- Shaders were rewritten to utilize GLSL's preprocessor to avoid overhead (@zesterer, @YuriMomo).
- In the process of making changes related to providing additional rendering options, various incidental fixes and optimizations were required.
- Voxel model creation was switched to use *greedy meshing.*
- A new voxel meshing method, greedy meshing, was added (@imbris).
- Uses of the older meshing methods were migrated to use greedy meshing (@imbris, @jshipsey, @Pfauenauge).
- New restrictions were added to terrain, figure, and sprites to future proof them for further optimizations (@jshipsey, @Pfauenauge, @zesterer).
- Most positions are now relative to either chunk or player position for better precision (@imbris, @zesterer, @scottc).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- Animation and terrain math were switched to use SIMD where possible.
- Fixes were made to vek to make its SIMD feature usable for us (@zesterer, @imbris).
- The interface and types used in bone animation were changed in various ways (@jshipsey, @Snowram, @Pfauenauge).
- Redundant code generation for body animation is now partly taken care of by a macro (@jshipsey, @Snowram, @Pfauenauge).
- Animation code was modified to to use vek's SIMD representation where possible (@jshipsey, @Snowram, @Pfauenauge).
- Terrain meshing code and shadow map math were also modified to use vek's SIMD representation (@imbris).
- SIMD instruction generation was enabled (@YuriMomo, @jshipsey, @Snowram, @imbris, @Angelonfira, @xMAC94x).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- The way we cache glyphs was completely refactored, fixed, and optimized.
- Our fork of `conrod` was optimized in various ways (@imbris).
- Our fork of `conrod` now exposes whether a widget was updated during the current frame (@imbris).
- Our use of the glyph cache was rewritten for correctness (@imbris).
- A *text cache* was introduced that lets us skip remeshing glyphs that have not changed (@imbris).
- Various changes were made to reduce pressure on the glyph cache, with more planned (@imbris, @Pfauenauge).
- In the process of making changes related to the glyph cache, various incidental fixes and optimizations were required.
- Colors were changed to keep Veloren's look consistent with master.
- Some older tree models were brought back (@Pfauenauge).
- TODO(@Sharp): All hardcoded colors were extracted and made hotloadable.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Hardcoded colors were fixed to conform to Veloren's style.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Color models were fixed to conform to Veloren's style.
A detailed description of the involved changes follows.
---
- The world size is no longer hardcoded. All functions dependent on world size now take a `WorldSizeLg`, which holds the base 2 logarithm of each actual world dimension and is guaranteed to maintain certain properties (outlined in `common/src/terrain/map.rs`). Additionally, many utility functions that utilize the world size were moved into `common` as well (mostly `common/src/terrain/mod.rs`). Finally, the world map format was updated in order to store its size explicitly, with a migration path from the old format that should work whenever the old formatted map was a square (practically always). See `world/src/sim/mod.rs` for these changes.
- The map generation code was made generic to allow using it outside of the `world` crate. The parts of the map generating code that do not need to query the world were moved over to `common/src/terrain/map.rs`, allowing them to be used from the client without creating a dependency on `world`. The rest of it was turned into helper functions in `world/src/sim/map.rs`, which can be passed as closures to the generic map generation code to complete its construction. This also means that colors are now passed in separately to the map generation function. See <https://veloren.net/devblog-78/> for more details.
- On world creation, we now compute *horizon maps*. See the function in `world/src/sim/util.rs`.
Given a height map and a plane intersecting that height map, our horizon maps allow us to encode enough information to reconstruct shadows for each point on the height map using only the *horizon angle* (the angle at which the sun starts to become visible). As Veloren's sun only covers one plane, this is sufficient for encoding sun shadows for LOD terrain, by encoding two angles per chunk (one for each 90 degrees the sun covers). We can also use this for the moon, if we want, since the moon follows the same path. Additionally, we store the *height* of the furthest occluder, to try to make the shadows volumetric; so this means 4 bytes in total for each chunk.
Support for horizon maps has been merged into the map functionality in common as well.
- The way we pass the world from the server to the client has been updated. Rather than passing the prerendered map, we instead pass three maps with values for each chunk; one with the color information, a second with altitude information, and a third with horizon map information. We then reconstruct the map on the client, together with some additional information we send from the server (like the sea level and maximum height). See `common/src/msg/server.rs` for a detailed description of the format of `WorldMapMsg`, and `server/src/libr.rs` and `client/src/lib.rs` for details of the map construction and parsing.
- Artifacts related to image rotation were fixed. See the commit message for commit SHA `cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e` for a detailed explanation. This involved changes to shaders, the addition of a new type of graphic (also reflected in the graphic cache) that allows specifying a border color (which automatically makes the associated texture immutable), and some related fixes. I reproduce the first two paragraphs of the MR description as well:
```
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
```
- Multiflow rivers were enabled.
This does not really need to be part of this MR, and would be easy to revert, but since it seemed to provide a nice improvement it's currently packaged with it.
We already computed multiple outflows from each chunk for erosion purposes long before this MR.
However, we never modified river rendering to be able to handle this case (just a single downhill river flow is complex enough!) so this was not exposed when deciding which chunks were rivers.
Now that
- In the process of making changes related to the world map, various incidental fixes and optimizations were required. Some examples of fixes include making sure terrain is never lowered to below sea level (to make the shadow maps report correct values), fixing map altitudes and colors to understand things like cliffs and "block level" coloring (that doesn'te xist on the column level), and fixing a crashbug when rendering images for the UI where source pixels are strongly rectangular. Some examples of related performance fixes include avoiding allocating a fresh vector for all the maps (i.e. copying it over to change the format from `[u32; n]` to `DynamicImage` and then copying again to convert to `RgbaImage`), and instead using the `gfx::memory::slice` function to accomplish the same thing. These sorts of changes are spread all arond the code.
This includes the additon of a new scene, `voxygen/src/scene/lod.rs`, a new pipeline `voxygen/src/render/pipeline/lod_terrain.rs`, and new shaders `assets/vxygen/shaders/lod-terrain-vert.glsl` and `assets/vxygen/shaders/lod-terrain-frag.glsl`, as well as associated changes to the renderer in `voxygen/src/render/renderer.rs`.
The main idea behind our initial approach to LOD was to take the world data we now get from the server (altitude, color, and horizon mapping).
- Some previously computed values were turned into shader uniforms for better prediction on weak processors. (@zesterer)
- Calls to power or trig functions were removed or replaced with multiplications, where possible.
- After some deliberation
- To properly handle sprite "waving" for nearby sprites,
We explicitly designed the greedy meshing system with figures and sprites in mind.
In both cases, we want to be able to *efficiently* pack many different models into the same texture, especially in cases where we know
we will either not be removing any of the grouped-together from the models from the texture, or will remove all of them at once (so
they can be packed into some specific subtexture).
For sprites, since we know every model in advance and never intend to deallocate them, we currently pack them all as efficiently as
possible into one giant tetxure atlas. However, in the future we might opt to pack them slightly less efficiently in exchange for
shrinking the sprite vertex size.
For figures, we pack all the textures for each *model* into the same atlas.
is a global texture atlas used for every sprite, and for figures which is why we have the ability to mesh multiple
models to the same texture area (using the simple texture atlas allocator) without requiring intermediate vector allocations.
This is accomplished by delaying the time when we actually write the color and light data to the texture until *after* all the
model vertices have been meshed; then, we can just allocate the whole color/light array at once, making the atlas we use an
exact fit. In computer science-y terms, we accomplish this delay by, after we perform the initial greedy meshing (without
texture information), not continuing to create the texture data, but instead constructing a *continuation*--that is, a function
that, when called, will execute the rest of the computation. We push this continuation (which in Rust terms is a `FnOnce` closure
that takes the `ColLightsInfo` that it is supposed to write to as context) onto a
onto a vector
resizing. To allow for suspended writes to texture data, Rust pointed out to me that the continuation that would eventually write the color and light data to the texture atlas (the one that is shared by all models sharing the same greedy mesher) would have to *own* whatever data it mshed. Because we often generate the model data to mesh as a temporary in `voxygen/src/load.rs`, the
- Matrix multiplications in the shader were reduced for figure data (@zesterer).
- Vertex "waves" for fluid data were removed.
- Terrain "bending" near edges was removed.
- Scaling was fixed to make sure empty space was not introduced in a space previously occupied by a block. It was also changed to take ownership of its voxel data,
rather than sharing it, to let it be used with meshing.
- Rust's nightly version was bumped in order to use the `array_map` function, which lets us reuse more code between the simple map and `FigureModelCache`.
- PositionedGlyph::standalone.
---
I tried to cite sources in many cases[^realtime],[^lloyd],[^lispsm],[^pbrt],[^greedy],[^tjunctions]
where I needed features from elsewhere but I am particularly grateful for the following resources,
esepcially where they have accompanying source code. I linked all of them that are accessible to the public (those that are not were
obtained through legal means).
[^realtime]: Eisemann, Elmar, Michael Schwarz, Ulf Assarsson, Michael Wimmer. Real-Time Shadows. A K Peters/CRC Press (T&F), 20160419.
[^lloyd]: Lloyd,B. 2007. [Logarithmic perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). PhD thesis, University of North Carolina.
[^lispsm]: Wimmer, M., Scherzer, D., and Purgathofer, W. 2004. [Light space perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). In Proceedings of Eurographics Symposium on Rendering 2004, pp. 143– 152.
[^pbrt]: Pharr, Matt, et al. [http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf](Physically Based Rendering: From Theory to Implementation). Third edition, Morgan Kaufmann Publishers/Elsevier, 2017.
[^greedy]: mikolalysenko. “Meshing in a Minecraft Game.” 0 FPS, 30 June 2012, <https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/>.
[^tjunctions]: blackflux. “Meshing in Voxel Engines – Part 1.” Blackflux.Com, 23 Feb. 2014, <https://blackflux.wordpress.com/2014/02/23/meshing-in-voxel-engines-part-1/>.
I am also especially grateful to Khronos, Wikiepdia, and stackoverflow for answering many of my specific questions while writing the MR.
---
Squashed commit of the following:
commit 300505e7305a2fdac722a808ee8538323f215f39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 18:46:25 2020 +0200
Fixing cargo doc and typo in CHANGELOG.
commit ec0aeb18e8499d7d84ef818331b4b65c3d76cea6
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 15:38:50 2020 +0200
Hopefully final commit for the LOD branch.
commit 5e8ea0b1eaac02903a02feb2eb038d195de4872f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 10:14:26 2020 +0200
Falling back to power as stopgap.
commit e44a1cbf46504ee9931a01bdc9033e145500d557
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 09:25:41 2020 +0200
Address imbris feedback.
Temporarily disables shiny water, lowers max VD.
These restrictions will be lifted soon after merging.
commit 561e25778a108ac3712f5ec2ce3a51234c4430d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 08:31:13 2020 +0200
Tweaking shaders a bit.
commit 7d19259078ce0dd7b3742ad7d0cb3fab3ece3fdc
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:59:43 2020 +0200
Fix view example as well.
commit 051cd4934e0fad2c0b15db4380a4189fa318679f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:29:06 2020 +0200
Fix meshing benchmark.
commit c95e07db3b4dcca285678985e65e31b927cb1c61
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 05:46:22 2020 +0200
Address MR feedback, fix scene clouds.
commit 1bfb816cabdb3ffc1e507a009c2d98696b4b573a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:39:36 2020 +0200
Incorporating Pfau's figure color changes.
New eyes and new humanoid colors.
commit 3f9b89a3ac7b3356b1dba0d1a8f6541357f81469
Merge: e2f5162e4 62c53963a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:29:41 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit e2f5162e4f96f4124aa43488f7245d341b3dcfd4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:28:38 2020 +0200
World colors are all hotloadable.
They live in assets/world/style/colors.ron.
Only a small handful of hardcoed colors remain in World; they are either
part of the map, or difficult to disentangle from the rest of the
computation. Comments are made where appropriate.
commit 62c53963abe1975009d34a8f9515a355bef24f31
Author: Marcel Märtens <marcel.cochem@googlemail.com>
Date: Wed Aug 19 15:59:00 2020 +0200
replace pretty_env_logger with tracing
commit 5b1625f99d9586fe80e2232f583ec5af9f953099
Merge: d71003acd 4942b5b39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:15:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit d71003acdabeff970b3928e97c26af6847b5b78e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:14:34 2020 +0200
Hotloading colors, part 1: colors in common.
Currently, this just entails humanoid colors. There are only three
colors not handled; the light emitter colors in
common/src/comp/inventory/item/tool.rs. These don't seem important
enough to me to warrant making hotloadable, at least not right now, but
if it's needed later we can always add them to the file.
commit 63b5e0e553eb2ea49276f192a6fc7dd65254270d
Merge: c32b337a4 6d2c4b9c1
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 13:05:37 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c32b337a46e10d9de473d178a94a3ccd61c39bb3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:52:04 2020 +0200
Fixing LOD grid, for real.
commit a166ae0360395387e09fb35a1f84210c2ce5ec24
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:28:05 2020 +0200
Addressing imbris's initial feedback.
Fixes two minor bugs: explosion particles were no longer spawning
randomly, and LOD grids were not perfectly even.
commit 4cbad004f44060994252dd3d38647a14a589712f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:27:58 2020 +0200
Bumping nightly per request.
commit 548680276aac77c25d43d16b5622f847d474dbef
Merge: acc098604 8f8b20c91
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:26:06 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit acc0986040589a3492f88a740bc3c3fc693b26d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:28:32 2020 +0200
Lower resolution due to lying drivers.
commit d3b878de2a52c358d2944a6bbd0555dad7fbdb10
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:15:38 2020 +0200
Fix issues msh encountered with Intel 4600.
commit 10245e0c1b0cb6fae10d86409435364edc6102ef
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 21:15:02 2020 +0200
Merge more models into one mesh than we did previously.
commit 3155c31e663c52ae5c3a53d5fb5665892a1a498a
Merge: 7204cc8a7 3c199280e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:35:22 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7204cc8a7a4f74a30306bd205d9834fee4bb944f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:34:43 2020 +0200
Fix not yet done NPC animations.
This forces them all to be the idle animation if not specified.
This fixes issues where you'd have giant NPCs in water.
commit bc83360f2a08918f19d417b5f772e1ff554dba08
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 19:36:37 2020 +0200
Try to fix some bugs:
- Z fighting with LOD terrain and water.
- Audio SFX not playing.
commit 1fd104aa603bf3781b6526a5cada46aeca3049dd
Merge: 862df3c99 7c2c392a3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 12:02:31 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 862df3c9976c4da9bd7cfd784f1a85973127968a
Merge: 0a4218ed9 75c1d4401
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 05:52:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0a4218ed9d541a2b34c133351bea38a99ddf4ea7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 22:27:14 2020 +0200
Fix particle depth.
commit f51dfdeb442d0dd5243dd2f344fa4be295bd0875
Merge: c6251a956 5e6dc0471
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:19:04 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit c6251a956ad376400dca5c23420cf8d213dc8fdf
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:15:46 2020 +0200
Cache figures more intelligently.
Cache figures for longer, and don't cache character states for the
player except where they actually affect the rendered model.
commit 0ed801d5404982c6fb63b1eaa4567d908b294c9d
Merge: c11b9bdf0 eea64f78f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 16:32:24 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c11b9bdf0a53bf9884d2f5a48fec9b01d582df1a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 11:47:15 2020 +0200
Remove unneeded Clippy annotation.
commit 16aa9ef40af56d69289d00aafb3deadfb8bd4f35
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 8 00:53:02 2020 +0200
Fix hotloading and Clippy.
commit 3dc973e0be5b758da1e9805eb764ad401374cd0c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 23:50:27 2020 +0200
Major speedups with SIMD.
commit fba64a7d93d5a96077ce87287bbce6ab9b7fbcae
Merge: 76429d00e d1e10b178
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:19 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 76429d00eea00d212fbd672a84ee91e75b19b938
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:10 2020 +0200
Add clippy.toml.
commit c79f512f84dbb83cb82b7954db68ff241dfd8e41
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 11:55:20 2020 +0200
Fix all clippy issues, clean up Rust code.
commit 6f90e010b3fbefb53b0d632e819931350015b6b8
Merge: 77a8c7c26 5929cfa5c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:30 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 77a8c7c267d3f44a1a62bd6b2274359973c5e4d4
Merge: b44e44232 44febaabd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:10 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 5929cfa5c713aa392110bbb62407f76caf53c3df
Author: jshipsey <jshipsey18@gmail.com>
Date: Thu Aug 6 20:47:27 2020 -0400
fixed in-hand arrow bug
commit b44e442325d828f1cd564d66908f89d09e80474b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 6 13:40:35 2020 +0200
Miscellaneous performance improvements.
commit be37acf287c1360d8085862526ac3365ffd1d768
Merge: 125d7fc6c c11876547
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 05:49:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 125d7fc6c4dcd8c8c5f27b8268a4d64f409f3644
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 04:55:31 2020 +0200
Abstract over simd vs. repr_c vectors.
Also some minor improvements to Event size.
commit d4d4956e9252e1241ce110b2aa85076c6b1e2a23
Merge: 5f3b7294a aced5f979
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:56:54 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 5f3b7294af1f8533edc2620b58863c248e2b07af
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:43:52 2020 +0200
Fix formatting issues I missed before.
commit a428a3ebba70dcab63dd0f8cd983120c90617271
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:41:51 2020 +0200
Fix clippy warnings, part 1.
There aer still a bunch of type too complex and
function takes too many arguments warnings that I'll fix later
(or ignore, since in the one case I did fix a function takes too
many arguments warning I think it made the code *less* readable).
commit ba54307540ed8a937ac08209730284fc653af85b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 30 13:22:42 2020 +0200
Fix light animations so they are removed when the light turns off.
commit 7e0f4bcbf0f4717145d8beac40d52e3acebbe2aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 21:10:20 2020 +0200
Fix crash in edge case for pixel art.
commit 56da06f7a351e2b949e9b014a90b974d511a0924
Merge: cf74d55f2 9f53a4a19
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:56:52 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:29:52 2020 +0200
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
The first concern was addressed by fixing the dimensions of the map
images drawn from the UI (so that we always use a square source
rectangle, rather than a rectangular one according to the dimensions of
the map). We also fixed the way rotation was done in the fragment
shader for north-facing sources to make it properly handle aspect ratio
(this was already done for north-facing targets). Together, these fix
rendering issues peculiar to rectangular maps.
The second and third concerns were jointly addressed by adding an
optional border color to every 2D image drawn by the UI. This turns
out not to waste extra space even though we hold a full f32 color
(to avoid an extra dependency on gfx's PackedColor), since voxel
images already take up more space than Optiion<[f32; 4]> requires.
This is then implemented automatically using the "border color"
wrapping method in the attached sampler.
Since this is implemented in graphics hardware, it only works (at
least naively) if the actual image bounds match the texture bounds.
Therefore, we altered the way the graphics cache stores images
with a border color to guarantee that they are always in their own
texture, whose size exactly matches their extent. Since the easiest
currently exposed way to set a border color is to do so for an
immutable texture, we went a bit further and added a new "immutable"
texture storage type used for these cases; currently, it is always
and automatically used only when there is a specified border color,
but in theory there's no reason we couldn't provide immutable-only
images that use the default wrapping mdoe (though clamp to border
is admittedly not a great default).
To fix the maps case specifically, we set the border color to a
translucent version of the ocean border color. This may need
tweaking going forward, which shouldn't be hard.
As part of this process, we had to modify graphics replacement to
make sure immutable images are *removed* when invalidated, rather
than just having a validity flag unset (this is normally done by
the UI to try to reuse allocations in place if images are updated
in benign ways, since the texture atlases used for Ui do not
support deallocation; currently this is only used for item images,
so there should be no overlap with immutable image replacement,
so this was purely precautionary).
Since we were already touching the relevant code, we also updated
the image dependency to a newer version that provides more ways
to avoid allocations, and made a few other changes that should
hopefully eliminate redundant most of the intermediate buffer
allocations we were performing for what should be zero-cost
conversions. This may slightly improve performance in some
cases.
commit ad18ce939940a8c697270f6e9b94db9942fd8295
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 13:21:09 2020 +0200
Fix continent scale hack.
commit 36b1cb074f5b195aebd7dbbc3da7f0246a1a18ec
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 12:11:40 2020 +0200
Enable loading different sized maps without a recompile.
We may want to tweak the effects of the continent_scale_hack.
commit 13b6d4d534cc4814b7cb3294ca41bbfea0a6b186
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 10:55:48 2020 +0200
Removing WORLD_SIZE, part 1.
Erased almost every instance of WORLD_SIZE and replaced it with a local
power of two, map_size_lg (which respects certain invariants; see
common/src/terrain/map.rs for more details about MapSizeLg). This also
means we can avoid a dependency on the world crate from client, as
desired.
Now that the rest of the code is not expecting a fixed WORLD_SIZE, the
next step is to arrange for maps to store their world size, and to use
that world size as a basis prior to loading the map (as well, probably,
as prior to configuring some of the noise functions).
commit 30b1d2c6428230a9eaa0d749cdcbbd6f1cbccd78
Merge: 7d56ba31b 1377b369f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:58 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 7d56ba31b445441461b28a07fc495d7d4f047c17
Merge: 2101113b4 598f14b25
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 1377b369f6db2258e910d467a5740f31789e3ded
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sun Jul 19 23:25:38 2020 +0200
more saturated pumpkins
commit ae8d50527f93bb0616c2ad46ce4dacb63bc37c6d
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sat Jul 18 20:29:56 2020 +0200
acacia models
commit 2101113b467e691de787392d7f20f1745f5637bd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 18 18:55:25 2020 +0200
Higher detail LOD.
commit add2cfae04b4385fa5590e11e2bd5229d9dee0aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 16 01:57:39 2020 +0200
Revert some irrelevant stuff.
commit 2e2ab3dc1eaa59a4aef7f8d34a53d8aae4c8553a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 15 13:30:49 2020 +0200
Fixing various things about shadows.
* Correcting optimal LISPSM parameter.
* Figure shadows are cast when they're not visible.
* Chunk shadows stay cast until you look away.
* Seamless cubemaps for point lights.
* Etc.
commit 6c31e6b56217274285b597af297036691ea5d897
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 19:50:26 2020 +0200
Fix shadow creation.
commit 6332cbe006115ae205597529cd8bbccd146c2cca
Merge: be438657c 930e0028b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:47:00 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit be438657c33d7b5bfb0a9582c3ed3fd366637323
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:28:08 2020 +0200
Tweaks to shadows.
Added shadow map resolution configuration, added seamless cubemaps,
documented all existing rendering options, and fixed a few Clippy
errors.
commit 23b4058906013c7d2a40c286e20e32c5fbd897ed
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 10:11:19 2020 +0200
Fix moon, use nonlinear noise for terrain.
Note that the latter has a bit of performance cost.
commit 7fbe5cbfbb9dc29607957b8e62f432a4deed193d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:23:02 2020 +0200
Address lies about max texture size.
commit bcfc62b5e13a1cdd83f57535fde4694720bebfd9
Merge: 75e3626a7 18a08e8fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:22:08 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 75e3626a785919f43fdcf2127c2b10e3e4df2f9f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:21:52 2020 +0200
OpenGL 3.3 minimum.
commit 18a08e8fe2739f02af99a5d2cb4e7c38c49e858b
Author: Monty Marz <m.marzouq@gmx.de>
Date: Tue Jul 7 23:57:52 2020 +0200
settings localization
commit 90c5d1ca3620092bc3ae10b2211489eb1cf6f5e8
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 21:11:48 2020 +0200
Lower near distance.
commit 0e66f02b25aaddaa2dfddbbc89cd67de54a9a7b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 20:09:01 2020 +0200
All sprites sway in the wind now.
commit db1401a6910bf42dcf502462c90038752ff5fbdb
Merge: 69e508d8c e8b4b29d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 19:34:17 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 69e508d8c94d8973033817ca86f357e466fc7c4d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 18:41:37 2020 +0200
Make it easy to switch to SIMD for math.
commit ffe0f5928c7a7e87d00cb5426b3b1d831d7e02fd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 21:21:12 2020 +0200
Fix some issues with underwater rendering.
commit bfda6da42f38fd02c31ee92c81ab785a3e50c2a0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 19:17:59 2020 +0200
Fix some minor display issues.
commit 0ed752e087968cf901301884aaeae698e32ef8a5
Merge: ccc6a06a8 518edcb85
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:14:21 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit ccc6a06a8d4504d6b9f7af7905a414d2ee06ab76
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:04:34 2020 +0200
Some minor changes.
commit 4e020246702889269efe1a191788992164c508d6
Merge: 50a64d927 e05c9267a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 16:17:40 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 50a64d927e6c4f4b0e4688e4cbfca694bc3f922a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 13:07:03 2020 +0200
Fix far plane.
commit 7dd06da34cae8f9ea3b6c889fe965181f3fd3949
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:25:35 2020 +0200
Add shadows.glsl.
commit 618a18c998778bf871b905a74657440fcc384c80
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:10:22 2020 +0200
Adding shadows, greedy meshing, and more.
commit eaea83fe6a5cb1cb0ba8beef888183c718258496
Merge: 267018495 2f89b863e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 22:47:07 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 2670184954a13e4a9e7a4e35ba79aac0c5fac2f7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 21:20:01 2020 +0200
Make civsim and sites deterministic.
For anything in worldgen where you use a HashMap, *please* think
carefully about which hasher you are going to use! This is
especially true if (for some reason) you are depending on hashmap
iteration order remaining stable for some aspect of worldgen.
commit f8376fd5dc72b4a9c2f51a6b4570d59c8b8e9343
Merge: 654f7e049 cdee191dd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 17:53:57 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 654f7e049258d9da27c09608bbe6a46ffa8787e5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed May 20 21:22:30 2020 +0200
Correct backface culling.
commit 560501df05ca725409b0f2e4eb31bdfdc15fd0c7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue May 19 17:22:06 2020 +0200
Greedy messhing for shadows.
commit a4d87e1875ca543436e6bbbeb20348facc5a52d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun May 17 05:59:00 2020 +0200
Shadow maps work for lantern.
commit 243d0837b8a3b08172c9a3c348d964d7ddc2a0a8
Merge: 04382dc28 71dd520cd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:53:13 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 04382dc28632b6c66e8821f6870c0daaa1c1901a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:22:17 2020 +0200
WIP: better graphics config, better LOD, shadow maps.
commit 22ddbad3eb32bfa70f0932176022208fe67ded81
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 18:54:09 2020 +0200
Minor shader fixes.
commit 746a10e8d01ac235f994b0cde78fa48998602a1f
Merge: 0f4a0e763 40ab94673
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 04:02:09 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0f4a0e763db3afbdc4fb0558611f38326ca87151
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 23:03:24 2020 +0200
Switch back to pop-in terrain.
commit dd74fa7e4a53667b38811d7aec58d7f6a68889bb
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 22:58:55 2020 +0200
LOD shading closer to voxel shading.
commit ef67bd58ba0bdaf622b078892d768263b6cba268
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 28 20:49:03 2020 +0200
Experimental underwater lighting.
commit 2c5ad9d07605e80d5fd5679dd3a5d70c605b86a9
Merge: 748279835 303967a6f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 22:35:24 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7482798354eda18c8207950080fc24d443a369de
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 21:59:55 2020 +0200
Replace discard in figure-frag.
commit d83b4ae69be4912f69bf7835f509c68a1c7770a4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:45:57 2020 +0200
Fix sprite lighting, HDR from focus_pos.
commit 0594238004f116274905fa0ed7c2b6c417ed1d29
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:14:10 2020 +0200
Proper HDR from point lights.
commit 48c93d2b41ce5743103d18e76cc228f5ac766492
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 14:01:43 2020 +0200
Brighter ambiance, darker LOD shadows.
commit e0452e895ccfa8a43f368cae3b8b8aedc24dad93
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 13:13:23 2020 +0200
More proper HDR.
commit 4c6da3ed16cfeebb455e40da5f557b4af9a499d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 00:13:10 2020 +0200
Trying LOD noise.
commit 682a3d74c85df5503ffe1fc1cc891bce789df1ad
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 23:11:08 2020 +0200
Fix LOD heights in towns.
commit cc39e5734e8b18f9077bf42e66337c1319dd6b6e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 21:01:23 2020 +0200
More LOD fixes.
commit 8116b21c2e51c836e77894e309ac273caf2917b3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:54:43 2020 +0200
I like this coloring.
commit bc2560ea90b36f4b46190005344232d993043ac3
Merge: 14effdd5d e690efe71
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:48:33 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 14effdd5db8747fcf3eb34f03b46b7792e92d1c5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:24:35 2020 +0200
Re-saturate.
commit 48a643955d4435b78179acba0beb4a979905cc31
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:23:57 2020 +0200
Various fixes.
commit f7b497a0c25f4ad4682c71dd1ed6f608052feb9b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 03:22:49 2020 +0200
Render figures again.
commit 44e4aad48deba8266b9f8bdfd3db096b381f5327
Merge: e6f0a5a98 9ec319a18
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 02:01:04 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit e6f0a5a981a82533ba188fff0a54ce98577bb152
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 24 16:12:20 2020 +0200
Add atmospheric scattering.
commit f2953087f691a8edbc001cb98ebf5059fc6f8ac0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 23 00:01:20 2020 +0200
Fix shadowing for specular reflections.
commit ddd4a67a9799b8d08c7dc0c2bec90621c2bed0e3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Apr 22 22:56:12 2020 +0200
HDR fixes.
commit 1015e60deef3c447381996277df7496707a63bd0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 21 18:25:19 2020 +0200
More lighting changes.
commit 80c264abd111fb237e57843efcb5c071d4f84613
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 13 00:29:59 2020 +0200
Lighting experiments.
commit 8414987e589dd5102bad89762a3adaccc0bfe957
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 9 02:38:40 2020 +0200
WIP -- lighting changes and soft shadows.
commit 9cd2b3fb0d6b49776c6dfe463e4169637250b11a
Merge: c7ea687eb 8b149ad11
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:29 2020 +0200
Merge branch 'sharp/new-lighting' into sharp/small-fixes
commit c7ea687ebbc5aace1b455f134a5bf49ce2c7434a
Merge: 476441531 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:02 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 8b149ad11ad4bb75018fcf9519baec27d1c95951
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:32:39 2020 +0200
Trying out a new lighting model.
commit b0ac9f36f755dd06f7c17c46150568064790864f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 07:56:11 2020 +0200
Use bicubic interpolation for terrain.
commit f6fc9307a121514b614bc50ef8eb055953e7da8a
Merge: 33140a295 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 05:01:41 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 4764415312aae6e9ac2d00e86e84577cb958f1ab
Merge: ed2d0111d 13388ee6a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 04:54:48 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 13388ee6a42943f3f79a9cb488346cef18e272fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 20:30:08 2020 +0200
Various fixes (to coloring and to soft shadows).
commit fbd084a94a067082a87cd6d28b82054709bc9265
Merge: 5a089863b 4fdf6896a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 18:50:38 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/map-colors
commit ed2d0111d994262ae836d84d1fe5a45e4de72a0b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 06:49:27 2020 +0200
Combining colors and LOD.
commit 88342640c6b835114d01c797b89fdede3b0a2108
Merge: 33140a295 5a089863b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:49:20 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 33140a2951b8212725f42c758b277aaec4d888f7
Merge: 4c65a5aed f34d4b379
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:36:21 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 5a089863beb01d4794bbe3580ada47b278715ea2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 03:17:49 2020 +0200
Making maps brighter.
This is probably not the right way to do it, but oh well!
commit 32b2c99109dd486aa922886081068f9c550c83f2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 02:46:36 2020 +0200
Horizon mapping and "layered" map generation.
Horizon mapping is a method of shadow mapping specific to height maps.
It can handle any angle between 0 and 90 degrees from the ground, as
long as know the horizontal direction in advance, by remembering only a
single angle (the "horizon angle" of the shadow map). More is explained
in common/src/msg/server.rs. We also remember the approximate height of
the largest occluder, to try to be able to generate soft shadows and
create a vertical position where the shadows can't go higher.
Additionally, map generation has been reworked. Instead of computing
everything from explicit samples, we pass in sampling functions that
return exactly what the map generator needs. This allows us to cleanly
separate the way we sample things like altitudes and colors from the map
generation process. We exploit this to generate maps *partially* on the
server (with colors and rivers, but not shading). We can then send the
partially completed map to the client, which can combine it with shadow
information to generate the final map. This is useful for two reasons:
first, it makes sure the client can apply shadow information by itself,
and second, it lets us pass the unshaded map for use with level of
detail functionality.
For similar reasons, river generation is split
out into its own layer, but for now we opt to still generate rivers on
the server (since the river wire format is more complicated to compress
and may require some extra work to make sure we have enough precision to
draw rivers well enough for LoD).
Finally, the mostly ad-hoc lighting we were performing has been (mostly)
replaced with explicit Phong reflection shading (including specular
highlights). Regularizing this seems useful and helps clarify the
"meaning" of the various light intensities, and helps us keep a more
physically plausible basis. However, its interaction with soft shadows
is still imperfect, and it's not yet clear to me what we need to do to
turn this into something useful for LoD.
commit f8926a5737ddc51f3d585c651a64c43677aae0f4
Merge: a1aee931e 875ae6ced
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Mar 13 13:32:42 2020 +0100
Merge remote-tracking branch 'origin/master' into sharp/map-colors
commit 4c65a5aed353b119aea65a2aaeb94549b67beb42
Author: Treeco <5021038-Treeco@users.noreply.gitlab.com>
Date: Mon Feb 24 16:48:05 2020 +0000
Made LOD setting slider exponential
commit 2fa7b2d20d7233dc8bfd64f9f7f54617575248f1
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 17:49:53 2020 +0000
Added mist to LoD
commit aab059a450b5f635777129ff82cc15b662965c3c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 15:14:06 2020 +0000
Added LoD slider
commit 779c36b538121c5ade3633ae5cb67bb14c8c3877
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:54:55 2020 +0000
Reduced cost of vertex pushing
commit 9fea150473906b166365b738ebcea07c697daf3d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:38:53 2020 +0000
Fixed maths, improved LoD resolution
commit 5481df38fea5bf183ff376a3337179cfaa5233dc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 11:22:50 2020 +0000
Dynamically relocate LoD vertices to enhance details
commit a3e36a50ababd615da7db1b26158c7906a5def01
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 18:13:51 2020 +0000
Simpler terrain spiral rendering
commit 255f450ae9ac8763db4bede075fb409161ed57cc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:53:17 2020 +0000
Better LoD precision
commit 3d027aebe812a5b8658a4eb8123dc9f61b3776d2
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:04:03 2020 +0000
Better falloff
commit be775c9484b457b2c0b1a494aec03392d0c70e76
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 15:30:45 2020 +0000
Applied good ideas from experimental branch
commit 58587b68545a23c5c04ab4574a4b94b3bc982246
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 16:15:13 2020 +0000
Minor fixes to LoD merging
commit 7b42aebd709c14df2db766aad61d9280ad24d84d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 15:04:44 2020 +0000
Capped LoD dragging
commit 8aafc559f87124e1ea5ca6e3ddc2aa0c242d793c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:54:37 2020 +0000
Better blending between LoD and terrain border
commit edd3455d5161792d87ddc8eadc0ecbad5532b284
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:40:19 2020 +0000
Fixed LoD z depth, added sea level offset
commit b9b06744620114dd5556e73f64fa93c145503a7c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:27:43 2020 +0000
Better LoD smoothing
commit a1aee931e790431560cd2d953ad61d9497072afd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Feb 21 14:52:17 2020 +0100
Adding shadows.
commit 2400786c13dd891c131ed86d48d05df516a8a778
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 13:48:40 2020 +0000
Use world map as LoD source
commit dbf650f504a4c25fbbc2096ac3616c736bf52d23
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Jan 20 00:48:14 2020 +0000
Better clouds at distance
commit 5e6f81b86cdb9730b9b056877b19257075fd5fa8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Jan 19 23:59:02 2020 +0000
sync
commit 745e7540ddb000cc645f612767b337c2ddc3f7c0
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 12:40:48 2019 +0000
Improved cloud falloff mist, faster noise sampling
commit f6a200d0cb866196ba57697466755f9e0c7ea5d8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 10:09:00 2019 +0000
Improved long-range depth precision, removed unnecessary LoD polygons
commit 63d1b2bb2292898d59fb4f4e502201103dfeb86f
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 20:57:46 2019 +0000
Working LoD shader
commit f13d98ee3e58f881e8b978861a67663b59ed91ec
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 11:03:40 2019 +0000
LoD first attempt (stack overflow issue)
2020-08-20 18:34:59 +00:00
|
|
|
|
let waypoints = (0..this.map_size_lg().chunks().x)
|
2020-01-25 20:43:34 +00:00
|
|
|
|
.step_by(WAYPOINT_EVERY)
|
|
|
|
|
.map(|i| {
|
(See sharp/lod-history) LOD, shadows, greedy meshing, new lighting, perf
---
Pretty much a Veloren fork at this point. Here's a high level overview of the changes (will be added to CHANGELOG just before merge).
At a high level this MR incorporates roughly two groups of changes.
The first group consists of new game features: more flexible map sizes, level of detail terrain, shadow maps, and a new lighting
engine. This is "feature work" that (mostly) only adds new things to Veloren, and mostly shouldn't affect old stuff.
The second big group of changes are those addressing the fallout from all the new features. These include performance fixes of
various sorts: the addition of multiple graphics options and optimization of the cheap ones to avoid work, switching all voxel
models to use some variant of greedy meshing, switching over much of our CPU-side vector math to exploit SIMD instructions
(coinciding with a fork of `vek`), and a rewrite of how the UI handles text rendering (coinciding with updates to our fork
of `conrod`). Making Veloren's hardcoded colors appear correct under the new lighting engine also required considerably
changes (TODO: Fill in this section when it's complete).
The second category of changes often heavily touches code owned by other people, including frequently modified code "owned" by a
handful of people, so I recommend that this code be reviewed particularly carefully.
---
At a high level (each will be described in more detail below):
- The world map has been refactored.
- The world size is no longer hardcoded (@zesterer).
- The map generation code was made generic to allow using it outside of the `world` crate (@zesterer).
- On world creation, we now compute *horizon maps* (@zesterer).
- The way we pass the world from the server to the client has been updated (@xMAC94x).
- Artifacts related to image rotation were fixed (@imbris).
- Multiflow rivers were enabled (@zesterer).
- In the process of making changes related to the world map, various incidental fixes and optimizations were required.
- The new *level of detail* feature was added (@zesterer wrote part of this and has checked out the rest).
- A new LOD terrain rendering step was added to the pipeline.
- The LOD terrain quality was made configurable via a graphics setting.
- Horizon maps were used to cast shadows from LOD chunks on both LOD and non-LOD terrain.
- A "voxelization" effect was incorporated into rendered LOD terrain to make it blend better into the world.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Veloren's lighting has been completely overhauled (@zesterer has already checked most of this out).
- A semi-accurate index of refraction was assigned to our materials.
- A new, more realistic, physically based approach to lighting was used using the *Ashikhmin Shirley* BRDF.
- We emulate *atmospheric scattering* using equations designed for measuring solar panel light exposure.
- We attempt to compute *realistic light attenuation* in water using its real material properties.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Point and directional lights now cast realistic shadows, using *shadow mapping.* (@imbris, @zesterer, @Treeco, @YuriMomo)
- Point light shadow maps were added to the rendering pipeline, using geometry shaders and *seamless cube maps*.
- Directional light shadows were added to the rendering pipeline, using LISPSM together with disabling *depth clamping*.
- "Shadow-only" chunks and NPCs were added to prevent shadows from models behind you from disappearing.
- In the process of making changes related to shadow maps, various incidental fixes and optimizations were required.
The addition of shadow maps, LOD terrain, and the new lighting all led to significant performance degradation, on top of other
changes happening in master. Therefore, a large number of performance improvements were also needed:
- The graphics options were made much more flexible and configurable, and shaders were optimize.
- New options were provided for how to render lights and shadows (@Pfauenauge, @zesterer).
- Graphic setting storage and configuration were overhauled to make adding new features easier (@Pfauenauge, @imbris).
- Shaders were rewritten to utilize GLSL's preprocessor to avoid overhead (@zesterer, @YuriMomo).
- In the process of making changes related to providing additional rendering options, various incidental fixes and optimizations were required.
- Voxel model creation was switched to use *greedy meshing.*
- A new voxel meshing method, greedy meshing, was added (@imbris).
- Uses of the older meshing methods were migrated to use greedy meshing (@imbris, @jshipsey, @Pfauenauge).
- New restrictions were added to terrain, figure, and sprites to future proof them for further optimizations (@jshipsey, @Pfauenauge, @zesterer).
- Most positions are now relative to either chunk or player position for better precision (@imbris, @zesterer, @scottc).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- Animation and terrain math were switched to use SIMD where possible.
- Fixes were made to vek to make its SIMD feature usable for us (@zesterer, @imbris).
- The interface and types used in bone animation were changed in various ways (@jshipsey, @Snowram, @Pfauenauge).
- Redundant code generation for body animation is now partly taken care of by a macro (@jshipsey, @Snowram, @Pfauenauge).
- Animation code was modified to to use vek's SIMD representation where possible (@jshipsey, @Snowram, @Pfauenauge).
- Terrain meshing code and shadow map math were also modified to use vek's SIMD representation (@imbris).
- SIMD instruction generation was enabled (@YuriMomo, @jshipsey, @Snowram, @imbris, @Angelonfira, @xMAC94x).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- The way we cache glyphs was completely refactored, fixed, and optimized.
- Our fork of `conrod` was optimized in various ways (@imbris).
- Our fork of `conrod` now exposes whether a widget was updated during the current frame (@imbris).
- Our use of the glyph cache was rewritten for correctness (@imbris).
- A *text cache* was introduced that lets us skip remeshing glyphs that have not changed (@imbris).
- Various changes were made to reduce pressure on the glyph cache, with more planned (@imbris, @Pfauenauge).
- In the process of making changes related to the glyph cache, various incidental fixes and optimizations were required.
- Colors were changed to keep Veloren's look consistent with master.
- Some older tree models were brought back (@Pfauenauge).
- TODO(@Sharp): All hardcoded colors were extracted and made hotloadable.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Hardcoded colors were fixed to conform to Veloren's style.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Color models were fixed to conform to Veloren's style.
A detailed description of the involved changes follows.
---
- The world size is no longer hardcoded. All functions dependent on world size now take a `WorldSizeLg`, which holds the base 2 logarithm of each actual world dimension and is guaranteed to maintain certain properties (outlined in `common/src/terrain/map.rs`). Additionally, many utility functions that utilize the world size were moved into `common` as well (mostly `common/src/terrain/mod.rs`). Finally, the world map format was updated in order to store its size explicitly, with a migration path from the old format that should work whenever the old formatted map was a square (practically always). See `world/src/sim/mod.rs` for these changes.
- The map generation code was made generic to allow using it outside of the `world` crate. The parts of the map generating code that do not need to query the world were moved over to `common/src/terrain/map.rs`, allowing them to be used from the client without creating a dependency on `world`. The rest of it was turned into helper functions in `world/src/sim/map.rs`, which can be passed as closures to the generic map generation code to complete its construction. This also means that colors are now passed in separately to the map generation function. See <https://veloren.net/devblog-78/> for more details.
- On world creation, we now compute *horizon maps*. See the function in `world/src/sim/util.rs`.
Given a height map and a plane intersecting that height map, our horizon maps allow us to encode enough information to reconstruct shadows for each point on the height map using only the *horizon angle* (the angle at which the sun starts to become visible). As Veloren's sun only covers one plane, this is sufficient for encoding sun shadows for LOD terrain, by encoding two angles per chunk (one for each 90 degrees the sun covers). We can also use this for the moon, if we want, since the moon follows the same path. Additionally, we store the *height* of the furthest occluder, to try to make the shadows volumetric; so this means 4 bytes in total for each chunk.
Support for horizon maps has been merged into the map functionality in common as well.
- The way we pass the world from the server to the client has been updated. Rather than passing the prerendered map, we instead pass three maps with values for each chunk; one with the color information, a second with altitude information, and a third with horizon map information. We then reconstruct the map on the client, together with some additional information we send from the server (like the sea level and maximum height). See `common/src/msg/server.rs` for a detailed description of the format of `WorldMapMsg`, and `server/src/libr.rs` and `client/src/lib.rs` for details of the map construction and parsing.
- Artifacts related to image rotation were fixed. See the commit message for commit SHA `cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e` for a detailed explanation. This involved changes to shaders, the addition of a new type of graphic (also reflected in the graphic cache) that allows specifying a border color (which automatically makes the associated texture immutable), and some related fixes. I reproduce the first two paragraphs of the MR description as well:
```
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
```
- Multiflow rivers were enabled.
This does not really need to be part of this MR, and would be easy to revert, but since it seemed to provide a nice improvement it's currently packaged with it.
We already computed multiple outflows from each chunk for erosion purposes long before this MR.
However, we never modified river rendering to be able to handle this case (just a single downhill river flow is complex enough!) so this was not exposed when deciding which chunks were rivers.
Now that
- In the process of making changes related to the world map, various incidental fixes and optimizations were required. Some examples of fixes include making sure terrain is never lowered to below sea level (to make the shadow maps report correct values), fixing map altitudes and colors to understand things like cliffs and "block level" coloring (that doesn'te xist on the column level), and fixing a crashbug when rendering images for the UI where source pixels are strongly rectangular. Some examples of related performance fixes include avoiding allocating a fresh vector for all the maps (i.e. copying it over to change the format from `[u32; n]` to `DynamicImage` and then copying again to convert to `RgbaImage`), and instead using the `gfx::memory::slice` function to accomplish the same thing. These sorts of changes are spread all arond the code.
This includes the additon of a new scene, `voxygen/src/scene/lod.rs`, a new pipeline `voxygen/src/render/pipeline/lod_terrain.rs`, and new shaders `assets/vxygen/shaders/lod-terrain-vert.glsl` and `assets/vxygen/shaders/lod-terrain-frag.glsl`, as well as associated changes to the renderer in `voxygen/src/render/renderer.rs`.
The main idea behind our initial approach to LOD was to take the world data we now get from the server (altitude, color, and horizon mapping).
- Some previously computed values were turned into shader uniforms for better prediction on weak processors. (@zesterer)
- Calls to power or trig functions were removed or replaced with multiplications, where possible.
- After some deliberation
- To properly handle sprite "waving" for nearby sprites,
We explicitly designed the greedy meshing system with figures and sprites in mind.
In both cases, we want to be able to *efficiently* pack many different models into the same texture, especially in cases where we know
we will either not be removing any of the grouped-together from the models from the texture, or will remove all of them at once (so
they can be packed into some specific subtexture).
For sprites, since we know every model in advance and never intend to deallocate them, we currently pack them all as efficiently as
possible into one giant tetxure atlas. However, in the future we might opt to pack them slightly less efficiently in exchange for
shrinking the sprite vertex size.
For figures, we pack all the textures for each *model* into the same atlas.
is a global texture atlas used for every sprite, and for figures which is why we have the ability to mesh multiple
models to the same texture area (using the simple texture atlas allocator) without requiring intermediate vector allocations.
This is accomplished by delaying the time when we actually write the color and light data to the texture until *after* all the
model vertices have been meshed; then, we can just allocate the whole color/light array at once, making the atlas we use an
exact fit. In computer science-y terms, we accomplish this delay by, after we perform the initial greedy meshing (without
texture information), not continuing to create the texture data, but instead constructing a *continuation*--that is, a function
that, when called, will execute the rest of the computation. We push this continuation (which in Rust terms is a `FnOnce` closure
that takes the `ColLightsInfo` that it is supposed to write to as context) onto a
onto a vector
resizing. To allow for suspended writes to texture data, Rust pointed out to me that the continuation that would eventually write the color and light data to the texture atlas (the one that is shared by all models sharing the same greedy mesher) would have to *own* whatever data it mshed. Because we often generate the model data to mesh as a temporary in `voxygen/src/load.rs`, the
- Matrix multiplications in the shader were reduced for figure data (@zesterer).
- Vertex "waves" for fluid data were removed.
- Terrain "bending" near edges was removed.
- Scaling was fixed to make sure empty space was not introduced in a space previously occupied by a block. It was also changed to take ownership of its voxel data,
rather than sharing it, to let it be used with meshing.
- Rust's nightly version was bumped in order to use the `array_map` function, which lets us reuse more code between the simple map and `FigureModelCache`.
- PositionedGlyph::standalone.
---
I tried to cite sources in many cases[^realtime],[^lloyd],[^lispsm],[^pbrt],[^greedy],[^tjunctions]
where I needed features from elsewhere but I am particularly grateful for the following resources,
esepcially where they have accompanying source code. I linked all of them that are accessible to the public (those that are not were
obtained through legal means).
[^realtime]: Eisemann, Elmar, Michael Schwarz, Ulf Assarsson, Michael Wimmer. Real-Time Shadows. A K Peters/CRC Press (T&F), 20160419.
[^lloyd]: Lloyd,B. 2007. [Logarithmic perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). PhD thesis, University of North Carolina.
[^lispsm]: Wimmer, M., Scherzer, D., and Purgathofer, W. 2004. [Light space perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). In Proceedings of Eurographics Symposium on Rendering 2004, pp. 143– 152.
[^pbrt]: Pharr, Matt, et al. [http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf](Physically Based Rendering: From Theory to Implementation). Third edition, Morgan Kaufmann Publishers/Elsevier, 2017.
[^greedy]: mikolalysenko. “Meshing in a Minecraft Game.” 0 FPS, 30 June 2012, <https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/>.
[^tjunctions]: blackflux. “Meshing in Voxel Engines – Part 1.” Blackflux.Com, 23 Feb. 2014, <https://blackflux.wordpress.com/2014/02/23/meshing-in-voxel-engines-part-1/>.
I am also especially grateful to Khronos, Wikiepdia, and stackoverflow for answering many of my specific questions while writing the MR.
---
Squashed commit of the following:
commit 300505e7305a2fdac722a808ee8538323f215f39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 18:46:25 2020 +0200
Fixing cargo doc and typo in CHANGELOG.
commit ec0aeb18e8499d7d84ef818331b4b65c3d76cea6
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 15:38:50 2020 +0200
Hopefully final commit for the LOD branch.
commit 5e8ea0b1eaac02903a02feb2eb038d195de4872f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 10:14:26 2020 +0200
Falling back to power as stopgap.
commit e44a1cbf46504ee9931a01bdc9033e145500d557
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 09:25:41 2020 +0200
Address imbris feedback.
Temporarily disables shiny water, lowers max VD.
These restrictions will be lifted soon after merging.
commit 561e25778a108ac3712f5ec2ce3a51234c4430d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 08:31:13 2020 +0200
Tweaking shaders a bit.
commit 7d19259078ce0dd7b3742ad7d0cb3fab3ece3fdc
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:59:43 2020 +0200
Fix view example as well.
commit 051cd4934e0fad2c0b15db4380a4189fa318679f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:29:06 2020 +0200
Fix meshing benchmark.
commit c95e07db3b4dcca285678985e65e31b927cb1c61
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 05:46:22 2020 +0200
Address MR feedback, fix scene clouds.
commit 1bfb816cabdb3ffc1e507a009c2d98696b4b573a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:39:36 2020 +0200
Incorporating Pfau's figure color changes.
New eyes and new humanoid colors.
commit 3f9b89a3ac7b3356b1dba0d1a8f6541357f81469
Merge: e2f5162e4 62c53963a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:29:41 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit e2f5162e4f96f4124aa43488f7245d341b3dcfd4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:28:38 2020 +0200
World colors are all hotloadable.
They live in assets/world/style/colors.ron.
Only a small handful of hardcoed colors remain in World; they are either
part of the map, or difficult to disentangle from the rest of the
computation. Comments are made where appropriate.
commit 62c53963abe1975009d34a8f9515a355bef24f31
Author: Marcel Märtens <marcel.cochem@googlemail.com>
Date: Wed Aug 19 15:59:00 2020 +0200
replace pretty_env_logger with tracing
commit 5b1625f99d9586fe80e2232f583ec5af9f953099
Merge: d71003acd 4942b5b39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:15:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit d71003acdabeff970b3928e97c26af6847b5b78e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:14:34 2020 +0200
Hotloading colors, part 1: colors in common.
Currently, this just entails humanoid colors. There are only three
colors not handled; the light emitter colors in
common/src/comp/inventory/item/tool.rs. These don't seem important
enough to me to warrant making hotloadable, at least not right now, but
if it's needed later we can always add them to the file.
commit 63b5e0e553eb2ea49276f192a6fc7dd65254270d
Merge: c32b337a4 6d2c4b9c1
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 13:05:37 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c32b337a46e10d9de473d178a94a3ccd61c39bb3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:52:04 2020 +0200
Fixing LOD grid, for real.
commit a166ae0360395387e09fb35a1f84210c2ce5ec24
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:28:05 2020 +0200
Addressing imbris's initial feedback.
Fixes two minor bugs: explosion particles were no longer spawning
randomly, and LOD grids were not perfectly even.
commit 4cbad004f44060994252dd3d38647a14a589712f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:27:58 2020 +0200
Bumping nightly per request.
commit 548680276aac77c25d43d16b5622f847d474dbef
Merge: acc098604 8f8b20c91
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:26:06 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit acc0986040589a3492f88a740bc3c3fc693b26d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:28:32 2020 +0200
Lower resolution due to lying drivers.
commit d3b878de2a52c358d2944a6bbd0555dad7fbdb10
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:15:38 2020 +0200
Fix issues msh encountered with Intel 4600.
commit 10245e0c1b0cb6fae10d86409435364edc6102ef
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 21:15:02 2020 +0200
Merge more models into one mesh than we did previously.
commit 3155c31e663c52ae5c3a53d5fb5665892a1a498a
Merge: 7204cc8a7 3c199280e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:35:22 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7204cc8a7a4f74a30306bd205d9834fee4bb944f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:34:43 2020 +0200
Fix not yet done NPC animations.
This forces them all to be the idle animation if not specified.
This fixes issues where you'd have giant NPCs in water.
commit bc83360f2a08918f19d417b5f772e1ff554dba08
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 19:36:37 2020 +0200
Try to fix some bugs:
- Z fighting with LOD terrain and water.
- Audio SFX not playing.
commit 1fd104aa603bf3781b6526a5cada46aeca3049dd
Merge: 862df3c99 7c2c392a3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 12:02:31 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 862df3c9976c4da9bd7cfd784f1a85973127968a
Merge: 0a4218ed9 75c1d4401
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 05:52:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0a4218ed9d541a2b34c133351bea38a99ddf4ea7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 22:27:14 2020 +0200
Fix particle depth.
commit f51dfdeb442d0dd5243dd2f344fa4be295bd0875
Merge: c6251a956 5e6dc0471
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:19:04 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit c6251a956ad376400dca5c23420cf8d213dc8fdf
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:15:46 2020 +0200
Cache figures more intelligently.
Cache figures for longer, and don't cache character states for the
player except where they actually affect the rendered model.
commit 0ed801d5404982c6fb63b1eaa4567d908b294c9d
Merge: c11b9bdf0 eea64f78f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 16:32:24 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c11b9bdf0a53bf9884d2f5a48fec9b01d582df1a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 11:47:15 2020 +0200
Remove unneeded Clippy annotation.
commit 16aa9ef40af56d69289d00aafb3deadfb8bd4f35
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 8 00:53:02 2020 +0200
Fix hotloading and Clippy.
commit 3dc973e0be5b758da1e9805eb764ad401374cd0c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 23:50:27 2020 +0200
Major speedups with SIMD.
commit fba64a7d93d5a96077ce87287bbce6ab9b7fbcae
Merge: 76429d00e d1e10b178
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:19 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 76429d00eea00d212fbd672a84ee91e75b19b938
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:10 2020 +0200
Add clippy.toml.
commit c79f512f84dbb83cb82b7954db68ff241dfd8e41
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 11:55:20 2020 +0200
Fix all clippy issues, clean up Rust code.
commit 6f90e010b3fbefb53b0d632e819931350015b6b8
Merge: 77a8c7c26 5929cfa5c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:30 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 77a8c7c267d3f44a1a62bd6b2274359973c5e4d4
Merge: b44e44232 44febaabd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:10 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 5929cfa5c713aa392110bbb62407f76caf53c3df
Author: jshipsey <jshipsey18@gmail.com>
Date: Thu Aug 6 20:47:27 2020 -0400
fixed in-hand arrow bug
commit b44e442325d828f1cd564d66908f89d09e80474b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 6 13:40:35 2020 +0200
Miscellaneous performance improvements.
commit be37acf287c1360d8085862526ac3365ffd1d768
Merge: 125d7fc6c c11876547
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 05:49:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 125d7fc6c4dcd8c8c5f27b8268a4d64f409f3644
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 04:55:31 2020 +0200
Abstract over simd vs. repr_c vectors.
Also some minor improvements to Event size.
commit d4d4956e9252e1241ce110b2aa85076c6b1e2a23
Merge: 5f3b7294a aced5f979
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:56:54 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 5f3b7294af1f8533edc2620b58863c248e2b07af
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:43:52 2020 +0200
Fix formatting issues I missed before.
commit a428a3ebba70dcab63dd0f8cd983120c90617271
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:41:51 2020 +0200
Fix clippy warnings, part 1.
There aer still a bunch of type too complex and
function takes too many arguments warnings that I'll fix later
(or ignore, since in the one case I did fix a function takes too
many arguments warning I think it made the code *less* readable).
commit ba54307540ed8a937ac08209730284fc653af85b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 30 13:22:42 2020 +0200
Fix light animations so they are removed when the light turns off.
commit 7e0f4bcbf0f4717145d8beac40d52e3acebbe2aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 21:10:20 2020 +0200
Fix crash in edge case for pixel art.
commit 56da06f7a351e2b949e9b014a90b974d511a0924
Merge: cf74d55f2 9f53a4a19
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:56:52 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:29:52 2020 +0200
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
The first concern was addressed by fixing the dimensions of the map
images drawn from the UI (so that we always use a square source
rectangle, rather than a rectangular one according to the dimensions of
the map). We also fixed the way rotation was done in the fragment
shader for north-facing sources to make it properly handle aspect ratio
(this was already done for north-facing targets). Together, these fix
rendering issues peculiar to rectangular maps.
The second and third concerns were jointly addressed by adding an
optional border color to every 2D image drawn by the UI. This turns
out not to waste extra space even though we hold a full f32 color
(to avoid an extra dependency on gfx's PackedColor), since voxel
images already take up more space than Optiion<[f32; 4]> requires.
This is then implemented automatically using the "border color"
wrapping method in the attached sampler.
Since this is implemented in graphics hardware, it only works (at
least naively) if the actual image bounds match the texture bounds.
Therefore, we altered the way the graphics cache stores images
with a border color to guarantee that they are always in their own
texture, whose size exactly matches their extent. Since the easiest
currently exposed way to set a border color is to do so for an
immutable texture, we went a bit further and added a new "immutable"
texture storage type used for these cases; currently, it is always
and automatically used only when there is a specified border color,
but in theory there's no reason we couldn't provide immutable-only
images that use the default wrapping mdoe (though clamp to border
is admittedly not a great default).
To fix the maps case specifically, we set the border color to a
translucent version of the ocean border color. This may need
tweaking going forward, which shouldn't be hard.
As part of this process, we had to modify graphics replacement to
make sure immutable images are *removed* when invalidated, rather
than just having a validity flag unset (this is normally done by
the UI to try to reuse allocations in place if images are updated
in benign ways, since the texture atlases used for Ui do not
support deallocation; currently this is only used for item images,
so there should be no overlap with immutable image replacement,
so this was purely precautionary).
Since we were already touching the relevant code, we also updated
the image dependency to a newer version that provides more ways
to avoid allocations, and made a few other changes that should
hopefully eliminate redundant most of the intermediate buffer
allocations we were performing for what should be zero-cost
conversions. This may slightly improve performance in some
cases.
commit ad18ce939940a8c697270f6e9b94db9942fd8295
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 13:21:09 2020 +0200
Fix continent scale hack.
commit 36b1cb074f5b195aebd7dbbc3da7f0246a1a18ec
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 12:11:40 2020 +0200
Enable loading different sized maps without a recompile.
We may want to tweak the effects of the continent_scale_hack.
commit 13b6d4d534cc4814b7cb3294ca41bbfea0a6b186
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 10:55:48 2020 +0200
Removing WORLD_SIZE, part 1.
Erased almost every instance of WORLD_SIZE and replaced it with a local
power of two, map_size_lg (which respects certain invariants; see
common/src/terrain/map.rs for more details about MapSizeLg). This also
means we can avoid a dependency on the world crate from client, as
desired.
Now that the rest of the code is not expecting a fixed WORLD_SIZE, the
next step is to arrange for maps to store their world size, and to use
that world size as a basis prior to loading the map (as well, probably,
as prior to configuring some of the noise functions).
commit 30b1d2c6428230a9eaa0d749cdcbbd6f1cbccd78
Merge: 7d56ba31b 1377b369f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:58 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 7d56ba31b445441461b28a07fc495d7d4f047c17
Merge: 2101113b4 598f14b25
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 1377b369f6db2258e910d467a5740f31789e3ded
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sun Jul 19 23:25:38 2020 +0200
more saturated pumpkins
commit ae8d50527f93bb0616c2ad46ce4dacb63bc37c6d
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sat Jul 18 20:29:56 2020 +0200
acacia models
commit 2101113b467e691de787392d7f20f1745f5637bd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 18 18:55:25 2020 +0200
Higher detail LOD.
commit add2cfae04b4385fa5590e11e2bd5229d9dee0aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 16 01:57:39 2020 +0200
Revert some irrelevant stuff.
commit 2e2ab3dc1eaa59a4aef7f8d34a53d8aae4c8553a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 15 13:30:49 2020 +0200
Fixing various things about shadows.
* Correcting optimal LISPSM parameter.
* Figure shadows are cast when they're not visible.
* Chunk shadows stay cast until you look away.
* Seamless cubemaps for point lights.
* Etc.
commit 6c31e6b56217274285b597af297036691ea5d897
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 19:50:26 2020 +0200
Fix shadow creation.
commit 6332cbe006115ae205597529cd8bbccd146c2cca
Merge: be438657c 930e0028b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:47:00 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit be438657c33d7b5bfb0a9582c3ed3fd366637323
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:28:08 2020 +0200
Tweaks to shadows.
Added shadow map resolution configuration, added seamless cubemaps,
documented all existing rendering options, and fixed a few Clippy
errors.
commit 23b4058906013c7d2a40c286e20e32c5fbd897ed
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 10:11:19 2020 +0200
Fix moon, use nonlinear noise for terrain.
Note that the latter has a bit of performance cost.
commit 7fbe5cbfbb9dc29607957b8e62f432a4deed193d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:23:02 2020 +0200
Address lies about max texture size.
commit bcfc62b5e13a1cdd83f57535fde4694720bebfd9
Merge: 75e3626a7 18a08e8fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:22:08 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 75e3626a785919f43fdcf2127c2b10e3e4df2f9f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:21:52 2020 +0200
OpenGL 3.3 minimum.
commit 18a08e8fe2739f02af99a5d2cb4e7c38c49e858b
Author: Monty Marz <m.marzouq@gmx.de>
Date: Tue Jul 7 23:57:52 2020 +0200
settings localization
commit 90c5d1ca3620092bc3ae10b2211489eb1cf6f5e8
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 21:11:48 2020 +0200
Lower near distance.
commit 0e66f02b25aaddaa2dfddbbc89cd67de54a9a7b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 20:09:01 2020 +0200
All sprites sway in the wind now.
commit db1401a6910bf42dcf502462c90038752ff5fbdb
Merge: 69e508d8c e8b4b29d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 19:34:17 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 69e508d8c94d8973033817ca86f357e466fc7c4d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 18:41:37 2020 +0200
Make it easy to switch to SIMD for math.
commit ffe0f5928c7a7e87d00cb5426b3b1d831d7e02fd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 21:21:12 2020 +0200
Fix some issues with underwater rendering.
commit bfda6da42f38fd02c31ee92c81ab785a3e50c2a0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 19:17:59 2020 +0200
Fix some minor display issues.
commit 0ed752e087968cf901301884aaeae698e32ef8a5
Merge: ccc6a06a8 518edcb85
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:14:21 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit ccc6a06a8d4504d6b9f7af7905a414d2ee06ab76
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:04:34 2020 +0200
Some minor changes.
commit 4e020246702889269efe1a191788992164c508d6
Merge: 50a64d927 e05c9267a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 16:17:40 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 50a64d927e6c4f4b0e4688e4cbfca694bc3f922a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 13:07:03 2020 +0200
Fix far plane.
commit 7dd06da34cae8f9ea3b6c889fe965181f3fd3949
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:25:35 2020 +0200
Add shadows.glsl.
commit 618a18c998778bf871b905a74657440fcc384c80
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:10:22 2020 +0200
Adding shadows, greedy meshing, and more.
commit eaea83fe6a5cb1cb0ba8beef888183c718258496
Merge: 267018495 2f89b863e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 22:47:07 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 2670184954a13e4a9e7a4e35ba79aac0c5fac2f7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 21:20:01 2020 +0200
Make civsim and sites deterministic.
For anything in worldgen where you use a HashMap, *please* think
carefully about which hasher you are going to use! This is
especially true if (for some reason) you are depending on hashmap
iteration order remaining stable for some aspect of worldgen.
commit f8376fd5dc72b4a9c2f51a6b4570d59c8b8e9343
Merge: 654f7e049 cdee191dd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 17:53:57 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 654f7e049258d9da27c09608bbe6a46ffa8787e5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed May 20 21:22:30 2020 +0200
Correct backface culling.
commit 560501df05ca725409b0f2e4eb31bdfdc15fd0c7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue May 19 17:22:06 2020 +0200
Greedy messhing for shadows.
commit a4d87e1875ca543436e6bbbeb20348facc5a52d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun May 17 05:59:00 2020 +0200
Shadow maps work for lantern.
commit 243d0837b8a3b08172c9a3c348d964d7ddc2a0a8
Merge: 04382dc28 71dd520cd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:53:13 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 04382dc28632b6c66e8821f6870c0daaa1c1901a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:22:17 2020 +0200
WIP: better graphics config, better LOD, shadow maps.
commit 22ddbad3eb32bfa70f0932176022208fe67ded81
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 18:54:09 2020 +0200
Minor shader fixes.
commit 746a10e8d01ac235f994b0cde78fa48998602a1f
Merge: 0f4a0e763 40ab94673
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 04:02:09 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0f4a0e763db3afbdc4fb0558611f38326ca87151
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 23:03:24 2020 +0200
Switch back to pop-in terrain.
commit dd74fa7e4a53667b38811d7aec58d7f6a68889bb
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 22:58:55 2020 +0200
LOD shading closer to voxel shading.
commit ef67bd58ba0bdaf622b078892d768263b6cba268
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 28 20:49:03 2020 +0200
Experimental underwater lighting.
commit 2c5ad9d07605e80d5fd5679dd3a5d70c605b86a9
Merge: 748279835 303967a6f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 22:35:24 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7482798354eda18c8207950080fc24d443a369de
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 21:59:55 2020 +0200
Replace discard in figure-frag.
commit d83b4ae69be4912f69bf7835f509c68a1c7770a4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:45:57 2020 +0200
Fix sprite lighting, HDR from focus_pos.
commit 0594238004f116274905fa0ed7c2b6c417ed1d29
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:14:10 2020 +0200
Proper HDR from point lights.
commit 48c93d2b41ce5743103d18e76cc228f5ac766492
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 14:01:43 2020 +0200
Brighter ambiance, darker LOD shadows.
commit e0452e895ccfa8a43f368cae3b8b8aedc24dad93
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 13:13:23 2020 +0200
More proper HDR.
commit 4c6da3ed16cfeebb455e40da5f557b4af9a499d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 00:13:10 2020 +0200
Trying LOD noise.
commit 682a3d74c85df5503ffe1fc1cc891bce789df1ad
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 23:11:08 2020 +0200
Fix LOD heights in towns.
commit cc39e5734e8b18f9077bf42e66337c1319dd6b6e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 21:01:23 2020 +0200
More LOD fixes.
commit 8116b21c2e51c836e77894e309ac273caf2917b3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:54:43 2020 +0200
I like this coloring.
commit bc2560ea90b36f4b46190005344232d993043ac3
Merge: 14effdd5d e690efe71
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:48:33 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 14effdd5db8747fcf3eb34f03b46b7792e92d1c5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:24:35 2020 +0200
Re-saturate.
commit 48a643955d4435b78179acba0beb4a979905cc31
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:23:57 2020 +0200
Various fixes.
commit f7b497a0c25f4ad4682c71dd1ed6f608052feb9b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 03:22:49 2020 +0200
Render figures again.
commit 44e4aad48deba8266b9f8bdfd3db096b381f5327
Merge: e6f0a5a98 9ec319a18
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 02:01:04 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit e6f0a5a981a82533ba188fff0a54ce98577bb152
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 24 16:12:20 2020 +0200
Add atmospheric scattering.
commit f2953087f691a8edbc001cb98ebf5059fc6f8ac0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 23 00:01:20 2020 +0200
Fix shadowing for specular reflections.
commit ddd4a67a9799b8d08c7dc0c2bec90621c2bed0e3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Apr 22 22:56:12 2020 +0200
HDR fixes.
commit 1015e60deef3c447381996277df7496707a63bd0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 21 18:25:19 2020 +0200
More lighting changes.
commit 80c264abd111fb237e57843efcb5c071d4f84613
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 13 00:29:59 2020 +0200
Lighting experiments.
commit 8414987e589dd5102bad89762a3adaccc0bfe957
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 9 02:38:40 2020 +0200
WIP -- lighting changes and soft shadows.
commit 9cd2b3fb0d6b49776c6dfe463e4169637250b11a
Merge: c7ea687eb 8b149ad11
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:29 2020 +0200
Merge branch 'sharp/new-lighting' into sharp/small-fixes
commit c7ea687ebbc5aace1b455f134a5bf49ce2c7434a
Merge: 476441531 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:02 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 8b149ad11ad4bb75018fcf9519baec27d1c95951
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:32:39 2020 +0200
Trying out a new lighting model.
commit b0ac9f36f755dd06f7c17c46150568064790864f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 07:56:11 2020 +0200
Use bicubic interpolation for terrain.
commit f6fc9307a121514b614bc50ef8eb055953e7da8a
Merge: 33140a295 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 05:01:41 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 4764415312aae6e9ac2d00e86e84577cb958f1ab
Merge: ed2d0111d 13388ee6a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 04:54:48 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 13388ee6a42943f3f79a9cb488346cef18e272fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 20:30:08 2020 +0200
Various fixes (to coloring and to soft shadows).
commit fbd084a94a067082a87cd6d28b82054709bc9265
Merge: 5a089863b 4fdf6896a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 18:50:38 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/map-colors
commit ed2d0111d994262ae836d84d1fe5a45e4de72a0b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 06:49:27 2020 +0200
Combining colors and LOD.
commit 88342640c6b835114d01c797b89fdede3b0a2108
Merge: 33140a295 5a089863b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:49:20 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 33140a2951b8212725f42c758b277aaec4d888f7
Merge: 4c65a5aed f34d4b379
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:36:21 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 5a089863beb01d4794bbe3580ada47b278715ea2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 03:17:49 2020 +0200
Making maps brighter.
This is probably not the right way to do it, but oh well!
commit 32b2c99109dd486aa922886081068f9c550c83f2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 02:46:36 2020 +0200
Horizon mapping and "layered" map generation.
Horizon mapping is a method of shadow mapping specific to height maps.
It can handle any angle between 0 and 90 degrees from the ground, as
long as know the horizontal direction in advance, by remembering only a
single angle (the "horizon angle" of the shadow map). More is explained
in common/src/msg/server.rs. We also remember the approximate height of
the largest occluder, to try to be able to generate soft shadows and
create a vertical position where the shadows can't go higher.
Additionally, map generation has been reworked. Instead of computing
everything from explicit samples, we pass in sampling functions that
return exactly what the map generator needs. This allows us to cleanly
separate the way we sample things like altitudes and colors from the map
generation process. We exploit this to generate maps *partially* on the
server (with colors and rivers, but not shading). We can then send the
partially completed map to the client, which can combine it with shadow
information to generate the final map. This is useful for two reasons:
first, it makes sure the client can apply shadow information by itself,
and second, it lets us pass the unshaded map for use with level of
detail functionality.
For similar reasons, river generation is split
out into its own layer, but for now we opt to still generate rivers on
the server (since the river wire format is more complicated to compress
and may require some extra work to make sure we have enough precision to
draw rivers well enough for LoD).
Finally, the mostly ad-hoc lighting we were performing has been (mostly)
replaced with explicit Phong reflection shading (including specular
highlights). Regularizing this seems useful and helps clarify the
"meaning" of the various light intensities, and helps us keep a more
physically plausible basis. However, its interaction with soft shadows
is still imperfect, and it's not yet clear to me what we need to do to
turn this into something useful for LoD.
commit f8926a5737ddc51f3d585c651a64c43677aae0f4
Merge: a1aee931e 875ae6ced
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Mar 13 13:32:42 2020 +0100
Merge remote-tracking branch 'origin/master' into sharp/map-colors
commit 4c65a5aed353b119aea65a2aaeb94549b67beb42
Author: Treeco <5021038-Treeco@users.noreply.gitlab.com>
Date: Mon Feb 24 16:48:05 2020 +0000
Made LOD setting slider exponential
commit 2fa7b2d20d7233dc8bfd64f9f7f54617575248f1
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 17:49:53 2020 +0000
Added mist to LoD
commit aab059a450b5f635777129ff82cc15b662965c3c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 15:14:06 2020 +0000
Added LoD slider
commit 779c36b538121c5ade3633ae5cb67bb14c8c3877
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:54:55 2020 +0000
Reduced cost of vertex pushing
commit 9fea150473906b166365b738ebcea07c697daf3d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:38:53 2020 +0000
Fixed maths, improved LoD resolution
commit 5481df38fea5bf183ff376a3337179cfaa5233dc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 11:22:50 2020 +0000
Dynamically relocate LoD vertices to enhance details
commit a3e36a50ababd615da7db1b26158c7906a5def01
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 18:13:51 2020 +0000
Simpler terrain spiral rendering
commit 255f450ae9ac8763db4bede075fb409161ed57cc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:53:17 2020 +0000
Better LoD precision
commit 3d027aebe812a5b8658a4eb8123dc9f61b3776d2
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:04:03 2020 +0000
Better falloff
commit be775c9484b457b2c0b1a494aec03392d0c70e76
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 15:30:45 2020 +0000
Applied good ideas from experimental branch
commit 58587b68545a23c5c04ab4574a4b94b3bc982246
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 16:15:13 2020 +0000
Minor fixes to LoD merging
commit 7b42aebd709c14df2db766aad61d9280ad24d84d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 15:04:44 2020 +0000
Capped LoD dragging
commit 8aafc559f87124e1ea5ca6e3ddc2aa0c242d793c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:54:37 2020 +0000
Better blending between LoD and terrain border
commit edd3455d5161792d87ddc8eadc0ecbad5532b284
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:40:19 2020 +0000
Fixed LoD z depth, added sea level offset
commit b9b06744620114dd5556e73f64fa93c145503a7c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:27:43 2020 +0000
Better LoD smoothing
commit a1aee931e790431560cd2d953ad61d9497072afd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Feb 21 14:52:17 2020 +0100
Adding shadows.
commit 2400786c13dd891c131ed86d48d05df516a8a778
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 13:48:40 2020 +0000
Use world map as LoD source
commit dbf650f504a4c25fbbc2096ac3616c736bf52d23
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Jan 20 00:48:14 2020 +0000
Better clouds at distance
commit 5e6f81b86cdb9730b9b056877b19257075fd5fa8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Jan 19 23:59:02 2020 +0000
sync
commit 745e7540ddb000cc645f612767b337c2ddc3f7c0
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 12:40:48 2019 +0000
Improved cloud falloff mist, faster noise sampling
commit f6a200d0cb866196ba57697466755f9e0c7ea5d8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 10:09:00 2019 +0000
Improved long-range depth precision, removed unnecessary LoD polygons
commit 63d1b2bb2292898d59fb4f4e502201103dfeb86f
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 20:57:46 2019 +0000
Working LoD shader
commit f13d98ee3e58f881e8b978861a67663b59ed91ec
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 11:03:40 2019 +0000
LoD first attempt (stack overflow issue)
2020-08-20 18:34:59 +00:00
|
|
|
|
(0..this.map_size_lg().chunks().y)
|
2020-01-25 20:43:34 +00:00
|
|
|
|
.step_by(WAYPOINT_EVERY)
|
2020-01-26 12:47:41 +00:00
|
|
|
|
.map(move |j| (i, j))
|
|
|
|
|
})
|
|
|
|
|
.flatten()
|
|
|
|
|
.collect::<Vec<_>>()
|
|
|
|
|
.into_par_iter()
|
|
|
|
|
.filter_map(|(i, j)| {
|
|
|
|
|
let mut pos = Vec2::new(i as i32, j as i32);
|
2020-01-26 14:27:11 +00:00
|
|
|
|
let mut chunk = this.get(pos)?;
|
2020-01-26 12:47:41 +00:00
|
|
|
|
// Slide the waypoints down hills
|
2020-01-26 13:05:28 +00:00
|
|
|
|
const MAX_ITERS: usize = 64;
|
|
|
|
|
for _ in 0..MAX_ITERS {
|
2020-01-26 14:27:11 +00:00
|
|
|
|
let downhill_pos = match chunk.downhill {
|
2020-06-30 14:56:49 +00:00
|
|
|
|
Some(downhill) => {
|
|
|
|
|
downhill.map2(TerrainChunkSize::RECT_SIZE, |e, sz: u32| e / (sz as i32))
|
|
|
|
|
},
|
2020-01-26 13:05:28 +00:00
|
|
|
|
None => return Some(pos),
|
2020-01-26 14:27:11 +00:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
let new_chunk = this.get(downhill_pos)?;
|
|
|
|
|
const SLIDE_THRESHOLD: f32 = 5.0;
|
2020-01-26 15:18:51 +00:00
|
|
|
|
if new_chunk.is_underwater() || new_chunk.alt + SLIDE_THRESHOLD < chunk.alt {
|
2020-01-26 14:27:11 +00:00
|
|
|
|
break;
|
|
|
|
|
} else {
|
|
|
|
|
chunk = new_chunk;
|
|
|
|
|
pos = downhill_pos;
|
2020-01-26 12:47:41 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
Some(pos)
|
2020-01-25 20:43:34 +00:00
|
|
|
|
})
|
|
|
|
|
.collect::<Vec<_>>();
|
|
|
|
|
|
|
|
|
|
for waypoint in waypoints {
|
|
|
|
|
self.get_mut(waypoint).map(|sc| sc.contains_waypoint = true);
|
|
|
|
|
}
|
|
|
|
|
|
2019-06-18 21:22:31 +00:00
|
|
|
|
self.rng = rng;
|
2019-06-25 15:59:09 +00:00
|
|
|
|
self.locations = locations;
|
2019-05-18 08:59:58 +00:00
|
|
|
|
}
|
2019-05-16 17:40:32 +00:00
|
|
|
|
|
2019-06-18 21:22:31 +00:00
|
|
|
|
pub fn get(&self, chunk_pos: Vec2<i32>) -> Option<&SimChunk> {
|
2019-05-21 22:31:38 +00:00
|
|
|
|
if chunk_pos
|
(See sharp/lod-history) LOD, shadows, greedy meshing, new lighting, perf
---
Pretty much a Veloren fork at this point. Here's a high level overview of the changes (will be added to CHANGELOG just before merge).
At a high level this MR incorporates roughly two groups of changes.
The first group consists of new game features: more flexible map sizes, level of detail terrain, shadow maps, and a new lighting
engine. This is "feature work" that (mostly) only adds new things to Veloren, and mostly shouldn't affect old stuff.
The second big group of changes are those addressing the fallout from all the new features. These include performance fixes of
various sorts: the addition of multiple graphics options and optimization of the cheap ones to avoid work, switching all voxel
models to use some variant of greedy meshing, switching over much of our CPU-side vector math to exploit SIMD instructions
(coinciding with a fork of `vek`), and a rewrite of how the UI handles text rendering (coinciding with updates to our fork
of `conrod`). Making Veloren's hardcoded colors appear correct under the new lighting engine also required considerably
changes (TODO: Fill in this section when it's complete).
The second category of changes often heavily touches code owned by other people, including frequently modified code "owned" by a
handful of people, so I recommend that this code be reviewed particularly carefully.
---
At a high level (each will be described in more detail below):
- The world map has been refactored.
- The world size is no longer hardcoded (@zesterer).
- The map generation code was made generic to allow using it outside of the `world` crate (@zesterer).
- On world creation, we now compute *horizon maps* (@zesterer).
- The way we pass the world from the server to the client has been updated (@xMAC94x).
- Artifacts related to image rotation were fixed (@imbris).
- Multiflow rivers were enabled (@zesterer).
- In the process of making changes related to the world map, various incidental fixes and optimizations were required.
- The new *level of detail* feature was added (@zesterer wrote part of this and has checked out the rest).
- A new LOD terrain rendering step was added to the pipeline.
- The LOD terrain quality was made configurable via a graphics setting.
- Horizon maps were used to cast shadows from LOD chunks on both LOD and non-LOD terrain.
- A "voxelization" effect was incorporated into rendered LOD terrain to make it blend better into the world.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Veloren's lighting has been completely overhauled (@zesterer has already checked most of this out).
- A semi-accurate index of refraction was assigned to our materials.
- A new, more realistic, physically based approach to lighting was used using the *Ashikhmin Shirley* BRDF.
- We emulate *atmospheric scattering* using equations designed for measuring solar panel light exposure.
- We attempt to compute *realistic light attenuation* in water using its real material properties.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Point and directional lights now cast realistic shadows, using *shadow mapping.* (@imbris, @zesterer, @Treeco, @YuriMomo)
- Point light shadow maps were added to the rendering pipeline, using geometry shaders and *seamless cube maps*.
- Directional light shadows were added to the rendering pipeline, using LISPSM together with disabling *depth clamping*.
- "Shadow-only" chunks and NPCs were added to prevent shadows from models behind you from disappearing.
- In the process of making changes related to shadow maps, various incidental fixes and optimizations were required.
The addition of shadow maps, LOD terrain, and the new lighting all led to significant performance degradation, on top of other
changes happening in master. Therefore, a large number of performance improvements were also needed:
- The graphics options were made much more flexible and configurable, and shaders were optimize.
- New options were provided for how to render lights and shadows (@Pfauenauge, @zesterer).
- Graphic setting storage and configuration were overhauled to make adding new features easier (@Pfauenauge, @imbris).
- Shaders were rewritten to utilize GLSL's preprocessor to avoid overhead (@zesterer, @YuriMomo).
- In the process of making changes related to providing additional rendering options, various incidental fixes and optimizations were required.
- Voxel model creation was switched to use *greedy meshing.*
- A new voxel meshing method, greedy meshing, was added (@imbris).
- Uses of the older meshing methods were migrated to use greedy meshing (@imbris, @jshipsey, @Pfauenauge).
- New restrictions were added to terrain, figure, and sprites to future proof them for further optimizations (@jshipsey, @Pfauenauge, @zesterer).
- Most positions are now relative to either chunk or player position for better precision (@imbris, @zesterer, @scottc).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- Animation and terrain math were switched to use SIMD where possible.
- Fixes were made to vek to make its SIMD feature usable for us (@zesterer, @imbris).
- The interface and types used in bone animation were changed in various ways (@jshipsey, @Snowram, @Pfauenauge).
- Redundant code generation for body animation is now partly taken care of by a macro (@jshipsey, @Snowram, @Pfauenauge).
- Animation code was modified to to use vek's SIMD representation where possible (@jshipsey, @Snowram, @Pfauenauge).
- Terrain meshing code and shadow map math were also modified to use vek's SIMD representation (@imbris).
- SIMD instruction generation was enabled (@YuriMomo, @jshipsey, @Snowram, @imbris, @Angelonfira, @xMAC94x).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- The way we cache glyphs was completely refactored, fixed, and optimized.
- Our fork of `conrod` was optimized in various ways (@imbris).
- Our fork of `conrod` now exposes whether a widget was updated during the current frame (@imbris).
- Our use of the glyph cache was rewritten for correctness (@imbris).
- A *text cache* was introduced that lets us skip remeshing glyphs that have not changed (@imbris).
- Various changes were made to reduce pressure on the glyph cache, with more planned (@imbris, @Pfauenauge).
- In the process of making changes related to the glyph cache, various incidental fixes and optimizations were required.
- Colors were changed to keep Veloren's look consistent with master.
- Some older tree models were brought back (@Pfauenauge).
- TODO(@Sharp): All hardcoded colors were extracted and made hotloadable.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Hardcoded colors were fixed to conform to Veloren's style.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Color models were fixed to conform to Veloren's style.
A detailed description of the involved changes follows.
---
- The world size is no longer hardcoded. All functions dependent on world size now take a `WorldSizeLg`, which holds the base 2 logarithm of each actual world dimension and is guaranteed to maintain certain properties (outlined in `common/src/terrain/map.rs`). Additionally, many utility functions that utilize the world size were moved into `common` as well (mostly `common/src/terrain/mod.rs`). Finally, the world map format was updated in order to store its size explicitly, with a migration path from the old format that should work whenever the old formatted map was a square (practically always). See `world/src/sim/mod.rs` for these changes.
- The map generation code was made generic to allow using it outside of the `world` crate. The parts of the map generating code that do not need to query the world were moved over to `common/src/terrain/map.rs`, allowing them to be used from the client without creating a dependency on `world`. The rest of it was turned into helper functions in `world/src/sim/map.rs`, which can be passed as closures to the generic map generation code to complete its construction. This also means that colors are now passed in separately to the map generation function. See <https://veloren.net/devblog-78/> for more details.
- On world creation, we now compute *horizon maps*. See the function in `world/src/sim/util.rs`.
Given a height map and a plane intersecting that height map, our horizon maps allow us to encode enough information to reconstruct shadows for each point on the height map using only the *horizon angle* (the angle at which the sun starts to become visible). As Veloren's sun only covers one plane, this is sufficient for encoding sun shadows for LOD terrain, by encoding two angles per chunk (one for each 90 degrees the sun covers). We can also use this for the moon, if we want, since the moon follows the same path. Additionally, we store the *height* of the furthest occluder, to try to make the shadows volumetric; so this means 4 bytes in total for each chunk.
Support for horizon maps has been merged into the map functionality in common as well.
- The way we pass the world from the server to the client has been updated. Rather than passing the prerendered map, we instead pass three maps with values for each chunk; one with the color information, a second with altitude information, and a third with horizon map information. We then reconstruct the map on the client, together with some additional information we send from the server (like the sea level and maximum height). See `common/src/msg/server.rs` for a detailed description of the format of `WorldMapMsg`, and `server/src/libr.rs` and `client/src/lib.rs` for details of the map construction and parsing.
- Artifacts related to image rotation were fixed. See the commit message for commit SHA `cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e` for a detailed explanation. This involved changes to shaders, the addition of a new type of graphic (also reflected in the graphic cache) that allows specifying a border color (which automatically makes the associated texture immutable), and some related fixes. I reproduce the first two paragraphs of the MR description as well:
```
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
```
- Multiflow rivers were enabled.
This does not really need to be part of this MR, and would be easy to revert, but since it seemed to provide a nice improvement it's currently packaged with it.
We already computed multiple outflows from each chunk for erosion purposes long before this MR.
However, we never modified river rendering to be able to handle this case (just a single downhill river flow is complex enough!) so this was not exposed when deciding which chunks were rivers.
Now that
- In the process of making changes related to the world map, various incidental fixes and optimizations were required. Some examples of fixes include making sure terrain is never lowered to below sea level (to make the shadow maps report correct values), fixing map altitudes and colors to understand things like cliffs and "block level" coloring (that doesn'te xist on the column level), and fixing a crashbug when rendering images for the UI where source pixels are strongly rectangular. Some examples of related performance fixes include avoiding allocating a fresh vector for all the maps (i.e. copying it over to change the format from `[u32; n]` to `DynamicImage` and then copying again to convert to `RgbaImage`), and instead using the `gfx::memory::slice` function to accomplish the same thing. These sorts of changes are spread all arond the code.
This includes the additon of a new scene, `voxygen/src/scene/lod.rs`, a new pipeline `voxygen/src/render/pipeline/lod_terrain.rs`, and new shaders `assets/vxygen/shaders/lod-terrain-vert.glsl` and `assets/vxygen/shaders/lod-terrain-frag.glsl`, as well as associated changes to the renderer in `voxygen/src/render/renderer.rs`.
The main idea behind our initial approach to LOD was to take the world data we now get from the server (altitude, color, and horizon mapping).
- Some previously computed values were turned into shader uniforms for better prediction on weak processors. (@zesterer)
- Calls to power or trig functions were removed or replaced with multiplications, where possible.
- After some deliberation
- To properly handle sprite "waving" for nearby sprites,
We explicitly designed the greedy meshing system with figures and sprites in mind.
In both cases, we want to be able to *efficiently* pack many different models into the same texture, especially in cases where we know
we will either not be removing any of the grouped-together from the models from the texture, or will remove all of them at once (so
they can be packed into some specific subtexture).
For sprites, since we know every model in advance and never intend to deallocate them, we currently pack them all as efficiently as
possible into one giant tetxure atlas. However, in the future we might opt to pack them slightly less efficiently in exchange for
shrinking the sprite vertex size.
For figures, we pack all the textures for each *model* into the same atlas.
is a global texture atlas used for every sprite, and for figures which is why we have the ability to mesh multiple
models to the same texture area (using the simple texture atlas allocator) without requiring intermediate vector allocations.
This is accomplished by delaying the time when we actually write the color and light data to the texture until *after* all the
model vertices have been meshed; then, we can just allocate the whole color/light array at once, making the atlas we use an
exact fit. In computer science-y terms, we accomplish this delay by, after we perform the initial greedy meshing (without
texture information), not continuing to create the texture data, but instead constructing a *continuation*--that is, a function
that, when called, will execute the rest of the computation. We push this continuation (which in Rust terms is a `FnOnce` closure
that takes the `ColLightsInfo` that it is supposed to write to as context) onto a
onto a vector
resizing. To allow for suspended writes to texture data, Rust pointed out to me that the continuation that would eventually write the color and light data to the texture atlas (the one that is shared by all models sharing the same greedy mesher) would have to *own* whatever data it mshed. Because we often generate the model data to mesh as a temporary in `voxygen/src/load.rs`, the
- Matrix multiplications in the shader were reduced for figure data (@zesterer).
- Vertex "waves" for fluid data were removed.
- Terrain "bending" near edges was removed.
- Scaling was fixed to make sure empty space was not introduced in a space previously occupied by a block. It was also changed to take ownership of its voxel data,
rather than sharing it, to let it be used with meshing.
- Rust's nightly version was bumped in order to use the `array_map` function, which lets us reuse more code between the simple map and `FigureModelCache`.
- PositionedGlyph::standalone.
---
I tried to cite sources in many cases[^realtime],[^lloyd],[^lispsm],[^pbrt],[^greedy],[^tjunctions]
where I needed features from elsewhere but I am particularly grateful for the following resources,
esepcially where they have accompanying source code. I linked all of them that are accessible to the public (those that are not were
obtained through legal means).
[^realtime]: Eisemann, Elmar, Michael Schwarz, Ulf Assarsson, Michael Wimmer. Real-Time Shadows. A K Peters/CRC Press (T&F), 20160419.
[^lloyd]: Lloyd,B. 2007. [Logarithmic perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). PhD thesis, University of North Carolina.
[^lispsm]: Wimmer, M., Scherzer, D., and Purgathofer, W. 2004. [Light space perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). In Proceedings of Eurographics Symposium on Rendering 2004, pp. 143– 152.
[^pbrt]: Pharr, Matt, et al. [http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf](Physically Based Rendering: From Theory to Implementation). Third edition, Morgan Kaufmann Publishers/Elsevier, 2017.
[^greedy]: mikolalysenko. “Meshing in a Minecraft Game.” 0 FPS, 30 June 2012, <https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/>.
[^tjunctions]: blackflux. “Meshing in Voxel Engines – Part 1.” Blackflux.Com, 23 Feb. 2014, <https://blackflux.wordpress.com/2014/02/23/meshing-in-voxel-engines-part-1/>.
I am also especially grateful to Khronos, Wikiepdia, and stackoverflow for answering many of my specific questions while writing the MR.
---
Squashed commit of the following:
commit 300505e7305a2fdac722a808ee8538323f215f39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 18:46:25 2020 +0200
Fixing cargo doc and typo in CHANGELOG.
commit ec0aeb18e8499d7d84ef818331b4b65c3d76cea6
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 15:38:50 2020 +0200
Hopefully final commit for the LOD branch.
commit 5e8ea0b1eaac02903a02feb2eb038d195de4872f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 10:14:26 2020 +0200
Falling back to power as stopgap.
commit e44a1cbf46504ee9931a01bdc9033e145500d557
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 09:25:41 2020 +0200
Address imbris feedback.
Temporarily disables shiny water, lowers max VD.
These restrictions will be lifted soon after merging.
commit 561e25778a108ac3712f5ec2ce3a51234c4430d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 08:31:13 2020 +0200
Tweaking shaders a bit.
commit 7d19259078ce0dd7b3742ad7d0cb3fab3ece3fdc
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:59:43 2020 +0200
Fix view example as well.
commit 051cd4934e0fad2c0b15db4380a4189fa318679f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:29:06 2020 +0200
Fix meshing benchmark.
commit c95e07db3b4dcca285678985e65e31b927cb1c61
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 05:46:22 2020 +0200
Address MR feedback, fix scene clouds.
commit 1bfb816cabdb3ffc1e507a009c2d98696b4b573a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:39:36 2020 +0200
Incorporating Pfau's figure color changes.
New eyes and new humanoid colors.
commit 3f9b89a3ac7b3356b1dba0d1a8f6541357f81469
Merge: e2f5162e4 62c53963a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:29:41 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit e2f5162e4f96f4124aa43488f7245d341b3dcfd4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:28:38 2020 +0200
World colors are all hotloadable.
They live in assets/world/style/colors.ron.
Only a small handful of hardcoed colors remain in World; they are either
part of the map, or difficult to disentangle from the rest of the
computation. Comments are made where appropriate.
commit 62c53963abe1975009d34a8f9515a355bef24f31
Author: Marcel Märtens <marcel.cochem@googlemail.com>
Date: Wed Aug 19 15:59:00 2020 +0200
replace pretty_env_logger with tracing
commit 5b1625f99d9586fe80e2232f583ec5af9f953099
Merge: d71003acd 4942b5b39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:15:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit d71003acdabeff970b3928e97c26af6847b5b78e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:14:34 2020 +0200
Hotloading colors, part 1: colors in common.
Currently, this just entails humanoid colors. There are only three
colors not handled; the light emitter colors in
common/src/comp/inventory/item/tool.rs. These don't seem important
enough to me to warrant making hotloadable, at least not right now, but
if it's needed later we can always add them to the file.
commit 63b5e0e553eb2ea49276f192a6fc7dd65254270d
Merge: c32b337a4 6d2c4b9c1
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 13:05:37 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c32b337a46e10d9de473d178a94a3ccd61c39bb3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:52:04 2020 +0200
Fixing LOD grid, for real.
commit a166ae0360395387e09fb35a1f84210c2ce5ec24
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:28:05 2020 +0200
Addressing imbris's initial feedback.
Fixes two minor bugs: explosion particles were no longer spawning
randomly, and LOD grids were not perfectly even.
commit 4cbad004f44060994252dd3d38647a14a589712f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:27:58 2020 +0200
Bumping nightly per request.
commit 548680276aac77c25d43d16b5622f847d474dbef
Merge: acc098604 8f8b20c91
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:26:06 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit acc0986040589a3492f88a740bc3c3fc693b26d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:28:32 2020 +0200
Lower resolution due to lying drivers.
commit d3b878de2a52c358d2944a6bbd0555dad7fbdb10
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:15:38 2020 +0200
Fix issues msh encountered with Intel 4600.
commit 10245e0c1b0cb6fae10d86409435364edc6102ef
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 21:15:02 2020 +0200
Merge more models into one mesh than we did previously.
commit 3155c31e663c52ae5c3a53d5fb5665892a1a498a
Merge: 7204cc8a7 3c199280e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:35:22 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7204cc8a7a4f74a30306bd205d9834fee4bb944f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:34:43 2020 +0200
Fix not yet done NPC animations.
This forces them all to be the idle animation if not specified.
This fixes issues where you'd have giant NPCs in water.
commit bc83360f2a08918f19d417b5f772e1ff554dba08
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 19:36:37 2020 +0200
Try to fix some bugs:
- Z fighting with LOD terrain and water.
- Audio SFX not playing.
commit 1fd104aa603bf3781b6526a5cada46aeca3049dd
Merge: 862df3c99 7c2c392a3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 12:02:31 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 862df3c9976c4da9bd7cfd784f1a85973127968a
Merge: 0a4218ed9 75c1d4401
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 05:52:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0a4218ed9d541a2b34c133351bea38a99ddf4ea7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 22:27:14 2020 +0200
Fix particle depth.
commit f51dfdeb442d0dd5243dd2f344fa4be295bd0875
Merge: c6251a956 5e6dc0471
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:19:04 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit c6251a956ad376400dca5c23420cf8d213dc8fdf
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:15:46 2020 +0200
Cache figures more intelligently.
Cache figures for longer, and don't cache character states for the
player except where they actually affect the rendered model.
commit 0ed801d5404982c6fb63b1eaa4567d908b294c9d
Merge: c11b9bdf0 eea64f78f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 16:32:24 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c11b9bdf0a53bf9884d2f5a48fec9b01d582df1a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 11:47:15 2020 +0200
Remove unneeded Clippy annotation.
commit 16aa9ef40af56d69289d00aafb3deadfb8bd4f35
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 8 00:53:02 2020 +0200
Fix hotloading and Clippy.
commit 3dc973e0be5b758da1e9805eb764ad401374cd0c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 23:50:27 2020 +0200
Major speedups with SIMD.
commit fba64a7d93d5a96077ce87287bbce6ab9b7fbcae
Merge: 76429d00e d1e10b178
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:19 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 76429d00eea00d212fbd672a84ee91e75b19b938
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:10 2020 +0200
Add clippy.toml.
commit c79f512f84dbb83cb82b7954db68ff241dfd8e41
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 11:55:20 2020 +0200
Fix all clippy issues, clean up Rust code.
commit 6f90e010b3fbefb53b0d632e819931350015b6b8
Merge: 77a8c7c26 5929cfa5c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:30 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 77a8c7c267d3f44a1a62bd6b2274359973c5e4d4
Merge: b44e44232 44febaabd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:10 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 5929cfa5c713aa392110bbb62407f76caf53c3df
Author: jshipsey <jshipsey18@gmail.com>
Date: Thu Aug 6 20:47:27 2020 -0400
fixed in-hand arrow bug
commit b44e442325d828f1cd564d66908f89d09e80474b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 6 13:40:35 2020 +0200
Miscellaneous performance improvements.
commit be37acf287c1360d8085862526ac3365ffd1d768
Merge: 125d7fc6c c11876547
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 05:49:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 125d7fc6c4dcd8c8c5f27b8268a4d64f409f3644
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 04:55:31 2020 +0200
Abstract over simd vs. repr_c vectors.
Also some minor improvements to Event size.
commit d4d4956e9252e1241ce110b2aa85076c6b1e2a23
Merge: 5f3b7294a aced5f979
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:56:54 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 5f3b7294af1f8533edc2620b58863c248e2b07af
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:43:52 2020 +0200
Fix formatting issues I missed before.
commit a428a3ebba70dcab63dd0f8cd983120c90617271
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:41:51 2020 +0200
Fix clippy warnings, part 1.
There aer still a bunch of type too complex and
function takes too many arguments warnings that I'll fix later
(or ignore, since in the one case I did fix a function takes too
many arguments warning I think it made the code *less* readable).
commit ba54307540ed8a937ac08209730284fc653af85b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 30 13:22:42 2020 +0200
Fix light animations so they are removed when the light turns off.
commit 7e0f4bcbf0f4717145d8beac40d52e3acebbe2aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 21:10:20 2020 +0200
Fix crash in edge case for pixel art.
commit 56da06f7a351e2b949e9b014a90b974d511a0924
Merge: cf74d55f2 9f53a4a19
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:56:52 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:29:52 2020 +0200
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
The first concern was addressed by fixing the dimensions of the map
images drawn from the UI (so that we always use a square source
rectangle, rather than a rectangular one according to the dimensions of
the map). We also fixed the way rotation was done in the fragment
shader for north-facing sources to make it properly handle aspect ratio
(this was already done for north-facing targets). Together, these fix
rendering issues peculiar to rectangular maps.
The second and third concerns were jointly addressed by adding an
optional border color to every 2D image drawn by the UI. This turns
out not to waste extra space even though we hold a full f32 color
(to avoid an extra dependency on gfx's PackedColor), since voxel
images already take up more space than Optiion<[f32; 4]> requires.
This is then implemented automatically using the "border color"
wrapping method in the attached sampler.
Since this is implemented in graphics hardware, it only works (at
least naively) if the actual image bounds match the texture bounds.
Therefore, we altered the way the graphics cache stores images
with a border color to guarantee that they are always in their own
texture, whose size exactly matches their extent. Since the easiest
currently exposed way to set a border color is to do so for an
immutable texture, we went a bit further and added a new "immutable"
texture storage type used for these cases; currently, it is always
and automatically used only when there is a specified border color,
but in theory there's no reason we couldn't provide immutable-only
images that use the default wrapping mdoe (though clamp to border
is admittedly not a great default).
To fix the maps case specifically, we set the border color to a
translucent version of the ocean border color. This may need
tweaking going forward, which shouldn't be hard.
As part of this process, we had to modify graphics replacement to
make sure immutable images are *removed* when invalidated, rather
than just having a validity flag unset (this is normally done by
the UI to try to reuse allocations in place if images are updated
in benign ways, since the texture atlases used for Ui do not
support deallocation; currently this is only used for item images,
so there should be no overlap with immutable image replacement,
so this was purely precautionary).
Since we were already touching the relevant code, we also updated
the image dependency to a newer version that provides more ways
to avoid allocations, and made a few other changes that should
hopefully eliminate redundant most of the intermediate buffer
allocations we were performing for what should be zero-cost
conversions. This may slightly improve performance in some
cases.
commit ad18ce939940a8c697270f6e9b94db9942fd8295
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 13:21:09 2020 +0200
Fix continent scale hack.
commit 36b1cb074f5b195aebd7dbbc3da7f0246a1a18ec
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 12:11:40 2020 +0200
Enable loading different sized maps without a recompile.
We may want to tweak the effects of the continent_scale_hack.
commit 13b6d4d534cc4814b7cb3294ca41bbfea0a6b186
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 10:55:48 2020 +0200
Removing WORLD_SIZE, part 1.
Erased almost every instance of WORLD_SIZE and replaced it with a local
power of two, map_size_lg (which respects certain invariants; see
common/src/terrain/map.rs for more details about MapSizeLg). This also
means we can avoid a dependency on the world crate from client, as
desired.
Now that the rest of the code is not expecting a fixed WORLD_SIZE, the
next step is to arrange for maps to store their world size, and to use
that world size as a basis prior to loading the map (as well, probably,
as prior to configuring some of the noise functions).
commit 30b1d2c6428230a9eaa0d749cdcbbd6f1cbccd78
Merge: 7d56ba31b 1377b369f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:58 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 7d56ba31b445441461b28a07fc495d7d4f047c17
Merge: 2101113b4 598f14b25
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 1377b369f6db2258e910d467a5740f31789e3ded
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sun Jul 19 23:25:38 2020 +0200
more saturated pumpkins
commit ae8d50527f93bb0616c2ad46ce4dacb63bc37c6d
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sat Jul 18 20:29:56 2020 +0200
acacia models
commit 2101113b467e691de787392d7f20f1745f5637bd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 18 18:55:25 2020 +0200
Higher detail LOD.
commit add2cfae04b4385fa5590e11e2bd5229d9dee0aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 16 01:57:39 2020 +0200
Revert some irrelevant stuff.
commit 2e2ab3dc1eaa59a4aef7f8d34a53d8aae4c8553a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 15 13:30:49 2020 +0200
Fixing various things about shadows.
* Correcting optimal LISPSM parameter.
* Figure shadows are cast when they're not visible.
* Chunk shadows stay cast until you look away.
* Seamless cubemaps for point lights.
* Etc.
commit 6c31e6b56217274285b597af297036691ea5d897
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 19:50:26 2020 +0200
Fix shadow creation.
commit 6332cbe006115ae205597529cd8bbccd146c2cca
Merge: be438657c 930e0028b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:47:00 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit be438657c33d7b5bfb0a9582c3ed3fd366637323
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:28:08 2020 +0200
Tweaks to shadows.
Added shadow map resolution configuration, added seamless cubemaps,
documented all existing rendering options, and fixed a few Clippy
errors.
commit 23b4058906013c7d2a40c286e20e32c5fbd897ed
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 10:11:19 2020 +0200
Fix moon, use nonlinear noise for terrain.
Note that the latter has a bit of performance cost.
commit 7fbe5cbfbb9dc29607957b8e62f432a4deed193d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:23:02 2020 +0200
Address lies about max texture size.
commit bcfc62b5e13a1cdd83f57535fde4694720bebfd9
Merge: 75e3626a7 18a08e8fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:22:08 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 75e3626a785919f43fdcf2127c2b10e3e4df2f9f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:21:52 2020 +0200
OpenGL 3.3 minimum.
commit 18a08e8fe2739f02af99a5d2cb4e7c38c49e858b
Author: Monty Marz <m.marzouq@gmx.de>
Date: Tue Jul 7 23:57:52 2020 +0200
settings localization
commit 90c5d1ca3620092bc3ae10b2211489eb1cf6f5e8
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 21:11:48 2020 +0200
Lower near distance.
commit 0e66f02b25aaddaa2dfddbbc89cd67de54a9a7b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 20:09:01 2020 +0200
All sprites sway in the wind now.
commit db1401a6910bf42dcf502462c90038752ff5fbdb
Merge: 69e508d8c e8b4b29d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 19:34:17 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 69e508d8c94d8973033817ca86f357e466fc7c4d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 18:41:37 2020 +0200
Make it easy to switch to SIMD for math.
commit ffe0f5928c7a7e87d00cb5426b3b1d831d7e02fd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 21:21:12 2020 +0200
Fix some issues with underwater rendering.
commit bfda6da42f38fd02c31ee92c81ab785a3e50c2a0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 19:17:59 2020 +0200
Fix some minor display issues.
commit 0ed752e087968cf901301884aaeae698e32ef8a5
Merge: ccc6a06a8 518edcb85
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:14:21 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit ccc6a06a8d4504d6b9f7af7905a414d2ee06ab76
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:04:34 2020 +0200
Some minor changes.
commit 4e020246702889269efe1a191788992164c508d6
Merge: 50a64d927 e05c9267a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 16:17:40 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 50a64d927e6c4f4b0e4688e4cbfca694bc3f922a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 13:07:03 2020 +0200
Fix far plane.
commit 7dd06da34cae8f9ea3b6c889fe965181f3fd3949
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:25:35 2020 +0200
Add shadows.glsl.
commit 618a18c998778bf871b905a74657440fcc384c80
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:10:22 2020 +0200
Adding shadows, greedy meshing, and more.
commit eaea83fe6a5cb1cb0ba8beef888183c718258496
Merge: 267018495 2f89b863e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 22:47:07 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 2670184954a13e4a9e7a4e35ba79aac0c5fac2f7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 21:20:01 2020 +0200
Make civsim and sites deterministic.
For anything in worldgen where you use a HashMap, *please* think
carefully about which hasher you are going to use! This is
especially true if (for some reason) you are depending on hashmap
iteration order remaining stable for some aspect of worldgen.
commit f8376fd5dc72b4a9c2f51a6b4570d59c8b8e9343
Merge: 654f7e049 cdee191dd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 17:53:57 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 654f7e049258d9da27c09608bbe6a46ffa8787e5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed May 20 21:22:30 2020 +0200
Correct backface culling.
commit 560501df05ca725409b0f2e4eb31bdfdc15fd0c7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue May 19 17:22:06 2020 +0200
Greedy messhing for shadows.
commit a4d87e1875ca543436e6bbbeb20348facc5a52d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun May 17 05:59:00 2020 +0200
Shadow maps work for lantern.
commit 243d0837b8a3b08172c9a3c348d964d7ddc2a0a8
Merge: 04382dc28 71dd520cd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:53:13 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 04382dc28632b6c66e8821f6870c0daaa1c1901a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:22:17 2020 +0200
WIP: better graphics config, better LOD, shadow maps.
commit 22ddbad3eb32bfa70f0932176022208fe67ded81
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 18:54:09 2020 +0200
Minor shader fixes.
commit 746a10e8d01ac235f994b0cde78fa48998602a1f
Merge: 0f4a0e763 40ab94673
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 04:02:09 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0f4a0e763db3afbdc4fb0558611f38326ca87151
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 23:03:24 2020 +0200
Switch back to pop-in terrain.
commit dd74fa7e4a53667b38811d7aec58d7f6a68889bb
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 22:58:55 2020 +0200
LOD shading closer to voxel shading.
commit ef67bd58ba0bdaf622b078892d768263b6cba268
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 28 20:49:03 2020 +0200
Experimental underwater lighting.
commit 2c5ad9d07605e80d5fd5679dd3a5d70c605b86a9
Merge: 748279835 303967a6f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 22:35:24 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7482798354eda18c8207950080fc24d443a369de
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 21:59:55 2020 +0200
Replace discard in figure-frag.
commit d83b4ae69be4912f69bf7835f509c68a1c7770a4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:45:57 2020 +0200
Fix sprite lighting, HDR from focus_pos.
commit 0594238004f116274905fa0ed7c2b6c417ed1d29
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:14:10 2020 +0200
Proper HDR from point lights.
commit 48c93d2b41ce5743103d18e76cc228f5ac766492
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 14:01:43 2020 +0200
Brighter ambiance, darker LOD shadows.
commit e0452e895ccfa8a43f368cae3b8b8aedc24dad93
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 13:13:23 2020 +0200
More proper HDR.
commit 4c6da3ed16cfeebb455e40da5f557b4af9a499d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 00:13:10 2020 +0200
Trying LOD noise.
commit 682a3d74c85df5503ffe1fc1cc891bce789df1ad
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 23:11:08 2020 +0200
Fix LOD heights in towns.
commit cc39e5734e8b18f9077bf42e66337c1319dd6b6e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 21:01:23 2020 +0200
More LOD fixes.
commit 8116b21c2e51c836e77894e309ac273caf2917b3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:54:43 2020 +0200
I like this coloring.
commit bc2560ea90b36f4b46190005344232d993043ac3
Merge: 14effdd5d e690efe71
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:48:33 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 14effdd5db8747fcf3eb34f03b46b7792e92d1c5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:24:35 2020 +0200
Re-saturate.
commit 48a643955d4435b78179acba0beb4a979905cc31
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:23:57 2020 +0200
Various fixes.
commit f7b497a0c25f4ad4682c71dd1ed6f608052feb9b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 03:22:49 2020 +0200
Render figures again.
commit 44e4aad48deba8266b9f8bdfd3db096b381f5327
Merge: e6f0a5a98 9ec319a18
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 02:01:04 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit e6f0a5a981a82533ba188fff0a54ce98577bb152
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 24 16:12:20 2020 +0200
Add atmospheric scattering.
commit f2953087f691a8edbc001cb98ebf5059fc6f8ac0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 23 00:01:20 2020 +0200
Fix shadowing for specular reflections.
commit ddd4a67a9799b8d08c7dc0c2bec90621c2bed0e3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Apr 22 22:56:12 2020 +0200
HDR fixes.
commit 1015e60deef3c447381996277df7496707a63bd0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 21 18:25:19 2020 +0200
More lighting changes.
commit 80c264abd111fb237e57843efcb5c071d4f84613
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 13 00:29:59 2020 +0200
Lighting experiments.
commit 8414987e589dd5102bad89762a3adaccc0bfe957
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 9 02:38:40 2020 +0200
WIP -- lighting changes and soft shadows.
commit 9cd2b3fb0d6b49776c6dfe463e4169637250b11a
Merge: c7ea687eb 8b149ad11
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:29 2020 +0200
Merge branch 'sharp/new-lighting' into sharp/small-fixes
commit c7ea687ebbc5aace1b455f134a5bf49ce2c7434a
Merge: 476441531 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:02 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 8b149ad11ad4bb75018fcf9519baec27d1c95951
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:32:39 2020 +0200
Trying out a new lighting model.
commit b0ac9f36f755dd06f7c17c46150568064790864f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 07:56:11 2020 +0200
Use bicubic interpolation for terrain.
commit f6fc9307a121514b614bc50ef8eb055953e7da8a
Merge: 33140a295 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 05:01:41 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 4764415312aae6e9ac2d00e86e84577cb958f1ab
Merge: ed2d0111d 13388ee6a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 04:54:48 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 13388ee6a42943f3f79a9cb488346cef18e272fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 20:30:08 2020 +0200
Various fixes (to coloring and to soft shadows).
commit fbd084a94a067082a87cd6d28b82054709bc9265
Merge: 5a089863b 4fdf6896a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 18:50:38 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/map-colors
commit ed2d0111d994262ae836d84d1fe5a45e4de72a0b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 06:49:27 2020 +0200
Combining colors and LOD.
commit 88342640c6b835114d01c797b89fdede3b0a2108
Merge: 33140a295 5a089863b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:49:20 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 33140a2951b8212725f42c758b277aaec4d888f7
Merge: 4c65a5aed f34d4b379
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:36:21 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 5a089863beb01d4794bbe3580ada47b278715ea2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 03:17:49 2020 +0200
Making maps brighter.
This is probably not the right way to do it, but oh well!
commit 32b2c99109dd486aa922886081068f9c550c83f2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 02:46:36 2020 +0200
Horizon mapping and "layered" map generation.
Horizon mapping is a method of shadow mapping specific to height maps.
It can handle any angle between 0 and 90 degrees from the ground, as
long as know the horizontal direction in advance, by remembering only a
single angle (the "horizon angle" of the shadow map). More is explained
in common/src/msg/server.rs. We also remember the approximate height of
the largest occluder, to try to be able to generate soft shadows and
create a vertical position where the shadows can't go higher.
Additionally, map generation has been reworked. Instead of computing
everything from explicit samples, we pass in sampling functions that
return exactly what the map generator needs. This allows us to cleanly
separate the way we sample things like altitudes and colors from the map
generation process. We exploit this to generate maps *partially* on the
server (with colors and rivers, but not shading). We can then send the
partially completed map to the client, which can combine it with shadow
information to generate the final map. This is useful for two reasons:
first, it makes sure the client can apply shadow information by itself,
and second, it lets us pass the unshaded map for use with level of
detail functionality.
For similar reasons, river generation is split
out into its own layer, but for now we opt to still generate rivers on
the server (since the river wire format is more complicated to compress
and may require some extra work to make sure we have enough precision to
draw rivers well enough for LoD).
Finally, the mostly ad-hoc lighting we were performing has been (mostly)
replaced with explicit Phong reflection shading (including specular
highlights). Regularizing this seems useful and helps clarify the
"meaning" of the various light intensities, and helps us keep a more
physically plausible basis. However, its interaction with soft shadows
is still imperfect, and it's not yet clear to me what we need to do to
turn this into something useful for LoD.
commit f8926a5737ddc51f3d585c651a64c43677aae0f4
Merge: a1aee931e 875ae6ced
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Mar 13 13:32:42 2020 +0100
Merge remote-tracking branch 'origin/master' into sharp/map-colors
commit 4c65a5aed353b119aea65a2aaeb94549b67beb42
Author: Treeco <5021038-Treeco@users.noreply.gitlab.com>
Date: Mon Feb 24 16:48:05 2020 +0000
Made LOD setting slider exponential
commit 2fa7b2d20d7233dc8bfd64f9f7f54617575248f1
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 17:49:53 2020 +0000
Added mist to LoD
commit aab059a450b5f635777129ff82cc15b662965c3c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 15:14:06 2020 +0000
Added LoD slider
commit 779c36b538121c5ade3633ae5cb67bb14c8c3877
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:54:55 2020 +0000
Reduced cost of vertex pushing
commit 9fea150473906b166365b738ebcea07c697daf3d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:38:53 2020 +0000
Fixed maths, improved LoD resolution
commit 5481df38fea5bf183ff376a3337179cfaa5233dc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 11:22:50 2020 +0000
Dynamically relocate LoD vertices to enhance details
commit a3e36a50ababd615da7db1b26158c7906a5def01
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 18:13:51 2020 +0000
Simpler terrain spiral rendering
commit 255f450ae9ac8763db4bede075fb409161ed57cc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:53:17 2020 +0000
Better LoD precision
commit 3d027aebe812a5b8658a4eb8123dc9f61b3776d2
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:04:03 2020 +0000
Better falloff
commit be775c9484b457b2c0b1a494aec03392d0c70e76
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 15:30:45 2020 +0000
Applied good ideas from experimental branch
commit 58587b68545a23c5c04ab4574a4b94b3bc982246
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 16:15:13 2020 +0000
Minor fixes to LoD merging
commit 7b42aebd709c14df2db766aad61d9280ad24d84d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 15:04:44 2020 +0000
Capped LoD dragging
commit 8aafc559f87124e1ea5ca6e3ddc2aa0c242d793c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:54:37 2020 +0000
Better blending between LoD and terrain border
commit edd3455d5161792d87ddc8eadc0ecbad5532b284
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:40:19 2020 +0000
Fixed LoD z depth, added sea level offset
commit b9b06744620114dd5556e73f64fa93c145503a7c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:27:43 2020 +0000
Better LoD smoothing
commit a1aee931e790431560cd2d953ad61d9497072afd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Feb 21 14:52:17 2020 +0100
Adding shadows.
commit 2400786c13dd891c131ed86d48d05df516a8a778
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 13:48:40 2020 +0000
Use world map as LoD source
commit dbf650f504a4c25fbbc2096ac3616c736bf52d23
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Jan 20 00:48:14 2020 +0000
Better clouds at distance
commit 5e6f81b86cdb9730b9b056877b19257075fd5fa8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Jan 19 23:59:02 2020 +0000
sync
commit 745e7540ddb000cc645f612767b337c2ddc3f7c0
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 12:40:48 2019 +0000
Improved cloud falloff mist, faster noise sampling
commit f6a200d0cb866196ba57697466755f9e0c7ea5d8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 10:09:00 2019 +0000
Improved long-range depth precision, removed unnecessary LoD polygons
commit 63d1b2bb2292898d59fb4f4e502201103dfeb86f
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 20:57:46 2019 +0000
Working LoD shader
commit f13d98ee3e58f881e8b978861a67663b59ed91ec
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 11:03:40 2019 +0000
LoD first attempt (stack overflow issue)
2020-08-20 18:34:59 +00:00
|
|
|
|
.map2(self.map_size_lg().chunks(), |e, sz| e >= 0 && e < sz as i32)
|
2019-05-21 22:31:38 +00:00
|
|
|
|
.reduce_and()
|
|
|
|
|
{
|
(See sharp/lod-history) LOD, shadows, greedy meshing, new lighting, perf
---
Pretty much a Veloren fork at this point. Here's a high level overview of the changes (will be added to CHANGELOG just before merge).
At a high level this MR incorporates roughly two groups of changes.
The first group consists of new game features: more flexible map sizes, level of detail terrain, shadow maps, and a new lighting
engine. This is "feature work" that (mostly) only adds new things to Veloren, and mostly shouldn't affect old stuff.
The second big group of changes are those addressing the fallout from all the new features. These include performance fixes of
various sorts: the addition of multiple graphics options and optimization of the cheap ones to avoid work, switching all voxel
models to use some variant of greedy meshing, switching over much of our CPU-side vector math to exploit SIMD instructions
(coinciding with a fork of `vek`), and a rewrite of how the UI handles text rendering (coinciding with updates to our fork
of `conrod`). Making Veloren's hardcoded colors appear correct under the new lighting engine also required considerably
changes (TODO: Fill in this section when it's complete).
The second category of changes often heavily touches code owned by other people, including frequently modified code "owned" by a
handful of people, so I recommend that this code be reviewed particularly carefully.
---
At a high level (each will be described in more detail below):
- The world map has been refactored.
- The world size is no longer hardcoded (@zesterer).
- The map generation code was made generic to allow using it outside of the `world` crate (@zesterer).
- On world creation, we now compute *horizon maps* (@zesterer).
- The way we pass the world from the server to the client has been updated (@xMAC94x).
- Artifacts related to image rotation were fixed (@imbris).
- Multiflow rivers were enabled (@zesterer).
- In the process of making changes related to the world map, various incidental fixes and optimizations were required.
- The new *level of detail* feature was added (@zesterer wrote part of this and has checked out the rest).
- A new LOD terrain rendering step was added to the pipeline.
- The LOD terrain quality was made configurable via a graphics setting.
- Horizon maps were used to cast shadows from LOD chunks on both LOD and non-LOD terrain.
- A "voxelization" effect was incorporated into rendered LOD terrain to make it blend better into the world.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Veloren's lighting has been completely overhauled (@zesterer has already checked most of this out).
- A semi-accurate index of refraction was assigned to our materials.
- A new, more realistic, physically based approach to lighting was used using the *Ashikhmin Shirley* BRDF.
- We emulate *atmospheric scattering* using equations designed for measuring solar panel light exposure.
- We attempt to compute *realistic light attenuation* in water using its real material properties.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Point and directional lights now cast realistic shadows, using *shadow mapping.* (@imbris, @zesterer, @Treeco, @YuriMomo)
- Point light shadow maps were added to the rendering pipeline, using geometry shaders and *seamless cube maps*.
- Directional light shadows were added to the rendering pipeline, using LISPSM together with disabling *depth clamping*.
- "Shadow-only" chunks and NPCs were added to prevent shadows from models behind you from disappearing.
- In the process of making changes related to shadow maps, various incidental fixes and optimizations were required.
The addition of shadow maps, LOD terrain, and the new lighting all led to significant performance degradation, on top of other
changes happening in master. Therefore, a large number of performance improvements were also needed:
- The graphics options were made much more flexible and configurable, and shaders were optimize.
- New options were provided for how to render lights and shadows (@Pfauenauge, @zesterer).
- Graphic setting storage and configuration were overhauled to make adding new features easier (@Pfauenauge, @imbris).
- Shaders were rewritten to utilize GLSL's preprocessor to avoid overhead (@zesterer, @YuriMomo).
- In the process of making changes related to providing additional rendering options, various incidental fixes and optimizations were required.
- Voxel model creation was switched to use *greedy meshing.*
- A new voxel meshing method, greedy meshing, was added (@imbris).
- Uses of the older meshing methods were migrated to use greedy meshing (@imbris, @jshipsey, @Pfauenauge).
- New restrictions were added to terrain, figure, and sprites to future proof them for further optimizations (@jshipsey, @Pfauenauge, @zesterer).
- Most positions are now relative to either chunk or player position for better precision (@imbris, @zesterer, @scottc).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- Animation and terrain math were switched to use SIMD where possible.
- Fixes were made to vek to make its SIMD feature usable for us (@zesterer, @imbris).
- The interface and types used in bone animation were changed in various ways (@jshipsey, @Snowram, @Pfauenauge).
- Redundant code generation for body animation is now partly taken care of by a macro (@jshipsey, @Snowram, @Pfauenauge).
- Animation code was modified to to use vek's SIMD representation where possible (@jshipsey, @Snowram, @Pfauenauge).
- Terrain meshing code and shadow map math were also modified to use vek's SIMD representation (@imbris).
- SIMD instruction generation was enabled (@YuriMomo, @jshipsey, @Snowram, @imbris, @Angelonfira, @xMAC94x).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- The way we cache glyphs was completely refactored, fixed, and optimized.
- Our fork of `conrod` was optimized in various ways (@imbris).
- Our fork of `conrod` now exposes whether a widget was updated during the current frame (@imbris).
- Our use of the glyph cache was rewritten for correctness (@imbris).
- A *text cache* was introduced that lets us skip remeshing glyphs that have not changed (@imbris).
- Various changes were made to reduce pressure on the glyph cache, with more planned (@imbris, @Pfauenauge).
- In the process of making changes related to the glyph cache, various incidental fixes and optimizations were required.
- Colors were changed to keep Veloren's look consistent with master.
- Some older tree models were brought back (@Pfauenauge).
- TODO(@Sharp): All hardcoded colors were extracted and made hotloadable.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Hardcoded colors were fixed to conform to Veloren's style.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Color models were fixed to conform to Veloren's style.
A detailed description of the involved changes follows.
---
- The world size is no longer hardcoded. All functions dependent on world size now take a `WorldSizeLg`, which holds the base 2 logarithm of each actual world dimension and is guaranteed to maintain certain properties (outlined in `common/src/terrain/map.rs`). Additionally, many utility functions that utilize the world size were moved into `common` as well (mostly `common/src/terrain/mod.rs`). Finally, the world map format was updated in order to store its size explicitly, with a migration path from the old format that should work whenever the old formatted map was a square (practically always). See `world/src/sim/mod.rs` for these changes.
- The map generation code was made generic to allow using it outside of the `world` crate. The parts of the map generating code that do not need to query the world were moved over to `common/src/terrain/map.rs`, allowing them to be used from the client without creating a dependency on `world`. The rest of it was turned into helper functions in `world/src/sim/map.rs`, which can be passed as closures to the generic map generation code to complete its construction. This also means that colors are now passed in separately to the map generation function. See <https://veloren.net/devblog-78/> for more details.
- On world creation, we now compute *horizon maps*. See the function in `world/src/sim/util.rs`.
Given a height map and a plane intersecting that height map, our horizon maps allow us to encode enough information to reconstruct shadows for each point on the height map using only the *horizon angle* (the angle at which the sun starts to become visible). As Veloren's sun only covers one plane, this is sufficient for encoding sun shadows for LOD terrain, by encoding two angles per chunk (one for each 90 degrees the sun covers). We can also use this for the moon, if we want, since the moon follows the same path. Additionally, we store the *height* of the furthest occluder, to try to make the shadows volumetric; so this means 4 bytes in total for each chunk.
Support for horizon maps has been merged into the map functionality in common as well.
- The way we pass the world from the server to the client has been updated. Rather than passing the prerendered map, we instead pass three maps with values for each chunk; one with the color information, a second with altitude information, and a third with horizon map information. We then reconstruct the map on the client, together with some additional information we send from the server (like the sea level and maximum height). See `common/src/msg/server.rs` for a detailed description of the format of `WorldMapMsg`, and `server/src/libr.rs` and `client/src/lib.rs` for details of the map construction and parsing.
- Artifacts related to image rotation were fixed. See the commit message for commit SHA `cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e` for a detailed explanation. This involved changes to shaders, the addition of a new type of graphic (also reflected in the graphic cache) that allows specifying a border color (which automatically makes the associated texture immutable), and some related fixes. I reproduce the first two paragraphs of the MR description as well:
```
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
```
- Multiflow rivers were enabled.
This does not really need to be part of this MR, and would be easy to revert, but since it seemed to provide a nice improvement it's currently packaged with it.
We already computed multiple outflows from each chunk for erosion purposes long before this MR.
However, we never modified river rendering to be able to handle this case (just a single downhill river flow is complex enough!) so this was not exposed when deciding which chunks were rivers.
Now that
- In the process of making changes related to the world map, various incidental fixes and optimizations were required. Some examples of fixes include making sure terrain is never lowered to below sea level (to make the shadow maps report correct values), fixing map altitudes and colors to understand things like cliffs and "block level" coloring (that doesn'te xist on the column level), and fixing a crashbug when rendering images for the UI where source pixels are strongly rectangular. Some examples of related performance fixes include avoiding allocating a fresh vector for all the maps (i.e. copying it over to change the format from `[u32; n]` to `DynamicImage` and then copying again to convert to `RgbaImage`), and instead using the `gfx::memory::slice` function to accomplish the same thing. These sorts of changes are spread all arond the code.
This includes the additon of a new scene, `voxygen/src/scene/lod.rs`, a new pipeline `voxygen/src/render/pipeline/lod_terrain.rs`, and new shaders `assets/vxygen/shaders/lod-terrain-vert.glsl` and `assets/vxygen/shaders/lod-terrain-frag.glsl`, as well as associated changes to the renderer in `voxygen/src/render/renderer.rs`.
The main idea behind our initial approach to LOD was to take the world data we now get from the server (altitude, color, and horizon mapping).
- Some previously computed values were turned into shader uniforms for better prediction on weak processors. (@zesterer)
- Calls to power or trig functions were removed or replaced with multiplications, where possible.
- After some deliberation
- To properly handle sprite "waving" for nearby sprites,
We explicitly designed the greedy meshing system with figures and sprites in mind.
In both cases, we want to be able to *efficiently* pack many different models into the same texture, especially in cases where we know
we will either not be removing any of the grouped-together from the models from the texture, or will remove all of them at once (so
they can be packed into some specific subtexture).
For sprites, since we know every model in advance and never intend to deallocate them, we currently pack them all as efficiently as
possible into one giant tetxure atlas. However, in the future we might opt to pack them slightly less efficiently in exchange for
shrinking the sprite vertex size.
For figures, we pack all the textures for each *model* into the same atlas.
is a global texture atlas used for every sprite, and for figures which is why we have the ability to mesh multiple
models to the same texture area (using the simple texture atlas allocator) without requiring intermediate vector allocations.
This is accomplished by delaying the time when we actually write the color and light data to the texture until *after* all the
model vertices have been meshed; then, we can just allocate the whole color/light array at once, making the atlas we use an
exact fit. In computer science-y terms, we accomplish this delay by, after we perform the initial greedy meshing (without
texture information), not continuing to create the texture data, but instead constructing a *continuation*--that is, a function
that, when called, will execute the rest of the computation. We push this continuation (which in Rust terms is a `FnOnce` closure
that takes the `ColLightsInfo` that it is supposed to write to as context) onto a
onto a vector
resizing. To allow for suspended writes to texture data, Rust pointed out to me that the continuation that would eventually write the color and light data to the texture atlas (the one that is shared by all models sharing the same greedy mesher) would have to *own* whatever data it mshed. Because we often generate the model data to mesh as a temporary in `voxygen/src/load.rs`, the
- Matrix multiplications in the shader were reduced for figure data (@zesterer).
- Vertex "waves" for fluid data were removed.
- Terrain "bending" near edges was removed.
- Scaling was fixed to make sure empty space was not introduced in a space previously occupied by a block. It was also changed to take ownership of its voxel data,
rather than sharing it, to let it be used with meshing.
- Rust's nightly version was bumped in order to use the `array_map` function, which lets us reuse more code between the simple map and `FigureModelCache`.
- PositionedGlyph::standalone.
---
I tried to cite sources in many cases[^realtime],[^lloyd],[^lispsm],[^pbrt],[^greedy],[^tjunctions]
where I needed features from elsewhere but I am particularly grateful for the following resources,
esepcially where they have accompanying source code. I linked all of them that are accessible to the public (those that are not were
obtained through legal means).
[^realtime]: Eisemann, Elmar, Michael Schwarz, Ulf Assarsson, Michael Wimmer. Real-Time Shadows. A K Peters/CRC Press (T&F), 20160419.
[^lloyd]: Lloyd,B. 2007. [Logarithmic perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). PhD thesis, University of North Carolina.
[^lispsm]: Wimmer, M., Scherzer, D., and Purgathofer, W. 2004. [Light space perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). In Proceedings of Eurographics Symposium on Rendering 2004, pp. 143– 152.
[^pbrt]: Pharr, Matt, et al. [http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf](Physically Based Rendering: From Theory to Implementation). Third edition, Morgan Kaufmann Publishers/Elsevier, 2017.
[^greedy]: mikolalysenko. “Meshing in a Minecraft Game.” 0 FPS, 30 June 2012, <https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/>.
[^tjunctions]: blackflux. “Meshing in Voxel Engines – Part 1.” Blackflux.Com, 23 Feb. 2014, <https://blackflux.wordpress.com/2014/02/23/meshing-in-voxel-engines-part-1/>.
I am also especially grateful to Khronos, Wikiepdia, and stackoverflow for answering many of my specific questions while writing the MR.
---
Squashed commit of the following:
commit 300505e7305a2fdac722a808ee8538323f215f39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 18:46:25 2020 +0200
Fixing cargo doc and typo in CHANGELOG.
commit ec0aeb18e8499d7d84ef818331b4b65c3d76cea6
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 15:38:50 2020 +0200
Hopefully final commit for the LOD branch.
commit 5e8ea0b1eaac02903a02feb2eb038d195de4872f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 10:14:26 2020 +0200
Falling back to power as stopgap.
commit e44a1cbf46504ee9931a01bdc9033e145500d557
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 09:25:41 2020 +0200
Address imbris feedback.
Temporarily disables shiny water, lowers max VD.
These restrictions will be lifted soon after merging.
commit 561e25778a108ac3712f5ec2ce3a51234c4430d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 08:31:13 2020 +0200
Tweaking shaders a bit.
commit 7d19259078ce0dd7b3742ad7d0cb3fab3ece3fdc
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:59:43 2020 +0200
Fix view example as well.
commit 051cd4934e0fad2c0b15db4380a4189fa318679f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:29:06 2020 +0200
Fix meshing benchmark.
commit c95e07db3b4dcca285678985e65e31b927cb1c61
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 05:46:22 2020 +0200
Address MR feedback, fix scene clouds.
commit 1bfb816cabdb3ffc1e507a009c2d98696b4b573a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:39:36 2020 +0200
Incorporating Pfau's figure color changes.
New eyes and new humanoid colors.
commit 3f9b89a3ac7b3356b1dba0d1a8f6541357f81469
Merge: e2f5162e4 62c53963a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:29:41 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit e2f5162e4f96f4124aa43488f7245d341b3dcfd4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:28:38 2020 +0200
World colors are all hotloadable.
They live in assets/world/style/colors.ron.
Only a small handful of hardcoed colors remain in World; they are either
part of the map, or difficult to disentangle from the rest of the
computation. Comments are made where appropriate.
commit 62c53963abe1975009d34a8f9515a355bef24f31
Author: Marcel Märtens <marcel.cochem@googlemail.com>
Date: Wed Aug 19 15:59:00 2020 +0200
replace pretty_env_logger with tracing
commit 5b1625f99d9586fe80e2232f583ec5af9f953099
Merge: d71003acd 4942b5b39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:15:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit d71003acdabeff970b3928e97c26af6847b5b78e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:14:34 2020 +0200
Hotloading colors, part 1: colors in common.
Currently, this just entails humanoid colors. There are only three
colors not handled; the light emitter colors in
common/src/comp/inventory/item/tool.rs. These don't seem important
enough to me to warrant making hotloadable, at least not right now, but
if it's needed later we can always add them to the file.
commit 63b5e0e553eb2ea49276f192a6fc7dd65254270d
Merge: c32b337a4 6d2c4b9c1
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 13:05:37 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c32b337a46e10d9de473d178a94a3ccd61c39bb3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:52:04 2020 +0200
Fixing LOD grid, for real.
commit a166ae0360395387e09fb35a1f84210c2ce5ec24
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:28:05 2020 +0200
Addressing imbris's initial feedback.
Fixes two minor bugs: explosion particles were no longer spawning
randomly, and LOD grids were not perfectly even.
commit 4cbad004f44060994252dd3d38647a14a589712f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:27:58 2020 +0200
Bumping nightly per request.
commit 548680276aac77c25d43d16b5622f847d474dbef
Merge: acc098604 8f8b20c91
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:26:06 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit acc0986040589a3492f88a740bc3c3fc693b26d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:28:32 2020 +0200
Lower resolution due to lying drivers.
commit d3b878de2a52c358d2944a6bbd0555dad7fbdb10
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:15:38 2020 +0200
Fix issues msh encountered with Intel 4600.
commit 10245e0c1b0cb6fae10d86409435364edc6102ef
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 21:15:02 2020 +0200
Merge more models into one mesh than we did previously.
commit 3155c31e663c52ae5c3a53d5fb5665892a1a498a
Merge: 7204cc8a7 3c199280e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:35:22 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7204cc8a7a4f74a30306bd205d9834fee4bb944f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:34:43 2020 +0200
Fix not yet done NPC animations.
This forces them all to be the idle animation if not specified.
This fixes issues where you'd have giant NPCs in water.
commit bc83360f2a08918f19d417b5f772e1ff554dba08
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 19:36:37 2020 +0200
Try to fix some bugs:
- Z fighting with LOD terrain and water.
- Audio SFX not playing.
commit 1fd104aa603bf3781b6526a5cada46aeca3049dd
Merge: 862df3c99 7c2c392a3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 12:02:31 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 862df3c9976c4da9bd7cfd784f1a85973127968a
Merge: 0a4218ed9 75c1d4401
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 05:52:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0a4218ed9d541a2b34c133351bea38a99ddf4ea7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 22:27:14 2020 +0200
Fix particle depth.
commit f51dfdeb442d0dd5243dd2f344fa4be295bd0875
Merge: c6251a956 5e6dc0471
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:19:04 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit c6251a956ad376400dca5c23420cf8d213dc8fdf
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:15:46 2020 +0200
Cache figures more intelligently.
Cache figures for longer, and don't cache character states for the
player except where they actually affect the rendered model.
commit 0ed801d5404982c6fb63b1eaa4567d908b294c9d
Merge: c11b9bdf0 eea64f78f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 16:32:24 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c11b9bdf0a53bf9884d2f5a48fec9b01d582df1a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 11:47:15 2020 +0200
Remove unneeded Clippy annotation.
commit 16aa9ef40af56d69289d00aafb3deadfb8bd4f35
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 8 00:53:02 2020 +0200
Fix hotloading and Clippy.
commit 3dc973e0be5b758da1e9805eb764ad401374cd0c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 23:50:27 2020 +0200
Major speedups with SIMD.
commit fba64a7d93d5a96077ce87287bbce6ab9b7fbcae
Merge: 76429d00e d1e10b178
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:19 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 76429d00eea00d212fbd672a84ee91e75b19b938
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:10 2020 +0200
Add clippy.toml.
commit c79f512f84dbb83cb82b7954db68ff241dfd8e41
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 11:55:20 2020 +0200
Fix all clippy issues, clean up Rust code.
commit 6f90e010b3fbefb53b0d632e819931350015b6b8
Merge: 77a8c7c26 5929cfa5c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:30 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 77a8c7c267d3f44a1a62bd6b2274359973c5e4d4
Merge: b44e44232 44febaabd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:10 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 5929cfa5c713aa392110bbb62407f76caf53c3df
Author: jshipsey <jshipsey18@gmail.com>
Date: Thu Aug 6 20:47:27 2020 -0400
fixed in-hand arrow bug
commit b44e442325d828f1cd564d66908f89d09e80474b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 6 13:40:35 2020 +0200
Miscellaneous performance improvements.
commit be37acf287c1360d8085862526ac3365ffd1d768
Merge: 125d7fc6c c11876547
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 05:49:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 125d7fc6c4dcd8c8c5f27b8268a4d64f409f3644
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 04:55:31 2020 +0200
Abstract over simd vs. repr_c vectors.
Also some minor improvements to Event size.
commit d4d4956e9252e1241ce110b2aa85076c6b1e2a23
Merge: 5f3b7294a aced5f979
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:56:54 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 5f3b7294af1f8533edc2620b58863c248e2b07af
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:43:52 2020 +0200
Fix formatting issues I missed before.
commit a428a3ebba70dcab63dd0f8cd983120c90617271
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:41:51 2020 +0200
Fix clippy warnings, part 1.
There aer still a bunch of type too complex and
function takes too many arguments warnings that I'll fix later
(or ignore, since in the one case I did fix a function takes too
many arguments warning I think it made the code *less* readable).
commit ba54307540ed8a937ac08209730284fc653af85b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 30 13:22:42 2020 +0200
Fix light animations so they are removed when the light turns off.
commit 7e0f4bcbf0f4717145d8beac40d52e3acebbe2aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 21:10:20 2020 +0200
Fix crash in edge case for pixel art.
commit 56da06f7a351e2b949e9b014a90b974d511a0924
Merge: cf74d55f2 9f53a4a19
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:56:52 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:29:52 2020 +0200
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
The first concern was addressed by fixing the dimensions of the map
images drawn from the UI (so that we always use a square source
rectangle, rather than a rectangular one according to the dimensions of
the map). We also fixed the way rotation was done in the fragment
shader for north-facing sources to make it properly handle aspect ratio
(this was already done for north-facing targets). Together, these fix
rendering issues peculiar to rectangular maps.
The second and third concerns were jointly addressed by adding an
optional border color to every 2D image drawn by the UI. This turns
out not to waste extra space even though we hold a full f32 color
(to avoid an extra dependency on gfx's PackedColor), since voxel
images already take up more space than Optiion<[f32; 4]> requires.
This is then implemented automatically using the "border color"
wrapping method in the attached sampler.
Since this is implemented in graphics hardware, it only works (at
least naively) if the actual image bounds match the texture bounds.
Therefore, we altered the way the graphics cache stores images
with a border color to guarantee that they are always in their own
texture, whose size exactly matches their extent. Since the easiest
currently exposed way to set a border color is to do so for an
immutable texture, we went a bit further and added a new "immutable"
texture storage type used for these cases; currently, it is always
and automatically used only when there is a specified border color,
but in theory there's no reason we couldn't provide immutable-only
images that use the default wrapping mdoe (though clamp to border
is admittedly not a great default).
To fix the maps case specifically, we set the border color to a
translucent version of the ocean border color. This may need
tweaking going forward, which shouldn't be hard.
As part of this process, we had to modify graphics replacement to
make sure immutable images are *removed* when invalidated, rather
than just having a validity flag unset (this is normally done by
the UI to try to reuse allocations in place if images are updated
in benign ways, since the texture atlases used for Ui do not
support deallocation; currently this is only used for item images,
so there should be no overlap with immutable image replacement,
so this was purely precautionary).
Since we were already touching the relevant code, we also updated
the image dependency to a newer version that provides more ways
to avoid allocations, and made a few other changes that should
hopefully eliminate redundant most of the intermediate buffer
allocations we were performing for what should be zero-cost
conversions. This may slightly improve performance in some
cases.
commit ad18ce939940a8c697270f6e9b94db9942fd8295
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 13:21:09 2020 +0200
Fix continent scale hack.
commit 36b1cb074f5b195aebd7dbbc3da7f0246a1a18ec
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 12:11:40 2020 +0200
Enable loading different sized maps without a recompile.
We may want to tweak the effects of the continent_scale_hack.
commit 13b6d4d534cc4814b7cb3294ca41bbfea0a6b186
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 10:55:48 2020 +0200
Removing WORLD_SIZE, part 1.
Erased almost every instance of WORLD_SIZE and replaced it with a local
power of two, map_size_lg (which respects certain invariants; see
common/src/terrain/map.rs for more details about MapSizeLg). This also
means we can avoid a dependency on the world crate from client, as
desired.
Now that the rest of the code is not expecting a fixed WORLD_SIZE, the
next step is to arrange for maps to store their world size, and to use
that world size as a basis prior to loading the map (as well, probably,
as prior to configuring some of the noise functions).
commit 30b1d2c6428230a9eaa0d749cdcbbd6f1cbccd78
Merge: 7d56ba31b 1377b369f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:58 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 7d56ba31b445441461b28a07fc495d7d4f047c17
Merge: 2101113b4 598f14b25
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 1377b369f6db2258e910d467a5740f31789e3ded
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sun Jul 19 23:25:38 2020 +0200
more saturated pumpkins
commit ae8d50527f93bb0616c2ad46ce4dacb63bc37c6d
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sat Jul 18 20:29:56 2020 +0200
acacia models
commit 2101113b467e691de787392d7f20f1745f5637bd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 18 18:55:25 2020 +0200
Higher detail LOD.
commit add2cfae04b4385fa5590e11e2bd5229d9dee0aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 16 01:57:39 2020 +0200
Revert some irrelevant stuff.
commit 2e2ab3dc1eaa59a4aef7f8d34a53d8aae4c8553a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 15 13:30:49 2020 +0200
Fixing various things about shadows.
* Correcting optimal LISPSM parameter.
* Figure shadows are cast when they're not visible.
* Chunk shadows stay cast until you look away.
* Seamless cubemaps for point lights.
* Etc.
commit 6c31e6b56217274285b597af297036691ea5d897
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 19:50:26 2020 +0200
Fix shadow creation.
commit 6332cbe006115ae205597529cd8bbccd146c2cca
Merge: be438657c 930e0028b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:47:00 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit be438657c33d7b5bfb0a9582c3ed3fd366637323
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:28:08 2020 +0200
Tweaks to shadows.
Added shadow map resolution configuration, added seamless cubemaps,
documented all existing rendering options, and fixed a few Clippy
errors.
commit 23b4058906013c7d2a40c286e20e32c5fbd897ed
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 10:11:19 2020 +0200
Fix moon, use nonlinear noise for terrain.
Note that the latter has a bit of performance cost.
commit 7fbe5cbfbb9dc29607957b8e62f432a4deed193d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:23:02 2020 +0200
Address lies about max texture size.
commit bcfc62b5e13a1cdd83f57535fde4694720bebfd9
Merge: 75e3626a7 18a08e8fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:22:08 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 75e3626a785919f43fdcf2127c2b10e3e4df2f9f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:21:52 2020 +0200
OpenGL 3.3 minimum.
commit 18a08e8fe2739f02af99a5d2cb4e7c38c49e858b
Author: Monty Marz <m.marzouq@gmx.de>
Date: Tue Jul 7 23:57:52 2020 +0200
settings localization
commit 90c5d1ca3620092bc3ae10b2211489eb1cf6f5e8
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 21:11:48 2020 +0200
Lower near distance.
commit 0e66f02b25aaddaa2dfddbbc89cd67de54a9a7b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 20:09:01 2020 +0200
All sprites sway in the wind now.
commit db1401a6910bf42dcf502462c90038752ff5fbdb
Merge: 69e508d8c e8b4b29d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 19:34:17 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 69e508d8c94d8973033817ca86f357e466fc7c4d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 18:41:37 2020 +0200
Make it easy to switch to SIMD for math.
commit ffe0f5928c7a7e87d00cb5426b3b1d831d7e02fd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 21:21:12 2020 +0200
Fix some issues with underwater rendering.
commit bfda6da42f38fd02c31ee92c81ab785a3e50c2a0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 19:17:59 2020 +0200
Fix some minor display issues.
commit 0ed752e087968cf901301884aaeae698e32ef8a5
Merge: ccc6a06a8 518edcb85
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:14:21 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit ccc6a06a8d4504d6b9f7af7905a414d2ee06ab76
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:04:34 2020 +0200
Some minor changes.
commit 4e020246702889269efe1a191788992164c508d6
Merge: 50a64d927 e05c9267a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 16:17:40 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 50a64d927e6c4f4b0e4688e4cbfca694bc3f922a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 13:07:03 2020 +0200
Fix far plane.
commit 7dd06da34cae8f9ea3b6c889fe965181f3fd3949
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:25:35 2020 +0200
Add shadows.glsl.
commit 618a18c998778bf871b905a74657440fcc384c80
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:10:22 2020 +0200
Adding shadows, greedy meshing, and more.
commit eaea83fe6a5cb1cb0ba8beef888183c718258496
Merge: 267018495 2f89b863e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 22:47:07 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 2670184954a13e4a9e7a4e35ba79aac0c5fac2f7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 21:20:01 2020 +0200
Make civsim and sites deterministic.
For anything in worldgen where you use a HashMap, *please* think
carefully about which hasher you are going to use! This is
especially true if (for some reason) you are depending on hashmap
iteration order remaining stable for some aspect of worldgen.
commit f8376fd5dc72b4a9c2f51a6b4570d59c8b8e9343
Merge: 654f7e049 cdee191dd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 17:53:57 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 654f7e049258d9da27c09608bbe6a46ffa8787e5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed May 20 21:22:30 2020 +0200
Correct backface culling.
commit 560501df05ca725409b0f2e4eb31bdfdc15fd0c7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue May 19 17:22:06 2020 +0200
Greedy messhing for shadows.
commit a4d87e1875ca543436e6bbbeb20348facc5a52d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun May 17 05:59:00 2020 +0200
Shadow maps work for lantern.
commit 243d0837b8a3b08172c9a3c348d964d7ddc2a0a8
Merge: 04382dc28 71dd520cd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:53:13 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 04382dc28632b6c66e8821f6870c0daaa1c1901a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:22:17 2020 +0200
WIP: better graphics config, better LOD, shadow maps.
commit 22ddbad3eb32bfa70f0932176022208fe67ded81
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 18:54:09 2020 +0200
Minor shader fixes.
commit 746a10e8d01ac235f994b0cde78fa48998602a1f
Merge: 0f4a0e763 40ab94673
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 04:02:09 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0f4a0e763db3afbdc4fb0558611f38326ca87151
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 23:03:24 2020 +0200
Switch back to pop-in terrain.
commit dd74fa7e4a53667b38811d7aec58d7f6a68889bb
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 22:58:55 2020 +0200
LOD shading closer to voxel shading.
commit ef67bd58ba0bdaf622b078892d768263b6cba268
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 28 20:49:03 2020 +0200
Experimental underwater lighting.
commit 2c5ad9d07605e80d5fd5679dd3a5d70c605b86a9
Merge: 748279835 303967a6f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 22:35:24 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7482798354eda18c8207950080fc24d443a369de
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 21:59:55 2020 +0200
Replace discard in figure-frag.
commit d83b4ae69be4912f69bf7835f509c68a1c7770a4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:45:57 2020 +0200
Fix sprite lighting, HDR from focus_pos.
commit 0594238004f116274905fa0ed7c2b6c417ed1d29
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:14:10 2020 +0200
Proper HDR from point lights.
commit 48c93d2b41ce5743103d18e76cc228f5ac766492
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 14:01:43 2020 +0200
Brighter ambiance, darker LOD shadows.
commit e0452e895ccfa8a43f368cae3b8b8aedc24dad93
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 13:13:23 2020 +0200
More proper HDR.
commit 4c6da3ed16cfeebb455e40da5f557b4af9a499d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 00:13:10 2020 +0200
Trying LOD noise.
commit 682a3d74c85df5503ffe1fc1cc891bce789df1ad
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 23:11:08 2020 +0200
Fix LOD heights in towns.
commit cc39e5734e8b18f9077bf42e66337c1319dd6b6e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 21:01:23 2020 +0200
More LOD fixes.
commit 8116b21c2e51c836e77894e309ac273caf2917b3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:54:43 2020 +0200
I like this coloring.
commit bc2560ea90b36f4b46190005344232d993043ac3
Merge: 14effdd5d e690efe71
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:48:33 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 14effdd5db8747fcf3eb34f03b46b7792e92d1c5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:24:35 2020 +0200
Re-saturate.
commit 48a643955d4435b78179acba0beb4a979905cc31
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:23:57 2020 +0200
Various fixes.
commit f7b497a0c25f4ad4682c71dd1ed6f608052feb9b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 03:22:49 2020 +0200
Render figures again.
commit 44e4aad48deba8266b9f8bdfd3db096b381f5327
Merge: e6f0a5a98 9ec319a18
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 02:01:04 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit e6f0a5a981a82533ba188fff0a54ce98577bb152
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 24 16:12:20 2020 +0200
Add atmospheric scattering.
commit f2953087f691a8edbc001cb98ebf5059fc6f8ac0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 23 00:01:20 2020 +0200
Fix shadowing for specular reflections.
commit ddd4a67a9799b8d08c7dc0c2bec90621c2bed0e3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Apr 22 22:56:12 2020 +0200
HDR fixes.
commit 1015e60deef3c447381996277df7496707a63bd0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 21 18:25:19 2020 +0200
More lighting changes.
commit 80c264abd111fb237e57843efcb5c071d4f84613
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 13 00:29:59 2020 +0200
Lighting experiments.
commit 8414987e589dd5102bad89762a3adaccc0bfe957
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 9 02:38:40 2020 +0200
WIP -- lighting changes and soft shadows.
commit 9cd2b3fb0d6b49776c6dfe463e4169637250b11a
Merge: c7ea687eb 8b149ad11
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:29 2020 +0200
Merge branch 'sharp/new-lighting' into sharp/small-fixes
commit c7ea687ebbc5aace1b455f134a5bf49ce2c7434a
Merge: 476441531 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:02 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 8b149ad11ad4bb75018fcf9519baec27d1c95951
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:32:39 2020 +0200
Trying out a new lighting model.
commit b0ac9f36f755dd06f7c17c46150568064790864f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 07:56:11 2020 +0200
Use bicubic interpolation for terrain.
commit f6fc9307a121514b614bc50ef8eb055953e7da8a
Merge: 33140a295 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 05:01:41 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 4764415312aae6e9ac2d00e86e84577cb958f1ab
Merge: ed2d0111d 13388ee6a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 04:54:48 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 13388ee6a42943f3f79a9cb488346cef18e272fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 20:30:08 2020 +0200
Various fixes (to coloring and to soft shadows).
commit fbd084a94a067082a87cd6d28b82054709bc9265
Merge: 5a089863b 4fdf6896a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 18:50:38 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/map-colors
commit ed2d0111d994262ae836d84d1fe5a45e4de72a0b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 06:49:27 2020 +0200
Combining colors and LOD.
commit 88342640c6b835114d01c797b89fdede3b0a2108
Merge: 33140a295 5a089863b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:49:20 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 33140a2951b8212725f42c758b277aaec4d888f7
Merge: 4c65a5aed f34d4b379
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:36:21 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 5a089863beb01d4794bbe3580ada47b278715ea2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 03:17:49 2020 +0200
Making maps brighter.
This is probably not the right way to do it, but oh well!
commit 32b2c99109dd486aa922886081068f9c550c83f2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 02:46:36 2020 +0200
Horizon mapping and "layered" map generation.
Horizon mapping is a method of shadow mapping specific to height maps.
It can handle any angle between 0 and 90 degrees from the ground, as
long as know the horizontal direction in advance, by remembering only a
single angle (the "horizon angle" of the shadow map). More is explained
in common/src/msg/server.rs. We also remember the approximate height of
the largest occluder, to try to be able to generate soft shadows and
create a vertical position where the shadows can't go higher.
Additionally, map generation has been reworked. Instead of computing
everything from explicit samples, we pass in sampling functions that
return exactly what the map generator needs. This allows us to cleanly
separate the way we sample things like altitudes and colors from the map
generation process. We exploit this to generate maps *partially* on the
server (with colors and rivers, but not shading). We can then send the
partially completed map to the client, which can combine it with shadow
information to generate the final map. This is useful for two reasons:
first, it makes sure the client can apply shadow information by itself,
and second, it lets us pass the unshaded map for use with level of
detail functionality.
For similar reasons, river generation is split
out into its own layer, but for now we opt to still generate rivers on
the server (since the river wire format is more complicated to compress
and may require some extra work to make sure we have enough precision to
draw rivers well enough for LoD).
Finally, the mostly ad-hoc lighting we were performing has been (mostly)
replaced with explicit Phong reflection shading (including specular
highlights). Regularizing this seems useful and helps clarify the
"meaning" of the various light intensities, and helps us keep a more
physically plausible basis. However, its interaction with soft shadows
is still imperfect, and it's not yet clear to me what we need to do to
turn this into something useful for LoD.
commit f8926a5737ddc51f3d585c651a64c43677aae0f4
Merge: a1aee931e 875ae6ced
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Mar 13 13:32:42 2020 +0100
Merge remote-tracking branch 'origin/master' into sharp/map-colors
commit 4c65a5aed353b119aea65a2aaeb94549b67beb42
Author: Treeco <5021038-Treeco@users.noreply.gitlab.com>
Date: Mon Feb 24 16:48:05 2020 +0000
Made LOD setting slider exponential
commit 2fa7b2d20d7233dc8bfd64f9f7f54617575248f1
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 17:49:53 2020 +0000
Added mist to LoD
commit aab059a450b5f635777129ff82cc15b662965c3c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 15:14:06 2020 +0000
Added LoD slider
commit 779c36b538121c5ade3633ae5cb67bb14c8c3877
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:54:55 2020 +0000
Reduced cost of vertex pushing
commit 9fea150473906b166365b738ebcea07c697daf3d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:38:53 2020 +0000
Fixed maths, improved LoD resolution
commit 5481df38fea5bf183ff376a3337179cfaa5233dc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 11:22:50 2020 +0000
Dynamically relocate LoD vertices to enhance details
commit a3e36a50ababd615da7db1b26158c7906a5def01
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 18:13:51 2020 +0000
Simpler terrain spiral rendering
commit 255f450ae9ac8763db4bede075fb409161ed57cc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:53:17 2020 +0000
Better LoD precision
commit 3d027aebe812a5b8658a4eb8123dc9f61b3776d2
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:04:03 2020 +0000
Better falloff
commit be775c9484b457b2c0b1a494aec03392d0c70e76
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 15:30:45 2020 +0000
Applied good ideas from experimental branch
commit 58587b68545a23c5c04ab4574a4b94b3bc982246
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 16:15:13 2020 +0000
Minor fixes to LoD merging
commit 7b42aebd709c14df2db766aad61d9280ad24d84d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 15:04:44 2020 +0000
Capped LoD dragging
commit 8aafc559f87124e1ea5ca6e3ddc2aa0c242d793c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:54:37 2020 +0000
Better blending between LoD and terrain border
commit edd3455d5161792d87ddc8eadc0ecbad5532b284
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:40:19 2020 +0000
Fixed LoD z depth, added sea level offset
commit b9b06744620114dd5556e73f64fa93c145503a7c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:27:43 2020 +0000
Better LoD smoothing
commit a1aee931e790431560cd2d953ad61d9497072afd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Feb 21 14:52:17 2020 +0100
Adding shadows.
commit 2400786c13dd891c131ed86d48d05df516a8a778
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 13:48:40 2020 +0000
Use world map as LoD source
commit dbf650f504a4c25fbbc2096ac3616c736bf52d23
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Jan 20 00:48:14 2020 +0000
Better clouds at distance
commit 5e6f81b86cdb9730b9b056877b19257075fd5fa8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Jan 19 23:59:02 2020 +0000
sync
commit 745e7540ddb000cc645f612767b337c2ddc3f7c0
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 12:40:48 2019 +0000
Improved cloud falloff mist, faster noise sampling
commit f6a200d0cb866196ba57697466755f9e0c7ea5d8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 10:09:00 2019 +0000
Improved long-range depth precision, removed unnecessary LoD polygons
commit 63d1b2bb2292898d59fb4f4e502201103dfeb86f
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 20:57:46 2019 +0000
Working LoD shader
commit f13d98ee3e58f881e8b978861a67663b59ed91ec
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 11:03:40 2019 +0000
LoD first attempt (stack overflow issue)
2020-08-20 18:34:59 +00:00
|
|
|
|
Some(&self.chunks[vec2_as_uniform_idx(self.map_size_lg(), chunk_pos)])
|
2019-05-16 17:40:32 +00:00
|
|
|
|
} else {
|
|
|
|
|
None
|
|
|
|
|
}
|
|
|
|
|
}
|
2019-05-20 02:53:04 +00:00
|
|
|
|
|
2020-03-27 13:16:02 +00:00
|
|
|
|
pub fn get_gradient_approx(&self, chunk_pos: Vec2<i32>) -> Option<f32> {
|
|
|
|
|
let a = self.get(chunk_pos)?;
|
|
|
|
|
if let Some(downhill) = a.downhill {
|
2020-06-30 14:56:49 +00:00
|
|
|
|
let b =
|
|
|
|
|
self.get(downhill.map2(TerrainChunkSize::RECT_SIZE, |e, sz: u32| e / (sz as i32)))?;
|
2020-03-27 13:16:02 +00:00
|
|
|
|
Some((a.alt - b.alt).abs() / TerrainChunkSize::RECT_SIZE.x as f32)
|
|
|
|
|
} else {
|
|
|
|
|
Some(0.0)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2020-04-11 15:50:40 +00:00
|
|
|
|
pub fn get_alt_approx(&self, wpos: Vec2<i32>) -> Option<f32> {
|
|
|
|
|
self.get_interpolated(wpos, |chunk| chunk.alt)
|
2020-04-10 11:16:30 +00:00
|
|
|
|
}
|
|
|
|
|
|
2019-08-24 13:23:42 +00:00
|
|
|
|
pub fn get_wpos(&self, wpos: Vec2<i32>) -> Option<&SimChunk> {
|
2020-06-30 14:56:49 +00:00
|
|
|
|
self.get(wpos.map2(TerrainChunkSize::RECT_SIZE, |e, sz: u32| {
|
|
|
|
|
e.div_euclid(sz as i32)
|
|
|
|
|
}))
|
2019-08-24 13:23:42 +00:00
|
|
|
|
}
|
|
|
|
|
|
2019-06-18 21:22:31 +00:00
|
|
|
|
pub fn get_mut(&mut self, chunk_pos: Vec2<i32>) -> Option<&mut SimChunk> {
|
(See sharp/lod-history) LOD, shadows, greedy meshing, new lighting, perf
---
Pretty much a Veloren fork at this point. Here's a high level overview of the changes (will be added to CHANGELOG just before merge).
At a high level this MR incorporates roughly two groups of changes.
The first group consists of new game features: more flexible map sizes, level of detail terrain, shadow maps, and a new lighting
engine. This is "feature work" that (mostly) only adds new things to Veloren, and mostly shouldn't affect old stuff.
The second big group of changes are those addressing the fallout from all the new features. These include performance fixes of
various sorts: the addition of multiple graphics options and optimization of the cheap ones to avoid work, switching all voxel
models to use some variant of greedy meshing, switching over much of our CPU-side vector math to exploit SIMD instructions
(coinciding with a fork of `vek`), and a rewrite of how the UI handles text rendering (coinciding with updates to our fork
of `conrod`). Making Veloren's hardcoded colors appear correct under the new lighting engine also required considerably
changes (TODO: Fill in this section when it's complete).
The second category of changes often heavily touches code owned by other people, including frequently modified code "owned" by a
handful of people, so I recommend that this code be reviewed particularly carefully.
---
At a high level (each will be described in more detail below):
- The world map has been refactored.
- The world size is no longer hardcoded (@zesterer).
- The map generation code was made generic to allow using it outside of the `world` crate (@zesterer).
- On world creation, we now compute *horizon maps* (@zesterer).
- The way we pass the world from the server to the client has been updated (@xMAC94x).
- Artifacts related to image rotation were fixed (@imbris).
- Multiflow rivers were enabled (@zesterer).
- In the process of making changes related to the world map, various incidental fixes and optimizations were required.
- The new *level of detail* feature was added (@zesterer wrote part of this and has checked out the rest).
- A new LOD terrain rendering step was added to the pipeline.
- The LOD terrain quality was made configurable via a graphics setting.
- Horizon maps were used to cast shadows from LOD chunks on both LOD and non-LOD terrain.
- A "voxelization" effect was incorporated into rendered LOD terrain to make it blend better into the world.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Veloren's lighting has been completely overhauled (@zesterer has already checked most of this out).
- A semi-accurate index of refraction was assigned to our materials.
- A new, more realistic, physically based approach to lighting was used using the *Ashikhmin Shirley* BRDF.
- We emulate *atmospheric scattering* using equations designed for measuring solar panel light exposure.
- We attempt to compute *realistic light attenuation* in water using its real material properties.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Point and directional lights now cast realistic shadows, using *shadow mapping.* (@imbris, @zesterer, @Treeco, @YuriMomo)
- Point light shadow maps were added to the rendering pipeline, using geometry shaders and *seamless cube maps*.
- Directional light shadows were added to the rendering pipeline, using LISPSM together with disabling *depth clamping*.
- "Shadow-only" chunks and NPCs were added to prevent shadows from models behind you from disappearing.
- In the process of making changes related to shadow maps, various incidental fixes and optimizations were required.
The addition of shadow maps, LOD terrain, and the new lighting all led to significant performance degradation, on top of other
changes happening in master. Therefore, a large number of performance improvements were also needed:
- The graphics options were made much more flexible and configurable, and shaders were optimize.
- New options were provided for how to render lights and shadows (@Pfauenauge, @zesterer).
- Graphic setting storage and configuration were overhauled to make adding new features easier (@Pfauenauge, @imbris).
- Shaders were rewritten to utilize GLSL's preprocessor to avoid overhead (@zesterer, @YuriMomo).
- In the process of making changes related to providing additional rendering options, various incidental fixes and optimizations were required.
- Voxel model creation was switched to use *greedy meshing.*
- A new voxel meshing method, greedy meshing, was added (@imbris).
- Uses of the older meshing methods were migrated to use greedy meshing (@imbris, @jshipsey, @Pfauenauge).
- New restrictions were added to terrain, figure, and sprites to future proof them for further optimizations (@jshipsey, @Pfauenauge, @zesterer).
- Most positions are now relative to either chunk or player position for better precision (@imbris, @zesterer, @scottc).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- Animation and terrain math were switched to use SIMD where possible.
- Fixes were made to vek to make its SIMD feature usable for us (@zesterer, @imbris).
- The interface and types used in bone animation were changed in various ways (@jshipsey, @Snowram, @Pfauenauge).
- Redundant code generation for body animation is now partly taken care of by a macro (@jshipsey, @Snowram, @Pfauenauge).
- Animation code was modified to to use vek's SIMD representation where possible (@jshipsey, @Snowram, @Pfauenauge).
- Terrain meshing code and shadow map math were also modified to use vek's SIMD representation (@imbris).
- SIMD instruction generation was enabled (@YuriMomo, @jshipsey, @Snowram, @imbris, @Angelonfira, @xMAC94x).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- The way we cache glyphs was completely refactored, fixed, and optimized.
- Our fork of `conrod` was optimized in various ways (@imbris).
- Our fork of `conrod` now exposes whether a widget was updated during the current frame (@imbris).
- Our use of the glyph cache was rewritten for correctness (@imbris).
- A *text cache* was introduced that lets us skip remeshing glyphs that have not changed (@imbris).
- Various changes were made to reduce pressure on the glyph cache, with more planned (@imbris, @Pfauenauge).
- In the process of making changes related to the glyph cache, various incidental fixes and optimizations were required.
- Colors were changed to keep Veloren's look consistent with master.
- Some older tree models were brought back (@Pfauenauge).
- TODO(@Sharp): All hardcoded colors were extracted and made hotloadable.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Hardcoded colors were fixed to conform to Veloren's style.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Color models were fixed to conform to Veloren's style.
A detailed description of the involved changes follows.
---
- The world size is no longer hardcoded. All functions dependent on world size now take a `WorldSizeLg`, which holds the base 2 logarithm of each actual world dimension and is guaranteed to maintain certain properties (outlined in `common/src/terrain/map.rs`). Additionally, many utility functions that utilize the world size were moved into `common` as well (mostly `common/src/terrain/mod.rs`). Finally, the world map format was updated in order to store its size explicitly, with a migration path from the old format that should work whenever the old formatted map was a square (practically always). See `world/src/sim/mod.rs` for these changes.
- The map generation code was made generic to allow using it outside of the `world` crate. The parts of the map generating code that do not need to query the world were moved over to `common/src/terrain/map.rs`, allowing them to be used from the client without creating a dependency on `world`. The rest of it was turned into helper functions in `world/src/sim/map.rs`, which can be passed as closures to the generic map generation code to complete its construction. This also means that colors are now passed in separately to the map generation function. See <https://veloren.net/devblog-78/> for more details.
- On world creation, we now compute *horizon maps*. See the function in `world/src/sim/util.rs`.
Given a height map and a plane intersecting that height map, our horizon maps allow us to encode enough information to reconstruct shadows for each point on the height map using only the *horizon angle* (the angle at which the sun starts to become visible). As Veloren's sun only covers one plane, this is sufficient for encoding sun shadows for LOD terrain, by encoding two angles per chunk (one for each 90 degrees the sun covers). We can also use this for the moon, if we want, since the moon follows the same path. Additionally, we store the *height* of the furthest occluder, to try to make the shadows volumetric; so this means 4 bytes in total for each chunk.
Support for horizon maps has been merged into the map functionality in common as well.
- The way we pass the world from the server to the client has been updated. Rather than passing the prerendered map, we instead pass three maps with values for each chunk; one with the color information, a second with altitude information, and a third with horizon map information. We then reconstruct the map on the client, together with some additional information we send from the server (like the sea level and maximum height). See `common/src/msg/server.rs` for a detailed description of the format of `WorldMapMsg`, and `server/src/libr.rs` and `client/src/lib.rs` for details of the map construction and parsing.
- Artifacts related to image rotation were fixed. See the commit message for commit SHA `cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e` for a detailed explanation. This involved changes to shaders, the addition of a new type of graphic (also reflected in the graphic cache) that allows specifying a border color (which automatically makes the associated texture immutable), and some related fixes. I reproduce the first two paragraphs of the MR description as well:
```
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
```
- Multiflow rivers were enabled.
This does not really need to be part of this MR, and would be easy to revert, but since it seemed to provide a nice improvement it's currently packaged with it.
We already computed multiple outflows from each chunk for erosion purposes long before this MR.
However, we never modified river rendering to be able to handle this case (just a single downhill river flow is complex enough!) so this was not exposed when deciding which chunks were rivers.
Now that
- In the process of making changes related to the world map, various incidental fixes and optimizations were required. Some examples of fixes include making sure terrain is never lowered to below sea level (to make the shadow maps report correct values), fixing map altitudes and colors to understand things like cliffs and "block level" coloring (that doesn'te xist on the column level), and fixing a crashbug when rendering images for the UI where source pixels are strongly rectangular. Some examples of related performance fixes include avoiding allocating a fresh vector for all the maps (i.e. copying it over to change the format from `[u32; n]` to `DynamicImage` and then copying again to convert to `RgbaImage`), and instead using the `gfx::memory::slice` function to accomplish the same thing. These sorts of changes are spread all arond the code.
This includes the additon of a new scene, `voxygen/src/scene/lod.rs`, a new pipeline `voxygen/src/render/pipeline/lod_terrain.rs`, and new shaders `assets/vxygen/shaders/lod-terrain-vert.glsl` and `assets/vxygen/shaders/lod-terrain-frag.glsl`, as well as associated changes to the renderer in `voxygen/src/render/renderer.rs`.
The main idea behind our initial approach to LOD was to take the world data we now get from the server (altitude, color, and horizon mapping).
- Some previously computed values were turned into shader uniforms for better prediction on weak processors. (@zesterer)
- Calls to power or trig functions were removed or replaced with multiplications, where possible.
- After some deliberation
- To properly handle sprite "waving" for nearby sprites,
We explicitly designed the greedy meshing system with figures and sprites in mind.
In both cases, we want to be able to *efficiently* pack many different models into the same texture, especially in cases where we know
we will either not be removing any of the grouped-together from the models from the texture, or will remove all of them at once (so
they can be packed into some specific subtexture).
For sprites, since we know every model in advance and never intend to deallocate them, we currently pack them all as efficiently as
possible into one giant tetxure atlas. However, in the future we might opt to pack them slightly less efficiently in exchange for
shrinking the sprite vertex size.
For figures, we pack all the textures for each *model* into the same atlas.
is a global texture atlas used for every sprite, and for figures which is why we have the ability to mesh multiple
models to the same texture area (using the simple texture atlas allocator) without requiring intermediate vector allocations.
This is accomplished by delaying the time when we actually write the color and light data to the texture until *after* all the
model vertices have been meshed; then, we can just allocate the whole color/light array at once, making the atlas we use an
exact fit. In computer science-y terms, we accomplish this delay by, after we perform the initial greedy meshing (without
texture information), not continuing to create the texture data, but instead constructing a *continuation*--that is, a function
that, when called, will execute the rest of the computation. We push this continuation (which in Rust terms is a `FnOnce` closure
that takes the `ColLightsInfo` that it is supposed to write to as context) onto a
onto a vector
resizing. To allow for suspended writes to texture data, Rust pointed out to me that the continuation that would eventually write the color and light data to the texture atlas (the one that is shared by all models sharing the same greedy mesher) would have to *own* whatever data it mshed. Because we often generate the model data to mesh as a temporary in `voxygen/src/load.rs`, the
- Matrix multiplications in the shader were reduced for figure data (@zesterer).
- Vertex "waves" for fluid data were removed.
- Terrain "bending" near edges was removed.
- Scaling was fixed to make sure empty space was not introduced in a space previously occupied by a block. It was also changed to take ownership of its voxel data,
rather than sharing it, to let it be used with meshing.
- Rust's nightly version was bumped in order to use the `array_map` function, which lets us reuse more code between the simple map and `FigureModelCache`.
- PositionedGlyph::standalone.
---
I tried to cite sources in many cases[^realtime],[^lloyd],[^lispsm],[^pbrt],[^greedy],[^tjunctions]
where I needed features from elsewhere but I am particularly grateful for the following resources,
esepcially where they have accompanying source code. I linked all of them that are accessible to the public (those that are not were
obtained through legal means).
[^realtime]: Eisemann, Elmar, Michael Schwarz, Ulf Assarsson, Michael Wimmer. Real-Time Shadows. A K Peters/CRC Press (T&F), 20160419.
[^lloyd]: Lloyd,B. 2007. [Logarithmic perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). PhD thesis, University of North Carolina.
[^lispsm]: Wimmer, M., Scherzer, D., and Purgathofer, W. 2004. [Light space perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). In Proceedings of Eurographics Symposium on Rendering 2004, pp. 143– 152.
[^pbrt]: Pharr, Matt, et al. [http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf](Physically Based Rendering: From Theory to Implementation). Third edition, Morgan Kaufmann Publishers/Elsevier, 2017.
[^greedy]: mikolalysenko. “Meshing in a Minecraft Game.” 0 FPS, 30 June 2012, <https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/>.
[^tjunctions]: blackflux. “Meshing in Voxel Engines – Part 1.” Blackflux.Com, 23 Feb. 2014, <https://blackflux.wordpress.com/2014/02/23/meshing-in-voxel-engines-part-1/>.
I am also especially grateful to Khronos, Wikiepdia, and stackoverflow for answering many of my specific questions while writing the MR.
---
Squashed commit of the following:
commit 300505e7305a2fdac722a808ee8538323f215f39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 18:46:25 2020 +0200
Fixing cargo doc and typo in CHANGELOG.
commit ec0aeb18e8499d7d84ef818331b4b65c3d76cea6
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 15:38:50 2020 +0200
Hopefully final commit for the LOD branch.
commit 5e8ea0b1eaac02903a02feb2eb038d195de4872f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 10:14:26 2020 +0200
Falling back to power as stopgap.
commit e44a1cbf46504ee9931a01bdc9033e145500d557
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 09:25:41 2020 +0200
Address imbris feedback.
Temporarily disables shiny water, lowers max VD.
These restrictions will be lifted soon after merging.
commit 561e25778a108ac3712f5ec2ce3a51234c4430d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 08:31:13 2020 +0200
Tweaking shaders a bit.
commit 7d19259078ce0dd7b3742ad7d0cb3fab3ece3fdc
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:59:43 2020 +0200
Fix view example as well.
commit 051cd4934e0fad2c0b15db4380a4189fa318679f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:29:06 2020 +0200
Fix meshing benchmark.
commit c95e07db3b4dcca285678985e65e31b927cb1c61
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 05:46:22 2020 +0200
Address MR feedback, fix scene clouds.
commit 1bfb816cabdb3ffc1e507a009c2d98696b4b573a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:39:36 2020 +0200
Incorporating Pfau's figure color changes.
New eyes and new humanoid colors.
commit 3f9b89a3ac7b3356b1dba0d1a8f6541357f81469
Merge: e2f5162e4 62c53963a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:29:41 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit e2f5162e4f96f4124aa43488f7245d341b3dcfd4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:28:38 2020 +0200
World colors are all hotloadable.
They live in assets/world/style/colors.ron.
Only a small handful of hardcoed colors remain in World; they are either
part of the map, or difficult to disentangle from the rest of the
computation. Comments are made where appropriate.
commit 62c53963abe1975009d34a8f9515a355bef24f31
Author: Marcel Märtens <marcel.cochem@googlemail.com>
Date: Wed Aug 19 15:59:00 2020 +0200
replace pretty_env_logger with tracing
commit 5b1625f99d9586fe80e2232f583ec5af9f953099
Merge: d71003acd 4942b5b39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:15:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit d71003acdabeff970b3928e97c26af6847b5b78e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:14:34 2020 +0200
Hotloading colors, part 1: colors in common.
Currently, this just entails humanoid colors. There are only three
colors not handled; the light emitter colors in
common/src/comp/inventory/item/tool.rs. These don't seem important
enough to me to warrant making hotloadable, at least not right now, but
if it's needed later we can always add them to the file.
commit 63b5e0e553eb2ea49276f192a6fc7dd65254270d
Merge: c32b337a4 6d2c4b9c1
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 13:05:37 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c32b337a46e10d9de473d178a94a3ccd61c39bb3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:52:04 2020 +0200
Fixing LOD grid, for real.
commit a166ae0360395387e09fb35a1f84210c2ce5ec24
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:28:05 2020 +0200
Addressing imbris's initial feedback.
Fixes two minor bugs: explosion particles were no longer spawning
randomly, and LOD grids were not perfectly even.
commit 4cbad004f44060994252dd3d38647a14a589712f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:27:58 2020 +0200
Bumping nightly per request.
commit 548680276aac77c25d43d16b5622f847d474dbef
Merge: acc098604 8f8b20c91
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:26:06 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit acc0986040589a3492f88a740bc3c3fc693b26d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:28:32 2020 +0200
Lower resolution due to lying drivers.
commit d3b878de2a52c358d2944a6bbd0555dad7fbdb10
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:15:38 2020 +0200
Fix issues msh encountered with Intel 4600.
commit 10245e0c1b0cb6fae10d86409435364edc6102ef
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 21:15:02 2020 +0200
Merge more models into one mesh than we did previously.
commit 3155c31e663c52ae5c3a53d5fb5665892a1a498a
Merge: 7204cc8a7 3c199280e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:35:22 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7204cc8a7a4f74a30306bd205d9834fee4bb944f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:34:43 2020 +0200
Fix not yet done NPC animations.
This forces them all to be the idle animation if not specified.
This fixes issues where you'd have giant NPCs in water.
commit bc83360f2a08918f19d417b5f772e1ff554dba08
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 19:36:37 2020 +0200
Try to fix some bugs:
- Z fighting with LOD terrain and water.
- Audio SFX not playing.
commit 1fd104aa603bf3781b6526a5cada46aeca3049dd
Merge: 862df3c99 7c2c392a3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 12:02:31 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 862df3c9976c4da9bd7cfd784f1a85973127968a
Merge: 0a4218ed9 75c1d4401
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 05:52:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0a4218ed9d541a2b34c133351bea38a99ddf4ea7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 22:27:14 2020 +0200
Fix particle depth.
commit f51dfdeb442d0dd5243dd2f344fa4be295bd0875
Merge: c6251a956 5e6dc0471
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:19:04 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit c6251a956ad376400dca5c23420cf8d213dc8fdf
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:15:46 2020 +0200
Cache figures more intelligently.
Cache figures for longer, and don't cache character states for the
player except where they actually affect the rendered model.
commit 0ed801d5404982c6fb63b1eaa4567d908b294c9d
Merge: c11b9bdf0 eea64f78f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 16:32:24 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c11b9bdf0a53bf9884d2f5a48fec9b01d582df1a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 11:47:15 2020 +0200
Remove unneeded Clippy annotation.
commit 16aa9ef40af56d69289d00aafb3deadfb8bd4f35
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 8 00:53:02 2020 +0200
Fix hotloading and Clippy.
commit 3dc973e0be5b758da1e9805eb764ad401374cd0c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 23:50:27 2020 +0200
Major speedups with SIMD.
commit fba64a7d93d5a96077ce87287bbce6ab9b7fbcae
Merge: 76429d00e d1e10b178
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:19 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 76429d00eea00d212fbd672a84ee91e75b19b938
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:10 2020 +0200
Add clippy.toml.
commit c79f512f84dbb83cb82b7954db68ff241dfd8e41
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 11:55:20 2020 +0200
Fix all clippy issues, clean up Rust code.
commit 6f90e010b3fbefb53b0d632e819931350015b6b8
Merge: 77a8c7c26 5929cfa5c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:30 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 77a8c7c267d3f44a1a62bd6b2274359973c5e4d4
Merge: b44e44232 44febaabd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:10 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 5929cfa5c713aa392110bbb62407f76caf53c3df
Author: jshipsey <jshipsey18@gmail.com>
Date: Thu Aug 6 20:47:27 2020 -0400
fixed in-hand arrow bug
commit b44e442325d828f1cd564d66908f89d09e80474b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 6 13:40:35 2020 +0200
Miscellaneous performance improvements.
commit be37acf287c1360d8085862526ac3365ffd1d768
Merge: 125d7fc6c c11876547
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 05:49:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 125d7fc6c4dcd8c8c5f27b8268a4d64f409f3644
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 04:55:31 2020 +0200
Abstract over simd vs. repr_c vectors.
Also some minor improvements to Event size.
commit d4d4956e9252e1241ce110b2aa85076c6b1e2a23
Merge: 5f3b7294a aced5f979
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:56:54 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 5f3b7294af1f8533edc2620b58863c248e2b07af
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:43:52 2020 +0200
Fix formatting issues I missed before.
commit a428a3ebba70dcab63dd0f8cd983120c90617271
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:41:51 2020 +0200
Fix clippy warnings, part 1.
There aer still a bunch of type too complex and
function takes too many arguments warnings that I'll fix later
(or ignore, since in the one case I did fix a function takes too
many arguments warning I think it made the code *less* readable).
commit ba54307540ed8a937ac08209730284fc653af85b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 30 13:22:42 2020 +0200
Fix light animations so they are removed when the light turns off.
commit 7e0f4bcbf0f4717145d8beac40d52e3acebbe2aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 21:10:20 2020 +0200
Fix crash in edge case for pixel art.
commit 56da06f7a351e2b949e9b014a90b974d511a0924
Merge: cf74d55f2 9f53a4a19
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:56:52 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:29:52 2020 +0200
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
The first concern was addressed by fixing the dimensions of the map
images drawn from the UI (so that we always use a square source
rectangle, rather than a rectangular one according to the dimensions of
the map). We also fixed the way rotation was done in the fragment
shader for north-facing sources to make it properly handle aspect ratio
(this was already done for north-facing targets). Together, these fix
rendering issues peculiar to rectangular maps.
The second and third concerns were jointly addressed by adding an
optional border color to every 2D image drawn by the UI. This turns
out not to waste extra space even though we hold a full f32 color
(to avoid an extra dependency on gfx's PackedColor), since voxel
images already take up more space than Optiion<[f32; 4]> requires.
This is then implemented automatically using the "border color"
wrapping method in the attached sampler.
Since this is implemented in graphics hardware, it only works (at
least naively) if the actual image bounds match the texture bounds.
Therefore, we altered the way the graphics cache stores images
with a border color to guarantee that they are always in their own
texture, whose size exactly matches their extent. Since the easiest
currently exposed way to set a border color is to do so for an
immutable texture, we went a bit further and added a new "immutable"
texture storage type used for these cases; currently, it is always
and automatically used only when there is a specified border color,
but in theory there's no reason we couldn't provide immutable-only
images that use the default wrapping mdoe (though clamp to border
is admittedly not a great default).
To fix the maps case specifically, we set the border color to a
translucent version of the ocean border color. This may need
tweaking going forward, which shouldn't be hard.
As part of this process, we had to modify graphics replacement to
make sure immutable images are *removed* when invalidated, rather
than just having a validity flag unset (this is normally done by
the UI to try to reuse allocations in place if images are updated
in benign ways, since the texture atlases used for Ui do not
support deallocation; currently this is only used for item images,
so there should be no overlap with immutable image replacement,
so this was purely precautionary).
Since we were already touching the relevant code, we also updated
the image dependency to a newer version that provides more ways
to avoid allocations, and made a few other changes that should
hopefully eliminate redundant most of the intermediate buffer
allocations we were performing for what should be zero-cost
conversions. This may slightly improve performance in some
cases.
commit ad18ce939940a8c697270f6e9b94db9942fd8295
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 13:21:09 2020 +0200
Fix continent scale hack.
commit 36b1cb074f5b195aebd7dbbc3da7f0246a1a18ec
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 12:11:40 2020 +0200
Enable loading different sized maps without a recompile.
We may want to tweak the effects of the continent_scale_hack.
commit 13b6d4d534cc4814b7cb3294ca41bbfea0a6b186
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 10:55:48 2020 +0200
Removing WORLD_SIZE, part 1.
Erased almost every instance of WORLD_SIZE and replaced it with a local
power of two, map_size_lg (which respects certain invariants; see
common/src/terrain/map.rs for more details about MapSizeLg). This also
means we can avoid a dependency on the world crate from client, as
desired.
Now that the rest of the code is not expecting a fixed WORLD_SIZE, the
next step is to arrange for maps to store their world size, and to use
that world size as a basis prior to loading the map (as well, probably,
as prior to configuring some of the noise functions).
commit 30b1d2c6428230a9eaa0d749cdcbbd6f1cbccd78
Merge: 7d56ba31b 1377b369f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:58 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 7d56ba31b445441461b28a07fc495d7d4f047c17
Merge: 2101113b4 598f14b25
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 1377b369f6db2258e910d467a5740f31789e3ded
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sun Jul 19 23:25:38 2020 +0200
more saturated pumpkins
commit ae8d50527f93bb0616c2ad46ce4dacb63bc37c6d
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sat Jul 18 20:29:56 2020 +0200
acacia models
commit 2101113b467e691de787392d7f20f1745f5637bd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 18 18:55:25 2020 +0200
Higher detail LOD.
commit add2cfae04b4385fa5590e11e2bd5229d9dee0aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 16 01:57:39 2020 +0200
Revert some irrelevant stuff.
commit 2e2ab3dc1eaa59a4aef7f8d34a53d8aae4c8553a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 15 13:30:49 2020 +0200
Fixing various things about shadows.
* Correcting optimal LISPSM parameter.
* Figure shadows are cast when they're not visible.
* Chunk shadows stay cast until you look away.
* Seamless cubemaps for point lights.
* Etc.
commit 6c31e6b56217274285b597af297036691ea5d897
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 19:50:26 2020 +0200
Fix shadow creation.
commit 6332cbe006115ae205597529cd8bbccd146c2cca
Merge: be438657c 930e0028b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:47:00 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit be438657c33d7b5bfb0a9582c3ed3fd366637323
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:28:08 2020 +0200
Tweaks to shadows.
Added shadow map resolution configuration, added seamless cubemaps,
documented all existing rendering options, and fixed a few Clippy
errors.
commit 23b4058906013c7d2a40c286e20e32c5fbd897ed
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 10:11:19 2020 +0200
Fix moon, use nonlinear noise for terrain.
Note that the latter has a bit of performance cost.
commit 7fbe5cbfbb9dc29607957b8e62f432a4deed193d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:23:02 2020 +0200
Address lies about max texture size.
commit bcfc62b5e13a1cdd83f57535fde4694720bebfd9
Merge: 75e3626a7 18a08e8fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:22:08 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 75e3626a785919f43fdcf2127c2b10e3e4df2f9f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:21:52 2020 +0200
OpenGL 3.3 minimum.
commit 18a08e8fe2739f02af99a5d2cb4e7c38c49e858b
Author: Monty Marz <m.marzouq@gmx.de>
Date: Tue Jul 7 23:57:52 2020 +0200
settings localization
commit 90c5d1ca3620092bc3ae10b2211489eb1cf6f5e8
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 21:11:48 2020 +0200
Lower near distance.
commit 0e66f02b25aaddaa2dfddbbc89cd67de54a9a7b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 20:09:01 2020 +0200
All sprites sway in the wind now.
commit db1401a6910bf42dcf502462c90038752ff5fbdb
Merge: 69e508d8c e8b4b29d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 19:34:17 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 69e508d8c94d8973033817ca86f357e466fc7c4d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 18:41:37 2020 +0200
Make it easy to switch to SIMD for math.
commit ffe0f5928c7a7e87d00cb5426b3b1d831d7e02fd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 21:21:12 2020 +0200
Fix some issues with underwater rendering.
commit bfda6da42f38fd02c31ee92c81ab785a3e50c2a0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 19:17:59 2020 +0200
Fix some minor display issues.
commit 0ed752e087968cf901301884aaeae698e32ef8a5
Merge: ccc6a06a8 518edcb85
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:14:21 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit ccc6a06a8d4504d6b9f7af7905a414d2ee06ab76
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:04:34 2020 +0200
Some minor changes.
commit 4e020246702889269efe1a191788992164c508d6
Merge: 50a64d927 e05c9267a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 16:17:40 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 50a64d927e6c4f4b0e4688e4cbfca694bc3f922a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 13:07:03 2020 +0200
Fix far plane.
commit 7dd06da34cae8f9ea3b6c889fe965181f3fd3949
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:25:35 2020 +0200
Add shadows.glsl.
commit 618a18c998778bf871b905a74657440fcc384c80
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:10:22 2020 +0200
Adding shadows, greedy meshing, and more.
commit eaea83fe6a5cb1cb0ba8beef888183c718258496
Merge: 267018495 2f89b863e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 22:47:07 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 2670184954a13e4a9e7a4e35ba79aac0c5fac2f7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 21:20:01 2020 +0200
Make civsim and sites deterministic.
For anything in worldgen where you use a HashMap, *please* think
carefully about which hasher you are going to use! This is
especially true if (for some reason) you are depending on hashmap
iteration order remaining stable for some aspect of worldgen.
commit f8376fd5dc72b4a9c2f51a6b4570d59c8b8e9343
Merge: 654f7e049 cdee191dd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 17:53:57 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 654f7e049258d9da27c09608bbe6a46ffa8787e5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed May 20 21:22:30 2020 +0200
Correct backface culling.
commit 560501df05ca725409b0f2e4eb31bdfdc15fd0c7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue May 19 17:22:06 2020 +0200
Greedy messhing for shadows.
commit a4d87e1875ca543436e6bbbeb20348facc5a52d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun May 17 05:59:00 2020 +0200
Shadow maps work for lantern.
commit 243d0837b8a3b08172c9a3c348d964d7ddc2a0a8
Merge: 04382dc28 71dd520cd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:53:13 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 04382dc28632b6c66e8821f6870c0daaa1c1901a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:22:17 2020 +0200
WIP: better graphics config, better LOD, shadow maps.
commit 22ddbad3eb32bfa70f0932176022208fe67ded81
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 18:54:09 2020 +0200
Minor shader fixes.
commit 746a10e8d01ac235f994b0cde78fa48998602a1f
Merge: 0f4a0e763 40ab94673
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 04:02:09 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0f4a0e763db3afbdc4fb0558611f38326ca87151
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 23:03:24 2020 +0200
Switch back to pop-in terrain.
commit dd74fa7e4a53667b38811d7aec58d7f6a68889bb
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 22:58:55 2020 +0200
LOD shading closer to voxel shading.
commit ef67bd58ba0bdaf622b078892d768263b6cba268
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 28 20:49:03 2020 +0200
Experimental underwater lighting.
commit 2c5ad9d07605e80d5fd5679dd3a5d70c605b86a9
Merge: 748279835 303967a6f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 22:35:24 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7482798354eda18c8207950080fc24d443a369de
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 21:59:55 2020 +0200
Replace discard in figure-frag.
commit d83b4ae69be4912f69bf7835f509c68a1c7770a4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:45:57 2020 +0200
Fix sprite lighting, HDR from focus_pos.
commit 0594238004f116274905fa0ed7c2b6c417ed1d29
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:14:10 2020 +0200
Proper HDR from point lights.
commit 48c93d2b41ce5743103d18e76cc228f5ac766492
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 14:01:43 2020 +0200
Brighter ambiance, darker LOD shadows.
commit e0452e895ccfa8a43f368cae3b8b8aedc24dad93
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 13:13:23 2020 +0200
More proper HDR.
commit 4c6da3ed16cfeebb455e40da5f557b4af9a499d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 00:13:10 2020 +0200
Trying LOD noise.
commit 682a3d74c85df5503ffe1fc1cc891bce789df1ad
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 23:11:08 2020 +0200
Fix LOD heights in towns.
commit cc39e5734e8b18f9077bf42e66337c1319dd6b6e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 21:01:23 2020 +0200
More LOD fixes.
commit 8116b21c2e51c836e77894e309ac273caf2917b3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:54:43 2020 +0200
I like this coloring.
commit bc2560ea90b36f4b46190005344232d993043ac3
Merge: 14effdd5d e690efe71
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:48:33 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 14effdd5db8747fcf3eb34f03b46b7792e92d1c5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:24:35 2020 +0200
Re-saturate.
commit 48a643955d4435b78179acba0beb4a979905cc31
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:23:57 2020 +0200
Various fixes.
commit f7b497a0c25f4ad4682c71dd1ed6f608052feb9b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 03:22:49 2020 +0200
Render figures again.
commit 44e4aad48deba8266b9f8bdfd3db096b381f5327
Merge: e6f0a5a98 9ec319a18
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 02:01:04 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit e6f0a5a981a82533ba188fff0a54ce98577bb152
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 24 16:12:20 2020 +0200
Add atmospheric scattering.
commit f2953087f691a8edbc001cb98ebf5059fc6f8ac0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 23 00:01:20 2020 +0200
Fix shadowing for specular reflections.
commit ddd4a67a9799b8d08c7dc0c2bec90621c2bed0e3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Apr 22 22:56:12 2020 +0200
HDR fixes.
commit 1015e60deef3c447381996277df7496707a63bd0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 21 18:25:19 2020 +0200
More lighting changes.
commit 80c264abd111fb237e57843efcb5c071d4f84613
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 13 00:29:59 2020 +0200
Lighting experiments.
commit 8414987e589dd5102bad89762a3adaccc0bfe957
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 9 02:38:40 2020 +0200
WIP -- lighting changes and soft shadows.
commit 9cd2b3fb0d6b49776c6dfe463e4169637250b11a
Merge: c7ea687eb 8b149ad11
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:29 2020 +0200
Merge branch 'sharp/new-lighting' into sharp/small-fixes
commit c7ea687ebbc5aace1b455f134a5bf49ce2c7434a
Merge: 476441531 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:02 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 8b149ad11ad4bb75018fcf9519baec27d1c95951
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:32:39 2020 +0200
Trying out a new lighting model.
commit b0ac9f36f755dd06f7c17c46150568064790864f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 07:56:11 2020 +0200
Use bicubic interpolation for terrain.
commit f6fc9307a121514b614bc50ef8eb055953e7da8a
Merge: 33140a295 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 05:01:41 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 4764415312aae6e9ac2d00e86e84577cb958f1ab
Merge: ed2d0111d 13388ee6a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 04:54:48 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 13388ee6a42943f3f79a9cb488346cef18e272fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 20:30:08 2020 +0200
Various fixes (to coloring and to soft shadows).
commit fbd084a94a067082a87cd6d28b82054709bc9265
Merge: 5a089863b 4fdf6896a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 18:50:38 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/map-colors
commit ed2d0111d994262ae836d84d1fe5a45e4de72a0b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 06:49:27 2020 +0200
Combining colors and LOD.
commit 88342640c6b835114d01c797b89fdede3b0a2108
Merge: 33140a295 5a089863b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:49:20 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 33140a2951b8212725f42c758b277aaec4d888f7
Merge: 4c65a5aed f34d4b379
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:36:21 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 5a089863beb01d4794bbe3580ada47b278715ea2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 03:17:49 2020 +0200
Making maps brighter.
This is probably not the right way to do it, but oh well!
commit 32b2c99109dd486aa922886081068f9c550c83f2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 02:46:36 2020 +0200
Horizon mapping and "layered" map generation.
Horizon mapping is a method of shadow mapping specific to height maps.
It can handle any angle between 0 and 90 degrees from the ground, as
long as know the horizontal direction in advance, by remembering only a
single angle (the "horizon angle" of the shadow map). More is explained
in common/src/msg/server.rs. We also remember the approximate height of
the largest occluder, to try to be able to generate soft shadows and
create a vertical position where the shadows can't go higher.
Additionally, map generation has been reworked. Instead of computing
everything from explicit samples, we pass in sampling functions that
return exactly what the map generator needs. This allows us to cleanly
separate the way we sample things like altitudes and colors from the map
generation process. We exploit this to generate maps *partially* on the
server (with colors and rivers, but not shading). We can then send the
partially completed map to the client, which can combine it with shadow
information to generate the final map. This is useful for two reasons:
first, it makes sure the client can apply shadow information by itself,
and second, it lets us pass the unshaded map for use with level of
detail functionality.
For similar reasons, river generation is split
out into its own layer, but for now we opt to still generate rivers on
the server (since the river wire format is more complicated to compress
and may require some extra work to make sure we have enough precision to
draw rivers well enough for LoD).
Finally, the mostly ad-hoc lighting we were performing has been (mostly)
replaced with explicit Phong reflection shading (including specular
highlights). Regularizing this seems useful and helps clarify the
"meaning" of the various light intensities, and helps us keep a more
physically plausible basis. However, its interaction with soft shadows
is still imperfect, and it's not yet clear to me what we need to do to
turn this into something useful for LoD.
commit f8926a5737ddc51f3d585c651a64c43677aae0f4
Merge: a1aee931e 875ae6ced
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Mar 13 13:32:42 2020 +0100
Merge remote-tracking branch 'origin/master' into sharp/map-colors
commit 4c65a5aed353b119aea65a2aaeb94549b67beb42
Author: Treeco <5021038-Treeco@users.noreply.gitlab.com>
Date: Mon Feb 24 16:48:05 2020 +0000
Made LOD setting slider exponential
commit 2fa7b2d20d7233dc8bfd64f9f7f54617575248f1
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 17:49:53 2020 +0000
Added mist to LoD
commit aab059a450b5f635777129ff82cc15b662965c3c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 15:14:06 2020 +0000
Added LoD slider
commit 779c36b538121c5ade3633ae5cb67bb14c8c3877
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:54:55 2020 +0000
Reduced cost of vertex pushing
commit 9fea150473906b166365b738ebcea07c697daf3d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:38:53 2020 +0000
Fixed maths, improved LoD resolution
commit 5481df38fea5bf183ff376a3337179cfaa5233dc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 11:22:50 2020 +0000
Dynamically relocate LoD vertices to enhance details
commit a3e36a50ababd615da7db1b26158c7906a5def01
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 18:13:51 2020 +0000
Simpler terrain spiral rendering
commit 255f450ae9ac8763db4bede075fb409161ed57cc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:53:17 2020 +0000
Better LoD precision
commit 3d027aebe812a5b8658a4eb8123dc9f61b3776d2
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:04:03 2020 +0000
Better falloff
commit be775c9484b457b2c0b1a494aec03392d0c70e76
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 15:30:45 2020 +0000
Applied good ideas from experimental branch
commit 58587b68545a23c5c04ab4574a4b94b3bc982246
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 16:15:13 2020 +0000
Minor fixes to LoD merging
commit 7b42aebd709c14df2db766aad61d9280ad24d84d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 15:04:44 2020 +0000
Capped LoD dragging
commit 8aafc559f87124e1ea5ca6e3ddc2aa0c242d793c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:54:37 2020 +0000
Better blending between LoD and terrain border
commit edd3455d5161792d87ddc8eadc0ecbad5532b284
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:40:19 2020 +0000
Fixed LoD z depth, added sea level offset
commit b9b06744620114dd5556e73f64fa93c145503a7c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:27:43 2020 +0000
Better LoD smoothing
commit a1aee931e790431560cd2d953ad61d9497072afd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Feb 21 14:52:17 2020 +0100
Adding shadows.
commit 2400786c13dd891c131ed86d48d05df516a8a778
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 13:48:40 2020 +0000
Use world map as LoD source
commit dbf650f504a4c25fbbc2096ac3616c736bf52d23
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Jan 20 00:48:14 2020 +0000
Better clouds at distance
commit 5e6f81b86cdb9730b9b056877b19257075fd5fa8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Jan 19 23:59:02 2020 +0000
sync
commit 745e7540ddb000cc645f612767b337c2ddc3f7c0
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 12:40:48 2019 +0000
Improved cloud falloff mist, faster noise sampling
commit f6a200d0cb866196ba57697466755f9e0c7ea5d8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 10:09:00 2019 +0000
Improved long-range depth precision, removed unnecessary LoD polygons
commit 63d1b2bb2292898d59fb4f4e502201103dfeb86f
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 20:57:46 2019 +0000
Working LoD shader
commit f13d98ee3e58f881e8b978861a67663b59ed91ec
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 11:03:40 2019 +0000
LoD first attempt (stack overflow issue)
2020-08-20 18:34:59 +00:00
|
|
|
|
let map_size_lg = self.map_size_lg();
|
2019-06-18 21:22:31 +00:00
|
|
|
|
if chunk_pos
|
(See sharp/lod-history) LOD, shadows, greedy meshing, new lighting, perf
---
Pretty much a Veloren fork at this point. Here's a high level overview of the changes (will be added to CHANGELOG just before merge).
At a high level this MR incorporates roughly two groups of changes.
The first group consists of new game features: more flexible map sizes, level of detail terrain, shadow maps, and a new lighting
engine. This is "feature work" that (mostly) only adds new things to Veloren, and mostly shouldn't affect old stuff.
The second big group of changes are those addressing the fallout from all the new features. These include performance fixes of
various sorts: the addition of multiple graphics options and optimization of the cheap ones to avoid work, switching all voxel
models to use some variant of greedy meshing, switching over much of our CPU-side vector math to exploit SIMD instructions
(coinciding with a fork of `vek`), and a rewrite of how the UI handles text rendering (coinciding with updates to our fork
of `conrod`). Making Veloren's hardcoded colors appear correct under the new lighting engine also required considerably
changes (TODO: Fill in this section when it's complete).
The second category of changes often heavily touches code owned by other people, including frequently modified code "owned" by a
handful of people, so I recommend that this code be reviewed particularly carefully.
---
At a high level (each will be described in more detail below):
- The world map has been refactored.
- The world size is no longer hardcoded (@zesterer).
- The map generation code was made generic to allow using it outside of the `world` crate (@zesterer).
- On world creation, we now compute *horizon maps* (@zesterer).
- The way we pass the world from the server to the client has been updated (@xMAC94x).
- Artifacts related to image rotation were fixed (@imbris).
- Multiflow rivers were enabled (@zesterer).
- In the process of making changes related to the world map, various incidental fixes and optimizations were required.
- The new *level of detail* feature was added (@zesterer wrote part of this and has checked out the rest).
- A new LOD terrain rendering step was added to the pipeline.
- The LOD terrain quality was made configurable via a graphics setting.
- Horizon maps were used to cast shadows from LOD chunks on both LOD and non-LOD terrain.
- A "voxelization" effect was incorporated into rendered LOD terrain to make it blend better into the world.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Veloren's lighting has been completely overhauled (@zesterer has already checked most of this out).
- A semi-accurate index of refraction was assigned to our materials.
- A new, more realistic, physically based approach to lighting was used using the *Ashikhmin Shirley* BRDF.
- We emulate *atmospheric scattering* using equations designed for measuring solar panel light exposure.
- We attempt to compute *realistic light attenuation* in water using its real material properties.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Point and directional lights now cast realistic shadows, using *shadow mapping.* (@imbris, @zesterer, @Treeco, @YuriMomo)
- Point light shadow maps were added to the rendering pipeline, using geometry shaders and *seamless cube maps*.
- Directional light shadows were added to the rendering pipeline, using LISPSM together with disabling *depth clamping*.
- "Shadow-only" chunks and NPCs were added to prevent shadows from models behind you from disappearing.
- In the process of making changes related to shadow maps, various incidental fixes and optimizations were required.
The addition of shadow maps, LOD terrain, and the new lighting all led to significant performance degradation, on top of other
changes happening in master. Therefore, a large number of performance improvements were also needed:
- The graphics options were made much more flexible and configurable, and shaders were optimize.
- New options were provided for how to render lights and shadows (@Pfauenauge, @zesterer).
- Graphic setting storage and configuration were overhauled to make adding new features easier (@Pfauenauge, @imbris).
- Shaders were rewritten to utilize GLSL's preprocessor to avoid overhead (@zesterer, @YuriMomo).
- In the process of making changes related to providing additional rendering options, various incidental fixes and optimizations were required.
- Voxel model creation was switched to use *greedy meshing.*
- A new voxel meshing method, greedy meshing, was added (@imbris).
- Uses of the older meshing methods were migrated to use greedy meshing (@imbris, @jshipsey, @Pfauenauge).
- New restrictions were added to terrain, figure, and sprites to future proof them for further optimizations (@jshipsey, @Pfauenauge, @zesterer).
- Most positions are now relative to either chunk or player position for better precision (@imbris, @zesterer, @scottc).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- Animation and terrain math were switched to use SIMD where possible.
- Fixes were made to vek to make its SIMD feature usable for us (@zesterer, @imbris).
- The interface and types used in bone animation were changed in various ways (@jshipsey, @Snowram, @Pfauenauge).
- Redundant code generation for body animation is now partly taken care of by a macro (@jshipsey, @Snowram, @Pfauenauge).
- Animation code was modified to to use vek's SIMD representation where possible (@jshipsey, @Snowram, @Pfauenauge).
- Terrain meshing code and shadow map math were also modified to use vek's SIMD representation (@imbris).
- SIMD instruction generation was enabled (@YuriMomo, @jshipsey, @Snowram, @imbris, @Angelonfira, @xMAC94x).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- The way we cache glyphs was completely refactored, fixed, and optimized.
- Our fork of `conrod` was optimized in various ways (@imbris).
- Our fork of `conrod` now exposes whether a widget was updated during the current frame (@imbris).
- Our use of the glyph cache was rewritten for correctness (@imbris).
- A *text cache* was introduced that lets us skip remeshing glyphs that have not changed (@imbris).
- Various changes were made to reduce pressure on the glyph cache, with more planned (@imbris, @Pfauenauge).
- In the process of making changes related to the glyph cache, various incidental fixes and optimizations were required.
- Colors were changed to keep Veloren's look consistent with master.
- Some older tree models were brought back (@Pfauenauge).
- TODO(@Sharp): All hardcoded colors were extracted and made hotloadable.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Hardcoded colors were fixed to conform to Veloren's style.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Color models were fixed to conform to Veloren's style.
A detailed description of the involved changes follows.
---
- The world size is no longer hardcoded. All functions dependent on world size now take a `WorldSizeLg`, which holds the base 2 logarithm of each actual world dimension and is guaranteed to maintain certain properties (outlined in `common/src/terrain/map.rs`). Additionally, many utility functions that utilize the world size were moved into `common` as well (mostly `common/src/terrain/mod.rs`). Finally, the world map format was updated in order to store its size explicitly, with a migration path from the old format that should work whenever the old formatted map was a square (practically always). See `world/src/sim/mod.rs` for these changes.
- The map generation code was made generic to allow using it outside of the `world` crate. The parts of the map generating code that do not need to query the world were moved over to `common/src/terrain/map.rs`, allowing them to be used from the client without creating a dependency on `world`. The rest of it was turned into helper functions in `world/src/sim/map.rs`, which can be passed as closures to the generic map generation code to complete its construction. This also means that colors are now passed in separately to the map generation function. See <https://veloren.net/devblog-78/> for more details.
- On world creation, we now compute *horizon maps*. See the function in `world/src/sim/util.rs`.
Given a height map and a plane intersecting that height map, our horizon maps allow us to encode enough information to reconstruct shadows for each point on the height map using only the *horizon angle* (the angle at which the sun starts to become visible). As Veloren's sun only covers one plane, this is sufficient for encoding sun shadows for LOD terrain, by encoding two angles per chunk (one for each 90 degrees the sun covers). We can also use this for the moon, if we want, since the moon follows the same path. Additionally, we store the *height* of the furthest occluder, to try to make the shadows volumetric; so this means 4 bytes in total for each chunk.
Support for horizon maps has been merged into the map functionality in common as well.
- The way we pass the world from the server to the client has been updated. Rather than passing the prerendered map, we instead pass three maps with values for each chunk; one with the color information, a second with altitude information, and a third with horizon map information. We then reconstruct the map on the client, together with some additional information we send from the server (like the sea level and maximum height). See `common/src/msg/server.rs` for a detailed description of the format of `WorldMapMsg`, and `server/src/libr.rs` and `client/src/lib.rs` for details of the map construction and parsing.
- Artifacts related to image rotation were fixed. See the commit message for commit SHA `cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e` for a detailed explanation. This involved changes to shaders, the addition of a new type of graphic (also reflected in the graphic cache) that allows specifying a border color (which automatically makes the associated texture immutable), and some related fixes. I reproduce the first two paragraphs of the MR description as well:
```
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
```
- Multiflow rivers were enabled.
This does not really need to be part of this MR, and would be easy to revert, but since it seemed to provide a nice improvement it's currently packaged with it.
We already computed multiple outflows from each chunk for erosion purposes long before this MR.
However, we never modified river rendering to be able to handle this case (just a single downhill river flow is complex enough!) so this was not exposed when deciding which chunks were rivers.
Now that
- In the process of making changes related to the world map, various incidental fixes and optimizations were required. Some examples of fixes include making sure terrain is never lowered to below sea level (to make the shadow maps report correct values), fixing map altitudes and colors to understand things like cliffs and "block level" coloring (that doesn'te xist on the column level), and fixing a crashbug when rendering images for the UI where source pixels are strongly rectangular. Some examples of related performance fixes include avoiding allocating a fresh vector for all the maps (i.e. copying it over to change the format from `[u32; n]` to `DynamicImage` and then copying again to convert to `RgbaImage`), and instead using the `gfx::memory::slice` function to accomplish the same thing. These sorts of changes are spread all arond the code.
This includes the additon of a new scene, `voxygen/src/scene/lod.rs`, a new pipeline `voxygen/src/render/pipeline/lod_terrain.rs`, and new shaders `assets/vxygen/shaders/lod-terrain-vert.glsl` and `assets/vxygen/shaders/lod-terrain-frag.glsl`, as well as associated changes to the renderer in `voxygen/src/render/renderer.rs`.
The main idea behind our initial approach to LOD was to take the world data we now get from the server (altitude, color, and horizon mapping).
- Some previously computed values were turned into shader uniforms for better prediction on weak processors. (@zesterer)
- Calls to power or trig functions were removed or replaced with multiplications, where possible.
- After some deliberation
- To properly handle sprite "waving" for nearby sprites,
We explicitly designed the greedy meshing system with figures and sprites in mind.
In both cases, we want to be able to *efficiently* pack many different models into the same texture, especially in cases where we know
we will either not be removing any of the grouped-together from the models from the texture, or will remove all of them at once (so
they can be packed into some specific subtexture).
For sprites, since we know every model in advance and never intend to deallocate them, we currently pack them all as efficiently as
possible into one giant tetxure atlas. However, in the future we might opt to pack them slightly less efficiently in exchange for
shrinking the sprite vertex size.
For figures, we pack all the textures for each *model* into the same atlas.
is a global texture atlas used for every sprite, and for figures which is why we have the ability to mesh multiple
models to the same texture area (using the simple texture atlas allocator) without requiring intermediate vector allocations.
This is accomplished by delaying the time when we actually write the color and light data to the texture until *after* all the
model vertices have been meshed; then, we can just allocate the whole color/light array at once, making the atlas we use an
exact fit. In computer science-y terms, we accomplish this delay by, after we perform the initial greedy meshing (without
texture information), not continuing to create the texture data, but instead constructing a *continuation*--that is, a function
that, when called, will execute the rest of the computation. We push this continuation (which in Rust terms is a `FnOnce` closure
that takes the `ColLightsInfo` that it is supposed to write to as context) onto a
onto a vector
resizing. To allow for suspended writes to texture data, Rust pointed out to me that the continuation that would eventually write the color and light data to the texture atlas (the one that is shared by all models sharing the same greedy mesher) would have to *own* whatever data it mshed. Because we often generate the model data to mesh as a temporary in `voxygen/src/load.rs`, the
- Matrix multiplications in the shader were reduced for figure data (@zesterer).
- Vertex "waves" for fluid data were removed.
- Terrain "bending" near edges was removed.
- Scaling was fixed to make sure empty space was not introduced in a space previously occupied by a block. It was also changed to take ownership of its voxel data,
rather than sharing it, to let it be used with meshing.
- Rust's nightly version was bumped in order to use the `array_map` function, which lets us reuse more code between the simple map and `FigureModelCache`.
- PositionedGlyph::standalone.
---
I tried to cite sources in many cases[^realtime],[^lloyd],[^lispsm],[^pbrt],[^greedy],[^tjunctions]
where I needed features from elsewhere but I am particularly grateful for the following resources,
esepcially where they have accompanying source code. I linked all of them that are accessible to the public (those that are not were
obtained through legal means).
[^realtime]: Eisemann, Elmar, Michael Schwarz, Ulf Assarsson, Michael Wimmer. Real-Time Shadows. A K Peters/CRC Press (T&F), 20160419.
[^lloyd]: Lloyd,B. 2007. [Logarithmic perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). PhD thesis, University of North Carolina.
[^lispsm]: Wimmer, M., Scherzer, D., and Purgathofer, W. 2004. [Light space perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). In Proceedings of Eurographics Symposium on Rendering 2004, pp. 143– 152.
[^pbrt]: Pharr, Matt, et al. [http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf](Physically Based Rendering: From Theory to Implementation). Third edition, Morgan Kaufmann Publishers/Elsevier, 2017.
[^greedy]: mikolalysenko. “Meshing in a Minecraft Game.” 0 FPS, 30 June 2012, <https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/>.
[^tjunctions]: blackflux. “Meshing in Voxel Engines – Part 1.” Blackflux.Com, 23 Feb. 2014, <https://blackflux.wordpress.com/2014/02/23/meshing-in-voxel-engines-part-1/>.
I am also especially grateful to Khronos, Wikiepdia, and stackoverflow for answering many of my specific questions while writing the MR.
---
Squashed commit of the following:
commit 300505e7305a2fdac722a808ee8538323f215f39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 18:46:25 2020 +0200
Fixing cargo doc and typo in CHANGELOG.
commit ec0aeb18e8499d7d84ef818331b4b65c3d76cea6
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 15:38:50 2020 +0200
Hopefully final commit for the LOD branch.
commit 5e8ea0b1eaac02903a02feb2eb038d195de4872f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 10:14:26 2020 +0200
Falling back to power as stopgap.
commit e44a1cbf46504ee9931a01bdc9033e145500d557
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 09:25:41 2020 +0200
Address imbris feedback.
Temporarily disables shiny water, lowers max VD.
These restrictions will be lifted soon after merging.
commit 561e25778a108ac3712f5ec2ce3a51234c4430d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 08:31:13 2020 +0200
Tweaking shaders a bit.
commit 7d19259078ce0dd7b3742ad7d0cb3fab3ece3fdc
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:59:43 2020 +0200
Fix view example as well.
commit 051cd4934e0fad2c0b15db4380a4189fa318679f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:29:06 2020 +0200
Fix meshing benchmark.
commit c95e07db3b4dcca285678985e65e31b927cb1c61
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 05:46:22 2020 +0200
Address MR feedback, fix scene clouds.
commit 1bfb816cabdb3ffc1e507a009c2d98696b4b573a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:39:36 2020 +0200
Incorporating Pfau's figure color changes.
New eyes and new humanoid colors.
commit 3f9b89a3ac7b3356b1dba0d1a8f6541357f81469
Merge: e2f5162e4 62c53963a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:29:41 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit e2f5162e4f96f4124aa43488f7245d341b3dcfd4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:28:38 2020 +0200
World colors are all hotloadable.
They live in assets/world/style/colors.ron.
Only a small handful of hardcoed colors remain in World; they are either
part of the map, or difficult to disentangle from the rest of the
computation. Comments are made where appropriate.
commit 62c53963abe1975009d34a8f9515a355bef24f31
Author: Marcel Märtens <marcel.cochem@googlemail.com>
Date: Wed Aug 19 15:59:00 2020 +0200
replace pretty_env_logger with tracing
commit 5b1625f99d9586fe80e2232f583ec5af9f953099
Merge: d71003acd 4942b5b39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:15:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit d71003acdabeff970b3928e97c26af6847b5b78e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:14:34 2020 +0200
Hotloading colors, part 1: colors in common.
Currently, this just entails humanoid colors. There are only three
colors not handled; the light emitter colors in
common/src/comp/inventory/item/tool.rs. These don't seem important
enough to me to warrant making hotloadable, at least not right now, but
if it's needed later we can always add them to the file.
commit 63b5e0e553eb2ea49276f192a6fc7dd65254270d
Merge: c32b337a4 6d2c4b9c1
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 13:05:37 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c32b337a46e10d9de473d178a94a3ccd61c39bb3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:52:04 2020 +0200
Fixing LOD grid, for real.
commit a166ae0360395387e09fb35a1f84210c2ce5ec24
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:28:05 2020 +0200
Addressing imbris's initial feedback.
Fixes two minor bugs: explosion particles were no longer spawning
randomly, and LOD grids were not perfectly even.
commit 4cbad004f44060994252dd3d38647a14a589712f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:27:58 2020 +0200
Bumping nightly per request.
commit 548680276aac77c25d43d16b5622f847d474dbef
Merge: acc098604 8f8b20c91
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:26:06 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit acc0986040589a3492f88a740bc3c3fc693b26d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:28:32 2020 +0200
Lower resolution due to lying drivers.
commit d3b878de2a52c358d2944a6bbd0555dad7fbdb10
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:15:38 2020 +0200
Fix issues msh encountered with Intel 4600.
commit 10245e0c1b0cb6fae10d86409435364edc6102ef
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 21:15:02 2020 +0200
Merge more models into one mesh than we did previously.
commit 3155c31e663c52ae5c3a53d5fb5665892a1a498a
Merge: 7204cc8a7 3c199280e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:35:22 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7204cc8a7a4f74a30306bd205d9834fee4bb944f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:34:43 2020 +0200
Fix not yet done NPC animations.
This forces them all to be the idle animation if not specified.
This fixes issues where you'd have giant NPCs in water.
commit bc83360f2a08918f19d417b5f772e1ff554dba08
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 19:36:37 2020 +0200
Try to fix some bugs:
- Z fighting with LOD terrain and water.
- Audio SFX not playing.
commit 1fd104aa603bf3781b6526a5cada46aeca3049dd
Merge: 862df3c99 7c2c392a3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 12:02:31 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 862df3c9976c4da9bd7cfd784f1a85973127968a
Merge: 0a4218ed9 75c1d4401
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 05:52:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0a4218ed9d541a2b34c133351bea38a99ddf4ea7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 22:27:14 2020 +0200
Fix particle depth.
commit f51dfdeb442d0dd5243dd2f344fa4be295bd0875
Merge: c6251a956 5e6dc0471
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:19:04 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit c6251a956ad376400dca5c23420cf8d213dc8fdf
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:15:46 2020 +0200
Cache figures more intelligently.
Cache figures for longer, and don't cache character states for the
player except where they actually affect the rendered model.
commit 0ed801d5404982c6fb63b1eaa4567d908b294c9d
Merge: c11b9bdf0 eea64f78f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 16:32:24 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c11b9bdf0a53bf9884d2f5a48fec9b01d582df1a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 11:47:15 2020 +0200
Remove unneeded Clippy annotation.
commit 16aa9ef40af56d69289d00aafb3deadfb8bd4f35
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 8 00:53:02 2020 +0200
Fix hotloading and Clippy.
commit 3dc973e0be5b758da1e9805eb764ad401374cd0c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 23:50:27 2020 +0200
Major speedups with SIMD.
commit fba64a7d93d5a96077ce87287bbce6ab9b7fbcae
Merge: 76429d00e d1e10b178
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:19 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 76429d00eea00d212fbd672a84ee91e75b19b938
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:10 2020 +0200
Add clippy.toml.
commit c79f512f84dbb83cb82b7954db68ff241dfd8e41
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 11:55:20 2020 +0200
Fix all clippy issues, clean up Rust code.
commit 6f90e010b3fbefb53b0d632e819931350015b6b8
Merge: 77a8c7c26 5929cfa5c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:30 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 77a8c7c267d3f44a1a62bd6b2274359973c5e4d4
Merge: b44e44232 44febaabd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:10 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 5929cfa5c713aa392110bbb62407f76caf53c3df
Author: jshipsey <jshipsey18@gmail.com>
Date: Thu Aug 6 20:47:27 2020 -0400
fixed in-hand arrow bug
commit b44e442325d828f1cd564d66908f89d09e80474b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 6 13:40:35 2020 +0200
Miscellaneous performance improvements.
commit be37acf287c1360d8085862526ac3365ffd1d768
Merge: 125d7fc6c c11876547
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 05:49:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 125d7fc6c4dcd8c8c5f27b8268a4d64f409f3644
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 04:55:31 2020 +0200
Abstract over simd vs. repr_c vectors.
Also some minor improvements to Event size.
commit d4d4956e9252e1241ce110b2aa85076c6b1e2a23
Merge: 5f3b7294a aced5f979
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:56:54 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 5f3b7294af1f8533edc2620b58863c248e2b07af
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:43:52 2020 +0200
Fix formatting issues I missed before.
commit a428a3ebba70dcab63dd0f8cd983120c90617271
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:41:51 2020 +0200
Fix clippy warnings, part 1.
There aer still a bunch of type too complex and
function takes too many arguments warnings that I'll fix later
(or ignore, since in the one case I did fix a function takes too
many arguments warning I think it made the code *less* readable).
commit ba54307540ed8a937ac08209730284fc653af85b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 30 13:22:42 2020 +0200
Fix light animations so they are removed when the light turns off.
commit 7e0f4bcbf0f4717145d8beac40d52e3acebbe2aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 21:10:20 2020 +0200
Fix crash in edge case for pixel art.
commit 56da06f7a351e2b949e9b014a90b974d511a0924
Merge: cf74d55f2 9f53a4a19
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:56:52 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:29:52 2020 +0200
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
The first concern was addressed by fixing the dimensions of the map
images drawn from the UI (so that we always use a square source
rectangle, rather than a rectangular one according to the dimensions of
the map). We also fixed the way rotation was done in the fragment
shader for north-facing sources to make it properly handle aspect ratio
(this was already done for north-facing targets). Together, these fix
rendering issues peculiar to rectangular maps.
The second and third concerns were jointly addressed by adding an
optional border color to every 2D image drawn by the UI. This turns
out not to waste extra space even though we hold a full f32 color
(to avoid an extra dependency on gfx's PackedColor), since voxel
images already take up more space than Optiion<[f32; 4]> requires.
This is then implemented automatically using the "border color"
wrapping method in the attached sampler.
Since this is implemented in graphics hardware, it only works (at
least naively) if the actual image bounds match the texture bounds.
Therefore, we altered the way the graphics cache stores images
with a border color to guarantee that they are always in their own
texture, whose size exactly matches their extent. Since the easiest
currently exposed way to set a border color is to do so for an
immutable texture, we went a bit further and added a new "immutable"
texture storage type used for these cases; currently, it is always
and automatically used only when there is a specified border color,
but in theory there's no reason we couldn't provide immutable-only
images that use the default wrapping mdoe (though clamp to border
is admittedly not a great default).
To fix the maps case specifically, we set the border color to a
translucent version of the ocean border color. This may need
tweaking going forward, which shouldn't be hard.
As part of this process, we had to modify graphics replacement to
make sure immutable images are *removed* when invalidated, rather
than just having a validity flag unset (this is normally done by
the UI to try to reuse allocations in place if images are updated
in benign ways, since the texture atlases used for Ui do not
support deallocation; currently this is only used for item images,
so there should be no overlap with immutable image replacement,
so this was purely precautionary).
Since we were already touching the relevant code, we also updated
the image dependency to a newer version that provides more ways
to avoid allocations, and made a few other changes that should
hopefully eliminate redundant most of the intermediate buffer
allocations we were performing for what should be zero-cost
conversions. This may slightly improve performance in some
cases.
commit ad18ce939940a8c697270f6e9b94db9942fd8295
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 13:21:09 2020 +0200
Fix continent scale hack.
commit 36b1cb074f5b195aebd7dbbc3da7f0246a1a18ec
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 12:11:40 2020 +0200
Enable loading different sized maps without a recompile.
We may want to tweak the effects of the continent_scale_hack.
commit 13b6d4d534cc4814b7cb3294ca41bbfea0a6b186
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 10:55:48 2020 +0200
Removing WORLD_SIZE, part 1.
Erased almost every instance of WORLD_SIZE and replaced it with a local
power of two, map_size_lg (which respects certain invariants; see
common/src/terrain/map.rs for more details about MapSizeLg). This also
means we can avoid a dependency on the world crate from client, as
desired.
Now that the rest of the code is not expecting a fixed WORLD_SIZE, the
next step is to arrange for maps to store their world size, and to use
that world size as a basis prior to loading the map (as well, probably,
as prior to configuring some of the noise functions).
commit 30b1d2c6428230a9eaa0d749cdcbbd6f1cbccd78
Merge: 7d56ba31b 1377b369f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:58 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 7d56ba31b445441461b28a07fc495d7d4f047c17
Merge: 2101113b4 598f14b25
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 1377b369f6db2258e910d467a5740f31789e3ded
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sun Jul 19 23:25:38 2020 +0200
more saturated pumpkins
commit ae8d50527f93bb0616c2ad46ce4dacb63bc37c6d
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sat Jul 18 20:29:56 2020 +0200
acacia models
commit 2101113b467e691de787392d7f20f1745f5637bd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 18 18:55:25 2020 +0200
Higher detail LOD.
commit add2cfae04b4385fa5590e11e2bd5229d9dee0aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 16 01:57:39 2020 +0200
Revert some irrelevant stuff.
commit 2e2ab3dc1eaa59a4aef7f8d34a53d8aae4c8553a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 15 13:30:49 2020 +0200
Fixing various things about shadows.
* Correcting optimal LISPSM parameter.
* Figure shadows are cast when they're not visible.
* Chunk shadows stay cast until you look away.
* Seamless cubemaps for point lights.
* Etc.
commit 6c31e6b56217274285b597af297036691ea5d897
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 19:50:26 2020 +0200
Fix shadow creation.
commit 6332cbe006115ae205597529cd8bbccd146c2cca
Merge: be438657c 930e0028b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:47:00 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit be438657c33d7b5bfb0a9582c3ed3fd366637323
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:28:08 2020 +0200
Tweaks to shadows.
Added shadow map resolution configuration, added seamless cubemaps,
documented all existing rendering options, and fixed a few Clippy
errors.
commit 23b4058906013c7d2a40c286e20e32c5fbd897ed
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 10:11:19 2020 +0200
Fix moon, use nonlinear noise for terrain.
Note that the latter has a bit of performance cost.
commit 7fbe5cbfbb9dc29607957b8e62f432a4deed193d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:23:02 2020 +0200
Address lies about max texture size.
commit bcfc62b5e13a1cdd83f57535fde4694720bebfd9
Merge: 75e3626a7 18a08e8fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:22:08 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 75e3626a785919f43fdcf2127c2b10e3e4df2f9f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:21:52 2020 +0200
OpenGL 3.3 minimum.
commit 18a08e8fe2739f02af99a5d2cb4e7c38c49e858b
Author: Monty Marz <m.marzouq@gmx.de>
Date: Tue Jul 7 23:57:52 2020 +0200
settings localization
commit 90c5d1ca3620092bc3ae10b2211489eb1cf6f5e8
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 21:11:48 2020 +0200
Lower near distance.
commit 0e66f02b25aaddaa2dfddbbc89cd67de54a9a7b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 20:09:01 2020 +0200
All sprites sway in the wind now.
commit db1401a6910bf42dcf502462c90038752ff5fbdb
Merge: 69e508d8c e8b4b29d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 19:34:17 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 69e508d8c94d8973033817ca86f357e466fc7c4d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 18:41:37 2020 +0200
Make it easy to switch to SIMD for math.
commit ffe0f5928c7a7e87d00cb5426b3b1d831d7e02fd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 21:21:12 2020 +0200
Fix some issues with underwater rendering.
commit bfda6da42f38fd02c31ee92c81ab785a3e50c2a0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 19:17:59 2020 +0200
Fix some minor display issues.
commit 0ed752e087968cf901301884aaeae698e32ef8a5
Merge: ccc6a06a8 518edcb85
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:14:21 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit ccc6a06a8d4504d6b9f7af7905a414d2ee06ab76
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:04:34 2020 +0200
Some minor changes.
commit 4e020246702889269efe1a191788992164c508d6
Merge: 50a64d927 e05c9267a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 16:17:40 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 50a64d927e6c4f4b0e4688e4cbfca694bc3f922a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 13:07:03 2020 +0200
Fix far plane.
commit 7dd06da34cae8f9ea3b6c889fe965181f3fd3949
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:25:35 2020 +0200
Add shadows.glsl.
commit 618a18c998778bf871b905a74657440fcc384c80
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:10:22 2020 +0200
Adding shadows, greedy meshing, and more.
commit eaea83fe6a5cb1cb0ba8beef888183c718258496
Merge: 267018495 2f89b863e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 22:47:07 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 2670184954a13e4a9e7a4e35ba79aac0c5fac2f7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 21:20:01 2020 +0200
Make civsim and sites deterministic.
For anything in worldgen where you use a HashMap, *please* think
carefully about which hasher you are going to use! This is
especially true if (for some reason) you are depending on hashmap
iteration order remaining stable for some aspect of worldgen.
commit f8376fd5dc72b4a9c2f51a6b4570d59c8b8e9343
Merge: 654f7e049 cdee191dd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 17:53:57 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 654f7e049258d9da27c09608bbe6a46ffa8787e5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed May 20 21:22:30 2020 +0200
Correct backface culling.
commit 560501df05ca725409b0f2e4eb31bdfdc15fd0c7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue May 19 17:22:06 2020 +0200
Greedy messhing for shadows.
commit a4d87e1875ca543436e6bbbeb20348facc5a52d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun May 17 05:59:00 2020 +0200
Shadow maps work for lantern.
commit 243d0837b8a3b08172c9a3c348d964d7ddc2a0a8
Merge: 04382dc28 71dd520cd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:53:13 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 04382dc28632b6c66e8821f6870c0daaa1c1901a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:22:17 2020 +0200
WIP: better graphics config, better LOD, shadow maps.
commit 22ddbad3eb32bfa70f0932176022208fe67ded81
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 18:54:09 2020 +0200
Minor shader fixes.
commit 746a10e8d01ac235f994b0cde78fa48998602a1f
Merge: 0f4a0e763 40ab94673
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 04:02:09 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0f4a0e763db3afbdc4fb0558611f38326ca87151
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 23:03:24 2020 +0200
Switch back to pop-in terrain.
commit dd74fa7e4a53667b38811d7aec58d7f6a68889bb
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 22:58:55 2020 +0200
LOD shading closer to voxel shading.
commit ef67bd58ba0bdaf622b078892d768263b6cba268
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 28 20:49:03 2020 +0200
Experimental underwater lighting.
commit 2c5ad9d07605e80d5fd5679dd3a5d70c605b86a9
Merge: 748279835 303967a6f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 22:35:24 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7482798354eda18c8207950080fc24d443a369de
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 21:59:55 2020 +0200
Replace discard in figure-frag.
commit d83b4ae69be4912f69bf7835f509c68a1c7770a4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:45:57 2020 +0200
Fix sprite lighting, HDR from focus_pos.
commit 0594238004f116274905fa0ed7c2b6c417ed1d29
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:14:10 2020 +0200
Proper HDR from point lights.
commit 48c93d2b41ce5743103d18e76cc228f5ac766492
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 14:01:43 2020 +0200
Brighter ambiance, darker LOD shadows.
commit e0452e895ccfa8a43f368cae3b8b8aedc24dad93
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 13:13:23 2020 +0200
More proper HDR.
commit 4c6da3ed16cfeebb455e40da5f557b4af9a499d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 00:13:10 2020 +0200
Trying LOD noise.
commit 682a3d74c85df5503ffe1fc1cc891bce789df1ad
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 23:11:08 2020 +0200
Fix LOD heights in towns.
commit cc39e5734e8b18f9077bf42e66337c1319dd6b6e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 21:01:23 2020 +0200
More LOD fixes.
commit 8116b21c2e51c836e77894e309ac273caf2917b3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:54:43 2020 +0200
I like this coloring.
commit bc2560ea90b36f4b46190005344232d993043ac3
Merge: 14effdd5d e690efe71
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:48:33 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 14effdd5db8747fcf3eb34f03b46b7792e92d1c5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:24:35 2020 +0200
Re-saturate.
commit 48a643955d4435b78179acba0beb4a979905cc31
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:23:57 2020 +0200
Various fixes.
commit f7b497a0c25f4ad4682c71dd1ed6f608052feb9b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 03:22:49 2020 +0200
Render figures again.
commit 44e4aad48deba8266b9f8bdfd3db096b381f5327
Merge: e6f0a5a98 9ec319a18
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 02:01:04 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit e6f0a5a981a82533ba188fff0a54ce98577bb152
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 24 16:12:20 2020 +0200
Add atmospheric scattering.
commit f2953087f691a8edbc001cb98ebf5059fc6f8ac0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 23 00:01:20 2020 +0200
Fix shadowing for specular reflections.
commit ddd4a67a9799b8d08c7dc0c2bec90621c2bed0e3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Apr 22 22:56:12 2020 +0200
HDR fixes.
commit 1015e60deef3c447381996277df7496707a63bd0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 21 18:25:19 2020 +0200
More lighting changes.
commit 80c264abd111fb237e57843efcb5c071d4f84613
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 13 00:29:59 2020 +0200
Lighting experiments.
commit 8414987e589dd5102bad89762a3adaccc0bfe957
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 9 02:38:40 2020 +0200
WIP -- lighting changes and soft shadows.
commit 9cd2b3fb0d6b49776c6dfe463e4169637250b11a
Merge: c7ea687eb 8b149ad11
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:29 2020 +0200
Merge branch 'sharp/new-lighting' into sharp/small-fixes
commit c7ea687ebbc5aace1b455f134a5bf49ce2c7434a
Merge: 476441531 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:02 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 8b149ad11ad4bb75018fcf9519baec27d1c95951
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:32:39 2020 +0200
Trying out a new lighting model.
commit b0ac9f36f755dd06f7c17c46150568064790864f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 07:56:11 2020 +0200
Use bicubic interpolation for terrain.
commit f6fc9307a121514b614bc50ef8eb055953e7da8a
Merge: 33140a295 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 05:01:41 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 4764415312aae6e9ac2d00e86e84577cb958f1ab
Merge: ed2d0111d 13388ee6a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 04:54:48 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 13388ee6a42943f3f79a9cb488346cef18e272fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 20:30:08 2020 +0200
Various fixes (to coloring and to soft shadows).
commit fbd084a94a067082a87cd6d28b82054709bc9265
Merge: 5a089863b 4fdf6896a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 18:50:38 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/map-colors
commit ed2d0111d994262ae836d84d1fe5a45e4de72a0b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 06:49:27 2020 +0200
Combining colors and LOD.
commit 88342640c6b835114d01c797b89fdede3b0a2108
Merge: 33140a295 5a089863b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:49:20 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 33140a2951b8212725f42c758b277aaec4d888f7
Merge: 4c65a5aed f34d4b379
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:36:21 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 5a089863beb01d4794bbe3580ada47b278715ea2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 03:17:49 2020 +0200
Making maps brighter.
This is probably not the right way to do it, but oh well!
commit 32b2c99109dd486aa922886081068f9c550c83f2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 02:46:36 2020 +0200
Horizon mapping and "layered" map generation.
Horizon mapping is a method of shadow mapping specific to height maps.
It can handle any angle between 0 and 90 degrees from the ground, as
long as know the horizontal direction in advance, by remembering only a
single angle (the "horizon angle" of the shadow map). More is explained
in common/src/msg/server.rs. We also remember the approximate height of
the largest occluder, to try to be able to generate soft shadows and
create a vertical position where the shadows can't go higher.
Additionally, map generation has been reworked. Instead of computing
everything from explicit samples, we pass in sampling functions that
return exactly what the map generator needs. This allows us to cleanly
separate the way we sample things like altitudes and colors from the map
generation process. We exploit this to generate maps *partially* on the
server (with colors and rivers, but not shading). We can then send the
partially completed map to the client, which can combine it with shadow
information to generate the final map. This is useful for two reasons:
first, it makes sure the client can apply shadow information by itself,
and second, it lets us pass the unshaded map for use with level of
detail functionality.
For similar reasons, river generation is split
out into its own layer, but for now we opt to still generate rivers on
the server (since the river wire format is more complicated to compress
and may require some extra work to make sure we have enough precision to
draw rivers well enough for LoD).
Finally, the mostly ad-hoc lighting we were performing has been (mostly)
replaced with explicit Phong reflection shading (including specular
highlights). Regularizing this seems useful and helps clarify the
"meaning" of the various light intensities, and helps us keep a more
physically plausible basis. However, its interaction with soft shadows
is still imperfect, and it's not yet clear to me what we need to do to
turn this into something useful for LoD.
commit f8926a5737ddc51f3d585c651a64c43677aae0f4
Merge: a1aee931e 875ae6ced
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Mar 13 13:32:42 2020 +0100
Merge remote-tracking branch 'origin/master' into sharp/map-colors
commit 4c65a5aed353b119aea65a2aaeb94549b67beb42
Author: Treeco <5021038-Treeco@users.noreply.gitlab.com>
Date: Mon Feb 24 16:48:05 2020 +0000
Made LOD setting slider exponential
commit 2fa7b2d20d7233dc8bfd64f9f7f54617575248f1
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 17:49:53 2020 +0000
Added mist to LoD
commit aab059a450b5f635777129ff82cc15b662965c3c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 15:14:06 2020 +0000
Added LoD slider
commit 779c36b538121c5ade3633ae5cb67bb14c8c3877
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:54:55 2020 +0000
Reduced cost of vertex pushing
commit 9fea150473906b166365b738ebcea07c697daf3d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:38:53 2020 +0000
Fixed maths, improved LoD resolution
commit 5481df38fea5bf183ff376a3337179cfaa5233dc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 11:22:50 2020 +0000
Dynamically relocate LoD vertices to enhance details
commit a3e36a50ababd615da7db1b26158c7906a5def01
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 18:13:51 2020 +0000
Simpler terrain spiral rendering
commit 255f450ae9ac8763db4bede075fb409161ed57cc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:53:17 2020 +0000
Better LoD precision
commit 3d027aebe812a5b8658a4eb8123dc9f61b3776d2
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:04:03 2020 +0000
Better falloff
commit be775c9484b457b2c0b1a494aec03392d0c70e76
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 15:30:45 2020 +0000
Applied good ideas from experimental branch
commit 58587b68545a23c5c04ab4574a4b94b3bc982246
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 16:15:13 2020 +0000
Minor fixes to LoD merging
commit 7b42aebd709c14df2db766aad61d9280ad24d84d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 15:04:44 2020 +0000
Capped LoD dragging
commit 8aafc559f87124e1ea5ca6e3ddc2aa0c242d793c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:54:37 2020 +0000
Better blending between LoD and terrain border
commit edd3455d5161792d87ddc8eadc0ecbad5532b284
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:40:19 2020 +0000
Fixed LoD z depth, added sea level offset
commit b9b06744620114dd5556e73f64fa93c145503a7c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:27:43 2020 +0000
Better LoD smoothing
commit a1aee931e790431560cd2d953ad61d9497072afd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Feb 21 14:52:17 2020 +0100
Adding shadows.
commit 2400786c13dd891c131ed86d48d05df516a8a778
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 13:48:40 2020 +0000
Use world map as LoD source
commit dbf650f504a4c25fbbc2096ac3616c736bf52d23
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Jan 20 00:48:14 2020 +0000
Better clouds at distance
commit 5e6f81b86cdb9730b9b056877b19257075fd5fa8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Jan 19 23:59:02 2020 +0000
sync
commit 745e7540ddb000cc645f612767b337c2ddc3f7c0
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 12:40:48 2019 +0000
Improved cloud falloff mist, faster noise sampling
commit f6a200d0cb866196ba57697466755f9e0c7ea5d8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 10:09:00 2019 +0000
Improved long-range depth precision, removed unnecessary LoD polygons
commit 63d1b2bb2292898d59fb4f4e502201103dfeb86f
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 20:57:46 2019 +0000
Working LoD shader
commit f13d98ee3e58f881e8b978861a67663b59ed91ec
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 11:03:40 2019 +0000
LoD first attempt (stack overflow issue)
2020-08-20 18:34:59 +00:00
|
|
|
|
.map2(map_size_lg.chunks(), |e, sz| e >= 0 && e < sz as i32)
|
2019-06-18 21:22:31 +00:00
|
|
|
|
.reduce_and()
|
|
|
|
|
{
|
(See sharp/lod-history) LOD, shadows, greedy meshing, new lighting, perf
---
Pretty much a Veloren fork at this point. Here's a high level overview of the changes (will be added to CHANGELOG just before merge).
At a high level this MR incorporates roughly two groups of changes.
The first group consists of new game features: more flexible map sizes, level of detail terrain, shadow maps, and a new lighting
engine. This is "feature work" that (mostly) only adds new things to Veloren, and mostly shouldn't affect old stuff.
The second big group of changes are those addressing the fallout from all the new features. These include performance fixes of
various sorts: the addition of multiple graphics options and optimization of the cheap ones to avoid work, switching all voxel
models to use some variant of greedy meshing, switching over much of our CPU-side vector math to exploit SIMD instructions
(coinciding with a fork of `vek`), and a rewrite of how the UI handles text rendering (coinciding with updates to our fork
of `conrod`). Making Veloren's hardcoded colors appear correct under the new lighting engine also required considerably
changes (TODO: Fill in this section when it's complete).
The second category of changes often heavily touches code owned by other people, including frequently modified code "owned" by a
handful of people, so I recommend that this code be reviewed particularly carefully.
---
At a high level (each will be described in more detail below):
- The world map has been refactored.
- The world size is no longer hardcoded (@zesterer).
- The map generation code was made generic to allow using it outside of the `world` crate (@zesterer).
- On world creation, we now compute *horizon maps* (@zesterer).
- The way we pass the world from the server to the client has been updated (@xMAC94x).
- Artifacts related to image rotation were fixed (@imbris).
- Multiflow rivers were enabled (@zesterer).
- In the process of making changes related to the world map, various incidental fixes and optimizations were required.
- The new *level of detail* feature was added (@zesterer wrote part of this and has checked out the rest).
- A new LOD terrain rendering step was added to the pipeline.
- The LOD terrain quality was made configurable via a graphics setting.
- Horizon maps were used to cast shadows from LOD chunks on both LOD and non-LOD terrain.
- A "voxelization" effect was incorporated into rendered LOD terrain to make it blend better into the world.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Veloren's lighting has been completely overhauled (@zesterer has already checked most of this out).
- A semi-accurate index of refraction was assigned to our materials.
- A new, more realistic, physically based approach to lighting was used using the *Ashikhmin Shirley* BRDF.
- We emulate *atmospheric scattering* using equations designed for measuring solar panel light exposure.
- We attempt to compute *realistic light attenuation* in water using its real material properties.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Point and directional lights now cast realistic shadows, using *shadow mapping.* (@imbris, @zesterer, @Treeco, @YuriMomo)
- Point light shadow maps were added to the rendering pipeline, using geometry shaders and *seamless cube maps*.
- Directional light shadows were added to the rendering pipeline, using LISPSM together with disabling *depth clamping*.
- "Shadow-only" chunks and NPCs were added to prevent shadows from models behind you from disappearing.
- In the process of making changes related to shadow maps, various incidental fixes and optimizations were required.
The addition of shadow maps, LOD terrain, and the new lighting all led to significant performance degradation, on top of other
changes happening in master. Therefore, a large number of performance improvements were also needed:
- The graphics options were made much more flexible and configurable, and shaders were optimize.
- New options were provided for how to render lights and shadows (@Pfauenauge, @zesterer).
- Graphic setting storage and configuration were overhauled to make adding new features easier (@Pfauenauge, @imbris).
- Shaders were rewritten to utilize GLSL's preprocessor to avoid overhead (@zesterer, @YuriMomo).
- In the process of making changes related to providing additional rendering options, various incidental fixes and optimizations were required.
- Voxel model creation was switched to use *greedy meshing.*
- A new voxel meshing method, greedy meshing, was added (@imbris).
- Uses of the older meshing methods were migrated to use greedy meshing (@imbris, @jshipsey, @Pfauenauge).
- New restrictions were added to terrain, figure, and sprites to future proof them for further optimizations (@jshipsey, @Pfauenauge, @zesterer).
- Most positions are now relative to either chunk or player position for better precision (@imbris, @zesterer, @scottc).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- Animation and terrain math were switched to use SIMD where possible.
- Fixes were made to vek to make its SIMD feature usable for us (@zesterer, @imbris).
- The interface and types used in bone animation were changed in various ways (@jshipsey, @Snowram, @Pfauenauge).
- Redundant code generation for body animation is now partly taken care of by a macro (@jshipsey, @Snowram, @Pfauenauge).
- Animation code was modified to to use vek's SIMD representation where possible (@jshipsey, @Snowram, @Pfauenauge).
- Terrain meshing code and shadow map math were also modified to use vek's SIMD representation (@imbris).
- SIMD instruction generation was enabled (@YuriMomo, @jshipsey, @Snowram, @imbris, @Angelonfira, @xMAC94x).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- The way we cache glyphs was completely refactored, fixed, and optimized.
- Our fork of `conrod` was optimized in various ways (@imbris).
- Our fork of `conrod` now exposes whether a widget was updated during the current frame (@imbris).
- Our use of the glyph cache was rewritten for correctness (@imbris).
- A *text cache* was introduced that lets us skip remeshing glyphs that have not changed (@imbris).
- Various changes were made to reduce pressure on the glyph cache, with more planned (@imbris, @Pfauenauge).
- In the process of making changes related to the glyph cache, various incidental fixes and optimizations were required.
- Colors were changed to keep Veloren's look consistent with master.
- Some older tree models were brought back (@Pfauenauge).
- TODO(@Sharp): All hardcoded colors were extracted and made hotloadable.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Hardcoded colors were fixed to conform to Veloren's style.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Color models were fixed to conform to Veloren's style.
A detailed description of the involved changes follows.
---
- The world size is no longer hardcoded. All functions dependent on world size now take a `WorldSizeLg`, which holds the base 2 logarithm of each actual world dimension and is guaranteed to maintain certain properties (outlined in `common/src/terrain/map.rs`). Additionally, many utility functions that utilize the world size were moved into `common` as well (mostly `common/src/terrain/mod.rs`). Finally, the world map format was updated in order to store its size explicitly, with a migration path from the old format that should work whenever the old formatted map was a square (practically always). See `world/src/sim/mod.rs` for these changes.
- The map generation code was made generic to allow using it outside of the `world` crate. The parts of the map generating code that do not need to query the world were moved over to `common/src/terrain/map.rs`, allowing them to be used from the client without creating a dependency on `world`. The rest of it was turned into helper functions in `world/src/sim/map.rs`, which can be passed as closures to the generic map generation code to complete its construction. This also means that colors are now passed in separately to the map generation function. See <https://veloren.net/devblog-78/> for more details.
- On world creation, we now compute *horizon maps*. See the function in `world/src/sim/util.rs`.
Given a height map and a plane intersecting that height map, our horizon maps allow us to encode enough information to reconstruct shadows for each point on the height map using only the *horizon angle* (the angle at which the sun starts to become visible). As Veloren's sun only covers one plane, this is sufficient for encoding sun shadows for LOD terrain, by encoding two angles per chunk (one for each 90 degrees the sun covers). We can also use this for the moon, if we want, since the moon follows the same path. Additionally, we store the *height* of the furthest occluder, to try to make the shadows volumetric; so this means 4 bytes in total for each chunk.
Support for horizon maps has been merged into the map functionality in common as well.
- The way we pass the world from the server to the client has been updated. Rather than passing the prerendered map, we instead pass three maps with values for each chunk; one with the color information, a second with altitude information, and a third with horizon map information. We then reconstruct the map on the client, together with some additional information we send from the server (like the sea level and maximum height). See `common/src/msg/server.rs` for a detailed description of the format of `WorldMapMsg`, and `server/src/libr.rs` and `client/src/lib.rs` for details of the map construction and parsing.
- Artifacts related to image rotation were fixed. See the commit message for commit SHA `cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e` for a detailed explanation. This involved changes to shaders, the addition of a new type of graphic (also reflected in the graphic cache) that allows specifying a border color (which automatically makes the associated texture immutable), and some related fixes. I reproduce the first two paragraphs of the MR description as well:
```
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
```
- Multiflow rivers were enabled.
This does not really need to be part of this MR, and would be easy to revert, but since it seemed to provide a nice improvement it's currently packaged with it.
We already computed multiple outflows from each chunk for erosion purposes long before this MR.
However, we never modified river rendering to be able to handle this case (just a single downhill river flow is complex enough!) so this was not exposed when deciding which chunks were rivers.
Now that
- In the process of making changes related to the world map, various incidental fixes and optimizations were required. Some examples of fixes include making sure terrain is never lowered to below sea level (to make the shadow maps report correct values), fixing map altitudes and colors to understand things like cliffs and "block level" coloring (that doesn'te xist on the column level), and fixing a crashbug when rendering images for the UI where source pixels are strongly rectangular. Some examples of related performance fixes include avoiding allocating a fresh vector for all the maps (i.e. copying it over to change the format from `[u32; n]` to `DynamicImage` and then copying again to convert to `RgbaImage`), and instead using the `gfx::memory::slice` function to accomplish the same thing. These sorts of changes are spread all arond the code.
This includes the additon of a new scene, `voxygen/src/scene/lod.rs`, a new pipeline `voxygen/src/render/pipeline/lod_terrain.rs`, and new shaders `assets/vxygen/shaders/lod-terrain-vert.glsl` and `assets/vxygen/shaders/lod-terrain-frag.glsl`, as well as associated changes to the renderer in `voxygen/src/render/renderer.rs`.
The main idea behind our initial approach to LOD was to take the world data we now get from the server (altitude, color, and horizon mapping).
- Some previously computed values were turned into shader uniforms for better prediction on weak processors. (@zesterer)
- Calls to power or trig functions were removed or replaced with multiplications, where possible.
- After some deliberation
- To properly handle sprite "waving" for nearby sprites,
We explicitly designed the greedy meshing system with figures and sprites in mind.
In both cases, we want to be able to *efficiently* pack many different models into the same texture, especially in cases where we know
we will either not be removing any of the grouped-together from the models from the texture, or will remove all of them at once (so
they can be packed into some specific subtexture).
For sprites, since we know every model in advance and never intend to deallocate them, we currently pack them all as efficiently as
possible into one giant tetxure atlas. However, in the future we might opt to pack them slightly less efficiently in exchange for
shrinking the sprite vertex size.
For figures, we pack all the textures for each *model* into the same atlas.
is a global texture atlas used for every sprite, and for figures which is why we have the ability to mesh multiple
models to the same texture area (using the simple texture atlas allocator) without requiring intermediate vector allocations.
This is accomplished by delaying the time when we actually write the color and light data to the texture until *after* all the
model vertices have been meshed; then, we can just allocate the whole color/light array at once, making the atlas we use an
exact fit. In computer science-y terms, we accomplish this delay by, after we perform the initial greedy meshing (without
texture information), not continuing to create the texture data, but instead constructing a *continuation*--that is, a function
that, when called, will execute the rest of the computation. We push this continuation (which in Rust terms is a `FnOnce` closure
that takes the `ColLightsInfo` that it is supposed to write to as context) onto a
onto a vector
resizing. To allow for suspended writes to texture data, Rust pointed out to me that the continuation that would eventually write the color and light data to the texture atlas (the one that is shared by all models sharing the same greedy mesher) would have to *own* whatever data it mshed. Because we often generate the model data to mesh as a temporary in `voxygen/src/load.rs`, the
- Matrix multiplications in the shader were reduced for figure data (@zesterer).
- Vertex "waves" for fluid data were removed.
- Terrain "bending" near edges was removed.
- Scaling was fixed to make sure empty space was not introduced in a space previously occupied by a block. It was also changed to take ownership of its voxel data,
rather than sharing it, to let it be used with meshing.
- Rust's nightly version was bumped in order to use the `array_map` function, which lets us reuse more code between the simple map and `FigureModelCache`.
- PositionedGlyph::standalone.
---
I tried to cite sources in many cases[^realtime],[^lloyd],[^lispsm],[^pbrt],[^greedy],[^tjunctions]
where I needed features from elsewhere but I am particularly grateful for the following resources,
esepcially where they have accompanying source code. I linked all of them that are accessible to the public (those that are not were
obtained through legal means).
[^realtime]: Eisemann, Elmar, Michael Schwarz, Ulf Assarsson, Michael Wimmer. Real-Time Shadows. A K Peters/CRC Press (T&F), 20160419.
[^lloyd]: Lloyd,B. 2007. [Logarithmic perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). PhD thesis, University of North Carolina.
[^lispsm]: Wimmer, M., Scherzer, D., and Purgathofer, W. 2004. [Light space perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). In Proceedings of Eurographics Symposium on Rendering 2004, pp. 143– 152.
[^pbrt]: Pharr, Matt, et al. [http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf](Physically Based Rendering: From Theory to Implementation). Third edition, Morgan Kaufmann Publishers/Elsevier, 2017.
[^greedy]: mikolalysenko. “Meshing in a Minecraft Game.” 0 FPS, 30 June 2012, <https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/>.
[^tjunctions]: blackflux. “Meshing in Voxel Engines – Part 1.” Blackflux.Com, 23 Feb. 2014, <https://blackflux.wordpress.com/2014/02/23/meshing-in-voxel-engines-part-1/>.
I am also especially grateful to Khronos, Wikiepdia, and stackoverflow for answering many of my specific questions while writing the MR.
---
Squashed commit of the following:
commit 300505e7305a2fdac722a808ee8538323f215f39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 18:46:25 2020 +0200
Fixing cargo doc and typo in CHANGELOG.
commit ec0aeb18e8499d7d84ef818331b4b65c3d76cea6
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 15:38:50 2020 +0200
Hopefully final commit for the LOD branch.
commit 5e8ea0b1eaac02903a02feb2eb038d195de4872f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 10:14:26 2020 +0200
Falling back to power as stopgap.
commit e44a1cbf46504ee9931a01bdc9033e145500d557
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 09:25:41 2020 +0200
Address imbris feedback.
Temporarily disables shiny water, lowers max VD.
These restrictions will be lifted soon after merging.
commit 561e25778a108ac3712f5ec2ce3a51234c4430d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 08:31:13 2020 +0200
Tweaking shaders a bit.
commit 7d19259078ce0dd7b3742ad7d0cb3fab3ece3fdc
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:59:43 2020 +0200
Fix view example as well.
commit 051cd4934e0fad2c0b15db4380a4189fa318679f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:29:06 2020 +0200
Fix meshing benchmark.
commit c95e07db3b4dcca285678985e65e31b927cb1c61
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 05:46:22 2020 +0200
Address MR feedback, fix scene clouds.
commit 1bfb816cabdb3ffc1e507a009c2d98696b4b573a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:39:36 2020 +0200
Incorporating Pfau's figure color changes.
New eyes and new humanoid colors.
commit 3f9b89a3ac7b3356b1dba0d1a8f6541357f81469
Merge: e2f5162e4 62c53963a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:29:41 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit e2f5162e4f96f4124aa43488f7245d341b3dcfd4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:28:38 2020 +0200
World colors are all hotloadable.
They live in assets/world/style/colors.ron.
Only a small handful of hardcoed colors remain in World; they are either
part of the map, or difficult to disentangle from the rest of the
computation. Comments are made where appropriate.
commit 62c53963abe1975009d34a8f9515a355bef24f31
Author: Marcel Märtens <marcel.cochem@googlemail.com>
Date: Wed Aug 19 15:59:00 2020 +0200
replace pretty_env_logger with tracing
commit 5b1625f99d9586fe80e2232f583ec5af9f953099
Merge: d71003acd 4942b5b39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:15:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit d71003acdabeff970b3928e97c26af6847b5b78e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:14:34 2020 +0200
Hotloading colors, part 1: colors in common.
Currently, this just entails humanoid colors. There are only three
colors not handled; the light emitter colors in
common/src/comp/inventory/item/tool.rs. These don't seem important
enough to me to warrant making hotloadable, at least not right now, but
if it's needed later we can always add them to the file.
commit 63b5e0e553eb2ea49276f192a6fc7dd65254270d
Merge: c32b337a4 6d2c4b9c1
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 13:05:37 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c32b337a46e10d9de473d178a94a3ccd61c39bb3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:52:04 2020 +0200
Fixing LOD grid, for real.
commit a166ae0360395387e09fb35a1f84210c2ce5ec24
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:28:05 2020 +0200
Addressing imbris's initial feedback.
Fixes two minor bugs: explosion particles were no longer spawning
randomly, and LOD grids were not perfectly even.
commit 4cbad004f44060994252dd3d38647a14a589712f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:27:58 2020 +0200
Bumping nightly per request.
commit 548680276aac77c25d43d16b5622f847d474dbef
Merge: acc098604 8f8b20c91
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:26:06 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit acc0986040589a3492f88a740bc3c3fc693b26d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:28:32 2020 +0200
Lower resolution due to lying drivers.
commit d3b878de2a52c358d2944a6bbd0555dad7fbdb10
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:15:38 2020 +0200
Fix issues msh encountered with Intel 4600.
commit 10245e0c1b0cb6fae10d86409435364edc6102ef
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 21:15:02 2020 +0200
Merge more models into one mesh than we did previously.
commit 3155c31e663c52ae5c3a53d5fb5665892a1a498a
Merge: 7204cc8a7 3c199280e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:35:22 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7204cc8a7a4f74a30306bd205d9834fee4bb944f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:34:43 2020 +0200
Fix not yet done NPC animations.
This forces them all to be the idle animation if not specified.
This fixes issues where you'd have giant NPCs in water.
commit bc83360f2a08918f19d417b5f772e1ff554dba08
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 19:36:37 2020 +0200
Try to fix some bugs:
- Z fighting with LOD terrain and water.
- Audio SFX not playing.
commit 1fd104aa603bf3781b6526a5cada46aeca3049dd
Merge: 862df3c99 7c2c392a3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 12:02:31 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 862df3c9976c4da9bd7cfd784f1a85973127968a
Merge: 0a4218ed9 75c1d4401
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 05:52:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0a4218ed9d541a2b34c133351bea38a99ddf4ea7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 22:27:14 2020 +0200
Fix particle depth.
commit f51dfdeb442d0dd5243dd2f344fa4be295bd0875
Merge: c6251a956 5e6dc0471
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:19:04 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit c6251a956ad376400dca5c23420cf8d213dc8fdf
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:15:46 2020 +0200
Cache figures more intelligently.
Cache figures for longer, and don't cache character states for the
player except where they actually affect the rendered model.
commit 0ed801d5404982c6fb63b1eaa4567d908b294c9d
Merge: c11b9bdf0 eea64f78f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 16:32:24 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c11b9bdf0a53bf9884d2f5a48fec9b01d582df1a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 11:47:15 2020 +0200
Remove unneeded Clippy annotation.
commit 16aa9ef40af56d69289d00aafb3deadfb8bd4f35
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 8 00:53:02 2020 +0200
Fix hotloading and Clippy.
commit 3dc973e0be5b758da1e9805eb764ad401374cd0c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 23:50:27 2020 +0200
Major speedups with SIMD.
commit fba64a7d93d5a96077ce87287bbce6ab9b7fbcae
Merge: 76429d00e d1e10b178
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:19 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 76429d00eea00d212fbd672a84ee91e75b19b938
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:10 2020 +0200
Add clippy.toml.
commit c79f512f84dbb83cb82b7954db68ff241dfd8e41
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 11:55:20 2020 +0200
Fix all clippy issues, clean up Rust code.
commit 6f90e010b3fbefb53b0d632e819931350015b6b8
Merge: 77a8c7c26 5929cfa5c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:30 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 77a8c7c267d3f44a1a62bd6b2274359973c5e4d4
Merge: b44e44232 44febaabd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:10 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 5929cfa5c713aa392110bbb62407f76caf53c3df
Author: jshipsey <jshipsey18@gmail.com>
Date: Thu Aug 6 20:47:27 2020 -0400
fixed in-hand arrow bug
commit b44e442325d828f1cd564d66908f89d09e80474b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 6 13:40:35 2020 +0200
Miscellaneous performance improvements.
commit be37acf287c1360d8085862526ac3365ffd1d768
Merge: 125d7fc6c c11876547
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 05:49:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 125d7fc6c4dcd8c8c5f27b8268a4d64f409f3644
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 04:55:31 2020 +0200
Abstract over simd vs. repr_c vectors.
Also some minor improvements to Event size.
commit d4d4956e9252e1241ce110b2aa85076c6b1e2a23
Merge: 5f3b7294a aced5f979
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:56:54 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 5f3b7294af1f8533edc2620b58863c248e2b07af
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:43:52 2020 +0200
Fix formatting issues I missed before.
commit a428a3ebba70dcab63dd0f8cd983120c90617271
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:41:51 2020 +0200
Fix clippy warnings, part 1.
There aer still a bunch of type too complex and
function takes too many arguments warnings that I'll fix later
(or ignore, since in the one case I did fix a function takes too
many arguments warning I think it made the code *less* readable).
commit ba54307540ed8a937ac08209730284fc653af85b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 30 13:22:42 2020 +0200
Fix light animations so they are removed when the light turns off.
commit 7e0f4bcbf0f4717145d8beac40d52e3acebbe2aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 21:10:20 2020 +0200
Fix crash in edge case for pixel art.
commit 56da06f7a351e2b949e9b014a90b974d511a0924
Merge: cf74d55f2 9f53a4a19
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:56:52 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:29:52 2020 +0200
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
The first concern was addressed by fixing the dimensions of the map
images drawn from the UI (so that we always use a square source
rectangle, rather than a rectangular one according to the dimensions of
the map). We also fixed the way rotation was done in the fragment
shader for north-facing sources to make it properly handle aspect ratio
(this was already done for north-facing targets). Together, these fix
rendering issues peculiar to rectangular maps.
The second and third concerns were jointly addressed by adding an
optional border color to every 2D image drawn by the UI. This turns
out not to waste extra space even though we hold a full f32 color
(to avoid an extra dependency on gfx's PackedColor), since voxel
images already take up more space than Optiion<[f32; 4]> requires.
This is then implemented automatically using the "border color"
wrapping method in the attached sampler.
Since this is implemented in graphics hardware, it only works (at
least naively) if the actual image bounds match the texture bounds.
Therefore, we altered the way the graphics cache stores images
with a border color to guarantee that they are always in their own
texture, whose size exactly matches their extent. Since the easiest
currently exposed way to set a border color is to do so for an
immutable texture, we went a bit further and added a new "immutable"
texture storage type used for these cases; currently, it is always
and automatically used only when there is a specified border color,
but in theory there's no reason we couldn't provide immutable-only
images that use the default wrapping mdoe (though clamp to border
is admittedly not a great default).
To fix the maps case specifically, we set the border color to a
translucent version of the ocean border color. This may need
tweaking going forward, which shouldn't be hard.
As part of this process, we had to modify graphics replacement to
make sure immutable images are *removed* when invalidated, rather
than just having a validity flag unset (this is normally done by
the UI to try to reuse allocations in place if images are updated
in benign ways, since the texture atlases used for Ui do not
support deallocation; currently this is only used for item images,
so there should be no overlap with immutable image replacement,
so this was purely precautionary).
Since we were already touching the relevant code, we also updated
the image dependency to a newer version that provides more ways
to avoid allocations, and made a few other changes that should
hopefully eliminate redundant most of the intermediate buffer
allocations we were performing for what should be zero-cost
conversions. This may slightly improve performance in some
cases.
commit ad18ce939940a8c697270f6e9b94db9942fd8295
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 13:21:09 2020 +0200
Fix continent scale hack.
commit 36b1cb074f5b195aebd7dbbc3da7f0246a1a18ec
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 12:11:40 2020 +0200
Enable loading different sized maps without a recompile.
We may want to tweak the effects of the continent_scale_hack.
commit 13b6d4d534cc4814b7cb3294ca41bbfea0a6b186
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 10:55:48 2020 +0200
Removing WORLD_SIZE, part 1.
Erased almost every instance of WORLD_SIZE and replaced it with a local
power of two, map_size_lg (which respects certain invariants; see
common/src/terrain/map.rs for more details about MapSizeLg). This also
means we can avoid a dependency on the world crate from client, as
desired.
Now that the rest of the code is not expecting a fixed WORLD_SIZE, the
next step is to arrange for maps to store their world size, and to use
that world size as a basis prior to loading the map (as well, probably,
as prior to configuring some of the noise functions).
commit 30b1d2c6428230a9eaa0d749cdcbbd6f1cbccd78
Merge: 7d56ba31b 1377b369f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:58 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 7d56ba31b445441461b28a07fc495d7d4f047c17
Merge: 2101113b4 598f14b25
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 1377b369f6db2258e910d467a5740f31789e3ded
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sun Jul 19 23:25:38 2020 +0200
more saturated pumpkins
commit ae8d50527f93bb0616c2ad46ce4dacb63bc37c6d
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sat Jul 18 20:29:56 2020 +0200
acacia models
commit 2101113b467e691de787392d7f20f1745f5637bd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 18 18:55:25 2020 +0200
Higher detail LOD.
commit add2cfae04b4385fa5590e11e2bd5229d9dee0aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 16 01:57:39 2020 +0200
Revert some irrelevant stuff.
commit 2e2ab3dc1eaa59a4aef7f8d34a53d8aae4c8553a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 15 13:30:49 2020 +0200
Fixing various things about shadows.
* Correcting optimal LISPSM parameter.
* Figure shadows are cast when they're not visible.
* Chunk shadows stay cast until you look away.
* Seamless cubemaps for point lights.
* Etc.
commit 6c31e6b56217274285b597af297036691ea5d897
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 19:50:26 2020 +0200
Fix shadow creation.
commit 6332cbe006115ae205597529cd8bbccd146c2cca
Merge: be438657c 930e0028b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:47:00 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit be438657c33d7b5bfb0a9582c3ed3fd366637323
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:28:08 2020 +0200
Tweaks to shadows.
Added shadow map resolution configuration, added seamless cubemaps,
documented all existing rendering options, and fixed a few Clippy
errors.
commit 23b4058906013c7d2a40c286e20e32c5fbd897ed
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 10:11:19 2020 +0200
Fix moon, use nonlinear noise for terrain.
Note that the latter has a bit of performance cost.
commit 7fbe5cbfbb9dc29607957b8e62f432a4deed193d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:23:02 2020 +0200
Address lies about max texture size.
commit bcfc62b5e13a1cdd83f57535fde4694720bebfd9
Merge: 75e3626a7 18a08e8fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:22:08 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 75e3626a785919f43fdcf2127c2b10e3e4df2f9f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:21:52 2020 +0200
OpenGL 3.3 minimum.
commit 18a08e8fe2739f02af99a5d2cb4e7c38c49e858b
Author: Monty Marz <m.marzouq@gmx.de>
Date: Tue Jul 7 23:57:52 2020 +0200
settings localization
commit 90c5d1ca3620092bc3ae10b2211489eb1cf6f5e8
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 21:11:48 2020 +0200
Lower near distance.
commit 0e66f02b25aaddaa2dfddbbc89cd67de54a9a7b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 20:09:01 2020 +0200
All sprites sway in the wind now.
commit db1401a6910bf42dcf502462c90038752ff5fbdb
Merge: 69e508d8c e8b4b29d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 19:34:17 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 69e508d8c94d8973033817ca86f357e466fc7c4d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 18:41:37 2020 +0200
Make it easy to switch to SIMD for math.
commit ffe0f5928c7a7e87d00cb5426b3b1d831d7e02fd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 21:21:12 2020 +0200
Fix some issues with underwater rendering.
commit bfda6da42f38fd02c31ee92c81ab785a3e50c2a0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 19:17:59 2020 +0200
Fix some minor display issues.
commit 0ed752e087968cf901301884aaeae698e32ef8a5
Merge: ccc6a06a8 518edcb85
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:14:21 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit ccc6a06a8d4504d6b9f7af7905a414d2ee06ab76
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:04:34 2020 +0200
Some minor changes.
commit 4e020246702889269efe1a191788992164c508d6
Merge: 50a64d927 e05c9267a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 16:17:40 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 50a64d927e6c4f4b0e4688e4cbfca694bc3f922a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 13:07:03 2020 +0200
Fix far plane.
commit 7dd06da34cae8f9ea3b6c889fe965181f3fd3949
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:25:35 2020 +0200
Add shadows.glsl.
commit 618a18c998778bf871b905a74657440fcc384c80
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:10:22 2020 +0200
Adding shadows, greedy meshing, and more.
commit eaea83fe6a5cb1cb0ba8beef888183c718258496
Merge: 267018495 2f89b863e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 22:47:07 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 2670184954a13e4a9e7a4e35ba79aac0c5fac2f7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 21:20:01 2020 +0200
Make civsim and sites deterministic.
For anything in worldgen where you use a HashMap, *please* think
carefully about which hasher you are going to use! This is
especially true if (for some reason) you are depending on hashmap
iteration order remaining stable for some aspect of worldgen.
commit f8376fd5dc72b4a9c2f51a6b4570d59c8b8e9343
Merge: 654f7e049 cdee191dd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 17:53:57 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 654f7e049258d9da27c09608bbe6a46ffa8787e5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed May 20 21:22:30 2020 +0200
Correct backface culling.
commit 560501df05ca725409b0f2e4eb31bdfdc15fd0c7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue May 19 17:22:06 2020 +0200
Greedy messhing for shadows.
commit a4d87e1875ca543436e6bbbeb20348facc5a52d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun May 17 05:59:00 2020 +0200
Shadow maps work for lantern.
commit 243d0837b8a3b08172c9a3c348d964d7ddc2a0a8
Merge: 04382dc28 71dd520cd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:53:13 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 04382dc28632b6c66e8821f6870c0daaa1c1901a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:22:17 2020 +0200
WIP: better graphics config, better LOD, shadow maps.
commit 22ddbad3eb32bfa70f0932176022208fe67ded81
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 18:54:09 2020 +0200
Minor shader fixes.
commit 746a10e8d01ac235f994b0cde78fa48998602a1f
Merge: 0f4a0e763 40ab94673
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 04:02:09 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0f4a0e763db3afbdc4fb0558611f38326ca87151
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 23:03:24 2020 +0200
Switch back to pop-in terrain.
commit dd74fa7e4a53667b38811d7aec58d7f6a68889bb
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 22:58:55 2020 +0200
LOD shading closer to voxel shading.
commit ef67bd58ba0bdaf622b078892d768263b6cba268
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 28 20:49:03 2020 +0200
Experimental underwater lighting.
commit 2c5ad9d07605e80d5fd5679dd3a5d70c605b86a9
Merge: 748279835 303967a6f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 22:35:24 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7482798354eda18c8207950080fc24d443a369de
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 21:59:55 2020 +0200
Replace discard in figure-frag.
commit d83b4ae69be4912f69bf7835f509c68a1c7770a4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:45:57 2020 +0200
Fix sprite lighting, HDR from focus_pos.
commit 0594238004f116274905fa0ed7c2b6c417ed1d29
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:14:10 2020 +0200
Proper HDR from point lights.
commit 48c93d2b41ce5743103d18e76cc228f5ac766492
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 14:01:43 2020 +0200
Brighter ambiance, darker LOD shadows.
commit e0452e895ccfa8a43f368cae3b8b8aedc24dad93
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 13:13:23 2020 +0200
More proper HDR.
commit 4c6da3ed16cfeebb455e40da5f557b4af9a499d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 00:13:10 2020 +0200
Trying LOD noise.
commit 682a3d74c85df5503ffe1fc1cc891bce789df1ad
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 23:11:08 2020 +0200
Fix LOD heights in towns.
commit cc39e5734e8b18f9077bf42e66337c1319dd6b6e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 21:01:23 2020 +0200
More LOD fixes.
commit 8116b21c2e51c836e77894e309ac273caf2917b3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:54:43 2020 +0200
I like this coloring.
commit bc2560ea90b36f4b46190005344232d993043ac3
Merge: 14effdd5d e690efe71
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:48:33 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 14effdd5db8747fcf3eb34f03b46b7792e92d1c5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:24:35 2020 +0200
Re-saturate.
commit 48a643955d4435b78179acba0beb4a979905cc31
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:23:57 2020 +0200
Various fixes.
commit f7b497a0c25f4ad4682c71dd1ed6f608052feb9b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 03:22:49 2020 +0200
Render figures again.
commit 44e4aad48deba8266b9f8bdfd3db096b381f5327
Merge: e6f0a5a98 9ec319a18
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 02:01:04 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit e6f0a5a981a82533ba188fff0a54ce98577bb152
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 24 16:12:20 2020 +0200
Add atmospheric scattering.
commit f2953087f691a8edbc001cb98ebf5059fc6f8ac0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 23 00:01:20 2020 +0200
Fix shadowing for specular reflections.
commit ddd4a67a9799b8d08c7dc0c2bec90621c2bed0e3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Apr 22 22:56:12 2020 +0200
HDR fixes.
commit 1015e60deef3c447381996277df7496707a63bd0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 21 18:25:19 2020 +0200
More lighting changes.
commit 80c264abd111fb237e57843efcb5c071d4f84613
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 13 00:29:59 2020 +0200
Lighting experiments.
commit 8414987e589dd5102bad89762a3adaccc0bfe957
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 9 02:38:40 2020 +0200
WIP -- lighting changes and soft shadows.
commit 9cd2b3fb0d6b49776c6dfe463e4169637250b11a
Merge: c7ea687eb 8b149ad11
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:29 2020 +0200
Merge branch 'sharp/new-lighting' into sharp/small-fixes
commit c7ea687ebbc5aace1b455f134a5bf49ce2c7434a
Merge: 476441531 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:02 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 8b149ad11ad4bb75018fcf9519baec27d1c95951
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:32:39 2020 +0200
Trying out a new lighting model.
commit b0ac9f36f755dd06f7c17c46150568064790864f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 07:56:11 2020 +0200
Use bicubic interpolation for terrain.
commit f6fc9307a121514b614bc50ef8eb055953e7da8a
Merge: 33140a295 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 05:01:41 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 4764415312aae6e9ac2d00e86e84577cb958f1ab
Merge: ed2d0111d 13388ee6a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 04:54:48 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 13388ee6a42943f3f79a9cb488346cef18e272fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 20:30:08 2020 +0200
Various fixes (to coloring and to soft shadows).
commit fbd084a94a067082a87cd6d28b82054709bc9265
Merge: 5a089863b 4fdf6896a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 18:50:38 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/map-colors
commit ed2d0111d994262ae836d84d1fe5a45e4de72a0b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 06:49:27 2020 +0200
Combining colors and LOD.
commit 88342640c6b835114d01c797b89fdede3b0a2108
Merge: 33140a295 5a089863b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:49:20 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 33140a2951b8212725f42c758b277aaec4d888f7
Merge: 4c65a5aed f34d4b379
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:36:21 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 5a089863beb01d4794bbe3580ada47b278715ea2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 03:17:49 2020 +0200
Making maps brighter.
This is probably not the right way to do it, but oh well!
commit 32b2c99109dd486aa922886081068f9c550c83f2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 02:46:36 2020 +0200
Horizon mapping and "layered" map generation.
Horizon mapping is a method of shadow mapping specific to height maps.
It can handle any angle between 0 and 90 degrees from the ground, as
long as know the horizontal direction in advance, by remembering only a
single angle (the "horizon angle" of the shadow map). More is explained
in common/src/msg/server.rs. We also remember the approximate height of
the largest occluder, to try to be able to generate soft shadows and
create a vertical position where the shadows can't go higher.
Additionally, map generation has been reworked. Instead of computing
everything from explicit samples, we pass in sampling functions that
return exactly what the map generator needs. This allows us to cleanly
separate the way we sample things like altitudes and colors from the map
generation process. We exploit this to generate maps *partially* on the
server (with colors and rivers, but not shading). We can then send the
partially completed map to the client, which can combine it with shadow
information to generate the final map. This is useful for two reasons:
first, it makes sure the client can apply shadow information by itself,
and second, it lets us pass the unshaded map for use with level of
detail functionality.
For similar reasons, river generation is split
out into its own layer, but for now we opt to still generate rivers on
the server (since the river wire format is more complicated to compress
and may require some extra work to make sure we have enough precision to
draw rivers well enough for LoD).
Finally, the mostly ad-hoc lighting we were performing has been (mostly)
replaced with explicit Phong reflection shading (including specular
highlights). Regularizing this seems useful and helps clarify the
"meaning" of the various light intensities, and helps us keep a more
physically plausible basis. However, its interaction with soft shadows
is still imperfect, and it's not yet clear to me what we need to do to
turn this into something useful for LoD.
commit f8926a5737ddc51f3d585c651a64c43677aae0f4
Merge: a1aee931e 875ae6ced
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Mar 13 13:32:42 2020 +0100
Merge remote-tracking branch 'origin/master' into sharp/map-colors
commit 4c65a5aed353b119aea65a2aaeb94549b67beb42
Author: Treeco <5021038-Treeco@users.noreply.gitlab.com>
Date: Mon Feb 24 16:48:05 2020 +0000
Made LOD setting slider exponential
commit 2fa7b2d20d7233dc8bfd64f9f7f54617575248f1
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 17:49:53 2020 +0000
Added mist to LoD
commit aab059a450b5f635777129ff82cc15b662965c3c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 15:14:06 2020 +0000
Added LoD slider
commit 779c36b538121c5ade3633ae5cb67bb14c8c3877
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:54:55 2020 +0000
Reduced cost of vertex pushing
commit 9fea150473906b166365b738ebcea07c697daf3d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:38:53 2020 +0000
Fixed maths, improved LoD resolution
commit 5481df38fea5bf183ff376a3337179cfaa5233dc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 11:22:50 2020 +0000
Dynamically relocate LoD vertices to enhance details
commit a3e36a50ababd615da7db1b26158c7906a5def01
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 18:13:51 2020 +0000
Simpler terrain spiral rendering
commit 255f450ae9ac8763db4bede075fb409161ed57cc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:53:17 2020 +0000
Better LoD precision
commit 3d027aebe812a5b8658a4eb8123dc9f61b3776d2
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:04:03 2020 +0000
Better falloff
commit be775c9484b457b2c0b1a494aec03392d0c70e76
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 15:30:45 2020 +0000
Applied good ideas from experimental branch
commit 58587b68545a23c5c04ab4574a4b94b3bc982246
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 16:15:13 2020 +0000
Minor fixes to LoD merging
commit 7b42aebd709c14df2db766aad61d9280ad24d84d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 15:04:44 2020 +0000
Capped LoD dragging
commit 8aafc559f87124e1ea5ca6e3ddc2aa0c242d793c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:54:37 2020 +0000
Better blending between LoD and terrain border
commit edd3455d5161792d87ddc8eadc0ecbad5532b284
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:40:19 2020 +0000
Fixed LoD z depth, added sea level offset
commit b9b06744620114dd5556e73f64fa93c145503a7c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:27:43 2020 +0000
Better LoD smoothing
commit a1aee931e790431560cd2d953ad61d9497072afd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Feb 21 14:52:17 2020 +0100
Adding shadows.
commit 2400786c13dd891c131ed86d48d05df516a8a778
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 13:48:40 2020 +0000
Use world map as LoD source
commit dbf650f504a4c25fbbc2096ac3616c736bf52d23
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Jan 20 00:48:14 2020 +0000
Better clouds at distance
commit 5e6f81b86cdb9730b9b056877b19257075fd5fa8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Jan 19 23:59:02 2020 +0000
sync
commit 745e7540ddb000cc645f612767b337c2ddc3f7c0
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 12:40:48 2019 +0000
Improved cloud falloff mist, faster noise sampling
commit f6a200d0cb866196ba57697466755f9e0c7ea5d8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 10:09:00 2019 +0000
Improved long-range depth precision, removed unnecessary LoD polygons
commit 63d1b2bb2292898d59fb4f4e502201103dfeb86f
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 20:57:46 2019 +0000
Working LoD shader
commit f13d98ee3e58f881e8b978861a67663b59ed91ec
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 11:03:40 2019 +0000
LoD first attempt (stack overflow issue)
2020-08-20 18:34:59 +00:00
|
|
|
|
Some(&mut self.chunks[vec2_as_uniform_idx(map_size_lg, chunk_pos)])
|
2019-06-18 21:22:31 +00:00
|
|
|
|
} else {
|
|
|
|
|
None
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pub fn get_base_z(&self, chunk_pos: Vec2<i32>) -> Option<f32> {
|
(See sharp/lod-history) LOD, shadows, greedy meshing, new lighting, perf
---
Pretty much a Veloren fork at this point. Here's a high level overview of the changes (will be added to CHANGELOG just before merge).
At a high level this MR incorporates roughly two groups of changes.
The first group consists of new game features: more flexible map sizes, level of detail terrain, shadow maps, and a new lighting
engine. This is "feature work" that (mostly) only adds new things to Veloren, and mostly shouldn't affect old stuff.
The second big group of changes are those addressing the fallout from all the new features. These include performance fixes of
various sorts: the addition of multiple graphics options and optimization of the cheap ones to avoid work, switching all voxel
models to use some variant of greedy meshing, switching over much of our CPU-side vector math to exploit SIMD instructions
(coinciding with a fork of `vek`), and a rewrite of how the UI handles text rendering (coinciding with updates to our fork
of `conrod`). Making Veloren's hardcoded colors appear correct under the new lighting engine also required considerably
changes (TODO: Fill in this section when it's complete).
The second category of changes often heavily touches code owned by other people, including frequently modified code "owned" by a
handful of people, so I recommend that this code be reviewed particularly carefully.
---
At a high level (each will be described in more detail below):
- The world map has been refactored.
- The world size is no longer hardcoded (@zesterer).
- The map generation code was made generic to allow using it outside of the `world` crate (@zesterer).
- On world creation, we now compute *horizon maps* (@zesterer).
- The way we pass the world from the server to the client has been updated (@xMAC94x).
- Artifacts related to image rotation were fixed (@imbris).
- Multiflow rivers were enabled (@zesterer).
- In the process of making changes related to the world map, various incidental fixes and optimizations were required.
- The new *level of detail* feature was added (@zesterer wrote part of this and has checked out the rest).
- A new LOD terrain rendering step was added to the pipeline.
- The LOD terrain quality was made configurable via a graphics setting.
- Horizon maps were used to cast shadows from LOD chunks on both LOD and non-LOD terrain.
- A "voxelization" effect was incorporated into rendered LOD terrain to make it blend better into the world.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Veloren's lighting has been completely overhauled (@zesterer has already checked most of this out).
- A semi-accurate index of refraction was assigned to our materials.
- A new, more realistic, physically based approach to lighting was used using the *Ashikhmin Shirley* BRDF.
- We emulate *atmospheric scattering* using equations designed for measuring solar panel light exposure.
- We attempt to compute *realistic light attenuation* in water using its real material properties.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Point and directional lights now cast realistic shadows, using *shadow mapping.* (@imbris, @zesterer, @Treeco, @YuriMomo)
- Point light shadow maps were added to the rendering pipeline, using geometry shaders and *seamless cube maps*.
- Directional light shadows were added to the rendering pipeline, using LISPSM together with disabling *depth clamping*.
- "Shadow-only" chunks and NPCs were added to prevent shadows from models behind you from disappearing.
- In the process of making changes related to shadow maps, various incidental fixes and optimizations were required.
The addition of shadow maps, LOD terrain, and the new lighting all led to significant performance degradation, on top of other
changes happening in master. Therefore, a large number of performance improvements were also needed:
- The graphics options were made much more flexible and configurable, and shaders were optimize.
- New options were provided for how to render lights and shadows (@Pfauenauge, @zesterer).
- Graphic setting storage and configuration were overhauled to make adding new features easier (@Pfauenauge, @imbris).
- Shaders were rewritten to utilize GLSL's preprocessor to avoid overhead (@zesterer, @YuriMomo).
- In the process of making changes related to providing additional rendering options, various incidental fixes and optimizations were required.
- Voxel model creation was switched to use *greedy meshing.*
- A new voxel meshing method, greedy meshing, was added (@imbris).
- Uses of the older meshing methods were migrated to use greedy meshing (@imbris, @jshipsey, @Pfauenauge).
- New restrictions were added to terrain, figure, and sprites to future proof them for further optimizations (@jshipsey, @Pfauenauge, @zesterer).
- Most positions are now relative to either chunk or player position for better precision (@imbris, @zesterer, @scottc).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- Animation and terrain math were switched to use SIMD where possible.
- Fixes were made to vek to make its SIMD feature usable for us (@zesterer, @imbris).
- The interface and types used in bone animation were changed in various ways (@jshipsey, @Snowram, @Pfauenauge).
- Redundant code generation for body animation is now partly taken care of by a macro (@jshipsey, @Snowram, @Pfauenauge).
- Animation code was modified to to use vek's SIMD representation where possible (@jshipsey, @Snowram, @Pfauenauge).
- Terrain meshing code and shadow map math were also modified to use vek's SIMD representation (@imbris).
- SIMD instruction generation was enabled (@YuriMomo, @jshipsey, @Snowram, @imbris, @Angelonfira, @xMAC94x).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- The way we cache glyphs was completely refactored, fixed, and optimized.
- Our fork of `conrod` was optimized in various ways (@imbris).
- Our fork of `conrod` now exposes whether a widget was updated during the current frame (@imbris).
- Our use of the glyph cache was rewritten for correctness (@imbris).
- A *text cache* was introduced that lets us skip remeshing glyphs that have not changed (@imbris).
- Various changes were made to reduce pressure on the glyph cache, with more planned (@imbris, @Pfauenauge).
- In the process of making changes related to the glyph cache, various incidental fixes and optimizations were required.
- Colors were changed to keep Veloren's look consistent with master.
- Some older tree models were brought back (@Pfauenauge).
- TODO(@Sharp): All hardcoded colors were extracted and made hotloadable.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Hardcoded colors were fixed to conform to Veloren's style.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Color models were fixed to conform to Veloren's style.
A detailed description of the involved changes follows.
---
- The world size is no longer hardcoded. All functions dependent on world size now take a `WorldSizeLg`, which holds the base 2 logarithm of each actual world dimension and is guaranteed to maintain certain properties (outlined in `common/src/terrain/map.rs`). Additionally, many utility functions that utilize the world size were moved into `common` as well (mostly `common/src/terrain/mod.rs`). Finally, the world map format was updated in order to store its size explicitly, with a migration path from the old format that should work whenever the old formatted map was a square (practically always). See `world/src/sim/mod.rs` for these changes.
- The map generation code was made generic to allow using it outside of the `world` crate. The parts of the map generating code that do not need to query the world were moved over to `common/src/terrain/map.rs`, allowing them to be used from the client without creating a dependency on `world`. The rest of it was turned into helper functions in `world/src/sim/map.rs`, which can be passed as closures to the generic map generation code to complete its construction. This also means that colors are now passed in separately to the map generation function. See <https://veloren.net/devblog-78/> for more details.
- On world creation, we now compute *horizon maps*. See the function in `world/src/sim/util.rs`.
Given a height map and a plane intersecting that height map, our horizon maps allow us to encode enough information to reconstruct shadows for each point on the height map using only the *horizon angle* (the angle at which the sun starts to become visible). As Veloren's sun only covers one plane, this is sufficient for encoding sun shadows for LOD terrain, by encoding two angles per chunk (one for each 90 degrees the sun covers). We can also use this for the moon, if we want, since the moon follows the same path. Additionally, we store the *height* of the furthest occluder, to try to make the shadows volumetric; so this means 4 bytes in total for each chunk.
Support for horizon maps has been merged into the map functionality in common as well.
- The way we pass the world from the server to the client has been updated. Rather than passing the prerendered map, we instead pass three maps with values for each chunk; one with the color information, a second with altitude information, and a third with horizon map information. We then reconstruct the map on the client, together with some additional information we send from the server (like the sea level and maximum height). See `common/src/msg/server.rs` for a detailed description of the format of `WorldMapMsg`, and `server/src/libr.rs` and `client/src/lib.rs` for details of the map construction and parsing.
- Artifacts related to image rotation were fixed. See the commit message for commit SHA `cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e` for a detailed explanation. This involved changes to shaders, the addition of a new type of graphic (also reflected in the graphic cache) that allows specifying a border color (which automatically makes the associated texture immutable), and some related fixes. I reproduce the first two paragraphs of the MR description as well:
```
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
```
- Multiflow rivers were enabled.
This does not really need to be part of this MR, and would be easy to revert, but since it seemed to provide a nice improvement it's currently packaged with it.
We already computed multiple outflows from each chunk for erosion purposes long before this MR.
However, we never modified river rendering to be able to handle this case (just a single downhill river flow is complex enough!) so this was not exposed when deciding which chunks were rivers.
Now that
- In the process of making changes related to the world map, various incidental fixes and optimizations were required. Some examples of fixes include making sure terrain is never lowered to below sea level (to make the shadow maps report correct values), fixing map altitudes and colors to understand things like cliffs and "block level" coloring (that doesn'te xist on the column level), and fixing a crashbug when rendering images for the UI where source pixels are strongly rectangular. Some examples of related performance fixes include avoiding allocating a fresh vector for all the maps (i.e. copying it over to change the format from `[u32; n]` to `DynamicImage` and then copying again to convert to `RgbaImage`), and instead using the `gfx::memory::slice` function to accomplish the same thing. These sorts of changes are spread all arond the code.
This includes the additon of a new scene, `voxygen/src/scene/lod.rs`, a new pipeline `voxygen/src/render/pipeline/lod_terrain.rs`, and new shaders `assets/vxygen/shaders/lod-terrain-vert.glsl` and `assets/vxygen/shaders/lod-terrain-frag.glsl`, as well as associated changes to the renderer in `voxygen/src/render/renderer.rs`.
The main idea behind our initial approach to LOD was to take the world data we now get from the server (altitude, color, and horizon mapping).
- Some previously computed values were turned into shader uniforms for better prediction on weak processors. (@zesterer)
- Calls to power or trig functions were removed or replaced with multiplications, where possible.
- After some deliberation
- To properly handle sprite "waving" for nearby sprites,
We explicitly designed the greedy meshing system with figures and sprites in mind.
In both cases, we want to be able to *efficiently* pack many different models into the same texture, especially in cases where we know
we will either not be removing any of the grouped-together from the models from the texture, or will remove all of them at once (so
they can be packed into some specific subtexture).
For sprites, since we know every model in advance and never intend to deallocate them, we currently pack them all as efficiently as
possible into one giant tetxure atlas. However, in the future we might opt to pack them slightly less efficiently in exchange for
shrinking the sprite vertex size.
For figures, we pack all the textures for each *model* into the same atlas.
is a global texture atlas used for every sprite, and for figures which is why we have the ability to mesh multiple
models to the same texture area (using the simple texture atlas allocator) without requiring intermediate vector allocations.
This is accomplished by delaying the time when we actually write the color and light data to the texture until *after* all the
model vertices have been meshed; then, we can just allocate the whole color/light array at once, making the atlas we use an
exact fit. In computer science-y terms, we accomplish this delay by, after we perform the initial greedy meshing (without
texture information), not continuing to create the texture data, but instead constructing a *continuation*--that is, a function
that, when called, will execute the rest of the computation. We push this continuation (which in Rust terms is a `FnOnce` closure
that takes the `ColLightsInfo` that it is supposed to write to as context) onto a
onto a vector
resizing. To allow for suspended writes to texture data, Rust pointed out to me that the continuation that would eventually write the color and light data to the texture atlas (the one that is shared by all models sharing the same greedy mesher) would have to *own* whatever data it mshed. Because we often generate the model data to mesh as a temporary in `voxygen/src/load.rs`, the
- Matrix multiplications in the shader were reduced for figure data (@zesterer).
- Vertex "waves" for fluid data were removed.
- Terrain "bending" near edges was removed.
- Scaling was fixed to make sure empty space was not introduced in a space previously occupied by a block. It was also changed to take ownership of its voxel data,
rather than sharing it, to let it be used with meshing.
- Rust's nightly version was bumped in order to use the `array_map` function, which lets us reuse more code between the simple map and `FigureModelCache`.
- PositionedGlyph::standalone.
---
I tried to cite sources in many cases[^realtime],[^lloyd],[^lispsm],[^pbrt],[^greedy],[^tjunctions]
where I needed features from elsewhere but I am particularly grateful for the following resources,
esepcially where they have accompanying source code. I linked all of them that are accessible to the public (those that are not were
obtained through legal means).
[^realtime]: Eisemann, Elmar, Michael Schwarz, Ulf Assarsson, Michael Wimmer. Real-Time Shadows. A K Peters/CRC Press (T&F), 20160419.
[^lloyd]: Lloyd,B. 2007. [Logarithmic perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). PhD thesis, University of North Carolina.
[^lispsm]: Wimmer, M., Scherzer, D., and Purgathofer, W. 2004. [Light space perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). In Proceedings of Eurographics Symposium on Rendering 2004, pp. 143– 152.
[^pbrt]: Pharr, Matt, et al. [http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf](Physically Based Rendering: From Theory to Implementation). Third edition, Morgan Kaufmann Publishers/Elsevier, 2017.
[^greedy]: mikolalysenko. “Meshing in a Minecraft Game.” 0 FPS, 30 June 2012, <https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/>.
[^tjunctions]: blackflux. “Meshing in Voxel Engines – Part 1.” Blackflux.Com, 23 Feb. 2014, <https://blackflux.wordpress.com/2014/02/23/meshing-in-voxel-engines-part-1/>.
I am also especially grateful to Khronos, Wikiepdia, and stackoverflow for answering many of my specific questions while writing the MR.
---
Squashed commit of the following:
commit 300505e7305a2fdac722a808ee8538323f215f39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 18:46:25 2020 +0200
Fixing cargo doc and typo in CHANGELOG.
commit ec0aeb18e8499d7d84ef818331b4b65c3d76cea6
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 15:38:50 2020 +0200
Hopefully final commit for the LOD branch.
commit 5e8ea0b1eaac02903a02feb2eb038d195de4872f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 10:14:26 2020 +0200
Falling back to power as stopgap.
commit e44a1cbf46504ee9931a01bdc9033e145500d557
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 09:25:41 2020 +0200
Address imbris feedback.
Temporarily disables shiny water, lowers max VD.
These restrictions will be lifted soon after merging.
commit 561e25778a108ac3712f5ec2ce3a51234c4430d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 08:31:13 2020 +0200
Tweaking shaders a bit.
commit 7d19259078ce0dd7b3742ad7d0cb3fab3ece3fdc
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:59:43 2020 +0200
Fix view example as well.
commit 051cd4934e0fad2c0b15db4380a4189fa318679f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:29:06 2020 +0200
Fix meshing benchmark.
commit c95e07db3b4dcca285678985e65e31b927cb1c61
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 05:46:22 2020 +0200
Address MR feedback, fix scene clouds.
commit 1bfb816cabdb3ffc1e507a009c2d98696b4b573a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:39:36 2020 +0200
Incorporating Pfau's figure color changes.
New eyes and new humanoid colors.
commit 3f9b89a3ac7b3356b1dba0d1a8f6541357f81469
Merge: e2f5162e4 62c53963a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:29:41 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit e2f5162e4f96f4124aa43488f7245d341b3dcfd4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:28:38 2020 +0200
World colors are all hotloadable.
They live in assets/world/style/colors.ron.
Only a small handful of hardcoed colors remain in World; they are either
part of the map, or difficult to disentangle from the rest of the
computation. Comments are made where appropriate.
commit 62c53963abe1975009d34a8f9515a355bef24f31
Author: Marcel Märtens <marcel.cochem@googlemail.com>
Date: Wed Aug 19 15:59:00 2020 +0200
replace pretty_env_logger with tracing
commit 5b1625f99d9586fe80e2232f583ec5af9f953099
Merge: d71003acd 4942b5b39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:15:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit d71003acdabeff970b3928e97c26af6847b5b78e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:14:34 2020 +0200
Hotloading colors, part 1: colors in common.
Currently, this just entails humanoid colors. There are only three
colors not handled; the light emitter colors in
common/src/comp/inventory/item/tool.rs. These don't seem important
enough to me to warrant making hotloadable, at least not right now, but
if it's needed later we can always add them to the file.
commit 63b5e0e553eb2ea49276f192a6fc7dd65254270d
Merge: c32b337a4 6d2c4b9c1
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 13:05:37 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c32b337a46e10d9de473d178a94a3ccd61c39bb3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:52:04 2020 +0200
Fixing LOD grid, for real.
commit a166ae0360395387e09fb35a1f84210c2ce5ec24
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:28:05 2020 +0200
Addressing imbris's initial feedback.
Fixes two minor bugs: explosion particles were no longer spawning
randomly, and LOD grids were not perfectly even.
commit 4cbad004f44060994252dd3d38647a14a589712f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:27:58 2020 +0200
Bumping nightly per request.
commit 548680276aac77c25d43d16b5622f847d474dbef
Merge: acc098604 8f8b20c91
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:26:06 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit acc0986040589a3492f88a740bc3c3fc693b26d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:28:32 2020 +0200
Lower resolution due to lying drivers.
commit d3b878de2a52c358d2944a6bbd0555dad7fbdb10
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:15:38 2020 +0200
Fix issues msh encountered with Intel 4600.
commit 10245e0c1b0cb6fae10d86409435364edc6102ef
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 21:15:02 2020 +0200
Merge more models into one mesh than we did previously.
commit 3155c31e663c52ae5c3a53d5fb5665892a1a498a
Merge: 7204cc8a7 3c199280e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:35:22 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7204cc8a7a4f74a30306bd205d9834fee4bb944f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:34:43 2020 +0200
Fix not yet done NPC animations.
This forces them all to be the idle animation if not specified.
This fixes issues where you'd have giant NPCs in water.
commit bc83360f2a08918f19d417b5f772e1ff554dba08
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 19:36:37 2020 +0200
Try to fix some bugs:
- Z fighting with LOD terrain and water.
- Audio SFX not playing.
commit 1fd104aa603bf3781b6526a5cada46aeca3049dd
Merge: 862df3c99 7c2c392a3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 12:02:31 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 862df3c9976c4da9bd7cfd784f1a85973127968a
Merge: 0a4218ed9 75c1d4401
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 05:52:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0a4218ed9d541a2b34c133351bea38a99ddf4ea7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 22:27:14 2020 +0200
Fix particle depth.
commit f51dfdeb442d0dd5243dd2f344fa4be295bd0875
Merge: c6251a956 5e6dc0471
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:19:04 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit c6251a956ad376400dca5c23420cf8d213dc8fdf
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:15:46 2020 +0200
Cache figures more intelligently.
Cache figures for longer, and don't cache character states for the
player except where they actually affect the rendered model.
commit 0ed801d5404982c6fb63b1eaa4567d908b294c9d
Merge: c11b9bdf0 eea64f78f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 16:32:24 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c11b9bdf0a53bf9884d2f5a48fec9b01d582df1a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 11:47:15 2020 +0200
Remove unneeded Clippy annotation.
commit 16aa9ef40af56d69289d00aafb3deadfb8bd4f35
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 8 00:53:02 2020 +0200
Fix hotloading and Clippy.
commit 3dc973e0be5b758da1e9805eb764ad401374cd0c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 23:50:27 2020 +0200
Major speedups with SIMD.
commit fba64a7d93d5a96077ce87287bbce6ab9b7fbcae
Merge: 76429d00e d1e10b178
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:19 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 76429d00eea00d212fbd672a84ee91e75b19b938
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:10 2020 +0200
Add clippy.toml.
commit c79f512f84dbb83cb82b7954db68ff241dfd8e41
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 11:55:20 2020 +0200
Fix all clippy issues, clean up Rust code.
commit 6f90e010b3fbefb53b0d632e819931350015b6b8
Merge: 77a8c7c26 5929cfa5c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:30 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 77a8c7c267d3f44a1a62bd6b2274359973c5e4d4
Merge: b44e44232 44febaabd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:10 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 5929cfa5c713aa392110bbb62407f76caf53c3df
Author: jshipsey <jshipsey18@gmail.com>
Date: Thu Aug 6 20:47:27 2020 -0400
fixed in-hand arrow bug
commit b44e442325d828f1cd564d66908f89d09e80474b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 6 13:40:35 2020 +0200
Miscellaneous performance improvements.
commit be37acf287c1360d8085862526ac3365ffd1d768
Merge: 125d7fc6c c11876547
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 05:49:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 125d7fc6c4dcd8c8c5f27b8268a4d64f409f3644
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 04:55:31 2020 +0200
Abstract over simd vs. repr_c vectors.
Also some minor improvements to Event size.
commit d4d4956e9252e1241ce110b2aa85076c6b1e2a23
Merge: 5f3b7294a aced5f979
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:56:54 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 5f3b7294af1f8533edc2620b58863c248e2b07af
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:43:52 2020 +0200
Fix formatting issues I missed before.
commit a428a3ebba70dcab63dd0f8cd983120c90617271
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:41:51 2020 +0200
Fix clippy warnings, part 1.
There aer still a bunch of type too complex and
function takes too many arguments warnings that I'll fix later
(or ignore, since in the one case I did fix a function takes too
many arguments warning I think it made the code *less* readable).
commit ba54307540ed8a937ac08209730284fc653af85b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 30 13:22:42 2020 +0200
Fix light animations so they are removed when the light turns off.
commit 7e0f4bcbf0f4717145d8beac40d52e3acebbe2aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 21:10:20 2020 +0200
Fix crash in edge case for pixel art.
commit 56da06f7a351e2b949e9b014a90b974d511a0924
Merge: cf74d55f2 9f53a4a19
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:56:52 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:29:52 2020 +0200
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
The first concern was addressed by fixing the dimensions of the map
images drawn from the UI (so that we always use a square source
rectangle, rather than a rectangular one according to the dimensions of
the map). We also fixed the way rotation was done in the fragment
shader for north-facing sources to make it properly handle aspect ratio
(this was already done for north-facing targets). Together, these fix
rendering issues peculiar to rectangular maps.
The second and third concerns were jointly addressed by adding an
optional border color to every 2D image drawn by the UI. This turns
out not to waste extra space even though we hold a full f32 color
(to avoid an extra dependency on gfx's PackedColor), since voxel
images already take up more space than Optiion<[f32; 4]> requires.
This is then implemented automatically using the "border color"
wrapping method in the attached sampler.
Since this is implemented in graphics hardware, it only works (at
least naively) if the actual image bounds match the texture bounds.
Therefore, we altered the way the graphics cache stores images
with a border color to guarantee that they are always in their own
texture, whose size exactly matches their extent. Since the easiest
currently exposed way to set a border color is to do so for an
immutable texture, we went a bit further and added a new "immutable"
texture storage type used for these cases; currently, it is always
and automatically used only when there is a specified border color,
but in theory there's no reason we couldn't provide immutable-only
images that use the default wrapping mdoe (though clamp to border
is admittedly not a great default).
To fix the maps case specifically, we set the border color to a
translucent version of the ocean border color. This may need
tweaking going forward, which shouldn't be hard.
As part of this process, we had to modify graphics replacement to
make sure immutable images are *removed* when invalidated, rather
than just having a validity flag unset (this is normally done by
the UI to try to reuse allocations in place if images are updated
in benign ways, since the texture atlases used for Ui do not
support deallocation; currently this is only used for item images,
so there should be no overlap with immutable image replacement,
so this was purely precautionary).
Since we were already touching the relevant code, we also updated
the image dependency to a newer version that provides more ways
to avoid allocations, and made a few other changes that should
hopefully eliminate redundant most of the intermediate buffer
allocations we were performing for what should be zero-cost
conversions. This may slightly improve performance in some
cases.
commit ad18ce939940a8c697270f6e9b94db9942fd8295
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 13:21:09 2020 +0200
Fix continent scale hack.
commit 36b1cb074f5b195aebd7dbbc3da7f0246a1a18ec
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 12:11:40 2020 +0200
Enable loading different sized maps without a recompile.
We may want to tweak the effects of the continent_scale_hack.
commit 13b6d4d534cc4814b7cb3294ca41bbfea0a6b186
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 10:55:48 2020 +0200
Removing WORLD_SIZE, part 1.
Erased almost every instance of WORLD_SIZE and replaced it with a local
power of two, map_size_lg (which respects certain invariants; see
common/src/terrain/map.rs for more details about MapSizeLg). This also
means we can avoid a dependency on the world crate from client, as
desired.
Now that the rest of the code is not expecting a fixed WORLD_SIZE, the
next step is to arrange for maps to store their world size, and to use
that world size as a basis prior to loading the map (as well, probably,
as prior to configuring some of the noise functions).
commit 30b1d2c6428230a9eaa0d749cdcbbd6f1cbccd78
Merge: 7d56ba31b 1377b369f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:58 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 7d56ba31b445441461b28a07fc495d7d4f047c17
Merge: 2101113b4 598f14b25
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 1377b369f6db2258e910d467a5740f31789e3ded
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sun Jul 19 23:25:38 2020 +0200
more saturated pumpkins
commit ae8d50527f93bb0616c2ad46ce4dacb63bc37c6d
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sat Jul 18 20:29:56 2020 +0200
acacia models
commit 2101113b467e691de787392d7f20f1745f5637bd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 18 18:55:25 2020 +0200
Higher detail LOD.
commit add2cfae04b4385fa5590e11e2bd5229d9dee0aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 16 01:57:39 2020 +0200
Revert some irrelevant stuff.
commit 2e2ab3dc1eaa59a4aef7f8d34a53d8aae4c8553a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 15 13:30:49 2020 +0200
Fixing various things about shadows.
* Correcting optimal LISPSM parameter.
* Figure shadows are cast when they're not visible.
* Chunk shadows stay cast until you look away.
* Seamless cubemaps for point lights.
* Etc.
commit 6c31e6b56217274285b597af297036691ea5d897
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 19:50:26 2020 +0200
Fix shadow creation.
commit 6332cbe006115ae205597529cd8bbccd146c2cca
Merge: be438657c 930e0028b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:47:00 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit be438657c33d7b5bfb0a9582c3ed3fd366637323
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:28:08 2020 +0200
Tweaks to shadows.
Added shadow map resolution configuration, added seamless cubemaps,
documented all existing rendering options, and fixed a few Clippy
errors.
commit 23b4058906013c7d2a40c286e20e32c5fbd897ed
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 10:11:19 2020 +0200
Fix moon, use nonlinear noise for terrain.
Note that the latter has a bit of performance cost.
commit 7fbe5cbfbb9dc29607957b8e62f432a4deed193d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:23:02 2020 +0200
Address lies about max texture size.
commit bcfc62b5e13a1cdd83f57535fde4694720bebfd9
Merge: 75e3626a7 18a08e8fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:22:08 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 75e3626a785919f43fdcf2127c2b10e3e4df2f9f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:21:52 2020 +0200
OpenGL 3.3 minimum.
commit 18a08e8fe2739f02af99a5d2cb4e7c38c49e858b
Author: Monty Marz <m.marzouq@gmx.de>
Date: Tue Jul 7 23:57:52 2020 +0200
settings localization
commit 90c5d1ca3620092bc3ae10b2211489eb1cf6f5e8
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 21:11:48 2020 +0200
Lower near distance.
commit 0e66f02b25aaddaa2dfddbbc89cd67de54a9a7b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 20:09:01 2020 +0200
All sprites sway in the wind now.
commit db1401a6910bf42dcf502462c90038752ff5fbdb
Merge: 69e508d8c e8b4b29d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 19:34:17 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 69e508d8c94d8973033817ca86f357e466fc7c4d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 18:41:37 2020 +0200
Make it easy to switch to SIMD for math.
commit ffe0f5928c7a7e87d00cb5426b3b1d831d7e02fd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 21:21:12 2020 +0200
Fix some issues with underwater rendering.
commit bfda6da42f38fd02c31ee92c81ab785a3e50c2a0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 19:17:59 2020 +0200
Fix some minor display issues.
commit 0ed752e087968cf901301884aaeae698e32ef8a5
Merge: ccc6a06a8 518edcb85
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:14:21 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit ccc6a06a8d4504d6b9f7af7905a414d2ee06ab76
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:04:34 2020 +0200
Some minor changes.
commit 4e020246702889269efe1a191788992164c508d6
Merge: 50a64d927 e05c9267a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 16:17:40 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 50a64d927e6c4f4b0e4688e4cbfca694bc3f922a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 13:07:03 2020 +0200
Fix far plane.
commit 7dd06da34cae8f9ea3b6c889fe965181f3fd3949
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:25:35 2020 +0200
Add shadows.glsl.
commit 618a18c998778bf871b905a74657440fcc384c80
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:10:22 2020 +0200
Adding shadows, greedy meshing, and more.
commit eaea83fe6a5cb1cb0ba8beef888183c718258496
Merge: 267018495 2f89b863e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 22:47:07 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 2670184954a13e4a9e7a4e35ba79aac0c5fac2f7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 21:20:01 2020 +0200
Make civsim and sites deterministic.
For anything in worldgen where you use a HashMap, *please* think
carefully about which hasher you are going to use! This is
especially true if (for some reason) you are depending on hashmap
iteration order remaining stable for some aspect of worldgen.
commit f8376fd5dc72b4a9c2f51a6b4570d59c8b8e9343
Merge: 654f7e049 cdee191dd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 17:53:57 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 654f7e049258d9da27c09608bbe6a46ffa8787e5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed May 20 21:22:30 2020 +0200
Correct backface culling.
commit 560501df05ca725409b0f2e4eb31bdfdc15fd0c7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue May 19 17:22:06 2020 +0200
Greedy messhing for shadows.
commit a4d87e1875ca543436e6bbbeb20348facc5a52d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun May 17 05:59:00 2020 +0200
Shadow maps work for lantern.
commit 243d0837b8a3b08172c9a3c348d964d7ddc2a0a8
Merge: 04382dc28 71dd520cd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:53:13 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 04382dc28632b6c66e8821f6870c0daaa1c1901a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:22:17 2020 +0200
WIP: better graphics config, better LOD, shadow maps.
commit 22ddbad3eb32bfa70f0932176022208fe67ded81
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 18:54:09 2020 +0200
Minor shader fixes.
commit 746a10e8d01ac235f994b0cde78fa48998602a1f
Merge: 0f4a0e763 40ab94673
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 04:02:09 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0f4a0e763db3afbdc4fb0558611f38326ca87151
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 23:03:24 2020 +0200
Switch back to pop-in terrain.
commit dd74fa7e4a53667b38811d7aec58d7f6a68889bb
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 22:58:55 2020 +0200
LOD shading closer to voxel shading.
commit ef67bd58ba0bdaf622b078892d768263b6cba268
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 28 20:49:03 2020 +0200
Experimental underwater lighting.
commit 2c5ad9d07605e80d5fd5679dd3a5d70c605b86a9
Merge: 748279835 303967a6f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 22:35:24 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7482798354eda18c8207950080fc24d443a369de
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 21:59:55 2020 +0200
Replace discard in figure-frag.
commit d83b4ae69be4912f69bf7835f509c68a1c7770a4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:45:57 2020 +0200
Fix sprite lighting, HDR from focus_pos.
commit 0594238004f116274905fa0ed7c2b6c417ed1d29
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:14:10 2020 +0200
Proper HDR from point lights.
commit 48c93d2b41ce5743103d18e76cc228f5ac766492
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 14:01:43 2020 +0200
Brighter ambiance, darker LOD shadows.
commit e0452e895ccfa8a43f368cae3b8b8aedc24dad93
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 13:13:23 2020 +0200
More proper HDR.
commit 4c6da3ed16cfeebb455e40da5f557b4af9a499d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 00:13:10 2020 +0200
Trying LOD noise.
commit 682a3d74c85df5503ffe1fc1cc891bce789df1ad
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 23:11:08 2020 +0200
Fix LOD heights in towns.
commit cc39e5734e8b18f9077bf42e66337c1319dd6b6e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 21:01:23 2020 +0200
More LOD fixes.
commit 8116b21c2e51c836e77894e309ac273caf2917b3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:54:43 2020 +0200
I like this coloring.
commit bc2560ea90b36f4b46190005344232d993043ac3
Merge: 14effdd5d e690efe71
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:48:33 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 14effdd5db8747fcf3eb34f03b46b7792e92d1c5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:24:35 2020 +0200
Re-saturate.
commit 48a643955d4435b78179acba0beb4a979905cc31
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:23:57 2020 +0200
Various fixes.
commit f7b497a0c25f4ad4682c71dd1ed6f608052feb9b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 03:22:49 2020 +0200
Render figures again.
commit 44e4aad48deba8266b9f8bdfd3db096b381f5327
Merge: e6f0a5a98 9ec319a18
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 02:01:04 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit e6f0a5a981a82533ba188fff0a54ce98577bb152
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 24 16:12:20 2020 +0200
Add atmospheric scattering.
commit f2953087f691a8edbc001cb98ebf5059fc6f8ac0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 23 00:01:20 2020 +0200
Fix shadowing for specular reflections.
commit ddd4a67a9799b8d08c7dc0c2bec90621c2bed0e3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Apr 22 22:56:12 2020 +0200
HDR fixes.
commit 1015e60deef3c447381996277df7496707a63bd0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 21 18:25:19 2020 +0200
More lighting changes.
commit 80c264abd111fb237e57843efcb5c071d4f84613
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 13 00:29:59 2020 +0200
Lighting experiments.
commit 8414987e589dd5102bad89762a3adaccc0bfe957
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 9 02:38:40 2020 +0200
WIP -- lighting changes and soft shadows.
commit 9cd2b3fb0d6b49776c6dfe463e4169637250b11a
Merge: c7ea687eb 8b149ad11
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:29 2020 +0200
Merge branch 'sharp/new-lighting' into sharp/small-fixes
commit c7ea687ebbc5aace1b455f134a5bf49ce2c7434a
Merge: 476441531 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:02 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 8b149ad11ad4bb75018fcf9519baec27d1c95951
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:32:39 2020 +0200
Trying out a new lighting model.
commit b0ac9f36f755dd06f7c17c46150568064790864f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 07:56:11 2020 +0200
Use bicubic interpolation for terrain.
commit f6fc9307a121514b614bc50ef8eb055953e7da8a
Merge: 33140a295 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 05:01:41 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 4764415312aae6e9ac2d00e86e84577cb958f1ab
Merge: ed2d0111d 13388ee6a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 04:54:48 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 13388ee6a42943f3f79a9cb488346cef18e272fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 20:30:08 2020 +0200
Various fixes (to coloring and to soft shadows).
commit fbd084a94a067082a87cd6d28b82054709bc9265
Merge: 5a089863b 4fdf6896a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 18:50:38 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/map-colors
commit ed2d0111d994262ae836d84d1fe5a45e4de72a0b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 06:49:27 2020 +0200
Combining colors and LOD.
commit 88342640c6b835114d01c797b89fdede3b0a2108
Merge: 33140a295 5a089863b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:49:20 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 33140a2951b8212725f42c758b277aaec4d888f7
Merge: 4c65a5aed f34d4b379
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:36:21 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 5a089863beb01d4794bbe3580ada47b278715ea2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 03:17:49 2020 +0200
Making maps brighter.
This is probably not the right way to do it, but oh well!
commit 32b2c99109dd486aa922886081068f9c550c83f2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 02:46:36 2020 +0200
Horizon mapping and "layered" map generation.
Horizon mapping is a method of shadow mapping specific to height maps.
It can handle any angle between 0 and 90 degrees from the ground, as
long as know the horizontal direction in advance, by remembering only a
single angle (the "horizon angle" of the shadow map). More is explained
in common/src/msg/server.rs. We also remember the approximate height of
the largest occluder, to try to be able to generate soft shadows and
create a vertical position where the shadows can't go higher.
Additionally, map generation has been reworked. Instead of computing
everything from explicit samples, we pass in sampling functions that
return exactly what the map generator needs. This allows us to cleanly
separate the way we sample things like altitudes and colors from the map
generation process. We exploit this to generate maps *partially* on the
server (with colors and rivers, but not shading). We can then send the
partially completed map to the client, which can combine it with shadow
information to generate the final map. This is useful for two reasons:
first, it makes sure the client can apply shadow information by itself,
and second, it lets us pass the unshaded map for use with level of
detail functionality.
For similar reasons, river generation is split
out into its own layer, but for now we opt to still generate rivers on
the server (since the river wire format is more complicated to compress
and may require some extra work to make sure we have enough precision to
draw rivers well enough for LoD).
Finally, the mostly ad-hoc lighting we were performing has been (mostly)
replaced with explicit Phong reflection shading (including specular
highlights). Regularizing this seems useful and helps clarify the
"meaning" of the various light intensities, and helps us keep a more
physically plausible basis. However, its interaction with soft shadows
is still imperfect, and it's not yet clear to me what we need to do to
turn this into something useful for LoD.
commit f8926a5737ddc51f3d585c651a64c43677aae0f4
Merge: a1aee931e 875ae6ced
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Mar 13 13:32:42 2020 +0100
Merge remote-tracking branch 'origin/master' into sharp/map-colors
commit 4c65a5aed353b119aea65a2aaeb94549b67beb42
Author: Treeco <5021038-Treeco@users.noreply.gitlab.com>
Date: Mon Feb 24 16:48:05 2020 +0000
Made LOD setting slider exponential
commit 2fa7b2d20d7233dc8bfd64f9f7f54617575248f1
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 17:49:53 2020 +0000
Added mist to LoD
commit aab059a450b5f635777129ff82cc15b662965c3c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 15:14:06 2020 +0000
Added LoD slider
commit 779c36b538121c5ade3633ae5cb67bb14c8c3877
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:54:55 2020 +0000
Reduced cost of vertex pushing
commit 9fea150473906b166365b738ebcea07c697daf3d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:38:53 2020 +0000
Fixed maths, improved LoD resolution
commit 5481df38fea5bf183ff376a3337179cfaa5233dc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 11:22:50 2020 +0000
Dynamically relocate LoD vertices to enhance details
commit a3e36a50ababd615da7db1b26158c7906a5def01
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 18:13:51 2020 +0000
Simpler terrain spiral rendering
commit 255f450ae9ac8763db4bede075fb409161ed57cc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:53:17 2020 +0000
Better LoD precision
commit 3d027aebe812a5b8658a4eb8123dc9f61b3776d2
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:04:03 2020 +0000
Better falloff
commit be775c9484b457b2c0b1a494aec03392d0c70e76
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 15:30:45 2020 +0000
Applied good ideas from experimental branch
commit 58587b68545a23c5c04ab4574a4b94b3bc982246
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 16:15:13 2020 +0000
Minor fixes to LoD merging
commit 7b42aebd709c14df2db766aad61d9280ad24d84d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 15:04:44 2020 +0000
Capped LoD dragging
commit 8aafc559f87124e1ea5ca6e3ddc2aa0c242d793c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:54:37 2020 +0000
Better blending between LoD and terrain border
commit edd3455d5161792d87ddc8eadc0ecbad5532b284
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:40:19 2020 +0000
Fixed LoD z depth, added sea level offset
commit b9b06744620114dd5556e73f64fa93c145503a7c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:27:43 2020 +0000
Better LoD smoothing
commit a1aee931e790431560cd2d953ad61d9497072afd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Feb 21 14:52:17 2020 +0100
Adding shadows.
commit 2400786c13dd891c131ed86d48d05df516a8a778
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 13:48:40 2020 +0000
Use world map as LoD source
commit dbf650f504a4c25fbbc2096ac3616c736bf52d23
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Jan 20 00:48:14 2020 +0000
Better clouds at distance
commit 5e6f81b86cdb9730b9b056877b19257075fd5fa8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Jan 19 23:59:02 2020 +0000
sync
commit 745e7540ddb000cc645f612767b337c2ddc3f7c0
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 12:40:48 2019 +0000
Improved cloud falloff mist, faster noise sampling
commit f6a200d0cb866196ba57697466755f9e0c7ea5d8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 10:09:00 2019 +0000
Improved long-range depth precision, removed unnecessary LoD polygons
commit 63d1b2bb2292898d59fb4f4e502201103dfeb86f
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 20:57:46 2019 +0000
Working LoD shader
commit f13d98ee3e58f881e8b978861a67663b59ed91ec
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 11:03:40 2019 +0000
LoD first attempt (stack overflow issue)
2020-08-20 18:34:59 +00:00
|
|
|
|
let in_bounds = chunk_pos
|
|
|
|
|
.map2(self.map_size_lg().chunks(), |e, sz| {
|
|
|
|
|
e > 0 && e < sz as i32 - 2
|
|
|
|
|
})
|
|
|
|
|
.reduce_and();
|
|
|
|
|
if !in_bounds {
|
2019-10-16 11:39:41 +00:00
|
|
|
|
return None;
|
|
|
|
|
}
|
|
|
|
|
|
(See sharp/lod-history) LOD, shadows, greedy meshing, new lighting, perf
---
Pretty much a Veloren fork at this point. Here's a high level overview of the changes (will be added to CHANGELOG just before merge).
At a high level this MR incorporates roughly two groups of changes.
The first group consists of new game features: more flexible map sizes, level of detail terrain, shadow maps, and a new lighting
engine. This is "feature work" that (mostly) only adds new things to Veloren, and mostly shouldn't affect old stuff.
The second big group of changes are those addressing the fallout from all the new features. These include performance fixes of
various sorts: the addition of multiple graphics options and optimization of the cheap ones to avoid work, switching all voxel
models to use some variant of greedy meshing, switching over much of our CPU-side vector math to exploit SIMD instructions
(coinciding with a fork of `vek`), and a rewrite of how the UI handles text rendering (coinciding with updates to our fork
of `conrod`). Making Veloren's hardcoded colors appear correct under the new lighting engine also required considerably
changes (TODO: Fill in this section when it's complete).
The second category of changes often heavily touches code owned by other people, including frequently modified code "owned" by a
handful of people, so I recommend that this code be reviewed particularly carefully.
---
At a high level (each will be described in more detail below):
- The world map has been refactored.
- The world size is no longer hardcoded (@zesterer).
- The map generation code was made generic to allow using it outside of the `world` crate (@zesterer).
- On world creation, we now compute *horizon maps* (@zesterer).
- The way we pass the world from the server to the client has been updated (@xMAC94x).
- Artifacts related to image rotation were fixed (@imbris).
- Multiflow rivers were enabled (@zesterer).
- In the process of making changes related to the world map, various incidental fixes and optimizations were required.
- The new *level of detail* feature was added (@zesterer wrote part of this and has checked out the rest).
- A new LOD terrain rendering step was added to the pipeline.
- The LOD terrain quality was made configurable via a graphics setting.
- Horizon maps were used to cast shadows from LOD chunks on both LOD and non-LOD terrain.
- A "voxelization" effect was incorporated into rendered LOD terrain to make it blend better into the world.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Veloren's lighting has been completely overhauled (@zesterer has already checked most of this out).
- A semi-accurate index of refraction was assigned to our materials.
- A new, more realistic, physically based approach to lighting was used using the *Ashikhmin Shirley* BRDF.
- We emulate *atmospheric scattering* using equations designed for measuring solar panel light exposure.
- We attempt to compute *realistic light attenuation* in water using its real material properties.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Point and directional lights now cast realistic shadows, using *shadow mapping.* (@imbris, @zesterer, @Treeco, @YuriMomo)
- Point light shadow maps were added to the rendering pipeline, using geometry shaders and *seamless cube maps*.
- Directional light shadows were added to the rendering pipeline, using LISPSM together with disabling *depth clamping*.
- "Shadow-only" chunks and NPCs were added to prevent shadows from models behind you from disappearing.
- In the process of making changes related to shadow maps, various incidental fixes and optimizations were required.
The addition of shadow maps, LOD terrain, and the new lighting all led to significant performance degradation, on top of other
changes happening in master. Therefore, a large number of performance improvements were also needed:
- The graphics options were made much more flexible and configurable, and shaders were optimize.
- New options were provided for how to render lights and shadows (@Pfauenauge, @zesterer).
- Graphic setting storage and configuration were overhauled to make adding new features easier (@Pfauenauge, @imbris).
- Shaders were rewritten to utilize GLSL's preprocessor to avoid overhead (@zesterer, @YuriMomo).
- In the process of making changes related to providing additional rendering options, various incidental fixes and optimizations were required.
- Voxel model creation was switched to use *greedy meshing.*
- A new voxel meshing method, greedy meshing, was added (@imbris).
- Uses of the older meshing methods were migrated to use greedy meshing (@imbris, @jshipsey, @Pfauenauge).
- New restrictions were added to terrain, figure, and sprites to future proof them for further optimizations (@jshipsey, @Pfauenauge, @zesterer).
- Most positions are now relative to either chunk or player position for better precision (@imbris, @zesterer, @scottc).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- Animation and terrain math were switched to use SIMD where possible.
- Fixes were made to vek to make its SIMD feature usable for us (@zesterer, @imbris).
- The interface and types used in bone animation were changed in various ways (@jshipsey, @Snowram, @Pfauenauge).
- Redundant code generation for body animation is now partly taken care of by a macro (@jshipsey, @Snowram, @Pfauenauge).
- Animation code was modified to to use vek's SIMD representation where possible (@jshipsey, @Snowram, @Pfauenauge).
- Terrain meshing code and shadow map math were also modified to use vek's SIMD representation (@imbris).
- SIMD instruction generation was enabled (@YuriMomo, @jshipsey, @Snowram, @imbris, @Angelonfira, @xMAC94x).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- The way we cache glyphs was completely refactored, fixed, and optimized.
- Our fork of `conrod` was optimized in various ways (@imbris).
- Our fork of `conrod` now exposes whether a widget was updated during the current frame (@imbris).
- Our use of the glyph cache was rewritten for correctness (@imbris).
- A *text cache* was introduced that lets us skip remeshing glyphs that have not changed (@imbris).
- Various changes were made to reduce pressure on the glyph cache, with more planned (@imbris, @Pfauenauge).
- In the process of making changes related to the glyph cache, various incidental fixes and optimizations were required.
- Colors were changed to keep Veloren's look consistent with master.
- Some older tree models were brought back (@Pfauenauge).
- TODO(@Sharp): All hardcoded colors were extracted and made hotloadable.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Hardcoded colors were fixed to conform to Veloren's style.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Color models were fixed to conform to Veloren's style.
A detailed description of the involved changes follows.
---
- The world size is no longer hardcoded. All functions dependent on world size now take a `WorldSizeLg`, which holds the base 2 logarithm of each actual world dimension and is guaranteed to maintain certain properties (outlined in `common/src/terrain/map.rs`). Additionally, many utility functions that utilize the world size were moved into `common` as well (mostly `common/src/terrain/mod.rs`). Finally, the world map format was updated in order to store its size explicitly, with a migration path from the old format that should work whenever the old formatted map was a square (practically always). See `world/src/sim/mod.rs` for these changes.
- The map generation code was made generic to allow using it outside of the `world` crate. The parts of the map generating code that do not need to query the world were moved over to `common/src/terrain/map.rs`, allowing them to be used from the client without creating a dependency on `world`. The rest of it was turned into helper functions in `world/src/sim/map.rs`, which can be passed as closures to the generic map generation code to complete its construction. This also means that colors are now passed in separately to the map generation function. See <https://veloren.net/devblog-78/> for more details.
- On world creation, we now compute *horizon maps*. See the function in `world/src/sim/util.rs`.
Given a height map and a plane intersecting that height map, our horizon maps allow us to encode enough information to reconstruct shadows for each point on the height map using only the *horizon angle* (the angle at which the sun starts to become visible). As Veloren's sun only covers one plane, this is sufficient for encoding sun shadows for LOD terrain, by encoding two angles per chunk (one for each 90 degrees the sun covers). We can also use this for the moon, if we want, since the moon follows the same path. Additionally, we store the *height* of the furthest occluder, to try to make the shadows volumetric; so this means 4 bytes in total for each chunk.
Support for horizon maps has been merged into the map functionality in common as well.
- The way we pass the world from the server to the client has been updated. Rather than passing the prerendered map, we instead pass three maps with values for each chunk; one with the color information, a second with altitude information, and a third with horizon map information. We then reconstruct the map on the client, together with some additional information we send from the server (like the sea level and maximum height). See `common/src/msg/server.rs` for a detailed description of the format of `WorldMapMsg`, and `server/src/libr.rs` and `client/src/lib.rs` for details of the map construction and parsing.
- Artifacts related to image rotation were fixed. See the commit message for commit SHA `cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e` for a detailed explanation. This involved changes to shaders, the addition of a new type of graphic (also reflected in the graphic cache) that allows specifying a border color (which automatically makes the associated texture immutable), and some related fixes. I reproduce the first two paragraphs of the MR description as well:
```
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
```
- Multiflow rivers were enabled.
This does not really need to be part of this MR, and would be easy to revert, but since it seemed to provide a nice improvement it's currently packaged with it.
We already computed multiple outflows from each chunk for erosion purposes long before this MR.
However, we never modified river rendering to be able to handle this case (just a single downhill river flow is complex enough!) so this was not exposed when deciding which chunks were rivers.
Now that
- In the process of making changes related to the world map, various incidental fixes and optimizations were required. Some examples of fixes include making sure terrain is never lowered to below sea level (to make the shadow maps report correct values), fixing map altitudes and colors to understand things like cliffs and "block level" coloring (that doesn'te xist on the column level), and fixing a crashbug when rendering images for the UI where source pixels are strongly rectangular. Some examples of related performance fixes include avoiding allocating a fresh vector for all the maps (i.e. copying it over to change the format from `[u32; n]` to `DynamicImage` and then copying again to convert to `RgbaImage`), and instead using the `gfx::memory::slice` function to accomplish the same thing. These sorts of changes are spread all arond the code.
This includes the additon of a new scene, `voxygen/src/scene/lod.rs`, a new pipeline `voxygen/src/render/pipeline/lod_terrain.rs`, and new shaders `assets/vxygen/shaders/lod-terrain-vert.glsl` and `assets/vxygen/shaders/lod-terrain-frag.glsl`, as well as associated changes to the renderer in `voxygen/src/render/renderer.rs`.
The main idea behind our initial approach to LOD was to take the world data we now get from the server (altitude, color, and horizon mapping).
- Some previously computed values were turned into shader uniforms for better prediction on weak processors. (@zesterer)
- Calls to power or trig functions were removed or replaced with multiplications, where possible.
- After some deliberation
- To properly handle sprite "waving" for nearby sprites,
We explicitly designed the greedy meshing system with figures and sprites in mind.
In both cases, we want to be able to *efficiently* pack many different models into the same texture, especially in cases where we know
we will either not be removing any of the grouped-together from the models from the texture, or will remove all of them at once (so
they can be packed into some specific subtexture).
For sprites, since we know every model in advance and never intend to deallocate them, we currently pack them all as efficiently as
possible into one giant tetxure atlas. However, in the future we might opt to pack them slightly less efficiently in exchange for
shrinking the sprite vertex size.
For figures, we pack all the textures for each *model* into the same atlas.
is a global texture atlas used for every sprite, and for figures which is why we have the ability to mesh multiple
models to the same texture area (using the simple texture atlas allocator) without requiring intermediate vector allocations.
This is accomplished by delaying the time when we actually write the color and light data to the texture until *after* all the
model vertices have been meshed; then, we can just allocate the whole color/light array at once, making the atlas we use an
exact fit. In computer science-y terms, we accomplish this delay by, after we perform the initial greedy meshing (without
texture information), not continuing to create the texture data, but instead constructing a *continuation*--that is, a function
that, when called, will execute the rest of the computation. We push this continuation (which in Rust terms is a `FnOnce` closure
that takes the `ColLightsInfo` that it is supposed to write to as context) onto a
onto a vector
resizing. To allow for suspended writes to texture data, Rust pointed out to me that the continuation that would eventually write the color and light data to the texture atlas (the one that is shared by all models sharing the same greedy mesher) would have to *own* whatever data it mshed. Because we often generate the model data to mesh as a temporary in `voxygen/src/load.rs`, the
- Matrix multiplications in the shader were reduced for figure data (@zesterer).
- Vertex "waves" for fluid data were removed.
- Terrain "bending" near edges was removed.
- Scaling was fixed to make sure empty space was not introduced in a space previously occupied by a block. It was also changed to take ownership of its voxel data,
rather than sharing it, to let it be used with meshing.
- Rust's nightly version was bumped in order to use the `array_map` function, which lets us reuse more code between the simple map and `FigureModelCache`.
- PositionedGlyph::standalone.
---
I tried to cite sources in many cases[^realtime],[^lloyd],[^lispsm],[^pbrt],[^greedy],[^tjunctions]
where I needed features from elsewhere but I am particularly grateful for the following resources,
esepcially where they have accompanying source code. I linked all of them that are accessible to the public (those that are not were
obtained through legal means).
[^realtime]: Eisemann, Elmar, Michael Schwarz, Ulf Assarsson, Michael Wimmer. Real-Time Shadows. A K Peters/CRC Press (T&F), 20160419.
[^lloyd]: Lloyd,B. 2007. [Logarithmic perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). PhD thesis, University of North Carolina.
[^lispsm]: Wimmer, M., Scherzer, D., and Purgathofer, W. 2004. [Light space perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). In Proceedings of Eurographics Symposium on Rendering 2004, pp. 143– 152.
[^pbrt]: Pharr, Matt, et al. [http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf](Physically Based Rendering: From Theory to Implementation). Third edition, Morgan Kaufmann Publishers/Elsevier, 2017.
[^greedy]: mikolalysenko. “Meshing in a Minecraft Game.” 0 FPS, 30 June 2012, <https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/>.
[^tjunctions]: blackflux. “Meshing in Voxel Engines – Part 1.” Blackflux.Com, 23 Feb. 2014, <https://blackflux.wordpress.com/2014/02/23/meshing-in-voxel-engines-part-1/>.
I am also especially grateful to Khronos, Wikiepdia, and stackoverflow for answering many of my specific questions while writing the MR.
---
Squashed commit of the following:
commit 300505e7305a2fdac722a808ee8538323f215f39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 18:46:25 2020 +0200
Fixing cargo doc and typo in CHANGELOG.
commit ec0aeb18e8499d7d84ef818331b4b65c3d76cea6
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 15:38:50 2020 +0200
Hopefully final commit for the LOD branch.
commit 5e8ea0b1eaac02903a02feb2eb038d195de4872f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 10:14:26 2020 +0200
Falling back to power as stopgap.
commit e44a1cbf46504ee9931a01bdc9033e145500d557
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 09:25:41 2020 +0200
Address imbris feedback.
Temporarily disables shiny water, lowers max VD.
These restrictions will be lifted soon after merging.
commit 561e25778a108ac3712f5ec2ce3a51234c4430d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 08:31:13 2020 +0200
Tweaking shaders a bit.
commit 7d19259078ce0dd7b3742ad7d0cb3fab3ece3fdc
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:59:43 2020 +0200
Fix view example as well.
commit 051cd4934e0fad2c0b15db4380a4189fa318679f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:29:06 2020 +0200
Fix meshing benchmark.
commit c95e07db3b4dcca285678985e65e31b927cb1c61
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 05:46:22 2020 +0200
Address MR feedback, fix scene clouds.
commit 1bfb816cabdb3ffc1e507a009c2d98696b4b573a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:39:36 2020 +0200
Incorporating Pfau's figure color changes.
New eyes and new humanoid colors.
commit 3f9b89a3ac7b3356b1dba0d1a8f6541357f81469
Merge: e2f5162e4 62c53963a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:29:41 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit e2f5162e4f96f4124aa43488f7245d341b3dcfd4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:28:38 2020 +0200
World colors are all hotloadable.
They live in assets/world/style/colors.ron.
Only a small handful of hardcoed colors remain in World; they are either
part of the map, or difficult to disentangle from the rest of the
computation. Comments are made where appropriate.
commit 62c53963abe1975009d34a8f9515a355bef24f31
Author: Marcel Märtens <marcel.cochem@googlemail.com>
Date: Wed Aug 19 15:59:00 2020 +0200
replace pretty_env_logger with tracing
commit 5b1625f99d9586fe80e2232f583ec5af9f953099
Merge: d71003acd 4942b5b39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:15:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit d71003acdabeff970b3928e97c26af6847b5b78e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:14:34 2020 +0200
Hotloading colors, part 1: colors in common.
Currently, this just entails humanoid colors. There are only three
colors not handled; the light emitter colors in
common/src/comp/inventory/item/tool.rs. These don't seem important
enough to me to warrant making hotloadable, at least not right now, but
if it's needed later we can always add them to the file.
commit 63b5e0e553eb2ea49276f192a6fc7dd65254270d
Merge: c32b337a4 6d2c4b9c1
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 13:05:37 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c32b337a46e10d9de473d178a94a3ccd61c39bb3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:52:04 2020 +0200
Fixing LOD grid, for real.
commit a166ae0360395387e09fb35a1f84210c2ce5ec24
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:28:05 2020 +0200
Addressing imbris's initial feedback.
Fixes two minor bugs: explosion particles were no longer spawning
randomly, and LOD grids were not perfectly even.
commit 4cbad004f44060994252dd3d38647a14a589712f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:27:58 2020 +0200
Bumping nightly per request.
commit 548680276aac77c25d43d16b5622f847d474dbef
Merge: acc098604 8f8b20c91
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:26:06 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit acc0986040589a3492f88a740bc3c3fc693b26d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:28:32 2020 +0200
Lower resolution due to lying drivers.
commit d3b878de2a52c358d2944a6bbd0555dad7fbdb10
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:15:38 2020 +0200
Fix issues msh encountered with Intel 4600.
commit 10245e0c1b0cb6fae10d86409435364edc6102ef
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 21:15:02 2020 +0200
Merge more models into one mesh than we did previously.
commit 3155c31e663c52ae5c3a53d5fb5665892a1a498a
Merge: 7204cc8a7 3c199280e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:35:22 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7204cc8a7a4f74a30306bd205d9834fee4bb944f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:34:43 2020 +0200
Fix not yet done NPC animations.
This forces them all to be the idle animation if not specified.
This fixes issues where you'd have giant NPCs in water.
commit bc83360f2a08918f19d417b5f772e1ff554dba08
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 19:36:37 2020 +0200
Try to fix some bugs:
- Z fighting with LOD terrain and water.
- Audio SFX not playing.
commit 1fd104aa603bf3781b6526a5cada46aeca3049dd
Merge: 862df3c99 7c2c392a3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 12:02:31 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 862df3c9976c4da9bd7cfd784f1a85973127968a
Merge: 0a4218ed9 75c1d4401
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 05:52:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0a4218ed9d541a2b34c133351bea38a99ddf4ea7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 22:27:14 2020 +0200
Fix particle depth.
commit f51dfdeb442d0dd5243dd2f344fa4be295bd0875
Merge: c6251a956 5e6dc0471
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:19:04 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit c6251a956ad376400dca5c23420cf8d213dc8fdf
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:15:46 2020 +0200
Cache figures more intelligently.
Cache figures for longer, and don't cache character states for the
player except where they actually affect the rendered model.
commit 0ed801d5404982c6fb63b1eaa4567d908b294c9d
Merge: c11b9bdf0 eea64f78f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 16:32:24 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c11b9bdf0a53bf9884d2f5a48fec9b01d582df1a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 11:47:15 2020 +0200
Remove unneeded Clippy annotation.
commit 16aa9ef40af56d69289d00aafb3deadfb8bd4f35
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 8 00:53:02 2020 +0200
Fix hotloading and Clippy.
commit 3dc973e0be5b758da1e9805eb764ad401374cd0c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 23:50:27 2020 +0200
Major speedups with SIMD.
commit fba64a7d93d5a96077ce87287bbce6ab9b7fbcae
Merge: 76429d00e d1e10b178
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:19 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 76429d00eea00d212fbd672a84ee91e75b19b938
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:10 2020 +0200
Add clippy.toml.
commit c79f512f84dbb83cb82b7954db68ff241dfd8e41
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 11:55:20 2020 +0200
Fix all clippy issues, clean up Rust code.
commit 6f90e010b3fbefb53b0d632e819931350015b6b8
Merge: 77a8c7c26 5929cfa5c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:30 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 77a8c7c267d3f44a1a62bd6b2274359973c5e4d4
Merge: b44e44232 44febaabd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:10 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 5929cfa5c713aa392110bbb62407f76caf53c3df
Author: jshipsey <jshipsey18@gmail.com>
Date: Thu Aug 6 20:47:27 2020 -0400
fixed in-hand arrow bug
commit b44e442325d828f1cd564d66908f89d09e80474b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 6 13:40:35 2020 +0200
Miscellaneous performance improvements.
commit be37acf287c1360d8085862526ac3365ffd1d768
Merge: 125d7fc6c c11876547
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 05:49:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 125d7fc6c4dcd8c8c5f27b8268a4d64f409f3644
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 04:55:31 2020 +0200
Abstract over simd vs. repr_c vectors.
Also some minor improvements to Event size.
commit d4d4956e9252e1241ce110b2aa85076c6b1e2a23
Merge: 5f3b7294a aced5f979
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:56:54 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 5f3b7294af1f8533edc2620b58863c248e2b07af
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:43:52 2020 +0200
Fix formatting issues I missed before.
commit a428a3ebba70dcab63dd0f8cd983120c90617271
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:41:51 2020 +0200
Fix clippy warnings, part 1.
There aer still a bunch of type too complex and
function takes too many arguments warnings that I'll fix later
(or ignore, since in the one case I did fix a function takes too
many arguments warning I think it made the code *less* readable).
commit ba54307540ed8a937ac08209730284fc653af85b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 30 13:22:42 2020 +0200
Fix light animations so they are removed when the light turns off.
commit 7e0f4bcbf0f4717145d8beac40d52e3acebbe2aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 21:10:20 2020 +0200
Fix crash in edge case for pixel art.
commit 56da06f7a351e2b949e9b014a90b974d511a0924
Merge: cf74d55f2 9f53a4a19
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:56:52 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:29:52 2020 +0200
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
The first concern was addressed by fixing the dimensions of the map
images drawn from the UI (so that we always use a square source
rectangle, rather than a rectangular one according to the dimensions of
the map). We also fixed the way rotation was done in the fragment
shader for north-facing sources to make it properly handle aspect ratio
(this was already done for north-facing targets). Together, these fix
rendering issues peculiar to rectangular maps.
The second and third concerns were jointly addressed by adding an
optional border color to every 2D image drawn by the UI. This turns
out not to waste extra space even though we hold a full f32 color
(to avoid an extra dependency on gfx's PackedColor), since voxel
images already take up more space than Optiion<[f32; 4]> requires.
This is then implemented automatically using the "border color"
wrapping method in the attached sampler.
Since this is implemented in graphics hardware, it only works (at
least naively) if the actual image bounds match the texture bounds.
Therefore, we altered the way the graphics cache stores images
with a border color to guarantee that they are always in their own
texture, whose size exactly matches their extent. Since the easiest
currently exposed way to set a border color is to do so for an
immutable texture, we went a bit further and added a new "immutable"
texture storage type used for these cases; currently, it is always
and automatically used only when there is a specified border color,
but in theory there's no reason we couldn't provide immutable-only
images that use the default wrapping mdoe (though clamp to border
is admittedly not a great default).
To fix the maps case specifically, we set the border color to a
translucent version of the ocean border color. This may need
tweaking going forward, which shouldn't be hard.
As part of this process, we had to modify graphics replacement to
make sure immutable images are *removed* when invalidated, rather
than just having a validity flag unset (this is normally done by
the UI to try to reuse allocations in place if images are updated
in benign ways, since the texture atlases used for Ui do not
support deallocation; currently this is only used for item images,
so there should be no overlap with immutable image replacement,
so this was purely precautionary).
Since we were already touching the relevant code, we also updated
the image dependency to a newer version that provides more ways
to avoid allocations, and made a few other changes that should
hopefully eliminate redundant most of the intermediate buffer
allocations we were performing for what should be zero-cost
conversions. This may slightly improve performance in some
cases.
commit ad18ce939940a8c697270f6e9b94db9942fd8295
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 13:21:09 2020 +0200
Fix continent scale hack.
commit 36b1cb074f5b195aebd7dbbc3da7f0246a1a18ec
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 12:11:40 2020 +0200
Enable loading different sized maps without a recompile.
We may want to tweak the effects of the continent_scale_hack.
commit 13b6d4d534cc4814b7cb3294ca41bbfea0a6b186
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 10:55:48 2020 +0200
Removing WORLD_SIZE, part 1.
Erased almost every instance of WORLD_SIZE and replaced it with a local
power of two, map_size_lg (which respects certain invariants; see
common/src/terrain/map.rs for more details about MapSizeLg). This also
means we can avoid a dependency on the world crate from client, as
desired.
Now that the rest of the code is not expecting a fixed WORLD_SIZE, the
next step is to arrange for maps to store their world size, and to use
that world size as a basis prior to loading the map (as well, probably,
as prior to configuring some of the noise functions).
commit 30b1d2c6428230a9eaa0d749cdcbbd6f1cbccd78
Merge: 7d56ba31b 1377b369f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:58 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 7d56ba31b445441461b28a07fc495d7d4f047c17
Merge: 2101113b4 598f14b25
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 1377b369f6db2258e910d467a5740f31789e3ded
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sun Jul 19 23:25:38 2020 +0200
more saturated pumpkins
commit ae8d50527f93bb0616c2ad46ce4dacb63bc37c6d
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sat Jul 18 20:29:56 2020 +0200
acacia models
commit 2101113b467e691de787392d7f20f1745f5637bd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 18 18:55:25 2020 +0200
Higher detail LOD.
commit add2cfae04b4385fa5590e11e2bd5229d9dee0aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 16 01:57:39 2020 +0200
Revert some irrelevant stuff.
commit 2e2ab3dc1eaa59a4aef7f8d34a53d8aae4c8553a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 15 13:30:49 2020 +0200
Fixing various things about shadows.
* Correcting optimal LISPSM parameter.
* Figure shadows are cast when they're not visible.
* Chunk shadows stay cast until you look away.
* Seamless cubemaps for point lights.
* Etc.
commit 6c31e6b56217274285b597af297036691ea5d897
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 19:50:26 2020 +0200
Fix shadow creation.
commit 6332cbe006115ae205597529cd8bbccd146c2cca
Merge: be438657c 930e0028b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:47:00 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit be438657c33d7b5bfb0a9582c3ed3fd366637323
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:28:08 2020 +0200
Tweaks to shadows.
Added shadow map resolution configuration, added seamless cubemaps,
documented all existing rendering options, and fixed a few Clippy
errors.
commit 23b4058906013c7d2a40c286e20e32c5fbd897ed
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 10:11:19 2020 +0200
Fix moon, use nonlinear noise for terrain.
Note that the latter has a bit of performance cost.
commit 7fbe5cbfbb9dc29607957b8e62f432a4deed193d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:23:02 2020 +0200
Address lies about max texture size.
commit bcfc62b5e13a1cdd83f57535fde4694720bebfd9
Merge: 75e3626a7 18a08e8fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:22:08 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 75e3626a785919f43fdcf2127c2b10e3e4df2f9f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:21:52 2020 +0200
OpenGL 3.3 minimum.
commit 18a08e8fe2739f02af99a5d2cb4e7c38c49e858b
Author: Monty Marz <m.marzouq@gmx.de>
Date: Tue Jul 7 23:57:52 2020 +0200
settings localization
commit 90c5d1ca3620092bc3ae10b2211489eb1cf6f5e8
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 21:11:48 2020 +0200
Lower near distance.
commit 0e66f02b25aaddaa2dfddbbc89cd67de54a9a7b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 20:09:01 2020 +0200
All sprites sway in the wind now.
commit db1401a6910bf42dcf502462c90038752ff5fbdb
Merge: 69e508d8c e8b4b29d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 19:34:17 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 69e508d8c94d8973033817ca86f357e466fc7c4d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 18:41:37 2020 +0200
Make it easy to switch to SIMD for math.
commit ffe0f5928c7a7e87d00cb5426b3b1d831d7e02fd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 21:21:12 2020 +0200
Fix some issues with underwater rendering.
commit bfda6da42f38fd02c31ee92c81ab785a3e50c2a0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 19:17:59 2020 +0200
Fix some minor display issues.
commit 0ed752e087968cf901301884aaeae698e32ef8a5
Merge: ccc6a06a8 518edcb85
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:14:21 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit ccc6a06a8d4504d6b9f7af7905a414d2ee06ab76
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:04:34 2020 +0200
Some minor changes.
commit 4e020246702889269efe1a191788992164c508d6
Merge: 50a64d927 e05c9267a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 16:17:40 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 50a64d927e6c4f4b0e4688e4cbfca694bc3f922a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 13:07:03 2020 +0200
Fix far plane.
commit 7dd06da34cae8f9ea3b6c889fe965181f3fd3949
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:25:35 2020 +0200
Add shadows.glsl.
commit 618a18c998778bf871b905a74657440fcc384c80
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:10:22 2020 +0200
Adding shadows, greedy meshing, and more.
commit eaea83fe6a5cb1cb0ba8beef888183c718258496
Merge: 267018495 2f89b863e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 22:47:07 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 2670184954a13e4a9e7a4e35ba79aac0c5fac2f7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 21:20:01 2020 +0200
Make civsim and sites deterministic.
For anything in worldgen where you use a HashMap, *please* think
carefully about which hasher you are going to use! This is
especially true if (for some reason) you are depending on hashmap
iteration order remaining stable for some aspect of worldgen.
commit f8376fd5dc72b4a9c2f51a6b4570d59c8b8e9343
Merge: 654f7e049 cdee191dd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 17:53:57 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 654f7e049258d9da27c09608bbe6a46ffa8787e5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed May 20 21:22:30 2020 +0200
Correct backface culling.
commit 560501df05ca725409b0f2e4eb31bdfdc15fd0c7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue May 19 17:22:06 2020 +0200
Greedy messhing for shadows.
commit a4d87e1875ca543436e6bbbeb20348facc5a52d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun May 17 05:59:00 2020 +0200
Shadow maps work for lantern.
commit 243d0837b8a3b08172c9a3c348d964d7ddc2a0a8
Merge: 04382dc28 71dd520cd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:53:13 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 04382dc28632b6c66e8821f6870c0daaa1c1901a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:22:17 2020 +0200
WIP: better graphics config, better LOD, shadow maps.
commit 22ddbad3eb32bfa70f0932176022208fe67ded81
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 18:54:09 2020 +0200
Minor shader fixes.
commit 746a10e8d01ac235f994b0cde78fa48998602a1f
Merge: 0f4a0e763 40ab94673
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 04:02:09 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0f4a0e763db3afbdc4fb0558611f38326ca87151
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 23:03:24 2020 +0200
Switch back to pop-in terrain.
commit dd74fa7e4a53667b38811d7aec58d7f6a68889bb
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 22:58:55 2020 +0200
LOD shading closer to voxel shading.
commit ef67bd58ba0bdaf622b078892d768263b6cba268
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 28 20:49:03 2020 +0200
Experimental underwater lighting.
commit 2c5ad9d07605e80d5fd5679dd3a5d70c605b86a9
Merge: 748279835 303967a6f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 22:35:24 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7482798354eda18c8207950080fc24d443a369de
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 21:59:55 2020 +0200
Replace discard in figure-frag.
commit d83b4ae69be4912f69bf7835f509c68a1c7770a4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:45:57 2020 +0200
Fix sprite lighting, HDR from focus_pos.
commit 0594238004f116274905fa0ed7c2b6c417ed1d29
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:14:10 2020 +0200
Proper HDR from point lights.
commit 48c93d2b41ce5743103d18e76cc228f5ac766492
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 14:01:43 2020 +0200
Brighter ambiance, darker LOD shadows.
commit e0452e895ccfa8a43f368cae3b8b8aedc24dad93
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 13:13:23 2020 +0200
More proper HDR.
commit 4c6da3ed16cfeebb455e40da5f557b4af9a499d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 00:13:10 2020 +0200
Trying LOD noise.
commit 682a3d74c85df5503ffe1fc1cc891bce789df1ad
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 23:11:08 2020 +0200
Fix LOD heights in towns.
commit cc39e5734e8b18f9077bf42e66337c1319dd6b6e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 21:01:23 2020 +0200
More LOD fixes.
commit 8116b21c2e51c836e77894e309ac273caf2917b3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:54:43 2020 +0200
I like this coloring.
commit bc2560ea90b36f4b46190005344232d993043ac3
Merge: 14effdd5d e690efe71
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:48:33 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 14effdd5db8747fcf3eb34f03b46b7792e92d1c5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:24:35 2020 +0200
Re-saturate.
commit 48a643955d4435b78179acba0beb4a979905cc31
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:23:57 2020 +0200
Various fixes.
commit f7b497a0c25f4ad4682c71dd1ed6f608052feb9b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 03:22:49 2020 +0200
Render figures again.
commit 44e4aad48deba8266b9f8bdfd3db096b381f5327
Merge: e6f0a5a98 9ec319a18
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 02:01:04 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit e6f0a5a981a82533ba188fff0a54ce98577bb152
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 24 16:12:20 2020 +0200
Add atmospheric scattering.
commit f2953087f691a8edbc001cb98ebf5059fc6f8ac0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 23 00:01:20 2020 +0200
Fix shadowing for specular reflections.
commit ddd4a67a9799b8d08c7dc0c2bec90621c2bed0e3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Apr 22 22:56:12 2020 +0200
HDR fixes.
commit 1015e60deef3c447381996277df7496707a63bd0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 21 18:25:19 2020 +0200
More lighting changes.
commit 80c264abd111fb237e57843efcb5c071d4f84613
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 13 00:29:59 2020 +0200
Lighting experiments.
commit 8414987e589dd5102bad89762a3adaccc0bfe957
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 9 02:38:40 2020 +0200
WIP -- lighting changes and soft shadows.
commit 9cd2b3fb0d6b49776c6dfe463e4169637250b11a
Merge: c7ea687eb 8b149ad11
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:29 2020 +0200
Merge branch 'sharp/new-lighting' into sharp/small-fixes
commit c7ea687ebbc5aace1b455f134a5bf49ce2c7434a
Merge: 476441531 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:02 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 8b149ad11ad4bb75018fcf9519baec27d1c95951
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:32:39 2020 +0200
Trying out a new lighting model.
commit b0ac9f36f755dd06f7c17c46150568064790864f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 07:56:11 2020 +0200
Use bicubic interpolation for terrain.
commit f6fc9307a121514b614bc50ef8eb055953e7da8a
Merge: 33140a295 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 05:01:41 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 4764415312aae6e9ac2d00e86e84577cb958f1ab
Merge: ed2d0111d 13388ee6a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 04:54:48 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 13388ee6a42943f3f79a9cb488346cef18e272fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 20:30:08 2020 +0200
Various fixes (to coloring and to soft shadows).
commit fbd084a94a067082a87cd6d28b82054709bc9265
Merge: 5a089863b 4fdf6896a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 18:50:38 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/map-colors
commit ed2d0111d994262ae836d84d1fe5a45e4de72a0b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 06:49:27 2020 +0200
Combining colors and LOD.
commit 88342640c6b835114d01c797b89fdede3b0a2108
Merge: 33140a295 5a089863b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:49:20 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 33140a2951b8212725f42c758b277aaec4d888f7
Merge: 4c65a5aed f34d4b379
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:36:21 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 5a089863beb01d4794bbe3580ada47b278715ea2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 03:17:49 2020 +0200
Making maps brighter.
This is probably not the right way to do it, but oh well!
commit 32b2c99109dd486aa922886081068f9c550c83f2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 02:46:36 2020 +0200
Horizon mapping and "layered" map generation.
Horizon mapping is a method of shadow mapping specific to height maps.
It can handle any angle between 0 and 90 degrees from the ground, as
long as know the horizontal direction in advance, by remembering only a
single angle (the "horizon angle" of the shadow map). More is explained
in common/src/msg/server.rs. We also remember the approximate height of
the largest occluder, to try to be able to generate soft shadows and
create a vertical position where the shadows can't go higher.
Additionally, map generation has been reworked. Instead of computing
everything from explicit samples, we pass in sampling functions that
return exactly what the map generator needs. This allows us to cleanly
separate the way we sample things like altitudes and colors from the map
generation process. We exploit this to generate maps *partially* on the
server (with colors and rivers, but not shading). We can then send the
partially completed map to the client, which can combine it with shadow
information to generate the final map. This is useful for two reasons:
first, it makes sure the client can apply shadow information by itself,
and second, it lets us pass the unshaded map for use with level of
detail functionality.
For similar reasons, river generation is split
out into its own layer, but for now we opt to still generate rivers on
the server (since the river wire format is more complicated to compress
and may require some extra work to make sure we have enough precision to
draw rivers well enough for LoD).
Finally, the mostly ad-hoc lighting we were performing has been (mostly)
replaced with explicit Phong reflection shading (including specular
highlights). Regularizing this seems useful and helps clarify the
"meaning" of the various light intensities, and helps us keep a more
physically plausible basis. However, its interaction with soft shadows
is still imperfect, and it's not yet clear to me what we need to do to
turn this into something useful for LoD.
commit f8926a5737ddc51f3d585c651a64c43677aae0f4
Merge: a1aee931e 875ae6ced
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Mar 13 13:32:42 2020 +0100
Merge remote-tracking branch 'origin/master' into sharp/map-colors
commit 4c65a5aed353b119aea65a2aaeb94549b67beb42
Author: Treeco <5021038-Treeco@users.noreply.gitlab.com>
Date: Mon Feb 24 16:48:05 2020 +0000
Made LOD setting slider exponential
commit 2fa7b2d20d7233dc8bfd64f9f7f54617575248f1
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 17:49:53 2020 +0000
Added mist to LoD
commit aab059a450b5f635777129ff82cc15b662965c3c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 15:14:06 2020 +0000
Added LoD slider
commit 779c36b538121c5ade3633ae5cb67bb14c8c3877
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:54:55 2020 +0000
Reduced cost of vertex pushing
commit 9fea150473906b166365b738ebcea07c697daf3d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:38:53 2020 +0000
Fixed maths, improved LoD resolution
commit 5481df38fea5bf183ff376a3337179cfaa5233dc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 11:22:50 2020 +0000
Dynamically relocate LoD vertices to enhance details
commit a3e36a50ababd615da7db1b26158c7906a5def01
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 18:13:51 2020 +0000
Simpler terrain spiral rendering
commit 255f450ae9ac8763db4bede075fb409161ed57cc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:53:17 2020 +0000
Better LoD precision
commit 3d027aebe812a5b8658a4eb8123dc9f61b3776d2
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:04:03 2020 +0000
Better falloff
commit be775c9484b457b2c0b1a494aec03392d0c70e76
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 15:30:45 2020 +0000
Applied good ideas from experimental branch
commit 58587b68545a23c5c04ab4574a4b94b3bc982246
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 16:15:13 2020 +0000
Minor fixes to LoD merging
commit 7b42aebd709c14df2db766aad61d9280ad24d84d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 15:04:44 2020 +0000
Capped LoD dragging
commit 8aafc559f87124e1ea5ca6e3ddc2aa0c242d793c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:54:37 2020 +0000
Better blending between LoD and terrain border
commit edd3455d5161792d87ddc8eadc0ecbad5532b284
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:40:19 2020 +0000
Fixed LoD z depth, added sea level offset
commit b9b06744620114dd5556e73f64fa93c145503a7c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:27:43 2020 +0000
Better LoD smoothing
commit a1aee931e790431560cd2d953ad61d9497072afd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Feb 21 14:52:17 2020 +0100
Adding shadows.
commit 2400786c13dd891c131ed86d48d05df516a8a778
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 13:48:40 2020 +0000
Use world map as LoD source
commit dbf650f504a4c25fbbc2096ac3616c736bf52d23
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Jan 20 00:48:14 2020 +0000
Better clouds at distance
commit 5e6f81b86cdb9730b9b056877b19257075fd5fa8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Jan 19 23:59:02 2020 +0000
sync
commit 745e7540ddb000cc645f612767b337c2ddc3f7c0
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 12:40:48 2019 +0000
Improved cloud falloff mist, faster noise sampling
commit f6a200d0cb866196ba57697466755f9e0c7ea5d8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 10:09:00 2019 +0000
Improved long-range depth precision, removed unnecessary LoD polygons
commit 63d1b2bb2292898d59fb4f4e502201103dfeb86f
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 20:57:46 2019 +0000
Working LoD shader
commit f13d98ee3e58f881e8b978861a67663b59ed91ec
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 11:03:40 2019 +0000
LoD first attempt (stack overflow issue)
2020-08-20 18:34:59 +00:00
|
|
|
|
let chunk_idx = vec2_as_uniform_idx(self.map_size_lg(), chunk_pos);
|
|
|
|
|
local_cells(self.map_size_lg(), chunk_idx)
|
2019-10-16 11:39:41 +00:00
|
|
|
|
.flat_map(|neighbor_idx| {
|
(See sharp/lod-history) LOD, shadows, greedy meshing, new lighting, perf
---
Pretty much a Veloren fork at this point. Here's a high level overview of the changes (will be added to CHANGELOG just before merge).
At a high level this MR incorporates roughly two groups of changes.
The first group consists of new game features: more flexible map sizes, level of detail terrain, shadow maps, and a new lighting
engine. This is "feature work" that (mostly) only adds new things to Veloren, and mostly shouldn't affect old stuff.
The second big group of changes are those addressing the fallout from all the new features. These include performance fixes of
various sorts: the addition of multiple graphics options and optimization of the cheap ones to avoid work, switching all voxel
models to use some variant of greedy meshing, switching over much of our CPU-side vector math to exploit SIMD instructions
(coinciding with a fork of `vek`), and a rewrite of how the UI handles text rendering (coinciding with updates to our fork
of `conrod`). Making Veloren's hardcoded colors appear correct under the new lighting engine also required considerably
changes (TODO: Fill in this section when it's complete).
The second category of changes often heavily touches code owned by other people, including frequently modified code "owned" by a
handful of people, so I recommend that this code be reviewed particularly carefully.
---
At a high level (each will be described in more detail below):
- The world map has been refactored.
- The world size is no longer hardcoded (@zesterer).
- The map generation code was made generic to allow using it outside of the `world` crate (@zesterer).
- On world creation, we now compute *horizon maps* (@zesterer).
- The way we pass the world from the server to the client has been updated (@xMAC94x).
- Artifacts related to image rotation were fixed (@imbris).
- Multiflow rivers were enabled (@zesterer).
- In the process of making changes related to the world map, various incidental fixes and optimizations were required.
- The new *level of detail* feature was added (@zesterer wrote part of this and has checked out the rest).
- A new LOD terrain rendering step was added to the pipeline.
- The LOD terrain quality was made configurable via a graphics setting.
- Horizon maps were used to cast shadows from LOD chunks on both LOD and non-LOD terrain.
- A "voxelization" effect was incorporated into rendered LOD terrain to make it blend better into the world.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Veloren's lighting has been completely overhauled (@zesterer has already checked most of this out).
- A semi-accurate index of refraction was assigned to our materials.
- A new, more realistic, physically based approach to lighting was used using the *Ashikhmin Shirley* BRDF.
- We emulate *atmospheric scattering* using equations designed for measuring solar panel light exposure.
- We attempt to compute *realistic light attenuation* in water using its real material properties.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Point and directional lights now cast realistic shadows, using *shadow mapping.* (@imbris, @zesterer, @Treeco, @YuriMomo)
- Point light shadow maps were added to the rendering pipeline, using geometry shaders and *seamless cube maps*.
- Directional light shadows were added to the rendering pipeline, using LISPSM together with disabling *depth clamping*.
- "Shadow-only" chunks and NPCs were added to prevent shadows from models behind you from disappearing.
- In the process of making changes related to shadow maps, various incidental fixes and optimizations were required.
The addition of shadow maps, LOD terrain, and the new lighting all led to significant performance degradation, on top of other
changes happening in master. Therefore, a large number of performance improvements were also needed:
- The graphics options were made much more flexible and configurable, and shaders were optimize.
- New options were provided for how to render lights and shadows (@Pfauenauge, @zesterer).
- Graphic setting storage and configuration were overhauled to make adding new features easier (@Pfauenauge, @imbris).
- Shaders were rewritten to utilize GLSL's preprocessor to avoid overhead (@zesterer, @YuriMomo).
- In the process of making changes related to providing additional rendering options, various incidental fixes and optimizations were required.
- Voxel model creation was switched to use *greedy meshing.*
- A new voxel meshing method, greedy meshing, was added (@imbris).
- Uses of the older meshing methods were migrated to use greedy meshing (@imbris, @jshipsey, @Pfauenauge).
- New restrictions were added to terrain, figure, and sprites to future proof them for further optimizations (@jshipsey, @Pfauenauge, @zesterer).
- Most positions are now relative to either chunk or player position for better precision (@imbris, @zesterer, @scottc).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- Animation and terrain math were switched to use SIMD where possible.
- Fixes were made to vek to make its SIMD feature usable for us (@zesterer, @imbris).
- The interface and types used in bone animation were changed in various ways (@jshipsey, @Snowram, @Pfauenauge).
- Redundant code generation for body animation is now partly taken care of by a macro (@jshipsey, @Snowram, @Pfauenauge).
- Animation code was modified to to use vek's SIMD representation where possible (@jshipsey, @Snowram, @Pfauenauge).
- Terrain meshing code and shadow map math were also modified to use vek's SIMD representation (@imbris).
- SIMD instruction generation was enabled (@YuriMomo, @jshipsey, @Snowram, @imbris, @Angelonfira, @xMAC94x).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- The way we cache glyphs was completely refactored, fixed, and optimized.
- Our fork of `conrod` was optimized in various ways (@imbris).
- Our fork of `conrod` now exposes whether a widget was updated during the current frame (@imbris).
- Our use of the glyph cache was rewritten for correctness (@imbris).
- A *text cache* was introduced that lets us skip remeshing glyphs that have not changed (@imbris).
- Various changes were made to reduce pressure on the glyph cache, with more planned (@imbris, @Pfauenauge).
- In the process of making changes related to the glyph cache, various incidental fixes and optimizations were required.
- Colors were changed to keep Veloren's look consistent with master.
- Some older tree models were brought back (@Pfauenauge).
- TODO(@Sharp): All hardcoded colors were extracted and made hotloadable.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Hardcoded colors were fixed to conform to Veloren's style.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Color models were fixed to conform to Veloren's style.
A detailed description of the involved changes follows.
---
- The world size is no longer hardcoded. All functions dependent on world size now take a `WorldSizeLg`, which holds the base 2 logarithm of each actual world dimension and is guaranteed to maintain certain properties (outlined in `common/src/terrain/map.rs`). Additionally, many utility functions that utilize the world size were moved into `common` as well (mostly `common/src/terrain/mod.rs`). Finally, the world map format was updated in order to store its size explicitly, with a migration path from the old format that should work whenever the old formatted map was a square (practically always). See `world/src/sim/mod.rs` for these changes.
- The map generation code was made generic to allow using it outside of the `world` crate. The parts of the map generating code that do not need to query the world were moved over to `common/src/terrain/map.rs`, allowing them to be used from the client without creating a dependency on `world`. The rest of it was turned into helper functions in `world/src/sim/map.rs`, which can be passed as closures to the generic map generation code to complete its construction. This also means that colors are now passed in separately to the map generation function. See <https://veloren.net/devblog-78/> for more details.
- On world creation, we now compute *horizon maps*. See the function in `world/src/sim/util.rs`.
Given a height map and a plane intersecting that height map, our horizon maps allow us to encode enough information to reconstruct shadows for each point on the height map using only the *horizon angle* (the angle at which the sun starts to become visible). As Veloren's sun only covers one plane, this is sufficient for encoding sun shadows for LOD terrain, by encoding two angles per chunk (one for each 90 degrees the sun covers). We can also use this for the moon, if we want, since the moon follows the same path. Additionally, we store the *height* of the furthest occluder, to try to make the shadows volumetric; so this means 4 bytes in total for each chunk.
Support for horizon maps has been merged into the map functionality in common as well.
- The way we pass the world from the server to the client has been updated. Rather than passing the prerendered map, we instead pass three maps with values for each chunk; one with the color information, a second with altitude information, and a third with horizon map information. We then reconstruct the map on the client, together with some additional information we send from the server (like the sea level and maximum height). See `common/src/msg/server.rs` for a detailed description of the format of `WorldMapMsg`, and `server/src/libr.rs` and `client/src/lib.rs` for details of the map construction and parsing.
- Artifacts related to image rotation were fixed. See the commit message for commit SHA `cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e` for a detailed explanation. This involved changes to shaders, the addition of a new type of graphic (also reflected in the graphic cache) that allows specifying a border color (which automatically makes the associated texture immutable), and some related fixes. I reproduce the first two paragraphs of the MR description as well:
```
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
```
- Multiflow rivers were enabled.
This does not really need to be part of this MR, and would be easy to revert, but since it seemed to provide a nice improvement it's currently packaged with it.
We already computed multiple outflows from each chunk for erosion purposes long before this MR.
However, we never modified river rendering to be able to handle this case (just a single downhill river flow is complex enough!) so this was not exposed when deciding which chunks were rivers.
Now that
- In the process of making changes related to the world map, various incidental fixes and optimizations were required. Some examples of fixes include making sure terrain is never lowered to below sea level (to make the shadow maps report correct values), fixing map altitudes and colors to understand things like cliffs and "block level" coloring (that doesn'te xist on the column level), and fixing a crashbug when rendering images for the UI where source pixels are strongly rectangular. Some examples of related performance fixes include avoiding allocating a fresh vector for all the maps (i.e. copying it over to change the format from `[u32; n]` to `DynamicImage` and then copying again to convert to `RgbaImage`), and instead using the `gfx::memory::slice` function to accomplish the same thing. These sorts of changes are spread all arond the code.
This includes the additon of a new scene, `voxygen/src/scene/lod.rs`, a new pipeline `voxygen/src/render/pipeline/lod_terrain.rs`, and new shaders `assets/vxygen/shaders/lod-terrain-vert.glsl` and `assets/vxygen/shaders/lod-terrain-frag.glsl`, as well as associated changes to the renderer in `voxygen/src/render/renderer.rs`.
The main idea behind our initial approach to LOD was to take the world data we now get from the server (altitude, color, and horizon mapping).
- Some previously computed values were turned into shader uniforms for better prediction on weak processors. (@zesterer)
- Calls to power or trig functions were removed or replaced with multiplications, where possible.
- After some deliberation
- To properly handle sprite "waving" for nearby sprites,
We explicitly designed the greedy meshing system with figures and sprites in mind.
In both cases, we want to be able to *efficiently* pack many different models into the same texture, especially in cases where we know
we will either not be removing any of the grouped-together from the models from the texture, or will remove all of them at once (so
they can be packed into some specific subtexture).
For sprites, since we know every model in advance and never intend to deallocate them, we currently pack them all as efficiently as
possible into one giant tetxure atlas. However, in the future we might opt to pack them slightly less efficiently in exchange for
shrinking the sprite vertex size.
For figures, we pack all the textures for each *model* into the same atlas.
is a global texture atlas used for every sprite, and for figures which is why we have the ability to mesh multiple
models to the same texture area (using the simple texture atlas allocator) without requiring intermediate vector allocations.
This is accomplished by delaying the time when we actually write the color and light data to the texture until *after* all the
model vertices have been meshed; then, we can just allocate the whole color/light array at once, making the atlas we use an
exact fit. In computer science-y terms, we accomplish this delay by, after we perform the initial greedy meshing (without
texture information), not continuing to create the texture data, but instead constructing a *continuation*--that is, a function
that, when called, will execute the rest of the computation. We push this continuation (which in Rust terms is a `FnOnce` closure
that takes the `ColLightsInfo` that it is supposed to write to as context) onto a
onto a vector
resizing. To allow for suspended writes to texture data, Rust pointed out to me that the continuation that would eventually write the color and light data to the texture atlas (the one that is shared by all models sharing the same greedy mesher) would have to *own* whatever data it mshed. Because we often generate the model data to mesh as a temporary in `voxygen/src/load.rs`, the
- Matrix multiplications in the shader were reduced for figure data (@zesterer).
- Vertex "waves" for fluid data were removed.
- Terrain "bending" near edges was removed.
- Scaling was fixed to make sure empty space was not introduced in a space previously occupied by a block. It was also changed to take ownership of its voxel data,
rather than sharing it, to let it be used with meshing.
- Rust's nightly version was bumped in order to use the `array_map` function, which lets us reuse more code between the simple map and `FigureModelCache`.
- PositionedGlyph::standalone.
---
I tried to cite sources in many cases[^realtime],[^lloyd],[^lispsm],[^pbrt],[^greedy],[^tjunctions]
where I needed features from elsewhere but I am particularly grateful for the following resources,
esepcially where they have accompanying source code. I linked all of them that are accessible to the public (those that are not were
obtained through legal means).
[^realtime]: Eisemann, Elmar, Michael Schwarz, Ulf Assarsson, Michael Wimmer. Real-Time Shadows. A K Peters/CRC Press (T&F), 20160419.
[^lloyd]: Lloyd,B. 2007. [Logarithmic perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). PhD thesis, University of North Carolina.
[^lispsm]: Wimmer, M., Scherzer, D., and Purgathofer, W. 2004. [Light space perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). In Proceedings of Eurographics Symposium on Rendering 2004, pp. 143– 152.
[^pbrt]: Pharr, Matt, et al. [http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf](Physically Based Rendering: From Theory to Implementation). Third edition, Morgan Kaufmann Publishers/Elsevier, 2017.
[^greedy]: mikolalysenko. “Meshing in a Minecraft Game.” 0 FPS, 30 June 2012, <https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/>.
[^tjunctions]: blackflux. “Meshing in Voxel Engines – Part 1.” Blackflux.Com, 23 Feb. 2014, <https://blackflux.wordpress.com/2014/02/23/meshing-in-voxel-engines-part-1/>.
I am also especially grateful to Khronos, Wikiepdia, and stackoverflow for answering many of my specific questions while writing the MR.
---
Squashed commit of the following:
commit 300505e7305a2fdac722a808ee8538323f215f39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 18:46:25 2020 +0200
Fixing cargo doc and typo in CHANGELOG.
commit ec0aeb18e8499d7d84ef818331b4b65c3d76cea6
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 15:38:50 2020 +0200
Hopefully final commit for the LOD branch.
commit 5e8ea0b1eaac02903a02feb2eb038d195de4872f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 10:14:26 2020 +0200
Falling back to power as stopgap.
commit e44a1cbf46504ee9931a01bdc9033e145500d557
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 09:25:41 2020 +0200
Address imbris feedback.
Temporarily disables shiny water, lowers max VD.
These restrictions will be lifted soon after merging.
commit 561e25778a108ac3712f5ec2ce3a51234c4430d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 08:31:13 2020 +0200
Tweaking shaders a bit.
commit 7d19259078ce0dd7b3742ad7d0cb3fab3ece3fdc
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:59:43 2020 +0200
Fix view example as well.
commit 051cd4934e0fad2c0b15db4380a4189fa318679f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:29:06 2020 +0200
Fix meshing benchmark.
commit c95e07db3b4dcca285678985e65e31b927cb1c61
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 05:46:22 2020 +0200
Address MR feedback, fix scene clouds.
commit 1bfb816cabdb3ffc1e507a009c2d98696b4b573a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:39:36 2020 +0200
Incorporating Pfau's figure color changes.
New eyes and new humanoid colors.
commit 3f9b89a3ac7b3356b1dba0d1a8f6541357f81469
Merge: e2f5162e4 62c53963a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:29:41 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit e2f5162e4f96f4124aa43488f7245d341b3dcfd4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:28:38 2020 +0200
World colors are all hotloadable.
They live in assets/world/style/colors.ron.
Only a small handful of hardcoed colors remain in World; they are either
part of the map, or difficult to disentangle from the rest of the
computation. Comments are made where appropriate.
commit 62c53963abe1975009d34a8f9515a355bef24f31
Author: Marcel Märtens <marcel.cochem@googlemail.com>
Date: Wed Aug 19 15:59:00 2020 +0200
replace pretty_env_logger with tracing
commit 5b1625f99d9586fe80e2232f583ec5af9f953099
Merge: d71003acd 4942b5b39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:15:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit d71003acdabeff970b3928e97c26af6847b5b78e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:14:34 2020 +0200
Hotloading colors, part 1: colors in common.
Currently, this just entails humanoid colors. There are only three
colors not handled; the light emitter colors in
common/src/comp/inventory/item/tool.rs. These don't seem important
enough to me to warrant making hotloadable, at least not right now, but
if it's needed later we can always add them to the file.
commit 63b5e0e553eb2ea49276f192a6fc7dd65254270d
Merge: c32b337a4 6d2c4b9c1
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 13:05:37 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c32b337a46e10d9de473d178a94a3ccd61c39bb3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:52:04 2020 +0200
Fixing LOD grid, for real.
commit a166ae0360395387e09fb35a1f84210c2ce5ec24
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:28:05 2020 +0200
Addressing imbris's initial feedback.
Fixes two minor bugs: explosion particles were no longer spawning
randomly, and LOD grids were not perfectly even.
commit 4cbad004f44060994252dd3d38647a14a589712f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:27:58 2020 +0200
Bumping nightly per request.
commit 548680276aac77c25d43d16b5622f847d474dbef
Merge: acc098604 8f8b20c91
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:26:06 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit acc0986040589a3492f88a740bc3c3fc693b26d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:28:32 2020 +0200
Lower resolution due to lying drivers.
commit d3b878de2a52c358d2944a6bbd0555dad7fbdb10
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:15:38 2020 +0200
Fix issues msh encountered with Intel 4600.
commit 10245e0c1b0cb6fae10d86409435364edc6102ef
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 21:15:02 2020 +0200
Merge more models into one mesh than we did previously.
commit 3155c31e663c52ae5c3a53d5fb5665892a1a498a
Merge: 7204cc8a7 3c199280e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:35:22 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7204cc8a7a4f74a30306bd205d9834fee4bb944f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:34:43 2020 +0200
Fix not yet done NPC animations.
This forces them all to be the idle animation if not specified.
This fixes issues where you'd have giant NPCs in water.
commit bc83360f2a08918f19d417b5f772e1ff554dba08
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 19:36:37 2020 +0200
Try to fix some bugs:
- Z fighting with LOD terrain and water.
- Audio SFX not playing.
commit 1fd104aa603bf3781b6526a5cada46aeca3049dd
Merge: 862df3c99 7c2c392a3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 12:02:31 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 862df3c9976c4da9bd7cfd784f1a85973127968a
Merge: 0a4218ed9 75c1d4401
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 05:52:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0a4218ed9d541a2b34c133351bea38a99ddf4ea7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 22:27:14 2020 +0200
Fix particle depth.
commit f51dfdeb442d0dd5243dd2f344fa4be295bd0875
Merge: c6251a956 5e6dc0471
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:19:04 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit c6251a956ad376400dca5c23420cf8d213dc8fdf
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:15:46 2020 +0200
Cache figures more intelligently.
Cache figures for longer, and don't cache character states for the
player except where they actually affect the rendered model.
commit 0ed801d5404982c6fb63b1eaa4567d908b294c9d
Merge: c11b9bdf0 eea64f78f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 16:32:24 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c11b9bdf0a53bf9884d2f5a48fec9b01d582df1a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 11:47:15 2020 +0200
Remove unneeded Clippy annotation.
commit 16aa9ef40af56d69289d00aafb3deadfb8bd4f35
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 8 00:53:02 2020 +0200
Fix hotloading and Clippy.
commit 3dc973e0be5b758da1e9805eb764ad401374cd0c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 23:50:27 2020 +0200
Major speedups with SIMD.
commit fba64a7d93d5a96077ce87287bbce6ab9b7fbcae
Merge: 76429d00e d1e10b178
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:19 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 76429d00eea00d212fbd672a84ee91e75b19b938
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:10 2020 +0200
Add clippy.toml.
commit c79f512f84dbb83cb82b7954db68ff241dfd8e41
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 11:55:20 2020 +0200
Fix all clippy issues, clean up Rust code.
commit 6f90e010b3fbefb53b0d632e819931350015b6b8
Merge: 77a8c7c26 5929cfa5c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:30 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 77a8c7c267d3f44a1a62bd6b2274359973c5e4d4
Merge: b44e44232 44febaabd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:10 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 5929cfa5c713aa392110bbb62407f76caf53c3df
Author: jshipsey <jshipsey18@gmail.com>
Date: Thu Aug 6 20:47:27 2020 -0400
fixed in-hand arrow bug
commit b44e442325d828f1cd564d66908f89d09e80474b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 6 13:40:35 2020 +0200
Miscellaneous performance improvements.
commit be37acf287c1360d8085862526ac3365ffd1d768
Merge: 125d7fc6c c11876547
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 05:49:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 125d7fc6c4dcd8c8c5f27b8268a4d64f409f3644
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 04:55:31 2020 +0200
Abstract over simd vs. repr_c vectors.
Also some minor improvements to Event size.
commit d4d4956e9252e1241ce110b2aa85076c6b1e2a23
Merge: 5f3b7294a aced5f979
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:56:54 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 5f3b7294af1f8533edc2620b58863c248e2b07af
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:43:52 2020 +0200
Fix formatting issues I missed before.
commit a428a3ebba70dcab63dd0f8cd983120c90617271
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:41:51 2020 +0200
Fix clippy warnings, part 1.
There aer still a bunch of type too complex and
function takes too many arguments warnings that I'll fix later
(or ignore, since in the one case I did fix a function takes too
many arguments warning I think it made the code *less* readable).
commit ba54307540ed8a937ac08209730284fc653af85b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 30 13:22:42 2020 +0200
Fix light animations so they are removed when the light turns off.
commit 7e0f4bcbf0f4717145d8beac40d52e3acebbe2aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 21:10:20 2020 +0200
Fix crash in edge case for pixel art.
commit 56da06f7a351e2b949e9b014a90b974d511a0924
Merge: cf74d55f2 9f53a4a19
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:56:52 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:29:52 2020 +0200
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
The first concern was addressed by fixing the dimensions of the map
images drawn from the UI (so that we always use a square source
rectangle, rather than a rectangular one according to the dimensions of
the map). We also fixed the way rotation was done in the fragment
shader for north-facing sources to make it properly handle aspect ratio
(this was already done for north-facing targets). Together, these fix
rendering issues peculiar to rectangular maps.
The second and third concerns were jointly addressed by adding an
optional border color to every 2D image drawn by the UI. This turns
out not to waste extra space even though we hold a full f32 color
(to avoid an extra dependency on gfx's PackedColor), since voxel
images already take up more space than Optiion<[f32; 4]> requires.
This is then implemented automatically using the "border color"
wrapping method in the attached sampler.
Since this is implemented in graphics hardware, it only works (at
least naively) if the actual image bounds match the texture bounds.
Therefore, we altered the way the graphics cache stores images
with a border color to guarantee that they are always in their own
texture, whose size exactly matches their extent. Since the easiest
currently exposed way to set a border color is to do so for an
immutable texture, we went a bit further and added a new "immutable"
texture storage type used for these cases; currently, it is always
and automatically used only when there is a specified border color,
but in theory there's no reason we couldn't provide immutable-only
images that use the default wrapping mdoe (though clamp to border
is admittedly not a great default).
To fix the maps case specifically, we set the border color to a
translucent version of the ocean border color. This may need
tweaking going forward, which shouldn't be hard.
As part of this process, we had to modify graphics replacement to
make sure immutable images are *removed* when invalidated, rather
than just having a validity flag unset (this is normally done by
the UI to try to reuse allocations in place if images are updated
in benign ways, since the texture atlases used for Ui do not
support deallocation; currently this is only used for item images,
so there should be no overlap with immutable image replacement,
so this was purely precautionary).
Since we were already touching the relevant code, we also updated
the image dependency to a newer version that provides more ways
to avoid allocations, and made a few other changes that should
hopefully eliminate redundant most of the intermediate buffer
allocations we were performing for what should be zero-cost
conversions. This may slightly improve performance in some
cases.
commit ad18ce939940a8c697270f6e9b94db9942fd8295
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 13:21:09 2020 +0200
Fix continent scale hack.
commit 36b1cb074f5b195aebd7dbbc3da7f0246a1a18ec
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 12:11:40 2020 +0200
Enable loading different sized maps without a recompile.
We may want to tweak the effects of the continent_scale_hack.
commit 13b6d4d534cc4814b7cb3294ca41bbfea0a6b186
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 10:55:48 2020 +0200
Removing WORLD_SIZE, part 1.
Erased almost every instance of WORLD_SIZE and replaced it with a local
power of two, map_size_lg (which respects certain invariants; see
common/src/terrain/map.rs for more details about MapSizeLg). This also
means we can avoid a dependency on the world crate from client, as
desired.
Now that the rest of the code is not expecting a fixed WORLD_SIZE, the
next step is to arrange for maps to store their world size, and to use
that world size as a basis prior to loading the map (as well, probably,
as prior to configuring some of the noise functions).
commit 30b1d2c6428230a9eaa0d749cdcbbd6f1cbccd78
Merge: 7d56ba31b 1377b369f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:58 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 7d56ba31b445441461b28a07fc495d7d4f047c17
Merge: 2101113b4 598f14b25
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 1377b369f6db2258e910d467a5740f31789e3ded
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sun Jul 19 23:25:38 2020 +0200
more saturated pumpkins
commit ae8d50527f93bb0616c2ad46ce4dacb63bc37c6d
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sat Jul 18 20:29:56 2020 +0200
acacia models
commit 2101113b467e691de787392d7f20f1745f5637bd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 18 18:55:25 2020 +0200
Higher detail LOD.
commit add2cfae04b4385fa5590e11e2bd5229d9dee0aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 16 01:57:39 2020 +0200
Revert some irrelevant stuff.
commit 2e2ab3dc1eaa59a4aef7f8d34a53d8aae4c8553a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 15 13:30:49 2020 +0200
Fixing various things about shadows.
* Correcting optimal LISPSM parameter.
* Figure shadows are cast when they're not visible.
* Chunk shadows stay cast until you look away.
* Seamless cubemaps for point lights.
* Etc.
commit 6c31e6b56217274285b597af297036691ea5d897
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 19:50:26 2020 +0200
Fix shadow creation.
commit 6332cbe006115ae205597529cd8bbccd146c2cca
Merge: be438657c 930e0028b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:47:00 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit be438657c33d7b5bfb0a9582c3ed3fd366637323
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:28:08 2020 +0200
Tweaks to shadows.
Added shadow map resolution configuration, added seamless cubemaps,
documented all existing rendering options, and fixed a few Clippy
errors.
commit 23b4058906013c7d2a40c286e20e32c5fbd897ed
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 10:11:19 2020 +0200
Fix moon, use nonlinear noise for terrain.
Note that the latter has a bit of performance cost.
commit 7fbe5cbfbb9dc29607957b8e62f432a4deed193d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:23:02 2020 +0200
Address lies about max texture size.
commit bcfc62b5e13a1cdd83f57535fde4694720bebfd9
Merge: 75e3626a7 18a08e8fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:22:08 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 75e3626a785919f43fdcf2127c2b10e3e4df2f9f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:21:52 2020 +0200
OpenGL 3.3 minimum.
commit 18a08e8fe2739f02af99a5d2cb4e7c38c49e858b
Author: Monty Marz <m.marzouq@gmx.de>
Date: Tue Jul 7 23:57:52 2020 +0200
settings localization
commit 90c5d1ca3620092bc3ae10b2211489eb1cf6f5e8
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 21:11:48 2020 +0200
Lower near distance.
commit 0e66f02b25aaddaa2dfddbbc89cd67de54a9a7b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 20:09:01 2020 +0200
All sprites sway in the wind now.
commit db1401a6910bf42dcf502462c90038752ff5fbdb
Merge: 69e508d8c e8b4b29d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 19:34:17 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 69e508d8c94d8973033817ca86f357e466fc7c4d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 18:41:37 2020 +0200
Make it easy to switch to SIMD for math.
commit ffe0f5928c7a7e87d00cb5426b3b1d831d7e02fd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 21:21:12 2020 +0200
Fix some issues with underwater rendering.
commit bfda6da42f38fd02c31ee92c81ab785a3e50c2a0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 19:17:59 2020 +0200
Fix some minor display issues.
commit 0ed752e087968cf901301884aaeae698e32ef8a5
Merge: ccc6a06a8 518edcb85
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:14:21 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit ccc6a06a8d4504d6b9f7af7905a414d2ee06ab76
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:04:34 2020 +0200
Some minor changes.
commit 4e020246702889269efe1a191788992164c508d6
Merge: 50a64d927 e05c9267a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 16:17:40 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 50a64d927e6c4f4b0e4688e4cbfca694bc3f922a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 13:07:03 2020 +0200
Fix far plane.
commit 7dd06da34cae8f9ea3b6c889fe965181f3fd3949
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:25:35 2020 +0200
Add shadows.glsl.
commit 618a18c998778bf871b905a74657440fcc384c80
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:10:22 2020 +0200
Adding shadows, greedy meshing, and more.
commit eaea83fe6a5cb1cb0ba8beef888183c718258496
Merge: 267018495 2f89b863e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 22:47:07 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 2670184954a13e4a9e7a4e35ba79aac0c5fac2f7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 21:20:01 2020 +0200
Make civsim and sites deterministic.
For anything in worldgen where you use a HashMap, *please* think
carefully about which hasher you are going to use! This is
especially true if (for some reason) you are depending on hashmap
iteration order remaining stable for some aspect of worldgen.
commit f8376fd5dc72b4a9c2f51a6b4570d59c8b8e9343
Merge: 654f7e049 cdee191dd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 17:53:57 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 654f7e049258d9da27c09608bbe6a46ffa8787e5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed May 20 21:22:30 2020 +0200
Correct backface culling.
commit 560501df05ca725409b0f2e4eb31bdfdc15fd0c7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue May 19 17:22:06 2020 +0200
Greedy messhing for shadows.
commit a4d87e1875ca543436e6bbbeb20348facc5a52d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun May 17 05:59:00 2020 +0200
Shadow maps work for lantern.
commit 243d0837b8a3b08172c9a3c348d964d7ddc2a0a8
Merge: 04382dc28 71dd520cd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:53:13 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 04382dc28632b6c66e8821f6870c0daaa1c1901a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:22:17 2020 +0200
WIP: better graphics config, better LOD, shadow maps.
commit 22ddbad3eb32bfa70f0932176022208fe67ded81
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 18:54:09 2020 +0200
Minor shader fixes.
commit 746a10e8d01ac235f994b0cde78fa48998602a1f
Merge: 0f4a0e763 40ab94673
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 04:02:09 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0f4a0e763db3afbdc4fb0558611f38326ca87151
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 23:03:24 2020 +0200
Switch back to pop-in terrain.
commit dd74fa7e4a53667b38811d7aec58d7f6a68889bb
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 22:58:55 2020 +0200
LOD shading closer to voxel shading.
commit ef67bd58ba0bdaf622b078892d768263b6cba268
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 28 20:49:03 2020 +0200
Experimental underwater lighting.
commit 2c5ad9d07605e80d5fd5679dd3a5d70c605b86a9
Merge: 748279835 303967a6f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 22:35:24 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7482798354eda18c8207950080fc24d443a369de
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 21:59:55 2020 +0200
Replace discard in figure-frag.
commit d83b4ae69be4912f69bf7835f509c68a1c7770a4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:45:57 2020 +0200
Fix sprite lighting, HDR from focus_pos.
commit 0594238004f116274905fa0ed7c2b6c417ed1d29
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:14:10 2020 +0200
Proper HDR from point lights.
commit 48c93d2b41ce5743103d18e76cc228f5ac766492
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 14:01:43 2020 +0200
Brighter ambiance, darker LOD shadows.
commit e0452e895ccfa8a43f368cae3b8b8aedc24dad93
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 13:13:23 2020 +0200
More proper HDR.
commit 4c6da3ed16cfeebb455e40da5f557b4af9a499d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 00:13:10 2020 +0200
Trying LOD noise.
commit 682a3d74c85df5503ffe1fc1cc891bce789df1ad
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 23:11:08 2020 +0200
Fix LOD heights in towns.
commit cc39e5734e8b18f9077bf42e66337c1319dd6b6e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 21:01:23 2020 +0200
More LOD fixes.
commit 8116b21c2e51c836e77894e309ac273caf2917b3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:54:43 2020 +0200
I like this coloring.
commit bc2560ea90b36f4b46190005344232d993043ac3
Merge: 14effdd5d e690efe71
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:48:33 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 14effdd5db8747fcf3eb34f03b46b7792e92d1c5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:24:35 2020 +0200
Re-saturate.
commit 48a643955d4435b78179acba0beb4a979905cc31
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:23:57 2020 +0200
Various fixes.
commit f7b497a0c25f4ad4682c71dd1ed6f608052feb9b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 03:22:49 2020 +0200
Render figures again.
commit 44e4aad48deba8266b9f8bdfd3db096b381f5327
Merge: e6f0a5a98 9ec319a18
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 02:01:04 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit e6f0a5a981a82533ba188fff0a54ce98577bb152
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 24 16:12:20 2020 +0200
Add atmospheric scattering.
commit f2953087f691a8edbc001cb98ebf5059fc6f8ac0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 23 00:01:20 2020 +0200
Fix shadowing for specular reflections.
commit ddd4a67a9799b8d08c7dc0c2bec90621c2bed0e3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Apr 22 22:56:12 2020 +0200
HDR fixes.
commit 1015e60deef3c447381996277df7496707a63bd0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 21 18:25:19 2020 +0200
More lighting changes.
commit 80c264abd111fb237e57843efcb5c071d4f84613
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 13 00:29:59 2020 +0200
Lighting experiments.
commit 8414987e589dd5102bad89762a3adaccc0bfe957
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 9 02:38:40 2020 +0200
WIP -- lighting changes and soft shadows.
commit 9cd2b3fb0d6b49776c6dfe463e4169637250b11a
Merge: c7ea687eb 8b149ad11
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:29 2020 +0200
Merge branch 'sharp/new-lighting' into sharp/small-fixes
commit c7ea687ebbc5aace1b455f134a5bf49ce2c7434a
Merge: 476441531 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:02 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 8b149ad11ad4bb75018fcf9519baec27d1c95951
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:32:39 2020 +0200
Trying out a new lighting model.
commit b0ac9f36f755dd06f7c17c46150568064790864f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 07:56:11 2020 +0200
Use bicubic interpolation for terrain.
commit f6fc9307a121514b614bc50ef8eb055953e7da8a
Merge: 33140a295 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 05:01:41 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 4764415312aae6e9ac2d00e86e84577cb958f1ab
Merge: ed2d0111d 13388ee6a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 04:54:48 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 13388ee6a42943f3f79a9cb488346cef18e272fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 20:30:08 2020 +0200
Various fixes (to coloring and to soft shadows).
commit fbd084a94a067082a87cd6d28b82054709bc9265
Merge: 5a089863b 4fdf6896a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 18:50:38 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/map-colors
commit ed2d0111d994262ae836d84d1fe5a45e4de72a0b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 06:49:27 2020 +0200
Combining colors and LOD.
commit 88342640c6b835114d01c797b89fdede3b0a2108
Merge: 33140a295 5a089863b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:49:20 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 33140a2951b8212725f42c758b277aaec4d888f7
Merge: 4c65a5aed f34d4b379
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:36:21 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 5a089863beb01d4794bbe3580ada47b278715ea2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 03:17:49 2020 +0200
Making maps brighter.
This is probably not the right way to do it, but oh well!
commit 32b2c99109dd486aa922886081068f9c550c83f2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 02:46:36 2020 +0200
Horizon mapping and "layered" map generation.
Horizon mapping is a method of shadow mapping specific to height maps.
It can handle any angle between 0 and 90 degrees from the ground, as
long as know the horizontal direction in advance, by remembering only a
single angle (the "horizon angle" of the shadow map). More is explained
in common/src/msg/server.rs. We also remember the approximate height of
the largest occluder, to try to be able to generate soft shadows and
create a vertical position where the shadows can't go higher.
Additionally, map generation has been reworked. Instead of computing
everything from explicit samples, we pass in sampling functions that
return exactly what the map generator needs. This allows us to cleanly
separate the way we sample things like altitudes and colors from the map
generation process. We exploit this to generate maps *partially* on the
server (with colors and rivers, but not shading). We can then send the
partially completed map to the client, which can combine it with shadow
information to generate the final map. This is useful for two reasons:
first, it makes sure the client can apply shadow information by itself,
and second, it lets us pass the unshaded map for use with level of
detail functionality.
For similar reasons, river generation is split
out into its own layer, but for now we opt to still generate rivers on
the server (since the river wire format is more complicated to compress
and may require some extra work to make sure we have enough precision to
draw rivers well enough for LoD).
Finally, the mostly ad-hoc lighting we were performing has been (mostly)
replaced with explicit Phong reflection shading (including specular
highlights). Regularizing this seems useful and helps clarify the
"meaning" of the various light intensities, and helps us keep a more
physically plausible basis. However, its interaction with soft shadows
is still imperfect, and it's not yet clear to me what we need to do to
turn this into something useful for LoD.
commit f8926a5737ddc51f3d585c651a64c43677aae0f4
Merge: a1aee931e 875ae6ced
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Mar 13 13:32:42 2020 +0100
Merge remote-tracking branch 'origin/master' into sharp/map-colors
commit 4c65a5aed353b119aea65a2aaeb94549b67beb42
Author: Treeco <5021038-Treeco@users.noreply.gitlab.com>
Date: Mon Feb 24 16:48:05 2020 +0000
Made LOD setting slider exponential
commit 2fa7b2d20d7233dc8bfd64f9f7f54617575248f1
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 17:49:53 2020 +0000
Added mist to LoD
commit aab059a450b5f635777129ff82cc15b662965c3c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 15:14:06 2020 +0000
Added LoD slider
commit 779c36b538121c5ade3633ae5cb67bb14c8c3877
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:54:55 2020 +0000
Reduced cost of vertex pushing
commit 9fea150473906b166365b738ebcea07c697daf3d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:38:53 2020 +0000
Fixed maths, improved LoD resolution
commit 5481df38fea5bf183ff376a3337179cfaa5233dc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 11:22:50 2020 +0000
Dynamically relocate LoD vertices to enhance details
commit a3e36a50ababd615da7db1b26158c7906a5def01
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 18:13:51 2020 +0000
Simpler terrain spiral rendering
commit 255f450ae9ac8763db4bede075fb409161ed57cc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:53:17 2020 +0000
Better LoD precision
commit 3d027aebe812a5b8658a4eb8123dc9f61b3776d2
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:04:03 2020 +0000
Better falloff
commit be775c9484b457b2c0b1a494aec03392d0c70e76
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 15:30:45 2020 +0000
Applied good ideas from experimental branch
commit 58587b68545a23c5c04ab4574a4b94b3bc982246
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 16:15:13 2020 +0000
Minor fixes to LoD merging
commit 7b42aebd709c14df2db766aad61d9280ad24d84d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 15:04:44 2020 +0000
Capped LoD dragging
commit 8aafc559f87124e1ea5ca6e3ddc2aa0c242d793c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:54:37 2020 +0000
Better blending between LoD and terrain border
commit edd3455d5161792d87ddc8eadc0ecbad5532b284
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:40:19 2020 +0000
Fixed LoD z depth, added sea level offset
commit b9b06744620114dd5556e73f64fa93c145503a7c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:27:43 2020 +0000
Better LoD smoothing
commit a1aee931e790431560cd2d953ad61d9497072afd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Feb 21 14:52:17 2020 +0100
Adding shadows.
commit 2400786c13dd891c131ed86d48d05df516a8a778
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 13:48:40 2020 +0000
Use world map as LoD source
commit dbf650f504a4c25fbbc2096ac3616c736bf52d23
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Jan 20 00:48:14 2020 +0000
Better clouds at distance
commit 5e6f81b86cdb9730b9b056877b19257075fd5fa8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Jan 19 23:59:02 2020 +0000
sync
commit 745e7540ddb000cc645f612767b337c2ddc3f7c0
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 12:40:48 2019 +0000
Improved cloud falloff mist, faster noise sampling
commit f6a200d0cb866196ba57697466755f9e0c7ea5d8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 10:09:00 2019 +0000
Improved long-range depth precision, removed unnecessary LoD polygons
commit 63d1b2bb2292898d59fb4f4e502201103dfeb86f
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 20:57:46 2019 +0000
Working LoD shader
commit f13d98ee3e58f881e8b978861a67663b59ed91ec
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 11:03:40 2019 +0000
LoD first attempt (stack overflow issue)
2020-08-20 18:34:59 +00:00
|
|
|
|
let neighbor_pos = uniform_idx_as_vec2(self.map_size_lg(), neighbor_idx);
|
2019-10-16 11:39:41 +00:00
|
|
|
|
let neighbor_chunk = self.get(neighbor_pos);
|
|
|
|
|
let river_kind = neighbor_chunk.and_then(|c| c.river.river_kind);
|
|
|
|
|
let has_water = river_kind.is_some() && river_kind != Some(RiverKind::Ocean);
|
|
|
|
|
if (neighbor_pos - chunk_pos).reduce_partial_max() <= 1 || has_water {
|
|
|
|
|
neighbor_chunk.map(|c| c.get_base_z())
|
|
|
|
|
} else {
|
|
|
|
|
None
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
.fold(None, |a: Option<f32>, x| a.map(|a| a.min(x)).or(Some(x)))
|
2019-05-20 02:53:04 +00:00
|
|
|
|
}
|
|
|
|
|
|
2019-05-20 15:01:27 +00:00
|
|
|
|
pub fn get_interpolated<T, F>(&self, pos: Vec2<i32>, mut f: F) -> Option<T>
|
2019-05-21 22:31:38 +00:00
|
|
|
|
where
|
|
|
|
|
T: Copy + Default + Add<Output = T> + Mul<f32, Output = T>,
|
|
|
|
|
F: FnMut(&SimChunk) -> T,
|
2019-05-20 15:01:27 +00:00
|
|
|
|
{
|
common: Rework volume API
See the doc comments in `common/src/vol.rs` for more information on
the API itself.
The changes include:
* Consistent `Err`/`Error` naming.
* Types are named `...Error`.
* `enum` variants are named `...Err`.
* Rename `VolMap{2d, 3d}` -> `VolGrid{2d, 3d}`. This is in preparation
to an upcoming change where a “map” in the game related sense will
be added.
* Add volume iterators. There are two types of them:
* _Position_ iterators obtained from the trait `IntoPosIterator`
using the method
`fn pos_iter(self, lower_bound: Vec3<i32>, upper_bound: Vec3<i32>) -> ...`
which returns an iterator over `Vec3<i32>`.
* _Volume_ iterators obtained from the trait `IntoVolIterator`
using the method
`fn vol_iter(self, lower_bound: Vec3<i32>, upper_bound: Vec3<i32>) -> ...`
which returns an iterator over `(Vec3<i32>, &Self::Vox)`.
Those traits will usually be implemented by references to volume
types (i.e. `impl IntoVolIterator<'a> for &'a T` where `T` is some
type which usually implements several volume traits, such as `Chunk`).
* _Position_ iterators iterate over the positions valid for that
volume.
* _Volume_ iterators do the same but return not only the position
but also the voxel at that position, in each iteration.
* Introduce trait `RectSizedVol` for the use case which we have with
`Chonk`: A `Chonk` is sized only in x and y direction.
* Introduce traits `RasterableVol`, `RectRasterableVol`
* `RasterableVol` represents a volume that is compile-time sized and has
its lower bound at `(0, 0, 0)`. The name `RasterableVol` was chosen
because such a volume can be used with `VolGrid3d`.
* `RectRasterableVol` represents a volume that is compile-time sized at
least in x and y direction and has its lower bound at `(0, 0, z)`.
There's no requirement on he lower bound or size in z direction.
The name `RectRasterableVol` was chosen because such a volume can be
used with `VolGrid2d`.
2019-09-03 22:23:29 +00:00
|
|
|
|
let pos = pos.map2(TerrainChunkSize::RECT_SIZE, |e, sz: u32| {
|
2019-05-21 22:31:38 +00:00
|
|
|
|
e as f64 / sz as f64
|
|
|
|
|
});
|
2019-05-20 02:53:04 +00:00
|
|
|
|
|
2019-05-20 15:01:27 +00:00
|
|
|
|
let cubic = |a: T, b: T, c: T, d: T, x: f32| -> T {
|
2019-05-20 02:53:04 +00:00
|
|
|
|
let x2 = x * x;
|
|
|
|
|
|
|
|
|
|
// Catmull-Rom splines
|
2019-05-20 15:01:27 +00:00
|
|
|
|
let co0 = a * -0.5 + b * 1.5 + c * -1.5 + d * 0.5;
|
|
|
|
|
let co1 = a + b * -2.5 + c * 2.0 + d * -0.5;
|
|
|
|
|
let co2 = a * -0.5 + c * 0.5;
|
2019-05-20 02:53:04 +00:00
|
|
|
|
let co3 = b;
|
|
|
|
|
|
|
|
|
|
co0 * x2 * x + co1 * x2 + co2 * x + co3
|
2019-05-20 15:01:27 +00:00
|
|
|
|
};
|
2019-05-20 02:53:04 +00:00
|
|
|
|
|
2019-05-22 09:42:19 +00:00
|
|
|
|
let mut x = [T::default(); 4];
|
2019-05-20 02:53:04 +00:00
|
|
|
|
|
2019-05-22 09:42:19 +00:00
|
|
|
|
for (x_idx, j) in (-1..3).enumerate() {
|
2019-06-19 14:55:26 +00:00
|
|
|
|
let y0 = f(self.get(pos.map2(Vec2::new(j, -1), |e, q| e.max(0.0) as i32 + q))?);
|
2019-06-18 21:22:31 +00:00
|
|
|
|
let y1 = f(self.get(pos.map2(Vec2::new(j, 0), |e, q| e.max(0.0) as i32 + q))?);
|
|
|
|
|
let y2 = f(self.get(pos.map2(Vec2::new(j, 1), |e, q| e.max(0.0) as i32 + q))?);
|
|
|
|
|
let y3 = f(self.get(pos.map2(Vec2::new(j, 2), |e, q| e.max(0.0) as i32 + q))?);
|
2019-05-20 02:53:04 +00:00
|
|
|
|
|
2019-05-22 09:42:19 +00:00
|
|
|
|
x[x_idx] = cubic(y0, y1, y2, y3, pos.y.fract() as f32);
|
2019-05-20 02:53:04 +00:00
|
|
|
|
}
|
|
|
|
|
|
2019-05-22 09:42:19 +00:00
|
|
|
|
Some(cubic(x[0], x[1], x[2], x[3], pos.x.fract() as f32))
|
2019-05-20 02:53:04 +00:00
|
|
|
|
}
|
2019-10-16 11:39:41 +00:00
|
|
|
|
|
|
|
|
|
/// M. Steffen splines.
|
|
|
|
|
///
|
2020-02-01 20:39:39 +00:00
|
|
|
|
/// A more expensive cubic interpolation function that can preserve
|
|
|
|
|
/// monotonicity between points. This is useful if you rely on relative
|
|
|
|
|
/// differences between endpoints being preserved at all interior
|
|
|
|
|
/// points. For example, we use this with riverbeds (and water
|
|
|
|
|
/// height on along rivers) to maintain the invariant that the rivers always
|
|
|
|
|
/// flow downhill at interior points (not just endpoints), without
|
|
|
|
|
/// needing to flatten out the river.
|
2019-10-16 11:39:41 +00:00
|
|
|
|
pub fn get_interpolated_monotone<T, F>(&self, pos: Vec2<i32>, mut f: F) -> Option<T>
|
|
|
|
|
where
|
|
|
|
|
T: Copy + Default + Signed + Float + Add<Output = T> + Mul<f32, Output = T>,
|
|
|
|
|
F: FnMut(&SimChunk) -> T,
|
|
|
|
|
{
|
|
|
|
|
// See http://articles.adsabs.harvard.edu/cgi-bin/nph-iarticle_query?1990A%26A...239..443S&defaultprint=YES&page_ind=0&filetype=.pdf
|
|
|
|
|
//
|
2020-02-01 20:39:39 +00:00
|
|
|
|
// Note that these are only guaranteed monotone in one dimension; fortunately,
|
|
|
|
|
// that is sufficient for our purposes.
|
2019-10-16 11:39:41 +00:00
|
|
|
|
let pos = pos.map2(TerrainChunkSize::RECT_SIZE, |e, sz: u32| {
|
|
|
|
|
e as f64 / sz as f64
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
let secant = |b: T, c: T| c - b;
|
|
|
|
|
|
|
|
|
|
let parabola = |a: T, c: T| -a * 0.5 + c * 0.5;
|
|
|
|
|
|
|
|
|
|
let slope = |_a: T, _b: T, _c: T, s_a: T, s_b: T, p_b: T| {
|
|
|
|
|
// ((b - a).signum() + (c - b).signum()) * s
|
|
|
|
|
(s_a.signum() + s_b.signum()) * (s_a.abs().min(s_b.abs()).min(p_b.abs() * 0.5))
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
let cubic = |a: T, b: T, c: T, d: T, x: f32| -> T {
|
|
|
|
|
// Compute secants.
|
|
|
|
|
let s_a = secant(a, b);
|
|
|
|
|
let s_b = secant(b, c);
|
|
|
|
|
let s_c = secant(c, d);
|
|
|
|
|
// Computing slopes from parabolas.
|
|
|
|
|
let p_b = parabola(a, c);
|
|
|
|
|
let p_c = parabola(b, d);
|
|
|
|
|
// Get slopes (setting distance between neighbors to 1.0).
|
|
|
|
|
let slope_b = slope(a, b, c, s_a, s_b, p_b);
|
|
|
|
|
let slope_c = slope(b, c, d, s_b, s_c, p_c);
|
|
|
|
|
let x2 = x * x;
|
|
|
|
|
|
|
|
|
|
// Interpolating splines.
|
|
|
|
|
let co0 = slope_b + slope_c - s_b * 2.0;
|
|
|
|
|
// = a * -0.5 + c * 0.5 + b * -0.5 + d * 0.5 - 2 * (c - b)
|
|
|
|
|
// = a * -0.5 + b * 1.5 - c * 1.5 + d * 0.5;
|
|
|
|
|
let co1 = s_b * 3.0 - slope_b * 2.0 - slope_c;
|
|
|
|
|
// = (3.0 * (c - b) - 2.0 * (a * -0.5 + c * 0.5) - (b * -0.5 + d * 0.5))
|
|
|
|
|
// = a + b * -2.5 + c * 2.0 + d * -0.5;
|
|
|
|
|
let co2 = slope_b;
|
|
|
|
|
// = a * -0.5 + c * 0.5;
|
|
|
|
|
let co3 = b;
|
|
|
|
|
|
|
|
|
|
co0 * x2 * x + co1 * x2 + co2 * x + co3
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
let mut x = [T::default(); 4];
|
|
|
|
|
|
|
|
|
|
for (x_idx, j) in (-1..3).enumerate() {
|
|
|
|
|
let y0 = f(self.get(pos.map2(Vec2::new(j, -1), |e, q| e.max(0.0) as i32 + q))?);
|
|
|
|
|
let y1 = f(self.get(pos.map2(Vec2::new(j, 0), |e, q| e.max(0.0) as i32 + q))?);
|
|
|
|
|
let y2 = f(self.get(pos.map2(Vec2::new(j, 1), |e, q| e.max(0.0) as i32 + q))?);
|
|
|
|
|
let y3 = f(self.get(pos.map2(Vec2::new(j, 2), |e, q| e.max(0.0) as i32 + q))?);
|
|
|
|
|
|
|
|
|
|
x[x_idx] = cubic(y0, y1, y2, y3, pos.y.fract() as f32);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Some(cubic(x[0], x[1], x[2], x[3], pos.x.fract() as f32))
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// Bilinear interpolation.
|
|
|
|
|
///
|
|
|
|
|
/// Linear interpolation in both directions (i.e. quadratic interpolation).
|
|
|
|
|
pub fn get_interpolated_bilinear<T, F>(&self, pos: Vec2<i32>, mut f: F) -> Option<T>
|
|
|
|
|
where
|
|
|
|
|
T: Copy + Default + Signed + Float + Add<Output = T> + Mul<f32, Output = T>,
|
|
|
|
|
F: FnMut(&SimChunk) -> T,
|
|
|
|
|
{
|
|
|
|
|
// (i) Find downhill for all four points.
|
2020-02-01 20:39:39 +00:00
|
|
|
|
// (ii) Compute distance from each downhill point and do linear interpolation on
|
|
|
|
|
// their heights. (iii) Compute distance between each neighboring point
|
|
|
|
|
// and do linear interpolation on their distance-interpolated
|
|
|
|
|
// heights.
|
2019-10-16 11:39:41 +00:00
|
|
|
|
|
|
|
|
|
// See http://articles.adsabs.harvard.edu/cgi-bin/nph-iarticle_query?1990A%26A...239..443S&defaultprint=YES&page_ind=0&filetype=.pdf
|
|
|
|
|
//
|
2020-02-01 20:39:39 +00:00
|
|
|
|
// Note that these are only guaranteed monotone in one dimension; fortunately,
|
|
|
|
|
// that is sufficient for our purposes.
|
2019-10-16 11:39:41 +00:00
|
|
|
|
let pos = pos.map2(TerrainChunkSize::RECT_SIZE, |e, sz: u32| {
|
|
|
|
|
e as f64 / sz as f64
|
|
|
|
|
});
|
|
|
|
|
|
2020-02-01 20:39:39 +00:00
|
|
|
|
// Orient the chunk in the direction of the most downhill point of the four. If
|
|
|
|
|
// there is no "most downhill" point, then we don't care.
|
2019-10-16 11:39:41 +00:00
|
|
|
|
let x0 = pos.map2(Vec2::new(0, 0), |e, q| e.max(0.0) as i32 + q);
|
|
|
|
|
let p0 = self.get(x0)?;
|
|
|
|
|
let y0 = f(p0);
|
|
|
|
|
|
|
|
|
|
let x1 = pos.map2(Vec2::new(1, 0), |e, q| e.max(0.0) as i32 + q);
|
|
|
|
|
let p1 = self.get(x1)?;
|
|
|
|
|
let y1 = f(p1);
|
|
|
|
|
|
|
|
|
|
let x2 = pos.map2(Vec2::new(0, 1), |e, q| e.max(0.0) as i32 + q);
|
|
|
|
|
let p2 = self.get(x2)?;
|
|
|
|
|
let y2 = f(p2);
|
|
|
|
|
|
|
|
|
|
let x3 = pos.map2(Vec2::new(1, 1), |e, q| e.max(0.0) as i32 + q);
|
|
|
|
|
let p3 = self.get(x3)?;
|
|
|
|
|
let y3 = f(p3);
|
|
|
|
|
|
|
|
|
|
let z0 = y0
|
|
|
|
|
.mul(1.0 - pos.x.fract() as f32)
|
|
|
|
|
.mul(1.0 - pos.y.fract() as f32);
|
|
|
|
|
let z1 = y1.mul(pos.x.fract() as f32).mul(1.0 - pos.y.fract() as f32);
|
|
|
|
|
let z2 = y2.mul(1.0 - pos.x.fract() as f32).mul(pos.y.fract() as f32);
|
|
|
|
|
let z3 = y3.mul(pos.x.fract() as f32).mul(pos.y.fract() as f32);
|
|
|
|
|
|
|
|
|
|
Some(z0 + z1 + z2 + z3)
|
|
|
|
|
}
|
2020-04-20 00:17:54 +00:00
|
|
|
|
|
2020-07-15 23:12:12 +00:00
|
|
|
|
/// Return the distance to the nearest way in blocks, along with the
|
|
|
|
|
/// closest point on the way, the way metadata, and the tangent vector
|
|
|
|
|
/// of that way.
|
2020-07-25 11:19:13 +00:00
|
|
|
|
pub fn get_nearest_way<M: Clone + Lerp<Output = M>>(
|
2020-07-15 23:12:12 +00:00
|
|
|
|
&self,
|
|
|
|
|
wpos: Vec2<i32>,
|
|
|
|
|
get_way: impl Fn(&SimChunk) -> Option<(Way, M)>,
|
|
|
|
|
) -> Option<(f32, Vec2<f32>, M, Vec2<f32>)> {
|
2020-06-30 14:56:49 +00:00
|
|
|
|
let chunk_pos = wpos.map2(TerrainChunkSize::RECT_SIZE, |e, sz: u32| {
|
2020-04-20 00:17:54 +00:00
|
|
|
|
e.div_euclid(sz as i32)
|
|
|
|
|
});
|
2020-04-20 16:30:39 +00:00
|
|
|
|
let get_chunk_centre = |chunk_pos: Vec2<i32>| {
|
2020-06-30 14:56:49 +00:00
|
|
|
|
chunk_pos.map2(TerrainChunkSize::RECT_SIZE, |e, sz: u32| {
|
2020-04-20 16:30:39 +00:00
|
|
|
|
e * sz as i32 + sz as i32 / 2
|
|
|
|
|
})
|
|
|
|
|
};
|
2020-04-20 00:17:54 +00:00
|
|
|
|
|
2020-07-15 23:12:12 +00:00
|
|
|
|
let get_way = &get_way;
|
2020-04-20 00:17:54 +00:00
|
|
|
|
LOCALITY
|
|
|
|
|
.iter()
|
|
|
|
|
.filter_map(|ctrl| {
|
2020-07-15 23:12:12 +00:00
|
|
|
|
let (way, meta) = get_way(self.get(chunk_pos + *ctrl)?)?;
|
2020-07-25 11:19:13 +00:00
|
|
|
|
let ctrl_pos = get_chunk_centre(chunk_pos + *ctrl).map(|e| e as f32)
|
|
|
|
|
+ way.offset.map(|e| e as f32);
|
2020-04-20 00:17:54 +00:00
|
|
|
|
|
2020-07-15 23:12:12 +00:00
|
|
|
|
let chunk_connections = way.neighbors.count_ones();
|
2020-04-20 00:17:54 +00:00
|
|
|
|
if chunk_connections == 0 {
|
|
|
|
|
return None;
|
|
|
|
|
}
|
|
|
|
|
|
2020-07-15 23:12:12 +00:00
|
|
|
|
let (start_pos, _start_idx, start_meta) = if chunk_connections != 2 {
|
|
|
|
|
(ctrl_pos, None, meta.clone())
|
2020-04-20 00:17:54 +00:00
|
|
|
|
} else {
|
|
|
|
|
let (start_idx, start_rpos) = NEIGHBORS
|
|
|
|
|
.iter()
|
|
|
|
|
.copied()
|
|
|
|
|
.enumerate()
|
2020-07-15 23:12:12 +00:00
|
|
|
|
.find(|(i, _)| way.neighbors & (1 << *i as u8) != 0)
|
2020-04-20 00:17:54 +00:00
|
|
|
|
.unwrap();
|
|
|
|
|
let start_pos_chunk = chunk_pos + *ctrl + start_rpos;
|
2020-07-15 23:12:12 +00:00
|
|
|
|
let (start_way, start_meta) = get_way(self.get(start_pos_chunk)?)?;
|
2020-04-20 00:17:54 +00:00
|
|
|
|
(
|
2020-04-20 16:30:39 +00:00
|
|
|
|
get_chunk_centre(start_pos_chunk).map(|e| e as f32)
|
2020-07-15 23:12:12 +00:00
|
|
|
|
+ start_way.offset.map(|e| e as f32),
|
2020-04-20 00:17:54 +00:00
|
|
|
|
Some(start_idx),
|
2020-07-15 23:12:12 +00:00
|
|
|
|
start_meta,
|
2020-04-20 00:17:54 +00:00
|
|
|
|
)
|
|
|
|
|
};
|
|
|
|
|
|
2020-04-20 16:30:39 +00:00
|
|
|
|
Some(
|
|
|
|
|
NEIGHBORS
|
|
|
|
|
.iter()
|
|
|
|
|
.enumerate()
|
2020-07-15 23:12:12 +00:00
|
|
|
|
.filter(move |(i, _)| way.neighbors & (1 << *i as u8) != 0)
|
2020-04-23 15:16:08 +00:00
|
|
|
|
.filter_map(move |(_, end_rpos)| {
|
2020-04-20 16:30:39 +00:00
|
|
|
|
let end_pos_chunk = chunk_pos + *ctrl + end_rpos;
|
2020-07-15 23:12:12 +00:00
|
|
|
|
let (end_way, end_meta) = get_way(self.get(end_pos_chunk)?)?;
|
2020-04-20 16:30:39 +00:00
|
|
|
|
let end_pos = get_chunk_centre(end_pos_chunk).map(|e| e as f32)
|
2020-07-15 23:12:12 +00:00
|
|
|
|
+ end_way.offset.map(|e| e as f32);
|
2020-04-20 16:30:39 +00:00
|
|
|
|
|
|
|
|
|
let bez = QuadraticBezier2 {
|
|
|
|
|
start: (start_pos + ctrl_pos) / 2.0,
|
|
|
|
|
ctrl: ctrl_pos,
|
|
|
|
|
end: (end_pos + ctrl_pos) / 2.0,
|
|
|
|
|
};
|
|
|
|
|
let nearest_interval = bez
|
2020-04-22 20:12:57 +00:00
|
|
|
|
.binary_search_point_by_steps(wpos.map(|e| e as f32), 16, 0.001)
|
2020-04-20 16:30:39 +00:00
|
|
|
|
.0
|
|
|
|
|
.clamped(0.0, 1.0);
|
|
|
|
|
let pos = bez.evaluate(nearest_interval);
|
|
|
|
|
let dist_sqrd = pos.distance_squared(wpos.map(|e| e as f32));
|
2020-07-15 23:12:12 +00:00
|
|
|
|
let meta = if nearest_interval < 0.5 {
|
|
|
|
|
Lerp::lerp(start_meta.clone(), meta.clone(), 0.5 + nearest_interval)
|
|
|
|
|
} else {
|
|
|
|
|
Lerp::lerp(meta.clone(), end_meta, nearest_interval - 0.5)
|
|
|
|
|
};
|
|
|
|
|
Some((dist_sqrd, pos, meta, move || {
|
2020-07-02 23:14:07 +00:00
|
|
|
|
bez.evaluate_derivative(nearest_interval).normalized()
|
|
|
|
|
}))
|
2020-04-20 16:30:39 +00:00
|
|
|
|
}),
|
|
|
|
|
)
|
2020-04-20 00:17:54 +00:00
|
|
|
|
})
|
|
|
|
|
.flatten()
|
2020-06-30 11:28:25 +00:00
|
|
|
|
.min_by_key(|(dist_sqrd, _, _, _)| (dist_sqrd * 1024.0) as i32)
|
2020-07-15 23:12:12 +00:00
|
|
|
|
.map(|(dist, pos, meta, calc_tangent)| (dist.sqrt(), pos, meta, calc_tangent()))
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pub fn get_nearest_path(&self, wpos: Vec2<i32>) -> Option<(f32, Vec2<f32>, Path, Vec2<f32>)> {
|
|
|
|
|
self.get_nearest_way(wpos, |chunk| Some(chunk.path))
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pub fn get_nearest_cave(&self, wpos: Vec2<i32>) -> Option<(f32, Vec2<f32>, Cave, Vec2<f32>)> {
|
|
|
|
|
self.get_nearest_way(wpos, |chunk| Some(chunk.cave))
|
2020-04-20 00:17:54 +00:00
|
|
|
|
}
|
2019-05-21 00:57:16 +00:00
|
|
|
|
}
|
|
|
|
|
|
2020-03-27 23:06:23 +00:00
|
|
|
|
#[derive(Debug)]
|
2019-06-04 17:19:40 +00:00
|
|
|
|
pub struct SimChunk {
|
|
|
|
|
pub chaos: f32,
|
|
|
|
|
pub alt: f32,
|
2019-11-19 18:34:52 +00:00
|
|
|
|
pub basement: f32,
|
2019-10-16 11:39:41 +00:00
|
|
|
|
pub water_alt: f32,
|
|
|
|
|
pub downhill: Option<Vec2<i32>>,
|
|
|
|
|
pub flux: f32,
|
2019-06-04 17:19:40 +00:00
|
|
|
|
pub temp: f32,
|
2019-08-18 16:35:27 +00:00
|
|
|
|
pub humidity: f32,
|
2019-06-04 17:19:40 +00:00
|
|
|
|
pub rockiness: f32,
|
2019-07-08 14:51:38 +00:00
|
|
|
|
pub is_cliffs: bool,
|
2019-06-21 00:53:11 +00:00
|
|
|
|
pub near_cliffs: bool,
|
2019-06-04 17:19:40 +00:00
|
|
|
|
pub tree_density: f32,
|
2019-06-11 18:39:25 +00:00
|
|
|
|
pub forest_kind: ForestKind,
|
2019-06-25 15:59:09 +00:00
|
|
|
|
pub spawn_rate: f32,
|
2019-10-16 11:39:41 +00:00
|
|
|
|
pub river: RiverData,
|
2020-04-17 15:46:08 +00:00
|
|
|
|
pub warp_factor: f32,
|
2020-07-02 23:14:07 +00:00
|
|
|
|
pub surface_veg: f32,
|
2019-08-23 21:33:14 +00:00
|
|
|
|
|
2020-06-17 18:05:47 +00:00
|
|
|
|
pub sites: Vec<Id<Site>>,
|
2020-03-27 13:16:02 +00:00
|
|
|
|
pub place: Option<Id<Place>>,
|
2020-07-15 23:12:12 +00:00
|
|
|
|
|
|
|
|
|
pub path: (Way, Path),
|
|
|
|
|
pub cave: (Way, Cave),
|
|
|
|
|
|
2020-01-25 20:43:34 +00:00
|
|
|
|
pub contains_waypoint: bool,
|
2019-06-22 21:44:27 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[derive(Copy, Clone)]
|
|
|
|
|
pub struct RegionInfo {
|
|
|
|
|
pub chunk_pos: Vec2<i32>,
|
|
|
|
|
pub block_pos: Vec2<i32>,
|
|
|
|
|
pub dist: f32,
|
|
|
|
|
pub seed: u32,
|
|
|
|
|
}
|
|
|
|
|
|
2019-06-04 17:19:40 +00:00
|
|
|
|
impl SimChunk {
|
2020-06-10 19:47:36 +00:00
|
|
|
|
#[allow(clippy::if_same_then_else)] // TODO: Pending review in #587
|
2020-06-23 06:52:04 +00:00
|
|
|
|
#[allow(clippy::unnested_or_patterns)] // TODO: Pending review in #587
|
(See sharp/lod-history) LOD, shadows, greedy meshing, new lighting, perf
---
Pretty much a Veloren fork at this point. Here's a high level overview of the changes (will be added to CHANGELOG just before merge).
At a high level this MR incorporates roughly two groups of changes.
The first group consists of new game features: more flexible map sizes, level of detail terrain, shadow maps, and a new lighting
engine. This is "feature work" that (mostly) only adds new things to Veloren, and mostly shouldn't affect old stuff.
The second big group of changes are those addressing the fallout from all the new features. These include performance fixes of
various sorts: the addition of multiple graphics options and optimization of the cheap ones to avoid work, switching all voxel
models to use some variant of greedy meshing, switching over much of our CPU-side vector math to exploit SIMD instructions
(coinciding with a fork of `vek`), and a rewrite of how the UI handles text rendering (coinciding with updates to our fork
of `conrod`). Making Veloren's hardcoded colors appear correct under the new lighting engine also required considerably
changes (TODO: Fill in this section when it's complete).
The second category of changes often heavily touches code owned by other people, including frequently modified code "owned" by a
handful of people, so I recommend that this code be reviewed particularly carefully.
---
At a high level (each will be described in more detail below):
- The world map has been refactored.
- The world size is no longer hardcoded (@zesterer).
- The map generation code was made generic to allow using it outside of the `world` crate (@zesterer).
- On world creation, we now compute *horizon maps* (@zesterer).
- The way we pass the world from the server to the client has been updated (@xMAC94x).
- Artifacts related to image rotation were fixed (@imbris).
- Multiflow rivers were enabled (@zesterer).
- In the process of making changes related to the world map, various incidental fixes and optimizations were required.
- The new *level of detail* feature was added (@zesterer wrote part of this and has checked out the rest).
- A new LOD terrain rendering step was added to the pipeline.
- The LOD terrain quality was made configurable via a graphics setting.
- Horizon maps were used to cast shadows from LOD chunks on both LOD and non-LOD terrain.
- A "voxelization" effect was incorporated into rendered LOD terrain to make it blend better into the world.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Veloren's lighting has been completely overhauled (@zesterer has already checked most of this out).
- A semi-accurate index of refraction was assigned to our materials.
- A new, more realistic, physically based approach to lighting was used using the *Ashikhmin Shirley* BRDF.
- We emulate *atmospheric scattering* using equations designed for measuring solar panel light exposure.
- We attempt to compute *realistic light attenuation* in water using its real material properties.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Point and directional lights now cast realistic shadows, using *shadow mapping.* (@imbris, @zesterer, @Treeco, @YuriMomo)
- Point light shadow maps were added to the rendering pipeline, using geometry shaders and *seamless cube maps*.
- Directional light shadows were added to the rendering pipeline, using LISPSM together with disabling *depth clamping*.
- "Shadow-only" chunks and NPCs were added to prevent shadows from models behind you from disappearing.
- In the process of making changes related to shadow maps, various incidental fixes and optimizations were required.
The addition of shadow maps, LOD terrain, and the new lighting all led to significant performance degradation, on top of other
changes happening in master. Therefore, a large number of performance improvements were also needed:
- The graphics options were made much more flexible and configurable, and shaders were optimize.
- New options were provided for how to render lights and shadows (@Pfauenauge, @zesterer).
- Graphic setting storage and configuration were overhauled to make adding new features easier (@Pfauenauge, @imbris).
- Shaders were rewritten to utilize GLSL's preprocessor to avoid overhead (@zesterer, @YuriMomo).
- In the process of making changes related to providing additional rendering options, various incidental fixes and optimizations were required.
- Voxel model creation was switched to use *greedy meshing.*
- A new voxel meshing method, greedy meshing, was added (@imbris).
- Uses of the older meshing methods were migrated to use greedy meshing (@imbris, @jshipsey, @Pfauenauge).
- New restrictions were added to terrain, figure, and sprites to future proof them for further optimizations (@jshipsey, @Pfauenauge, @zesterer).
- Most positions are now relative to either chunk or player position for better precision (@imbris, @zesterer, @scottc).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- Animation and terrain math were switched to use SIMD where possible.
- Fixes were made to vek to make its SIMD feature usable for us (@zesterer, @imbris).
- The interface and types used in bone animation were changed in various ways (@jshipsey, @Snowram, @Pfauenauge).
- Redundant code generation for body animation is now partly taken care of by a macro (@jshipsey, @Snowram, @Pfauenauge).
- Animation code was modified to to use vek's SIMD representation where possible (@jshipsey, @Snowram, @Pfauenauge).
- Terrain meshing code and shadow map math were also modified to use vek's SIMD representation (@imbris).
- SIMD instruction generation was enabled (@YuriMomo, @jshipsey, @Snowram, @imbris, @Angelonfira, @xMAC94x).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- The way we cache glyphs was completely refactored, fixed, and optimized.
- Our fork of `conrod` was optimized in various ways (@imbris).
- Our fork of `conrod` now exposes whether a widget was updated during the current frame (@imbris).
- Our use of the glyph cache was rewritten for correctness (@imbris).
- A *text cache* was introduced that lets us skip remeshing glyphs that have not changed (@imbris).
- Various changes were made to reduce pressure on the glyph cache, with more planned (@imbris, @Pfauenauge).
- In the process of making changes related to the glyph cache, various incidental fixes and optimizations were required.
- Colors were changed to keep Veloren's look consistent with master.
- Some older tree models were brought back (@Pfauenauge).
- TODO(@Sharp): All hardcoded colors were extracted and made hotloadable.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Hardcoded colors were fixed to conform to Veloren's style.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Color models were fixed to conform to Veloren's style.
A detailed description of the involved changes follows.
---
- The world size is no longer hardcoded. All functions dependent on world size now take a `WorldSizeLg`, which holds the base 2 logarithm of each actual world dimension and is guaranteed to maintain certain properties (outlined in `common/src/terrain/map.rs`). Additionally, many utility functions that utilize the world size were moved into `common` as well (mostly `common/src/terrain/mod.rs`). Finally, the world map format was updated in order to store its size explicitly, with a migration path from the old format that should work whenever the old formatted map was a square (practically always). See `world/src/sim/mod.rs` for these changes.
- The map generation code was made generic to allow using it outside of the `world` crate. The parts of the map generating code that do not need to query the world were moved over to `common/src/terrain/map.rs`, allowing them to be used from the client without creating a dependency on `world`. The rest of it was turned into helper functions in `world/src/sim/map.rs`, which can be passed as closures to the generic map generation code to complete its construction. This also means that colors are now passed in separately to the map generation function. See <https://veloren.net/devblog-78/> for more details.
- On world creation, we now compute *horizon maps*. See the function in `world/src/sim/util.rs`.
Given a height map and a plane intersecting that height map, our horizon maps allow us to encode enough information to reconstruct shadows for each point on the height map using only the *horizon angle* (the angle at which the sun starts to become visible). As Veloren's sun only covers one plane, this is sufficient for encoding sun shadows for LOD terrain, by encoding two angles per chunk (one for each 90 degrees the sun covers). We can also use this for the moon, if we want, since the moon follows the same path. Additionally, we store the *height* of the furthest occluder, to try to make the shadows volumetric; so this means 4 bytes in total for each chunk.
Support for horizon maps has been merged into the map functionality in common as well.
- The way we pass the world from the server to the client has been updated. Rather than passing the prerendered map, we instead pass three maps with values for each chunk; one with the color information, a second with altitude information, and a third with horizon map information. We then reconstruct the map on the client, together with some additional information we send from the server (like the sea level and maximum height). See `common/src/msg/server.rs` for a detailed description of the format of `WorldMapMsg`, and `server/src/libr.rs` and `client/src/lib.rs` for details of the map construction and parsing.
- Artifacts related to image rotation were fixed. See the commit message for commit SHA `cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e` for a detailed explanation. This involved changes to shaders, the addition of a new type of graphic (also reflected in the graphic cache) that allows specifying a border color (which automatically makes the associated texture immutable), and some related fixes. I reproduce the first two paragraphs of the MR description as well:
```
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
```
- Multiflow rivers were enabled.
This does not really need to be part of this MR, and would be easy to revert, but since it seemed to provide a nice improvement it's currently packaged with it.
We already computed multiple outflows from each chunk for erosion purposes long before this MR.
However, we never modified river rendering to be able to handle this case (just a single downhill river flow is complex enough!) so this was not exposed when deciding which chunks were rivers.
Now that
- In the process of making changes related to the world map, various incidental fixes and optimizations were required. Some examples of fixes include making sure terrain is never lowered to below sea level (to make the shadow maps report correct values), fixing map altitudes and colors to understand things like cliffs and "block level" coloring (that doesn'te xist on the column level), and fixing a crashbug when rendering images for the UI where source pixels are strongly rectangular. Some examples of related performance fixes include avoiding allocating a fresh vector for all the maps (i.e. copying it over to change the format from `[u32; n]` to `DynamicImage` and then copying again to convert to `RgbaImage`), and instead using the `gfx::memory::slice` function to accomplish the same thing. These sorts of changes are spread all arond the code.
This includes the additon of a new scene, `voxygen/src/scene/lod.rs`, a new pipeline `voxygen/src/render/pipeline/lod_terrain.rs`, and new shaders `assets/vxygen/shaders/lod-terrain-vert.glsl` and `assets/vxygen/shaders/lod-terrain-frag.glsl`, as well as associated changes to the renderer in `voxygen/src/render/renderer.rs`.
The main idea behind our initial approach to LOD was to take the world data we now get from the server (altitude, color, and horizon mapping).
- Some previously computed values were turned into shader uniforms for better prediction on weak processors. (@zesterer)
- Calls to power or trig functions were removed or replaced with multiplications, where possible.
- After some deliberation
- To properly handle sprite "waving" for nearby sprites,
We explicitly designed the greedy meshing system with figures and sprites in mind.
In both cases, we want to be able to *efficiently* pack many different models into the same texture, especially in cases where we know
we will either not be removing any of the grouped-together from the models from the texture, or will remove all of them at once (so
they can be packed into some specific subtexture).
For sprites, since we know every model in advance and never intend to deallocate them, we currently pack them all as efficiently as
possible into one giant tetxure atlas. However, in the future we might opt to pack them slightly less efficiently in exchange for
shrinking the sprite vertex size.
For figures, we pack all the textures for each *model* into the same atlas.
is a global texture atlas used for every sprite, and for figures which is why we have the ability to mesh multiple
models to the same texture area (using the simple texture atlas allocator) without requiring intermediate vector allocations.
This is accomplished by delaying the time when we actually write the color and light data to the texture until *after* all the
model vertices have been meshed; then, we can just allocate the whole color/light array at once, making the atlas we use an
exact fit. In computer science-y terms, we accomplish this delay by, after we perform the initial greedy meshing (without
texture information), not continuing to create the texture data, but instead constructing a *continuation*--that is, a function
that, when called, will execute the rest of the computation. We push this continuation (which in Rust terms is a `FnOnce` closure
that takes the `ColLightsInfo` that it is supposed to write to as context) onto a
onto a vector
resizing. To allow for suspended writes to texture data, Rust pointed out to me that the continuation that would eventually write the color and light data to the texture atlas (the one that is shared by all models sharing the same greedy mesher) would have to *own* whatever data it mshed. Because we often generate the model data to mesh as a temporary in `voxygen/src/load.rs`, the
- Matrix multiplications in the shader were reduced for figure data (@zesterer).
- Vertex "waves" for fluid data were removed.
- Terrain "bending" near edges was removed.
- Scaling was fixed to make sure empty space was not introduced in a space previously occupied by a block. It was also changed to take ownership of its voxel data,
rather than sharing it, to let it be used with meshing.
- Rust's nightly version was bumped in order to use the `array_map` function, which lets us reuse more code between the simple map and `FigureModelCache`.
- PositionedGlyph::standalone.
---
I tried to cite sources in many cases[^realtime],[^lloyd],[^lispsm],[^pbrt],[^greedy],[^tjunctions]
where I needed features from elsewhere but I am particularly grateful for the following resources,
esepcially where they have accompanying source code. I linked all of them that are accessible to the public (those that are not were
obtained through legal means).
[^realtime]: Eisemann, Elmar, Michael Schwarz, Ulf Assarsson, Michael Wimmer. Real-Time Shadows. A K Peters/CRC Press (T&F), 20160419.
[^lloyd]: Lloyd,B. 2007. [Logarithmic perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). PhD thesis, University of North Carolina.
[^lispsm]: Wimmer, M., Scherzer, D., and Purgathofer, W. 2004. [Light space perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). In Proceedings of Eurographics Symposium on Rendering 2004, pp. 143– 152.
[^pbrt]: Pharr, Matt, et al. [http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf](Physically Based Rendering: From Theory to Implementation). Third edition, Morgan Kaufmann Publishers/Elsevier, 2017.
[^greedy]: mikolalysenko. “Meshing in a Minecraft Game.” 0 FPS, 30 June 2012, <https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/>.
[^tjunctions]: blackflux. “Meshing in Voxel Engines – Part 1.” Blackflux.Com, 23 Feb. 2014, <https://blackflux.wordpress.com/2014/02/23/meshing-in-voxel-engines-part-1/>.
I am also especially grateful to Khronos, Wikiepdia, and stackoverflow for answering many of my specific questions while writing the MR.
---
Squashed commit of the following:
commit 300505e7305a2fdac722a808ee8538323f215f39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 18:46:25 2020 +0200
Fixing cargo doc and typo in CHANGELOG.
commit ec0aeb18e8499d7d84ef818331b4b65c3d76cea6
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 15:38:50 2020 +0200
Hopefully final commit for the LOD branch.
commit 5e8ea0b1eaac02903a02feb2eb038d195de4872f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 10:14:26 2020 +0200
Falling back to power as stopgap.
commit e44a1cbf46504ee9931a01bdc9033e145500d557
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 09:25:41 2020 +0200
Address imbris feedback.
Temporarily disables shiny water, lowers max VD.
These restrictions will be lifted soon after merging.
commit 561e25778a108ac3712f5ec2ce3a51234c4430d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 08:31:13 2020 +0200
Tweaking shaders a bit.
commit 7d19259078ce0dd7b3742ad7d0cb3fab3ece3fdc
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:59:43 2020 +0200
Fix view example as well.
commit 051cd4934e0fad2c0b15db4380a4189fa318679f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:29:06 2020 +0200
Fix meshing benchmark.
commit c95e07db3b4dcca285678985e65e31b927cb1c61
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 05:46:22 2020 +0200
Address MR feedback, fix scene clouds.
commit 1bfb816cabdb3ffc1e507a009c2d98696b4b573a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:39:36 2020 +0200
Incorporating Pfau's figure color changes.
New eyes and new humanoid colors.
commit 3f9b89a3ac7b3356b1dba0d1a8f6541357f81469
Merge: e2f5162e4 62c53963a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:29:41 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit e2f5162e4f96f4124aa43488f7245d341b3dcfd4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:28:38 2020 +0200
World colors are all hotloadable.
They live in assets/world/style/colors.ron.
Only a small handful of hardcoed colors remain in World; they are either
part of the map, or difficult to disentangle from the rest of the
computation. Comments are made where appropriate.
commit 62c53963abe1975009d34a8f9515a355bef24f31
Author: Marcel Märtens <marcel.cochem@googlemail.com>
Date: Wed Aug 19 15:59:00 2020 +0200
replace pretty_env_logger with tracing
commit 5b1625f99d9586fe80e2232f583ec5af9f953099
Merge: d71003acd 4942b5b39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:15:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit d71003acdabeff970b3928e97c26af6847b5b78e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:14:34 2020 +0200
Hotloading colors, part 1: colors in common.
Currently, this just entails humanoid colors. There are only three
colors not handled; the light emitter colors in
common/src/comp/inventory/item/tool.rs. These don't seem important
enough to me to warrant making hotloadable, at least not right now, but
if it's needed later we can always add them to the file.
commit 63b5e0e553eb2ea49276f192a6fc7dd65254270d
Merge: c32b337a4 6d2c4b9c1
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 13:05:37 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c32b337a46e10d9de473d178a94a3ccd61c39bb3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:52:04 2020 +0200
Fixing LOD grid, for real.
commit a166ae0360395387e09fb35a1f84210c2ce5ec24
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:28:05 2020 +0200
Addressing imbris's initial feedback.
Fixes two minor bugs: explosion particles were no longer spawning
randomly, and LOD grids were not perfectly even.
commit 4cbad004f44060994252dd3d38647a14a589712f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:27:58 2020 +0200
Bumping nightly per request.
commit 548680276aac77c25d43d16b5622f847d474dbef
Merge: acc098604 8f8b20c91
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:26:06 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit acc0986040589a3492f88a740bc3c3fc693b26d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:28:32 2020 +0200
Lower resolution due to lying drivers.
commit d3b878de2a52c358d2944a6bbd0555dad7fbdb10
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:15:38 2020 +0200
Fix issues msh encountered with Intel 4600.
commit 10245e0c1b0cb6fae10d86409435364edc6102ef
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 21:15:02 2020 +0200
Merge more models into one mesh than we did previously.
commit 3155c31e663c52ae5c3a53d5fb5665892a1a498a
Merge: 7204cc8a7 3c199280e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:35:22 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7204cc8a7a4f74a30306bd205d9834fee4bb944f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:34:43 2020 +0200
Fix not yet done NPC animations.
This forces them all to be the idle animation if not specified.
This fixes issues where you'd have giant NPCs in water.
commit bc83360f2a08918f19d417b5f772e1ff554dba08
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 19:36:37 2020 +0200
Try to fix some bugs:
- Z fighting with LOD terrain and water.
- Audio SFX not playing.
commit 1fd104aa603bf3781b6526a5cada46aeca3049dd
Merge: 862df3c99 7c2c392a3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 12:02:31 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 862df3c9976c4da9bd7cfd784f1a85973127968a
Merge: 0a4218ed9 75c1d4401
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 05:52:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0a4218ed9d541a2b34c133351bea38a99ddf4ea7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 22:27:14 2020 +0200
Fix particle depth.
commit f51dfdeb442d0dd5243dd2f344fa4be295bd0875
Merge: c6251a956 5e6dc0471
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:19:04 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit c6251a956ad376400dca5c23420cf8d213dc8fdf
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:15:46 2020 +0200
Cache figures more intelligently.
Cache figures for longer, and don't cache character states for the
player except where they actually affect the rendered model.
commit 0ed801d5404982c6fb63b1eaa4567d908b294c9d
Merge: c11b9bdf0 eea64f78f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 16:32:24 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c11b9bdf0a53bf9884d2f5a48fec9b01d582df1a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 11:47:15 2020 +0200
Remove unneeded Clippy annotation.
commit 16aa9ef40af56d69289d00aafb3deadfb8bd4f35
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 8 00:53:02 2020 +0200
Fix hotloading and Clippy.
commit 3dc973e0be5b758da1e9805eb764ad401374cd0c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 23:50:27 2020 +0200
Major speedups with SIMD.
commit fba64a7d93d5a96077ce87287bbce6ab9b7fbcae
Merge: 76429d00e d1e10b178
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:19 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 76429d00eea00d212fbd672a84ee91e75b19b938
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:10 2020 +0200
Add clippy.toml.
commit c79f512f84dbb83cb82b7954db68ff241dfd8e41
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 11:55:20 2020 +0200
Fix all clippy issues, clean up Rust code.
commit 6f90e010b3fbefb53b0d632e819931350015b6b8
Merge: 77a8c7c26 5929cfa5c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:30 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 77a8c7c267d3f44a1a62bd6b2274359973c5e4d4
Merge: b44e44232 44febaabd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:10 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 5929cfa5c713aa392110bbb62407f76caf53c3df
Author: jshipsey <jshipsey18@gmail.com>
Date: Thu Aug 6 20:47:27 2020 -0400
fixed in-hand arrow bug
commit b44e442325d828f1cd564d66908f89d09e80474b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 6 13:40:35 2020 +0200
Miscellaneous performance improvements.
commit be37acf287c1360d8085862526ac3365ffd1d768
Merge: 125d7fc6c c11876547
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 05:49:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 125d7fc6c4dcd8c8c5f27b8268a4d64f409f3644
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 04:55:31 2020 +0200
Abstract over simd vs. repr_c vectors.
Also some minor improvements to Event size.
commit d4d4956e9252e1241ce110b2aa85076c6b1e2a23
Merge: 5f3b7294a aced5f979
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:56:54 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 5f3b7294af1f8533edc2620b58863c248e2b07af
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:43:52 2020 +0200
Fix formatting issues I missed before.
commit a428a3ebba70dcab63dd0f8cd983120c90617271
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:41:51 2020 +0200
Fix clippy warnings, part 1.
There aer still a bunch of type too complex and
function takes too many arguments warnings that I'll fix later
(or ignore, since in the one case I did fix a function takes too
many arguments warning I think it made the code *less* readable).
commit ba54307540ed8a937ac08209730284fc653af85b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 30 13:22:42 2020 +0200
Fix light animations so they are removed when the light turns off.
commit 7e0f4bcbf0f4717145d8beac40d52e3acebbe2aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 21:10:20 2020 +0200
Fix crash in edge case for pixel art.
commit 56da06f7a351e2b949e9b014a90b974d511a0924
Merge: cf74d55f2 9f53a4a19
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:56:52 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:29:52 2020 +0200
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
The first concern was addressed by fixing the dimensions of the map
images drawn from the UI (so that we always use a square source
rectangle, rather than a rectangular one according to the dimensions of
the map). We also fixed the way rotation was done in the fragment
shader for north-facing sources to make it properly handle aspect ratio
(this was already done for north-facing targets). Together, these fix
rendering issues peculiar to rectangular maps.
The second and third concerns were jointly addressed by adding an
optional border color to every 2D image drawn by the UI. This turns
out not to waste extra space even though we hold a full f32 color
(to avoid an extra dependency on gfx's PackedColor), since voxel
images already take up more space than Optiion<[f32; 4]> requires.
This is then implemented automatically using the "border color"
wrapping method in the attached sampler.
Since this is implemented in graphics hardware, it only works (at
least naively) if the actual image bounds match the texture bounds.
Therefore, we altered the way the graphics cache stores images
with a border color to guarantee that they are always in their own
texture, whose size exactly matches their extent. Since the easiest
currently exposed way to set a border color is to do so for an
immutable texture, we went a bit further and added a new "immutable"
texture storage type used for these cases; currently, it is always
and automatically used only when there is a specified border color,
but in theory there's no reason we couldn't provide immutable-only
images that use the default wrapping mdoe (though clamp to border
is admittedly not a great default).
To fix the maps case specifically, we set the border color to a
translucent version of the ocean border color. This may need
tweaking going forward, which shouldn't be hard.
As part of this process, we had to modify graphics replacement to
make sure immutable images are *removed* when invalidated, rather
than just having a validity flag unset (this is normally done by
the UI to try to reuse allocations in place if images are updated
in benign ways, since the texture atlases used for Ui do not
support deallocation; currently this is only used for item images,
so there should be no overlap with immutable image replacement,
so this was purely precautionary).
Since we were already touching the relevant code, we also updated
the image dependency to a newer version that provides more ways
to avoid allocations, and made a few other changes that should
hopefully eliminate redundant most of the intermediate buffer
allocations we were performing for what should be zero-cost
conversions. This may slightly improve performance in some
cases.
commit ad18ce939940a8c697270f6e9b94db9942fd8295
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 13:21:09 2020 +0200
Fix continent scale hack.
commit 36b1cb074f5b195aebd7dbbc3da7f0246a1a18ec
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 12:11:40 2020 +0200
Enable loading different sized maps without a recompile.
We may want to tweak the effects of the continent_scale_hack.
commit 13b6d4d534cc4814b7cb3294ca41bbfea0a6b186
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 10:55:48 2020 +0200
Removing WORLD_SIZE, part 1.
Erased almost every instance of WORLD_SIZE and replaced it with a local
power of two, map_size_lg (which respects certain invariants; see
common/src/terrain/map.rs for more details about MapSizeLg). This also
means we can avoid a dependency on the world crate from client, as
desired.
Now that the rest of the code is not expecting a fixed WORLD_SIZE, the
next step is to arrange for maps to store their world size, and to use
that world size as a basis prior to loading the map (as well, probably,
as prior to configuring some of the noise functions).
commit 30b1d2c6428230a9eaa0d749cdcbbd6f1cbccd78
Merge: 7d56ba31b 1377b369f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:58 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 7d56ba31b445441461b28a07fc495d7d4f047c17
Merge: 2101113b4 598f14b25
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 1377b369f6db2258e910d467a5740f31789e3ded
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sun Jul 19 23:25:38 2020 +0200
more saturated pumpkins
commit ae8d50527f93bb0616c2ad46ce4dacb63bc37c6d
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sat Jul 18 20:29:56 2020 +0200
acacia models
commit 2101113b467e691de787392d7f20f1745f5637bd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 18 18:55:25 2020 +0200
Higher detail LOD.
commit add2cfae04b4385fa5590e11e2bd5229d9dee0aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 16 01:57:39 2020 +0200
Revert some irrelevant stuff.
commit 2e2ab3dc1eaa59a4aef7f8d34a53d8aae4c8553a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 15 13:30:49 2020 +0200
Fixing various things about shadows.
* Correcting optimal LISPSM parameter.
* Figure shadows are cast when they're not visible.
* Chunk shadows stay cast until you look away.
* Seamless cubemaps for point lights.
* Etc.
commit 6c31e6b56217274285b597af297036691ea5d897
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 19:50:26 2020 +0200
Fix shadow creation.
commit 6332cbe006115ae205597529cd8bbccd146c2cca
Merge: be438657c 930e0028b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:47:00 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit be438657c33d7b5bfb0a9582c3ed3fd366637323
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:28:08 2020 +0200
Tweaks to shadows.
Added shadow map resolution configuration, added seamless cubemaps,
documented all existing rendering options, and fixed a few Clippy
errors.
commit 23b4058906013c7d2a40c286e20e32c5fbd897ed
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 10:11:19 2020 +0200
Fix moon, use nonlinear noise for terrain.
Note that the latter has a bit of performance cost.
commit 7fbe5cbfbb9dc29607957b8e62f432a4deed193d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:23:02 2020 +0200
Address lies about max texture size.
commit bcfc62b5e13a1cdd83f57535fde4694720bebfd9
Merge: 75e3626a7 18a08e8fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:22:08 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 75e3626a785919f43fdcf2127c2b10e3e4df2f9f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:21:52 2020 +0200
OpenGL 3.3 minimum.
commit 18a08e8fe2739f02af99a5d2cb4e7c38c49e858b
Author: Monty Marz <m.marzouq@gmx.de>
Date: Tue Jul 7 23:57:52 2020 +0200
settings localization
commit 90c5d1ca3620092bc3ae10b2211489eb1cf6f5e8
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 21:11:48 2020 +0200
Lower near distance.
commit 0e66f02b25aaddaa2dfddbbc89cd67de54a9a7b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 20:09:01 2020 +0200
All sprites sway in the wind now.
commit db1401a6910bf42dcf502462c90038752ff5fbdb
Merge: 69e508d8c e8b4b29d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 19:34:17 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 69e508d8c94d8973033817ca86f357e466fc7c4d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 18:41:37 2020 +0200
Make it easy to switch to SIMD for math.
commit ffe0f5928c7a7e87d00cb5426b3b1d831d7e02fd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 21:21:12 2020 +0200
Fix some issues with underwater rendering.
commit bfda6da42f38fd02c31ee92c81ab785a3e50c2a0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 19:17:59 2020 +0200
Fix some minor display issues.
commit 0ed752e087968cf901301884aaeae698e32ef8a5
Merge: ccc6a06a8 518edcb85
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:14:21 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit ccc6a06a8d4504d6b9f7af7905a414d2ee06ab76
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:04:34 2020 +0200
Some minor changes.
commit 4e020246702889269efe1a191788992164c508d6
Merge: 50a64d927 e05c9267a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 16:17:40 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 50a64d927e6c4f4b0e4688e4cbfca694bc3f922a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 13:07:03 2020 +0200
Fix far plane.
commit 7dd06da34cae8f9ea3b6c889fe965181f3fd3949
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:25:35 2020 +0200
Add shadows.glsl.
commit 618a18c998778bf871b905a74657440fcc384c80
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:10:22 2020 +0200
Adding shadows, greedy meshing, and more.
commit eaea83fe6a5cb1cb0ba8beef888183c718258496
Merge: 267018495 2f89b863e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 22:47:07 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 2670184954a13e4a9e7a4e35ba79aac0c5fac2f7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 21:20:01 2020 +0200
Make civsim and sites deterministic.
For anything in worldgen where you use a HashMap, *please* think
carefully about which hasher you are going to use! This is
especially true if (for some reason) you are depending on hashmap
iteration order remaining stable for some aspect of worldgen.
commit f8376fd5dc72b4a9c2f51a6b4570d59c8b8e9343
Merge: 654f7e049 cdee191dd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 17:53:57 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 654f7e049258d9da27c09608bbe6a46ffa8787e5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed May 20 21:22:30 2020 +0200
Correct backface culling.
commit 560501df05ca725409b0f2e4eb31bdfdc15fd0c7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue May 19 17:22:06 2020 +0200
Greedy messhing for shadows.
commit a4d87e1875ca543436e6bbbeb20348facc5a52d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun May 17 05:59:00 2020 +0200
Shadow maps work for lantern.
commit 243d0837b8a3b08172c9a3c348d964d7ddc2a0a8
Merge: 04382dc28 71dd520cd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:53:13 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 04382dc28632b6c66e8821f6870c0daaa1c1901a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:22:17 2020 +0200
WIP: better graphics config, better LOD, shadow maps.
commit 22ddbad3eb32bfa70f0932176022208fe67ded81
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 18:54:09 2020 +0200
Minor shader fixes.
commit 746a10e8d01ac235f994b0cde78fa48998602a1f
Merge: 0f4a0e763 40ab94673
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 04:02:09 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0f4a0e763db3afbdc4fb0558611f38326ca87151
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 23:03:24 2020 +0200
Switch back to pop-in terrain.
commit dd74fa7e4a53667b38811d7aec58d7f6a68889bb
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 22:58:55 2020 +0200
LOD shading closer to voxel shading.
commit ef67bd58ba0bdaf622b078892d768263b6cba268
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 28 20:49:03 2020 +0200
Experimental underwater lighting.
commit 2c5ad9d07605e80d5fd5679dd3a5d70c605b86a9
Merge: 748279835 303967a6f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 22:35:24 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7482798354eda18c8207950080fc24d443a369de
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 21:59:55 2020 +0200
Replace discard in figure-frag.
commit d83b4ae69be4912f69bf7835f509c68a1c7770a4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:45:57 2020 +0200
Fix sprite lighting, HDR from focus_pos.
commit 0594238004f116274905fa0ed7c2b6c417ed1d29
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:14:10 2020 +0200
Proper HDR from point lights.
commit 48c93d2b41ce5743103d18e76cc228f5ac766492
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 14:01:43 2020 +0200
Brighter ambiance, darker LOD shadows.
commit e0452e895ccfa8a43f368cae3b8b8aedc24dad93
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 13:13:23 2020 +0200
More proper HDR.
commit 4c6da3ed16cfeebb455e40da5f557b4af9a499d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 00:13:10 2020 +0200
Trying LOD noise.
commit 682a3d74c85df5503ffe1fc1cc891bce789df1ad
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 23:11:08 2020 +0200
Fix LOD heights in towns.
commit cc39e5734e8b18f9077bf42e66337c1319dd6b6e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 21:01:23 2020 +0200
More LOD fixes.
commit 8116b21c2e51c836e77894e309ac273caf2917b3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:54:43 2020 +0200
I like this coloring.
commit bc2560ea90b36f4b46190005344232d993043ac3
Merge: 14effdd5d e690efe71
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:48:33 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 14effdd5db8747fcf3eb34f03b46b7792e92d1c5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:24:35 2020 +0200
Re-saturate.
commit 48a643955d4435b78179acba0beb4a979905cc31
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:23:57 2020 +0200
Various fixes.
commit f7b497a0c25f4ad4682c71dd1ed6f608052feb9b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 03:22:49 2020 +0200
Render figures again.
commit 44e4aad48deba8266b9f8bdfd3db096b381f5327
Merge: e6f0a5a98 9ec319a18
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 02:01:04 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit e6f0a5a981a82533ba188fff0a54ce98577bb152
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 24 16:12:20 2020 +0200
Add atmospheric scattering.
commit f2953087f691a8edbc001cb98ebf5059fc6f8ac0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 23 00:01:20 2020 +0200
Fix shadowing for specular reflections.
commit ddd4a67a9799b8d08c7dc0c2bec90621c2bed0e3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Apr 22 22:56:12 2020 +0200
HDR fixes.
commit 1015e60deef3c447381996277df7496707a63bd0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 21 18:25:19 2020 +0200
More lighting changes.
commit 80c264abd111fb237e57843efcb5c071d4f84613
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 13 00:29:59 2020 +0200
Lighting experiments.
commit 8414987e589dd5102bad89762a3adaccc0bfe957
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 9 02:38:40 2020 +0200
WIP -- lighting changes and soft shadows.
commit 9cd2b3fb0d6b49776c6dfe463e4169637250b11a
Merge: c7ea687eb 8b149ad11
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:29 2020 +0200
Merge branch 'sharp/new-lighting' into sharp/small-fixes
commit c7ea687ebbc5aace1b455f134a5bf49ce2c7434a
Merge: 476441531 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:02 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 8b149ad11ad4bb75018fcf9519baec27d1c95951
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:32:39 2020 +0200
Trying out a new lighting model.
commit b0ac9f36f755dd06f7c17c46150568064790864f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 07:56:11 2020 +0200
Use bicubic interpolation for terrain.
commit f6fc9307a121514b614bc50ef8eb055953e7da8a
Merge: 33140a295 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 05:01:41 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 4764415312aae6e9ac2d00e86e84577cb958f1ab
Merge: ed2d0111d 13388ee6a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 04:54:48 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 13388ee6a42943f3f79a9cb488346cef18e272fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 20:30:08 2020 +0200
Various fixes (to coloring and to soft shadows).
commit fbd084a94a067082a87cd6d28b82054709bc9265
Merge: 5a089863b 4fdf6896a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 18:50:38 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/map-colors
commit ed2d0111d994262ae836d84d1fe5a45e4de72a0b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 06:49:27 2020 +0200
Combining colors and LOD.
commit 88342640c6b835114d01c797b89fdede3b0a2108
Merge: 33140a295 5a089863b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:49:20 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 33140a2951b8212725f42c758b277aaec4d888f7
Merge: 4c65a5aed f34d4b379
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:36:21 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 5a089863beb01d4794bbe3580ada47b278715ea2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 03:17:49 2020 +0200
Making maps brighter.
This is probably not the right way to do it, but oh well!
commit 32b2c99109dd486aa922886081068f9c550c83f2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 02:46:36 2020 +0200
Horizon mapping and "layered" map generation.
Horizon mapping is a method of shadow mapping specific to height maps.
It can handle any angle between 0 and 90 degrees from the ground, as
long as know the horizontal direction in advance, by remembering only a
single angle (the "horizon angle" of the shadow map). More is explained
in common/src/msg/server.rs. We also remember the approximate height of
the largest occluder, to try to be able to generate soft shadows and
create a vertical position where the shadows can't go higher.
Additionally, map generation has been reworked. Instead of computing
everything from explicit samples, we pass in sampling functions that
return exactly what the map generator needs. This allows us to cleanly
separate the way we sample things like altitudes and colors from the map
generation process. We exploit this to generate maps *partially* on the
server (with colors and rivers, but not shading). We can then send the
partially completed map to the client, which can combine it with shadow
information to generate the final map. This is useful for two reasons:
first, it makes sure the client can apply shadow information by itself,
and second, it lets us pass the unshaded map for use with level of
detail functionality.
For similar reasons, river generation is split
out into its own layer, but for now we opt to still generate rivers on
the server (since the river wire format is more complicated to compress
and may require some extra work to make sure we have enough precision to
draw rivers well enough for LoD).
Finally, the mostly ad-hoc lighting we were performing has been (mostly)
replaced with explicit Phong reflection shading (including specular
highlights). Regularizing this seems useful and helps clarify the
"meaning" of the various light intensities, and helps us keep a more
physically plausible basis. However, its interaction with soft shadows
is still imperfect, and it's not yet clear to me what we need to do to
turn this into something useful for LoD.
commit f8926a5737ddc51f3d585c651a64c43677aae0f4
Merge: a1aee931e 875ae6ced
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Mar 13 13:32:42 2020 +0100
Merge remote-tracking branch 'origin/master' into sharp/map-colors
commit 4c65a5aed353b119aea65a2aaeb94549b67beb42
Author: Treeco <5021038-Treeco@users.noreply.gitlab.com>
Date: Mon Feb 24 16:48:05 2020 +0000
Made LOD setting slider exponential
commit 2fa7b2d20d7233dc8bfd64f9f7f54617575248f1
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 17:49:53 2020 +0000
Added mist to LoD
commit aab059a450b5f635777129ff82cc15b662965c3c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 15:14:06 2020 +0000
Added LoD slider
commit 779c36b538121c5ade3633ae5cb67bb14c8c3877
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:54:55 2020 +0000
Reduced cost of vertex pushing
commit 9fea150473906b166365b738ebcea07c697daf3d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:38:53 2020 +0000
Fixed maths, improved LoD resolution
commit 5481df38fea5bf183ff376a3337179cfaa5233dc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 11:22:50 2020 +0000
Dynamically relocate LoD vertices to enhance details
commit a3e36a50ababd615da7db1b26158c7906a5def01
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 18:13:51 2020 +0000
Simpler terrain spiral rendering
commit 255f450ae9ac8763db4bede075fb409161ed57cc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:53:17 2020 +0000
Better LoD precision
commit 3d027aebe812a5b8658a4eb8123dc9f61b3776d2
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:04:03 2020 +0000
Better falloff
commit be775c9484b457b2c0b1a494aec03392d0c70e76
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 15:30:45 2020 +0000
Applied good ideas from experimental branch
commit 58587b68545a23c5c04ab4574a4b94b3bc982246
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 16:15:13 2020 +0000
Minor fixes to LoD merging
commit 7b42aebd709c14df2db766aad61d9280ad24d84d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 15:04:44 2020 +0000
Capped LoD dragging
commit 8aafc559f87124e1ea5ca6e3ddc2aa0c242d793c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:54:37 2020 +0000
Better blending between LoD and terrain border
commit edd3455d5161792d87ddc8eadc0ecbad5532b284
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:40:19 2020 +0000
Fixed LoD z depth, added sea level offset
commit b9b06744620114dd5556e73f64fa93c145503a7c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:27:43 2020 +0000
Better LoD smoothing
commit a1aee931e790431560cd2d953ad61d9497072afd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Feb 21 14:52:17 2020 +0100
Adding shadows.
commit 2400786c13dd891c131ed86d48d05df516a8a778
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 13:48:40 2020 +0000
Use world map as LoD source
commit dbf650f504a4c25fbbc2096ac3616c736bf52d23
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Jan 20 00:48:14 2020 +0000
Better clouds at distance
commit 5e6f81b86cdb9730b9b056877b19257075fd5fa8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Jan 19 23:59:02 2020 +0000
sync
commit 745e7540ddb000cc645f612767b337c2ddc3f7c0
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 12:40:48 2019 +0000
Improved cloud falloff mist, faster noise sampling
commit f6a200d0cb866196ba57697466755f9e0c7ea5d8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 10:09:00 2019 +0000
Improved long-range depth precision, removed unnecessary LoD polygons
commit 63d1b2bb2292898d59fb4f4e502201103dfeb86f
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 20:57:46 2019 +0000
Working LoD shader
commit f13d98ee3e58f881e8b978861a67663b59ed91ec
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 11:03:40 2019 +0000
LoD first attempt (stack overflow issue)
2020-08-20 18:34:59 +00:00
|
|
|
|
fn generate(map_size_lg: MapSizeLg, posi: usize, gen_ctx: &GenCtx, gen_cdf: &GenCdf) -> Self {
|
|
|
|
|
let pos = uniform_idx_as_vec2(map_size_lg, posi);
|
common: Rework volume API
See the doc comments in `common/src/vol.rs` for more information on
the API itself.
The changes include:
* Consistent `Err`/`Error` naming.
* Types are named `...Error`.
* `enum` variants are named `...Err`.
* Rename `VolMap{2d, 3d}` -> `VolGrid{2d, 3d}`. This is in preparation
to an upcoming change where a “map” in the game related sense will
be added.
* Add volume iterators. There are two types of them:
* _Position_ iterators obtained from the trait `IntoPosIterator`
using the method
`fn pos_iter(self, lower_bound: Vec3<i32>, upper_bound: Vec3<i32>) -> ...`
which returns an iterator over `Vec3<i32>`.
* _Volume_ iterators obtained from the trait `IntoVolIterator`
using the method
`fn vol_iter(self, lower_bound: Vec3<i32>, upper_bound: Vec3<i32>) -> ...`
which returns an iterator over `(Vec3<i32>, &Self::Vox)`.
Those traits will usually be implemented by references to volume
types (i.e. `impl IntoVolIterator<'a> for &'a T` where `T` is some
type which usually implements several volume traits, such as `Chunk`).
* _Position_ iterators iterate over the positions valid for that
volume.
* _Volume_ iterators do the same but return not only the position
but also the voxel at that position, in each iteration.
* Introduce trait `RectSizedVol` for the use case which we have with
`Chonk`: A `Chonk` is sized only in x and y direction.
* Introduce traits `RasterableVol`, `RectRasterableVol`
* `RasterableVol` represents a volume that is compile-time sized and has
its lower bound at `(0, 0, 0)`. The name `RasterableVol` was chosen
because such a volume can be used with `VolGrid3d`.
* `RectRasterableVol` represents a volume that is compile-time sized at
least in x and y direction and has its lower bound at `(0, 0, z)`.
There's no requirement on he lower bound or size in z direction.
The name `RectRasterableVol` was chosen because such a volume can be
used with `VolGrid2d`.
2019-09-03 22:23:29 +00:00
|
|
|
|
let wposf = (pos * TerrainChunkSize::RECT_SIZE.map(|e| e as i32)).map(|e| e as f64);
|
2019-06-04 17:19:40 +00:00
|
|
|
|
|
2019-08-22 19:03:42 +00:00
|
|
|
|
let (_, chaos) = gen_cdf.chaos[posi];
|
2019-12-03 18:14:29 +00:00
|
|
|
|
let alt_pre = gen_cdf.alt[posi] as f32;
|
|
|
|
|
let basement_pre = gen_cdf.basement[posi] as f32;
|
2019-10-16 11:39:41 +00:00
|
|
|
|
let water_alt_pre = gen_cdf.water_alt[posi];
|
|
|
|
|
let downhill_pre = gen_cdf.dh[posi];
|
2020-01-11 21:05:22 +00:00
|
|
|
|
let flux = gen_cdf.flux[posi] as f32;
|
2019-11-07 20:25:30 +00:00
|
|
|
|
let river = gen_cdf.rivers[posi].clone();
|
|
|
|
|
|
2020-02-01 20:39:39 +00:00
|
|
|
|
// Can have NaNs in non-uniform part where pure_water returned true. We just
|
|
|
|
|
// test one of the four in order to find out whether this is the case.
|
|
|
|
|
let (flux_uniform, /* flux_non_uniform */ _) = gen_cdf.pure_flux[posi];
|
2019-10-16 11:39:41 +00:00
|
|
|
|
let (alt_uniform, _) = gen_cdf.alt_no_water[posi];
|
2019-08-22 22:57:42 +00:00
|
|
|
|
let (temp_uniform, _) = gen_cdf.temp_base[posi];
|
2019-11-07 20:25:30 +00:00
|
|
|
|
let (humid_uniform, _) = gen_cdf.humid_base[posi];
|
2019-10-16 11:39:41 +00:00
|
|
|
|
|
|
|
|
|
/* // Vertical difference from the equator (NOTE: "uniform" with much lower granularity than
|
|
|
|
|
// other uniform quantities, but hopefully this doesn't matter *too* much--if it does, we
|
|
|
|
|
// can always add a small x component).
|
|
|
|
|
//
|
|
|
|
|
// Not clear that we want this yet, let's see.
|
(See sharp/lod-history) LOD, shadows, greedy meshing, new lighting, perf
---
Pretty much a Veloren fork at this point. Here's a high level overview of the changes (will be added to CHANGELOG just before merge).
At a high level this MR incorporates roughly two groups of changes.
The first group consists of new game features: more flexible map sizes, level of detail terrain, shadow maps, and a new lighting
engine. This is "feature work" that (mostly) only adds new things to Veloren, and mostly shouldn't affect old stuff.
The second big group of changes are those addressing the fallout from all the new features. These include performance fixes of
various sorts: the addition of multiple graphics options and optimization of the cheap ones to avoid work, switching all voxel
models to use some variant of greedy meshing, switching over much of our CPU-side vector math to exploit SIMD instructions
(coinciding with a fork of `vek`), and a rewrite of how the UI handles text rendering (coinciding with updates to our fork
of `conrod`). Making Veloren's hardcoded colors appear correct under the new lighting engine also required considerably
changes (TODO: Fill in this section when it's complete).
The second category of changes often heavily touches code owned by other people, including frequently modified code "owned" by a
handful of people, so I recommend that this code be reviewed particularly carefully.
---
At a high level (each will be described in more detail below):
- The world map has been refactored.
- The world size is no longer hardcoded (@zesterer).
- The map generation code was made generic to allow using it outside of the `world` crate (@zesterer).
- On world creation, we now compute *horizon maps* (@zesterer).
- The way we pass the world from the server to the client has been updated (@xMAC94x).
- Artifacts related to image rotation were fixed (@imbris).
- Multiflow rivers were enabled (@zesterer).
- In the process of making changes related to the world map, various incidental fixes and optimizations were required.
- The new *level of detail* feature was added (@zesterer wrote part of this and has checked out the rest).
- A new LOD terrain rendering step was added to the pipeline.
- The LOD terrain quality was made configurable via a graphics setting.
- Horizon maps were used to cast shadows from LOD chunks on both LOD and non-LOD terrain.
- A "voxelization" effect was incorporated into rendered LOD terrain to make it blend better into the world.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Veloren's lighting has been completely overhauled (@zesterer has already checked most of this out).
- A semi-accurate index of refraction was assigned to our materials.
- A new, more realistic, physically based approach to lighting was used using the *Ashikhmin Shirley* BRDF.
- We emulate *atmospheric scattering* using equations designed for measuring solar panel light exposure.
- We attempt to compute *realistic light attenuation* in water using its real material properties.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Point and directional lights now cast realistic shadows, using *shadow mapping.* (@imbris, @zesterer, @Treeco, @YuriMomo)
- Point light shadow maps were added to the rendering pipeline, using geometry shaders and *seamless cube maps*.
- Directional light shadows were added to the rendering pipeline, using LISPSM together with disabling *depth clamping*.
- "Shadow-only" chunks and NPCs were added to prevent shadows from models behind you from disappearing.
- In the process of making changes related to shadow maps, various incidental fixes and optimizations were required.
The addition of shadow maps, LOD terrain, and the new lighting all led to significant performance degradation, on top of other
changes happening in master. Therefore, a large number of performance improvements were also needed:
- The graphics options were made much more flexible and configurable, and shaders were optimize.
- New options were provided for how to render lights and shadows (@Pfauenauge, @zesterer).
- Graphic setting storage and configuration were overhauled to make adding new features easier (@Pfauenauge, @imbris).
- Shaders were rewritten to utilize GLSL's preprocessor to avoid overhead (@zesterer, @YuriMomo).
- In the process of making changes related to providing additional rendering options, various incidental fixes and optimizations were required.
- Voxel model creation was switched to use *greedy meshing.*
- A new voxel meshing method, greedy meshing, was added (@imbris).
- Uses of the older meshing methods were migrated to use greedy meshing (@imbris, @jshipsey, @Pfauenauge).
- New restrictions were added to terrain, figure, and sprites to future proof them for further optimizations (@jshipsey, @Pfauenauge, @zesterer).
- Most positions are now relative to either chunk or player position for better precision (@imbris, @zesterer, @scottc).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- Animation and terrain math were switched to use SIMD where possible.
- Fixes were made to vek to make its SIMD feature usable for us (@zesterer, @imbris).
- The interface and types used in bone animation were changed in various ways (@jshipsey, @Snowram, @Pfauenauge).
- Redundant code generation for body animation is now partly taken care of by a macro (@jshipsey, @Snowram, @Pfauenauge).
- Animation code was modified to to use vek's SIMD representation where possible (@jshipsey, @Snowram, @Pfauenauge).
- Terrain meshing code and shadow map math were also modified to use vek's SIMD representation (@imbris).
- SIMD instruction generation was enabled (@YuriMomo, @jshipsey, @Snowram, @imbris, @Angelonfira, @xMAC94x).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- The way we cache glyphs was completely refactored, fixed, and optimized.
- Our fork of `conrod` was optimized in various ways (@imbris).
- Our fork of `conrod` now exposes whether a widget was updated during the current frame (@imbris).
- Our use of the glyph cache was rewritten for correctness (@imbris).
- A *text cache* was introduced that lets us skip remeshing glyphs that have not changed (@imbris).
- Various changes were made to reduce pressure on the glyph cache, with more planned (@imbris, @Pfauenauge).
- In the process of making changes related to the glyph cache, various incidental fixes and optimizations were required.
- Colors were changed to keep Veloren's look consistent with master.
- Some older tree models were brought back (@Pfauenauge).
- TODO(@Sharp): All hardcoded colors were extracted and made hotloadable.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Hardcoded colors were fixed to conform to Veloren's style.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Color models were fixed to conform to Veloren's style.
A detailed description of the involved changes follows.
---
- The world size is no longer hardcoded. All functions dependent on world size now take a `WorldSizeLg`, which holds the base 2 logarithm of each actual world dimension and is guaranteed to maintain certain properties (outlined in `common/src/terrain/map.rs`). Additionally, many utility functions that utilize the world size were moved into `common` as well (mostly `common/src/terrain/mod.rs`). Finally, the world map format was updated in order to store its size explicitly, with a migration path from the old format that should work whenever the old formatted map was a square (practically always). See `world/src/sim/mod.rs` for these changes.
- The map generation code was made generic to allow using it outside of the `world` crate. The parts of the map generating code that do not need to query the world were moved over to `common/src/terrain/map.rs`, allowing them to be used from the client without creating a dependency on `world`. The rest of it was turned into helper functions in `world/src/sim/map.rs`, which can be passed as closures to the generic map generation code to complete its construction. This also means that colors are now passed in separately to the map generation function. See <https://veloren.net/devblog-78/> for more details.
- On world creation, we now compute *horizon maps*. See the function in `world/src/sim/util.rs`.
Given a height map and a plane intersecting that height map, our horizon maps allow us to encode enough information to reconstruct shadows for each point on the height map using only the *horizon angle* (the angle at which the sun starts to become visible). As Veloren's sun only covers one plane, this is sufficient for encoding sun shadows for LOD terrain, by encoding two angles per chunk (one for each 90 degrees the sun covers). We can also use this for the moon, if we want, since the moon follows the same path. Additionally, we store the *height* of the furthest occluder, to try to make the shadows volumetric; so this means 4 bytes in total for each chunk.
Support for horizon maps has been merged into the map functionality in common as well.
- The way we pass the world from the server to the client has been updated. Rather than passing the prerendered map, we instead pass three maps with values for each chunk; one with the color information, a second with altitude information, and a third with horizon map information. We then reconstruct the map on the client, together with some additional information we send from the server (like the sea level and maximum height). See `common/src/msg/server.rs` for a detailed description of the format of `WorldMapMsg`, and `server/src/libr.rs` and `client/src/lib.rs` for details of the map construction and parsing.
- Artifacts related to image rotation were fixed. See the commit message for commit SHA `cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e` for a detailed explanation. This involved changes to shaders, the addition of a new type of graphic (also reflected in the graphic cache) that allows specifying a border color (which automatically makes the associated texture immutable), and some related fixes. I reproduce the first two paragraphs of the MR description as well:
```
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
```
- Multiflow rivers were enabled.
This does not really need to be part of this MR, and would be easy to revert, but since it seemed to provide a nice improvement it's currently packaged with it.
We already computed multiple outflows from each chunk for erosion purposes long before this MR.
However, we never modified river rendering to be able to handle this case (just a single downhill river flow is complex enough!) so this was not exposed when deciding which chunks were rivers.
Now that
- In the process of making changes related to the world map, various incidental fixes and optimizations were required. Some examples of fixes include making sure terrain is never lowered to below sea level (to make the shadow maps report correct values), fixing map altitudes and colors to understand things like cliffs and "block level" coloring (that doesn'te xist on the column level), and fixing a crashbug when rendering images for the UI where source pixels are strongly rectangular. Some examples of related performance fixes include avoiding allocating a fresh vector for all the maps (i.e. copying it over to change the format from `[u32; n]` to `DynamicImage` and then copying again to convert to `RgbaImage`), and instead using the `gfx::memory::slice` function to accomplish the same thing. These sorts of changes are spread all arond the code.
This includes the additon of a new scene, `voxygen/src/scene/lod.rs`, a new pipeline `voxygen/src/render/pipeline/lod_terrain.rs`, and new shaders `assets/vxygen/shaders/lod-terrain-vert.glsl` and `assets/vxygen/shaders/lod-terrain-frag.glsl`, as well as associated changes to the renderer in `voxygen/src/render/renderer.rs`.
The main idea behind our initial approach to LOD was to take the world data we now get from the server (altitude, color, and horizon mapping).
- Some previously computed values were turned into shader uniforms for better prediction on weak processors. (@zesterer)
- Calls to power or trig functions were removed or replaced with multiplications, where possible.
- After some deliberation
- To properly handle sprite "waving" for nearby sprites,
We explicitly designed the greedy meshing system with figures and sprites in mind.
In both cases, we want to be able to *efficiently* pack many different models into the same texture, especially in cases where we know
we will either not be removing any of the grouped-together from the models from the texture, or will remove all of them at once (so
they can be packed into some specific subtexture).
For sprites, since we know every model in advance and never intend to deallocate them, we currently pack them all as efficiently as
possible into one giant tetxure atlas. However, in the future we might opt to pack them slightly less efficiently in exchange for
shrinking the sprite vertex size.
For figures, we pack all the textures for each *model* into the same atlas.
is a global texture atlas used for every sprite, and for figures which is why we have the ability to mesh multiple
models to the same texture area (using the simple texture atlas allocator) without requiring intermediate vector allocations.
This is accomplished by delaying the time when we actually write the color and light data to the texture until *after* all the
model vertices have been meshed; then, we can just allocate the whole color/light array at once, making the atlas we use an
exact fit. In computer science-y terms, we accomplish this delay by, after we perform the initial greedy meshing (without
texture information), not continuing to create the texture data, but instead constructing a *continuation*--that is, a function
that, when called, will execute the rest of the computation. We push this continuation (which in Rust terms is a `FnOnce` closure
that takes the `ColLightsInfo` that it is supposed to write to as context) onto a
onto a vector
resizing. To allow for suspended writes to texture data, Rust pointed out to me that the continuation that would eventually write the color and light data to the texture atlas (the one that is shared by all models sharing the same greedy mesher) would have to *own* whatever data it mshed. Because we often generate the model data to mesh as a temporary in `voxygen/src/load.rs`, the
- Matrix multiplications in the shader were reduced for figure data (@zesterer).
- Vertex "waves" for fluid data were removed.
- Terrain "bending" near edges was removed.
- Scaling was fixed to make sure empty space was not introduced in a space previously occupied by a block. It was also changed to take ownership of its voxel data,
rather than sharing it, to let it be used with meshing.
- Rust's nightly version was bumped in order to use the `array_map` function, which lets us reuse more code between the simple map and `FigureModelCache`.
- PositionedGlyph::standalone.
---
I tried to cite sources in many cases[^realtime],[^lloyd],[^lispsm],[^pbrt],[^greedy],[^tjunctions]
where I needed features from elsewhere but I am particularly grateful for the following resources,
esepcially where they have accompanying source code. I linked all of them that are accessible to the public (those that are not were
obtained through legal means).
[^realtime]: Eisemann, Elmar, Michael Schwarz, Ulf Assarsson, Michael Wimmer. Real-Time Shadows. A K Peters/CRC Press (T&F), 20160419.
[^lloyd]: Lloyd,B. 2007. [Logarithmic perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). PhD thesis, University of North Carolina.
[^lispsm]: Wimmer, M., Scherzer, D., and Purgathofer, W. 2004. [Light space perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). In Proceedings of Eurographics Symposium on Rendering 2004, pp. 143– 152.
[^pbrt]: Pharr, Matt, et al. [http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf](Physically Based Rendering: From Theory to Implementation). Third edition, Morgan Kaufmann Publishers/Elsevier, 2017.
[^greedy]: mikolalysenko. “Meshing in a Minecraft Game.” 0 FPS, 30 June 2012, <https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/>.
[^tjunctions]: blackflux. “Meshing in Voxel Engines – Part 1.” Blackflux.Com, 23 Feb. 2014, <https://blackflux.wordpress.com/2014/02/23/meshing-in-voxel-engines-part-1/>.
I am also especially grateful to Khronos, Wikiepdia, and stackoverflow for answering many of my specific questions while writing the MR.
---
Squashed commit of the following:
commit 300505e7305a2fdac722a808ee8538323f215f39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 18:46:25 2020 +0200
Fixing cargo doc and typo in CHANGELOG.
commit ec0aeb18e8499d7d84ef818331b4b65c3d76cea6
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 15:38:50 2020 +0200
Hopefully final commit for the LOD branch.
commit 5e8ea0b1eaac02903a02feb2eb038d195de4872f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 10:14:26 2020 +0200
Falling back to power as stopgap.
commit e44a1cbf46504ee9931a01bdc9033e145500d557
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 09:25:41 2020 +0200
Address imbris feedback.
Temporarily disables shiny water, lowers max VD.
These restrictions will be lifted soon after merging.
commit 561e25778a108ac3712f5ec2ce3a51234c4430d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 08:31:13 2020 +0200
Tweaking shaders a bit.
commit 7d19259078ce0dd7b3742ad7d0cb3fab3ece3fdc
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:59:43 2020 +0200
Fix view example as well.
commit 051cd4934e0fad2c0b15db4380a4189fa318679f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:29:06 2020 +0200
Fix meshing benchmark.
commit c95e07db3b4dcca285678985e65e31b927cb1c61
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 05:46:22 2020 +0200
Address MR feedback, fix scene clouds.
commit 1bfb816cabdb3ffc1e507a009c2d98696b4b573a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:39:36 2020 +0200
Incorporating Pfau's figure color changes.
New eyes and new humanoid colors.
commit 3f9b89a3ac7b3356b1dba0d1a8f6541357f81469
Merge: e2f5162e4 62c53963a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:29:41 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit e2f5162e4f96f4124aa43488f7245d341b3dcfd4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:28:38 2020 +0200
World colors are all hotloadable.
They live in assets/world/style/colors.ron.
Only a small handful of hardcoed colors remain in World; they are either
part of the map, or difficult to disentangle from the rest of the
computation. Comments are made where appropriate.
commit 62c53963abe1975009d34a8f9515a355bef24f31
Author: Marcel Märtens <marcel.cochem@googlemail.com>
Date: Wed Aug 19 15:59:00 2020 +0200
replace pretty_env_logger with tracing
commit 5b1625f99d9586fe80e2232f583ec5af9f953099
Merge: d71003acd 4942b5b39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:15:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit d71003acdabeff970b3928e97c26af6847b5b78e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:14:34 2020 +0200
Hotloading colors, part 1: colors in common.
Currently, this just entails humanoid colors. There are only three
colors not handled; the light emitter colors in
common/src/comp/inventory/item/tool.rs. These don't seem important
enough to me to warrant making hotloadable, at least not right now, but
if it's needed later we can always add them to the file.
commit 63b5e0e553eb2ea49276f192a6fc7dd65254270d
Merge: c32b337a4 6d2c4b9c1
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 13:05:37 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c32b337a46e10d9de473d178a94a3ccd61c39bb3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:52:04 2020 +0200
Fixing LOD grid, for real.
commit a166ae0360395387e09fb35a1f84210c2ce5ec24
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:28:05 2020 +0200
Addressing imbris's initial feedback.
Fixes two minor bugs: explosion particles were no longer spawning
randomly, and LOD grids were not perfectly even.
commit 4cbad004f44060994252dd3d38647a14a589712f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:27:58 2020 +0200
Bumping nightly per request.
commit 548680276aac77c25d43d16b5622f847d474dbef
Merge: acc098604 8f8b20c91
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:26:06 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit acc0986040589a3492f88a740bc3c3fc693b26d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:28:32 2020 +0200
Lower resolution due to lying drivers.
commit d3b878de2a52c358d2944a6bbd0555dad7fbdb10
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:15:38 2020 +0200
Fix issues msh encountered with Intel 4600.
commit 10245e0c1b0cb6fae10d86409435364edc6102ef
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 21:15:02 2020 +0200
Merge more models into one mesh than we did previously.
commit 3155c31e663c52ae5c3a53d5fb5665892a1a498a
Merge: 7204cc8a7 3c199280e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:35:22 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7204cc8a7a4f74a30306bd205d9834fee4bb944f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:34:43 2020 +0200
Fix not yet done NPC animations.
This forces them all to be the idle animation if not specified.
This fixes issues where you'd have giant NPCs in water.
commit bc83360f2a08918f19d417b5f772e1ff554dba08
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 19:36:37 2020 +0200
Try to fix some bugs:
- Z fighting with LOD terrain and water.
- Audio SFX not playing.
commit 1fd104aa603bf3781b6526a5cada46aeca3049dd
Merge: 862df3c99 7c2c392a3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 12:02:31 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 862df3c9976c4da9bd7cfd784f1a85973127968a
Merge: 0a4218ed9 75c1d4401
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 05:52:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0a4218ed9d541a2b34c133351bea38a99ddf4ea7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 22:27:14 2020 +0200
Fix particle depth.
commit f51dfdeb442d0dd5243dd2f344fa4be295bd0875
Merge: c6251a956 5e6dc0471
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:19:04 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit c6251a956ad376400dca5c23420cf8d213dc8fdf
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:15:46 2020 +0200
Cache figures more intelligently.
Cache figures for longer, and don't cache character states for the
player except where they actually affect the rendered model.
commit 0ed801d5404982c6fb63b1eaa4567d908b294c9d
Merge: c11b9bdf0 eea64f78f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 16:32:24 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c11b9bdf0a53bf9884d2f5a48fec9b01d582df1a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 11:47:15 2020 +0200
Remove unneeded Clippy annotation.
commit 16aa9ef40af56d69289d00aafb3deadfb8bd4f35
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 8 00:53:02 2020 +0200
Fix hotloading and Clippy.
commit 3dc973e0be5b758da1e9805eb764ad401374cd0c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 23:50:27 2020 +0200
Major speedups with SIMD.
commit fba64a7d93d5a96077ce87287bbce6ab9b7fbcae
Merge: 76429d00e d1e10b178
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:19 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 76429d00eea00d212fbd672a84ee91e75b19b938
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:10 2020 +0200
Add clippy.toml.
commit c79f512f84dbb83cb82b7954db68ff241dfd8e41
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 11:55:20 2020 +0200
Fix all clippy issues, clean up Rust code.
commit 6f90e010b3fbefb53b0d632e819931350015b6b8
Merge: 77a8c7c26 5929cfa5c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:30 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 77a8c7c267d3f44a1a62bd6b2274359973c5e4d4
Merge: b44e44232 44febaabd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:10 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 5929cfa5c713aa392110bbb62407f76caf53c3df
Author: jshipsey <jshipsey18@gmail.com>
Date: Thu Aug 6 20:47:27 2020 -0400
fixed in-hand arrow bug
commit b44e442325d828f1cd564d66908f89d09e80474b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 6 13:40:35 2020 +0200
Miscellaneous performance improvements.
commit be37acf287c1360d8085862526ac3365ffd1d768
Merge: 125d7fc6c c11876547
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 05:49:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 125d7fc6c4dcd8c8c5f27b8268a4d64f409f3644
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 04:55:31 2020 +0200
Abstract over simd vs. repr_c vectors.
Also some minor improvements to Event size.
commit d4d4956e9252e1241ce110b2aa85076c6b1e2a23
Merge: 5f3b7294a aced5f979
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:56:54 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 5f3b7294af1f8533edc2620b58863c248e2b07af
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:43:52 2020 +0200
Fix formatting issues I missed before.
commit a428a3ebba70dcab63dd0f8cd983120c90617271
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:41:51 2020 +0200
Fix clippy warnings, part 1.
There aer still a bunch of type too complex and
function takes too many arguments warnings that I'll fix later
(or ignore, since in the one case I did fix a function takes too
many arguments warning I think it made the code *less* readable).
commit ba54307540ed8a937ac08209730284fc653af85b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 30 13:22:42 2020 +0200
Fix light animations so they are removed when the light turns off.
commit 7e0f4bcbf0f4717145d8beac40d52e3acebbe2aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 21:10:20 2020 +0200
Fix crash in edge case for pixel art.
commit 56da06f7a351e2b949e9b014a90b974d511a0924
Merge: cf74d55f2 9f53a4a19
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:56:52 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:29:52 2020 +0200
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
The first concern was addressed by fixing the dimensions of the map
images drawn from the UI (so that we always use a square source
rectangle, rather than a rectangular one according to the dimensions of
the map). We also fixed the way rotation was done in the fragment
shader for north-facing sources to make it properly handle aspect ratio
(this was already done for north-facing targets). Together, these fix
rendering issues peculiar to rectangular maps.
The second and third concerns were jointly addressed by adding an
optional border color to every 2D image drawn by the UI. This turns
out not to waste extra space even though we hold a full f32 color
(to avoid an extra dependency on gfx's PackedColor), since voxel
images already take up more space than Optiion<[f32; 4]> requires.
This is then implemented automatically using the "border color"
wrapping method in the attached sampler.
Since this is implemented in graphics hardware, it only works (at
least naively) if the actual image bounds match the texture bounds.
Therefore, we altered the way the graphics cache stores images
with a border color to guarantee that they are always in their own
texture, whose size exactly matches their extent. Since the easiest
currently exposed way to set a border color is to do so for an
immutable texture, we went a bit further and added a new "immutable"
texture storage type used for these cases; currently, it is always
and automatically used only when there is a specified border color,
but in theory there's no reason we couldn't provide immutable-only
images that use the default wrapping mdoe (though clamp to border
is admittedly not a great default).
To fix the maps case specifically, we set the border color to a
translucent version of the ocean border color. This may need
tweaking going forward, which shouldn't be hard.
As part of this process, we had to modify graphics replacement to
make sure immutable images are *removed* when invalidated, rather
than just having a validity flag unset (this is normally done by
the UI to try to reuse allocations in place if images are updated
in benign ways, since the texture atlases used for Ui do not
support deallocation; currently this is only used for item images,
so there should be no overlap with immutable image replacement,
so this was purely precautionary).
Since we were already touching the relevant code, we also updated
the image dependency to a newer version that provides more ways
to avoid allocations, and made a few other changes that should
hopefully eliminate redundant most of the intermediate buffer
allocations we were performing for what should be zero-cost
conversions. This may slightly improve performance in some
cases.
commit ad18ce939940a8c697270f6e9b94db9942fd8295
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 13:21:09 2020 +0200
Fix continent scale hack.
commit 36b1cb074f5b195aebd7dbbc3da7f0246a1a18ec
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 12:11:40 2020 +0200
Enable loading different sized maps without a recompile.
We may want to tweak the effects of the continent_scale_hack.
commit 13b6d4d534cc4814b7cb3294ca41bbfea0a6b186
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 10:55:48 2020 +0200
Removing WORLD_SIZE, part 1.
Erased almost every instance of WORLD_SIZE and replaced it with a local
power of two, map_size_lg (which respects certain invariants; see
common/src/terrain/map.rs for more details about MapSizeLg). This also
means we can avoid a dependency on the world crate from client, as
desired.
Now that the rest of the code is not expecting a fixed WORLD_SIZE, the
next step is to arrange for maps to store their world size, and to use
that world size as a basis prior to loading the map (as well, probably,
as prior to configuring some of the noise functions).
commit 30b1d2c6428230a9eaa0d749cdcbbd6f1cbccd78
Merge: 7d56ba31b 1377b369f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:58 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 7d56ba31b445441461b28a07fc495d7d4f047c17
Merge: 2101113b4 598f14b25
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 1377b369f6db2258e910d467a5740f31789e3ded
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sun Jul 19 23:25:38 2020 +0200
more saturated pumpkins
commit ae8d50527f93bb0616c2ad46ce4dacb63bc37c6d
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sat Jul 18 20:29:56 2020 +0200
acacia models
commit 2101113b467e691de787392d7f20f1745f5637bd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 18 18:55:25 2020 +0200
Higher detail LOD.
commit add2cfae04b4385fa5590e11e2bd5229d9dee0aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 16 01:57:39 2020 +0200
Revert some irrelevant stuff.
commit 2e2ab3dc1eaa59a4aef7f8d34a53d8aae4c8553a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 15 13:30:49 2020 +0200
Fixing various things about shadows.
* Correcting optimal LISPSM parameter.
* Figure shadows are cast when they're not visible.
* Chunk shadows stay cast until you look away.
* Seamless cubemaps for point lights.
* Etc.
commit 6c31e6b56217274285b597af297036691ea5d897
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 19:50:26 2020 +0200
Fix shadow creation.
commit 6332cbe006115ae205597529cd8bbccd146c2cca
Merge: be438657c 930e0028b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:47:00 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit be438657c33d7b5bfb0a9582c3ed3fd366637323
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:28:08 2020 +0200
Tweaks to shadows.
Added shadow map resolution configuration, added seamless cubemaps,
documented all existing rendering options, and fixed a few Clippy
errors.
commit 23b4058906013c7d2a40c286e20e32c5fbd897ed
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 10:11:19 2020 +0200
Fix moon, use nonlinear noise for terrain.
Note that the latter has a bit of performance cost.
commit 7fbe5cbfbb9dc29607957b8e62f432a4deed193d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:23:02 2020 +0200
Address lies about max texture size.
commit bcfc62b5e13a1cdd83f57535fde4694720bebfd9
Merge: 75e3626a7 18a08e8fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:22:08 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 75e3626a785919f43fdcf2127c2b10e3e4df2f9f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:21:52 2020 +0200
OpenGL 3.3 minimum.
commit 18a08e8fe2739f02af99a5d2cb4e7c38c49e858b
Author: Monty Marz <m.marzouq@gmx.de>
Date: Tue Jul 7 23:57:52 2020 +0200
settings localization
commit 90c5d1ca3620092bc3ae10b2211489eb1cf6f5e8
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 21:11:48 2020 +0200
Lower near distance.
commit 0e66f02b25aaddaa2dfddbbc89cd67de54a9a7b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 20:09:01 2020 +0200
All sprites sway in the wind now.
commit db1401a6910bf42dcf502462c90038752ff5fbdb
Merge: 69e508d8c e8b4b29d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 19:34:17 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 69e508d8c94d8973033817ca86f357e466fc7c4d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 18:41:37 2020 +0200
Make it easy to switch to SIMD for math.
commit ffe0f5928c7a7e87d00cb5426b3b1d831d7e02fd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 21:21:12 2020 +0200
Fix some issues with underwater rendering.
commit bfda6da42f38fd02c31ee92c81ab785a3e50c2a0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 19:17:59 2020 +0200
Fix some minor display issues.
commit 0ed752e087968cf901301884aaeae698e32ef8a5
Merge: ccc6a06a8 518edcb85
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:14:21 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit ccc6a06a8d4504d6b9f7af7905a414d2ee06ab76
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:04:34 2020 +0200
Some minor changes.
commit 4e020246702889269efe1a191788992164c508d6
Merge: 50a64d927 e05c9267a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 16:17:40 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 50a64d927e6c4f4b0e4688e4cbfca694bc3f922a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 13:07:03 2020 +0200
Fix far plane.
commit 7dd06da34cae8f9ea3b6c889fe965181f3fd3949
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:25:35 2020 +0200
Add shadows.glsl.
commit 618a18c998778bf871b905a74657440fcc384c80
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:10:22 2020 +0200
Adding shadows, greedy meshing, and more.
commit eaea83fe6a5cb1cb0ba8beef888183c718258496
Merge: 267018495 2f89b863e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 22:47:07 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 2670184954a13e4a9e7a4e35ba79aac0c5fac2f7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 21:20:01 2020 +0200
Make civsim and sites deterministic.
For anything in worldgen where you use a HashMap, *please* think
carefully about which hasher you are going to use! This is
especially true if (for some reason) you are depending on hashmap
iteration order remaining stable for some aspect of worldgen.
commit f8376fd5dc72b4a9c2f51a6b4570d59c8b8e9343
Merge: 654f7e049 cdee191dd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 17:53:57 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 654f7e049258d9da27c09608bbe6a46ffa8787e5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed May 20 21:22:30 2020 +0200
Correct backface culling.
commit 560501df05ca725409b0f2e4eb31bdfdc15fd0c7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue May 19 17:22:06 2020 +0200
Greedy messhing for shadows.
commit a4d87e1875ca543436e6bbbeb20348facc5a52d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun May 17 05:59:00 2020 +0200
Shadow maps work for lantern.
commit 243d0837b8a3b08172c9a3c348d964d7ddc2a0a8
Merge: 04382dc28 71dd520cd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:53:13 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 04382dc28632b6c66e8821f6870c0daaa1c1901a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:22:17 2020 +0200
WIP: better graphics config, better LOD, shadow maps.
commit 22ddbad3eb32bfa70f0932176022208fe67ded81
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 18:54:09 2020 +0200
Minor shader fixes.
commit 746a10e8d01ac235f994b0cde78fa48998602a1f
Merge: 0f4a0e763 40ab94673
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 04:02:09 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0f4a0e763db3afbdc4fb0558611f38326ca87151
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 23:03:24 2020 +0200
Switch back to pop-in terrain.
commit dd74fa7e4a53667b38811d7aec58d7f6a68889bb
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 22:58:55 2020 +0200
LOD shading closer to voxel shading.
commit ef67bd58ba0bdaf622b078892d768263b6cba268
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 28 20:49:03 2020 +0200
Experimental underwater lighting.
commit 2c5ad9d07605e80d5fd5679dd3a5d70c605b86a9
Merge: 748279835 303967a6f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 22:35:24 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7482798354eda18c8207950080fc24d443a369de
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 21:59:55 2020 +0200
Replace discard in figure-frag.
commit d83b4ae69be4912f69bf7835f509c68a1c7770a4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:45:57 2020 +0200
Fix sprite lighting, HDR from focus_pos.
commit 0594238004f116274905fa0ed7c2b6c417ed1d29
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:14:10 2020 +0200
Proper HDR from point lights.
commit 48c93d2b41ce5743103d18e76cc228f5ac766492
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 14:01:43 2020 +0200
Brighter ambiance, darker LOD shadows.
commit e0452e895ccfa8a43f368cae3b8b8aedc24dad93
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 13:13:23 2020 +0200
More proper HDR.
commit 4c6da3ed16cfeebb455e40da5f557b4af9a499d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 00:13:10 2020 +0200
Trying LOD noise.
commit 682a3d74c85df5503ffe1fc1cc891bce789df1ad
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 23:11:08 2020 +0200
Fix LOD heights in towns.
commit cc39e5734e8b18f9077bf42e66337c1319dd6b6e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 21:01:23 2020 +0200
More LOD fixes.
commit 8116b21c2e51c836e77894e309ac273caf2917b3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:54:43 2020 +0200
I like this coloring.
commit bc2560ea90b36f4b46190005344232d993043ac3
Merge: 14effdd5d e690efe71
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:48:33 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 14effdd5db8747fcf3eb34f03b46b7792e92d1c5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:24:35 2020 +0200
Re-saturate.
commit 48a643955d4435b78179acba0beb4a979905cc31
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:23:57 2020 +0200
Various fixes.
commit f7b497a0c25f4ad4682c71dd1ed6f608052feb9b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 03:22:49 2020 +0200
Render figures again.
commit 44e4aad48deba8266b9f8bdfd3db096b381f5327
Merge: e6f0a5a98 9ec319a18
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 02:01:04 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit e6f0a5a981a82533ba188fff0a54ce98577bb152
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 24 16:12:20 2020 +0200
Add atmospheric scattering.
commit f2953087f691a8edbc001cb98ebf5059fc6f8ac0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 23 00:01:20 2020 +0200
Fix shadowing for specular reflections.
commit ddd4a67a9799b8d08c7dc0c2bec90621c2bed0e3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Apr 22 22:56:12 2020 +0200
HDR fixes.
commit 1015e60deef3c447381996277df7496707a63bd0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 21 18:25:19 2020 +0200
More lighting changes.
commit 80c264abd111fb237e57843efcb5c071d4f84613
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 13 00:29:59 2020 +0200
Lighting experiments.
commit 8414987e589dd5102bad89762a3adaccc0bfe957
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 9 02:38:40 2020 +0200
WIP -- lighting changes and soft shadows.
commit 9cd2b3fb0d6b49776c6dfe463e4169637250b11a
Merge: c7ea687eb 8b149ad11
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:29 2020 +0200
Merge branch 'sharp/new-lighting' into sharp/small-fixes
commit c7ea687ebbc5aace1b455f134a5bf49ce2c7434a
Merge: 476441531 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:02 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 8b149ad11ad4bb75018fcf9519baec27d1c95951
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:32:39 2020 +0200
Trying out a new lighting model.
commit b0ac9f36f755dd06f7c17c46150568064790864f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 07:56:11 2020 +0200
Use bicubic interpolation for terrain.
commit f6fc9307a121514b614bc50ef8eb055953e7da8a
Merge: 33140a295 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 05:01:41 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 4764415312aae6e9ac2d00e86e84577cb958f1ab
Merge: ed2d0111d 13388ee6a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 04:54:48 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 13388ee6a42943f3f79a9cb488346cef18e272fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 20:30:08 2020 +0200
Various fixes (to coloring and to soft shadows).
commit fbd084a94a067082a87cd6d28b82054709bc9265
Merge: 5a089863b 4fdf6896a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 18:50:38 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/map-colors
commit ed2d0111d994262ae836d84d1fe5a45e4de72a0b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 06:49:27 2020 +0200
Combining colors and LOD.
commit 88342640c6b835114d01c797b89fdede3b0a2108
Merge: 33140a295 5a089863b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:49:20 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 33140a2951b8212725f42c758b277aaec4d888f7
Merge: 4c65a5aed f34d4b379
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:36:21 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 5a089863beb01d4794bbe3580ada47b278715ea2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 03:17:49 2020 +0200
Making maps brighter.
This is probably not the right way to do it, but oh well!
commit 32b2c99109dd486aa922886081068f9c550c83f2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 02:46:36 2020 +0200
Horizon mapping and "layered" map generation.
Horizon mapping is a method of shadow mapping specific to height maps.
It can handle any angle between 0 and 90 degrees from the ground, as
long as know the horizontal direction in advance, by remembering only a
single angle (the "horizon angle" of the shadow map). More is explained
in common/src/msg/server.rs. We also remember the approximate height of
the largest occluder, to try to be able to generate soft shadows and
create a vertical position where the shadows can't go higher.
Additionally, map generation has been reworked. Instead of computing
everything from explicit samples, we pass in sampling functions that
return exactly what the map generator needs. This allows us to cleanly
separate the way we sample things like altitudes and colors from the map
generation process. We exploit this to generate maps *partially* on the
server (with colors and rivers, but not shading). We can then send the
partially completed map to the client, which can combine it with shadow
information to generate the final map. This is useful for two reasons:
first, it makes sure the client can apply shadow information by itself,
and second, it lets us pass the unshaded map for use with level of
detail functionality.
For similar reasons, river generation is split
out into its own layer, but for now we opt to still generate rivers on
the server (since the river wire format is more complicated to compress
and may require some extra work to make sure we have enough precision to
draw rivers well enough for LoD).
Finally, the mostly ad-hoc lighting we were performing has been (mostly)
replaced with explicit Phong reflection shading (including specular
highlights). Regularizing this seems useful and helps clarify the
"meaning" of the various light intensities, and helps us keep a more
physically plausible basis. However, its interaction with soft shadows
is still imperfect, and it's not yet clear to me what we need to do to
turn this into something useful for LoD.
commit f8926a5737ddc51f3d585c651a64c43677aae0f4
Merge: a1aee931e 875ae6ced
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Mar 13 13:32:42 2020 +0100
Merge remote-tracking branch 'origin/master' into sharp/map-colors
commit 4c65a5aed353b119aea65a2aaeb94549b67beb42
Author: Treeco <5021038-Treeco@users.noreply.gitlab.com>
Date: Mon Feb 24 16:48:05 2020 +0000
Made LOD setting slider exponential
commit 2fa7b2d20d7233dc8bfd64f9f7f54617575248f1
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 17:49:53 2020 +0000
Added mist to LoD
commit aab059a450b5f635777129ff82cc15b662965c3c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 15:14:06 2020 +0000
Added LoD slider
commit 779c36b538121c5ade3633ae5cb67bb14c8c3877
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:54:55 2020 +0000
Reduced cost of vertex pushing
commit 9fea150473906b166365b738ebcea07c697daf3d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:38:53 2020 +0000
Fixed maths, improved LoD resolution
commit 5481df38fea5bf183ff376a3337179cfaa5233dc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 11:22:50 2020 +0000
Dynamically relocate LoD vertices to enhance details
commit a3e36a50ababd615da7db1b26158c7906a5def01
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 18:13:51 2020 +0000
Simpler terrain spiral rendering
commit 255f450ae9ac8763db4bede075fb409161ed57cc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:53:17 2020 +0000
Better LoD precision
commit 3d027aebe812a5b8658a4eb8123dc9f61b3776d2
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:04:03 2020 +0000
Better falloff
commit be775c9484b457b2c0b1a494aec03392d0c70e76
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 15:30:45 2020 +0000
Applied good ideas from experimental branch
commit 58587b68545a23c5c04ab4574a4b94b3bc982246
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 16:15:13 2020 +0000
Minor fixes to LoD merging
commit 7b42aebd709c14df2db766aad61d9280ad24d84d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 15:04:44 2020 +0000
Capped LoD dragging
commit 8aafc559f87124e1ea5ca6e3ddc2aa0c242d793c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:54:37 2020 +0000
Better blending between LoD and terrain border
commit edd3455d5161792d87ddc8eadc0ecbad5532b284
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:40:19 2020 +0000
Fixed LoD z depth, added sea level offset
commit b9b06744620114dd5556e73f64fa93c145503a7c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:27:43 2020 +0000
Better LoD smoothing
commit a1aee931e790431560cd2d953ad61d9497072afd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Feb 21 14:52:17 2020 +0100
Adding shadows.
commit 2400786c13dd891c131ed86d48d05df516a8a778
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 13:48:40 2020 +0000
Use world map as LoD source
commit dbf650f504a4c25fbbc2096ac3616c736bf52d23
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Jan 20 00:48:14 2020 +0000
Better clouds at distance
commit 5e6f81b86cdb9730b9b056877b19257075fd5fa8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Jan 19 23:59:02 2020 +0000
sync
commit 745e7540ddb000cc645f612767b337c2ddc3f7c0
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 12:40:48 2019 +0000
Improved cloud falloff mist, faster noise sampling
commit f6a200d0cb866196ba57697466755f9e0c7ea5d8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 10:09:00 2019 +0000
Improved long-range depth precision, removed unnecessary LoD polygons
commit 63d1b2bb2292898d59fb4f4e502201103dfeb86f
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 20:57:46 2019 +0000
Working LoD shader
commit f13d98ee3e58f881e8b978861a67663b59ed91ec
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 11:03:40 2019 +0000
LoD first attempt (stack overflow issue)
2020-08-20 18:34:59 +00:00
|
|
|
|
let latitude_uniform = (pos.y as f32 / f32::from(self.map_size_lg().chunks().y)).sub(0.5).mul(2.0);
|
2019-10-16 11:39:41 +00:00
|
|
|
|
|
2020-08-25 12:21:25 +00:00
|
|
|
|
// Even less granular--if this matters we can make the sign affect the quantity slightly.
|
2019-10-16 11:39:41 +00:00
|
|
|
|
let abs_lat_uniform = latitude_uniform.abs(); */
|
2019-08-19 17:20:54 +00:00
|
|
|
|
|
2020-02-01 20:39:39 +00:00
|
|
|
|
// Take the weighted average of our randomly generated base humidity, and the
|
|
|
|
|
// calculated water flux over this point in order to compute humidity.
|
2020-01-22 14:31:10 +00:00
|
|
|
|
const HUMID_WEIGHTS: [f32; 2] = [2.0, 1.0];
|
|
|
|
|
let humidity = cdf_irwin_hall(&HUMID_WEIGHTS, [humid_uniform, flux_uniform]);
|
2019-10-16 11:39:41 +00:00
|
|
|
|
|
2020-02-01 20:39:39 +00:00
|
|
|
|
// We also correlate temperature negatively with altitude and absolute latitude,
|
|
|
|
|
// using different weighting than we use for humidity.
|
|
|
|
|
const TEMP_WEIGHTS: [f32; 2] = [/* 1.5, */ 1.0, 2.0];
|
2020-01-22 14:31:10 +00:00
|
|
|
|
let temp = cdf_irwin_hall(
|
|
|
|
|
&TEMP_WEIGHTS,
|
|
|
|
|
[
|
|
|
|
|
temp_uniform,
|
|
|
|
|
1.0 - alt_uniform, /* 1.0 - abs_lat_uniform*/
|
|
|
|
|
],
|
|
|
|
|
)
|
2019-10-16 11:39:41 +00:00
|
|
|
|
// Convert to [-1, 1]
|
|
|
|
|
.sub(0.5)
|
|
|
|
|
.mul(2.0);
|
2020-01-22 14:31:10 +00:00
|
|
|
|
|
|
|
|
|
let mut alt = CONFIG.sea_level.add(alt_pre);
|
|
|
|
|
let basement = CONFIG.sea_level.add(basement_pre);
|
|
|
|
|
let water_alt = CONFIG.sea_level.add(water_alt_pre);
|
2019-10-16 11:39:41 +00:00
|
|
|
|
let downhill = if downhill_pre == -2 {
|
|
|
|
|
None
|
|
|
|
|
} else if downhill_pre < 0 {
|
|
|
|
|
panic!("Uh... shouldn't this never, ever happen?");
|
|
|
|
|
} else {
|
|
|
|
|
Some(
|
(See sharp/lod-history) LOD, shadows, greedy meshing, new lighting, perf
---
Pretty much a Veloren fork at this point. Here's a high level overview of the changes (will be added to CHANGELOG just before merge).
At a high level this MR incorporates roughly two groups of changes.
The first group consists of new game features: more flexible map sizes, level of detail terrain, shadow maps, and a new lighting
engine. This is "feature work" that (mostly) only adds new things to Veloren, and mostly shouldn't affect old stuff.
The second big group of changes are those addressing the fallout from all the new features. These include performance fixes of
various sorts: the addition of multiple graphics options and optimization of the cheap ones to avoid work, switching all voxel
models to use some variant of greedy meshing, switching over much of our CPU-side vector math to exploit SIMD instructions
(coinciding with a fork of `vek`), and a rewrite of how the UI handles text rendering (coinciding with updates to our fork
of `conrod`). Making Veloren's hardcoded colors appear correct under the new lighting engine also required considerably
changes (TODO: Fill in this section when it's complete).
The second category of changes often heavily touches code owned by other people, including frequently modified code "owned" by a
handful of people, so I recommend that this code be reviewed particularly carefully.
---
At a high level (each will be described in more detail below):
- The world map has been refactored.
- The world size is no longer hardcoded (@zesterer).
- The map generation code was made generic to allow using it outside of the `world` crate (@zesterer).
- On world creation, we now compute *horizon maps* (@zesterer).
- The way we pass the world from the server to the client has been updated (@xMAC94x).
- Artifacts related to image rotation were fixed (@imbris).
- Multiflow rivers were enabled (@zesterer).
- In the process of making changes related to the world map, various incidental fixes and optimizations were required.
- The new *level of detail* feature was added (@zesterer wrote part of this and has checked out the rest).
- A new LOD terrain rendering step was added to the pipeline.
- The LOD terrain quality was made configurable via a graphics setting.
- Horizon maps were used to cast shadows from LOD chunks on both LOD and non-LOD terrain.
- A "voxelization" effect was incorporated into rendered LOD terrain to make it blend better into the world.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Veloren's lighting has been completely overhauled (@zesterer has already checked most of this out).
- A semi-accurate index of refraction was assigned to our materials.
- A new, more realistic, physically based approach to lighting was used using the *Ashikhmin Shirley* BRDF.
- We emulate *atmospheric scattering* using equations designed for measuring solar panel light exposure.
- We attempt to compute *realistic light attenuation* in water using its real material properties.
- In the process of making changes related to LOD, various incidental fixes and optimizations were required.
- Point and directional lights now cast realistic shadows, using *shadow mapping.* (@imbris, @zesterer, @Treeco, @YuriMomo)
- Point light shadow maps were added to the rendering pipeline, using geometry shaders and *seamless cube maps*.
- Directional light shadows were added to the rendering pipeline, using LISPSM together with disabling *depth clamping*.
- "Shadow-only" chunks and NPCs were added to prevent shadows from models behind you from disappearing.
- In the process of making changes related to shadow maps, various incidental fixes and optimizations were required.
The addition of shadow maps, LOD terrain, and the new lighting all led to significant performance degradation, on top of other
changes happening in master. Therefore, a large number of performance improvements were also needed:
- The graphics options were made much more flexible and configurable, and shaders were optimize.
- New options were provided for how to render lights and shadows (@Pfauenauge, @zesterer).
- Graphic setting storage and configuration were overhauled to make adding new features easier (@Pfauenauge, @imbris).
- Shaders were rewritten to utilize GLSL's preprocessor to avoid overhead (@zesterer, @YuriMomo).
- In the process of making changes related to providing additional rendering options, various incidental fixes and optimizations were required.
- Voxel model creation was switched to use *greedy meshing.*
- A new voxel meshing method, greedy meshing, was added (@imbris).
- Uses of the older meshing methods were migrated to use greedy meshing (@imbris, @jshipsey, @Pfauenauge).
- New restrictions were added to terrain, figure, and sprites to future proof them for further optimizations (@jshipsey, @Pfauenauge, @zesterer).
- Most positions are now relative to either chunk or player position for better precision (@imbris, @zesterer, @scottc).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- Animation and terrain math were switched to use SIMD where possible.
- Fixes were made to vek to make its SIMD feature usable for us (@zesterer, @imbris).
- The interface and types used in bone animation were changed in various ways (@jshipsey, @Snowram, @Pfauenauge).
- Redundant code generation for body animation is now partly taken care of by a macro (@jshipsey, @Snowram, @Pfauenauge).
- Animation code was modified to to use vek's SIMD representation where possible (@jshipsey, @Snowram, @Pfauenauge).
- Terrain meshing code and shadow map math were also modified to use vek's SIMD representation (@imbris).
- SIMD instruction generation was enabled (@YuriMomo, @jshipsey, @Snowram, @imbris, @Angelonfira, @xMAC94x).
- In the process of making changes related to greedy meshing, various incidental fixes and optimizations were required.
- The way we cache glyphs was completely refactored, fixed, and optimized.
- Our fork of `conrod` was optimized in various ways (@imbris).
- Our fork of `conrod` now exposes whether a widget was updated during the current frame (@imbris).
- Our use of the glyph cache was rewritten for correctness (@imbris).
- A *text cache* was introduced that lets us skip remeshing glyphs that have not changed (@imbris).
- Various changes were made to reduce pressure on the glyph cache, with more planned (@imbris, @Pfauenauge).
- In the process of making changes related to the glyph cache, various incidental fixes and optimizations were required.
- Colors were changed to keep Veloren's look consistent with master.
- Some older tree models were brought back (@Pfauenauge).
- TODO(@Sharp): All hardcoded colors were extracted and made hotloadable.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Hardcoded colors were fixed to conform to Veloren's style.
- TODO(@Treeco, @Pfauenauge, @imbris, @jshipsey): Color models were fixed to conform to Veloren's style.
A detailed description of the involved changes follows.
---
- The world size is no longer hardcoded. All functions dependent on world size now take a `WorldSizeLg`, which holds the base 2 logarithm of each actual world dimension and is guaranteed to maintain certain properties (outlined in `common/src/terrain/map.rs`). Additionally, many utility functions that utilize the world size were moved into `common` as well (mostly `common/src/terrain/mod.rs`). Finally, the world map format was updated in order to store its size explicitly, with a migration path from the old format that should work whenever the old formatted map was a square (practically always). See `world/src/sim/mod.rs` for these changes.
- The map generation code was made generic to allow using it outside of the `world` crate. The parts of the map generating code that do not need to query the world were moved over to `common/src/terrain/map.rs`, allowing them to be used from the client without creating a dependency on `world`. The rest of it was turned into helper functions in `world/src/sim/map.rs`, which can be passed as closures to the generic map generation code to complete its construction. This also means that colors are now passed in separately to the map generation function. See <https://veloren.net/devblog-78/> for more details.
- On world creation, we now compute *horizon maps*. See the function in `world/src/sim/util.rs`.
Given a height map and a plane intersecting that height map, our horizon maps allow us to encode enough information to reconstruct shadows for each point on the height map using only the *horizon angle* (the angle at which the sun starts to become visible). As Veloren's sun only covers one plane, this is sufficient for encoding sun shadows for LOD terrain, by encoding two angles per chunk (one for each 90 degrees the sun covers). We can also use this for the moon, if we want, since the moon follows the same path. Additionally, we store the *height* of the furthest occluder, to try to make the shadows volumetric; so this means 4 bytes in total for each chunk.
Support for horizon maps has been merged into the map functionality in common as well.
- The way we pass the world from the server to the client has been updated. Rather than passing the prerendered map, we instead pass three maps with values for each chunk; one with the color information, a second with altitude information, and a third with horizon map information. We then reconstruct the map on the client, together with some additional information we send from the server (like the sea level and maximum height). See `common/src/msg/server.rs` for a detailed description of the format of `WorldMapMsg`, and `server/src/libr.rs` and `client/src/lib.rs` for details of the map construction and parsing.
- Artifacts related to image rotation were fixed. See the commit message for commit SHA `cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e` for a detailed explanation. This involved changes to shaders, the addition of a new type of graphic (also reflected in the graphic cache) that allows specifying a border color (which automatically makes the associated texture immutable), and some related fixes. I reproduce the first two paragraphs of the MR description as well:
```
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
```
- Multiflow rivers were enabled.
This does not really need to be part of this MR, and would be easy to revert, but since it seemed to provide a nice improvement it's currently packaged with it.
We already computed multiple outflows from each chunk for erosion purposes long before this MR.
However, we never modified river rendering to be able to handle this case (just a single downhill river flow is complex enough!) so this was not exposed when deciding which chunks were rivers.
Now that
- In the process of making changes related to the world map, various incidental fixes and optimizations were required. Some examples of fixes include making sure terrain is never lowered to below sea level (to make the shadow maps report correct values), fixing map altitudes and colors to understand things like cliffs and "block level" coloring (that doesn'te xist on the column level), and fixing a crashbug when rendering images for the UI where source pixels are strongly rectangular. Some examples of related performance fixes include avoiding allocating a fresh vector for all the maps (i.e. copying it over to change the format from `[u32; n]` to `DynamicImage` and then copying again to convert to `RgbaImage`), and instead using the `gfx::memory::slice` function to accomplish the same thing. These sorts of changes are spread all arond the code.
This includes the additon of a new scene, `voxygen/src/scene/lod.rs`, a new pipeline `voxygen/src/render/pipeline/lod_terrain.rs`, and new shaders `assets/vxygen/shaders/lod-terrain-vert.glsl` and `assets/vxygen/shaders/lod-terrain-frag.glsl`, as well as associated changes to the renderer in `voxygen/src/render/renderer.rs`.
The main idea behind our initial approach to LOD was to take the world data we now get from the server (altitude, color, and horizon mapping).
- Some previously computed values were turned into shader uniforms for better prediction on weak processors. (@zesterer)
- Calls to power or trig functions were removed or replaced with multiplications, where possible.
- After some deliberation
- To properly handle sprite "waving" for nearby sprites,
We explicitly designed the greedy meshing system with figures and sprites in mind.
In both cases, we want to be able to *efficiently* pack many different models into the same texture, especially in cases where we know
we will either not be removing any of the grouped-together from the models from the texture, or will remove all of them at once (so
they can be packed into some specific subtexture).
For sprites, since we know every model in advance and never intend to deallocate them, we currently pack them all as efficiently as
possible into one giant tetxure atlas. However, in the future we might opt to pack them slightly less efficiently in exchange for
shrinking the sprite vertex size.
For figures, we pack all the textures for each *model* into the same atlas.
is a global texture atlas used for every sprite, and for figures which is why we have the ability to mesh multiple
models to the same texture area (using the simple texture atlas allocator) without requiring intermediate vector allocations.
This is accomplished by delaying the time when we actually write the color and light data to the texture until *after* all the
model vertices have been meshed; then, we can just allocate the whole color/light array at once, making the atlas we use an
exact fit. In computer science-y terms, we accomplish this delay by, after we perform the initial greedy meshing (without
texture information), not continuing to create the texture data, but instead constructing a *continuation*--that is, a function
that, when called, will execute the rest of the computation. We push this continuation (which in Rust terms is a `FnOnce` closure
that takes the `ColLightsInfo` that it is supposed to write to as context) onto a
onto a vector
resizing. To allow for suspended writes to texture data, Rust pointed out to me that the continuation that would eventually write the color and light data to the texture atlas (the one that is shared by all models sharing the same greedy mesher) would have to *own* whatever data it mshed. Because we often generate the model data to mesh as a temporary in `voxygen/src/load.rs`, the
- Matrix multiplications in the shader were reduced for figure data (@zesterer).
- Vertex "waves" for fluid data were removed.
- Terrain "bending" near edges was removed.
- Scaling was fixed to make sure empty space was not introduced in a space previously occupied by a block. It was also changed to take ownership of its voxel data,
rather than sharing it, to let it be used with meshing.
- Rust's nightly version was bumped in order to use the `array_map` function, which lets us reuse more code between the simple map and `FigureModelCache`.
- PositionedGlyph::standalone.
---
I tried to cite sources in many cases[^realtime],[^lloyd],[^lispsm],[^pbrt],[^greedy],[^tjunctions]
where I needed features from elsewhere but I am particularly grateful for the following resources,
esepcially where they have accompanying source code. I linked all of them that are accessible to the public (those that are not were
obtained through legal means).
[^realtime]: Eisemann, Elmar, Michael Schwarz, Ulf Assarsson, Michael Wimmer. Real-Time Shadows. A K Peters/CRC Press (T&F), 20160419.
[^lloyd]: Lloyd,B. 2007. [Logarithmic perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). PhD thesis, University of North Carolina.
[^lispsm]: Wimmer, M., Scherzer, D., and Purgathofer, W. 2004. [Light space perspective shadow maps](http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf). In Proceedings of Eurographics Symposium on Rendering 2004, pp. 143– 152.
[^pbrt]: Pharr, Matt, et al. [http://gamma.cs.unc.edu/papers/documents/dissertations/lloyd07.pdf](Physically Based Rendering: From Theory to Implementation). Third edition, Morgan Kaufmann Publishers/Elsevier, 2017.
[^greedy]: mikolalysenko. “Meshing in a Minecraft Game.” 0 FPS, 30 June 2012, <https://0fps.net/2012/06/30/meshing-in-a-minecraft-game/>.
[^tjunctions]: blackflux. “Meshing in Voxel Engines – Part 1.” Blackflux.Com, 23 Feb. 2014, <https://blackflux.wordpress.com/2014/02/23/meshing-in-voxel-engines-part-1/>.
I am also especially grateful to Khronos, Wikiepdia, and stackoverflow for answering many of my specific questions while writing the MR.
---
Squashed commit of the following:
commit 300505e7305a2fdac722a808ee8538323f215f39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 18:46:25 2020 +0200
Fixing cargo doc and typo in CHANGELOG.
commit ec0aeb18e8499d7d84ef818331b4b65c3d76cea6
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 15:38:50 2020 +0200
Hopefully final commit for the LOD branch.
commit 5e8ea0b1eaac02903a02feb2eb038d195de4872f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 10:14:26 2020 +0200
Falling back to power as stopgap.
commit e44a1cbf46504ee9931a01bdc9033e145500d557
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 09:25:41 2020 +0200
Address imbris feedback.
Temporarily disables shiny water, lowers max VD.
These restrictions will be lifted soon after merging.
commit 561e25778a108ac3712f5ec2ce3a51234c4430d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 08:31:13 2020 +0200
Tweaking shaders a bit.
commit 7d19259078ce0dd7b3742ad7d0cb3fab3ece3fdc
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:59:43 2020 +0200
Fix view example as well.
commit 051cd4934e0fad2c0b15db4380a4189fa318679f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 07:29:06 2020 +0200
Fix meshing benchmark.
commit c95e07db3b4dcca285678985e65e31b927cb1c61
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 05:46:22 2020 +0200
Address MR feedback, fix scene clouds.
commit 1bfb816cabdb3ffc1e507a009c2d98696b4b573a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:39:36 2020 +0200
Incorporating Pfau's figure color changes.
New eyes and new humanoid colors.
commit 3f9b89a3ac7b3356b1dba0d1a8f6541357f81469
Merge: e2f5162e4 62c53963a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:29:41 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit e2f5162e4f96f4124aa43488f7245d341b3dcfd4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 20 04:28:38 2020 +0200
World colors are all hotloadable.
They live in assets/world/style/colors.ron.
Only a small handful of hardcoed colors remain in World; they are either
part of the map, or difficult to disentangle from the rest of the
computation. Comments are made where appropriate.
commit 62c53963abe1975009d34a8f9515a355bef24f31
Author: Marcel Märtens <marcel.cochem@googlemail.com>
Date: Wed Aug 19 15:59:00 2020 +0200
replace pretty_env_logger with tracing
commit 5b1625f99d9586fe80e2232f583ec5af9f953099
Merge: d71003acd 4942b5b39
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:15:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit d71003acdabeff970b3928e97c26af6847b5b78e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 19 05:14:34 2020 +0200
Hotloading colors, part 1: colors in common.
Currently, this just entails humanoid colors. There are only three
colors not handled; the light emitter colors in
common/src/comp/inventory/item/tool.rs. These don't seem important
enough to me to warrant making hotloadable, at least not right now, but
if it's needed later we can always add them to the file.
commit 63b5e0e553eb2ea49276f192a6fc7dd65254270d
Merge: c32b337a4 6d2c4b9c1
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 13:05:37 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c32b337a46e10d9de473d178a94a3ccd61c39bb3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:52:04 2020 +0200
Fixing LOD grid, for real.
commit a166ae0360395387e09fb35a1f84210c2ce5ec24
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 17 05:28:05 2020 +0200
Addressing imbris's initial feedback.
Fixes two minor bugs: explosion particles were no longer spawning
randomly, and LOD grids were not perfectly even.
commit 4cbad004f44060994252dd3d38647a14a589712f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:27:58 2020 +0200
Bumping nightly per request.
commit 548680276aac77c25d43d16b5622f847d474dbef
Merge: acc098604 8f8b20c91
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 16 19:26:06 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit acc0986040589a3492f88a740bc3c3fc693b26d3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:28:32 2020 +0200
Lower resolution due to lying drivers.
commit d3b878de2a52c358d2944a6bbd0555dad7fbdb10
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 22:15:38 2020 +0200
Fix issues msh encountered with Intel 4600.
commit 10245e0c1b0cb6fae10d86409435364edc6102ef
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 15 21:15:02 2020 +0200
Merge more models into one mesh than we did previously.
commit 3155c31e663c52ae5c3a53d5fb5665892a1a498a
Merge: 7204cc8a7 3c199280e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:35:22 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7204cc8a7a4f74a30306bd205d9834fee4bb944f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 22:34:43 2020 +0200
Fix not yet done NPC animations.
This forces them all to be the idle animation if not specified.
This fixes issues where you'd have giant NPCs in water.
commit bc83360f2a08918f19d417b5f772e1ff554dba08
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 19:36:37 2020 +0200
Try to fix some bugs:
- Z fighting with LOD terrain and water.
- Audio SFX not playing.
commit 1fd104aa603bf3781b6526a5cada46aeca3049dd
Merge: 862df3c99 7c2c392a3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 12:02:31 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 862df3c9976c4da9bd7cfd784f1a85973127968a
Merge: 0a4218ed9 75c1d4401
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 13 05:52:56 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0a4218ed9d541a2b34c133351bea38a99ddf4ea7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 22:27:14 2020 +0200
Fix particle depth.
commit f51dfdeb442d0dd5243dd2f344fa4be295bd0875
Merge: c6251a956 5e6dc0471
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:19:04 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit c6251a956ad376400dca5c23420cf8d213dc8fdf
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 20:15:46 2020 +0200
Cache figures more intelligently.
Cache figures for longer, and don't cache character states for the
player except where they actually affect the rendered model.
commit 0ed801d5404982c6fb63b1eaa4567d908b294c9d
Merge: c11b9bdf0 eea64f78f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 16:32:24 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit c11b9bdf0a53bf9884d2f5a48fec9b01d582df1a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Aug 12 11:47:15 2020 +0200
Remove unneeded Clippy annotation.
commit 16aa9ef40af56d69289d00aafb3deadfb8bd4f35
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Aug 8 00:53:02 2020 +0200
Fix hotloading and Clippy.
commit 3dc973e0be5b758da1e9805eb764ad401374cd0c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 23:50:27 2020 +0200
Major speedups with SIMD.
commit fba64a7d93d5a96077ce87287bbce6ab9b7fbcae
Merge: 76429d00e d1e10b178
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:19 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 76429d00eea00d212fbd672a84ee91e75b19b938
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 13:23:10 2020 +0200
Add clippy.toml.
commit c79f512f84dbb83cb82b7954db68ff241dfd8e41
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 11:55:20 2020 +0200
Fix all clippy issues, clean up Rust code.
commit 6f90e010b3fbefb53b0d632e819931350015b6b8
Merge: 77a8c7c26 5929cfa5c
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:30 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 77a8c7c267d3f44a1a62bd6b2274359973c5e4d4
Merge: b44e44232 44febaabd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Aug 7 06:47:10 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 5929cfa5c713aa392110bbb62407f76caf53c3df
Author: jshipsey <jshipsey18@gmail.com>
Date: Thu Aug 6 20:47:27 2020 -0400
fixed in-hand arrow bug
commit b44e442325d828f1cd564d66908f89d09e80474b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Aug 6 13:40:35 2020 +0200
Miscellaneous performance improvements.
commit be37acf287c1360d8085862526ac3365ffd1d768
Merge: 125d7fc6c c11876547
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 05:49:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 125d7fc6c4dcd8c8c5f27b8268a4d64f409f3644
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Aug 3 04:55:31 2020 +0200
Abstract over simd vs. repr_c vectors.
Also some minor improvements to Event size.
commit d4d4956e9252e1241ce110b2aa85076c6b1e2a23
Merge: 5f3b7294a aced5f979
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:56:54 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 5f3b7294af1f8533edc2620b58863c248e2b07af
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:43:52 2020 +0200
Fix formatting issues I missed before.
commit a428a3ebba70dcab63dd0f8cd983120c90617271
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Aug 2 20:41:51 2020 +0200
Fix clippy warnings, part 1.
There aer still a bunch of type too complex and
function takes too many arguments warnings that I'll fix later
(or ignore, since in the one case I did fix a function takes too
many arguments warning I think it made the code *less* readable).
commit ba54307540ed8a937ac08209730284fc653af85b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 30 13:22:42 2020 +0200
Fix light animations so they are removed when the light turns off.
commit 7e0f4bcbf0f4717145d8beac40d52e3acebbe2aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 21:10:20 2020 +0200
Fix crash in edge case for pixel art.
commit 56da06f7a351e2b949e9b014a90b974d511a0924
Merge: cf74d55f2 9f53a4a19
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:56:52 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit cf74d55f2e3d2ae7d25fd68d5c73b01a6afde86e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 29 18:29:52 2020 +0200
Fix map image artifacts and remove unneeded allocations.
Specifically, we address three concerns (the image stretching during
rotation, artifacts around the image due to clamping to the nearest
border color when the image is drawn to a larger space than the image
itself takes up, and potential artifacts around a rotated image which
accidentally ended up in an atlas and didn't have enough extra space to
guarantee the rotation would work).
The first concern was addressed by fixing the dimensions of the map
images drawn from the UI (so that we always use a square source
rectangle, rather than a rectangular one according to the dimensions of
the map). We also fixed the way rotation was done in the fragment
shader for north-facing sources to make it properly handle aspect ratio
(this was already done for north-facing targets). Together, these fix
rendering issues peculiar to rectangular maps.
The second and third concerns were jointly addressed by adding an
optional border color to every 2D image drawn by the UI. This turns
out not to waste extra space even though we hold a full f32 color
(to avoid an extra dependency on gfx's PackedColor), since voxel
images already take up more space than Optiion<[f32; 4]> requires.
This is then implemented automatically using the "border color"
wrapping method in the attached sampler.
Since this is implemented in graphics hardware, it only works (at
least naively) if the actual image bounds match the texture bounds.
Therefore, we altered the way the graphics cache stores images
with a border color to guarantee that they are always in their own
texture, whose size exactly matches their extent. Since the easiest
currently exposed way to set a border color is to do so for an
immutable texture, we went a bit further and added a new "immutable"
texture storage type used for these cases; currently, it is always
and automatically used only when there is a specified border color,
but in theory there's no reason we couldn't provide immutable-only
images that use the default wrapping mdoe (though clamp to border
is admittedly not a great default).
To fix the maps case specifically, we set the border color to a
translucent version of the ocean border color. This may need
tweaking going forward, which shouldn't be hard.
As part of this process, we had to modify graphics replacement to
make sure immutable images are *removed* when invalidated, rather
than just having a validity flag unset (this is normally done by
the UI to try to reuse allocations in place if images are updated
in benign ways, since the texture atlases used for Ui do not
support deallocation; currently this is only used for item images,
so there should be no overlap with immutable image replacement,
so this was purely precautionary).
Since we were already touching the relevant code, we also updated
the image dependency to a newer version that provides more ways
to avoid allocations, and made a few other changes that should
hopefully eliminate redundant most of the intermediate buffer
allocations we were performing for what should be zero-cost
conversions. This may slightly improve performance in some
cases.
commit ad18ce939940a8c697270f6e9b94db9942fd8295
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 13:21:09 2020 +0200
Fix continent scale hack.
commit 36b1cb074f5b195aebd7dbbc3da7f0246a1a18ec
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 12:11:40 2020 +0200
Enable loading different sized maps without a recompile.
We may want to tweak the effects of the continent_scale_hack.
commit 13b6d4d534cc4814b7cb3294ca41bbfea0a6b186
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 28 10:55:48 2020 +0200
Removing WORLD_SIZE, part 1.
Erased almost every instance of WORLD_SIZE and replaced it with a local
power of two, map_size_lg (which respects certain invariants; see
common/src/terrain/map.rs for more details about MapSizeLg). This also
means we can avoid a dependency on the world crate from client, as
desired.
Now that the rest of the code is not expecting a fixed WORLD_SIZE, the
next step is to arrange for maps to store their world size, and to use
that world size as a basis prior to loading the map (as well, probably,
as prior to configuring some of the noise functions).
commit 30b1d2c6428230a9eaa0d749cdcbbd6f1cbccd78
Merge: 7d56ba31b 1377b369f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:58 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 7d56ba31b445441461b28a07fc495d7d4f047c17
Merge: 2101113b4 598f14b25
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Jul 27 13:16:27 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 1377b369f6db2258e910d467a5740f31789e3ded
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sun Jul 19 23:25:38 2020 +0200
more saturated pumpkins
commit ae8d50527f93bb0616c2ad46ce4dacb63bc37c6d
Author: Monty Marz <m.marzouq@gmx.de>
Date: Sat Jul 18 20:29:56 2020 +0200
acacia models
commit 2101113b467e691de787392d7f20f1745f5637bd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 18 18:55:25 2020 +0200
Higher detail LOD.
commit add2cfae04b4385fa5590e11e2bd5229d9dee0aa
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 16 01:57:39 2020 +0200
Revert some irrelevant stuff.
commit 2e2ab3dc1eaa59a4aef7f8d34a53d8aae4c8553a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 15 13:30:49 2020 +0200
Fixing various things about shadows.
* Correcting optimal LISPSM parameter.
* Figure shadows are cast when they're not visible.
* Chunk shadows stay cast until you look away.
* Seamless cubemaps for point lights.
* Etc.
commit 6c31e6b56217274285b597af297036691ea5d897
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 19:50:26 2020 +0200
Fix shadow creation.
commit 6332cbe006115ae205597529cd8bbccd146c2cca
Merge: be438657c 930e0028b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:47:00 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit be438657c33d7b5bfb0a9582c3ed3fd366637323
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Jul 12 18:28:08 2020 +0200
Tweaks to shadows.
Added shadow map resolution configuration, added seamless cubemaps,
documented all existing rendering options, and fixed a few Clippy
errors.
commit 23b4058906013c7d2a40c286e20e32c5fbd897ed
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 10:11:19 2020 +0200
Fix moon, use nonlinear noise for terrain.
Note that the latter has a bit of performance cost.
commit 7fbe5cbfbb9dc29607957b8e62f432a4deed193d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:23:02 2020 +0200
Address lies about max texture size.
commit bcfc62b5e13a1cdd83f57535fde4694720bebfd9
Merge: 75e3626a7 18a08e8fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:22:08 2020 +0200
Merge remote-tracking branch 'origin/sharp/small-fixes' into sharp/small-fixes
commit 75e3626a785919f43fdcf2127c2b10e3e4df2f9f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Jul 8 02:21:52 2020 +0200
OpenGL 3.3 minimum.
commit 18a08e8fe2739f02af99a5d2cb4e7c38c49e858b
Author: Monty Marz <m.marzouq@gmx.de>
Date: Tue Jul 7 23:57:52 2020 +0200
settings localization
commit 90c5d1ca3620092bc3ae10b2211489eb1cf6f5e8
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 21:11:48 2020 +0200
Lower near distance.
commit 0e66f02b25aaddaa2dfddbbc89cd67de54a9a7b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 20:09:01 2020 +0200
All sprites sway in the wind now.
commit db1401a6910bf42dcf502462c90038752ff5fbdb
Merge: 69e508d8c e8b4b29d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 19:34:17 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 69e508d8c94d8973033817ca86f357e466fc7c4d
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Jul 7 18:41:37 2020 +0200
Make it easy to switch to SIMD for math.
commit ffe0f5928c7a7e87d00cb5426b3b1d831d7e02fd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 21:21:12 2020 +0200
Fix some issues with underwater rendering.
commit bfda6da42f38fd02c31ee92c81ab785a3e50c2a0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 19:17:59 2020 +0200
Fix some minor display issues.
commit 0ed752e087968cf901301884aaeae698e32ef8a5
Merge: ccc6a06a8 518edcb85
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:14:21 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit ccc6a06a8d4504d6b9f7af7905a414d2ee06ab76
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 18:04:34 2020 +0200
Some minor changes.
commit 4e020246702889269efe1a191788992164c508d6
Merge: 50a64d927 e05c9267a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 16:17:40 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 50a64d927e6c4f4b0e4688e4cbfca694bc3f922a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Jul 4 13:07:03 2020 +0200
Fix far plane.
commit 7dd06da34cae8f9ea3b6c889fe965181f3fd3949
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:25:35 2020 +0200
Add shadows.glsl.
commit 618a18c998778bf871b905a74657440fcc384c80
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Jul 2 22:10:22 2020 +0200
Adding shadows, greedy meshing, and more.
commit eaea83fe6a5cb1cb0ba8beef888183c718258496
Merge: 267018495 2f89b863e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 22:47:07 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 2670184954a13e4a9e7a4e35ba79aac0c5fac2f7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 21:20:01 2020 +0200
Make civsim and sites deterministic.
For anything in worldgen where you use a HashMap, *please* think
carefully about which hasher you are going to use! This is
especially true if (for some reason) you are depending on hashmap
iteration order remaining stable for some aspect of worldgen.
commit f8376fd5dc72b4a9c2f51a6b4570d59c8b8e9343
Merge: 654f7e049 cdee191dd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu May 21 17:53:57 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 654f7e049258d9da27c09608bbe6a46ffa8787e5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed May 20 21:22:30 2020 +0200
Correct backface culling.
commit 560501df05ca725409b0f2e4eb31bdfdc15fd0c7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue May 19 17:22:06 2020 +0200
Greedy messhing for shadows.
commit a4d87e1875ca543436e6bbbeb20348facc5a52d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun May 17 05:59:00 2020 +0200
Shadow maps work for lantern.
commit 243d0837b8a3b08172c9a3c348d964d7ddc2a0a8
Merge: 04382dc28 71dd520cd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:53:13 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 04382dc28632b6c66e8821f6870c0daaa1c1901a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 15 14:22:17 2020 +0200
WIP: better graphics config, better LOD, shadow maps.
commit 22ddbad3eb32bfa70f0932176022208fe67ded81
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 18:54:09 2020 +0200
Minor shader fixes.
commit 746a10e8d01ac235f994b0cde78fa48998602a1f
Merge: 0f4a0e763 40ab94673
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat May 2 04:02:09 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 0f4a0e763db3afbdc4fb0558611f38326ca87151
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 23:03:24 2020 +0200
Switch back to pop-in terrain.
commit dd74fa7e4a53667b38811d7aec58d7f6a68889bb
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri May 1 22:58:55 2020 +0200
LOD shading closer to voxel shading.
commit ef67bd58ba0bdaf622b078892d768263b6cba268
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 28 20:49:03 2020 +0200
Experimental underwater lighting.
commit 2c5ad9d07605e80d5fd5679dd3a5d70c605b86a9
Merge: 748279835 303967a6f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 22:35:24 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 7482798354eda18c8207950080fc24d443a369de
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 21:59:55 2020 +0200
Replace discard in figure-frag.
commit d83b4ae69be4912f69bf7835f509c68a1c7770a4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:45:57 2020 +0200
Fix sprite lighting, HDR from focus_pos.
commit 0594238004f116274905fa0ed7c2b6c417ed1d29
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 18:14:10 2020 +0200
Proper HDR from point lights.
commit 48c93d2b41ce5743103d18e76cc228f5ac766492
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 14:01:43 2020 +0200
Brighter ambiance, darker LOD shadows.
commit e0452e895ccfa8a43f368cae3b8b8aedc24dad93
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 13:13:23 2020 +0200
More proper HDR.
commit 4c6da3ed16cfeebb455e40da5f557b4af9a499d7
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 27 00:13:10 2020 +0200
Trying LOD noise.
commit 682a3d74c85df5503ffe1fc1cc891bce789df1ad
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 23:11:08 2020 +0200
Fix LOD heights in towns.
commit cc39e5734e8b18f9077bf42e66337c1319dd6b6e
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sun Apr 26 21:01:23 2020 +0200
More LOD fixes.
commit 8116b21c2e51c836e77894e309ac273caf2917b3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:54:43 2020 +0200
I like this coloring.
commit bc2560ea90b36f4b46190005344232d993043ac3
Merge: 14effdd5d e690efe71
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 23:48:33 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit 14effdd5db8747fcf3eb34f03b46b7792e92d1c5
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:24:35 2020 +0200
Re-saturate.
commit 48a643955d4435b78179acba0beb4a979905cc31
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 22:23:57 2020 +0200
Various fixes.
commit f7b497a0c25f4ad4682c71dd1ed6f608052feb9b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 03:22:49 2020 +0200
Render figures again.
commit 44e4aad48deba8266b9f8bdfd3db096b381f5327
Merge: e6f0a5a98 9ec319a18
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 25 02:01:04 2020 +0200
Merge remote-tracking branch 'origin/master' into sharp/small-fixes
commit e6f0a5a981a82533ba188fff0a54ce98577bb152
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 24 16:12:20 2020 +0200
Add atmospheric scattering.
commit f2953087f691a8edbc001cb98ebf5059fc6f8ac0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 23 00:01:20 2020 +0200
Fix shadowing for specular reflections.
commit ddd4a67a9799b8d08c7dc0c2bec90621c2bed0e3
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Wed Apr 22 22:56:12 2020 +0200
HDR fixes.
commit 1015e60deef3c447381996277df7496707a63bd0
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Tue Apr 21 18:25:19 2020 +0200
More lighting changes.
commit 80c264abd111fb237e57843efcb5c071d4f84613
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Mon Apr 13 00:29:59 2020 +0200
Lighting experiments.
commit 8414987e589dd5102bad89762a3adaccc0bfe957
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 9 02:38:40 2020 +0200
WIP -- lighting changes and soft shadows.
commit 9cd2b3fb0d6b49776c6dfe463e4169637250b11a
Merge: c7ea687eb 8b149ad11
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:29 2020 +0200
Merge branch 'sharp/new-lighting' into sharp/small-fixes
commit c7ea687ebbc5aace1b455f134a5bf49ce2c7434a
Merge: 476441531 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:33:02 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/small-fixes
commit 8b149ad11ad4bb75018fcf9519baec27d1c95951
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Sat Apr 4 02:32:39 2020 +0200
Trying out a new lighting model.
commit b0ac9f36f755dd06f7c17c46150568064790864f
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 07:56:11 2020 +0200
Use bicubic interpolation for terrain.
commit f6fc9307a121514b614bc50ef8eb055953e7da8a
Merge: 33140a295 22f3319b4
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 05:01:41 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 4764415312aae6e9ac2d00e86e84577cb958f1ab
Merge: ed2d0111d 13388ee6a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Apr 3 04:54:48 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 13388ee6a42943f3f79a9cb488346cef18e272fe
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 20:30:08 2020 +0200
Various fixes (to coloring and to soft shadows).
commit fbd084a94a067082a87cd6d28b82054709bc9265
Merge: 5a089863b 4fdf6896a
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 18:50:38 2020 +0200
Merge branch 'master' of gitlab.com:veloren/veloren into sharp/map-colors
commit ed2d0111d994262ae836d84d1fe5a45e4de72a0b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 06:49:27 2020 +0200
Combining colors and LOD.
commit 88342640c6b835114d01c797b89fdede3b0a2108
Merge: 33140a295 5a089863b
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:49:20 2020 +0200
Merge branch 'sharp/map-colors' into sharp/small-fixes
commit 33140a2951b8212725f42c758b277aaec4d888f7
Merge: 4c65a5aed f34d4b379
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 04:36:21 2020 +0200
Merge remote-tracking branch 'origin/master' into zesterer/lod
commit 5a089863beb01d4794bbe3580ada47b278715ea2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 03:17:49 2020 +0200
Making maps brighter.
This is probably not the right way to do it, but oh well!
commit 32b2c99109dd486aa922886081068f9c550c83f2
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Thu Apr 2 02:46:36 2020 +0200
Horizon mapping and "layered" map generation.
Horizon mapping is a method of shadow mapping specific to height maps.
It can handle any angle between 0 and 90 degrees from the ground, as
long as know the horizontal direction in advance, by remembering only a
single angle (the "horizon angle" of the shadow map). More is explained
in common/src/msg/server.rs. We also remember the approximate height of
the largest occluder, to try to be able to generate soft shadows and
create a vertical position where the shadows can't go higher.
Additionally, map generation has been reworked. Instead of computing
everything from explicit samples, we pass in sampling functions that
return exactly what the map generator needs. This allows us to cleanly
separate the way we sample things like altitudes and colors from the map
generation process. We exploit this to generate maps *partially* on the
server (with colors and rivers, but not shading). We can then send the
partially completed map to the client, which can combine it with shadow
information to generate the final map. This is useful for two reasons:
first, it makes sure the client can apply shadow information by itself,
and second, it lets us pass the unshaded map for use with level of
detail functionality.
For similar reasons, river generation is split
out into its own layer, but for now we opt to still generate rivers on
the server (since the river wire format is more complicated to compress
and may require some extra work to make sure we have enough precision to
draw rivers well enough for LoD).
Finally, the mostly ad-hoc lighting we were performing has been (mostly)
replaced with explicit Phong reflection shading (including specular
highlights). Regularizing this seems useful and helps clarify the
"meaning" of the various light intensities, and helps us keep a more
physically plausible basis. However, its interaction with soft shadows
is still imperfect, and it's not yet clear to me what we need to do to
turn this into something useful for LoD.
commit f8926a5737ddc51f3d585c651a64c43677aae0f4
Merge: a1aee931e 875ae6ced
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Mar 13 13:32:42 2020 +0100
Merge remote-tracking branch 'origin/master' into sharp/map-colors
commit 4c65a5aed353b119aea65a2aaeb94549b67beb42
Author: Treeco <5021038-Treeco@users.noreply.gitlab.com>
Date: Mon Feb 24 16:48:05 2020 +0000
Made LOD setting slider exponential
commit 2fa7b2d20d7233dc8bfd64f9f7f54617575248f1
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 17:49:53 2020 +0000
Added mist to LoD
commit aab059a450b5f635777129ff82cc15b662965c3c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 15:14:06 2020 +0000
Added LoD slider
commit 779c36b538121c5ade3633ae5cb67bb14c8c3877
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:54:55 2020 +0000
Reduced cost of vertex pushing
commit 9fea150473906b166365b738ebcea07c697daf3d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 12:38:53 2020 +0000
Fixed maths, improved LoD resolution
commit 5481df38fea5bf183ff376a3337179cfaa5233dc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Feb 24 11:22:50 2020 +0000
Dynamically relocate LoD vertices to enhance details
commit a3e36a50ababd615da7db1b26158c7906a5def01
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 18:13:51 2020 +0000
Simpler terrain spiral rendering
commit 255f450ae9ac8763db4bede075fb409161ed57cc
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:53:17 2020 +0000
Better LoD precision
commit 3d027aebe812a5b8658a4eb8123dc9f61b3776d2
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 16:04:03 2020 +0000
Better falloff
commit be775c9484b457b2c0b1a494aec03392d0c70e76
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Feb 23 15:30:45 2020 +0000
Applied good ideas from experimental branch
commit 58587b68545a23c5c04ab4574a4b94b3bc982246
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 16:15:13 2020 +0000
Minor fixes to LoD merging
commit 7b42aebd709c14df2db766aad61d9280ad24d84d
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 15:04:44 2020 +0000
Capped LoD dragging
commit 8aafc559f87124e1ea5ca6e3ddc2aa0c242d793c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:54:37 2020 +0000
Better blending between LoD and terrain border
commit edd3455d5161792d87ddc8eadc0ecbad5532b284
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:40:19 2020 +0000
Fixed LoD z depth, added sea level offset
commit b9b06744620114dd5556e73f64fa93c145503a7c
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 14:27:43 2020 +0000
Better LoD smoothing
commit a1aee931e790431560cd2d953ad61d9497072afd
Author: Joshua Yanovski <pythonesque@gmail.com>
Date: Fri Feb 21 14:52:17 2020 +0100
Adding shadows.
commit 2400786c13dd891c131ed86d48d05df516a8a778
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Feb 21 13:48:40 2020 +0000
Use world map as LoD source
commit dbf650f504a4c25fbbc2096ac3616c736bf52d23
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Mon Jan 20 00:48:14 2020 +0000
Better clouds at distance
commit 5e6f81b86cdb9730b9b056877b19257075fd5fa8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Sun Jan 19 23:59:02 2020 +0000
sync
commit 745e7540ddb000cc645f612767b337c2ddc3f7c0
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 12:40:48 2019 +0000
Improved cloud falloff mist, faster noise sampling
commit f6a200d0cb866196ba57697466755f9e0c7ea5d8
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Fri Nov 22 10:09:00 2019 +0000
Improved long-range depth precision, removed unnecessary LoD polygons
commit 63d1b2bb2292898d59fb4f4e502201103dfeb86f
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 20:57:46 2019 +0000
Working LoD shader
commit f13d98ee3e58f881e8b978861a67663b59ed91ec
Author: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Thu Nov 21 11:03:40 2019 +0000
LoD first attempt (stack overflow issue)
2020-08-20 18:34:59 +00:00
|
|
|
|
uniform_idx_as_vec2(map_size_lg, downhill_pre as usize)
|
2019-10-16 11:39:41 +00:00
|
|
|
|
* TerrainChunkSize::RECT_SIZE.map(|e| e as i32),
|
|
|
|
|
)
|
|
|
|
|
};
|
2019-08-19 17:20:54 +00:00
|
|
|
|
|
2020-04-17 23:29:01 +00:00
|
|
|
|
//let cliff = gen_ctx.cliff_nz.get((wposf.div(2048.0)).into_array()) as f32 +
|
|
|
|
|
// chaos * 0.2;
|
2020-04-13 20:37:47 +00:00
|
|
|
|
let cliff = 0.0; // Disable cliffs
|
2019-06-21 00:53:11 +00:00
|
|
|
|
|
2019-08-22 15:45:47 +00:00
|
|
|
|
// Logistic regression. Make sure x ∈ (0, 1).
|
2019-10-16 11:39:41 +00:00
|
|
|
|
let logit = |x: f64| x.ln() - x.neg().ln_1p();
|
2019-08-22 15:45:47 +00:00
|
|
|
|
// 0.5 + 0.5 * tanh(ln(1 / (1 - 0.1) - 1) / (2 * (sqrt(3)/pi)))
|
2019-10-16 11:39:41 +00:00
|
|
|
|
let logistic_2_base = 3.0f64.sqrt().mul(f64::consts::FRAC_2_PI);
|
2019-08-22 15:45:47 +00:00
|
|
|
|
// Assumes μ = 0, σ = 1
|
2019-10-16 11:39:41 +00:00
|
|
|
|
let logistic_cdf = |x: f64| x.div(logistic_2_base).tanh().mul(0.5).add(0.5);
|
|
|
|
|
|
|
|
|
|
let is_underwater = match river.river_kind {
|
|
|
|
|
Some(RiverKind::Ocean) | Some(RiverKind::Lake { .. }) => true,
|
|
|
|
|
Some(RiverKind::River { .. }) => false, // TODO: inspect width
|
|
|
|
|
None => false,
|
|
|
|
|
};
|
|
|
|
|
let river_xy = Vec2::new(river.velocity.x, river.velocity.y).magnitude();
|
|
|
|
|
let river_slope = river.velocity.z / river_xy;
|
|
|
|
|
match river.river_kind {
|
|
|
|
|
Some(RiverKind::River { cross_section }) => {
|
|
|
|
|
if cross_section.x >= 0.5 && cross_section.y >= CONFIG.river_min_height {
|
|
|
|
|
/* println!(
|
|
|
|
|
"Big area! Pos area: {:?}, River data: {:?}, slope: {:?}",
|
|
|
|
|
wposf, river, river_slope
|
|
|
|
|
); */
|
|
|
|
|
}
|
2020-01-22 14:31:10 +00:00
|
|
|
|
if river_slope.abs() >= 0.25 && cross_section.x >= 1.0 {
|
2020-06-21 21:47:49 +00:00
|
|
|
|
let pos_area = wposf;
|
|
|
|
|
let river_data = &river;
|
|
|
|
|
debug!(?pos_area, ?river_data, ?river_slope, "Big waterfall!",);
|
2019-10-16 11:39:41 +00:00
|
|
|
|
}
|
2020-02-01 20:39:39 +00:00
|
|
|
|
},
|
2019-10-16 11:39:41 +00:00
|
|
|
|
Some(RiverKind::Lake { .. }) => {
|
|
|
|
|
// Forces lakes to be downhill from the land around them, and adds some noise to
|
|
|
|
|
// the lake bed to make sure it's not too flat.
|
|
|
|
|
let lake_bottom_nz = (gen_ctx.small_nz.get((wposf.div(20.0)).into_array()) as f32)
|
|
|
|
|
.max(-1.0)
|
|
|
|
|
.min(1.0)
|
|
|
|
|
.mul(3.0);
|
|
|
|
|
alt = alt.min(water_alt - 5.0) + lake_bottom_nz;
|
2020-02-01 20:39:39 +00:00
|
|
|
|
},
|
|
|
|
|
_ => {},
|
2019-10-16 11:39:41 +00:00
|
|
|
|
}
|
2019-08-22 15:45:47 +00:00
|
|
|
|
|
2020-02-01 20:39:39 +00:00
|
|
|
|
// No trees in the ocean, with zero humidity (currently), or directly on
|
|
|
|
|
// bedrock.
|
2020-01-22 14:31:10 +00:00
|
|
|
|
let tree_density = if is_underwater {
|
2019-08-22 21:25:17 +00:00
|
|
|
|
0.0
|
|
|
|
|
} else {
|
2019-10-16 11:39:41 +00:00
|
|
|
|
let tree_density = (gen_ctx.tree_nz.get((wposf.div(1024.0)).into_array()))
|
2019-08-18 23:52:26 +00:00
|
|
|
|
.mul(1.5)
|
|
|
|
|
.add(1.0)
|
|
|
|
|
.mul(0.5)
|
2019-10-16 11:39:41 +00:00
|
|
|
|
.mul(1.2 - chaos as f64 * 0.95)
|
2019-08-18 23:52:26 +00:00
|
|
|
|
.add(0.05)
|
|
|
|
|
.max(0.0)
|
2019-08-22 15:45:47 +00:00
|
|
|
|
.min(1.0);
|
|
|
|
|
// Tree density should go (by a lot) with humidity.
|
|
|
|
|
if humidity <= 0.0 || tree_density <= 0.0 {
|
|
|
|
|
0.0
|
|
|
|
|
} else if humidity >= 1.0 || tree_density >= 1.0 {
|
|
|
|
|
1.0
|
|
|
|
|
} else {
|
2019-08-22 21:48:13 +00:00
|
|
|
|
// Weighted logit sum.
|
2019-10-16 11:39:41 +00:00
|
|
|
|
logistic_cdf(logit(humidity as f64) + 0.5 * logit(tree_density))
|
2019-08-22 15:45:47 +00:00
|
|
|
|
}
|
2019-08-25 15:49:33 +00:00
|
|
|
|
// rescale to (-0.95, 0.95)
|
2019-08-22 21:25:17 +00:00
|
|
|
|
.sub(0.5)
|
2019-08-25 15:49:33 +00:00
|
|
|
|
.mul(0.95)
|
2019-08-22 21:25:17 +00:00
|
|
|
|
.add(0.5)
|
2019-10-16 11:39:41 +00:00
|
|
|
|
} as f32;
|
2019-08-18 23:52:26 +00:00
|
|
|
|
|
2019-06-04 17:19:40 +00:00
|
|
|
|
Self {
|
|
|
|
|
chaos,
|
2019-10-16 11:39:41 +00:00
|
|
|
|
flux,
|
2019-06-04 17:19:40 +00:00
|
|
|
|
alt,
|
2019-11-19 18:34:52 +00:00
|
|
|
|
basement: basement.min(alt),
|
2019-10-16 11:39:41 +00:00
|
|
|
|
water_alt,
|
|
|
|
|
downhill,
|
2019-06-11 18:39:25 +00:00
|
|
|
|
temp,
|
2019-08-18 16:35:27 +00:00
|
|
|
|
humidity,
|
2020-08-29 07:53:42 +00:00
|
|
|
|
rockiness: if true && !river.is_river() {
|
2019-10-16 11:39:41 +00:00
|
|
|
|
(gen_ctx.rock_nz.get((wposf.div(1024.0)).into_array()) as f32)
|
|
|
|
|
.sub(0.1)
|
|
|
|
|
.mul(1.3)
|
|
|
|
|
.max(0.0)
|
|
|
|
|
} else {
|
|
|
|
|
0.0
|
|
|
|
|
},
|
|
|
|
|
is_cliffs: cliff > 0.5 && !is_underwater,
|
2019-08-24 13:23:42 +00:00
|
|
|
|
near_cliffs: cliff > 0.2,
|
2019-08-18 23:52:26 +00:00
|
|
|
|
tree_density,
|
2019-12-03 01:07:44 +00:00
|
|
|
|
forest_kind: if temp > CONFIG.temperate_temp {
|
2019-06-11 18:39:25 +00:00
|
|
|
|
if temp > CONFIG.desert_temp {
|
2019-08-18 16:35:27 +00:00
|
|
|
|
if humidity > CONFIG.jungle_hum {
|
|
|
|
|
// Forests in desert temperatures with extremely high humidity
|
|
|
|
|
// should probably be different from palm trees, but we use them
|
|
|
|
|
// for now.
|
|
|
|
|
ForestKind::Palm
|
2019-08-22 21:25:17 +00:00
|
|
|
|
} else if humidity > CONFIG.forest_hum {
|
2019-08-18 16:35:27 +00:00
|
|
|
|
ForestKind::Palm
|
2019-08-22 15:45:47 +00:00
|
|
|
|
} else if humidity > CONFIG.desert_hum {
|
2019-08-18 16:35:27 +00:00
|
|
|
|
// Low but not desert humidity, so we should really have some other
|
|
|
|
|
// terrain...
|
|
|
|
|
ForestKind::Savannah
|
2019-08-22 15:45:47 +00:00
|
|
|
|
} else {
|
|
|
|
|
ForestKind::Savannah
|
2019-08-18 16:35:27 +00:00
|
|
|
|
}
|
2019-07-08 16:41:20 +00:00
|
|
|
|
} else if temp > CONFIG.tropical_temp {
|
2019-08-18 16:35:27 +00:00
|
|
|
|
if humidity > CONFIG.jungle_hum {
|
2019-10-16 11:39:41 +00:00
|
|
|
|
if tree_density > 0.0 {
|
|
|
|
|
// println!("Mangrove: {:?}", wposf);
|
|
|
|
|
}
|
2019-08-18 16:35:27 +00:00
|
|
|
|
ForestKind::Mangrove
|
|
|
|
|
} else if humidity > CONFIG.forest_hum {
|
2019-08-19 17:20:54 +00:00
|
|
|
|
// NOTE: Probably the wrong kind of tree for this climate.
|
2019-08-18 16:35:27 +00:00
|
|
|
|
ForestKind::Oak
|
2019-08-22 15:45:47 +00:00
|
|
|
|
} else if humidity > CONFIG.desert_hum {
|
2019-08-19 17:20:54 +00:00
|
|
|
|
// Low but not desert... need something besides savannah.
|
2019-08-18 16:35:27 +00:00
|
|
|
|
ForestKind::Savannah
|
2019-08-22 15:45:47 +00:00
|
|
|
|
} else {
|
|
|
|
|
ForestKind::Savannah
|
2019-08-18 16:35:27 +00:00
|
|
|
|
}
|
2020-06-11 17:06:11 +00:00
|
|
|
|
} else if humidity > CONFIG.jungle_hum {
|
|
|
|
|
// Temperate climate with jungle humidity...
|
|
|
|
|
// https://en.wikipedia.org/wiki/Humid_subtropical_climates are often
|
|
|
|
|
// densely wooded and full of water. Semitropical rainforests, basically.
|
2020-08-25 12:21:25 +00:00
|
|
|
|
// For now we just treat them like other rainforests.
|
2020-06-11 17:06:11 +00:00
|
|
|
|
ForestKind::Oak
|
|
|
|
|
} else if humidity > CONFIG.forest_hum {
|
|
|
|
|
// Moderate climate, moderate humidity.
|
|
|
|
|
ForestKind::Oak
|
|
|
|
|
} else if humidity > CONFIG.desert_hum {
|
|
|
|
|
// With moderate temperature and low humidity, we should probably see
|
|
|
|
|
// something different from savannah, but oh well...
|
|
|
|
|
ForestKind::Savannah
|
2019-06-11 18:39:25 +00:00
|
|
|
|
} else {
|
2020-06-11 17:06:11 +00:00
|
|
|
|
ForestKind::Savannah
|
2019-06-11 18:39:25 +00:00
|
|
|
|
}
|
|
|
|
|
} else {
|
2019-08-18 16:35:27 +00:00
|
|
|
|
// For now we don't take humidity into account for cold climates (but we really
|
2019-08-19 01:01:11 +00:00
|
|
|
|
// should!) except that we make sure we only have snow pines when there is snow.
|
2019-09-24 17:56:51 +00:00
|
|
|
|
if temp <= CONFIG.snow_temp {
|
2019-06-11 18:39:25 +00:00
|
|
|
|
ForestKind::SnowPine
|
2019-08-22 15:45:47 +00:00
|
|
|
|
} else if humidity > CONFIG.desert_hum {
|
|
|
|
|
ForestKind::Pine
|
2019-08-19 01:01:11 +00:00
|
|
|
|
} else {
|
2019-08-22 15:45:47 +00:00
|
|
|
|
// Should really have something like tundra.
|
2019-08-19 01:01:11 +00:00
|
|
|
|
ForestKind::Pine
|
2019-06-11 18:39:25 +00:00
|
|
|
|
}
|
|
|
|
|
},
|
2019-06-25 15:59:09 +00:00
|
|
|
|
spawn_rate: 1.0,
|
2019-10-16 11:39:41 +00:00
|
|
|
|
river,
|
2020-04-17 15:46:08 +00:00
|
|
|
|
warp_factor: 1.0,
|
2020-07-02 23:14:07 +00:00
|
|
|
|
surface_veg: 1.0,
|
2020-03-27 13:16:02 +00:00
|
|
|
|
|
2020-02-07 22:19:25 +00:00
|
|
|
|
sites: Vec::new(),
|
2020-03-27 13:16:02 +00:00
|
|
|
|
place: None,
|
2020-07-15 23:12:12 +00:00
|
|
|
|
path: Default::default(),
|
|
|
|
|
cave: Default::default(),
|
2020-01-25 20:43:34 +00:00
|
|
|
|
contains_waypoint: false,
|
2019-06-04 17:19:40 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2020-04-17 23:29:01 +00:00
|
|
|
|
pub fn is_underwater(&self) -> bool {
|
|
|
|
|
self.water_alt > self.alt || self.river.river_kind.is_some()
|
|
|
|
|
}
|
2020-01-26 15:18:51 +00:00
|
|
|
|
|
2020-02-01 20:39:39 +00:00
|
|
|
|
pub fn get_base_z(&self) -> f32 { self.alt - self.chaos * 50.0 - 16.0 }
|
2019-06-18 21:22:31 +00:00
|
|
|
|
|
2020-04-23 15:16:08 +00:00
|
|
|
|
pub fn get_name(&self, _world: &WorldSim) -> Option<String> {
|
2020-03-27 23:06:23 +00:00
|
|
|
|
// TODO
|
|
|
|
|
None
|
|
|
|
|
|
|
|
|
|
/*
|
2019-06-25 15:59:09 +00:00
|
|
|
|
if let Some(loc) = &self.location {
|
2019-06-26 00:27:41 +00:00
|
|
|
|
Some(world.locations[loc.loc_idx].name().to_string())
|
2019-06-25 15:59:09 +00:00
|
|
|
|
} else {
|
|
|
|
|
None
|
|
|
|
|
}
|
2020-03-27 23:06:23 +00:00
|
|
|
|
*/
|
2019-06-18 21:22:31 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pub fn get_biome(&self) -> BiomeKind {
|
|
|
|
|
if self.alt < CONFIG.sea_level {
|
|
|
|
|
BiomeKind::Ocean
|
|
|
|
|
} else if self.chaos > 0.6 {
|
|
|
|
|
BiomeKind::Mountain
|
|
|
|
|
} else if self.temp > CONFIG.desert_temp {
|
|
|
|
|
BiomeKind::Desert
|
|
|
|
|
} else if self.temp < CONFIG.snow_temp {
|
|
|
|
|
BiomeKind::Snowlands
|
|
|
|
|
} else if self.tree_density > 0.65 {
|
|
|
|
|
BiomeKind::Forest
|
|
|
|
|
} else {
|
|
|
|
|
BiomeKind::Grassland
|
|
|
|
|
}
|
|
|
|
|
}
|
2019-06-04 17:19:40 +00:00
|
|
|
|
}
|