Repository navigation
[rMesh] Faster ray -> mesh collision check - #6330
Merged
Merged
Conversation
… the raycast check is faster ~50% faster
Owner
|
@JeffM2501 thanks for the improvement! |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
This PR adds a simple optimization to GetRayCollisionMesh that in my testing improves the raycast speed by about 50% in the mesh picking demos.
The current code transforms every vertex in the mesh into worldspace to compare it against the worldspace ray.
This means that we have to do 3 transforms per triangle, and that adds up, fast.
This PR instead transforms the ray into model space so that we can just test the vertex data without doing any math on them. The point is transformed by the inverse of the transform matrix once, and the direction by the rotation of that matrix, once.
This is much faster than transforming every vertex for every triangle.
There is a fix up step at the end that transforms the model space hit pos and normal, back into worldspace, but again this is one transform total.
With this change, we do a max of 4 transforms per raycast check, not Triangle count * 3.