An open API service indexing awesome lists of open source software.

https://github.com/bauxitedev/godot-particle-dof

Bokeh-esque particle depth of field in Godot 3.0
https://github.com/bauxitedev/godot-particle-dof

bokeh godot-engine graphics-programming shader

Last synced: 12 months ago
JSON representation

Bokeh-esque particle depth of field in Godot 3.0

Awesome Lists containing this project

README

          

# Godot Particle DoF

This is a shader for particles to create a bokeh-esque depth of field effect. It works by essentially "precomputing" the various amounts of blur, instead of blurring in real time. Since the particles are radial, we can store only a single row of pixels per blur level, and the shader will distort the UV coordinates to turn it into a circle. This gives us a very compact 512x1024 texture that stores 1024 different blur levels, which can be smoothly interpolated.

This has the following advantages:

- Really really fast blur. The GPU only has to look up the texture in a lookup table. No nested for loops with expensive convolution here. Only issue here is that there's a fairly large amount of overdraw.
- Allows extremely large blur sizes (e.g. can blur a particle so much that it covers the entire screen without lagging).
- No artifacts because of low sample count, looks very close to the "ground truth".

But has some disadvantages as well:

- Only works for radial particles, that is, disks and toruses and such, facing towards the camera.
- All particles must have the same size, or the effect breaks down.

It looks like this:

![Bokeh](example/img.png)

[Here's a video of it in action.](https://www.youtube.com/watch?v=7FDlCm7AiLw)

License
----

MIT