Skip to content

Commit f585723

Browse files
committed
Formatting and reordering functions
1 parent af378fb commit f585723

File tree

2 files changed

+93
-54
lines changed

2 files changed

+93
-54
lines changed

src/bvh/bvh_embree.cpp

Lines changed: 91 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,6 @@
5353
# include "util/util_logging.h"
5454
# include "util/util_progress.h"
5555
# include "util/util_stats.h"
56-
# include "util/util_hash.h"
5756

5857
CCL_NAMESPACE_BEGIN
5958

@@ -242,7 +241,8 @@ static void rtc_filter_func_thick_curve(const RTC_NAMESPACE::RTCFilterFunctionNA
242241
}
243242
}
244243

245-
static void rtc_filter_occluded_func_thick_curve(const RTC_NAMESPACE::RTCFilterFunctionNArguments *args)
244+
static void rtc_filter_occluded_func_thick_curve(
245+
const RTC_NAMESPACE::RTCFilterFunctionNArguments *args)
246246
{
247247
const RTC_NAMESPACE::RTCRay *ray = (RTC_NAMESPACE::RTCRay *)args->ray;
248248
RTC_NAMESPACE::RTCHit *hit = (RTC_NAMESPACE::RTCHit *)args->hit;
@@ -257,11 +257,22 @@ static void rtc_filter_occluded_func_thick_curve(const RTC_NAMESPACE::RTCFilterF
257257
rtc_filter_occluded_func(args);
258258
}
259259

260+
/* Base two radical inverse
261+
* https://www.pbr-book.org/3ed-2018/Sampling_and_Reconstruction/The_Halton_Sampler */
262+
inline uint reverse_bits_32(uint n)
263+
{
264+
n = (n << 16) | (n >> 16);
265+
n = ((n & 0x00ff00ff) << 8) | ((n & 0xff00ff00) >> 8);
266+
n = ((n & 0x0f0f0f0f) << 4) | ((n & 0xf0f0f0f0) >> 4);
267+
n = ((n & 0x33333333) << 2) | ((n & 0xcccccccc) >> 2);
268+
n = ((n & 0x55555555) << 1) | ((n & 0xaaaaaaaa) >> 1);
269+
return n;
270+
}
271+
260272
/* Generate a pseudo random bit sequence trying to keep disjoint spans uncorrelated.
261-
https://research.nvidia.com/publication/stratified-sampling-stochastic-transparency
262-
*/
263-
inline float get_opacity_stratified(uint rng_pixel_sample, uint rng_surface) {
264-
// pixel_id + sample * num_samples
273+
https://research.nvidia.com/publication/stratified-sampling-stochastic-transparency */
274+
inline float get_opacity_stratified(uint rng_pixel_sample, uint rng_surface)
275+
{
265276
uint x = reverse_bits_32(rng_pixel_sample) + rng_surface;
266277
x = x ^ (x * 0x6C50B47Cu);
267278
x = x ^ (x * 0xB82F1E52u);
@@ -270,7 +281,8 @@ inline float get_opacity_stratified(uint rng_pixel_sample, uint rng_surface) {
270281
return (float)(x * 0x1p-32);
271282
}
272283

273-
static void rtc_filter_func_transparent_points(const RTC_NAMESPACE::RTCFilterFunctionNArguments *args)
284+
static void rtc_filter_func_transparent_points(
285+
const RTC_NAMESPACE::RTCFilterFunctionNArguments *args)
274286
{
275287
const RTC_NAMESPACE::RTCRay *ray = (RTC_NAMESPACE::RTCRay *)args->ray;
276288
RTC_NAMESPACE::RTCHit *hit = (RTC_NAMESPACE::RTCHit *)args->hit;
@@ -289,14 +301,14 @@ static void rtc_filter_func_transparent_points(const RTC_NAMESPACE::RTCFilterFun
289301
const float opacity = kernel_tex_fetch(__points_opacity, opacity_offset);
290302

291303
/* Unique random number per ray per geometry */
292-
const float rand_opacity = cmj_randfloat(ctx->rng_transparent, cmj_hash(object, prim));
293-
304+
const float rand_opacity = get_opacity_stratified(ctx->rng_transparent, cmj_hash(object, prim));
294305
if (rand_opacity > opacity) {
295306
*args->valid = 0;
296307
}
297308
}
298309

299-
static void rtc_filter_occluded_func_transparent_points(const RTC_NAMESPACE::RTCFilterFunctionNArguments *args)
310+
static void rtc_filter_occluded_func_transparent_points(
311+
const RTC_NAMESPACE::RTCFilterFunctionNArguments *args)
300312
{
301313
rtc_filter_func_transparent_points(args);
302314
if (*args->valid) {
@@ -394,34 +406,39 @@ BVHEmbree::BVHEmbree(const BVHParams &params_,
394406
if (rtc_shared_users == 0) {
395407
rtc_shared_device = RTC_NAMESPACE::rtcNewDevice("verbose=0");
396408
/* Check here if Embree was built with the correct flags. */
397-
ssize_t ret = rtcGetDeviceProperty(rtc_shared_device, RTC_NAMESPACE::RTC_DEVICE_PROPERTY_RAY_MASK_SUPPORTED);
409+
ssize_t ret = rtcGetDeviceProperty(rtc_shared_device,
410+
RTC_NAMESPACE::RTC_DEVICE_PROPERTY_RAY_MASK_SUPPORTED);
398411
if (ret != 1) {
399412
assert(0);
400413
VLOG(1) << "Embree is compiled without the RTC_DEVICE_PROPERTY_RAY_MASK_SUPPORTED flag."
401414
"Ray visibility will not work.";
402415
}
403-
ret = rtcGetDeviceProperty(rtc_shared_device, RTC_NAMESPACE::RTC_DEVICE_PROPERTY_FILTER_FUNCTION_SUPPORTED);
416+
ret = rtcGetDeviceProperty(rtc_shared_device,
417+
RTC_NAMESPACE::RTC_DEVICE_PROPERTY_FILTER_FUNCTION_SUPPORTED);
404418
if (ret != 1) {
405419
assert(0);
406420
VLOG(1)
407421
<< "Embree is compiled without the RTC_DEVICE_PROPERTY_FILTER_FUNCTION_SUPPORTED flag."
408422
"Renders may not look as expected.";
409423
}
410-
ret = rtcGetDeviceProperty(rtc_shared_device, RTC_NAMESPACE::RTC_DEVICE_PROPERTY_CURVE_GEOMETRY_SUPPORTED);
424+
ret = rtcGetDeviceProperty(rtc_shared_device,
425+
RTC_NAMESPACE::RTC_DEVICE_PROPERTY_CURVE_GEOMETRY_SUPPORTED);
411426
if (ret != 1) {
412427
assert(0);
413428
VLOG(1)
414429
<< "Embree is compiled without the RTC_DEVICE_PROPERTY_CURVE_GEOMETRY_SUPPORTED flag. "
415430
"Line primitives will not be rendered.";
416431
}
417-
ret = rtcGetDeviceProperty(rtc_shared_device, RTC_NAMESPACE::RTC_DEVICE_PROPERTY_TRIANGLE_GEOMETRY_SUPPORTED);
432+
ret = rtcGetDeviceProperty(rtc_shared_device,
433+
RTC_NAMESPACE::RTC_DEVICE_PROPERTY_TRIANGLE_GEOMETRY_SUPPORTED);
418434
if (ret != 1) {
419435
assert(0);
420436
VLOG(1) << "Embree is compiled without the RTC_DEVICE_PROPERTY_TRIANGLE_GEOMETRY_SUPPORTED "
421437
"flag. "
422438
"Triangle primitives will not be rendered.";
423439
}
424-
ret = rtcGetDeviceProperty(rtc_shared_device, RTC_NAMESPACE::RTC_DEVICE_PROPERTY_BACKFACE_CULLING_ENABLED);
440+
ret = rtcGetDeviceProperty(rtc_shared_device,
441+
RTC_NAMESPACE::RTC_DEVICE_PROPERTY_BACKFACE_CULLING_ENABLED);
425442
if (ret != 0) {
426443
assert(0);
427444
VLOG(1) << "Embree is compiled with the RTC_DEVICE_PROPERTY_BACKFACE_CULLING_ENABLED flag. "
@@ -493,12 +510,15 @@ void BVHEmbree::build(Progress &progress, Stats *stats_)
493510
const bool dynamic = params.bvh_type == SceneParams::BVH_DYNAMIC;
494511

495512
scene = rtcNewScene(rtc_shared_device);
496-
const RTC_NAMESPACE::RTCSceneFlags scene_flags = (dynamic ? RTC_NAMESPACE::RTC_SCENE_FLAG_DYNAMIC : RTC_NAMESPACE::RTC_SCENE_FLAG_NONE) |
497-
RTC_NAMESPACE::RTC_SCENE_FLAG_COMPACT | RTC_NAMESPACE::RTC_SCENE_FLAG_ROBUST;
513+
const RTC_NAMESPACE::RTCSceneFlags scene_flags = (dynamic ?
514+
RTC_NAMESPACE::RTC_SCENE_FLAG_DYNAMIC :
515+
RTC_NAMESPACE::RTC_SCENE_FLAG_NONE) |
516+
RTC_NAMESPACE::RTC_SCENE_FLAG_COMPACT |
517+
RTC_NAMESPACE::RTC_SCENE_FLAG_ROBUST;
498518
rtcSetSceneFlags(scene, scene_flags);
499519
build_quality = dynamic ? RTC_NAMESPACE::RTC_BUILD_QUALITY_LOW :
500520
(params.use_spatial_split ? RTC_NAMESPACE::RTC_BUILD_QUALITY_HIGH :
501-
RTC_NAMESPACE::RTC_BUILD_QUALITY_MEDIUM);
521+
RTC_NAMESPACE::RTC_BUILD_QUALITY_MEDIUM);
502522
rtcSetSceneBuildQuality(scene, build_quality);
503523

504524
/* Count triangles and curves first, reserve arrays once. */
@@ -625,7 +645,8 @@ void BVHEmbree::add_instance(Object *ob, int i)
625645
const size_t num_motion_steps = min(num_object_motion_steps, RTC_MAX_TIME_STEP_COUNT);
626646
assert(num_object_motion_steps <= RTC_MAX_TIME_STEP_COUNT);
627647

628-
RTC_NAMESPACE::RTCGeometry geom_id = rtcNewGeometry(rtc_shared_device, RTC_NAMESPACE::RTC_GEOMETRY_TYPE_INSTANCE);
648+
RTC_NAMESPACE::RTCGeometry geom_id = rtcNewGeometry(rtc_shared_device,
649+
RTC_NAMESPACE::RTC_GEOMETRY_TYPE_INSTANCE);
629650
rtcSetGeometryInstancedScene(geom_id, instance_bvh->scene);
630651
rtcSetGeometryTimeStepCount(geom_id, num_motion_steps);
631652

@@ -647,7 +668,8 @@ void BVHEmbree::add_instance(Object *ob, int i)
647668
}
648669
}
649670
else {
650-
rtcSetGeometryTransform(geom_id, 0, RTC_NAMESPACE::RTC_FORMAT_FLOAT3X4_ROW_MAJOR, (const float *)&ob->tfm);
671+
rtcSetGeometryTransform(
672+
geom_id, 0, RTC_NAMESPACE::RTC_FORMAT_FLOAT3X4_ROW_MAJOR, (const float *)&ob->tfm);
651673
}
652674

653675
pack.prim_index.push_back_slow(-1);
@@ -679,12 +701,17 @@ void BVHEmbree::add_triangles(const Object *ob, const Mesh *mesh, int i)
679701
assert(num_geometry_motion_steps <= RTC_MAX_TIME_STEP_COUNT);
680702

681703
const size_t num_triangles = mesh->num_triangles();
682-
RTC_NAMESPACE::RTCGeometry geom_id = RTC_NAMESPACE::rtcNewGeometry(rtc_shared_device, RTC_NAMESPACE::RTC_GEOMETRY_TYPE_TRIANGLE);
704+
RTC_NAMESPACE::RTCGeometry geom_id = RTC_NAMESPACE::rtcNewGeometry(
705+
rtc_shared_device, RTC_NAMESPACE::RTC_GEOMETRY_TYPE_TRIANGLE);
683706
rtcSetGeometryBuildQuality(geom_id, build_quality);
684707
rtcSetGeometryTimeStepCount(geom_id, num_motion_steps);
685708

686-
unsigned *rtc_indices = (unsigned *)rtcSetNewGeometryBuffer(
687-
geom_id, RTC_NAMESPACE::RTC_BUFFER_TYPE_INDEX, 0, RTC_NAMESPACE::RTC_FORMAT_UINT3, sizeof(int) * 3, num_triangles);
709+
unsigned *rtc_indices = (unsigned *)rtcSetNewGeometryBuffer(geom_id,
710+
RTC_NAMESPACE::RTC_BUFFER_TYPE_INDEX,
711+
0,
712+
RTC_NAMESPACE::RTC_FORMAT_UINT3,
713+
sizeof(int) * 3,
714+
num_triangles);
688715
assert(rtc_indices);
689716
if (!rtc_indices) {
690717
VLOG(1) << "Embree could not create new geometry buffer for mesh " << mesh->name.c_str()
@@ -725,7 +752,9 @@ void BVHEmbree::add_triangles(const Object *ob, const Mesh *mesh, int i)
725752
rtcReleaseGeometry(geom_id);
726753
}
727754

728-
void BVHEmbree::set_tri_vertex_buffer(RTC_NAMESPACE::RTCGeometry geom_id, const Mesh *mesh, const bool update)
755+
void BVHEmbree::set_tri_vertex_buffer(RTC_NAMESPACE::RTCGeometry geom_id,
756+
const Mesh *mesh,
757+
const bool update)
729758
{
730759
const Attribute *attr_mP = NULL;
731760
size_t num_motion_steps = 1;
@@ -754,7 +783,8 @@ void BVHEmbree::set_tri_vertex_buffer(RTC_NAMESPACE::RTCGeometry geom_id, const
754783
}
755784

756785
float *rtc_verts = (update) ?
757-
(float *)rtcGetGeometryBufferData(geom_id, RTC_NAMESPACE::RTC_BUFFER_TYPE_VERTEX, t) :
786+
(float *)rtcGetGeometryBufferData(
787+
geom_id, RTC_NAMESPACE::RTC_BUFFER_TYPE_VERTEX, t) :
758788
(float *)rtcSetNewGeometryBuffer(geom_id,
759789
RTC_NAMESPACE::RTC_BUFFER_TYPE_VERTEX,
760790
t,
@@ -778,7 +808,9 @@ void BVHEmbree::set_tri_vertex_buffer(RTC_NAMESPACE::RTCGeometry geom_id, const
778808
}
779809
}
780810

781-
void BVHEmbree::set_curve_vertex_buffer(RTC_NAMESPACE::RTCGeometry geom_id, const Hair *hair, const bool update)
811+
void BVHEmbree::set_curve_vertex_buffer(RTC_NAMESPACE::RTCGeometry geom_id,
812+
const Hair *hair,
813+
const bool update)
782814
{
783815
const Attribute *attr_mP = NULL;
784816
size_t num_motion_steps = 1;
@@ -815,12 +847,13 @@ void BVHEmbree::set_curve_vertex_buffer(RTC_NAMESPACE::RTCGeometry geom_id, cons
815847

816848
float4 *rtc_verts = (update) ? (float4 *)rtcGetGeometryBufferData(
817849
geom_id, RTC_NAMESPACE::RTC_BUFFER_TYPE_VERTEX, t) :
818-
(float4 *)rtcSetNewGeometryBuffer(geom_id,
819-
RTC_NAMESPACE::RTC_BUFFER_TYPE_VERTEX,
820-
t,
821-
RTC_NAMESPACE::RTC_FORMAT_FLOAT4,
822-
sizeof(float) * 4,
823-
num_keys_embree);
850+
(float4 *)rtcSetNewGeometryBuffer(
851+
geom_id,
852+
RTC_NAMESPACE::RTC_BUFFER_TYPE_VERTEX,
853+
t,
854+
RTC_NAMESPACE::RTC_FORMAT_FLOAT4,
855+
sizeof(float) * 4,
856+
num_keys_embree);
824857

825858
assert(rtc_verts);
826859
if (rtc_verts) {
@@ -885,14 +918,19 @@ void BVHEmbree::add_curves(const Object *ob, const Hair *hair, int i)
885918
size_t prim_tri_index_size = pack.prim_index.size();
886919
pack.prim_tri_index.resize(prim_tri_index_size + num_segments);
887920

888-
enum RTC_NAMESPACE::RTCGeometryType type = (hair->curve_shape == CURVE_RIBBON ?
889-
RTC_NAMESPACE::RTC_GEOMETRY_TYPE_FLAT_CATMULL_ROM_CURVE :
890-
RTC_NAMESPACE::RTC_GEOMETRY_TYPE_ROUND_CATMULL_ROM_CURVE);
921+
enum RTC_NAMESPACE::RTCGeometryType type =
922+
(hair->curve_shape == CURVE_RIBBON ?
923+
RTC_NAMESPACE::RTC_GEOMETRY_TYPE_FLAT_CATMULL_ROM_CURVE :
924+
RTC_NAMESPACE::RTC_GEOMETRY_TYPE_ROUND_CATMULL_ROM_CURVE);
891925

892926
RTC_NAMESPACE::RTCGeometry geom_id = rtcNewGeometry(rtc_shared_device, type);
893927
rtcSetGeometryTessellationRate(geom_id, curve_subdivisions + 1);
894-
unsigned *rtc_indices = (unsigned *)rtcSetNewGeometryBuffer(
895-
geom_id, RTC_NAMESPACE::RTC_BUFFER_TYPE_INDEX, 0, RTC_NAMESPACE::RTC_FORMAT_UINT, sizeof(int), num_segments);
928+
unsigned *rtc_indices = (unsigned *)rtcSetNewGeometryBuffer(geom_id,
929+
RTC_NAMESPACE::RTC_BUFFER_TYPE_INDEX,
930+
0,
931+
RTC_NAMESPACE::RTC_FORMAT_UINT,
932+
sizeof(int),
933+
num_segments);
896934
size_t rtc_index = 0;
897935
for (size_t j = 0; j < num_curves; ++j) {
898936
Hair::Curve c = hair->get_curve(j);
@@ -1090,12 +1128,13 @@ void BVHEmbree::set_point_vertex_buffer(RTC_NAMESPACE::RTCGeometry geom_id,
10901128

10911129
float4 *rtc_verts = (update) ? (float4 *)rtcGetGeometryBufferData(
10921130
geom_id, RTC_NAMESPACE::RTC_BUFFER_TYPE_VERTEX, t) :
1093-
(float4 *)rtcSetNewGeometryBuffer(geom_id,
1094-
RTC_NAMESPACE::RTC_BUFFER_TYPE_VERTEX,
1095-
t,
1096-
RTC_NAMESPACE::RTC_FORMAT_FLOAT4,
1097-
sizeof(float) * 4,
1098-
num_points);
1131+
(float4 *)rtcSetNewGeometryBuffer(
1132+
geom_id,
1133+
RTC_NAMESPACE::RTC_BUFFER_TYPE_VERTEX,
1134+
t,
1135+
RTC_NAMESPACE::RTC_FORMAT_FLOAT4,
1136+
sizeof(float) * 4,
1137+
num_points);
10991138

11001139
assert(rtc_verts);
11011140
if (rtc_verts) {
@@ -1120,12 +1159,13 @@ void BVHEmbree::set_point_vertex_buffer(RTC_NAMESPACE::RTCGeometry geom_id,
11201159

11211160
float *rtc_normals = (update) ? (float *)rtcGetGeometryBufferData(
11221161
geom_id, RTC_NAMESPACE::RTC_BUFFER_TYPE_NORMAL, t) :
1123-
(float *)rtcSetNewGeometryBuffer(geom_id,
1124-
RTC_NAMESPACE::RTC_BUFFER_TYPE_NORMAL,
1125-
t,
1126-
RTC_NAMESPACE::RTC_FORMAT_FLOAT3,
1127-
sizeof(float) * 3,
1128-
num_points);
1162+
(float *)rtcSetNewGeometryBuffer(
1163+
geom_id,
1164+
RTC_NAMESPACE::RTC_BUFFER_TYPE_NORMAL,
1165+
t,
1166+
RTC_NAMESPACE::RTC_FORMAT_FLOAT3,
1167+
sizeof(float) * 3,
1168+
num_points);
11291169
assert(rtc_normals);
11301170
if (rtc_normals) {
11311171
for (size_t j = 0; j < num_points; ++j) {
@@ -1217,7 +1257,8 @@ void BVHEmbree::add_points(const Object *ob, const PointCloud *pointcloud, int i
12171257
if (!pointcloud->opacity.empty()) {
12181258
rtcSetGeometryIntersectFilterFunction(geom_id, rtc_filter_func_transparent_points);
12191259
rtcSetGeometryOccludedFilterFunction(geom_id, rtc_filter_occluded_func_transparent_points);
1220-
} else {
1260+
}
1261+
else {
12211262
rtcSetGeometryOccludedFilterFunction(geom_id, rtc_filter_occluded_func);
12221263
}
12231264

src/kernel/kernel_path.h

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -69,10 +69,8 @@ ccl_device_forceinline bool kernel_path_scene_intersect(KernelGlobals *kg,
6969
ray->t = kernel_data.background.ao_distance;
7070
}
7171

72-
// const float rand_transparency = path_state_rng_1D_hash(kg, state, state->rng_hash);
73-
const float rng_transparent = path_state_rng_1D(kg, state, PRNG_UNUSED_0);
74-
// const uint rng_transparent = state->sample + state->rng_hash * kernel_data.integrator.aa_samples;
75-
bool hit = scene_intersect(kg, ray, visibility, isect, (uint&)rng_transparent);
72+
const uint rng_transparent = state->sample + state->rng_hash * kernel_data.integrator.aa_samples;
73+
bool hit = scene_intersect(kg, ray, visibility, isect, (uint &)rng_transparent);
7674

7775
#ifdef __KERNEL_DEBUG__
7876
if (state->flag & PATH_RAY_CAMERA) {

0 commit comments

Comments
 (0)