bevy/examples/3d
Jiří Švejda 3cf70ba4f9
Fix fog density texture offset seam (#14900)
# Objective

- There is a flaw in the implementation of `FogVolume`'s
`density_texture_offset` from #14868. Because of the way I am wrapping
the UVW coordinates in the volumetric fog shader, a seam is visible when
the 3d texture is wrapping around from one side to the other:


![density_texture_offset_seam](https://github.com/user-attachments/assets/89527ef2-5e1b-4b90-8e73-7a3e607697d4)

## Solution

- This PR fixes the issue by removing the wrapping from the shader and
instead leaving it to the user to configure the 3d noise texture to use
`ImageAddressMode::Repeat` if they want it to repeat. Using
`ImageAddressMode::Repeat` is the proper solution to avoid the obvious
seam:


![density_texture_seam_fixed](https://github.com/user-attachments/assets/06e871a6-2db1-4501-b425-4141605f9b26)

- The sampler cannot be implicitly configured to use
`ImageAddressMode::Repeat` because that's not always desirable. For
example, the `fog_volumes` example wouldn't work properly because the
texture from the edges of the volume would overflow to the other sides,
which would be bad in this instance (but it's good in the case of the
`scrolling_fog` example). So leaving it to the user to decide on their
own whether they want the density texture to repeat seems to be the best
solution.

## Testing

- The `scrolling_fog` example still looks the same, it was just changed
to explicitly declare that the density texture should be repeating when
loading the asset. The `fog_volumes` example is unaffected.
<details>
<summary>Minimal reproduction example on current main</summary>
<pre>
use bevy::core_pipeline::experimental::taa::{TemporalAntiAliasBundle,
TemporalAntiAliasPlugin};
use bevy::pbr::{FogVolume, VolumetricFogSettings, VolumetricLight};
use bevy::prelude::*;<br>
fn main() {
    App::new()
        .add_plugins((DefaultPlugins, TemporalAntiAliasPlugin))
        .add_systems(Startup, setup)
        .run();
}<br>
fn setup(mut commands: Commands, assets: Res&lt;AssetServer&gt;) {
    commands.spawn((
        Camera3dBundle {
            transform: Transform::from_xyz(3.5, -1.0, 0.4)
                .looking_at(Vec3::new(0.0, 0.0, 0.4), Vec3::Y),
            msaa: Msaa::Off,
            ..default()
        },
        TemporalAntiAliasBundle::default(),
        VolumetricFogSettings {
            ambient_intensity: 0.0,
            jitter: 0.5,
            ..default()
        },
    ));<br>
    commands.spawn((
        DirectionalLightBundle {
            transform: Transform::from_xyz(-6.0, 5.0, -9.0)
                .looking_at(Vec3::new(0.0, 0.0, 0.0), Vec3::Y),
            directional_light: DirectionalLight {
                illuminance: 32_000.0,
                shadows_enabled: true,
                ..default()
            },
            ..default()
        },
        VolumetricLight,
    ));<br>
    commands.spawn((
        SpatialBundle {
            visibility: Visibility::Visible,
transform: Transform::from_xyz(0.0, 0.0,
0.0).with_scale(Vec3::splat(3.0)),
            ..default()
        },
        FogVolume {
density_texture: Some(assets.load("volumes/fog_noise.ktx2")),
            density_texture_offset: Vec3::new(0.0, 0.0, 0.4),
            scattering: 1.0,
            ..default()
        },
    ));
}
</pre>
</details>
2024-08-24 00:56:39 +00:00
..
3d_scene.rs Swapping back to using From<Color> for StandardMaterial in examples (#13566) 2024-05-29 13:50:28 +00:00
3d_shapes.rs Disabled usage of the POLYGON_MODE_LINE gpu feature in the examples (#14402) 2024-07-29 23:40:39 +00:00
3d_viewport_to_world.rs Swapping back to using From<Color> for StandardMaterial in examples (#13566) 2024-05-29 13:50:28 +00:00
animated_material.rs Add support for environment map transformation (#14290) 2024-07-19 15:00:50 +00:00
anisotropy.rs Add support for environment map transformation (#14290) 2024-07-19 15:00:50 +00:00
anti_aliasing.rs Move Msaa to component (#14273) 2024-07-22 18:28:23 +00:00
atmospheric_fog.rs glTF labels: add enum to avoid misspelling and keep up-to-date list documented (#13586) 2024-05-31 23:25:57 +00:00
auto_exposure.rs Apply unused_qualifications lint (#14828) 2024-08-21 12:29:33 +00:00
blend_modes.rs Fix common capitalization errors in documentation (#14562) 2024-07-31 21:16:05 +00:00
bloom_3d.rs Updates default Text font size to 24px (#13603) 2024-05-31 16:41:27 +00:00
clearcoat.rs Add support for environment map transformation (#14290) 2024-07-19 15:00:50 +00:00
color_grading.rs Add support for environment map transformation (#14290) 2024-07-19 15:00:50 +00:00
deferred_rendering.rs Move Msaa to component (#14273) 2024-07-22 18:28:23 +00:00
depth_of_field.rs glTF labels: add enum to avoid misspelling and keep up-to-date list documented (#13586) 2024-05-31 23:25:57 +00:00
fog_volumes.rs Allow volumetric fog to be localized to specific, optionally voxelized, regions. (#14099) 2024-07-16 03:14:12 +00:00
fog.rs Updates default Text font size to 24px (#13603) 2024-05-31 16:41:27 +00:00
generate_custom_mesh.rs Fix a few "repeated word" typos (#13955) 2024-06-20 21:35:20 +00:00
irradiance_volumes.rs Add support for environment map transformation (#14290) 2024-07-19 15:00:50 +00:00
lighting.rs Updates default Text font size to 24px (#13603) 2024-05-31 16:41:27 +00:00
lightmaps.rs glTF labels: add enum to avoid misspelling and keep up-to-date list documented (#13586) 2024-05-31 23:25:57 +00:00
lines.rs Highlight dependency on shader files in examples (#13824) 2024-06-12 14:16:01 +00:00
load_gltf_extras.rs update gltf example to use type-safe GltfAssetLabel::Scene (#14218) 2024-07-14 15:42:32 +00:00
load_gltf.rs Add support for environment map transformation (#14290) 2024-07-19 15:00:50 +00:00
meshlet.rs fix meshlet example (#14471) 2024-07-25 15:22:11 +00:00
motion_blur.rs Updates default Text font size to 24px (#13603) 2024-05-31 16:41:27 +00:00
orthographic.rs Migrate from LegacyColor to bevy_color::Color (#12163) 2024-02-29 19:35:12 +00:00
parallax_mapping.rs Updates default Text font size to 24px (#13603) 2024-05-31 16:41:27 +00:00
parenting.rs Migrate from LegacyColor to bevy_color::Color (#12163) 2024-02-29 19:35:12 +00:00
pbr.rs Add support for environment map transformation (#14290) 2024-07-19 15:00:50 +00:00
post_processing.rs Add support for environment map transformation (#14290) 2024-07-19 15:00:50 +00:00
reflection_probes.rs Add support for environment map transformation (#14290) 2024-07-19 15:00:50 +00:00
render_to_texture.rs example render_to_texture: remove extra light (#13398) 2024-05-16 23:26:55 +00:00
rotate_environment_map.rs Add support for environment map transformation (#14290) 2024-07-19 15:00:50 +00:00
scrolling_fog.rs Fix fog density texture offset seam (#14900) 2024-08-24 00:56:39 +00:00
shadow_biases.rs Updates default Text font size to 24px (#13603) 2024-05-31 16:41:27 +00:00
shadow_caster_receiver.rs Remove redundant imports (#12817) 2024-04-01 19:59:08 +00:00
skybox.rs Add support for environment map transformation (#14290) 2024-07-19 15:00:50 +00:00
spherical_area_lights.rs Migrate from LegacyColor to bevy_color::Color (#12163) 2024-02-29 19:35:12 +00:00
split_screen.rs Fix num_cascades in split_screen exmample for WebGL (#14601) 2024-08-04 13:57:22 +00:00
spotlight.rs Updates default Text font size to 24px (#13603) 2024-05-31 16:41:27 +00:00
ssao.rs fix examples after the switch for msaa to a component (#14446) 2024-07-24 01:22:00 +00:00
ssr.rs Move Msaa to component (#14273) 2024-07-22 18:28:23 +00:00
texture.rs Migrate from LegacyColor to bevy_color::Color (#12163) 2024-02-29 19:35:12 +00:00
tonemapping.rs Add support for environment map transformation (#14290) 2024-07-19 15:00:50 +00:00
transmission.rs Move Msaa to component (#14273) 2024-07-22 18:28:23 +00:00
transparency_3d.rs fix examples after the switch for msaa to a component (#14446) 2024-07-24 01:22:00 +00:00
two_passes.rs Migrate from LegacyColor to bevy_color::Color (#12163) 2024-02-29 19:35:12 +00:00
update_gltf_scene.rs Add support for environment map transformation (#14290) 2024-07-19 15:00:50 +00:00
vertex_colors.rs Migrate from LegacyColor to bevy_color::Color (#12163) 2024-02-29 19:35:12 +00:00
visibility_range.rs Add support for environment map transformation (#14290) 2024-07-19 15:00:50 +00:00
volumetric_fog.rs Add support for environment map transformation (#14290) 2024-07-19 15:00:50 +00:00
wireframe.rs Updates default Text font size to 24px (#13603) 2024-05-31 16:41:27 +00:00