47 Commits

Author SHA1 Message Date
Marc Gilleron
a4707f8943 Use integer math to interpolate cell corners, instead of floats, and untangle padding from places it didn't need to be 2020-01-13 00:43:07 +00:00
Marc Gilleron
a06de157bf Tweaked calculation to better ensure no null normals will be produced 2020-01-06 21:48:07 +00:00
Marc Gilleron
b1c38a40c0 Fix something that prevented GCC from compiling 2020-01-06 20:08:51 +00:00
Marc Gilleron
ebe62cde69 Forgot this 2020-01-04 23:30:51 +00:00
Marc Gilleron
8056f7e679 Fix transition meshes not being scaled with LOD, provide LOD in mesher API 2020-01-04 23:24:33 +00:00
Marc Gilleron
a11a95bcce Renamed CHANNEL_ISOLEVEL => CHANNEL_SDF 2020-01-02 21:03:44 +00:00
Marc Gilleron
d4986489cf Fix rare bug with vertex sharing causing long spiky artifacts
Basically we were checking case code of the ReuseCell to know if we can
re-use a vertex from it, but sometimes the associated cell did not write
a re-usable vertex, and we were not resetting such vertex indices.
So in some cases, we were accessing a very old index.
The case code doesn't need to be remembered, we just reset the first vertex.
No need to check if the ReuseCell was empty, we can read the vertex directly,
as it will be -1 anyways if it isn't re-usable. At least, this fixed the bug
and did not reproduce after testing a lot of noise data sets.
2020-01-01 00:41:21 +00:00
Marc Gilleron
ee8a70bc75 Attempt to tweak normals calculation to avoid some cases of null normals 2019-12-31 20:00:39 +00:00
Marc Gilleron
ebc6be35d1 Implement LOD transitions in VoxelLodTerrain
- VoxelBlock contains 6 optional transition meshes
- VoxelLodTerrain calculates transition masks when block visibility changes
- VoxelMesher can now specify different min and max paddings
- Fix Cube::SIDE_POSITIVE/NEGATIVE_X/Y/Z enum not matching Cube::g_side_normals
- Convert transition masks to make up for the Cube:: inconsistency for now
2019-12-31 16:48:46 +00:00
Marc Gilleron
e8bb2fa5e1 Implement rotated transition meshes for all 6 sides,
and fix miscalculated secondary positions on max edges
2019-12-28 21:38:32 +00:00
Marc Gilleron
fe3475e81e Project secondary position along normal as described by the paper 2019-12-27 23:51:20 +00:00
Marc Gilleron
b226c14284 Compute secondary positions and a second border mask to deal with edges 2019-12-27 17:33:30 +00:00
Marc Gilleron
a9952179a7 Transition meshes WIP and bug fixes
- Allow meshers to specify compression flags
- Use uncompressed COLOR to fit extra vertex data for transition meshes
- Simplify a few interpolations
- Fix a few buffer overruns which were not detected by the debugger
- Use array wrappers to better detect overrun mistakes
2019-12-26 20:29:55 +00:00
Marc Gilleron
d768af5bdd Implemented transition meshes, in very basic form.
Work remains to be done:
- Transform the mesh into proper orientation
- Introduce secondary positions to make it fit in a regular block
- Make it available in the API and use it in terrain nodes
2019-12-23 21:44:25 +00:00
Marc Gilleron
6977133006 Forked Transvoxel mesher into an MC one with overlap seam mode.
It's mostly because the transvoxel mesher is going to change,
and the MC mesher will only act as a simplified legacy mesher.
It has experimental support for overlap seams, but it didn't work
well due to Z-buffer precision being too weak.
2019-12-23 21:41:30 +00:00
Marc Gilleron
28d45fa758 Was using wrong triangle table for marching squares. Didn't see any difference tho. 2019-12-16 19:55:35 +00:00
Marc Gilleron
3e52295279 Comment about asymetry 2019-12-15 03:24:03 +00:00
Marc Gilleron
a79404f96c Use proper name in include guard 2019-12-15 03:23:23 +00:00
Marc Gilleron
6568ce3a5f Expose minimum padding 2019-12-15 03:23:06 +00:00
Marc Gilleron
56dc78b8cc Align transvoxel with other meshers, its results were offset cuz its padding is asymetric 2019-12-15 03:22:37 +00:00
Marc Gilleron
add32f89a9 Invert SDF in Transvoxel mesher, otherwise it was producing inverted results... 2019-12-14 21:34:08 +00:00
Marc Gilleron
28cb74e9b1 Fix invalid normals causing occasional shading artifacts 2019-12-14 21:32:30 +00:00
Marc Gilleron
cef43e4087 Take voxel color into account in blocky mesher 2019-09-11 20:10:08 +01:00
Marc Gilleron
959f4432dd A bit of code grooming 2019-09-10 20:42:07 +01:00
Marc Gilleron
026fa96654 Fix mesh corruption when using two different materials 2019-09-10 20:40:42 +01:00
Marc Gilleron
f59b34f1a0 Fix material assignments being shifted if one of the surfaces has no vertex 2019-09-10 20:04:08 +01:00
Marc Gilleron
a0c7201fcd Rename get_stats() => get_statistics() 2019-08-25 17:40:19 +01:00
Marc Gilleron
dc73977a1a Changed profiler to be more like a stack-based one, also made it super light (CPU-wise) 2019-08-18 23:13:12 +01:00
Cory Petkovsek
9c56f75c60 Fix gcc build 2019-08-10 03:31:38 +09:00
Cory Petkovsek
f6a9c5761a Fix gcc sign comparison warnings 2019-06-18 14:24:56 +09:00
Cory Petkovsek
5ad555c439 Fix gcc multiline comments, uninitialized vars, unused vars warnings 2019-06-18 12:38:44 +09:00
Marc Gilleron
9d2c491fe9 Remove some comments 2019-05-25 15:53:36 +01:00
Marc Gilleron
d01b00a29b Renamed VoxelMesherDMC::OctreeMode => SimplifyMode 2019-05-25 15:00:22 +01:00
Marc Gilleron
d15d54eb95 Renamed HermiteValue.value => sdf 2019-05-25 14:53:43 +01:00
Marc Gilleron
cae44985a8 Comments 2019-05-25 14:34:09 +01:00
Marc Gilleron
e242950cb2 Increased a bit marching squares skirts threshold 2019-05-20 20:25:52 +01:00
Marc Gilleron
b9add5d671 Allow more than one thread for mesh updates, also made it generic 2019-05-19 18:27:49 +01:00
Marc Gilleron
38062b32fe Code style 2019-05-19 18:24:03 +01:00
Marc Gilleron
1065aa40ef Useless comment 2019-05-12 16:17:57 +01:00
Marc Gilleron
81eeb48ac6 Reduce amount of marching squares generated as skirts 2019-05-09 19:11:40 +01:00
Marc Gilleron
4e9880fb8c Fix bad value fetch 2019-05-05 17:01:40 +01:00
Marc Gilleron
46784e4700 Make marching cubes skirts an option in VoxelMesherDMC, also use more C++11 initializers 2019-05-05 17:00:42 +01:00
Marc Gilleron
1f219e68eb Added marching square skirts to hide most LOD cracks 2019-05-05 03:56:18 +01:00
Marc Gilleron
7c6d4f3242 Moved ObjectPool to util/ and moved OctreeTables to root 2019-04-29 21:31:08 +01:00
Marc Gilleron
66d4a913bd Use std::vector for speed 2019-04-28 21:02:42 +01:00
Marc Gilleron
faefde721a Add base class to all meshers, gather common things in it 2019-04-28 20:48:59 +01:00
Marc Gilleron
12a97cca5a Reorganize all files and rename a few things 2019-04-28 17:58:29 +01:00