Skip to content

Conversation

@aevyrie
Copy link
Member

@aevyrie aevyrie commented Jan 5, 2026

Objective

  • Implement contact shadows to add fine shadow detail where shadow cascades cannot.

Solution

  • Extend our existing pbr implementation using our existing raymarching functions.

Showcase

image image
Screen.Recording.2026-01-07.at.11.18.18.PM.mp4
Screen.Recording.2026-01-04.at.7.19.25.PM.mp4
Screen.Recording.2026-01-04.at.7.36.03.PM.mp4
image image image image image image

Copy link
Member

@tychedelia tychedelia left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would you mind adding or updating an existing example?

@aevyrie
Copy link
Member Author

aevyrie commented Jan 5, 2026

Sure, I was going to ask the crowd where it would make sense to add to an example.

@alice-i-cecile alice-i-cecile added C-Feature A new feature, making something new possible A-Rendering Drawing game state to the screen M-Release-Note Work that should be called out in the blog due to impact S-Waiting-on-Author The author needs to make changes or address concerns before this can be merged labels Jan 5, 2026
@alice-i-cecile alice-i-cecile added this to the 0.19 milestone Jan 5, 2026
@github-actions
Copy link
Contributor

github-actions bot commented Jan 5, 2026

It looks like your PR has been selected for a highlight in the next release blog post, but you didn't provide a release note.

Please review the instructions for writing release notes, then expand or revise the content in the release notes directory to showcase your changes.

@JMS55
Copy link
Contributor

JMS55 commented Jan 5, 2026

Closes #16164

@JMS55
Copy link
Contributor

JMS55 commented Jan 5, 2026

Does it make sense to do the raymarching directly in the material shader? It might give better perf to pull it out to its own pass.

Also MeshletMesh needs testing with this feature (and in the various forward/deferref/prepass modes).

@pcwalton
Copy link
Contributor

pcwalton commented Jan 5, 2026

I have an example for contact shadows that I made in my old branch: https://github.com/pcwalton/bevy/blob/contact-shadows/examples/3d/contact_shadows.rs

Feel free to steal it if you want, or not (it's rather old and would need to be updated). Up to you :)

@pcwalton
Copy link
Contributor

pcwalton commented Jan 5, 2026

@JMS55 I don't think the raymarching can really be done anywhere else, because in forward you need to know what's in shadow right then. You can't really subtract a light after the fact. (Well, maybe you technically could make it work, but that'd be a huge can of worms.)

@github-actions
Copy link
Contributor

github-actions bot commented Jan 8, 2026

The generated examples/README.md is out of sync with the example metadata in Cargo.toml or the example readme template. Please run cargo run -p build-templated-pages -- update examples to update it, and commit the file change.

@aevyrie
Copy link
Member Author

aevyrie commented Jan 8, 2026

This 07f2b89 commit adds a bunch of diffs from renaming the shadow map setting, per discord.

@IceSentry IceSentry added S-Needs-Review Needs reviewer attention (from anyone!) to move forward and removed S-Waiting-on-Author The author needs to make changes or address concerns before this can be merged labels Jan 9, 2026
Copy link
Contributor

@IceSentry IceSentry left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The blast radius of the shadow_maps_enabled was bigger than I expected.

Copy link
Contributor

@IceSentry IceSentry left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Couple of minor notes but other than that LGTM. Massive visual improvements, thank you!

@IceSentry IceSentry added the M-Migration-Guide A breaking change to Bevy's public API that needs to be noted in a migration guide label Jan 9, 2026
@github-actions
Copy link
Contributor

github-actions bot commented Jan 9, 2026

It looks like your PR is a breaking change, but you didn't provide a migration guide.

Please review the instructions for writing migration guides, then expand or revise the content in the migration guides directory to reflect your changes.

@JMS55
Copy link
Contributor

JMS55 commented Jan 9, 2026

@aevyrie can we break the shadow map renaming code out into a new PR?

@aevyrie
Copy link
Member Author

aevyrie commented Jan 9, 2026

Sure, would that add any value? shadows_enabled is a bit misleading without a rename.

@JMS55
Copy link
Contributor

JMS55 commented Jan 10, 2026

It would help for review, but also e.g. Solari has shadows, but dosen't use shadow maps, so it's already misleading as-is.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-Rendering Drawing game state to the screen C-Feature A new feature, making something new possible M-Migration-Guide A breaking change to Bevy's public API that needs to be noted in a migration guide M-Release-Note Work that should be called out in the blog due to impact S-Needs-Review Needs reviewer attention (from anyone!) to move forward

Projects

Status: No status

Development

Successfully merging this pull request may close these issues.

6 participants