Fix CI and add back internal assets

This commit is contained in:
Máté Homolya 2025-06-02 15:35:43 -07:00
parent 152360f2da
commit 3b0c831c80
No known key found for this signature in database
3 changed files with 75 additions and 21 deletions

View File

@ -276,14 +276,14 @@ fn generate_radiance_map(@builtin(global_invocation_id) global_id: vec3u) {
// and golden angle to get a uniform distribution
fn uniform_sample_sphere(i: u32, normal: vec3f) -> vec3f {
// Get stratified sample index
let strat_i = i % constants.sample_count;
let index = i % constants.sample_count;
let golden_angle = 2.4;
let full_sphere = f32(constants.sample_count) * 2.0;
let z = 1.0 - (2.0 * f32(strat_i) + 1.0) / full_sphere;
let z = 1.0 - (2.0 * f32(index) + 1.0) / full_sphere;
let r = fast_sqrt(1.0 - z * z);
let phi = f32(strat_i) * golden_angle;
let phi = f32(index) * golden_angle;
// Create the direction vector
let dir_uniform = vec3f(

View File

@ -1,4 +1,4 @@
use bevy_asset::{weak_handle, Assets, Handle};
use bevy_asset::{load_embedded_asset, weak_handle, Assets, Handle};
use bevy_ecs::{
component::Component,
entity::Entity,
@ -18,7 +18,7 @@ use bevy_render::{
binding_types::*, AddressMode, BindGroup, BindGroupEntries, BindGroupLayout,
BindGroupLayoutEntries, CachedComputePipelineId, ComputePassDescriptor,
ComputePipelineDescriptor, Extent3d, FilterMode, PipelineCache, Sampler,
SamplerBindingType, SamplerDescriptor, Shader, ShaderDefVal, ShaderStages, ShaderType,
SamplerBindingType, SamplerDescriptor, ShaderDefVal, ShaderStages, ShaderType,
StorageTextureAccess, Texture, TextureAspect, TextureDescriptor, TextureDimension,
TextureFormat, TextureSampleType, TextureUsages, TextureView, TextureViewDescriptor,
TextureViewDimension, UniformBuffer,
@ -32,13 +32,6 @@ use bevy_render::{
use crate::light_probe::environment_map::EnvironmentMapLight;
/// Single Pass Downsampling (SPD) shader handle
pub const SPD_SHADER_HANDLE: Handle<Shader> = weak_handle!("5dcf400c-bcb3-49b9-8b7e-80f4117eaf82");
/// Environment Filter shader handle
pub const ENVIRONMENT_FILTER_SHADER_HANDLE: Handle<Shader> =
weak_handle!("3110b545-78e0-48fc-b86e-8bc0ea50fc67");
/// Sphere Cosine Weighted Irradiance shader handle
pub const STBN_SPHERE: Handle<Image> = weak_handle!("3110b545-78e0-48fc-b86e-8bc0ea50fc67");
pub const STBN_VEC2: Handle<Image> = weak_handle!("3110b545-78e0-48fc-b86e-8bc0ea50fc67");
@ -271,7 +264,7 @@ impl FromWorld for GeneratorPipelines {
label: Some("spd_first_pipeline".into()),
layout: vec![layouts.spd.clone()],
push_constant_ranges: vec![],
shader: SPD_SHADER_HANDLE,
shader: load_embedded_asset!(world, "spd.wgsl"),
shader_defs: shader_defs.clone(),
entry_point: "spd_downsample_first".into(),
zero_initialize_workgroup_memory: false,
@ -282,7 +275,7 @@ impl FromWorld for GeneratorPipelines {
label: Some("spd_second_pipeline".into()),
layout: vec![layouts.spd.clone()],
push_constant_ranges: vec![],
shader: SPD_SHADER_HANDLE,
shader: load_embedded_asset!(world, "spd.wgsl"),
shader_defs,
entry_point: "spd_downsample_second".into(),
zero_initialize_workgroup_memory: false,
@ -293,7 +286,7 @@ impl FromWorld for GeneratorPipelines {
label: Some("radiance_pipeline".into()),
layout: vec![layouts.radiance.clone()],
push_constant_ranges: vec![],
shader: ENVIRONMENT_FILTER_SHADER_HANDLE,
shader: load_embedded_asset!(world, "environment_filter.wgsl"),
shader_defs: vec![],
entry_point: "generate_radiance_map".into(),
zero_initialize_workgroup_memory: false,
@ -304,7 +297,7 @@ impl FromWorld for GeneratorPipelines {
label: Some("irradiance_pipeline".into()),
layout: vec![layouts.irradiance.clone()],
push_constant_ranges: vec![],
shader: ENVIRONMENT_FILTER_SHADER_HANDLE,
shader: load_embedded_asset!(world, "environment_filter.wgsl"),
shader_defs: vec![],
entry_point: "generate_irradiance_map".into(),
zero_initialize_workgroup_memory: false,

View File

@ -1,8 +1,11 @@
//! Light probes for baked global illumination.
use bevy_app::{App, Plugin, Update};
use bevy_asset::AssetId;
use bevy_core_pipeline::core_3d::{graph::{Core3d, Node3d}, Camera3d};
use bevy_asset::{embedded_asset, load_internal_binary_asset, AssetId};
use bevy_core_pipeline::core_3d::{
graph::{Core3d, Node3d},
Camera3d,
};
use bevy_derive::{Deref, DerefMut};
use bevy_ecs::{
component::Component,
@ -18,7 +21,19 @@ use bevy_math::{Affine3A, FloatOrd, Mat4, Vec3A, Vec4};
use bevy_platform::collections::HashMap;
use bevy_reflect::{std_traits::ReflectDefault, Reflect};
use bevy_render::{
extract_component::ExtractComponentPlugin, extract_instances::ExtractInstancesPlugin, load_shader_library, primitives::{Aabb, Frustum}, render_asset::RenderAssets, render_graph::RenderGraphApp, render_resource::{DynamicUniformBuffer, Sampler, ShaderType, TextureView}, renderer::{RenderAdapter, RenderDevice, RenderQueue}, settings::WgpuFeatures, sync_world::RenderEntity, texture::{FallbackImage, GpuImage}, view::{ExtractedView, Visibility}, Extract, ExtractSchedule, Render, RenderApp, RenderSystems
extract_component::ExtractComponentPlugin,
extract_instances::ExtractInstancesPlugin,
load_shader_library,
primitives::{Aabb, Frustum},
render_asset::RenderAssets,
render_graph::RenderGraphApp,
render_resource::{DynamicUniformBuffer, Sampler, ShaderType, TextureView},
renderer::{RenderAdapter, RenderDevice, RenderQueue},
settings::WgpuFeatures,
sync_world::RenderEntity,
texture::{FallbackImage, GpuImage},
view::{ExtractedView, Visibility},
Extract, ExtractSchedule, Render, RenderApp, RenderSystems,
};
use bevy_transform::{components::Transform, prelude::GlobalTransform};
use generate::{
@ -30,7 +45,13 @@ use tracing::error;
use core::{hash::Hash, ops::Deref};
use crate::{generate::{GeneratorBindGroupLayouts, GeneratorNode, GeneratorSamplers, IrradianceMapNode, RadianceMapNode}, light_probe::environment_map::{EnvironmentMapIds, EnvironmentMapLight}};
use crate::{
generate::{
GeneratorBindGroupLayouts, GeneratorNode, GeneratorSamplers, IrradianceMapNode,
RadianceMapNode,
},
light_probe::environment_map::{EnvironmentMapIds, EnvironmentMapLight},
};
use self::irradiance_volume::IrradianceVolume;
@ -337,6 +358,38 @@ impl Plugin for LightProbePlugin {
load_shader_library!(app, "environment_map.wgsl");
load_shader_library!(app, "irradiance_volume.wgsl");
embedded_asset!(app, "environment_filter.wgsl");
embedded_asset!(app, "spd.wgsl");
load_internal_binary_asset!(
app,
STBN_SPHERE,
"noise/sphere_coshemi_gauss1_0.png",
|bytes, _: String| Image::from_buffer(
bytes,
bevy_image::ImageType::Format(bevy_image::ImageFormat::Png),
bevy_image::CompressedImageFormats::NONE,
false,
bevy_image::ImageSampler::Default,
bevy_asset::RenderAssetUsages::RENDER_WORLD,
)
.expect("Failed to load sphere cosine weighted blue noise texture")
);
load_internal_binary_asset!(
app,
STBN_VEC2,
"noise/vector2_uniform_gauss1_0.png",
|bytes, _: String| Image::from_buffer(
bytes,
bevy_image::ImageType::Format(bevy_image::ImageFormat::Png),
bevy_image::CompressedImageFormats::NONE,
false,
bevy_image::ImageSampler::Default,
bevy_asset::RenderAssetUsages::RENDER_WORLD,
)
.expect("Failed to load vector2 uniform blue noise texture")
);
app.register_type::<LightProbe>()
.register_type::<EnvironmentMapLight>()
.register_type::<IrradianceVolume>()
@ -378,7 +431,15 @@ impl Plugin for LightProbePlugin {
)
.add_systems(
Render,
(upload_light_probes, prepare_environment_uniform_buffer)
prepare_generator_bind_groups.in_set(RenderSystems::PrepareBindGroups),
)
.add_systems(
Render,
(
upload_light_probes,
prepare_environment_uniform_buffer,
prepare_intermediate_textures,
)
.in_set(RenderSystems::PrepareResources),
);
}