Comments (6)
Revised roadmap as of 1/13/2024.
Part 1
- Implement 3D triangle rasterization (projection, clipping, barycentric coordinates, perspective correctness)
- Implement vertex buffers, attribute buffers, and index buffers
- Implement 8-bit texturing
- Implement basic scene graph which feeds the renderer draw calls every frame for visible geometry
- Implement one pixel shader for all geometry just to get everything on-screen
- Various engine design clean-ups to support renderer development as needed (scene management, etc.)
- Get to a geometry-complete state with the chunk system, meaning all voxels and entities are appearing in-world
Part 2
- Get to a geometry-complete state with sky objects, particles, and screen-space fog (fog shading not required)
- Implement pixel shader per material (opaque, alpha-tested, ghost, chasm wall, etc.)
- Implement sky gradient using dither textures
- Implement lights using light tables and basic forward rendering, supporting up to 8 lights per draw call
- Get to a complete state with lighting voxels and entities using the light levels from the original game
- Get appearance to be nearly identical to Arena while supporting any screen resolution
Part 3
- Implement voxel visibility manager using quadtree
- Optimize voxel draw call generation
- Implement entity visibility manager using bounding boxes
- Optimize entity draw call generation
- Implement sky object visibility manager
- Optimize sky object draw call generation
- Change triangle clipping from world space to clip space
- Implement lighting using clip space -> world space transform in rasterizer
- Render sky and weather near the camera and without depth testing so far plane can be closer
- Sort entities by distance (fixes ghost rendering)
- Prioritize lights by distance (fixes shading with tightly-grouped lights)
- Implement puddle shader again
- Optimize rasterizer and pixel shading for higher pixels per second
- Add multi-threaded pixel shading
from opentesarena.
#252 is a big enough issue with rain/snow that it should be considered a blocker for finishing part 3.
from opentesarena.
Done with #252.
from opentesarena.
Going to skip harder optimizations like occlusion culling and just optimize the rasterizer and shaders a more conventional way with fewer special cases/algorithms/etc..
Ideally opaque meshes would draw front to back without depth reads and then sky would draw after it with a depth < INFINITY
check, but that's too hard to implement, so instead going to draw sky first and then everything else after it.
from opentesarena.
Deciding how to handle tiled rendering with puddles and ghosts, because these two shaders have to read from the frame buffer. I think trying to do multi-pass shading is a good idea instead of coming up with a complex tile scheduler to keep threads from blocking on unfinished tiles.
from opentesarena.
Related Issues (20)
- Mountains are floating HOT 6
- Rename default branch from master to main HOT 6
- Improving first-time contributor experience on Windows HOT 1
- A Question about the capablities of OpenTESAreana HOT 1
- Is this still being worked on? HOT 2
- [Future Enhancement] Fan translations support (and improved .EXE unpacking) HOT 11
- Hit Chance Calculation. Clarification/Verification requested for wiki HOT 1
- Is external MIDI supported? HOT 1
- Switch to GitHub Actions HOT 4
- C++20 HOT 3
- Change Travis CI badge in Readme to GitHub Actions HOT 2
- Change ArenaPath to ArenaPaths HOT 8
- Mysterious performance hiccup every ~3 seconds HOT 1
- Job system
- Very slow performance HOT 5
- -march=native not supported on Apple M1 HOT 2
- Game world palette documentation HOT 11
- Triangle clipping improvement HOT 1
- Revise Readme to prioritize obtaining game files from Steam HOT 3
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 opentesarena.