lux-client's People
lux-client's Issues
Light floating-point rounding errors
The light mesh seems to experience floating-point rounding errors even at a relatively small distance, it can also rarely be seen near the spawn as black or white stripes between chunks.
Low-size mipmaps are always black
Dithering
Dithering is needed to smooth out color banding that is visible in the lightning system, perhaps some OpenGL feature already does that, but needs to be enabled, or perhaps manual dithering (e.g. using bayer matrix) needs to be implemented in frag shader.
Ambient occlusion
Ambient occlusion is very easy to add, as there are only 4 possible case for a vertex, which depend on the opacity of surrounding blocks, based on these cases a color would be given to the vertex. It seems though that it needs to happen outside meshing, since diagonal access for neighbouring chunks is also needed, it could happen in the same function where future lightning system would, see #5.
Depth buffer bottleneck
Currently due to a high number of fragments tested to the depth buffer, there is a rendering bottleneck.
Possible solution would be to dismiss chunks that are guaranteed not to be visible.
Debug user interface
Debug user interface showing coordinates, and other debug info, also allowing for debug actions, such as switching to wireframe mode.
Field of view system
A system where obstructed objects are not visible, similarly to the game Monaco, the obstructed area would later show memory that the player has of that area. Additionally, the player shouldn't see what's behind them.
Frustrum culling
Culling chunks that are not visible could give some performance gain.
Greedy meshing
Meshing can use greedy meshing instead of simple face culling, this could require some modifications to texture loading, and should be optional. It can greatly reduce the number of vertices, so it could give substantial performance gain.
Random tileset noise
A mechanism that generates 10 random noise textures per-save that is later randomly mixed into the tileset should be generated.
Basic entity rendering
Entities should be rendered, additionally server can transport data like entity name, that would be displayed in the client (above the entity). If action system is implemented, actions should be sent and rendered (e.g. entity walking animation), in the future they would also play sounds.
Level of detail
There can be few versions of a mesh for a chunk, similarly to how mipmaps work. Chunks that are far away would use lower detail of the mesh, that for example is 2x smaller than the original.
Static lightning
Lightning using breadth-first search is fast and easy to add, possible obstacle is how map is divided in chunks.
OpenGL 3.3 support
Opengl 3 adds a lot of useful features, some examples:
- array textures for texture atlases
- geometry shader to reduce CPU->GPU transfer and move computations to GPU (e.g. meshing)
- VAOs
Still, the OpenGL 2.1 should remain maintained too.
Darkness noise
some amount of random noise textures should be generated on game start, that get increasingly mixed into the game with lower luminosity and then iterated based on time, this should give the visual effect of noise seen in darkness
Weird block border tearing
Block borders flash with black color sometimes, especially when the player is looking in a straight angle towards axes. Perhaps related to #2. Possibly correlated is the fact that a shape going from the center of the screen is shown when the tearing happens, this is visible only in wireframe mode.
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.