Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / Пару вопросов по lightmaps

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

Страницы: 1 2 3 4 5 Следующая »
zombihelloПостоялецwww5 июня 201820:32#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: лайтмапы делаю по этому уроку

boolУчастникwww5 июня 201822:18#1
zombihello
У тебя в модели есть текстурные координаты (развертка), например, вот по ней и клади данные в текстуру. Ну или генери. Т.е. у тебя есть текстура определенного размера, есть треугольники, генери битмапы для треугольников, потом упаковывай в атлас, масштабируй и т.д., проиндексируешь каждый треугольник, сложишь в атлас, потом оттуда возьмёшь текстурные координаты для полигонов.
g-contПостоялецwww6 июня 20181:14#2
Судя по уроку лайтмапы там накладываются лишь на аксиальные полигоны. Интересный урок.
МизраэльПостоялецwww6 июня 201813:17#3
1. используй упаковку лайтмапов. Изначально у тебя будет тьма мелких текстурок для каждого полигона, потом всё это загоняешь в упаковщик и на выходе получаешь единый лайтмап.
Либо второй вариант - использовать текстурные координаты основной карты (обычно диффузной), но там надо следить, чтобы не было тайлинга и наложения.
Мы делали 3-й вариант, в 3ds max есть возможность запечь свет в лайтмап на модели уровня, при этом можно автоматом генерировать большой световой атлас + в моделях создаётся новый канал с текстурыми координатами под него. Мы использовали свет, который сам МАКС просчитывал, но в твоём случае можно использовать только координаты и пересчитать лайтмап по своему.
МизраэльПостоялецwww6 июня 201813:19#4
По упаковке к слову на http://www.flipcode.com лет 15 назад была статья с исходниками, можешь там поискать.
MikleМодераторwww6 июня 201820:10#5
bool
> У тебя в модели есть текстурные координаты (развертка), например, вот по ней и
> клади данные в текстуру.
Текстурные координаты могут повториться в пределах одной модели.
boolУчастникwww6 июня 201820:26#6
Mikle
согласен, по текстурной развертке не очень. Но второй способ, описанный мной, должен сработать.
WraithПостоялецwww7 июня 20186:28#7
Собственно, развертка  - это примерно 80% кода лайтмаппера.
MikleМодераторwww7 июня 20188:57#8
Для не слишком больших уровней можно карту теней вообще запекать в Volume Texture, вот в этой демке на конкурс вообще две RGB Volume Texture на весь размер уровня.
Что это даёт:
1. Никаких проблем с развёрткой.
2. LightMap распространяется не только на архитектуру карты, но и на все объекты, в том числе подвижные. Посмотрите в демке свою пушку, перемещаясь по карте, особенно хорошо видно на оружии №3. Освещается даже дым - пустите ракету под крышу, посмотрите на её след под крышей и на солнце.
3. Свет получается направленный (две RGB текстуры - это шесть направлений).

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

BUzerУчастникwww7 июня 20189:34#9
Mikle
Чёт виндовский антивирь на твою демку ругается.
+ Показать
MikleМодераторwww7 июня 20189:47#10
BUzer
> виндовский антивирь на твою демку ругается
Попробуй заменить EXE на этот: NoOptimize
Это то же самое, но без оптимизаций.
Panzerschrek[CN]Участникwww7 июня 201817:35#11
zombihello
> Для вычисления света нужно найти координаты текселя лайтмапы на полгине в 3D
Нужно построить грамотную развёртку геометрии. Желательно, на входе иметь геометрию, побитую не на треугольники, а на полигоны.
Если такого достичь не удаётся, лучше заиспользовать какой-нибудь сторонний инструмент для постоения развёртки.

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

BUzerУчастникwww8 июня 20182:29#12
Mikle
То же самое, только вместо Win32/Bitrep.A написано Win32/Azden.A!cl
MikleМодераторwww8 июня 20189:07#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
zombihelloПостоялецwww8 июня 201811:40#14
Ребят, спасибо за вашу помощь, я немного разобрался благодаря вам. Ведь правильно понял, что создавать лайтмапину для каждого треугольника нормально? (Иначе не знаю как)

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

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

/ Форум / Программирование игр / Графика

2001—2018 © GameDev.ru — Разработка игр