Comments (11)
There was a European Geological Modelling meeting in May 2019 where geologists around the continent showed off their hacks, as detailed in the PDF link at the bottom called "5th_EU_3D_WS_Final_Program_Abstracts_20190502.pdf".
Much of it refers to some software called GoCAD and using WebGL, but I did find that the British Geological Survey has made a whole map of Britain in Minecraft which you can download.
I'm going to ask them if they should do it in Godot instead.
from godot_voxel.
The ESN video looks really nice, and would be useful for many types of games. Are you considering implementing any of these? What is the purpose of this issue?
from godot_voxel.
I make this issue just to list the techniques I've seen, because I'm considering going further and implement one for Godot completely. I've been half-way through Transvoxel 2 years ago but I'm still undecided on which one to take now, as my use case would be a large streamed terrain, and so many people mention they want to make infinite generated worlds^^"
from godot_voxel.
Yeah, open world games are really nice. It would be cool to see more capabilities in Godot to build open world projects, similar to the Grit or Cryengine.
My personal interests are more in the realm of 3D city/transportation simulation (OpenTTD, Cities in Motion, Cities Skylines), where the map has clear boundaries.
What kind of game are you building? Is it open world?
from godot_voxel.
I don't really have a well defined game in mind, mostly ideas, some of which would involve such large worlds. Being able to generate one successfully would be inspiring, like a planet.
from godot_voxel.
What would the player do, mainly explore, build, evolve life?
My son and I have been playing a bit of Minetest and recently Lego Worlds, which both have good game mechanics.
E.g. it might be cool to use the Stylized Planet Generator and/or Gravity Objects to create an open-source exploration game where you could land a spaceship on a procedural planet and explore.
The Lego Worlds is really cool, in that it provides tools for terrain manipulation and prefab structures to build, as well as vehicles. Minetest servers, like Illuna, have many layers of exploration including space and subterranean, as well as some basic terrain modification and building aspects that are part of the core Minetest game.
from godot_voxel.
Here are some other algorithms that are popular and worth consideration.
Surface Nets
Related to surface nets above, this page discusses surface nets and gives a javascript implementation with some optimizations to the algorithm. He compares the number of faces and speeds between marching cubes, marching tetrahedra and surface nets. The latter is far superior with fewer faces and 2x the speed of marching cubes at high complexity. Also discusses the development of these methods and the transition from primal (marching cubes) to dual methods.
https://0fps.net/2012/07/12/smooth-voxel-terrain-part-2/
Manifold Dual Contouring
According to this video, MDC is considerably faster and more accurate than normal DC, and provides manifold meshes. And Lin provides an implementation in code.
https://www.youtube.com/watch?v=l3K-tD3TMqQ
http://faculty.cs.tamu.edu/schaefer/research/dualsimp_tvcg.pdf
https://github.com/Lin20/isosurface
Isosurfaces Over Simplicial Partitions of Multiresolution Grids
Generates manifold, intersection-free surfaces. No code, paper only.
http://faculty.cs.tamu.edu/schaefer/research/iso_simplicial.pdf
Multiresolution Isosurface Extraction with Adaptive Skeleton Climbing
Faster and fewer triangles than MC, with multiple levels of detail. With code.
http://www.cse.cuhk.edu.hk/~ttwong/papers/asc/asc.html
from godot_voxel.
And not a surface extraction algorithm, but a related topic.
Levels Of Detail (LOD)
This link discusses seamless LOD transitions that doesn't use the common chunks, but instead uses a sort of geomorphing technique.
https://dexyfex.com/2016/07/14/voxels-and-seamless-lod-transitions/
This guy is using dual contouring and had stitching problems. He found a solution and provided code.
https://www.reddit.com/r/VoxelGameDev/comments/6kn8ph/dual_contouring_seam_stitching_problem/
from godot_voxel.
It should be noted that I currently can't use any technique relying on geometry or tessellation shaders, until Godot gets some support for them.
For stitches I currently use marching squares skirts like the Ogre implementation does, which is actually a good start at the moment. But I have notes to use simple overlaps like mentionned in this video from a No Man's Sky dev: https://www.youtube.com/watch?v=sCRzxEEcO2Y
from godot_voxel.
As I've been looking at porting John/Lin20's C# implementation of Manifold Dual Contouring to Godot, I've been looking at the work of Nick Gildea who was a resource for John doing MDC.
Nick's repositories contain a Dual Contouring with an Octree, Faster DC w/o an Octree, SSE2 QEF solver, Mesh Simplification Library, and a Voxel engine using DC and LOD in C++.
He also has a blog where he talks about his implementation of the above, stitching seams, and a rudimentary OpenCL DC implementation that combines with OpenGL.
from godot_voxel.
My 2cents: In many of these examples the same structure which defines the surface is also being used to compute the surface.
For example, the description in #123 is of a scalar function f(x,y,z) -> lambda, where f() is defined on vertices of a cubic grid and then it's interpolated for the points in between. However, it uses the same grid to calculate and join (with a triangulated surface) points where f()=0. But there is no reason you have to use the same cubic grid, except that it looks easier to evaluate the f() when you're always starting with a point that you know is on a gridline. But actually, if the first grid was on a different resolution and regular, it would be no bother to find which cell to look up to use for the interpolation of f() at the cost of a floating point division.
Once you separate the two parts from one another, it is then easier to make the calculation grid more sophisticated, for example by allowing for fine or coarse subdivisions, because you don't having to carry the baggage for the evaluation of f() with it. And likewise, you may not need to use a definition of f() that is forced to be compatible with being a calculation grid, and it can take other forms. It's kind of like having a spork, which is not a very good spoon or a very good fork, but is probably the best that can be made if they have to be the same thing.
A while ago I experimented with non-rectilinear subdivisions, which I might have a look at again now. I did a lot of work on CNC machine tool simulation models, where you can think of the model (the f() above) as a massive CSG problem where you are subtracting thousands of swept volumes from a solid cube. This cannot be done using normal CAD methods. See here for example. However, in my book this tech is totally wasted on them, because all they're doing is make simulations of boring engineering parts. It would be far better to build one of these models into a games engine where some actual interesting shapes might get created.
Anyhow, in my opinion, this low level model implementation (transvoxels and whatnot) is just a minor detail. The amazing part is how this works in a games engine in a background thread spectacularly well. I would like to contribute something useful if I can.
from godot_voxel.
Related Issues (20)
- GDExtension API dump wrong type for enum VoxelInstancer::UpMode HOT 3
- So... quick question how would I make the noise larger? HOT 1
- VoxelMeshSDF partition_subdiv description missing info about BAKE_MODE_APPROX_FLOODFILL HOT 1
- VoxelMeshSDF get_aabb() mentions non existant margin property HOT 1
- Dummy page "2" not needed anymore HOT 1
- Assertion printed when previewing last VoxelMeshSDF layer in editor HOT 1
- VoxelModifier preview mesh has gaps with smoothness HOT 3
- Toggling visibility of VoxelModifier does nothing HOT 1
- VoxelModifierMesh changing isolevel does not update preview HOT 1
- Is the VoxelGraphGenerator usable as a base for the generation in a VoxelGenerationScript? HOT 10
- VoxelMeshSDF incorrect BAKE_MODE_ACCURATE_NAIVE description about sign calculation HOT 2
- VoxelMeshSDF BAKE_MODE_ACCURATE_PARTITIONED does not accurately bake PrismMesh HOT 3
- VoxelModifierMesh does not show up under VoxelTerrain HOT 2
- Performing edit on VoxelTerrain that hasn't loaded yet silently fails HOT 6
- Voxel Cubes not texturing. and meshes laggy and unpreforment. HOT 4
- Godot crashes when trying to add any element to the VoxelBlockyTypeLibrary HOT 2
- Error reported using '_GenerateBlock' of 'C #' HOT 3
- VoxelTool.do_* functions do not ignore VoxelModifier on terrain HOT 4
- VoxelModifier get cutout around edited regions HOT 2
- Double custom_build [15073afe3] crash when installing SQLite GDExtension HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from godot_voxel.