Прошла пара дней и я закончил модифицировать uQuake3 под свои нужды.
Изначально uQuake3 позволяет грузить в Unity карты BSP формата Quake3 более или менее сносно. Есть возможность грузиться из паков PK3, грузить лайтмапы, генерировать карту из редактора или при запуске игры, управлять детализацией патчей;
Что мы имеем на данный момент (отличия от оригинального кода):
- карты и текстуры сначала пытаются загрузиться из папок maps и textures, если их там нет, то ресурсы ищутся в паках PK3. Всё на манер Quake. В оригинальном uQuake3 для загрузки из папки или пака необходимо выставить галочку, а текстуры всегда грузятся из пака;
- возможность подтягивать уже имеющиеся материалы. Например, я настроил материал стены с текстурой brick_0, а затем генерировал карту из BSP. В местах, где используется эта текстура будет выставлен уже имеющийся материал. Если материал не будет найден, то будет создан дефолтный с Diffuse шейдером. Если не будет найдена текстура, то материал подменится нулёвым (который, кстати, тоже можно сделать предустановленным). Таким образом, можно заранее настроить материалы с различными эффектами, прозрачные или полупрозрачные поверхности и они подтянутся из карты;
- сбор фейсов в модели (в родительский объект) для возможности манипуляции ими. Триггеры НЕ грузятся, т.к. есть отличия с форматом Quake1 - здесь зоны формируются не из фейсов, а из брашей, по-видимому, которые являются чем-то вроде ограничивающих зон (bounding box). Класс моделей я добавил, а брашей не стал, т.к. в нашем проекте это не нужно;
- комбинирование мешей фейсов в один цельный меш при установке опции Combine Meshes;
- в Unity есть интересная особенность: при создании материалов из кода в режиме редактора, эти самые материалы где-то сохраняются, их не видно и их нельзя удалить, но они есть :D (в этом можно убедиться, выведя список всех материалов в проекте или их количество). Что в uQuake1, что в uQuake3 генерируется просто сумасшедшее количество побочных материалов - на каждый фейс отдельный материал. И все они потом где-то сидят! В моей версии генерируемые материалы хранятся внутри объекта и затираются при повторной генерации уровня из BSP;
- загрузка и расстановка сущностей, установка угла их поворота. Прочие характеристики также легко добавить при необходимости. Вот только есть странная ситуация - в некоторых испытанных BSP картах есть информация об объектах light, а в некоторых нет. Подозреваю, что это зависит от версии компилятора (которых существует великое множество), т.к. изначально в *.map информация об объектах света есть!
На выходе мы получаем возможность грузить карты BSP и манипулировать сущностями, которые настроили прямо в редакторе карт Quake3 (-Radiant, Jackhammer, QuaRK и прочие). Нет необходимости кроме редактора карт и Unity иметь ещё какие-то конвертеры и инструменты. Неделю назад я видел только один выход - конвертация моделей из BSP в FBX и затем импорт этой шняги в проект, но теперь можно забыть про эти костыли.
Видео о предыдущем моем "открытии":
Позднее после чистки кода я его выложу. И думаю видео тоже надо сотворить с демонстрацией возможностей допиленного uQuake3. Пошёл в жопу, ProBuilder!!!
Изначально uQuake3 позволяет грузить в Unity карты BSP формата Quake3 более или менее сносно. Есть возможность грузиться из паков PK3, грузить лайтмапы, генерировать карту из редактора или при запуске игры, управлять детализацией патчей;
Что мы имеем на данный момент (отличия от оригинального кода):
- карты и текстуры сначала пытаются загрузиться из папок maps и textures, если их там нет, то ресурсы ищутся в паках PK3. Всё на манер Quake. В оригинальном uQuake3 для загрузки из папки или пака необходимо выставить галочку, а текстуры всегда грузятся из пака;
- возможность подтягивать уже имеющиеся материалы. Например, я настроил материал стены с текстурой brick_0, а затем генерировал карту из BSP. В местах, где используется эта текстура будет выставлен уже имеющийся материал. Если материал не будет найден, то будет создан дефолтный с Diffuse шейдером. Если не будет найдена текстура, то материал подменится нулёвым (который, кстати, тоже можно сделать предустановленным). Таким образом, можно заранее настроить материалы с различными эффектами, прозрачные или полупрозрачные поверхности и они подтянутся из карты;
- сбор фейсов в модели (в родительский объект) для возможности манипуляции ими. Триггеры НЕ грузятся, т.к. есть отличия с форматом Quake1 - здесь зоны формируются не из фейсов, а из брашей, по-видимому, которые являются чем-то вроде ограничивающих зон (bounding box). Класс моделей я добавил, а брашей не стал, т.к. в нашем проекте это не нужно;
- комбинирование мешей фейсов в один цельный меш при установке опции Combine Meshes;
- в Unity есть интересная особенность: при создании материалов из кода в режиме редактора, эти самые материалы где-то сохраняются, их не видно и их нельзя удалить, но они есть :D (в этом можно убедиться, выведя список всех материалов в проекте или их количество). Что в uQuake1, что в uQuake3 генерируется просто сумасшедшее количество побочных материалов - на каждый фейс отдельный материал. И все они потом где-то сидят! В моей версии генерируемые материалы хранятся внутри объекта и затираются при повторной генерации уровня из BSP;
- загрузка и расстановка сущностей, установка угла их поворота. Прочие характеристики также легко добавить при необходимости. Вот только есть странная ситуация - в некоторых испытанных BSP картах есть информация об объектах light, а в некоторых нет. Подозреваю, что это зависит от версии компилятора (которых существует великое множество), т.к. изначально в *.map информация об объектах света есть!
На выходе мы получаем возможность грузить карты BSP и манипулировать сущностями, которые настроили прямо в редакторе карт Quake3 (-Radiant, Jackhammer, QuaRK и прочие). Нет необходимости кроме редактора карт и Unity иметь ещё какие-то конвертеры и инструменты. Неделю назад я видел только один выход - конвертация моделей из BSP в FBX и затем импорт этой шняги в проект, но теперь можно забыть про эти костыли.
Видео о предыдущем моем "открытии":
Ух, классно! Но Вам стоит использовать какой-то более известный уровень, вроде q3dm6, видео будут более популярными :)
ОтветитьУдалитьДобавил видео про то, что там получилось в итоге. Почему-то забыл это сделать год назад...
Удалить