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