2159 Commits

Author SHA1 Message Date
Marcel Märtens
b0ff977297 adjust metrics to rebased Chunks 2019-09-09 10:47:40 +02:00
Marcel Märtens
bdea219d82 switch from hyper http to rouille for http server 2019-09-09 10:07:25 +02:00
Marcel Märtens
ae51f9f9dd update version, revert from static prometheus back to normal because static doesnt supprot registries, and implement most of the metrics except for entity count 2019-09-09 09:54:30 +02:00
Marcel Märtens
2b344e9d94 first implementation of prometheus in veloren for git hash, tick times, chunks loaded, player online, entity count and light count 2019-09-09 09:48:44 +02:00
Joshua Barretto
89b637e94e Merge branch 'fix-jump-height' into 'master'
Fix jump height

See merge request veloren/veloren!485
2019-09-08 15:50:08 +00:00
Joshua Barretto
5986d4e76b Merge branch 'telastrus/vol-fix' into 'master'
Footstep volume fix

See merge request veloren/veloren!489
2019-09-08 15:47:52 +00:00
Geno
58ad2e4d82 Footstep volume fix 2019-09-08 15:47:52 +00:00
Forest Anderson
132020af23 Merge branch 'angelonfira/bump-gfx-device-gl-to-allow-new-nightly' into 'master'
Bumped version

See merge request veloren/veloren!490
2019-09-08 15:34:17 +00:00
Forest
ed88db8213 Updated cargo lock 2019-09-08 11:28:56 -04:00
Forest
a519727548 Bumped version 2019-09-08 11:15:46 -04:00
Joshua Barretto
3eed74986a Merge branch 'scott-c/fix-performance-regression' into 'master'
Fix performance regression; simplify FigureKey

See merge request veloren/veloren!483
2019-09-08 12:01:45 +00:00
scott-c
5edd544f69 Fix performance regression; simplify FigureKey 2019-09-08 19:52:57 +08:00
Forest Anderson
d867bce9c5 Merge branch 'angelonfira/parallelize-ci-better' into 'master'
Changed stages

See merge request veloren/veloren!488
2019-09-07 16:35:10 +00:00
Forest Anderson
95b16c32ab Changed stages 2019-09-07 16:35:10 +00:00
Andrew Pritchard
32a8ceab94 Merge branch 'fix-jump-height' into 'fix-jump-height'
Fix jump height

See merge request veloren/veloren!477
2019-09-07 12:48:49 +00:00
Timo Koesters
f241bc6b82 Merge branch 'timo-attack' into 'master'
Fix wolfs not attacking and adjust movement while attacking

See merge request veloren/veloren!484
2019-09-07 10:25:57 +00:00
timokoesters
e5e29b490b
Make npcs attack in a smarter way 2019-09-07 12:16:55 +02:00
timokoesters
57111af0a7
Fix audio 2019-09-07 11:46:21 +02:00
Joshua Barretto
5dbc0b830e Merge branch 'haslersn/block-groups' into 'master'
common: Rework `Chunk` and `Chonk` implementation

See merge request veloren/veloren!475
2019-09-07 09:14:54 +00:00
Forest Anderson
b68a663386 Merge branch 'revert-d71f2ebf' into 'master'
Revert "Merge branch 'angelonfira/bump-toolchain-sept' into 'master'"

See merge request veloren/veloren!482
2019-09-06 20:19:14 +00:00
Forest Anderson
b7c2d8bdec Revert "Merge branch 'angelonfira/bump-toolchain-sept' into 'master'"
This reverts merge request !481
2019-09-06 20:17:57 +00:00
Forest Anderson
0ddc12699c Merge branch 'angelonfira/bump-toolchain-sept' into 'master'
Bump toolchain

See merge request veloren/veloren!481
2019-09-06 19:05:51 +00:00
Forest Anderson
3ffbfabdf7 Bump toolchain 2019-09-06 15:02:48 -04:00
haslersn
db691b37d1 common: Rework Chunk and Chonk implementation
Previously, voxels in sparsely populated chunks were stored in a `HashMap`.
However, during usage oftentimes block accesses are followed by subsequent
nearby voxel accesses. Therefore it's possible to provide cache friendliness,
but not with `HashMap`.

