|
|
# Octree Requirements
|
|
|
* Fixed attributes or functionally computed attributes
|
|
|
* Any number of attributes but at least the following:
|
|
|
* RGB Colour
|
|
|
* Surface or not boolean
|
|
|
|
|
|
There needs to be some flag to say if attribute is f-rep computed or baked as a constant. If computed then information about what equation and parameters should be used must be given. It is possible that a node has both baked and computed attributes, even for the same attribute.
|
|
|
|
|
|
Efficient transformation of an octree from one frame to another must be possible. This means that the calculation of a delta and the application of the delta to a octree must be efficient in terms of memory reallocations and moves.
|
|
|
|
|
|
Cache coherence must be considered for both GPU and CPU context. It must also be the case that no data transformation should be performed when uploading an octree to the GPU. The application of an octree delta may also be something to perform on the GPU to minimise data transfers.
|
|
|
|
|
|
The ability to limit the number of levels traversed to lower the level-of-detail and enable compression should also be possible. This means that approximations of attributes need to be stored at parent nodes or computed from the parents center point. Another option is to store the levels with occupancy information only and only keep attribute data in the parents.
|
|
|
|
|
|
# Octree Design Ideas
|
|
|
* Store the attributes separately for each type of attribute, still attempting to maintain cache coherence during usual lookup operations. For example, baked RGB should be in one memory block, computed RGB equations in another, normals in another, object classifications in another. Any block can then be excluded from a data stream.
|
|
|
|
|
|
* Not all attributes may be available for each octree node so a list of attributes is required. Could be a 64 or 128 bit set of flags to indicate existence of attributes. All zero would mean the node is empty.
|
|
|
|
|
|
* All sibling nodes should be located together in memory with a heap structure that can be optimized for 1-8 sibling counts.
|
|
|
|
|
|
* Each node could have a median / mean center point to approximate better its children of the multiple points stored at that level.
|
|
|
|
|
|
* Computed attributes could be baked into the octree before streaming to another device that has lower computational resources (eg. a web browser).
|
|
|
|
|
|
* Don't store computed attributes in the octree but instead dynamically generate octrees from f-rep models and then union two octrees together. Allow f-rep equations to use other octrees as parameters, perhaps f-rep should be the top-level representation with octree query functions being available. A default function would then be `return octree(pc1, x, y, z, 10);`.
|
|
|
|
|
|
* Allow f-rep scenes to be baked to an octree form. This can use GPU.
|
|
|
|
|
|
* Support octree union, this can be done in f-rep style.
|
|
|
|
|
|
# Non-Octree Options
|
|
|
Store points relative to some approximate geometric representation as a distortion map similar to bump mapping. This however requires a good geometric representation (or f-rep).
|
|
|
|
|
|
# Scene Interface
|
|
|
What observations and actions need to be taken with a scene object?
|
|
|
|
|
|
* Set or replace voxel data and attribute maps
|
|
|
* updateVoxels(pointcloud)
|
|
|
* modify scene equations
|
|
|
* get scene equations
|
|
|
* get/set bounding box for scene
|
|
|
* serialize / deserialize for compression / decompression
|
|
|
* ray march through the scene for rendering (or marching cubes). Directed search from point.
|
|
|
* knn search and radius search (or surface following)?
|
|
|
* calculate scene deltas?
|
|
|
* bake scene to voxel form (use cuda)
|
|
|
* query a specific location
|
|
|
* add multiple attribute scene equations
|
|
|
* scene iterators
|
|
|
|
|
|
Each scene has a single voxel form and a single f-rep form. The f-rep form is dominant and specifies how the voxel form is to be included.
|
|
|
|
|
|
The scene could be double buffered to allow deltas to be extracted, and the update process should cause minimal changes to overall structure. |
|
|
\ No newline at end of file |