| Line |
Branch |
Exec |
Source |
| 1 |
|
|
// SPDX-License-Identifier: BSD-3-Clause |
| 2 |
|
|
/// @file lux.cpp |
| 3 |
|
|
/// @brief UsdLux's registry entries and the shaped lights' extents, as UsdLux computes them, and |
| 4 |
|
|
/// the laser's: its emitter. |
| 5 |
|
|
#include "ernie/scene/schema/lux.h" |
| 6 |
|
|
|
| 7 |
|
|
#include <algorithm> |
| 8 |
|
|
|
| 9 |
|
|
namespace ernie { |
| 10 |
|
|
namespace { |
| 11 |
|
|
|
| 12 |
|
|
/// Sphere and disk lights: their radius, in the xy plane for a disk. |
| 13 |
|
3 |
template <bool kDisk> auto RadiusHalves(const ExtentRows& rows) { |
| 14 |
|
3 |
return [radius = rows.Column<double>(SphereLight::kRadius)](std::uint32_t row) { |
| 15 |
|
|
return glm::dvec3(radius[row], radius[row], kDisk ? 0.0 : radius[row]); |
| 16 |
|
3 |
}; |
| 17 |
|
|
} |
| 18 |
|
|
|
| 19 |
|
|
/// Rect and portal lights alike: their width and height in the xy plane. |
| 20 |
|
2 |
auto RectHalves(const ExtentRows& rows) { |
| 21 |
|
2 |
return [width = rows.Column<double>(RectLight::kWidth), |
| 22 |
|
2 |
height = rows.Column<double>(RectLight::kHeight)](std::uint32_t row) { |
| 23 |
|
2 |
return glm::dvec3(0.5 * width[row], 0.5 * height[row], 0.0); |
| 24 |
|
2 |
}; |
| 25 |
|
|
} |
| 26 |
|
|
|
| 27 |
|
1 |
auto CylinderLightHalves(const ExtentRows& rows) { |
| 28 |
|
1 |
return [radius = rows.Column<double>(CylinderLight::kRadius), |
| 29 |
|
1 |
length = rows.Column<double>(CylinderLight::kLength)](std::uint32_t row) { |
| 30 |
|
1 |
return glm::dvec3(0.5 * length[row], radius[row], radius[row]); |
| 31 |
|
1 |
}; |
| 32 |
|
|
} |
| 33 |
|
|
|
| 34 |
|
|
/// A laser's emitter: the larger of its aperture and waist. |
| 35 |
|
1 |
auto EmitterHalves(const ExtentRows& rows) { |
| 36 |
|
1 |
return [aperture = rows.Column<double>(LaserLight::kApertureRadius), |
| 37 |
|
1 |
waist = rows.Column<glm::dvec2>(LaserLight::kWaistRadius)](std::uint32_t row) { |
| 38 |
|
1 |
const double radius = std::max({aperture[row], waist[row].x, waist[row].y}); |
| 39 |
|
1 |
return glm::dvec3(radius, radius, 0.0); |
| 40 |
|
1 |
}; |
| 41 |
|
|
} |
| 42 |
|
|
|
| 43 |
|
|
} // namespace |
| 44 |
|
|
|
| 45 |
|
|
// LightAPI carries its light-linking collections, as USD's does: which prims a light lights and |
| 46 |
|
|
// which cast its shadows, everything unless they say otherwise. Every light has it built in. |
| 47 |
14/28
✓ Branch 0 taken 146 times.
✓ Branch 1 taken 7 times.
✓ Branch 3 taken 146 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 146 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 146 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 146 times.
✗ Branch 13 not taken.
✓ Branch 30 taken 146 times.
✗ Branch 31 not taken.
✓ Branch 33 taken 146 times.
✗ Branch 34 not taken.
✓ Branch 36 taken 146 times.
✗ Branch 37 not taken.
✗ Branch 39 not taken.
✓ Branch 40 taken 146 times.
✓ Branch 43 taken 292 times.
✓ Branch 44 taken 146 times.
✓ Branch 46 taken 2628 times.
✓ Branch 47 taken 146 times.
✗ Branch 67 not taken.
✗ Branch 68 not taken.
✗ Branch 73 not taken.
✗ Branch 74 not taken.
✗ Branch 94 not taken.
✗ Branch 95 not taken.
|
5701 |
ERNIE_DEFINE_SCHEMA(LightAPI, SingleApply, kInheritExtent, ERNIE_LIGHT_API_ATTRIBUTES, |
| 48 |
|
|
.builtinApis = {"CollectionAPI:lightLink", "CollectionAPI:shadowLink"}, |
| 49 |
|
|
.fallbackOverrides = {{"collection:lightLink:includeRoot", true}, |
| 50 |
|
|
{"collection:shadowLink:includeRoot", true}}) |
| 51 |
8/14
✓ Branch 0 taken 146 times.
✓ Branch 1 taken 876 times.
✓ Branch 3 taken 146 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 146 times.
✗ Branch 7 not taken.
✓ Branch 10 taken 146 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 146 times.
✗ Branch 14 not taken.
✓ Branch 17 taken 146 times.
✓ Branch 18 taken 146 times.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
|
1314 |
ERNIE_DEFINE_SCHEMA(BoundableLightBase, Abstract, kInheritExtent, |
| 52 |
|
|
ERNIE_BOUNDABLE_LIGHT_BASE_ATTRIBUTES, .builtinApis = {"LightAPI"}) |
| 53 |
5/8
✓ Branch 0 taken 146 times.
✓ Branch 1 taken 438 times.
✓ Branch 3 taken 146 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 146 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 146 times.
✗ Branch 10 not taken.
|
584 |
ERNIE_DEFINE_SCHEMA(NonboundableLightBase, Abstract, kUnbounded, ERNIE_NO_ATTRIBUTES, |
| 54 |
|
|
.builtinApis = {"LightAPI"}) |
| 55 |
|
|
// Emitting geometry: its LightAPI is built in, its material's glow tinting the light. |
| 56 |
10/20
✓ Branch 0 taken 146 times.
✓ Branch 1 taken 3 times.
✓ Branch 3 taken 146 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 146 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 146 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 146 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 146 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 146 times.
✗ Branch 19 not taken.
✓ Branch 22 taken 292 times.
✓ Branch 23 taken 146 times.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
|
441 |
ERNIE_DEFINE_SCHEMA(MeshLightAPI, SingleApply, kInheritExtent, ERNIE_NO_ATTRIBUTES, |
| 57 |
|
|
.builtinApis = {"LightAPI"}, |
| 58 |
|
|
.fallbackOverrides = {{"light:shaderId", "MeshLight"}, |
| 59 |
|
|
{"light:materialSyncMode", "materialGlowTintsLight"}}, |
| 60 |
|
|
.appliesTo = {"Mesh"}) |
| 61 |
10/20
✓ Branch 0 taken 146 times.
✓ Branch 1 taken 2 times.
✓ Branch 3 taken 146 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 146 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 146 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 146 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 146 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 146 times.
✗ Branch 19 not taken.
✓ Branch 22 taken 292 times.
✓ Branch 23 taken 146 times.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
|
440 |
ERNIE_DEFINE_SCHEMA(VolumeLightAPI, SingleApply, kInheritExtent, ERNIE_NO_ATTRIBUTES, |
| 62 |
|
|
.builtinApis = {"LightAPI"}, |
| 63 |
|
|
.fallbackOverrides = {{"light:shaderId", "VolumeLight"}, |
| 64 |
|
|
{"light:materialSyncMode", "materialGlowTintsLight"}}, |
| 65 |
|
|
.appliesTo = {"Volume"}) |
| 66 |
10/18
✓ Branch 0 taken 146 times.
✓ Branch 1 taken 13 times.
✓ Branch 3 taken 146 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 146 times.
✗ Branch 7 not taken.
✓ Branch 11 taken 146 times.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 146 times.
✓ Branch 18 taken 146 times.
✓ Branch 19 taken 146 times.
✓ Branch 21 taken 292 times.
✓ Branch 22 taken 146 times.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 32 not taken.
✗ Branch 33 not taken.
|
889 |
ERNIE_DEFINE_SCHEMA(DistantLight, Concrete, kInheritExtent, ERNIE_DISTANT_LIGHT_ATTRIBUTES, |
| 67 |
|
|
.fallbackOverrides = {{"inputs:intensity", 50000.0}}) |
| 68 |
7/12
✓ Branch 0 taken 146 times.
✓ Branch 1 taken 2 times.
✓ Branch 3 taken 146 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 146 times.
✗ Branch 7 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 146 times.
✓ Branch 14 taken 146 times.
✓ Branch 15 taken 146 times.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
|
440 |
ERNIE_DEFINE_SCHEMA(DiskLight, Concrete, ComputedExtent(CentredExtent<RadiusHalves<true>>), |
| 69 |
|
|
ERNIE_DISK_LIGHT_ATTRIBUTES) |
| 70 |
8/16
✓ Branch 0 taken 146 times.
✓ Branch 1 taken 2 times.
✓ Branch 3 taken 146 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 146 times.
✗ Branch 7 not taken.
✓ Branch 11 taken 146 times.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 146 times.
✓ Branch 18 taken 438 times.
✓ Branch 19 taken 146 times.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
|
1024 |
ERNIE_DEFINE_SCHEMA(RectLight, Concrete, ComputedExtent(CentredExtent<RectHalves>), |
| 71 |
|
|
ERNIE_RECT_LIGHT_ATTRIBUTES) |
| 72 |
7/12
✓ Branch 0 taken 146 times.
✓ Branch 1 taken 20 times.
✓ Branch 3 taken 146 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 146 times.
✗ Branch 7 not taken.
✗ Branch 11 not taken.
✓ Branch 12 taken 146 times.
✓ Branch 15 taken 292 times.
✓ Branch 16 taken 146 times.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
750 |
ERNIE_DEFINE_SCHEMA(SphereLight, Concrete, ComputedExtent(CentredExtent<RadiusHalves<false>>), |
| 73 |
|
|
ERNIE_SPHERE_LIGHT_ATTRIBUTES) |
| 74 |
7/12
✓ Branch 0 taken 146 times.
✓ Branch 1 taken 2 times.
✓ Branch 3 taken 146 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 146 times.
✗ Branch 7 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 146 times.
✓ Branch 16 taken 438 times.
✓ Branch 17 taken 146 times.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
|
1024 |
ERNIE_DEFINE_SCHEMA(CylinderLight, Concrete, ComputedExtent(CentredExtent<CylinderLightHalves>), |
| 75 |
|
|
ERNIE_CYLINDER_LIGHT_ATTRIBUTES) |
| 76 |
12/26
✓ Branch 0 taken 146 times.
✓ Branch 1 taken 4 times.
✓ Branch 3 taken 146 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 146 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 146 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 146 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 146 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 146 times.
✗ Branch 19 not taken.
✓ Branch 22 taken 146 times.
✗ Branch 23 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 146 times.
✓ Branch 30 taken 730 times.
✓ Branch 31 taken 146 times.
✗ Branch 40 not taken.
✗ Branch 41 not taken.
✗ Branch 48 not taken.
✗ Branch 49 not taken.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
|
1610 |
ERNIE_DEFINE_SCHEMA(DomeLight, Concrete, kInheritExtent, ERNIE_DOME_LIGHT_ATTRIBUTES) |
| 77 |
7/12
✓ Branch 0 taken 146 times.
✓ Branch 1 taken 2 times.
✓ Branch 3 taken 146 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 146 times.
✗ Branch 7 not taken.
✗ Branch 11 not taken.
✓ Branch 12 taken 146 times.
✓ Branch 15 taken 292 times.
✓ Branch 16 taken 146 times.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
732 |
ERNIE_DEFINE_SCHEMA(PortalLight, Concrete, ComputedExtent(CentredExtent<RectHalves>), |
| 78 |
|
|
ERNIE_PORTAL_LIGHT_ATTRIBUTES) |
| 79 |
7/14
✓ Branch 0 taken 146 times.
✓ Branch 1 taken 2 times.
✓ Branch 3 taken 146 times.
✗ Branch 4 not taken.
✓ Branch 10 taken 146 times.
✗ Branch 11 not taken.
✗ Branch 15 not taken.
✓ Branch 16 taken 146 times.
✓ Branch 19 taken 1022 times.
✓ Branch 20 taken 146 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
|
2192 |
ERNIE_DEFINE_SCHEMA(ShapingAPI, SingleApply, kInheritExtent, ERNIE_SHAPING_API_ATTRIBUTES) |
| 80 |
6/10
✓ Branch 0 taken 146 times.
✓ Branch 1 taken 2 times.
✓ Branch 3 taken 146 times.
✗ Branch 4 not taken.
✗ Branch 11 not taken.
✓ Branch 12 taken 146 times.
✓ Branch 15 taken 730 times.
✓ Branch 16 taken 146 times.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
|
1608 |
ERNIE_DEFINE_SCHEMA(ShadowAPI, SingleApply, kInheritExtent, ERNIE_SHADOW_API_ATTRIBUTES) |
| 81 |
6/10
✓ Branch 0 taken 146 times.
✓ Branch 1 taken 2 times.
✓ Branch 3 taken 146 times.
✗ Branch 4 not taken.
✗ Branch 9 not taken.
✓ Branch 10 taken 146 times.
✓ Branch 13 taken 438 times.
✓ Branch 14 taken 146 times.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
|
1024 |
ERNIE_DEFINE_SCHEMA(PhotometricAreaLightAPI, SingleApply, kInheritExtent, |
| 82 |
|
|
ERNIE_PHOTOMETRIC_AREA_LIGHT_API_ATTRIBUTES) |
| 83 |
6/10
✓ Branch 0 taken 146 times.
✓ Branch 1 taken 2 times.
✓ Branch 3 taken 146 times.
✗ Branch 4 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 146 times.
✓ Branch 11 taken 146 times.
✓ Branch 12 taken 146 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
|
440 |
ERNIE_DEFINE_SCHEMA(PhotometricDistantLightAPI, SingleApply, kInheritExtent, |
| 84 |
|
|
ERNIE_PHOTOMETRIC_DISTANT_LIGHT_API_ATTRIBUTES) |
| 85 |
5/10
✓ Branch 0 taken 146 times.
✗ Branch 1 not taken.
✓ Branch 3 taken 146 times.
✗ Branch 4 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 146 times.
✓ Branch 11 taken 146 times.
✓ Branch 12 taken 146 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
|
438 |
ERNIE_DEFINE_SCHEMA(PhotometricDomeLightAPI, SingleApply, kInheritExtent, |
| 86 |
|
|
ERNIE_PHOTOMETRIC_DOME_LIGHT_API_ATTRIBUTES) |
| 87 |
9/18
✓ Branch 0 taken 146 times.
✓ Branch 1 taken 5 times.
✓ Branch 3 taken 146 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 146 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 146 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 146 times.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✓ Branch 16 taken 146 times.
✓ Branch 19 taken 292 times.
✓ Branch 20 taken 146 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
|
735 |
ERNIE_DEFINE_SCHEMA(PhysicalLightIlluminantAPI, SingleApply, kInheritExtent, |
| 88 |
|
|
ERNIE_PHYSICAL_LIGHT_ILLUMINANT_API_ATTRIBUTES) |
| 89 |
16/34
✓ Branch 0 taken 146 times.
✓ Branch 1 taken 2 times.
✓ Branch 3 taken 146 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 146 times.
✗ Branch 7 not taken.
✓ Branch 16 taken 146 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 146 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 146 times.
✗ Branch 24 not taken.
✓ Branch 26 taken 146 times.
✗ Branch 27 not taken.
✓ Branch 42 taken 146 times.
✗ Branch 43 not taken.
✓ Branch 45 taken 146 times.
✗ Branch 46 not taken.
✓ Branch 53 taken 146 times.
✗ Branch 54 not taken.
✗ Branch 56 not taken.
✓ Branch 57 taken 146 times.
✓ Branch 60 taken 292 times.
✓ Branch 61 taken 146 times.
✓ Branch 63 taken 4234 times.
✓ Branch 64 taken 146 times.
✗ Branch 96 not taken.
✗ Branch 97 not taken.
✗ Branch 102 not taken.
✗ Branch 103 not taken.
✗ Branch 111 not taken.
✗ Branch 112 not taken.
✗ Branch 138 not taken.
✗ Branch 139 not taken.
|
8908 |
ERNIE_DEFINE_SCHEMA(LaserLight, Concrete, ComputedExtent(CentredExtent<EmitterHalves>), |
| 90 |
|
|
ERNIE_LASER_LIGHT_ATTRIBUTES, |
| 91 |
|
|
.fallbackOverrides = {{"ernie:power", 0.001}, |
| 92 |
|
|
{"ernie:polarization:degree", 0.98}}) |
| 93 |
|
|
|
| 94 |
|
|
} // namespace ernie |
| 95 |
|
|
|