bevy/crates
JMS55 dd4299bcf9 EnvironmentMapLight, BRDF Improvements (#7051)
(Before)
![image](https://user-images.githubusercontent.com/47158642/213946111-15ec758f-1f1d-443c-b196-1fdcd4ae49da.png)
(After)
![image](https://user-images.githubusercontent.com/47158642/217051179-67381e73-dd44-461b-a2c7-87b0440ef8de.png)
![image](https://user-images.githubusercontent.com/47158642/212492404-524e4ad3-7837-4ed4-8b20-2abc276aa8e8.png)

# Objective
- Improve lighting; especially reflections.
- Closes https://github.com/bevyengine/bevy/issues/4581.

## Solution
- Implement environment maps, providing better ambient light.
- Add microfacet multibounce approximation for specular highlights from Filament.
- Occlusion is no longer incorrectly applied to direct lighting. It now only applies to diffuse indirect light. Unsure if it's also supposed to apply to specular indirect light - the glTF specification just says "indirect light". In the case of ambient occlusion, for instance, that's usually only calculated as diffuse though. For now, I'm choosing to apply this just to indirect diffuse light, and not specular.
- Modified the PBR example to use an environment map, and have labels.
- Added `FallbackImageCubemap`.

## Implementation
- IBL technique references can be found in environment_map.wgsl.
- It's more accurate to use a LUT for the scale/bias. Filament has a good reference on generating this LUT. For now, I just used an analytic approximation.
 - For now, environment maps must first be prefiltered outside of bevy using a 3rd party tool. See the `EnvironmentMap` documentation.
- Eventually, we should have our own prefiltering code, so that we can have dynamically changing environment maps, as well as let users drop in an HDR image and use asset preprocessing to create the needed textures using only bevy. 

---

## Changelog
- Added an `EnvironmentMapLight` camera component that adds additional ambient light to a scene.
- StandardMaterials will now appear brighter and more saturated at high roughness, due to internal material changes. This is more physically correct.
- Fixed StandardMaterial occlusion being incorrectly applied to direct lighting.
- Added `FallbackImageCubemap`.

Co-authored-by: IceSentry <c.giguere42@gmail.com>
Co-authored-by: James Liu <contact@jamessliu.com>
Co-authored-by: Rob Parrett <robparrett@gmail.com>
2023-02-09 16:46:32 +00:00
..
bevy_animation Base Sets (#7466) 2023-02-06 03:10:08 +00:00
bevy_app Fixed minor link error in docs (#7572) 2023-02-08 20:26:11 +00:00
bevy_asset Fix crash with debug_asset_server due to base set changes (#7538) 2023-02-07 14:18:15 +00:00
bevy_audio IOS, Android... same thing (#7493) 2023-02-06 18:08:49 +00:00
bevy_core Base Sets (#7466) 2023-02-06 03:10:08 +00:00
bevy_core_pipeline bevy_core_pipeline: Fix prepass sort orders (#7539) 2023-02-07 11:31:35 +00:00
bevy_derive update winit to 0.28 (#7480) 2023-02-03 16:41:39 +00:00
bevy_diagnostic Rename schedule v3 to schedule (#7519) 2023-02-06 18:44:40 +00:00
bevy_dylib Rename dynamic feature (#7340) 2023-01-23 14:28:00 +00:00
bevy_dynamic_plugin Adapt path type of dynamically_load_plugin (#6734) 2022-12-05 23:39:43 +00:00
bevy_ecs Rename Tick::is_older_than to Tick::is_newer_than (#7561) 2023-02-09 16:21:22 +00:00
bevy_ecs_compile_fail_tests Fix clippy lints and failed test with Rust 1.66 (#6945) 2022-12-15 18:05:15 +00:00
bevy_encase_derive add helper for macro to get either bevy::x or bevy_x depending on how it was imported (#7164) 2023-01-11 21:12:02 +00:00
bevy_gilrs Base Sets (#7466) 2023-02-06 03:10:08 +00:00
bevy_gltf Improve OrthographicCamera consistency and usability (#6201) 2023-02-08 21:34:33 +00:00
bevy_hierarchy Base Sets (#7466) 2023-02-06 03:10:08 +00:00
bevy_input Rename schedule v3 to schedule (#7519) 2023-02-06 18:44:40 +00:00
bevy_internal IOS, Android... same thing (#7493) 2023-02-06 18:08:49 +00:00
bevy_log Fix suppression of all console logs when trace_tracy is enabled (#6955) 2022-12-20 23:45:43 +00:00
bevy_macro_utils Base Sets (#7466) 2023-02-06 03:10:08 +00:00
bevy_math Improve code/comments for Ray::intersect_plane and its tests (#6823) 2022-12-05 22:49:06 +00:00
bevy_mikktspace Release 0.9.0 (#6568) 2022-11-12 20:01:29 +00:00
bevy_pbr EnvironmentMapLight, BRDF Improvements (#7051) 2023-02-09 16:46:32 +00:00
bevy_ptr Fix minor typos in code and docs (#7378) 2023-01-27 12:12:53 +00:00
bevy_reflect bevy_reflect: Support tuple reflection paths (#7324) 2023-02-06 21:22:45 +00:00
bevy_reflect_compile_fail_tests Enable deriving Reflect on structs with generic types (#7364) 2023-01-28 00:12:06 +00:00
bevy_render EnvironmentMapLight, BRDF Improvements (#7051) 2023-02-09 16:46:32 +00:00
bevy_scene Base Sets (#7466) 2023-02-06 03:10:08 +00:00
bevy_sprite Migrate engine to Schedule v3 (#7267) 2023-02-06 02:04:50 +00:00
bevy_tasks Migrate engine to Schedule v3 (#7267) 2023-02-06 02:04:50 +00:00
bevy_text Fix Window feedback loop between the OS and Bevy (#7517) 2023-02-07 14:18:13 +00:00
bevy_time Rename schedule v3 to schedule (#7519) 2023-02-06 18:44:40 +00:00
bevy_transform Base Sets (#7466) 2023-02-06 03:10:08 +00:00
bevy_ui Fix Window feedback loop between the OS and Bevy (#7517) 2023-02-07 14:18:13 +00:00
bevy_utils Migrate engine to Schedule v3 (#7267) 2023-02-06 02:04:50 +00:00
bevy_window Fix Window feedback loop between the OS and Bevy (#7517) 2023-02-07 14:18:13 +00:00
bevy_winit Fix Window feedback loop between the OS and Bevy (#7517) 2023-02-07 14:18:13 +00:00