Создание проекций тени: Теория и практика - Форум
Суббота, 10.12.2016, 13:45
Качественные скрипты, моды и дополнения для GTA без регистрации
Главная Регистрация Вход
Приветствую Вас, Гость · RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Форум » Игры серии ГТА » Работа с памятью, exe » Создание проекций тени: Теория и практика
Создание проекций тени: Теория и практика
DK22PacДата: Пятница, 23.11.2012, 15:36 | Сообщение # 1
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
В общем, пришла мне в голову идея сделать тени на основе создания проекций (3д-плоскостей) на поверхностях.
За основу был взят тот факт, что:
Если камеру установить в той же позиции, что у источника света, а также задать соответствуещее направление, то тени мы не увидим. Тоесть, тень "примет" ту же форму, что и обьект (как мы его видим).
Правилен ли такой подход?
Если да, выходит, что нам надо:
1) отрендерить обьект с позиции источника света
2) использовать полученное изображение в качестве текстуры для проекции.
При этом, возникает множество вопросов (в основном - математических) - например, как установить нужное расстояние от обьекта до камеры (чтоб целиком "захватить" обьект), как определить позицию создания проекции на земле... О них поговорим позже.
 
Den_spbДата: Суббота, 24.11.2012, 21:22 | Сообщение # 2
Создатель сайта
Группа: Администраторы
Сообщений: 1536
Статус: Offline
Quote (DK22Pac)
Правилен ли такой подход?

1.Таким способом можно узнать, как выглядит тень, только в том случае, если плоскость, на которой формируется тень, перпендикулярна оси светового потока.
2.Как планируется определять, какие области отрендеренного изображения соответствуют предмету, а какие - нет?
3.Не понятен сам алгоритм рендера - камера будет постоянно перемещаться от одних предметов к другим?
 
DK22PacДата: Воскресенье, 25.11.2012, 01:48 | Сообщение # 3
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
Den_spb, рендер будет отдельно для каждого обьекта. Допустим, это будет происходить где-то в ::PreRener.
Quote
Как планируется определять, какие области отрендеренного изображения соответствуют предмету, а какие - нет?

Фон поставить белый, обьект затемнить до чёрного (создать нужный источник света), дальше цвета изображения конвертировать (чёрый - белый).
Quote
Таким способом можно узнать, как выглядит тень, только в том случае, если плоскость, на которой формируется тень, перпендикулярна оси светового потока.

Вот это плохо. Это выходит, что полученное изображение надо будет ещё как-то расстягивать? У меня ещё была идея как-то проецировать обьект на поверхность, чтоб узнать координаты углов создаваемой тени. Тип такого.


Сообщение отредактировал DK22Pac - Воскресенье, 25.11.2012, 01:49
 
Den_spbДата: Воскресенье, 25.11.2012, 03:41 | Сообщение # 4
Создатель сайта
Группа: Администраторы
Сообщений: 1536
Статус: Offline
Quote (DK22Pac)
Это выходит, что полученное изображение надо будет ещё как-то расстягивать?

Да, это же очевидно. Например, тени на земле, отбрасываемые предметами, освещёнными солнцем, всегда растянуты по сравнению с реальной формой этих предметов (или наоборот, сжаты, если солнце находится высоко над горизонтом).
Quote (DK22Pac)
У меня ещё была идея как-то проецировать обьект на поверхность, чтоб узнать координаты углов создаваемой тени. Тип такого.

Сделать тень, я предполагаю, можно без камер и рендеров. Но нужно изучить структуру моделей объектов (в каком порядке в структуре записаны вершины объекта и координаты этих вершин). Далее пишется алгоритм, вычисляющий координаты вершин контура объекта при заданном положении объекта и источника света. Этот контур проецируется на плоскость, на которой должна рисоваться тень (вычисляются координаты точек пересечения проецирующих лучей и теневой плоскости). Остаётся только нарисовать тень (хотя как это делать - тоже вопрос, нужно придумать какой-то способ рисования "заливки" на объекте по заданному контуру).
П.С. Кстати, а зачем всё это вдруг понадобилось? В СА ведь и так есть тени. Или хочется сделать их более реалистичными?
 
DK22PacДата: Пятница, 28.12.2012, 14:01 | Сообщение # 5
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
Я хочу сделать тени для автомобилей и проекции на стенах.

Конечную функцию разобрал полностью.


Добавлено (28.12.2012, 13:54)
---------------------------------------------
Попытался разобрать, как именно они находят invMatrix, но там бардак...

Сначала инвертируем матрицу камеры, масштабируем, сдвигаем, причём фиг знает откуда взяты параметры для этих операций. 0,89, 0,8, как я думаю - это некие коэффициенты, которыми "подгоняли" тени под модель педа.

Добавлено (28.12.2012, 14:01)
---------------------------------------------
Вот код из исходника примера создания тени из RW SDK. Алгоритм тот же, но, блин, сам алгоритм не описан. Также, надо отметить, что тут мы ещё сдвигаем и по Y на 0.5.


Сообщение отредактировал DK22Pac - Пятница, 28.12.2012, 14:08
 
Den_spbДата: Воскресенье, 30.12.2012, 01:53 | Сообщение # 6
Создатель сайта
Группа: Администраторы
Сообщений: 1536
Статус: Offline
Правильно ли я понял, что ты хочешь применить тот же алгоритм, который используется для рисования теней на земле?
 
DK22PacДата: Среда, 02.01.2013, 03:22 | Сообщение # 7
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
Ну да. А что даёт инвертирование матрицы? "Разворот" по всем осям?
 
Den_spbДата: Среда, 02.01.2013, 20:55 | Сообщение # 8
Создатель сайта
Группа: Администраторы
Сообщений: 1536
Статус: Offline
Цитата (DK22Pac)
А что даёт инвертирование матрицы? "Разворот" по всем осям?

Инвертирование матрицы даёт обратную матрицу, которая обычно применяется для обратного пересчёта координат (глобальные координаты -> локальные координаты).
Обратная матрица представляет собой такую матрицу, при умножении которой на исходную матрицу получается единичная матрица.
Ситуация с матрицами аналогична ситуации с числами - при умножении исходного числа на обратное число получается единица:
X * 1/X = 1
Кстати, обычные числа - это по сути тоже матрицы, которые имеют размер 1 х 1.
 
AlekseyДата: Суббота, 05.01.2013, 12:14 | Сообщение # 9
Группа: Пользователи
Сообщений: 3
Статус: Offline
Рассказать, как делать тени? ))

Могу рассказать два способа:
1. рендер теневой карты
2. просчёт тени с помощью доп. геометрии
 
DK22PacДата: Понедельник, 07.01.2013, 06:22 | Сообщение # 10
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
Aleksey, спасибо, но в теории все намного проще, чем на практике.
 
Форум » Игры серии ГТА » Работа с памятью, exe » Создание проекций тени: Теория и практика
Страница 1 из 11
Поиск: