This PR contains a prototype viewer.py application for computing "interaction surface points".
Context:
In many scenarios a heuristic of unoccluded point to surface distance is desired.
Checking against a single point is prone to edge case errors and unreliable (e.g. when an object conveniently blocks the center).
Using the full mesh is intractable.
Using a reduced representation like AABB is error prone for complex shapes (imagine the classic L shaped couch and this becomes obvious).
Instead, "interaction surface points" provide a pre-computed set of points which cover the surface of an object allowing distance and occlusion checks against a set of points in order to reduce the likely-hood of edge cases.
Implementation:
Concretely, we use horizontal raycasting from the AABB boundary to collect a set of exterior surface points.
We then cull the point set by removing points with lowest pairwise distance until a configurable maximum number of points remain. This provides a heuristically uniform distribution.
We cache the points in MarkerSets and serialize to template metadata such that pre-computed points can be re-loaded from the SceneDataset rather than re-computed at runtime.
TODO: migrate to a util, pre-compute over dataset
How Has This Been Tested
Viewer application demo code.
Try it out:
run viewer.py on your scene of choice.
right click an object to compute the interaction surface points (displayed in yellow)
'r' increments radial samples (+shift to decrement)
'v' increments vertical samples (+shift to decrement)
'c' increments max points after culling (+shift to decrement)
Motivation and Context
This PR contains a prototype viewer.py application for computing "interaction surface points".
Context:
In many scenarios a heuristic of unoccluded point to surface distance is desired.
Instead, "interaction surface points" provide a pre-computed set of points which cover the surface of an object allowing distance and occlusion checks against a set of points in order to reduce the likely-hood of edge cases.
Implementation:
Concretely, we use horizontal raycasting from the AABB boundary to collect a set of exterior surface points. We then cull the point set by removing points with lowest pairwise distance until a configurable maximum number of points remain. This provides a heuristically uniform distribution. We cache the points in MarkerSets and serialize to template metadata such that pre-computed points can be re-loaded from the SceneDataset rather than re-computed at runtime.
TODO: migrate to a util, pre-compute over dataset
How Has This Been Tested
Viewer application demo code. Try it out:
viewer.py
on your scene of choice.Example:
https://github.com/user-attachments/assets/6d69586c-541f-4a7c-ab08-fe833e7d9c32
Types of changes
Checklist