1.3.77
 
Loading...
Searching...
No Matches
RayTracingTypes.h
Go to the documentation of this file.
1
16#ifndef RAYTRACING_TYPES_H
17#define RAYTRACING_TYPES_H
18
19#include "Context.h"
20#include "IndexTypes.h"
21#include <vector>
22
23namespace helios {
24
29 std::vector<helios::vec3> vertices;
30 std::vector<uint> UUIDs;
31 size_t count = 0;
32 };
33
41
42 // Per-primitive data (indexed by primitive index 0..primitive_count-1)
43 std::vector<float> transform_matrices;
44 std::vector<uint> primitive_types;
45 std::vector<uint> primitive_UUIDs;
46 std::vector<uint> primitive_IDs;
47 std::vector<uint> object_IDs;
48 std::vector<helios::int2> object_subdivisions;
49 std::vector<char> twosided_flags;
50 std::vector<float> solid_fractions;
51
52 // UUID-to-position lookup table (indexed by UUID value)
56 std::vector<uint> primitive_positions;
57
58 // Per-type geometry data
64
65 // Disk-specific data (disks don't use vertex arrays)
66 std::vector<helios::vec3> disk_centers;
67 std::vector<float> disk_radii;
68 std::vector<helios::vec3> disk_normals;
69 std::vector<uint> disk_UUIDs;
70 size_t disk_count = 0;
71
72 // Texture/masking data
73 std::vector<bool> mask_data;
74 std::vector<helios::int2> mask_sizes;
75 std::vector<int> mask_IDs;
76 std::vector<helios::vec2> uv_data;
77 std::vector<int> uv_IDs;
78
79 // Periodic boundary condition
81
82 // Counts
83 size_t primitive_count = 0;
84 size_t patch_count = 0;
85 size_t triangle_count = 0;
86 size_t tile_count = 0;
87 size_t voxel_count = 0;
88 size_t bbox_count = 0;
90
91 // UUID ↔ Position mapping utility (CPU-side type-safe conversion)
92 UUIDPositionMapper mapper;
93
94 // ========== Helper Methods for Backend Implementation ==========
95
112 return primitive_count;
113 }
114
125 size_t getUUIDLookupBufferSize() const {
126 if (primitive_UUIDs.empty())
127 return 0;
128 return *std::max_element(primitive_UUIDs.begin(), primitive_UUIDs.end()) + 1;
129 }
130
154 void validate() const;
155 };
156
166 std::vector<float> reflectivity;
167 std::vector<float> transmissivity;
168 std::vector<float> reflectivity_cam;
169 std::vector<float> transmissivity_cam;
170 std::vector<float> specular_exponent;
171 std::vector<float> specular_scale;
172
173 // Translucent cover (glass/plastic) material. When is_glass != 0 for a [source][primitive][band]
174 // entry, the angular transmittance/reflectance is computed on-device from glass_n and glass_KL
175 // via the Fresnel+Bouguer model, overriding reflectivity/transmissivity for that entry.
176 std::vector<float> glass_n;
177 std::vector<float> glass_KL;
178 std::vector<char> is_glass;
179
180 size_t num_bands = 0;
181 size_t num_sources = 0;
182 size_t num_primitives = 0;
183 size_t num_cameras = 0;
184 };
185
197
202 // Launch dimensions
207
208 // Band configuration
212 std::vector<bool> band_launch_flag;
213
214 // Scattering
217
218 // Face selection (for diffuse rays)
220
221 // Camera-specific parameters
225 float camera_focal_length = 0.0f;
226 float camera_lens_diameter = 0.0f;
227 float camera_fov_aspect = 0.0f;
229 float camera_HFOV = 0.0f;
235
236 // Diffuse radiation parameters (for diffuse ray launches)
237 std::vector<float> diffuse_flux;
238 std::vector<float> diffuse_extinction;
239 std::vector<helios::vec3> diffuse_peak_dir;
240 std::vector<float> diffuse_dist_norm;
241 std::vector<helios::vec4> sky_radiance_params;
242
243 // Emission/outgoing radiation (for diffuse ray launches)
244 std::vector<float> radiation_out_top;
245 std::vector<float> radiation_out_bottom;
246
247 // Flags
249 };
250
258 std::vector<float> radiation_in;
259 std::vector<float> radiation_out_top;
260 std::vector<float> radiation_out_bottom;
261 std::vector<float> scatter_buff_top;
262 std::vector<float> scatter_buff_bottom;
263 std::vector<float> scatter_buff_top_cam;
264 std::vector<float> scatter_buff_bottom_cam;
265 std::vector<float> radiation_specular;
266 std::vector<float> sky_energy;
267
268 size_t num_primitives = 0;
269 size_t num_bands = 0;
270 size_t num_sources = 0;
271 size_t num_cameras = 0;
272 };
273
274} // namespace helios
275
276#endif // RAYTRACING_TYPES_H