Войти
ПрограммированиеФорумГрафика

2D RayTracing существует в реалтайме в 2019?

Страницы: 1 2 3 4 5 6 Следующая »
#0
(Правка: 20:27) 20:14, 7 ноя. 2019

Всем привет!

Предыстория: на днях копался в Godot с 2D освещением, и появилась возможно глупая, но интересная задумка сделать освещение более реалистичным.
Под "реалистичностью" я понимаю генерацию света на игровой сцене с помощью прямых лучей от источника света + хотя бы одно-два отражения от препятствий. В РЕАЛТАЙМЕ. Хотя бы просто отражённый свет, преломления и прозрачные поверхности мне не нужны!
Все стандартные имплементированные во многих движках типы освещения весьма банальны - они не дают отражённого от препятствий света.

Поясняю что именно нужно в картинках:

+ Показать


Вопрос в том, как этого правильного освещения добиться ещё и в реалтайме?
1) Самый банальный вариант (как я и сделал) - использовать много рейкастов, но естественно это достаточно медленный способ. В той же Юнити 10 тысяч рейкастов - потолок, этого количества недостаточно чтобы мягко закрасить картинку - маловато линий, вот как это выглядит:

+ Показать


2) Пытался найти варианты в интернетах, находил 2D GlobalIllumination, например: shadertoy - но это не совсем то, тут просто мягкие тени, но отражённого от стен света нет + производительность ужасная, 5-6 объектов загружают GPU на 100%

Я конечно понимаю, возможно это не совсем нужная фишка, но всё же.
На дворе почти 2020 год, Nvidia во всю пропихивает свои RTX для трассировки лучей в 3Д, а в 2Д до сих пор ничего подобного нет? Хотя ясное дело, что в 2Д пространстве бросать лучей нужно куда меньше чем в 2Д, следовательно есть все возможности сделать реалтайм ТРУ 2Д освещение - неужели никто умный ещё такого не делал?


#1
20:28, 7 ноя. 2019

реалтаймовый честный RT не доступен ни для 3D ни для 2D.

#2
20:41, 7 ноя. 2019

Как я писал выше, супер-ЧЕСТНЫЙ рейтрейсинг я не беру в расчёт.
И вообще насколько честным можно считать алгоритм, где 1 прямой луч, ударяясь об препятствие отскакивает один раз в рандомном направлении (+/-180 градусов к нормали в точке падения) с прозрачностью = 1/2 от прозрачности прямого луча?


Ещё наиболее реалистичный вариант находил вот такой:
Realtime 2D Radiosity
Но там ссылка на блог автора протухла. Кто-нибудь знает как подобное реализуется?

#3
21:06, 7 ноя. 2019

Prescott
> В той же Юнити 10 тысяч рейкастов - потолок, этого количества недостаточно
> чтобы мягко закрасить картинку - маловато линий, вот как это выглядит:
Рейкасты надо делать в шейдере. Тогда несколько миллионов рейкастов будут вполне себе жить.
В целом не вижу проблем построить правильный GI для 2Д сцены. Для 2Д мира и кастов нужно гораздо меньше, и геометрия намного проще, и поиск пересечения в разы дешевле.

#4
21:09, 7 ноя. 2019

MrShoor
> > В той же Юнити 10 тысяч рейкастов - потолок, этого количества недостаточно
> > чтобы мягко закрасить картинку - маловато линий, вот как это выглядит:
> Рейкасты надо делать в шейдере.

а где в юнити делаются рейкасты? расскажи

#5
21:11, 7 ноя. 2019

Prescott
> Realtime 2D Radiosity
> Но там ссылка на блог автора протухла. Кто-нибудь знает как подобное
> реализуется?

метод Radiosity подходит только для расчета диффузных межотражений света между поверхностями (что, кстати, не под силу методу трассировки лучей) и не позволяет передать зеркальные отражения и элементы прозрачности.

#6
(Правка: 21:16) 21:14, 7 ноя. 2019

Prescott
> Хотя бы просто отражённый свет, преломления и прозрачные поверхности мне не нужны!
gamedevfor
> метод Radiosity не позволяет передать зеркальные отражения и элементы прозрачности.

Я бы глянул на зеркало в 2d topdown

#7
21:19, 7 ноя. 2019
innuendo
> а где в юнити делаются рейкасты? расскажи
В гугле забанили? Бедненький.
#8
21:21, 7 ноя. 2019

MrShoor
> В гугле забанили? Бедненький.

не забанили - как раз сейчас работаю с Unity и RadeonPro

ну так ты расскажешь или слился ?

#9
21:21, 7 ноя. 2019

maks242
> Я бы глянул на зеркало в 2d topdown

Зеркало превращается в еще один источник света.

#10
21:28, 7 ноя. 2019

MrShoor
> Рейкасты надо делать в шейдере. Тогда несколько миллионов рейкастов будут
> вполне себе жить.

innuendo
> а где в юнити делаются рейкасты? расскажи

Если я правильно понял, MrShoor имеет ввиду ComputeShader.

#11
(Правка: 21:34) 21:31, 7 ноя. 2019

Prescott
я использовал 2d_GI шейдер в Годот

+ Показать

он не в реалтайме, и очень медленный

в реалтайме такое можно только на RTX(в вулкане), и то  будет 20-30фпс максимум

мой используемый шейдер работает по этой логике https://github.com/miloyip/light2d
онже на шадертое https://www.shadertoy.com/view/lldcDf

#12
21:31, 7 ноя. 2019
innuendo
> ну так ты расскажешь или слился ?
Зачем, чтобы форум засирать? По юнити много справки от самих Unity. Если тебя в гугле не забанили, то сможешь найти. Удачи.
#13
21:32, 7 ноя. 2019

Prescott

поставь в настройках Lightmapper Progresive GPU

#14
21:34, 7 ноя. 2019
MrShoor
> Зачем, чтобы форум засирать? По юнити много справки от самих Unity. Если тебя в
> гугле не забанили, то сможешь найти. Удачи.

А ты и так засираешь - если тебя в гугле не банили и читать доки можешь, то должно дойти.
Неудачи тебе

Страницы: 1 2 3 4 5 6 Следующая »
ПрограммированиеФорумГрафика