From: Svjatoslav Agejenko Date: Fri, 20 Mar 2026 20:51:34 +0000 (+0200) Subject: docs: add TODO roadmap X-Git-Url: http://www2.svjatoslav.eu/gitweb/?a=commitdiff_plain;h=122651d08ae8284fb9d5ed7a7b063f12b88aa698;p=sixth-3d.git docs: add TODO roadmap - Add comprehensive TODO roadmap with organized sections - Consolidate future ideas into TODO.org - Remove outdated ideas and simplify structure --- diff --git a/TODO.org b/TODO.org new file mode 100644 index 0000000..25051af --- /dev/null +++ b/TODO.org @@ -0,0 +1,95 @@ +* Documentation +** Clarify axis orientation (X, Y, Z) for AI assistants and developers +Add a coordinate system diagram to the documentation. + +* Add 3D mouse support + +* Demos +** Add more math formula examples to "Mathematical formulas" demo +** Allow manual thread count specification in performance test demo +By default, suggest using half of the available CPU cores. + +** Rename shaded polygon demo to "Shape Gallery" or "Shape Library" +Extend it to display all available primitive shapes with labels, +documenting each shape and its parameters. + +* Performance +** Benchmark optimal CPU core count +Determine the ideal number of threads for rendering. + +** Autodetect optimal thread count +Use half of available cores by default, but benchmark first to find +the sweet spot. + +** Developer tool: visualize render segment boundaries +Draw borders around render segments to show which thread renders which +area. Allow dynamic segment size adjustment to balance CPU load evenly +between threads. + +** Investigate additional performance optimizations +Focus on critical pixel fill loops: +- Textured polygon +- Flat polygon +- Line +- Billboard + +* Features +** Add quaternion math to replace or supplement current rotor system +** Add polygon reduction based on view distance (LOD) +** Add object fading based on view distance +Goal: make it easier to distinguish nearby objects from distant ones. + +** Add support for constructive solid geometry (CSG) boolean operations +** Describe how shading works + +Make separate demo about that with shaded spheres and some light +sources. + +Make dedicated tutorial about shading algorithm with screenshot and +what are available parameters. + +** Add shadow casting + ++ Note: Maybe skip this and go straight for: [[id:bcea8a81-9a9d-4daa-a273-3cf4340b769b][raytraced global + illumination]]. + +Study how shadows are done. Evaluate realtime shadows vs pre-baked +shadows. + +** Add raytraced global illumination support +:PROPERTIES: +:ID: bcea8a81-9a9d-4daa-a273-3cf4340b769b +:END: + +- Raytracing must have configurable ray bounce count. +- Raytracing results should be cached and cache must be updated + on-demand or when light sources or geometry changes. + +** Move TODO from index.org into current file +** Add dynamic resolution support ++ When there are fast-paced scenes, dynamically and temporarily reduce + image resolution if needed to maintain desired FPS. + +* Add clickable vertexes + +Circular areas with radius. Can be visible, partially transparent or +invisible. + +Use them in 3D graph demo. Clicking on vertexes should place marker +and information billboard showing values at given XYZ location. + +Add formula textbox display on top of 3D graph. +- Consider making separate formula explorer app where formula will be + editable and there will be gallery of pre-vetted formulas. + - make this app under Sixth parent project. + - Consider integrating with FriCAS or similar CAS software so that + formula parsing and computation happens there. + +* Bugs +** Fix text rendering outside thread-specific drawing area +Occurs when text is forward-oriented. +* Study and apply where applicable ++ Read this as example, and apply improvements/fixes where applicable: + http://blog.rogach.org/2015/08/how-to-create-your-own-simple-3d-render.html + ++ Improve triangulation. Read: https://ianthehenry.com/posts/delaunay/ diff --git a/doc/index.org b/doc/index.org index 4b7eafc..4f08956 100644 --- a/doc/index.org +++ b/doc/index.org @@ -708,58 +708,4 @@ so multiple views can have different debug configurations simultaneously. [[https://www3.svjatoslav.eu/projects/javainspect/][JavaInspect]] utility) - Study [[https://www3.svjatoslav.eu/projects/sixth-3d-demos/][demo applications]]. -* Future ideas -:PROPERTIES: -:CUSTOM_ID: future-ideas -:ID: 2258231b-007d-42d3-9ba9-a9957a0dfc56 -:END: - -+ Read this as example, and apply improvements/fixes where applicable: - http://blog.rogach.org/2015/08/how-to-create-your-own-simple-3d-render.html - -+ Improve triangulation. Read: https://ianthehenry.com/posts/delaunay/ - -+ Partial region/frame repaint: when only one small object changed on - the scene, it would be faster to re-render that specific area. - - + Once partial rendering works, it would be easy to add multi-core - rendering support. So that each core renders its own region of - the screen. - -+ Anti-aliasing. Would improve text readability. If antialiasing is - too expensive for every frame, it could be used only for last frame - before animations become still and waiting for user input starts. - -** Render only visible polygons -:PROPERTIES: -:CUSTOM_ID: render-only-visible-polygons -:ID: c32d839a-cfa8-4aec-a8e0-8c9e7ebb8bba -:END: - -Very high-level idea description: - -+ This would significantly reduce RAM <-> CPU traffic. - -+ General algorithm description: - + For each horizontal scanline: - + sort polygon edges from left to right - + while iterating and drawing pixels over screen X axis (left to - right) track next appearing/disappearing polygons. - + For each polygon edge update Z sorted active polygons list. - + Only draw pixel from the top-most polygon. - + Only if polygon area is transparent/half-transparent add - colors from the polygons below. - -+ As a bonus, this would allow to track which polygons are really - visible in the final scene for each frame. - - + Such information allows further optimizations: - - + Dynamic geometry simplification: - + Dynamically detect and replace invisible objects from the - scene with simplified bounding box. - - + Dynamically replace bounding box with actual object once it - becomes visible. - + Dynamically unload unused textures from RAM.