Тени от конусного источника освещения?

  Вход на форум   логин       пароль   Забыли пароль? Регистрация
On-line:  

Раздел: 
Форум движка Xtreme3D / Xtreme3D: вопросы и ответы / Тени от конусного источника освещения?

Страницы: 1  новая тема

Автор Сообщение

частый гость
Группа: Участники
Сообщений: 17
Добавлено: 15-01-2018 18:13
Всем привет!
Во-первых спасибо за новую версию, был приятно удивлен, когда зашел на сайт спустя лет 5 )
Во-вторых, в документации было сказано, что шедоу мапы работают только для направленного источника освещения, но непонятно, к чему это было сказано. Вроде в примере тени есть и от точечного, но вот можно ли сделать тени от конусного источника, или надо писать свой шейдер?

Big Boss
Группа: Администраторы
Сообщений: 719
Добавлено: 16-01-2018 11:52
Там просто сам источник света точечный, но для построения теневой карты используется ортогональная проекция (то есть, вдоль определенного направления, как от направленного источника). Чтобы сделать тени от точечного или конусного, нужны кубические карты теней, но пока в Xtreme3D они не поддерживаются. Только через шейдер, без изменений в самой библиотеке, их не сделать.

частый гость
Группа: Участники
Сообщений: 17
Добавлено: 16-01-2018 15:47
Аха, понятно. А доступ к буферу глубины есть? Или как всегда - генерить самому через другой шейдер?

Алсо, волюметрические тени тоже направленные или от точечного источника?

Big Boss
Группа: Администраторы
Сообщений: 719
Добавлено: 16-01-2018 18:10
К буферу глубины доступ есть - см. функцию GLSLShaderSetParameterShadowTexture.

Shadow volume поддерживает оба вида.

частый гость
Группа: Участники
Сообщений: 17
Добавлено: 17-01-2018 01:15
Благодарю!

частый гость
Группа: Участники
Сообщений: 17
Добавлено: 23-01-2018 21:00
Еще пара вопросов касательно освещения:

1) Как правильно рассчитать аттенюацию? Никак не вдуплю, от чего зависит радиус источника освещения.

2) Что будет, если добавить больше 8 источников? Есть ли какой-нибудь менеджер освещения, или нужно вручную отключать источники?

Big Boss
Группа: Администраторы
Сообщений: 719
Добавлено: 24-01-2018 13:29
Для затухания света используются три параметра, constant, linear и quadratic. Формула такая:

attenuation = 1.0 / (constant + linear * distance + quadratic * distance * distance);

Фактически, это уравнение, связывающее энергию света с расстоянием до источника света. Если поставить параметры 1,0,0, то свет не будет ослабляться с расстоянием. 0,1,0 - свет линейно ослабляется по мере отдаления от источника, 0,0,1 - свет ослабляется квадратично.

Понятия радиуса тут как бы и нет, потому что attenuation никогда не падает до нуля. Если надо обязательно задать четкий радиус для света (то есть, по сути, сделать light volume), то нужно писать свой шейдер. Я в своем движке Dagon использую такую формулу для light volume:

attenuation = clamp(1.0 - (distance / radius), 0.0, 1.0) * energy;

Насчет количества источников: менеджера, к сожалению, нет, больше 8 движок не поддерживает. Это вообще самый главный недостаток forward рендеринга. В своем движке я эту проблему решил кластерным методом - хранением индексов в целочисленной текстуре (про это можно почитать тут и более подробно тут), но можно ли такое сделать в Xtreme3D/GLScene, пока не знаю. Как вариант, можно разделить игровое пространство на части и рендерить их по отдельности, каждый раз меняя настройки света.

частый гость
Группа: Участники
Сообщений: 17
Добавлено: 24-01-2018 16:18
Мммм... я имел в виду немного другое.
В Иррлихте, например, если источников больше 8, включается менеджер, который включает 8 ближайших источников, а остальные отключает. Тут есть что-нибудь такое, или надо самостоятельно включать/выключать?

Big Boss
Группа: Администраторы
Сообщений: 719
Добавлено: 24-01-2018 17:32
Нет, тут ничего такого нет, объекты Light - это просто обертка над стандартными 8 источниками OpenGL.

Страницы: 1  новая тема
Раздел: 
Форум движка Xtreme3D / Xtreme3D: вопросы и ответы / Тени от конусного источника освещения?

Отвечать на темы могут только зарегистрированные пользователи

KXK.RU