Эксперимент с шейдером для тумана

Небольшой эксперимент с 🥔 шейдером тумана. Было бы здорово сделать так, чтобы свет реалистично распространялся в зависимости от плотности тумана, здесь же пока просто смешивание. Может кто нибудь знает хорошую базу по этой теме?

Основной проблемой было оценить высоту мира пикселей, не имея ее в g буфере (поскольку atlas sprite в Bevy пока не поддерживает шейдеры, я не уверен, что это хороший способ передать информацию о высоте пикселя). Пришлось изобретать небольшой хак – делать несколько семплов вниз от текущего пикселя с отступами 8, 16, 32… из текстуры слоя объектов которые над землей. Если мы попали в непрозрачный пиксель значит текущий пиксель скорее всего не очень высоко над землей. Это позволяет сделать дешевый эффект "огибания"

14
9 комментариев