Цвет вертексов - это отдельный массив в видеопамяти. Есть референсная моделька без цвета - это один VBO. И есть массивы с цветом - по одной копии на каждую точку установки. И вот как они эти два массива стыкуют вместе мне непонятно.
Это смотря в каком. Если в старом, то может посмотреть в исходниках паранои. Если в новом, то пока никак. Вот как раз размышляю на данную тему.
Вот у нас допустим модель. Референсная. Путём перемножения на матрицу, она ставится куда надо. И так далее. Всё хорошо. Но надо статическое освещение. Если таскать его в самой модели, непонятно как объединять два буффера для рендеринга. Может в D3D какие-то замуты были, но в GL навскидку я ничо не могу сказать. Ну да ладно, это не принцпиально.
Не очень-то и хотелось, как говориться. Моя идея заключается в том, чтобы использовать один и тот же тип вертекса как для повертексного, так и для лайтмапного освещения. Но с одной оговоркой. Для повертексного освещения мы делает в вершинном шейдере лукап по лайтмапным координатам и берём там 1 тексель. Этот тексель и будет нашим цветом вертекса. Ну а для лайтмапы - всё как обычно.
Т.е. вертекс не меняется, меняется только шейдер. Лайтмапа тоже остается прежняя. Там хватит места и для вертексных цветов и для обычных лайтмап.
В теории, мы можем даже получать повертексное освещение прямо из самой лайтмапы - потому что люксели на краях теоретически должны содержать именно тот цвет люкселя, который нам и нужен, собственно.
Это к слову, довольно распространённая практика, например, на мелких сурфейсах считается повертексное, а потом из суммы этих вертексов считается микро-лайтмапа на 1-4 люкселя.
Так что я полагаю метод удобный, хороший.
Единственное что меня тревожит - это потдержка VTF и скорость его работы. На современном железе, понятное дело, проблем не будет.
На старом, я точно помню, что сам VTF работал много где, а проблемы были с фетчингом во флоат-текстуру, поскольку не всё железо её тогда поддерживало корректно. Но мне ведь и не надо флоат-текстуры.
Вообщем остаётся только вопрос с производительностью.
Добавлено 22-11-2020 в 16:39:
Чтобы было понятнее насчёт типов вертекса. Вот, например в сталкере:
C++ Source Code:
1
struct r1v_lmap {
2
Fvector3 P;
3
u32 N;
4
u32 T;
5
u32 B;
6
s16 tc0x,tc0y;
7
s16 tc1x,tc1y;
8
};
9
struct r1v_vert {
10
Fvector3 P;
11
u32 N;
12
u32 T;
13
u32 B;
14
u32 C;
15
s16 tc0x,tc0y;
16
};
Один для лайтмапы, другой для повертексного. Первый 32 байта, второй 28 байт.
У меня получился навскидку вот такой тип вертекса
C++ Source Code:
1
// 28 bytes
2
struct ref_vertex_lmap
3
{
4
vec3 point;
5
color32 normal; // normal + alpha or weight
6
vec2 texcoord;
7
hvec2 lightmap;
8
};
нормаль как четыре байта, три компоненты, пропущенные через BFN и один компонент можно использовать для альфы, террайны блендить.
Здесь всегда 28 байт. Базис можно рассчитать прямо в пиксельном шейдере, теперь такое модное поветрие. Помоему это гораздо удобнее, чем хранить его в вертексе. Ну то я потом тожы проверю, насколько это бьёт по производительности. Но по идее он даже лучше так должен получаться, фактически попиксельный базис. Учитывая, что сам TBN хранит компоненты в byte, там наверное тихий ужос в итоговом пространстве. Вообщем если вспомнить, насколько невнятый бамп был в сталкере, то и неудивительно, как бы.
Дядя Миша писал: нормаль как четыре байта, три компоненты, пропущенные через BFN
BFN нормально интерполируются?
Цитата:
Дядя Миша писал: Базис можно рассчитать прямо в пиксельном шейдере, теперь такое модное поветрие. Помоему это гораздо удобнее, чем хранить его в вертексе.
Итак по сталкеру вот что мне удалось нарыть, путём штудирования исходников. Самое любопытное, что в видеоуроках или просто туторах, о таких вещах или не говорят или как-то вскользь затрагивают.
Компилятор имеет режимы работы разные, драфт и продакшен.
Драфт - для предварительной оценки в этом режиме многие вещи просто не делаются. В основном тяжелые.
Вот какой момент выяснил - есть галка Implicit Lighting. Она ставится для ландшафтов. Чёрт его знает, почему она названа Implicit, когда это Explicit - т.е. наоборот явное освещение. Для этого режима не генерируются координаты лайтмапы, а берутся прямо текстурные координаты. И назначается явное имя лайтмапы пользователем. То есть там кто-то в английском не силён и всё перепутал из-за чего я был введён в заблуждение и долгое время не мог понять что это вообще такое. А оно оказывается вон что.
Далее, сцена в сталкере состоит из четырёх слоёв. Ну я так условно её называю, наверное на уровне самого движка такого разделения и нету.
Это слои детализации. Первый слой - это ландшафт на открытых уровнях.
У него всегда это неявное освещение в отдельную лайтмапу. И он всегда как одна лайтмапгруппа. И для него так же применяется детальная четырёх слойная карта с четырьмя детальными текстурами. Причём эти четыре текстуры менять вообще нельзя, он намертво что ли прописаны где-то. Ну неважно.
Второй слой детализации - собственно основная архитектура. Домики там всякие, арки, тоннели, некоторые машинки. Это всё единая часть гигантского меша с координатами 0 0 0. Наверное их как-то разбивают по группам, но я заморачиваюсь, экспорчю в один гигантский static.smd
На эту архитектуру тоже накладывается лайтмапа, которая хранится в lmap1 - lmap<тритыщискуем>
Третий слой детализации - MU-модели. MU как подсказал тов. Camblu (ex. Nim-Bitum) это сокращение от Multiple Usage. Вот здесь я пока не разобрался. По дефолту на них применяется повертексное освещение. Как оно хранится и как рисуется я не знаю. Да мне это и не особенно интересно. Но лайтмапы на них нету. В эту категорию относятся все модели, которые встречаются на карте более одного раза. Иногда модель может быть одна на карте, но она же будет на других картах. В первую очередь это деревья, автобусы, военная техника, запчасти от автомобилей. Ну вообщем-то всё что угодно такого плана. Здесь для меня самый любопытный момент - может ли сталкер накладывать на них лайтмапу. Теоретически наверное может. Но в компиляторе я такой код не видел. Может просто плохо искал. А может надо принудительно включить такую модель в static mesh, а по другому никак. Не знаю. Но если вы знаете - обязательно напишите.
И наконец четвертый слой детализации - это всякая несолидная мелочь, которой еще больше. Травка, мелкие камушки и прочая пердь.
Для этих отдельный файл используется и хранятся они по своему как-то.
А генерятся по специальной карте ландшафта вроде бы. Единственное что мне непонятно - на кой черт хранить их позиции, если их легко рассчитать при загрузке карты, это очень быстро. Ну как бы ладно. Зачем-то сделали вот так.
Добавлено 25-11-2020 в 15:47:
Да, так я вот что сказать-то хотел. Без второго и третьего слоя детализации уровни смотрятся очень убого, как будто и взаправду там голдсорс какой.
>>то всё единая часть гигантского меша с координатами 0 0 0
Не знаю, на каком шаге оно становится гигантским мешем, ибо в исходниках уровней оно разбито на разные меши. Вот, как на кордоне из билда 1935 - 1 меш фабрика, 1 меш - домики в деревне новичков. Кроме того, части этого меша могуть сразу быть вшитыми в террейн.
При компиляции же все меши велдятся. То есть, у них сшиваются вершины, если они ближе друг к другу, чем значение, выставленное в настройках качества компиляции.
Но один гигантский меш из них по-идее получиться не может, если предварительно не сгруппировать их в один меш.
Под координатами, судя по всему имелся ввиду т.н pivot (точка, где рисуется гизмо). То есть "центр модели" всегда в нулевых координатах, а сам меш может быть вообще далеко от центра. Это всё от того, что в те годы никто не умел в т.н. модульные меши, и весь уровень делали сразу в 3д редакторе. И домеки, и тоннели. И потом можно быстро это всё вставить в сдк, не подгоняя ничего. и заселять локацию, расставлять физ объекты и прочее.
>>Наверное их как-то разбивают по группам, но я заморачиваюсь
Могу ошибаться, но вроде как разбивается по материалам.
>>MU как подсказал тов. Camblu (ex. Nim-Bitum)
Это я, да.
>>В эту категорию относятся все модели, которые встречаются на карте более одного раза. Иногда модель может быть одна на карте, но она же будет на других картах. В первую очередь это деревья, автобусы, военная техника, запчасти от автомобилей. Ну вообщем-то всё что угодно такого плана
Для всех MU мешей генерятся thumbnails, которые сшиваются затем в т.н. лод-файл. Это картинка, которая затем режется, и накладывается на биллборды. Емнип в сталкере всего 2 уровня лода. Обычный меш, упрощенный, и биллборд.
>>Иногда модель может быть одна на карте, но она же будет на других картах.
Один уровень - один лод-файл.
>>может надо принудительно включить такую модель в static mesh, а по другому никак. Не знаю. Но если вы знаете - обязательно напишите.
Сегодня попробую, отпишусь.
И наконец четвертый слой детализации - это всякая несолидная мелочь... мелкие камушки и прочая пердь.
Как минимум, в билдах у нее была коллизия. В 1511 билде можно покататься по агро на машинке, и детейлы коллайдят с шинами, из-за чего возникает чувство родных дорог, хотя сама дорога - гладкая
__________________
Цитата:
MR wild Alex писал: Многоувожаймый XaeroX , очень интересно почиму вы со своими друзьями не можите создать движок для HL на основе всех предыдущих проэктов (Xash,SoHL,HLFX) это ведь для
вашей команды не так сложно.
КСМ это форум украинских нацистов и в администрации нет адекватов.
Судя по всему, MU модели в сталкере определяются по compile shader в настройках.
Если поставить не def_vertex - в статистике уровня будет вот так
Map size X x Z: [13 x 19]
Max static vertex per m^2: 18
Total static vertices: 394 Max mu vertex per m^2: 0
Total mu vertices: 0
Судя по всему я забыл, как их подсчитать.
Добавлено 11-12-2020 в 12:53:
А нет, всё верно.
Итого, если выставлено MU - то лайтмапа не запекается. Запекается только лод.
__________________
Цитата:
MR wild Alex писал: Многоувожаймый XaeroX , очень интересно почиму вы со своими друзьями не можите создать движок для HL на основе всех предыдущих проэктов (Xash,SoHL,HLFX) это ведь для
вашей команды не так сложно.
КСМ это форум украинских нацистов и в администрации нет адекватов.
Отредактировано Camblu_Buildovich 11-12-2020 в 10:31
Camblu_Buildovich если натыкать йолок да побольше. И всем им назначить шейдер с лайтмапой. Они так и пойдут в статическую часть?
И насколько хорошо при этом будут выглядеть?
Дядя Миша писал: Camblu_Buildovich если натыкать йолок да побольше. И всем им назначить шейдер с лайтмапой. Они так и пойдут в статическую часть?
И насколько хорошо при этом будут выглядеть?
Не в шейдоре дело. Если у дерева есть флаг MU (я давно к сдк не прикасался толком, поэтому не сразу нашел этот флаг, и решил, что мне приглючилось) - то лайтмапа не генерируется. Только лод уровня.
Я просто поторопился с выводами, и не смог потом отредактировать пост.
__________________
Цитата:
MR wild Alex писал: Многоувожаймый XaeroX , очень интересно почиму вы со своими друзьями не можите создать движок для HL на основе всех предыдущих проэктов (Xash,SoHL,HLFX) это ведь для
вашей команды не так сложно.
КСМ это форум украинских нацистов и в администрации нет адекватов.