Implement procedural atmospheric scattering from [Sebastien Hillaire's 2020 paper](https://sebh.github.io/publications/egsr2020.pdf). This approach should scale well even down to mobile hardware, and is physically accurate. ## Co-author: @mate-h He helped massively with getting this over the finish line, ensuring everything was physically correct, correcting several places where I had misunderstood or misapplied the paper, and improving the performance in several places as well. Thanks! ## Credits @aevyrie: helped find numerous bugs and improve the example to best show off this feature :) Built off of @mtsr's original branch, which handled the transmittance lut (arguably the most important part) ## Showcase:   ## For followup - Integrate with pcwalton's volumetrics code - refactor/reorganize for better integration with other effects - have atmosphere transmittance affect directional lights - add support for generating skybox/environment map --------- Co-authored-by: Emerson Coskey <56370779+EmersonCoskey@users.noreply.github.com> Co-authored-by: atlv <email@atlasdostal.com> Co-authored-by: JMS55 <47158642+JMS55@users.noreply.github.com> Co-authored-by: Emerson Coskey <coskey@emerlabs.net> Co-authored-by: Máté Homolya <mate.homolya@gmail.com>
23 lines
1007 B
WebGPU Shading Language
23 lines
1007 B
WebGPU Shading Language
#define_import_path bevy_pbr::atmosphere::bindings
|
|
|
|
#import bevy_render::view::View;
|
|
|
|
#import bevy_pbr::{
|
|
mesh_view_types::Lights,
|
|
atmosphere::types::{Atmosphere, AtmosphereSettings, AtmosphereTransforms}
|
|
}
|
|
|
|
@group(0) @binding(0) var<uniform> atmosphere: Atmosphere;
|
|
@group(0) @binding(1) var<uniform> settings: AtmosphereSettings;
|
|
@group(0) @binding(2) var<uniform> atmosphere_transforms: AtmosphereTransforms;
|
|
@group(0) @binding(3) var<uniform> view: View;
|
|
@group(0) @binding(4) var<uniform> lights: Lights;
|
|
@group(0) @binding(5) var transmittance_lut: texture_2d<f32>;
|
|
@group(0) @binding(6) var transmittance_lut_sampler: sampler;
|
|
@group(0) @binding(7) var multiscattering_lut: texture_2d<f32>;
|
|
@group(0) @binding(8) var multiscattering_lut_sampler: sampler;
|
|
@group(0) @binding(9) var sky_view_lut: texture_2d<f32>;
|
|
@group(0) @binding(10) var sky_view_lut_sampler: sampler;
|
|
@group(0) @binding(11) var aerial_view_lut: texture_3d<f32>;
|
|
@group(0) @binding(12) var aerial_view_lut_sampler: sampler;
|