Sixth 3D - 3D engine
-Table of Contents
- --
-
-
- This is a subproject of Sixth - -
- download latest - snapshot - -
- This program is free software; you can redistribute it and/or modify it under - the terms of version 3 of the GNU Lesser General Public - License or later as - published by the Free Software Foundation. - - -
- Program author:
-
-
-
- Svjatoslav Agejenko -
- Homepage: http://svjatoslav.eu/ -
- Email: mailto://svjatoslav@svjatoslav.eu/ -
-
- - other applications hosted at svjatoslav.eu -
-
-
- In software, pure Java realtime 3D rendering engine. With the final goal of - becoming a platform for buildng 3D user interfaces. - -
1 Project description
-- System is implemented in Java because: -
--
-
- It scales well to handle great complexity. -
- It is easy to refactor and experiment with. -
- It is fast enough thanks to Java virtual machine just-in-time compiler. -
- Easy to run on various hardware platforms and operating systems. -
- 3D rendering is done in software, 100% pure Java on CPU. At least for now. - Modern CPU cores count keeps growing and therefore rendering by CPU is not as - expensive as it used to be for the old single core systems. -
- -- CPU rendering performance is already good enough to implement usable 3D UI at - sufficient detail level, resolution and frame rate. -
- -- Pure Java also means easy portability and installation. No need to deal with - platform specific dependencies. -
- -- Also CPU rendering allows to easily test different rendering algorithms and - retains complete control of every rendered pixel. -
-2 Software development
-- Instructions to embed Sixth-3D in your project as a library. Maven *pom.xml* - file snippet: -
-<dependencies> +++- + -Sixth 3D - 3D engine
+ +++ +1 General
+++ ++
+- This is a subproject of Sixth +
+ +- This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. +
+ +- Program author: +
+ ++
+- Svjatoslav Agejenko +
+- Homepage: https://svjatoslav.eu +
+- Email: mailto://svjatoslav@svjatoslav.eu +
+- Other software projects hosted at svjatoslav.eu +
+++1.1 Source code
++++
+- Download latest snapshot in TAR GZ format +
+ +- Browse Git repository online +
+ +- Clone Git repository using command: +
+ ++git clone https://www2.svjatoslav.eu/git/sixth-3d.git + ++- See JavaDoc. +
+++ +2 Project description
+++ ++
+ +- See: demos of current 3D engine capabilities +
++In software, pure Java realtime 3D rendering engine. With the final +goal of becoming a platform for buildng 3D user interfaces and +interactive data visualization for project Sixth. +
+ ++Sixth 3D can be also used as standalone 3D engine in your project. +
+++2.1 Justification for software rendering
++++3D rendering is done in software, 100% pure Java on CPU. At least for +now. Modern CPU cores count keeps growing and therefore rendering by +CPU is not as expensive as it used to be for the old single core +systems. +
+ ++CPU rendering performance is already good enough to implement usable +3D UI at sufficient detail level, resolution and frame rate. +
+ ++Also CPU rendering allows to freely test different rendering and +optimization algorithms and retains complete control of every rendered +pixel. +
+++2.2 Justification for Java
++++
+- It is easy to refactor and experiment with. +
+ +- Easy portability and installation. No need to deal with platform +specific dependencies. +
+ +- It scales well to handle great complexity. +
+ ++
+- Allows to implement clever performance optimizations (instead of +going for GPU offered brute-force rendering approach). +
+- No limitations imposed by: +
+ ++
+- requirement for decent GPU +
+- GPU missing features +
+- GPU missing/incomplete/buggy drivers +
+- OpenGL specification +
+- It is fast enough thanks to: +
+ ++
+- Java virtual machine just-in-time compiler. +
+- Growing CPU cores count. +
+- As a result it is easy to run on various hardware platforms and +operating systems. +
+++3 API documentation
++++
+ +- See JavaDoc. +
++Note: due to a lack of time, there is still big room for improvement +on documentation. +
+ ++So far best resource is to download and explore source code for: +
++
+- 3D engine (generated code graphs (generated using JavaInspect)) +
+- For API usage examples, see demos +
++4 Instructions to embed Sixth-3D in your project
++-+Maven *pom.xml* file snippet: +
++ +- -<dependencies> ... - <dependency> - <groupId>eu.svjatoslav</groupId> - <artifactId>sixth-3d</artifactId> - <version>1.0</version> - </dependency> + <dependency> + <groupId>eu.svjatoslav</groupId> + <artifactId>sixth-3d</artifactId> + <version>1.1</version> + </dependency> ... -</dependencies> +</dependencies> -<repositories> +<repositories> ... - <repository> - <id>svjatoslav.eu</id> - <name>Svjatoslav repository</name> - <url>http://www2.svjatoslav.eu/maven/</url> - </repository> + <repository> + <id>svjatoslav.eu</id> + <name>Svjatoslav repository</name> + <url>http://www2.svjatoslav.eu/maven/</url> + </repository> ... -</repositories> +</repositories>-- Auto-generated graphs for parts of - Sixth-3D code/architecture using this tool -
-++5 TODO features to add
++++
+- 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, in would be easy to add multi-core +rendering support. So that each core renders it's own region of the +screen. +
+ +- Antialiazing. Would improve text readability. If antialiazing 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. +
++
+- 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 boudnig box with actual object once it +becomes visible. +
+- Dynamically unload unused textures from RAM. +
++