acts-project / acts-project/acts

Proposal: surface and portal navigation (including target surfaces) for Gen3

Abierto
#3,526 5 comentarios 0 reacciones 1 asignado Reclamado por @asalzburger Ver en GitHub
Stale
Lenguaje dominante
C++
Estrellas
131
Forks
276
Merge medio
3 d 13 h
PR fusionados (30 d)
112

Descripción

The current Gen1/Gen2 navigators have to deal with different (implicit) navigation streams:
* surfaces and portals from the geometry
* surfaces from external sources
* target surface(s)

The proposal is to make those streams for Gen3 explicit and base them onto the same implementation:

- a future navigator would be able to hold several (for the beginning fixed number) of navigation streams that all solve their respective navigation using shared logic & implementation: surface candidates are held by a navigation kernel that is updated by the stream until the navigation kernel is exhausted.
- these streams are processed by the navigator who then picks the closest solution of all streams and performs the associated navigation action
- the streams will have an explicit hierarchy otherwise, e.g. target stream overwrites geometry stream

The proposal would be the following 2-3 streams (and associated kernels):
- `target stream`: this stream holds the target surface(s) - this can be the final target surface, but also what was formally called `external surfaces`. The kernel of this stream is not really updated, just the tracing of the candidates internally is updated.

- `geometry stream`: this stream comes from the geometry and runs on a kernel (~ similar to what is now called the `NavigationState`) that is updated by the volumes navigation delegates (either during the stepping) and/or at portal passing.

Test, development sequence:
- [x] Write a `NavigationKernel` prototype (first w/o dependence on the stepper for multi-surface approach)
- [ ] Write a `StreamNavigator` prototype having two different streams
- [ ] Write extensive unit tests of standard and edge cases how such a navigator should behave
- [ ] Fill the `StreamNavigator` with two streams: sensitives and portals/boundaries from Gen1/Gen2 and demonstrate that correct navigation can be achieved
- [ ] Proof of concept

If/when proof of concept is achieved:
- [ ] change API of NavigationDelegates to fill `NavigationKernel` instead of `NavigationState` (or morph NavigationKernel into NavigationState)
- [ ] Run test on Gen2 ODD

*Watchpoints*:
- `target stream` should overwrite `geometry stream`, i.e. if a surface is in the `target stream` it should be ignored somehow in a the `geometry stream`: possible solution is to hand exclusion candidates to the delegate when updating the kernel (i.e. could be a kernel member)

Guía de contribución

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.