Создание проекций тени: Теория и практика
|
|
DK22Pac | Дата: Пятница, 23.11.2012, 15:36 | Сообщение # 1 |
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
| В общем, пришла мне в голову идея сделать тени на основе создания проекций (3д-плоскостей) на поверхностях. За основу был взят тот факт, что: Если камеру установить в той же позиции, что у источника света, а также задать соответствуещее направление, то тени мы не увидим. Тоесть, тень "примет" ту же форму, что и обьект (как мы его видим). Правилен ли такой подход? Если да, выходит, что нам надо: 1) отрендерить обьект с позиции источника света 2) использовать полученное изображение в качестве текстуры для проекции. При этом, возникает множество вопросов (в основном - математических) - например, как установить нужное расстояние от обьекта до камеры (чтоб целиком "захватить" обьект), как определить позицию создания проекции на земле... О них поговорим позже.
|
|
| |
Den_spb | Дата: Суббота, 24.11.2012, 21:22 | Сообщение # 2 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: 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 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: 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 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| Правильно ли я понял, что ты хочешь применить тот же алгоритм, который используется для рисования теней на земле?
|
|
| |
DK22Pac | Дата: Среда, 02.01.2013, 03:22 | Сообщение # 7 |
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
| Ну да. А что даёт инвертирование матрицы? "Разворот" по всем осям?
|
|
| |
Den_spb | Дата: Среда, 02.01.2013, 20:55 | Сообщение # 8 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: 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, спасибо, но в теории все намного проще, чем на практике.
|
|
| |