-
Notifications
You must be signed in to change notification settings - Fork 4
/
ROADMAP
116 lines (84 loc) · 6.42 KB
/
ROADMAP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
================================================================================
=== >>> === tasks below are planned for the upcoming 0.7.2 milestone === <<< ===
================================================================================
M) Task title: "integrate triangle meshes as an external model-viewer/plug-in"
1) Implement ray-intersect for triangle meshes from TheDreamMachine
(http://thedreammmechanists.blogspot.fr/) <- rewrite with UniSIMD assembler
(https://sourceforge.net/projects/thedreammachine/) <- use this as a base
2) Load triangle meshes from standalone scene files in runtime
3) Implement tesselation of quadrics with varying LOD, test performance
================================================================================
=== >>> === tasks below are planned for the upcoming 0.7.3 milestone === <<< ===
================================================================================
Q) Task title: "add support for quartic (4th order: Torus, Egg) surfaces (RaVi)"
1) Implement quartic solvers for Torus and Egg from RaVi demo (using SIMD trig)
(http://www.winosi.onlinehome.de/Ravi.htm) <- rewrite with UniSIMD assembler
(https://github.com/mczero80/RaVi) <- use this code snapshot as a base
2) Add quartic surface support to custom clipping in engine and tracer
3) Implement tesselation of quartics with varying LOD, test performance
================================================================================
=== >>> === tasks below are planned for the forthcoming 0.7.x series === <<< ===
================================================================================
K) Task title: "use configuration utils (autotools, CMake, etc) for building"
1) Use single build script for all host CPU architectures on Linux
2) Keep cross-compilation on x86-64 Linux hosts (targeting QEMU linux-user mode)
3) Consider adding continuous integration (CI) tests
================================================================================
T) Task title: "consider packed SIMD tile traversal (instead of scanline)"
1) Current rendering approach uses scanline traversal with SIMD width
2) Current tile width must be large enough to fit maximal SIMD width
3) Consider new approaches where tile is traversed with packed SIMD
4) New tile area needs to be large enough to fit maximal SIMD width
5) Consider replacing SIMD-width-specific backend macros with runtime code
6) Experiment with work granularity for multi-threading (1 tile?, 1 SIMD?)
================================================================================
Y) Task title: "experiment with ray-marching algorithms and fractal shapes"
================================================================================
U) Task title: "implement UV-mapping for quadrics"
1) Implement trigonometric functions across SIMD targets (check sleef for algos)
2) Use trigonometric functions to implement UV-mapping for quadrics
3) Implement 2x2-matrix for surface-UV to texture-XY coords transform
================================================================================
B) Task title: "achieve bit-exact fp-compute across modern SIMD targets"
1) Reimplement fp-related parts of the engine core as ASM sections (in task R)
2) Rearchitect engine core to minimize ASM enter/leave overheads (in new parts)
3) Test if deterministic order of IEEE-compatible fp produces bit-exact results
4) Calculate test image check-sums, compare across modern RISC and x86 targets
5) Test internal fp-color planes for exact results to avoid hiding discrepancy
6) Check out minpt (https://github.com/hi2p-perim/minpt) for new features
7) Consider using SIMD pow for proper Gamma-correction with 1.0/2.2, 2.2 exp
8) Add specular highlights on glossy surfaces for path-tracer (SIMD acos, pow)
9) Add separate self-emittance props to light surfaces in scene definition file
================================================================================
I) Task title: "rewrite smallpt with ISPC, use ifilippov/raytracer as a base"
(https://www.kevinbeason.com/smallpt/) <- old performance baseline (C++)
(https://github.com/ifilippov/raytracer) <- new performance baseline (ISPC)
(https://github.com/ispc/ispc) compare with QuadRay's path-tracer (task S)
================================================================================
C) Task title: "add support for real-time caustics and soft-shadows (from RaVi)"
(http://www.winosi.onlinehome.de/Ravi.htm) <- rewrite with UniSIMD assembler
(https://github.com/mczero80/RaVi) <- use this code snapshot as a base
(https://github.com/VectorChief/UniSIMD-assembler) integrate with QuadRay
================================================================================
N) Task title: "consider using quaternions to represent transform internally"
(may require significant redesign of backend structures and code in tracer.*)
(better schedule this task for the next major update, also check tasks R, B)
(check the difference in compute accuracy between matrices and quaternions)
================================================================================
R) Task title: "reassemble QuadRay from earlier/simpler branches, write docs"
================================================================================
H) Task title: "implement fog, tone mapping + halos for HDR-oversaturated spots"
================================================================================
D) Task title: "implement depth-of-field and motion-blur techniques"
================================================================================
A) Task title: "implement chromatic aberration, separate R,G,B rays"
================================================================================
X) Task title: "consider advanced path-tracing methods (bidirectional, MLT)"
================================================================================
O) Task title: "consider support for more operating systems"
1) Create DEB/RPM packages for Linux (consider new formats like Snap & Flatpak)
2) Test the engine (RooT demo, CORE/SIMD tests) with Free/OpenBSD
3) Write an Android app for RooT demo, use engine's core as native/jni library
4) Port the engine (RooT demo, CORE/SIMD tests) to Apple's macOS, iOS
5) Perform feasibility study for Xbox One/Series X, PS4/5 porting, VR support
================================================================================