The previous merge request [!469](https://gitlab.com/veloren/veloren/merge_requests/469)
proposed to order voxels by their morton order (see https://en.wikipedia.org/wiki/Z-order_curve ).
This provided excellent cache friendliness. However, benchmarks showed that
the required indexing calculations are quite expensive. Particular results
on my _Intel(R) Core(TM) i7-7500U CPU @ 2.70 GHz_ were:

| Benchmark                                | Before this commit @ d322384becac | Morton Order @ ec8a7caf42ba | This commit          |
| ---------------------------------------- | --------------------------------- | --------------------------- | -------------------- |
| `full read` (81920 voxels)               | 17.7ns per voxel                  | 8.9ns per voxel             | **3.6ns** per voxel  |
| `constrained read` (4913 voxels)         | 67.0ns per voxel                  | 40.1ns per voxel            | **14.1ns** per voxel |
| `local read` (125 voxels)                | 17.5ns per voxel                  | 14.7ns per voxel            | **3.8ns** per voxel  |
| `X-direction read` (17 voxels)           | 17.8ns per voxel                  | 25.9ns per voxel            | **4.2ns** per voxel  |
| `Y-direction read` (17 voxels)           | 18.4ns per voxel                  | 33.3ns per voxel            | **4.5ns** per voxel  |
| `Z-direction read` (17 voxels)           | 18.6ns per voxel                  | 38.2ns per voxel            | **5.4ns** per voxel  |
| `long Z-direction read` (65 voxels)      | 18.0ns per voxel                  | 37.7ns per voxel            | **5.1ns** per voxel  |
| `full write (dense)` (81920 voxels)      | 17.9ns per voxel                  | **10.3ns** per voxel        | 12.4ns per voxel     |

This commit (instead of utilizing morton order) replaces `HashMap` in the
`Chunk` implementation by the following data structure:

The volume is spatially subdivided into groups of `4*4*4` blocks. Since a
`Chunk` is of total size `32*32*16`, this implies that there are `8*8*4`
groups. (These numbers are generic in the actual code such that there are
always `256` groups. I.e. the group size is chosen depending on the desired
total size of the `Chunk`.)

There's a single vector `self.vox` which consecutively stores these groups.
Each group might or might not be contained in `self.vox`. A group that is
not contained represents that the full group consists only of `self.default`
voxels. This saves a lot of memory because oftentimes a `Chunk` consists of
either a lot of air or a lot of stone.

To track whether a group is contained in `self.vox`, there's an index buffer
`self.indices : [u8; 256]`. It contains for each group

* (a) the order in which it has been inserted into `self.vox`, if the group
    is contained in `self.vox` or
* (b) 255, otherwise. That case represents that the whole group consists
    only of `self.default` voxels.

(Note that 255 is a valid insertion order for case (a) only if `self.vox` is
full and then no other group has the index 255. Therefore there's no
ambiguity.)

Rationale:

The index buffer should be small because:

* Small size increases the probability that it will always be in cache.
* The index buffer is allocated for every `Chunk` and an almost empty `Chunk`
    shall not consume too much memory.

The number of 256 groups is particularly nice because it means that the index
buffer can consist of `u8`s. This keeps the space requirement for the index
buffer as low as 4 cache lines.
2019-09-06 18:20:15 +02:00
haslersn
231302e16b common: Add benchmark for Chonk 2019-09-06 15:44:36 +02:00
haslersn
7ca6d8b5f2 voxygen: Make the Terrain struct generic 2019-09-06 15:43:31 +02:00
haslersn
351b8c91c7 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-06 15:43:31 +02:00
haslersn
fb72faf56b common: prepend/append multiple SubChunks in a batch 2019-09-06 15:33:36 +02:00
haslersn
f16cb02503 common: Calculate magic number in Chonk 2019-09-06 15:33:36 +02:00
haslersn
da40445156 common: Set TerrainChunk::SIZE.z = std::i32::MAX 2019-09-06 15:33:36 +02:00
haslersn
b56de5631f common: For trait ReadVol remove get_unchecked() 2019-09-06 15:33:36 +02:00
Joshua Barretto
fa67696fcd Merge branch 'scott-c/first-person-model' into 'master'
Add first person models

See merge request veloren/veloren!443
2019-09-06 13:02:03 +00:00
scott-c
964f563c35 cleanup comment 2019-09-06 20:22:17 +08:00
scott-c
5f58224f82 Cleanup unused import 2019-09-06 19:35:47 +08:00
scott-c
7838cfa5b2 half camera height when rolling 2019-09-06 19:29:52 +08:00
Joshua Barretto
8ef13f72b7 Merge branch 'desttinghim/sound-effects' into 'master'
Sound Effects

Closes #163 and #97

See merge request veloren/veloren!473
2019-09-06 11:19:32 +00:00
scott-c
df6e611944 Hide player hands when rolling in first person 2019-09-06 19:12:46 +08:00
Louis Pearson
bd52829acb Removed unescessary if statements 2019-09-06 05:02:29 -06:00
scott-c
ad1bccfee0 Simplify model cache key, fixes performance issue 2019-09-06 18:59:05 +08:00
Louis Pearson
c407bc1c2b Change ear pos to Vec3 2019-09-06 04:44:15 -06:00
Louis Pearson
8a1010f9ac Cargo fmt 2019-09-06 04:38:02 -06:00
Louis Pearson
653c633677 Code cleanup 2019-09-06 04:36:42 -06:00
Louis Pearson
322c7ba2b7 Fix warnings 2019-09-06 04:25:17 -06:00
scott-c
84516afff1 Fix first person weapon visible while not wielding 2019-09-06 18:22:26 +08:00
Louis Pearson
561a58fb81 Fix settings move 2019-09-06 04:06:26 -06:00
Andrew Pritchard
0f7c914222 Deref instead of clone vel 2019-09-06 14:22:58 +08:00
Andrew Pritchard
c408c46448 Vec3 is apprently *not* Copy, Set near plane to 0.1 to prevent tirangle flickering 2019-09-06 13:24:42 +08:00
Andrew Pritchard
90bcdacfd8 Vec3 is copy 2019-09-06 12:04:20 +08:00
Joshua Barretto
ca6734b5ba Merge branch 'pfauenauge/flying-rod-axe-pixart' into 'master'
Pixel art for axe and flying rod, shadow for zone names and death message

See merge request veloren/veloren!478
2019-09-05 17:28:33 +00:00
Monty Marz
ed35360945 Pixel art for axe and flying rod, shadow for zone names and death message 2019-09-05 17:28:33 +00:00