bevy/assets/shaders
Charles 8073362039 add globals to mesh view bind group (#5409)
# Objective

- It's often really useful to have access to the time when writing shaders.

## Solution

- Add a UnifformBuffer in the mesh view bind group
- This buffer contains the time, delta time and a wrapping frame count

https://user-images.githubusercontent.com/8348954/180130314-97948c2a-2d11-423d-a9c4-fb5c9d1892c7.mp4

---

## Changelog

- Added a `GlobalsUniform` at position 9 of the mesh view bind group

## Notes

The implementation is currently split between bevy_render and bevy_pbr because I was basing my implementation on the `ViewPlugin`. I'm not sure if that's the right way to structure it.

I named this `globals` instead of just time because we could potentially add more things to it.

## References in other engines

- Godot: <https://docs.godotengine.org/en/stable/tutorials/shaders/shader_reference/canvas_item_shader.html#global-built-ins>
    - Global time since startup, in seconds, by default resets to 0 after 3600 seconds
    - Doesn't seem to have anything else
- Unreal: <https://docs.unrealengine.com/4.26/en-US/RenderingAndGraphics/Materials/ExpressionReference/Constant/>
    - Generic time value that updates every frame. Can be paused or scaled.
    - Frame count node, doesn't seem to be an equivalent for shaders: <https://docs.unrealengine.com/4.26/en-US/BlueprintAPI/Utilities/GetFrameCount/>
- Unity: <https://docs.unity3d.com/Manual/SL-UnityShaderVariables.html>
    - time since startup in seconds. No mention of time wrapping. Stored as a `vec4(t/20, t, t*2, t*3)` where `t` is the value in seconds
    - Also has delta time, sin time and cos time
- ShaderToy: <https://www.shadertoy.com/howto>
    - iTime is the time since startup in seconds.
    - iFrameRate
    - iTimeDelta
    - iFrame frame counter

Co-authored-by: Charles <IceSentry@users.noreply.github.com>
2022-09-28 04:20:27 +00:00
..
animate_shader.wgsl add globals to mesh view bind group (#5409) 2022-09-28 04:20:27 +00:00
array_texture.wgsl update wgpu to 0.13 (#5168) 2022-07-14 21:17:16 +00:00
cubemap_unlit.wgsl Support array / cubemap / cubemap array textures in KTX2 (#5325) 2022-07-30 07:02:58 +00:00
custom_material.frag Update shader_material_glsl example to include texture sampling (#5215) 2022-07-08 01:14:22 +00:00
custom_material.vert Update shader_material_glsl example to include texture sampling (#5215) 2022-07-08 01:14:22 +00:00
custom_material.wgsl update wgpu to 0.13 (#5168) 2022-07-14 21:17:16 +00:00
custom_material_chromatic_aberration.wgsl adjust cluster index for viewport origin (#5947) 2022-09-15 21:58:14 +00:00
custom_material_screenspace_texture.wgsl adjust cluster index for viewport origin (#5947) 2022-09-15 21:58:14 +00:00
custom_vertex_attribute.wgsl update wgpu to 0.13 (#5168) 2022-07-14 21:17:16 +00:00
game_of_life.wgsl Remove unused code in game of life shader (#5349) 2022-07-17 15:24:24 +00:00
instancing.wgsl update wgpu to 0.13 (#5168) 2022-07-14 21:17:16 +00:00
line_material.wgsl Fix line material shader (#5348) 2022-07-17 15:02:57 +00:00
shader_defs.wgsl update wgpu to 0.13 (#5168) 2022-07-14 21:17:16 +00:00