mirror of
https://gitlab.com/veloren/veloren.git
synced 2025-09-21 22:33:34 +00:00
--- 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 `cf74d55f2e` 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: commit300505e730Author: Joshua Yanovski <pythonesque@gmail.com> Date: Thu Aug 20 18:46:25 2020 +0200 Fixing cargo doc and typo in CHANGELOG. commitec0aeb18e8Author: Joshua Yanovski <pythonesque@gmail.com> Date: Thu Aug 20 15:38:50 2020 +0200 Hopefully final commit for the LOD branch. commit5e8ea0b1eaAuthor: Joshua Yanovski <pythonesque@gmail.com> Date: Thu Aug 20 10:14:26 2020 +0200 Falling back to power as stopgap. commite44a1cbf46Author: 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. commit561e25778aAuthor: Joshua Yanovski <pythonesque@gmail.com> Date: Thu Aug 20 08:31:13 2020 +0200 Tweaking shaders a bit. commit7d19259078Author: Joshua Yanovski <pythonesque@gmail.com> Date: Thu Aug 20 07:59:43 2020 +0200 Fix view example as well. commit051cd4934eAuthor: Joshua Yanovski <pythonesque@gmail.com> Date: Thu Aug 20 07:29:06 2020 +0200 Fix meshing benchmark. commitc95e07db3bAuthor: Joshua Yanovski <pythonesque@gmail.com> Date: Thu Aug 20 05:46:22 2020 +0200 Address MR feedback, fix scene clouds. commit1bfb816cabAuthor: 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. commit3f9b89a3acMerge:e2f5162e462c53963aAuthor: 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 commite2f5162e4fAuthor: 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. commit62c53963abAuthor: Marcel Märtens <marcel.cochem@googlemail.com> Date: Wed Aug 19 15:59:00 2020 +0200 replace pretty_env_logger with tracing commit5b1625f99dMerge:d71003acd4942b5b39Author: 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 commitd71003acdaAuthor: 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. commit63b5e0e553Merge:c32b337a46d2c4b9c1Author: Joshua Yanovski <pythonesque@gmail.com> Date: Mon Aug 17 13:05:37 2020 +0200 Merge remote-tracking branch 'origin/master' into sharp/small-fixes commitc32b337a46Author: Joshua Yanovski <pythonesque@gmail.com> Date: Mon Aug 17 05:52:04 2020 +0200 Fixing LOD grid, for real. commita166ae0360Author: 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. commit4cbad004f4Author: Joshua Yanovski <pythonesque@gmail.com> Date: Sun Aug 16 19:27:58 2020 +0200 Bumping nightly per request. commit548680276aMerge:acc0986048f8b20c91Author: 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 commitacc0986040Author: Joshua Yanovski <pythonesque@gmail.com> Date: Sat Aug 15 22:28:32 2020 +0200 Lower resolution due to lying drivers. commitd3b878de2aAuthor: Joshua Yanovski <pythonesque@gmail.com> Date: Sat Aug 15 22:15:38 2020 +0200 Fix issues msh encountered with Intel 4600. commit10245e0c1bAuthor: Joshua Yanovski <pythonesque@gmail.com> Date: Sat Aug 15 21:15:02 2020 +0200 Merge more models into one mesh than we did previously. commit3155c31e66Merge:7204cc8a73c199280eAuthor: 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 commit7204cc8a7aAuthor: 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. commitbc83360f2aAuthor: 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. commit1fd104aa60Merge:862df3c997c2c392a3Author: 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 commit862df3c997Merge:0a4218ed975c1d4401Author: 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 commit0a4218ed9dAuthor: Joshua Yanovski <pythonesque@gmail.com> Date: Wed Aug 12 22:27:14 2020 +0200 Fix particle depth. commitf51dfdeb44Merge:c6251a9565e6dc0471Author: 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 commitc6251a956aAuthor: 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. commit0ed801d540Merge:c11b9bdf0eea64f78fAuthor: Joshua Yanovski <pythonesque@gmail.com> Date: Wed Aug 12 16:32:24 2020 +0200 Merge remote-tracking branch 'origin/master' into sharp/small-fixes commitc11b9bdf0aAuthor: Joshua Yanovski <pythonesque@gmail.com> Date: Wed Aug 12 11:47:15 2020 +0200 Remove unneeded Clippy annotation. commit16aa9ef40aAuthor: Joshua Yanovski <pythonesque@gmail.com> Date: Sat Aug 8 00:53:02 2020 +0200 Fix hotloading and Clippy. commit3dc973e0beAuthor: Joshua Yanovski <pythonesque@gmail.com> Date: Fri Aug 7 23:50:27 2020 +0200 Major speedups with SIMD. commitfba64a7d93Merge:76429d00ed1e10b178Author: 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 commit76429d00eeAuthor: Joshua Yanovski <pythonesque@gmail.com> Date: Fri Aug 7 13:23:10 2020 +0200 Add clippy.toml. commitc79f512f84Author: Joshua Yanovski <pythonesque@gmail.com> Date: Fri Aug 7 11:55:20 2020 +0200 Fix all clippy issues, clean up Rust code. commit6f90e010b3Merge:77a8c7c265929cfa5cAuthor: 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 commit77a8c7c267Merge:b44e4423244febaabdAuthor: 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 commit5929cfa5c7Author: jshipsey <jshipsey18@gmail.com> Date: Thu Aug 6 20:47:27 2020 -0400 fixed in-hand arrow bug commitb44e442325Author: Joshua Yanovski <pythonesque@gmail.com> Date: Thu Aug 6 13:40:35 2020 +0200 Miscellaneous performance improvements. commitbe37acf287Merge:125d7fc6cc11876547Author: Joshua Yanovski <pythonesque@gmail.com> Date: Mon Aug 3 05:49:27 2020 +0200 Merge remote-tracking branch 'origin/master' into sharp/small-fixes commit125d7fc6c4Author: 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. commitd4d4956e92Merge:5f3b7294aaced5f979Author: Joshua Yanovski <pythonesque@gmail.com> Date: Sun Aug 2 20:56:54 2020 +0200 Merge remote-tracking branch 'origin/master' into sharp/small-fixes commit5f3b7294afAuthor: Joshua Yanovski <pythonesque@gmail.com> Date: Sun Aug 2 20:43:52 2020 +0200 Fix formatting issues I missed before. commita428a3ebbaAuthor: 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). commitba54307540Author: 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. commit7e0f4bcbf0Author: Joshua Yanovski <pythonesque@gmail.com> Date: Wed Jul 29 21:10:20 2020 +0200 Fix crash in edge case for pixel art. commit56da06f7a3Merge:cf74d55f29f53a4a19Author: Joshua Yanovski <pythonesque@gmail.com> Date: Wed Jul 29 18:56:52 2020 +0200 Merge remote-tracking branch 'origin/master' into sharp/small-fixes commitcf74d55f2eAuthor: 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. commitad18ce9399Author: Joshua Yanovski <pythonesque@gmail.com> Date: Tue Jul 28 13:21:09 2020 +0200 Fix continent scale hack. commit36b1cb074fAuthor: 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. commit13b6d4d534Author: 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). commit30b1d2c642Merge:7d56ba31b1377b369fAuthor: 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 commit7d56ba31b4Merge:2101113b4598f14b25Author: Joshua Yanovski <pythonesque@gmail.com> Date: Mon Jul 27 13:16:27 2020 +0200 Merge remote-tracking branch 'origin/master' into sharp/small-fixes commit1377b369f6Author: Monty Marz <m.marzouq@gmx.de> Date: Sun Jul 19 23:25:38 2020 +0200 more saturated pumpkins commitae8d50527fAuthor: Monty Marz <m.marzouq@gmx.de> Date: Sat Jul 18 20:29:56 2020 +0200 acacia models commit2101113b46Author: Joshua Yanovski <pythonesque@gmail.com> Date: Sat Jul 18 18:55:25 2020 +0200 Higher detail LOD. commitadd2cfae04Author: Joshua Yanovski <pythonesque@gmail.com> Date: Thu Jul 16 01:57:39 2020 +0200 Revert some irrelevant stuff. commit2e2ab3dc1eAuthor: 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. commit6c31e6b562Author: Joshua Yanovski <pythonesque@gmail.com> Date: Sun Jul 12 19:50:26 2020 +0200 Fix shadow creation. commit6332cbe006Merge:be438657c930e0028bAuthor: 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 commitbe438657c3Author: 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. commit23b4058906Author: 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. commit7fbe5cbfbbAuthor: Joshua Yanovski <pythonesque@gmail.com> Date: Wed Jul 8 02:23:02 2020 +0200 Address lies about max texture size. commitbcfc62b5e1Merge:75e3626a718a08e8feAuthor: 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 commit75e3626a78Author: Joshua Yanovski <pythonesque@gmail.com> Date: Wed Jul 8 02:21:52 2020 +0200 OpenGL 3.3 minimum. commit18a08e8fe2Author: Monty Marz <m.marzouq@gmx.de> Date: Tue Jul 7 23:57:52 2020 +0200 settings localization commit90c5d1ca36Author: Joshua Yanovski <pythonesque@gmail.com> Date: Tue Jul 7 21:11:48 2020 +0200 Lower near distance. commit0e66f02b25Author: Joshua Yanovski <pythonesque@gmail.com> Date: Tue Jul 7 20:09:01 2020 +0200 All sprites sway in the wind now. commitdb1401a691Merge:69e508d8ce8b4b29d7Author: 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 commit69e508d8c9Author: Joshua Yanovski <pythonesque@gmail.com> Date: Tue Jul 7 18:41:37 2020 +0200 Make it easy to switch to SIMD for math. commitffe0f5928cAuthor: Joshua Yanovski <pythonesque@gmail.com> Date: Sat Jul 4 21:21:12 2020 +0200 Fix some issues with underwater rendering. commitbfda6da42fAuthor: Joshua Yanovski <pythonesque@gmail.com> Date: Sat Jul 4 19:17:59 2020 +0200 Fix some minor display issues. commit0ed752e087Merge:ccc6a06a8518edcb85Author: 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 commitccc6a06a8dAuthor: Joshua Yanovski <pythonesque@gmail.com> Date: Sat Jul 4 18:04:34 2020 +0200 Some minor changes. commit4e02024670Merge:50a64d927e05c9267aAuthor: Joshua Yanovski <pythonesque@gmail.com> Date: Sat Jul 4 16:17:40 2020 +0200 Merge remote-tracking branch 'origin/master' into sharp/small-fixes commit50a64d927eAuthor: Joshua Yanovski <pythonesque@gmail.com> Date: Sat Jul 4 13:07:03 2020 +0200 Fix far plane. commit7dd06da34cAuthor: Joshua Yanovski <pythonesque@gmail.com> Date: Thu Jul 2 22:25:35 2020 +0200 Add shadows.glsl. commit618a18c998Author: Joshua Yanovski <pythonesque@gmail.com> Date: Thu Jul 2 22:10:22 2020 +0200 Adding shadows, greedy meshing, and more. commiteaea83fe6aMerge:2670184952f89b863eAuthor: 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 commit2670184954Author: 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. commitf8376fd5dcMerge:654f7e049cdee191ddAuthor: 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 commit654f7e0492Author: Joshua Yanovski <pythonesque@gmail.com> Date: Wed May 20 21:22:30 2020 +0200 Correct backface culling. commit560501df05Author: Joshua Yanovski <pythonesque@gmail.com> Date: Tue May 19 17:22:06 2020 +0200 Greedy messhing for shadows. commita4d87e1875Author: Joshua Yanovski <pythonesque@gmail.com> Date: Sun May 17 05:59:00 2020 +0200 Shadow maps work for lantern. commit243d0837b8Merge:04382dc2871dd520cdAuthor: 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 commit04382dc286Author: Joshua Yanovski <pythonesque@gmail.com> Date: Fri May 15 14:22:17 2020 +0200 WIP: better graphics config, better LOD, shadow maps. commit22ddbad3ebAuthor: Joshua Yanovski <pythonesque@gmail.com> Date: Sat May 2 18:54:09 2020 +0200 Minor shader fixes. commit746a10e8d0Merge:0f4a0e76340ab94673Author: 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 commit0f4a0e763dAuthor: Joshua Yanovski <pythonesque@gmail.com> Date: Fri May 1 23:03:24 2020 +0200 Switch back to pop-in terrain. commitdd74fa7e4aAuthor: Joshua Yanovski <pythonesque@gmail.com> Date: Fri May 1 22:58:55 2020 +0200 LOD shading closer to voxel shading. commitef67bd58baAuthor: Joshua Yanovski <pythonesque@gmail.com> Date: Tue Apr 28 20:49:03 2020 +0200 Experimental underwater lighting. commit2c5ad9d076Merge:748279835303967a6fAuthor: 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 commit7482798354Author: Joshua Yanovski <pythonesque@gmail.com> Date: Mon Apr 27 21:59:55 2020 +0200 Replace discard in figure-frag. commitd83b4ae69bAuthor: Joshua Yanovski <pythonesque@gmail.com> Date: Mon Apr 27 18:45:57 2020 +0200 Fix sprite lighting, HDR from focus_pos. commit0594238004Author: Joshua Yanovski <pythonesque@gmail.com> Date: Mon Apr 27 18:14:10 2020 +0200 Proper HDR from point lights. commit48c93d2b41Author: Joshua Yanovski <pythonesque@gmail.com> Date: Mon Apr 27 14:01:43 2020 +0200 Brighter ambiance, darker LOD shadows. commite0452e895cAuthor: Joshua Yanovski <pythonesque@gmail.com> Date: Mon Apr 27 13:13:23 2020 +0200 More proper HDR. commit4c6da3ed16Author: Joshua Yanovski <pythonesque@gmail.com> Date: Mon Apr 27 00:13:10 2020 +0200 Trying LOD noise. commit682a3d74c8Author: Joshua Yanovski <pythonesque@gmail.com> Date: Sun Apr 26 23:11:08 2020 +0200 Fix LOD heights in towns. commitcc39e5734eAuthor: Joshua Yanovski <pythonesque@gmail.com> Date: Sun Apr 26 21:01:23 2020 +0200 More LOD fixes. commit8116b21c2eAuthor: Joshua Yanovski <pythonesque@gmail.com> Date: Sat Apr 25 23:54:43 2020 +0200 I like this coloring. commitbc2560ea90Merge:14effdd5de690efe71Author: Joshua Yanovski <pythonesque@gmail.com> Date: Sat Apr 25 23:48:33 2020 +0200 Merge remote-tracking branch 'origin/master' into sharp/small-fixes commit14effdd5dbAuthor: Joshua Yanovski <pythonesque@gmail.com> Date: Sat Apr 25 22:24:35 2020 +0200 Re-saturate. commit48a643955dAuthor: Joshua Yanovski <pythonesque@gmail.com> Date: Sat Apr 25 22:23:57 2020 +0200 Various fixes. commitf7b497a0c2Author: Joshua Yanovski <pythonesque@gmail.com> Date: Sat Apr 25 03:22:49 2020 +0200 Render figures again. commit44e4aad48dMerge:e6f0a5a989ec319a18Author: Joshua Yanovski <pythonesque@gmail.com> Date: Sat Apr 25 02:01:04 2020 +0200 Merge remote-tracking branch 'origin/master' into sharp/small-fixes commite6f0a5a981Author: Joshua Yanovski <pythonesque@gmail.com> Date: Fri Apr 24 16:12:20 2020 +0200 Add atmospheric scattering. commitf2953087f6Author: Joshua Yanovski <pythonesque@gmail.com> Date: Thu Apr 23 00:01:20 2020 +0200 Fix shadowing for specular reflections. commitddd4a67a97Author: Joshua Yanovski <pythonesque@gmail.com> Date: Wed Apr 22 22:56:12 2020 +0200 HDR fixes. commit1015e60deeAuthor: Joshua Yanovski <pythonesque@gmail.com> Date: Tue Apr 21 18:25:19 2020 +0200 More lighting changes. commit80c264abd1Author: Joshua Yanovski <pythonesque@gmail.com> Date: Mon Apr 13 00:29:59 2020 +0200 Lighting experiments. commit8414987e58Author: Joshua Yanovski <pythonesque@gmail.com> Date: Thu Apr 9 02:38:40 2020 +0200 WIP -- lighting changes and soft shadows. commit9cd2b3fb0dMerge:c7ea687eb8b149ad11Author: Joshua Yanovski <pythonesque@gmail.com> Date: Sat Apr 4 02:33:29 2020 +0200 Merge branch 'sharp/new-lighting' into sharp/small-fixes commitc7ea687ebbMerge:47644153122f3319b4Author: 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 commit8b149ad11aAuthor: Joshua Yanovski <pythonesque@gmail.com> Date: Sat Apr 4 02:32:39 2020 +0200 Trying out a new lighting model. commitb0ac9f36f7Author: Joshua Yanovski <pythonesque@gmail.com> Date: Fri Apr 3 07:56:11 2020 +0200 Use bicubic interpolation for terrain. commitf6fc9307a1Merge:33140a29522f3319b4Author: Joshua Yanovski <pythonesque@gmail.com> Date: Fri Apr 3 05:01:41 2020 +0200 Merge remote-tracking branch 'origin/master' into zesterer/lod commit4764415312Merge:ed2d0111d13388ee6aAuthor: Joshua Yanovski <pythonesque@gmail.com> Date: Fri Apr 3 04:54:48 2020 +0200 Merge branch 'sharp/map-colors' into sharp/small-fixes commit13388ee6a4Author: Joshua Yanovski <pythonesque@gmail.com> Date: Thu Apr 2 20:30:08 2020 +0200 Various fixes (to coloring and to soft shadows). commitfbd084a94aMerge:5a089863b4fdf6896aAuthor: 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 commited2d0111d9Author: Joshua Yanovski <pythonesque@gmail.com> Date: Thu Apr 2 06:49:27 2020 +0200 Combining colors and LOD. commit88342640c6Merge:33140a2955a089863bAuthor: Joshua Yanovski <pythonesque@gmail.com> Date: Thu Apr 2 04:49:20 2020 +0200 Merge branch 'sharp/map-colors' into sharp/small-fixes commit33140a2951Merge:4c65a5aedf34d4b379Author: Joshua Yanovski <pythonesque@gmail.com> Date: Thu Apr 2 04:36:21 2020 +0200 Merge remote-tracking branch 'origin/master' into zesterer/lod commit5a089863beAuthor: 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! commit32b2c99109Author: 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. commitf8926a5737Merge:a1aee931e875ae6cedAuthor: Joshua Yanovski <pythonesque@gmail.com> Date: Fri Mar 13 13:32:42 2020 +0100 Merge remote-tracking branch 'origin/master' into sharp/map-colors commit4c65a5aed3Author: Treeco <5021038-Treeco@users.noreply.gitlab.com> Date: Mon Feb 24 16:48:05 2020 +0000 Made LOD setting slider exponential commit2fa7b2d20dAuthor: Joshua Barretto <joshua.s.barretto@gmail.com> Date: Mon Feb 24 17:49:53 2020 +0000 Added mist to LoD commitaab059a450Author: Joshua Barretto <joshua.s.barretto@gmail.com> Date: Mon Feb 24 15:14:06 2020 +0000 Added LoD slider commit779c36b538Author: Joshua Barretto <joshua.s.barretto@gmail.com> Date: Mon Feb 24 12:54:55 2020 +0000 Reduced cost of vertex pushing commit9fea150473Author: Joshua Barretto <joshua.s.barretto@gmail.com> Date: Mon Feb 24 12:38:53 2020 +0000 Fixed maths, improved LoD resolution commit5481df38feAuthor: Joshua Barretto <joshua.s.barretto@gmail.com> Date: Mon Feb 24 11:22:50 2020 +0000 Dynamically relocate LoD vertices to enhance details commita3e36a50abAuthor: Joshua Barretto <joshua.s.barretto@gmail.com> Date: Sun Feb 23 18:13:51 2020 +0000 Simpler terrain spiral rendering commit255f450ae9Author: Joshua Barretto <joshua.s.barretto@gmail.com> Date: Sun Feb 23 16:53:17 2020 +0000 Better LoD precision commit3d027aebe8Author: Joshua Barretto <joshua.s.barretto@gmail.com> Date: Sun Feb 23 16:04:03 2020 +0000 Better falloff commitbe775c9484Author: Joshua Barretto <joshua.s.barretto@gmail.com> Date: Sun Feb 23 15:30:45 2020 +0000 Applied good ideas from experimental branch commit58587b6854Author: Joshua Barretto <joshua.s.barretto@gmail.com> Date: Fri Feb 21 16:15:13 2020 +0000 Minor fixes to LoD merging commit7b42aebd70Author: Joshua Barretto <joshua.s.barretto@gmail.com> Date: Fri Feb 21 15:04:44 2020 +0000 Capped LoD dragging commit8aafc559f8Author: Joshua Barretto <joshua.s.barretto@gmail.com> Date: Fri Feb 21 14:54:37 2020 +0000 Better blending between LoD and terrain border commitedd3455d51Author: Joshua Barretto <joshua.s.barretto@gmail.com> Date: Fri Feb 21 14:40:19 2020 +0000 Fixed LoD z depth, added sea level offset commitb9b0674462Author: Joshua Barretto <joshua.s.barretto@gmail.com> Date: Fri Feb 21 14:27:43 2020 +0000 Better LoD smoothing commita1aee931e7Author: Joshua Yanovski <pythonesque@gmail.com> Date: Fri Feb 21 14:52:17 2020 +0100 Adding shadows. commit2400786c13Author: Joshua Barretto <joshua.s.barretto@gmail.com> Date: Fri Feb 21 13:48:40 2020 +0000 Use world map as LoD source commitdbf650f504Author: Joshua Barretto <joshua.s.barretto@gmail.com> Date: Mon Jan 20 00:48:14 2020 +0000 Better clouds at distance commit5e6f81b86cAuthor: Joshua Barretto <joshua.s.barretto@gmail.com> Date: Sun Jan 19 23:59:02 2020 +0000 sync commit745e7540ddAuthor: Joshua Barretto <joshua.s.barretto@gmail.com> Date: Fri Nov 22 12:40:48 2019 +0000 Improved cloud falloff mist, faster noise sampling commitf6a200d0cbAuthor: 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 commit63d1b2bb22Author: Joshua Barretto <joshua.s.barretto@gmail.com> Date: Thu Nov 21 20:57:46 2019 +0000 Working LoD shader commitf13d98ee3eAuthor: Joshua Barretto <joshua.s.barretto@gmail.com> Date: Thu Nov 21 11:03:40 2019 +0000 LoD first attempt (stack overflow issue)
7.9 KiB (Stored with Git LFS)
7.9 KiB (Stored with Git LFS)