Supply normals for edge hits #7039
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Now, you may be asking, "how can an edge have a sensible normal".
In FSO, we have a lot of places that expect to get a valid normal for every collision. So what to do in the case of an edge hit? In most cases, especially for VFX, it's enough to get a normal that's sufficiently close and contiguous compared to surrounding normals. As such, returning the normal of any of the faces that an edge belongs to is likely going to be a sufficient approximation.
There's a few places that still calculate manual normals in case of an edge hit with a different strategy, but as these don't rely on the value returned by the collision code, we can ignore them here.
This fixes several particle related bugs where a proper normal was expected, and restores normal-alignment functionality for beams that was removed in #7038