Skip to content

Commit 0d6c591

Browse files
authored
Adjust specular_multiscatter to not take LightingInput (#20068)
Small refactor for a future bevy_solari PR. Suggest reviewing while hiding the whitespace diff.
1 parent 6792ceb commit 0d6c591

File tree

1 file changed

+10
-13
lines changed

1 file changed

+10
-13
lines changed

crates/bevy_pbr/src/render/pbr_lighting.wgsl

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -235,16 +235,13 @@ fn fresnel(f0: vec3<f32>, LdotH: f32) -> vec3<f32> {
235235
// Multiscattering approximation:
236236
// <https://google.github.io/filament/Filament.html#listing_energycompensationimpl>
237237
fn specular_multiscatter(
238-
input: ptr<function, LightingInput>,
239238
D: f32,
240239
V: f32,
241240
F: vec3<f32>,
241+
F0: vec3<f32>,
242+
F_ab: vec2<f32>,
242243
specular_intensity: f32,
243244
) -> vec3<f32> {
244-
// Unpack.
245-
let F0 = (*input).F0_;
246-
let F_ab = (*input).F_ab;
247-
248245
var Fr = (specular_intensity * D * V) * F;
249246
Fr *= 1.0 + F0 * (1.0 / F_ab.x - 1.0);
250247
return Fr;
@@ -329,7 +326,7 @@ fn specular(
329326
let F = fresnel(F0, LdotH);
330327

331328
// Calculate the specular light.
332-
let Fr = specular_multiscatter(input, D, V, F, specular_intensity);
329+
let Fr = specular_multiscatter(D, V, F, F0, (*input).F_ab, specular_intensity);
333330
return Fr;
334331
}
335332

@@ -397,7 +394,7 @@ fn specular_anisotropy(
397394
let Fa = fresnel(F0, LdotH);
398395

399396
// Calculate the specular light.
400-
let Fr = specular_multiscatter(input, Da, Va, Fa, specular_intensity);
397+
let Fr = specular_multiscatter(Da, Va, Fa, F0, (*input).F_ab, specular_intensity);
401398
return Fr;
402399
}
403400

@@ -482,7 +479,7 @@ fn cubemap_uv(direction: vec3<f32>, cubemap_type: u32) -> vec2<f32> {
482479
),
483480
max_axis != abs_direction.x
484481
);
485-
482+
486483
var face_uv: vec2<f32>;
487484
var divisor: f32;
488485
var corner_uv: vec2<u32> = vec2(0, 0);
@@ -500,12 +497,12 @@ fn cubemap_uv(direction: vec3<f32>, cubemap_type: u32) -> vec2<f32> {
500497
face_uv = (face_uv / divisor) * 0.5 + 0.5;
501498

502499
switch cubemap_type {
503-
case CUBEMAP_TYPE_CROSS_VERTICAL: {
504-
face_size = vec2(1.0/3.0, 1.0/4.0);
500+
case CUBEMAP_TYPE_CROSS_VERTICAL: {
501+
face_size = vec2(1.0/3.0, 1.0/4.0);
505502
corner_uv = vec2<u32>((0x111102u >> (4 * face_index)) & 0xFu, (0x132011u >> (4 * face_index)) & 0xFu);
506503
}
507-
case CUBEMAP_TYPE_CROSS_HORIZONTAL: {
508-
face_size = vec2(1.0/4.0, 1.0/3.0);
504+
case CUBEMAP_TYPE_CROSS_HORIZONTAL: {
505+
face_size = vec2(1.0/4.0, 1.0/3.0);
509506
corner_uv = vec2<u32>((0x131102u >> (4 * face_index)) & 0xFu, (0x112011u >> (4 * face_index)) & 0xFu);
510507
}
511508
case CUBEMAP_TYPE_SEQUENCE_HORIZONTAL: {
@@ -765,7 +762,7 @@ fn directional_light(
765762
view_bindings::clustered_decal_sampler,
766763
decal_uv - floor(decal_uv),
767764
0.0
768-
).r;
765+
).r;
769766
} else {
770767
texture_sample = 0f;
771768
}

0 commit comments

Comments
 (0)