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

Пару вопросов по lightmaps

Страницы: 1 2 3 4 5 Следующая »
#0

Здравствуйте, ребята, вот занимаюсь созданием генератора лайтмапов и появилось пару вопросов ответы
на которые в интернете не нашел, надеюсь, что вы что-то подскажите. Заранее спасибо :)

Собственно сами вопросы:
1. Для вычисления света нужно найти координаты текселя лайтмапы на полгине в 3D. Хорошо, нашел способ и он работает, но есть
одно "но". В алгоритме координаты находятся в пределах треугольника и соответственно лайтмапа строится только для него (как я понял, если что-то не так, то поправьте).
Отсуда вопрос: а как обработав еще один треугольник слить результат в одну лайтмапину? чтобы не 1 треугольник = 1 лайтмапа, а 1 полигон = 1 лайтмапа была? (в моем случае есть плоскость (прямоугольник) и она разделена на два треугольника).

2. Вопрос по поводу трассировки лучей, чтобы добавить тени в свое "чудо".
У меня проверка криво работает, а точнее вообще не работает. В чем может быть проблема? Она всегда возвращает, что луч с чем-то столкнулся.

Вот код как сейчас происходит проверка:

glm::vec3 LightDir = Light->Position - PosFrag; // нашли направление к фрагменту
glm::vec3 Tmp;
glm::normalize( LightDir );

//где-то в цикле проверки пересечения луча
// glm::intersectLineTriangle принимает такие параметы: orig, dir, vert0, vert1, vert2, position
if ( glm::intersectLineTriangle( Light->Position, LightDir, Vertexes[IdVertex], Vertexes[IdVertex+1], Vertexes[IdVertex+2], Tmp ) )
{
//луч столкнулся с чем-то
}

P.S: лайтмапы делаю по этому уроку

5 июня 2018


#1

zombihello
У тебя в модели есть текстурные координаты (развертка), например, вот по ней и клади данные в текстуру. Ну или генери. Т.е. у тебя есть текстура определенного размера, есть треугольники, генери битмапы для треугольников, потом упаковывай в атлас, масштабируй и т.д., проиндексируешь каждый треугольник, сложишь в атлас, потом оттуда возьмёшь текстурные координаты для полигонов.

5 июня 2018

#2

Судя по уроку лайтмапы там накладываются лишь на аксиальные полигоны. Интересный урок.

6 июня 2018

#3

1. используй упаковку лайтмапов. Изначально у тебя будет тьма мелких текстурок для каждого полигона, потом всё это загоняешь в упаковщик и на выходе получаешь единый лайтмап.
Либо второй вариант - использовать текстурные координаты основной карты (обычно диффузной), но там надо следить, чтобы не было тайлинга и наложения.
Мы делали 3-й вариант, в 3ds max есть возможность запечь свет в лайтмап на модели уровня, при этом можно автоматом генерировать большой световой атлас + в моделях создаётся новый канал с текстурыми координатами под него. Мы использовали свет, который сам МАКС просчитывал, но в твоём случае можно использовать только координаты и пересчитать лайтмап по своему.

6 июня 2018

#4

По упаковке к слову на http://www.flipcode.com лет 15 назад была статья с исходниками, можешь там поискать.

6 июня 2018

#5

bool
> У тебя в модели есть текстурные координаты (развертка), например, вот по ней и
> клади данные в текстуру.
Текстурные координаты могут повториться в пределах одной модели.

6 июня 2018

#6

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

6 июня 2018

#7

Собственно, развертка  - это примерно 80% кода лайтмаппера.

7 июня 2018

#8

Для не слишком больших уровней можно карту теней вообще запекать в Volume Texture, вот в этой демке на конкурс вообще две RGB Volume Texture на весь размер уровня.
Что это даёт:
1. Никаких проблем с развёрткой.
2. LightMap распространяется не только на архитектуру карты, но и на все объекты, в том числе подвижные. Посмотрите в демке свою пушку, перемещаясь по карте, особенно хорошо видно на оружии №3. Освещается даже дым - пустите ракету под крышу, посмотрите на её след под крышей и на солнце.
3. Свет получается направленный (две RGB текстуры - это шесть направлений).

7 июня 2018 (Правка: 8:58)

#9

Mikle
Чёт виндовский антивирь на твою демку ругается.

+ Показать

7 июня 2018

#10

BUzer
> виндовский антивирь на твою демку ругается
Попробуй заменить EXE на этот: NoOptimize
Это то же самое, но без оптимизаций.

7 июня 2018

#11

zombihello
> Для вычисления света нужно найти координаты текселя лайтмапы на полгине в 3D
Нужно построить грамотную развёртку геометрии. Желательно, на входе иметь геометрию, побитую не на треугольники, а на полигоны.
Если такого достичь не удаётся, лучше заиспользовать какой-нибудь сторонний инструмент для постоения развёртки.

zombihello
> Вопрос по поводу трассировки лучей, чтобы добавить тени в свое "чудо"
Забудь про трассировку. При рассчёте светокарты хотя бы с переотражениями транссировка на CPU, да и даже на GPU будет нещадно тормозить, по сравнению с rasterization-based методом.

7 июня 2018

#12
Mikle
То же самое, только вместо Win32/Bitrep.A написано Win32/Azden.A!cl

8 июня 2018

#13

BUzer
Меньше трёх месяцев назад ещё всё было в порядке: https://gamedev.ru/projects/forum/?id=233800&page=37#m541

Нет там никакого вируса, просто идёт планомерная борьба со старым кодом, если установишь VS6, можешь сам скомпилировать исходник:
Исходник без файлов данных: https://yadi.sk/d/nKyaElMk3TmZgX
Нужно подключить две tlb:
http://bbs.vbstreets.ru/viewtopic.php?f=99&t=49733
http://bbs.vbstreets.ru/viewtopic.php?f=99&t=49774

8 июня 2018

#14

Ребят, спасибо за вашу помощь, я немного разобрался благодаря вам. Ведь правильно понял, что создавать лайтмапину для каждого треугольника нормально? (Иначе не знаю как)

Panzerschrek[CN]
> Забудь про трассировку. При рассчёте светокарты хотя бы с переотражениями
> транссировка на CPU, да и даже на GPU будет нещадно тормозить
Подскажите, пожалуйста, лёгкий и простой метод который бы заменил трассировку лучей, ибо ждать три часа пока просчитаються все лайты не айс.

8 июня 2018

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