voxcity.simulator_gpu.visibility.geometryยถ

Geometry utilities for view analysis.

Provides ray direction generation using various sampling strategies: - Grid-based sampling (uniform azimuth x elevation grid) - Fibonacci spiral sampling (more uniform hemisphere coverage)

Classesยถ

RayDirectionField

GPU-accessible ray direction field for batch processing.

Functionsยถ

generate_ray_directions_grid(โ†’ numpy.ndarray)

Generate ray directions using a regular grid sampling.

generate_ray_directions_fibonacci(โ†’ numpy.ndarray)

Generate ray directions using Fibonacci spiral sampling.

generate_hemisphere_directions(โ†’ numpy.ndarray)

Generate ray directions covering the upper hemisphere.

rotate_vector_axis_angle(โ†’ numpy.ndarray)

Rotate a vector around an axis by a specified angle using Rodrigues' rotation formula.

rotate_vector_axis_angle_ti(vec, axis, angle)

Taichi GPU kernel function for rotating a vector around an axis.

build_face_basis(โ†’ Tuple[numpy.ndarray, numpy.ndarray, ...)

Build orthonormal basis (u, v, n) for a surface normal.

build_face_basis_ti(normal)

Taichi GPU kernel function to build orthonormal basis for a surface normal.

Module Contentsยถ

voxcity.simulator_gpu.visibility.geometry.generate_ray_directions_grid(n_azimuth: int = 120, n_elevation: int = 20, elevation_min_degrees: float = -30.0, elevation_max_degrees: float = 30.0) numpy.ndarrayยถ

Generate ray directions using a regular grid sampling.

Parameters:
  • n_azimuth โ€“ Number of azimuthal divisions

  • n_elevation โ€“ Number of elevation divisions

  • elevation_min_degrees โ€“ Minimum elevation angle in degrees

  • elevation_max_degrees โ€“ Maximum elevation angle in degrees

Returns:

Array of shape (n_azimuth * n_elevation, 3) with unit direction vectors

voxcity.simulator_gpu.visibility.geometry.generate_ray_directions_fibonacci(n_rays: int = 2400, elevation_min_degrees: float = -30.0, elevation_max_degrees: float = 30.0) numpy.ndarrayยถ

Generate ray directions using Fibonacci spiral sampling.

This provides more uniform coverage of the hemisphere compared to grid sampling.

Parameters:
  • n_rays โ€“ Total number of rays

  • elevation_min_degrees โ€“ Minimum elevation angle in degrees

  • elevation_max_degrees โ€“ Maximum elevation angle in degrees

Returns:

Array of shape (n_rays, 3) with unit direction vectors

voxcity.simulator_gpu.visibility.geometry.generate_hemisphere_directions(n_azimuth: int = 80, n_elevation: int = 40) numpy.ndarrayยถ

Generate ray directions covering the upper hemisphere.

Elevation goes from 0 (horizon) to 90 (zenith).

Parameters:
  • n_azimuth โ€“ Number of azimuthal divisions

  • n_elevation โ€“ Number of elevation divisions

Returns:

Array of shape (n_azimuth * n_elevation, 3) with unit direction vectors

voxcity.simulator_gpu.visibility.geometry.rotate_vector_axis_angle(vec: numpy.ndarray, axis: numpy.ndarray, angle: float) numpy.ndarrayยถ

Rotate a vector around an axis by a specified angle using Rodriguesโ€™ rotation formula.

This is a CPU implementation matching voxcity.simulator.common.geometry.rotate_vector_axis_angle.

Parameters:
  • vec โ€“ Vector to rotate (3,)

  • axis โ€“ Rotation axis (3,) - will be normalized

  • angle โ€“ Rotation angle in radians

Returns:

Rotated vector (3,)

voxcity.simulator_gpu.visibility.geometry.rotate_vector_axis_angle_ti(vec: ti.template(), axis: ti.template(), angle: taichi.f32)ยถ

Taichi GPU kernel function for rotating a vector around an axis.

Uses Rodriguesโ€™ rotation formula.

Parameters:
  • vec โ€“ Vector to rotate (Vector3)

  • axis โ€“ Rotation axis (Vector3) - will be normalized

  • angle โ€“ Rotation angle in radians

Returns:

Rotated Vector3

voxcity.simulator_gpu.visibility.geometry.build_face_basis(normal: numpy.ndarray) Tuple[numpy.ndarray, numpy.ndarray, numpy.ndarray]ยถ

Build orthonormal basis (u, v, n) for a surface normal.

Matches voxcity.simulator.common.geometry._build_face_basis.

Parameters:

normal โ€“ Surface normal vector (3,)

Returns:

Tuple of (u, v, n) orthonormal vectors

voxcity.simulator_gpu.visibility.geometry.build_face_basis_ti(normal: ti.template())ยถ

Taichi GPU kernel function to build orthonormal basis for a surface normal.

Parameters:

normal โ€“ Surface normal Vector3

Returns:

Tuple of (u, v, n) orthonormal Vector3s