Skip to content

Commit

Permalink
Integrate new sky model in renderer
Browse files Browse the repository at this point in the history
  • Loading branch information
Nelarius committed Jan 1, 2024
1 parent 9422dc4 commit ceac793
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 16 deletions.
11 changes: 8 additions & 3 deletions src/pt/raytracer.wgsl
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,8 @@ struct PostProcessingParams {

struct SkyState {
params: array<f32, 27>,
radiances: array<f32, 3>,
skyRadiances: array<f32, 3>,
solarRadiances: array<f32, 3>,
sunDirection: vec3<f32>,
};

Expand Down Expand Up @@ -203,7 +204,11 @@ fn rayColor(primaryRay: Ray, rngState: ptr<function, u32>) -> vec3f {
let p = hit.p;

let lightDirection = sampleSolarDiskDirection(SOLAR_COS_THETA_MAX, skyState.sunDirection, rngState);
let lightIntensity = vec3f(1000000f, 1000000f, 1000000f); // TODO: replace with more plausible solar intensity
let lightIntensity = vec3(
skyState.solarRadiances[CHANNEL_R],
skyState.solarRadiances[CHANNEL_G],
skyState.solarRadiances[CHANNEL_B]
);
let brdf = albedo * FRAC_1_PI;
let reflectance = brdf * dot(hit.n, lightDirection);
let lightVisibility = shadowRay(Ray(p, lightDirection), T_MAX);
Expand Down Expand Up @@ -250,7 +255,7 @@ fn generateCameraRay(camera: Camera, rngState: ptr<function, u32>, u: f32, v: f3

@must_use
fn skyRadiance(theta: f32, gamma: f32, channel: u32) -> f32 {
let r = skyState.radiances[channel];
let r = skyState.skyRadiances[channel];
let idx = 9u * channel;
let p0 = skyState.params[idx + 0u];
let p1 = skyState.params[idx + 1u];
Expand Down
29 changes: 16 additions & 13 deletions src/pt/renderer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -100,17 +100,19 @@ struct SamplingStateLayout

struct SkyStateLayout
{
float params[27];
float radiances[3];
float padding1[2];
glm::vec3 sunDirection;
float padding2;
float params[27]; // offset: 0
float skyRadiances[3]; // offset: 27
float solarRadiances[3]; // offset: 30
float padding1[3]; // offset: 33
glm::vec3 sunDirection; // offset: 36
float padding2; // offset: 39

SkyStateLayout(const Sky& sky)
: params{0},
radiances{0},
padding1{0.f, 0.f},
sunDirection(0.0f),
skyRadiances{0},
solarRadiances{0},
padding1{0.f, 0.f, 0.f},
sunDirection(0.f),
padding2(0.0f)
{
const float sunZenith = sky.sunZenithDegrees * DEGREES_TO_RADIANS;
Expand All @@ -121,18 +123,19 @@ struct SkyStateLayout
std::cos(sunZenith),
-std::sin(sunZenith) * std::sin(sunAzimuth)));

const SkyParams skyParams{
const sky_params skyParams{
.elevation = 0.5f * PI - sunZenith,
.turbidity = sky.turbidity,
.albedo = {sky.albedo[0], sky.albedo[1], sky.albedo[2]}};

SkyState skyState;
[[maybe_unused]] const auto r = skyStateNew(&skyParams, &skyState);
sky_state skyState;
[[maybe_unused]] const auto r = sky_state_new(&skyParams, &skyState);
// TODO: exceptional error handling
assert(r == SkyStateResult_Success);
assert(r == sky_state_result_success);

std::memcpy(params, skyState.params, sizeof(skyState.params));
std::memcpy(radiances, skyState.radiances, sizeof(skyState.radiances));
std::memcpy(skyRadiances, skyState.sky_radiances, sizeof(skyState.sky_radiances));
std::memcpy(solarRadiances, skyState.solar_radiances, sizeof(skyState.solar_radiances));
}
};

Expand Down

0 comments on commit ceac793

Please sign in to comment.