star-3d

Surface structuring for efficient 3D geometric queries
git clone git://git.meso-star.fr/star-3d.git
Log | Files | Refs | README | LICENSE

commit 6779ab8299770fc662d20f66e94ad4e6658e9caf
parent d21cf3e92a908e4098da42ac53d1ec051a89affc
Author: Vincent Forest <vincent.forest@meso-star.com>
Date:   Wed, 18 Oct 2023 17:22:50 +0200

Write release note for version 0.10

Wraps the README text in 72 columns to match the convention of plain
text e-mails. It can therefore be sent as a publication announcement
e-mail without being reformatted.

Diffstat:
MREADME.md | 175+++++++++++++++++++++++++++++++++++++++++++------------------------------------
1 file changed, 95 insertions(+), 80 deletions(-)

diff --git a/README.md b/README.md @@ -1,26 +1,28 @@ # Star 3D -Star-3D is a C library that manages *surface geometries* and implements operators -to access them efficiently such as uniform sampling, ray tracing or a closest -point query. - -The main concept exposed in Star-3D is the *shape*. A shape represents a 3D -surfacic object such as a *triangular mesh* or a *sphere*. Shape data is -user-defined and can be updated at any time. The shapes are then attached to a -*scene* where they can be queried. We point out that a scene can be -*instantiated* once or several times in a new shape which can be attached to -another scene like any other shape. Each instantiated scene has its own -position and orientation while its geometry is stored once even if the scene is -instantiated multiple times. This feature can thus be used to create an -extremely complex environment with a small memory footprint. +Star-3D is a C library that manages *surface geometries* and implements +operators to access them efficiently such as uniform sampling, ray +tracing or a closest point query. + +The main concept exposed in Star-3D is the *shape*. A shape represents a +3D surfacic object such as a *triangular mesh* or a *sphere*. Shape data +is user-defined and can be updated at any time. The shapes are then +attached to a *scene* where they can be queried. We point out that a +scene can be *instantiated* once or several times in a new shape which +can be attached to another scene like any other shape. Each instantiated +scene has its own position and orientation while its geometry is stored +once even if the scene is instantiated multiple times. This feature can +thus be used to create an extremely complex environment with a small +memory footprint. To query scene data, you need to create a *view* of the scene. A view is -actually a scene on which accelerating data structures are built to accelerate -the aforementioned access operators such as ray tracing. These data structures -are constructed from the scene geometry as defined at the time of view -creation. A view is thus insensitive to updates of the scene following its -creation. This means that multiple views can be used to save different states -of the same scene, giving the caller great flexibility in managing scene data. +actually a scene on which accelerating data structures are built to +accelerate the aforementioned access operators such as ray tracing. +These data structures are constructed from the scene geometry as defined +at the time of view creation. A view is thus insensitive to updates of +the scene following its creation. This means that multiple views can be +used to save different states of the same scene, giving the caller great +flexibility in managing scene data. ## Requirements @@ -38,6 +40,14 @@ Edit config.mk as needed, then run: ## Release notes +### Version 0.10 + +- Replace CMake by Makefile as build system. +- Update compiler and linker flags to increase the security and + robustness of generated binaries. +- Provide a pkg-config file to link the library as an external + dependency. + ### Version 0.9 Upgrading the ray-tracing backend from Embree3 to Embree4 @@ -48,66 +58,70 @@ Fix compilation warnings with GCC 11 ### Version 0.8 -Update the API of the filtering function: add the range of the ray as input -argument. For closest point queries, this range is from 0 to query radius. +Update the API of the filtering function: add the range of the ray as +input argument. For closest point queries, this range is from 0 to query +radius. ### Version 0.7.4 -- Fix the barycentric coordinates of the intersection of the ray onto the - triangle: the coordinates could lie outside the triangle. +- Fix the barycentric coordinates of the intersection of the ray onto + the triangle: the coordinates could lie outside the triangle. - Fix compilation warnings. ### Version 0.7.3 -- Fix the `s3d_scene_view_closest_point` function on the scenes containing - instantiated meshes: the rotation of the instances was wrongly taken into - account. -- Speed up the `s3d_scene_view_closest_point` query on instantiated meshes. +- Fix the `s3d_scene_view_closest_point` function on the scenes + containing instantiated meshes: the rotation of the instances was + wrongly taken into account. +- Speed up the `s3d_scene_view_closest_point` query on instantiated + meshes. ### Version 0.7.2 -- Fix a precision issue in the `s3d_scene_view_closest_point` function: the - returned hit could have invalid barycentric coordinates. +- Fix a precision issue in the `s3d_scene_view_closest_point` function: + the returned hit could have invalid barycentric coordinates. ### Version 0.7.1 - Fix an invalid memory read at the setup of the scene view when the - `S3D_TRACE` flag was set. The Embree backend assumes that the last vertex - position is at least 16 bytes length while its size was only of 12 bytes - (i.e. 3 single-precision floating-point values). + `S3D_TRACE` flag was set. The Embree backend assumes that the last + vertex position is at least 16 bytes length while its size was only of + 12 bytes (i.e. 3 single-precision floating-point values). ### Version 0.7 -- Add the `s3d_scene_view_closest_point` function. This function retrieves the - closest point into the scene to a query position in a radius from ]0, INF]. - This closest point is returned as a regular hit which means that the function - returns to the caller not only the distance to the query position, but also - the geometric primitive onto which the point lies and its location onto this - primitive. If no surface lies around the query position in a distance lesser - than the one defined by the query radius, the returned hit is invalid which - can be checked with the regular `S3D_HIT_NONE` macro. Finally, this function - supports the filter functions so that the caller can choose to discard - closest hits according to its own criteria. -- Add the `s3d_scene_view_create2` function that allows the user to configure - the acceleration structure used to partition the scene geometry. The caller - can thus control the quality of the structure and thus the compromise between - the building time and the query performances. -- Improve the performances of the scene bounding box computation. First of all, - if the scene view is created with the `S3D_TRACE` flag, Star-3D directly - retrieves the scene bounding box from Embree that already computed it to - build the acceleration structure. Finally, it internally tries to avoid to - recompute the bounding box if the scene was not updated between 2 scene view - creations. +- Add the `s3d_scene_view_closest_point` function. This function + retrieves the closest point into the scene to a query position in a + radius from ]0, INF]. This closest point is returned as a regular hit + which means that the function returns to the caller not only the + distance to the query position, but also the geometric primitive onto + which the point lies and its location onto this primitive. If no + surface lies around the query position in a distance lesser than the + one defined by the query radius, the returned hit is invalid which can + be checked with the regular `S3D_HIT_NONE` macro. Finally, this + function supports the filter functions so that the caller can choose + to discard closest hits according to its own criteria. +- Add the `s3d_scene_view_create2` function that allows the user to + configure the acceleration structure used to partition the scene + geometry. The caller can thus control the quality of the structure and + thus the compromise between the building time and the query + performances. +- Improve the performances of the scene bounding box computation. First + of all, if the scene view is created with the `S3D_TRACE` flag, + Star-3D directly retrieves the scene bounding box from Embree that + already computed it to build the acceleration structure. Finally, it + internally tries to avoid to recompute the bounding box if the scene + was not updated between 2 scene view creations. ### Version 0.6.2 -- Fix an issue in `s3d_scene_view_compute_area`: the returned area was wrong - when the scene view was created with the `S3D_SAMPLE` flag. +- Fix an issue in `s3d_scene_view_compute_area`: the returned area was + wrong when the scene view was created with the `S3D_SAMPLE` flag. ### Version 0.6.1 -- Fix an issue in `s3d_scene_view_sample`: the samples were not uniformly - distributed if the scene contained meshes and spheres. +- Fix an issue in `s3d_scene_view_sample`: the samples were not + uniformly distributed if the scene contained meshes and spheres. ### Version 0.6 @@ -119,39 +133,40 @@ argument. For closest point queries, this range is from 0 to query radius. ### Version 0.5 -- Add the support of spherical shapes. A sphere is composed of one primitive - that can be sampled and/or ray-traced as any other primitives of the scene. - Hit filtering is also fully supported. +- Add the support of spherical shapes. A sphere is composed of one + primitive that can be sampled and/or ray-traced as any other + primitives of the scene. Hit filtering is also fully supported. ### Version 0.4.2 -- Update the version of the RSys dependency to 0.6: replace the deprecated - `[N]CHECK` macros by the new macro `CHK`. +- Update the version of the RSys dependency to 0.6: replace the + deprecated `[N]CHECK` macros by the new macro `CHK`. ### Version 0.4.1 - Fix the `s3d_scene_view` consistency when it is created from a scene - containing instances: the geometries might be not correctly synchronised and - thus could be outdated. + containing instances: the geometries might be not correctly + synchronised and thus could be outdated. ### Version 0.4 - Implement the `s3d_scene_view` API; it replaces the - `s3d_scene_<begin|end>_session` functions that were removed. A view registers - the state of the scene from which it is created. It is used to retrieve the - scene data through ray-tracing, sampling or indexing. Several views can be - created on the same scene. + `s3d_scene_<begin|end>_session` functions that were removed. A view + registers the state of the scene from which it is created. It is used + to retrieve the scene data through ray-tracing, sampling or indexing. + Several views can be created on the same scene. - Add the possibility to attach a same shape to several scenes. -- Fix a memory overconsumption with instantiated shapes: the instantiated - back-end data were copied rather than shared. -- Add the `s3d_scene_shapes_count` function that returns the overall number of - shapes in the scene. -- Add the `s3d_instance_set_transform` and `s3d_instance_transform` functions - that sets or gets the transformation matrix of the instance, respectively. -- Add the `s3d_primitive_get_transform` function that gets the transformation - matrix of a primitive. -- Add the `s3d_primitive_has_attrib` function that returns if a primitive has a - specific attribute or not. +- Fix a memory overconsumption with instantiated shapes: the + instantiated back-end data were copied rather than shared. +- Add the `s3d_scene_shapes_count` function that returns the overall + number of shapes in the scene. +- Add the `s3d_instance_set_transform` and `s3d_instance_transform` + functions that sets or gets the transformation matrix of the instance, + respectively. +- Add the `s3d_primitive_get_transform` function that gets the + transformation matrix of a primitive. +- Add the `s3d_primitive_has_attrib` function that returns if a + primitive has a specific attribute or not. - Add the `s3d_triangle_get_vertex_attrib` function that retrieves the vertex attributes of a triangular primitive. @@ -159,6 +174,6 @@ argument. For closest point queries, this range is from 0 to query radius. Copyright (C) 2015-2023 |Méso|Star> (contact@meso-star.com) -Star-3D is free software released under GPL v3+ license: GNU GPL version 3 or -later. You are welcome to redistribute it under certain conditions; refer to -the COPYING file for details. +Star-3D is free software released under GPL v3+ license: GNU GPL version +3 or later. You are welcome to redistribute it under certain conditions; +refer to the COPYING file for details.