From fecc1f17189462bc819f23ca9dedba1d6d2c2b84 Mon Sep 17 00:00:00 2001 From: Avii Date: Wed, 11 Feb 2026 15:05:56 +0100 Subject: [PATCH] outlines --- mini-game/assets/fonts/falconded.otf | Bin 0 -> 15408 bytes mini-game/assets/fonts/ponderosa.regular.ttf | Bin 0 -> 18484 bytes mini-game/assets/shaders/post_processing.wgsl | 2 +- .../edge_detection/edge_detection_shader.wgsl | 305 ++++++++ mini-game/src/edge_detection/mod.rs | 669 ++++++++++++++++++ mini-game/src/edge_detection/perlin_noise.png | Bin 0 -> 158069 bytes mini-game/src/main.rs | 133 ++-- mini-game/src/shared.rs | 2 +- 8 files changed, 1051 insertions(+), 60 deletions(-) create mode 100644 mini-game/assets/fonts/falconded.otf create mode 100644 mini-game/assets/fonts/ponderosa.regular.ttf create mode 100644 mini-game/src/edge_detection/edge_detection_shader.wgsl create mode 100644 mini-game/src/edge_detection/mod.rs create mode 100644 mini-game/src/edge_detection/perlin_noise.png diff --git a/mini-game/assets/fonts/falconded.otf b/mini-game/assets/fonts/falconded.otf new file mode 100644 index 0000000000000000000000000000000000000000..2bf56f409af5bff72b30b14c773f9753bbe432cc GIT binary patch literal 15408 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 BHkAMX literal 0 HcmV?d00001 diff --git a/mini-game/assets/fonts/ponderosa.regular.ttf b/mini-game/assets/fonts/ponderosa.regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..89eab2dbbfeb274663e2a9a9145e22153dcc7a34 GIT binary patch literal 18484 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 Tch7V``(1i`;+s2P@E`vR6|o)V literal 0 HcmV?d00001 diff --git a/mini-game/assets/shaders/post_processing.wgsl b/mini-game/assets/shaders/post_processing.wgsl index f912dff..8110b66 100644 --- a/mini-game/assets/shaders/post_processing.wgsl +++ b/mini-game/assets/shaders/post_processing.wgsl @@ -54,6 +54,6 @@ fn fragment(in: FullscreenVertexOutput) -> @location(0) vec4 { // Sample each color channel with an arbitrary shift return vec4( - final_gray, final_gray, final_gray, a + final_gray, final_gray, final_gray, 0.0 ); } diff --git a/mini-game/src/edge_detection/edge_detection_shader.wgsl b/mini-game/src/edge_detection/edge_detection_shader.wgsl new file mode 100644 index 0000000..240c4f0 --- /dev/null +++ b/mini-game/src/edge_detection/edge_detection_shader.wgsl @@ -0,0 +1,305 @@ +//! Edge Detection using 3x3 Sobel Filter +//! +//! This shader implements edge detection based on depth, normal, and color gradients using a 3x3 Sobel filter. +//! It combines the results of depth, normal, and color edge detection to produce a final edge map. + +#import bevy_core_pipeline::fullscreen_vertex_shader::FullscreenVertexOutput +#import bevy_render::view::View +#import bevy_pbr::view_transformations::uv_to_ndc + +@group(0) @binding(0) var screen_texture: texture_2d; + +#ifdef MULTISAMPLED +@group(0) @binding(1) var depth_prepass_texture: texture_depth_multisampled_2d; +#else +@group(0) @binding(1) var depth_prepass_texture: texture_depth_2d; +#endif + +#ifdef MULTISAMPLED +@group(0) @binding(2) var normal_prepass_texture: texture_multisampled_2d; +#else +@group(0) @binding(2) var normal_prepass_texture: texture_2d; +#endif + +@group(0) @binding(3) var filtering_sampler: sampler; +@group(0) @binding(4) var depth_sampler: sampler; + +@group(0) @binding(5) var noise_texture: texture_2d; +@group(0) @binding(6) var noise_sampler: sampler; + +@group(0) @binding(7) var view: View; +@group(0) @binding(8) var ed_uniform: EdgeDetectionUniform; + +struct EdgeDetectionUniform { + depth_threshold: f32, + normal_threshold: f32, + color_threshold: f32, + + depth_thickness: f32, + normal_thickness: f32, + color_thickness: f32, + + steep_angle_threshold: f32, + steep_angle_multiplier: f32, + + // xy: distortion frequency; zw: distortion strength + uv_distortion: vec4f, + + edge_color: vec4f, + + block_pixel: u32, +} + +// ----------------------- +// View Transformation --- +// ----------------------- + +fn saturate(x: f32) -> f32 { return clamp(x, 0.0, 1.0); } + +/// Retrieve the perspective camera near clipping plane +fn perspective_camera_near() -> f32 { + return view.clip_from_view[3][2]; +} + +/// Convert ndc depth to linear view z. +/// Note: Depth values in front of the camera will be negative as -z is forward +fn depth_ndc_to_view_z(ndc_depth: f32) -> f32 { +#ifdef VIEW_PROJECTION_PERSPECTIVE + return -perspective_camera_near() / ndc_depth; +#else ifdef VIEW_PROJECTION_ORTHOGRAPHIC + return -(view.clip_from_view[3][2] - ndc_depth) / view.clip_from_view[2][2]; +#else + let view_pos = view.view_from_clip * vec4f(0.0, 0.0, ndc_depth, 1.0); + return view_pos.z / view_pos.w; +#endif +} + +/// Convert a ndc space position to world space +fn position_ndc_to_world(ndc_pos: vec3) -> vec3 { + let world_pos = view.world_from_clip * vec4f(ndc_pos, 1.0); + return world_pos.xyz / world_pos.w; +} + +fn calculate_view(world_position: vec3f) -> vec3f { +#ifdef VIEW_PROJECTION_ORTHOGRAPHIC + // Orthographic view vector + return normalize(vec3f(view.clip_from_world[0].z, view.clip_from_world[1].z, view.clip_from_world[2].z)); +#else + // Only valid for a perspective projection + return normalize(view.world_position.xyz - world_position.xyz); +#endif +} + +// ----------------------- +// Depth Detection ------- +// ----------------------- + +fn prepass_depth(uv: vec2f) -> f32 { +#ifdef MULTISAMPLED + let pixel_coord = vec2i(uv * texture_size); + let depth = textureLoad(depth_prepass_texture, pixel_coord, sample_index_i); +#else + let depth = textureSample(depth_prepass_texture, depth_sampler, uv); +#endif + return depth; +} + +fn prepass_view_z(uv: vec2f) -> f32 { + let depth = prepass_depth(uv); + return depth_ndc_to_view_z(depth); +} + +fn view_z_gradient_x(uv: vec2f, y: f32, thickness: f32) -> f32 { + let l_coord = uv + texel_size * vec2f(-thickness, y); // left coordinate + let r_coord = uv + texel_size * vec2f( thickness, y); // right coordinate + + return prepass_view_z(r_coord) - prepass_view_z(l_coord); +} + +fn view_z_gradient_y(uv: vec2f, x: f32, thickness: f32) -> f32 { + let d_coord = uv + texel_size * vec2f(x, -thickness); // down coordinate + let t_coord = uv + texel_size * vec2f(x, thickness); // top coordinate + + return prepass_view_z(t_coord) - prepass_view_z(d_coord); +} + +fn detect_edge_depth(uv: vec2f, thickness: f32, fresnel: f32) -> f32 { + let deri_x = + view_z_gradient_x(uv, thickness, thickness) + + 2.0 * view_z_gradient_x(uv, 0.0, thickness) + + view_z_gradient_x(uv, -thickness, thickness); + + let deri_y = + view_z_gradient_y(uv, thickness, thickness) + + 2.0 * view_z_gradient_y(uv, 0.0, thickness) + + view_z_gradient_y(uv, -thickness, thickness); + + // why not `let grad = sqrt(deri_x * deri_x + deri_y * deri_y);`? + // + // Because ·deri_x· or ·deri_y· might be too large, + // causing overflow in the calculation and resulting in incorrect results. + let grad = max(abs(deri_x), abs(deri_y)); + + let view_z = abs(prepass_view_z(uv)); + + let steep_angle_adjustment = + smoothstep(ed_uniform.steep_angle_threshold, 1.0, fresnel) * ed_uniform.steep_angle_multiplier * view_z; + + return f32(grad > ed_uniform.depth_threshold * (1.0 + steep_angle_adjustment)); +} + +// ----------------------- +// Normal Detection ------ +// ----------------------- + +fn prepass_normal_unpack(uv: vec2f) -> vec3f { + let normal_packed = prepass_normal(uv); + return normalize(normal_packed.xyz * 2.0 - vec3f(1.0)); +} + +fn prepass_normal(uv: vec2f) -> vec3f { +#ifdef MULTISAMPLED + let pixel_coord = vec2i(uv * texture_size); + let normal = textureLoad(normal_prepass_texture, pixel_coord, sample_index_i); +#else + let normal = textureSample(normal_prepass_texture, filtering_sampler, uv); +#endif + return normal.xyz; +} + +fn normal_gradient_x(uv: vec2f, y: f32, thickness: f32) -> vec3f { + let l_coord = uv + texel_size * vec2f(-thickness, y); // left coordinate + let r_coord = uv + texel_size * vec2f( thickness, y); // right coordinate + + return prepass_normal(r_coord) - prepass_normal(l_coord); +} + +fn normal_gradient_y(uv: vec2f, x: f32, thickness: f32) -> vec3f { + let d_coord = uv + texel_size * vec2f(x, -thickness); // down coordinate + let t_coord = uv + texel_size * vec2f(x, thickness); // top coordinate + + return prepass_normal(t_coord) - prepass_normal(d_coord); +} + +fn detect_edge_normal(uv: vec2f, thickness: f32) -> f32 { + let deri_x = abs( + normal_gradient_x(uv, thickness, thickness) + + 2.0 * normal_gradient_x(uv, 0.0, thickness) + + normal_gradient_x(uv, -thickness, thickness)); + + let deri_y = abs( + normal_gradient_y(uv, thickness, thickness) + + 2.0 * normal_gradient_y(uv, 0.0, thickness) + + normal_gradient_y(uv, -thickness, thickness)); + + let x_max = max(deri_x.x, max(deri_x.y, deri_x.z)); + let y_max = max(deri_y.x, max(deri_y.y, deri_y.z)); + + let grad = max(x_max, y_max); + + return f32(grad > ed_uniform.normal_threshold); +} + +// ---------------------- +// Color Detection ------ +// ---------------------- + +fn prepass_color(uv: vec2f) -> vec3f { + return textureSample(screen_texture, filtering_sampler, uv).rgb; +} + +fn color_gradient_x(uv: vec2f, y: f32, thickness: f32) -> vec3f { + let l_coord = uv + texel_size * vec2f(-thickness, y); // left coordinate + let r_coord = uv + texel_size * vec2f( thickness, y); // right coordinate + + return prepass_color(r_coord) - prepass_color(l_coord); + +} + +fn color_gradient_y(uv: vec2f, x: f32, thickness: f32) -> vec3f { + let d_coord = uv + texel_size * vec2f(x, -thickness); // down coordinate + let t_coord = uv + texel_size * vec2f(x, thickness); // top coordinate + + return prepass_color(t_coord) - prepass_color(d_coord); + +} + +fn detect_edge_color(uv: vec2f, thickness: f32) -> f32 { + let deri_x = + color_gradient_x(uv, thickness, thickness) + + 2.0 * color_gradient_x(uv, 0.0, thickness) + + color_gradient_x(uv, -thickness, thickness); + + let deri_y = + color_gradient_y(uv, thickness, thickness) + + 2.0 * color_gradient_y(uv, 0.0, thickness) + + color_gradient_y(uv, -thickness, thickness); + + let grad = max(length(deri_x), length(deri_y)); + + return f32(grad > ed_uniform.color_threshold); +} + +fn pixelate_uv(uv: vec2f, dims: vec2f, block_px: f32) -> vec2f { + let b = max(block_px, 1.0); + let cell = floor(uv * dims / b); + let center = (cell * b + 0.5 * b) / dims; // sample at block center + return center; +} + +var texture_size: vec2f; +var texel_size: vec2f; +var sample_index_i: i32 = 0; + +@fragment +fn fragment( +#ifdef MULTISAMPLED + @builtin(sample_index) sample_index: u32, +#endif + in: FullscreenVertexOutput +) -> @location(0) vec4f { +#ifdef MULTISAMPLED + sample_index_i = i32(sample_index); +#endif + + texture_size = vec2f(textureDimensions(screen_texture, 0)); + texel_size = 1.0 / texture_size; + + let near_ndc_pos = vec3f(uv_to_ndc(in.uv), 1.0); + let near_world_pos = position_ndc_to_world(near_ndc_pos); + + let view_direction = calculate_view(near_world_pos); + + let normal = prepass_normal_unpack(in.uv); + let fresnel = 1.0 - saturate(dot(normal, view_direction)); + + let sample_uv = in.position.xy * min(texel_size.x, texel_size.y); + let noise = textureSample(noise_texture, noise_sampler, sample_uv * ed_uniform.uv_distortion.xy); + + let uv_noise = in.uv + noise.xy * ed_uniform.uv_distortion.zw; + let block_pixel = max(f32(ed_uniform.block_pixel), 1.0); + let uv_noise_px = pixelate_uv(uv_noise, texture_size, f32(block_pixel)); + let uv_px = pixelate_uv(in.uv, texture_size, f32(block_pixel)); + + var edge = 0.0; + +#ifdef ENABLE_DEPTH + let edge_depth = detect_edge_depth(uv_noise_px, ed_uniform.depth_thickness, fresnel); + edge = max(edge, edge_depth); +#endif + +#ifdef ENABLE_NORMAL + let edge_normal = detect_edge_normal(uv_noise_px, ed_uniform.normal_thickness); + edge = max(edge, edge_normal); +#endif + +#ifdef ENABLE_COLOR + let edge_color = detect_edge_color(uv_noise_px, ed_uniform.color_thickness); + edge = max(edge, edge_color); +#endif + + var color = textureSample(screen_texture, filtering_sampler, uv_px).rgb; + color = mix(color, ed_uniform.edge_color.rgb, edge); + + return vec4f(color, 1.0); +} \ No newline at end of file diff --git a/mini-game/src/edge_detection/mod.rs b/mini-game/src/edge_detection/mod.rs new file mode 100644 index 0000000..3b38a9e --- /dev/null +++ b/mini-game/src/edge_detection/mod.rs @@ -0,0 +1,669 @@ +// https://github.com/Mediocre-AI/bevy_edge_detection_outline + +use bevy::{ + asset::{embedded_asset, load_embedded_asset}, + core_pipeline::{ + FullscreenShader, + core_3d::{ + DEPTH_TEXTURE_SAMPLING_SUPPORTED, + graph::{Core3d, Node3d}, + }, + prepass::{DepthPrepass, NormalPrepass, ViewPrepassTextures}, + }, + ecs::query::QueryItem, + prelude::*, + render::{ + Extract, Render, RenderApp, RenderSystems, + extract_component::{ + ComponentUniforms, DynamicUniformIndex, ExtractComponent, ExtractComponentPlugin, + UniformComponentPlugin, + }, + render_asset::RenderAssets, + render_graph::{ + NodeRunError, RenderGraphContext, RenderGraphExt, RenderLabel, ViewNode, ViewNodeRunner, + }, + render_resource::{ + binding_types::{ + sampler, texture_2d, texture_2d_multisampled, texture_depth_2d, + texture_depth_2d_multisampled, uniform_buffer, + }, + *, + }, + renderer::{RenderContext, RenderDevice}, + sync_component::SyncComponentPlugin, + sync_world::RenderEntity, + texture::GpuImage, + view::{ViewTarget, ViewUniform, ViewUniformOffset, ViewUniforms}, + }, +}; + +// ────────────────────────────────────────────── +// Plugin Setup +// ────────────────────────────────────────────── +pub struct EdgeDetectionPlugin { + pub before: Node3d, +} + +impl Default for EdgeDetectionPlugin { + fn default() -> Self { + Self { + before: Node3d::Fxaa, + } + } +} + +impl Plugin for EdgeDetectionPlugin { + fn build(&self, app: &mut App) { + embedded_asset!(app, "edge_detection_shader.wgsl"); + embedded_asset!(app, "perlin_noise.png"); + + app.register_type::(); + app.add_plugins(SyncComponentPlugin::::default()) + .add_plugins(( + ExtractComponentPlugin::::default(), + UniformComponentPlugin::::default(), + )); + // We need to get the render app from the main app + let Some(render_app) = app.get_sub_app_mut(RenderApp) else { + return; + }; + render_app + .init_resource::>() + .add_systems( + ExtractSchedule, + EdgeDetectionUniform::extract_edge_detection_settings, + ) + .add_systems( + Render, + prepare_edge_detection_pipelines.in_set(RenderSystems::Prepare), + ) + .add_render_graph_node::>(Core3d, EdgeDetectionLabel) + .add_render_graph_edges( + Core3d, + ( + Node3d::PostProcessing, + EdgeDetectionLabel, + self.before.clone(), + ), + ); + } + + fn finish(&self, app: &mut App) { + app.sub_app_mut(RenderApp) + .init_resource::(); + } +} + +// This contains global data used by the render pipeline. This will be created once on startup. +#[derive(Resource)] +pub struct EdgeDetectionPipeline { + pub shader: Handle, + pub noise_texture: Handle, + pub linear_sampler: Sampler, + pub nonfiltering_sampler: Sampler, + pub noise_sampler: Sampler, + pub layout_with_msaa: BindGroupLayoutDescriptor, + pub layout_without_msaa: BindGroupLayoutDescriptor, + pub fullscreen_shader: FullscreenShader, +} + +impl EdgeDetectionPipeline { + pub fn bind_group_layout(&self, multisampled: bool) -> &BindGroupLayoutDescriptor { + if multisampled { + &self.layout_with_msaa + } else { + &self.layout_without_msaa + } + } +} + +impl FromWorld for EdgeDetectionPipeline { + fn from_world(world: &mut World) -> Self { + let render_device = world.resource::(); + + // let noise_texture = world.load_asset("embedded://bevy_edge_detection/perlin_noise.png"); + let shader = load_embedded_asset!(world, "edge_detection_shader.wgsl"); + let noise_texture = load_embedded_asset!(world, "perlin_noise.png"); + + let layout_with_msaa = BindGroupLayoutDescriptor::new( + "edge_detection: bind_group_layout with msaa", + &BindGroupLayoutEntries::sequential( + // The layout entries will only be visible in the fragment stage + ShaderStages::FRAGMENT, + ( + // color attachment + texture_2d(TextureSampleType::Float { filterable: true }), + // depth prepass + texture_depth_2d_multisampled(), + // normal prepass + texture_2d_multisampled(TextureSampleType::Float { filterable: false }), + // filtering sampler for color/normal + sampler(SamplerBindingType::Filtering), + // non-filtering sampler for depth prepass + sampler(SamplerBindingType::NonFiltering), + // perlin-noise texture + texture_2d(TextureSampleType::Float { filterable: true }), + // perlin-noise sampler + sampler(SamplerBindingType::Filtering), + // view + uniform_buffer::(true), + // The uniform that will control the effect + uniform_buffer::(true), + ), + ), + ); + + let layout_without_msaa = BindGroupLayoutDescriptor::new( + "edge_detection: bind_group_layout without msaa", + &BindGroupLayoutEntries::sequential( + // The layout entries will only be visible in the fragment stage + ShaderStages::FRAGMENT, + ( + // color attachment + texture_2d(TextureSampleType::Float { filterable: true }), + // depth prepass + texture_depth_2d(), + // normal prepass + texture_2d(TextureSampleType::Float { filterable: true }), + // texture sampler + sampler(SamplerBindingType::Filtering), + // for depth + sampler(SamplerBindingType::NonFiltering), + // perlin-noise texture + texture_2d(TextureSampleType::Float { filterable: true }), + // perlin-noise sampler + sampler(SamplerBindingType::Filtering), + // view + uniform_buffer::(true), + // The uniform that will control the effect + uniform_buffer::(true), + ), + ), + ); + + let linear_sampler = render_device.create_sampler(&SamplerDescriptor { + label: Some("edge detection linear sampler"), + mag_filter: FilterMode::Linear, + min_filter: FilterMode::Linear, + ..default() + }); + let nonfiltering_sampler = render_device.create_sampler(&SamplerDescriptor { + label: Some("edge detection nonfiltering sampler"), + mag_filter: FilterMode::Nearest, + min_filter: FilterMode::Nearest, + ..default() + }); + + let noise_sampler = render_device.create_sampler(&SamplerDescriptor { + label: Some("edge detection noise sampler"), + mag_filter: FilterMode::Linear, + min_filter: FilterMode::Linear, + address_mode_u: AddressMode::Repeat, + address_mode_v: AddressMode::Repeat, + ..default() + }); + + Self { + shader, + noise_texture, + linear_sampler, + nonfiltering_sampler, + noise_sampler, + layout_with_msaa, + layout_without_msaa, + fullscreen_shader: world.resource::().clone(), + } + } +} + +impl SpecializedRenderPipeline for EdgeDetectionPipeline { + type Key = EdgeDetectionKey; + + fn specialize(&self, key: Self::Key) -> RenderPipelineDescriptor { + let targets = vec![Some(ColorTargetState { + format: if key.hdr { + ViewTarget::TEXTURE_FORMAT_HDR + } else { + TextureFormat::bevy_default() + }, + blend: None, + write_mask: ColorWrites::ALL, + })]; + + let mut shader_defs = vec![]; + + if key.enable_depth { + shader_defs.push("ENABLE_DEPTH".into()); + } + + if key.enable_normal { + shader_defs.push("ENABLE_NORMAL".into()); + } + + if key.enable_color { + shader_defs.push("ENABLE_COLOR".into()); + } + + if key.multisampled { + shader_defs.push("MULTISAMPLED".into()); + } + + match key.projection { + ProjectionType::Perspective => shader_defs.push("VIEW_PROJECTION_PERSPECTIVE".into()), + ProjectionType::Orthographic => shader_defs.push("VIEW_PROJECTION_ORTHOGRAPHIC".into()), + _ => (), + }; + + RenderPipelineDescriptor { + label: Some("edge_detection: pipeline".into()), + layout: vec![self.bind_group_layout(key.multisampled).clone()], + vertex: self.fullscreen_shader.to_vertex_state(), + fragment: Some(FragmentState { + shader: self.shader.clone(), + shader_defs, + entry_point: Some("fragment".into()), + targets, + }), + primitive: default(), + depth_stencil: None, + multisample: default(), + push_constant_ranges: vec![], + zero_initialize_workgroup_memory: false, + } + } +} + +#[derive(Component, Clone, Copy)] +pub struct EdgeDetectionPipelineId(CachedRenderPipelineId); + +pub fn prepare_edge_detection_pipelines( + mut commands: Commands, + pipeline_cache: Res, + mut pipelines: ResMut>, + edge_detection_pipeline: Res, + query: Query<(Entity, &EdgeDetection, Option<&Projection>, &ViewTarget)>, +) { + for (entity, edge_detection, projection, view_target) in &query { + let multisampled = view_target.sampled_main_texture_view().is_some(); + let hdr = view_target.is_hdr(); + let id = pipelines.specialize( + &pipeline_cache, + &edge_detection_pipeline, + EdgeDetectionKey::new(edge_detection, hdr, multisampled, projection), + ); + commands.entity(entity).insert(EdgeDetectionPipelineId(id)); + } +} + +// ────────────────────────────────────────────── +// Core structs and types +// ────────────────────────────────────────────── + +#[derive(Clone, Copy, PartialEq, Eq, Hash)] +pub enum ProjectionType { + None, + Perspective, + Orthographic, +} + +impl From> for ProjectionType { + fn from(proj: Option<&Projection>) -> Self { + if let Some(projection) = proj { + return match projection { + Projection::Perspective(_) => Self::Perspective, + Projection::Orthographic(_) => Self::Orthographic, + Projection::Custom(_) => Self::None, + }; + }; + + Self::None + } +} + +#[derive(Clone, Copy, PartialEq, Eq, Hash)] +pub struct EdgeDetectionKey { + /// Whether to enable depth-based edge detection. + /// If `true`, edges will be detected based on depth variations. + pub enable_depth: bool, + /// Whether to enable normal-based edge detection. + /// If `true`, edges will be detected based on normal direction variations. + pub enable_normal: bool, + /// Whether to enable color-based edge detection. + /// If `true`, edges will be detected based on color variations. + pub enable_color: bool, + + /// Whether we're using HDR. + pub hdr: bool, + /// Whether the render target is multisampled. + pub multisampled: bool, + /// The projection type of view + pub projection: ProjectionType, +} + +impl EdgeDetectionKey { + pub fn new( + edge_detection: &EdgeDetection, + hdr: bool, + multisampled: bool, + projection: Option<&Projection>, + ) -> Self { + Self { + enable_depth: edge_detection.enable_depth, + enable_normal: edge_detection.enable_normal, + enable_color: edge_detection.enable_color, + + hdr, + multisampled, + projection: projection.into(), + } + } +} +#[derive(Component, Clone, Copy, Debug, Reflect)] +#[reflect(Component, Default)] +#[require(DepthPrepass, NormalPrepass)] +pub struct EdgeDetection { + /// Depth threshold, used to detect edges with significant depth changes. + /// Areas where the depth variation exceeds this threshold will be marked as edges. + pub depth_threshold: f32, + /// Normal threshold, used to detect edges with significant normal direction changes. + /// Areas where the normal direction variation exceeds this threshold will be marked as edges. + pub normal_threshold: f32, + /// Color threshold, used to detect edges with significant color changes. + /// Areas where the color variation exceeds this threshold will be marked as edges. + pub color_threshold: f32, + + /// Thickness of the edges detected based on depth variations. + /// This value controls the width of the edges drawn when depth-based edge detection is enabled. + /// Higher values result in thicker edges. + pub depth_thickness: f32, + /// Thickness of the edges detected based on normal direction variations. + /// This value controls the width of the edges drawn when normal-based edge detection is enabled. + /// Higher values result in thicker edges. + pub normal_thickness: f32, + /// Thickness of the edges detected based on color variations. + /// This value controls the width of the edges drawn when color-based edge detection is enabled. + /// Higher values result in thicker edges. + pub color_thickness: f32, + + /// Steep angle threshold, used to adjust the depth threshold when viewing surfaces at steep angles. + /// When the angle between the view direction and the surface normal is very steep, the depth gradient + /// can appear artificially large, causing non-edge regions to be mistakenly detected as edges. + /// This threshold defines the angle at which the depth threshold adjustment begins to take effect. + /// + /// Range: [0.0, 1.0] + pub steep_angle_threshold: f32, + /// Multiplier applied to the depth threshold when the view angle is steep. + /// When the angle between the view direction and the surface normal exceeds the `steep_angle_threshold`, + /// the depth threshold is scaled by this multiplier to reduce the likelihood of false edge detection. + /// + /// A value of 1.0 means no adjustment, while values greater than 1.0 increase the depth threshold, + /// making edge detection less sensitive in steep angles. + /// + /// Range: [0.0, inf) + pub steep_angle_multiplier: f32, + + /// Frequency of UV distortion applied to the edge detection process. + /// This controls how often the distortion effect repeats across the UV coordinates. + /// Higher values result in more frequent distortion patterns. + pub uv_distortion_frequency: Vec2, + + /// Strength of UV distortion applied to the edge detection process. + /// This controls the intensity of the distortion effect. + /// Higher values result in more pronounced distortion. + pub uv_distortion_strength: Vec2, + + /// Edge color, used to draw the detected edges. + /// Typically a high-contrast color (e.g., red or black) to visually highlight the edges. + pub edge_color: Color, + + /// Whether to enable depth-based edge detection. + /// If `true`, edges will be detected based on depth variations. + pub enable_depth: bool, + /// Whether to enable normal-based edge detection. + /// If `true`, edges will be detected based on normal direction variations. + pub enable_normal: bool, + /// Whether to enable color-based edge detection. + /// If `true`, edges will be detected based on color variations. + pub enable_color: bool, + /// Pixel block size. + pub block_pixel: u32, +} + +impl Default for EdgeDetection { + fn default() -> Self { + Self { + depth_threshold: 1.0, + normal_threshold: 0.8, + color_threshold: 0.1, + + depth_thickness: 1.0, + normal_thickness: 1.0, + color_thickness: 1.0, + + steep_angle_threshold: 0.00, + steep_angle_multiplier: 0.30, + + uv_distortion_frequency: Vec2::splat(0.0), + uv_distortion_strength: Vec2::splat(0.004), + + edge_color: Color::BLACK, + + enable_depth: true, + enable_normal: true, + enable_color: false, + + block_pixel: 1, + } + } +} + +#[derive(Component, Clone, Copy, ShaderType, ExtractComponent)] +pub struct EdgeDetectionUniform { + pub depth_threshold: f32, + pub normal_threshold: f32, + pub color_threshold: f32, + + pub depth_thickness: f32, + pub normal_thickness: f32, + pub color_thickness: f32, + + pub steep_angle_threshold: f32, + pub steep_angle_multiplier: f32, + + pub uv_distortion: Vec4, + + pub edge_color: LinearRgba, + + pub block_pixel: u32, +} + +impl From<&EdgeDetection> for EdgeDetectionUniform { + fn from(ed: &EdgeDetection) -> Self { + Self { + depth_threshold: ed.depth_threshold, + normal_threshold: ed.normal_threshold, + color_threshold: ed.color_threshold, + + depth_thickness: ed.depth_thickness, + normal_thickness: ed.normal_thickness, + color_thickness: ed.color_thickness, + + steep_angle_threshold: ed.steep_angle_threshold, + steep_angle_multiplier: ed.steep_angle_multiplier, + + uv_distortion: Vec4::new( + ed.uv_distortion_frequency.x, + ed.uv_distortion_frequency.y, + ed.uv_distortion_strength.x, + ed.uv_distortion_strength.y, + ), + + edge_color: ed.edge_color.into(), + + block_pixel: ed.block_pixel, + } + } +} + +impl EdgeDetectionUniform { + pub fn extract_edge_detection_settings( + mut commands: Commands, + mut query: Extract>, + ) { + if !DEPTH_TEXTURE_SAMPLING_SUPPORTED { + info_once!( + "Disable edge detection on this platform because depth textures aren't supported correctly" + ); + return; + } + + for (entity, edge_detection) in query.iter_mut() { + let mut entity_commands = commands + .get_entity(entity) + .expect("Edge Detection entity wasn't synced."); + + entity_commands.insert((*edge_detection, EdgeDetectionUniform::from(edge_detection))); + } + } +} + +#[derive(Debug, Hash, PartialEq, Eq, Clone, RenderLabel)] +pub struct EdgeDetectionLabel; + +// ────────────────────────────────────────────── +// Render graph nodes +// ────────────────────────────────────────────── + +#[derive(Default)] +pub struct EdgeDetectionNode; + +impl ViewNode for EdgeDetectionNode { + type ViewQuery = ( + &'static ViewTarget, + &'static ViewPrepassTextures, + &'static ViewUniformOffset, + &'static DynamicUniformIndex, + &'static EdgeDetectionPipelineId, + ); + + fn run( + &self, + _graph: &mut RenderGraphContext, + render_context: &mut RenderContext, + ( + view_target, + prepass_textures, + view_uniform_index, + ed_uniform_index, + edge_detection_pipeline_id, + ): QueryItem, + world: &World, + ) -> Result<(), NodeRunError> { + let edge_detection_pipeline = world.resource::(); + + let Some(pipeline) = world + .resource::() + .get_render_pipeline(edge_detection_pipeline_id.0) + else { + return Ok(()); + }; + + let (Some(depth_texture), Some(normal_texture)) = + (&prepass_textures.depth, &prepass_textures.normal) + else { + info!("depth or normal texture not found"); + return Ok(()); + }; + + let Some(noise_texture) = world + .resource::>() + .get(&edge_detection_pipeline.noise_texture) + else { + return Ok(()); + }; + + let Some(view_uniforms_binding) = world.resource::().uniforms.binding() + else { + info!("view uniforms not found"); + return Ok(()); + }; + + let Some(ed_uniform_binding) = world + .resource::>() + .uniforms() + .binding() + else { + info!("edge detection uniform not found"); + return Ok(()); + }; + + // This will start a new "post process write", obtaining two texture + // views from the view target - a `source` and a `destination`. + // `source` is the "current" main texture and you _must_ write into + // `destination` because calling `post_process_write()` on the + // [`ViewTarget`] will internally flip the [`ViewTarget`]'s main + // texture to the `destination` texture. Failing to do so will cause + // the current main texture information to be lost. + let post_process = view_target.post_process_write(); + + // The bind_group gets created each frame. + // + // Normally, you would create a bind_group in the Queue set, + // but this doesn't work with the post_process_write(). + // The reason it doesn't work is because each post_process_write will alternate the source/destination. + // The only way to have the correct source/destination for the bind_group + // is to make sure you get it during the node execution. + // let multisampled = *msaa != Msaa::Off; + let bind_group = render_context.render_device().create_bind_group( + "edge_detection_bind_group", + &bevy::render::render_resource::BindGroupLayout::from( + pipeline.get_bind_group_layout(0), + ), + // edge_detection_pipeline.bind_group_layout(multisampled), + // It's important for this to match the BindGroupLayout defined in the PostProcessPipeline + &BindGroupEntries::sequential(( + // Make sure to use the source view + post_process.source, + // Use depth prepass + &depth_texture.texture.default_view, + // Use normal prepass + &normal_texture.texture.default_view, + // Use simple texture sampler + &edge_detection_pipeline.linear_sampler, + // nonfiltering sampler for depth + &edge_detection_pipeline.nonfiltering_sampler, + // Use noise texture + &noise_texture.texture_view, + // Use noise texture sampler + &edge_detection_pipeline.noise_sampler, + // view uniform binding + view_uniforms_binding, + // Set the uniform binding + ed_uniform_binding, + )), + ); + + let mut render_pass = render_context.begin_tracked_render_pass(RenderPassDescriptor { + label: Some("edge_detection_pass"), + color_attachments: &[Some(RenderPassColorAttachment { + view: post_process.destination, + depth_slice: None, + resolve_target: None, + ops: Operations::default(), + })], + depth_stencil_attachment: None, + timestamp_writes: None, + occlusion_query_set: None, + }); + + render_pass.set_render_pipeline(pipeline); + render_pass.set_bind_group( + 0, + &bind_group, + &[view_uniform_index.offset, ed_uniform_index.index()], + ); + render_pass.draw(0..3, 0..1); + + Ok(()) + } +} diff --git a/mini-game/src/edge_detection/perlin_noise.png b/mini-game/src/edge_detection/perlin_noise.png new file mode 100644 index 0000000000000000000000000000000000000000..436b23ef4557a1b9bf05426f2df86ddbcf4ce8dd GIT binary patch literal 158069 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 sRY%{>, - materials: ResMut>, mut images: ResMut>, mut export_sources: ResMut>, ) { - shared::spawn_3d_scene(commands.reborrow(), meshes, materials); - - let mut image = Image::new_target_texture( - 160, - 43, - TextureFormat::Rgba8Unorm, - Some(TextureFormat::Rgba8UnormSrgb), - ); - - image.texture_descriptor.usage = TextureUsages::TEXTURE_BINDING - | TextureUsages::COPY_SRC - | TextureUsages::COPY_DST - | TextureUsages::RENDER_ATTACHMENT; - - let image_handle = images.add(image); - - commands.spawn(( + let mut camera_commands = commands.spawn(( Camera3d::default(), Camera::default(), - RenderTarget::Image(image_handle.clone().into()), Transform::from_xyz(0.0, 1.0, 2.5).looking_at(Vec3::ZERO, Vec3::Y), UiAntiAlias::Off, + bevy::core_pipeline::prepass::DepthPrepass, + bevy::core_pipeline::prepass::NormalPrepass, + edge_detection::EdgeDetection { + depth_thickness: 0.5, + normal_thickness: 0.5, + color_thickness: 0.5, + ..default() + }, PostProcessSettings { scale: 1.0 }, )); - commands.spawn((ImageExport(export_sources.add(image_handle)),)); + if USE_G13 { + let mut image = Image::new_target_texture( + 160, + 43, + TextureFormat::Rgba8Unorm, + Some(TextureFormat::Rgba8UnormSrgb), + ); + + image.texture_descriptor.usage = TextureUsages::TEXTURE_BINDING + | TextureUsages::COPY_SRC + | TextureUsages::COPY_DST + | TextureUsages::RENDER_ATTACHMENT; + + let image_handle = images.add(image); + + camera_commands.insert(RenderTarget::Image(image_handle.clone().into())); + commands.spawn(ImageExport(export_sources.add(image_handle))); + } } -fn spawn_in_ui(mut commands: Commands, assets: Res, camera: Query<(Entity, &Camera)>) { - let font: Handle = assets.load("fonts/Roboto-Bold.ttf"); +// fn spawn_ui(mut commands: Commands, assets: Res, camera: Query<(Entity, &Camera)>) { +// let font: Handle = assets.load("fonts/falconded.otf"); - let text_font = TextFont::from(font.clone()) - .with_font_size(12.) - .with_font_smoothing(bevy::text::FontSmoothing::None); +// let text_font = TextFont::from(font.clone()) +// .with_font_size(16.) +// .with_font_smoothing(bevy::text::FontSmoothing::None); - let Ok(main_camera) = camera.single() else { - return; // no camera... yet? - }; +// let Ok(main_camera) = camera.single() else { +// return; // no camera... yet? +// }; - commands.spawn(( - Node { - position_type: PositionType::Absolute, - top: Val::Px(5.0), - left: Val::Px(5.0), - ..default() - }, - Text::new("Hello World!"), - text_font.clone(), - TextColor(Color::WHITE), - UiTargetCamera(main_camera.0), - )); -} +// commands.spawn(( +// Node { +// position_type: PositionType::Absolute, +// top: Val::Px(-3.5), +// left: Val::Px(0.0), +// ..default() +// }, +// Text::new("I CAN HAZ UI?!"), +// text_font.clone(), +// TextColor(Color::WHITE), +// UiTargetCamera(main_camera.0), // <- IMPORTANT +// )); +// } fn rotate_cube( mut cubes: Query<(&mut Transform, &Spinner)>, diff --git a/mini-game/src/shared.rs b/mini-game/src/shared.rs index e73ac54..149b665 100644 --- a/mini-game/src/shared.rs +++ b/mini-game/src/shared.rs @@ -17,7 +17,7 @@ pub fn spawn_3d_scene( mut materials: ResMut>, ) { commands.spawn(( - Mesh3d(meshes.add(Cuboid::default())), + Mesh3d(meshes.add(Cylinder::default())), MeshMaterial3d(materials.add(Color::from(bevy::color::palettes::css::WHITE))), Transform::from_xyz(0.0, 0.0, 0.0), Spinner,