Всем привет. Как это корректно реализовать? Есть данные с каскадами теней от источников света. Для направленного света вроде все просто и работает, но подход для точечных источников света (учитывая spotlight) не будет работать, самому изобретать лень. Делал кто-нибудь?
Для направленного делаю так:
Но тут простая логика, вдоль направления со смещением проверяем. Вопрос заключается в том, что я не знаю как реймарчить для PointLight и SpotLight. Брать данные от конкретных точечных источников света из их теневых каскадов тоже в курсе, сам смысл как для них "шагать" нужен.
Target
Делаешь лучи по объёму ?
innuendo
Делаю как постэффект без учета Post Processing Volume, т.е. он глобальный, без учета объемов, а если быть точнее это вообще RendererFeature
Target
Ты, этот код не сам писал ?
innuendo
Сам, на своей клавиатуре. Собственно вопрос то не в этом заключался, а в том как по сфере и конусу реймарчить. В целом если помощи не будет - то ладно, со временем сам разберусь, все равно pet проект для образовательных целей.
Target
Узнай как параметрически задать конус сферу и как-то так дальше
Target
> а в том как по сфере и конусу реймарчить.
Я не понял причем тут сфера/конус если честно. Ну т.е. если у тебя есть шедоумапа - то поидее какая разница что там, должна быть матрица проекции/вида из источника, с помощью неё переводишь в текстурые координаты и проверяешь в тени или нет пиксель.
MrShoor
Для DirectionalLight это просто и понятно, а когда у тебя точечный - тут уже по шести сторонам идет просчет теней, если конкретно говорить про Unity - выбирается конкретная сторона, у меня же реймарчинг заточен под то, чтобы проходится вдоль направления солнца и это вполне просто и понятно, а когда у тебя не направление а сфера или SpotLight - тут уже не так просто, тут надо уже проходится определенным количеством шагов от центра сферы до её краев, так и для спотлайта, т.е. нужен алгоритм который будет проходится в мировых координатах по объему формы источника света заданной формы.
Target
> нужен алгоритм который будет проходится в мировых координатах по объему формы
Всмысле алгоритм? Вычесть из координаты точки координты источника, и сделать 1 шажок вдоль полученного вектора? Я не понимаю в чем сложность.
MrShoor
А как это вдоль, если у нас не направление солнца а сферический источник?) Взять точку в мировом пространстве проблем нет никаких, у меня затуп как раз в том как шагать для объема сферы источника заданным range параметром или для того же спотлайта, где угол может меняться как угодно. Лучше псевдокодом объясни, я вот дуб-дубом если честно, не могу сам сформулировать действие для данной операции, отчего и пытаюсь узнать как такие вещи делаются
Target
Сферические координаты знаешь ?
innuendo
Допустим
А, всё, разобрался, я все изначально делал как и надо, но семплировал не корректно
Для оптимизации осталось сделать так, чтобы дальние источники не реймарчили от себя тень в тумане, ибо зачем оно, если дальность прорисовки большая и вдалеке на такое пофиг, думаю сделать плавный переход fadeIn/fadeOut для тени опираясь на дистанцию от камеры, а когда в ноль видимость выйдет - не реймарчить от такого источника тень и всё и норм будет. Кстати хотел спросить ещё по поводу объемного тумана. Некоторые делают его на основе вокселей и тени там просчитывают + рассеивание света, оно же будет жирнее в плане производительности, рассеивание и тени просчитывать в тумане можно и реймарчингом и это дешевле будет, или я не прав и все-таки воксельный туман лучше? Но ведь он будет жрать больше памяти, т.к. это же 3д текстура по сути, а на всю локацию - дохрена выйдет по памяти. Хотя тут вопрос спорный скорее-всего, смотря для какой игры
Target
> Некоторые делают его на основе вокселей и тени там просчитывают + рассеивание
> света, оно же будет жирнее в плане производительности, рассеивание и тени
> просчитывать в тумане можно и реймарчингом и это дешевле будет
спорно, воксельная сетка не обязательно должна быть высокого разрешения, она может быть условно для облака скажем 8х8х4 или там 16х16х8, не так сложно для такого количества вокселей предрасчитать освещение, а при рендеринге самих пикселей, извлекать из нее уже посчитанное освещение, в случае же с реймарчингом - придется рассчитывать для каждого пикселя, что будет гораздо дороже.
Тема в архиве.