Skip to content

Commit 244cf7c

Browse files
committed
painter integrators
1 parent b19130a commit 244cf7c

File tree

1 file changed

+23
-15
lines changed

1 file changed

+23
-15
lines changed

src/painter/integrators/bpt/connect.cpp

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,26 @@ namespace ns::painter::integrators::bpt
4545
{
4646
namespace
4747
{
48+
template <std::size_t N, typename T, typename Color>
49+
[[nodiscard]] std::optional<Color> connect_s_0_infinite_light(
50+
const Scene<N, T, Color>& scene,
51+
const vertex::InfiniteLight<N, T, Color>& infinite_light)
52+
{
53+
std::optional<Color> res;
54+
for (const LightSource<N, T, Color>* const light : scene.light_sources())
55+
{
56+
if (!light->is_infinite_area())
57+
{
58+
continue;
59+
}
60+
if (const auto& radiance = light->leave_radiance(infinite_light.dir()))
61+
{
62+
com::add_optional(&res, *radiance * infinite_light.beta());
63+
}
64+
}
65+
return res;
66+
}
67+
4868
template <std::size_t N, typename T, typename Color>
4969
[[nodiscard]] std::optional<Color> connect_s_0(
5070
const Scene<N, T, Color>& scene,
@@ -55,13 +75,13 @@ template <std::size_t N, typename T, typename Color>
5575
{
5676
if (!surface.is_light())
5777
{
58-
return {};
78+
return std::nullopt;
5979
}
6080
if (const auto& radiance = surface.light_radiance())
6181
{
6282
return *radiance * surface.beta();
6383
}
64-
return {};
84+
return std::nullopt;
6585
},
6686
[](const vertex::Camera<N, T, Color>&) -> std::optional<Color>
6787
{
@@ -73,19 +93,7 @@ template <std::size_t N, typename T, typename Color>
7393
},
7494
[&scene](const vertex::InfiniteLight<N, T, Color>& infinite_light) -> std::optional<Color>
7595
{
76-
std::optional<Color> res;
77-
for (const LightSource<N, T, Color>* const light : scene.light_sources())
78-
{
79-
if (!light->is_infinite_area())
80-
{
81-
continue;
82-
}
83-
if (const auto& radiance = light->leave_radiance(infinite_light.dir()))
84-
{
85-
com::add_optional(&res, *radiance * infinite_light.beta());
86-
}
87-
}
88-
return res;
96+
return connect_s_0_infinite_light(scene, infinite_light);
8997
}};
9098

9199
return std::visit(visitors, camera_path_vertex);

0 commit comments

Comments
 (0)