Программа-просмотрщик ресурсов движка Dark Engine.
Не требует установки и предварительной настройки. Может размещаться в любом удобном месте системы. Поддерживает OpenGL 3.2 (есть режим совместимости с OpenGL 2.1), а значит, может работать даже на старых компьютерах, на системах Windows и Linux.
Где скачатьСсылки на скачивание всегда будут доступны:
— на моём сайте
forcesw.com— в этой теме форума
— на
форуме TTLG (eng)
Актуальная сборка:
Thief 2: The Metal Age 20th Anniversary build 2020‒04−06 14:30 MSK (UTC+3:00)Неактуальные сборки:
Thief: The Dark Project 21th Anniversary build 2019‒11−30 23:55 MSK (UTC+3:00)Thief: The Dark Project 20th Anniversary build 2018‒11−30 12:58 MSK (UTC+3:00)Последние изменения2020‒04−06 14:30 MSK (UTC+3:00) Thief 2: The Metal Age 20th Anniversary Build
+ исправлено отображение имен файлов и каталогов в списке навигации, они больше не переносятся на новую строку.
+ для режима LEGACY HARDWARE теперь требуется версия OpenGL 1.0 вместо 2.1. Но работа в этом режиме не тестировалась. Буду благодарен за отклик.
+ добавлено отображение свечения объектов, имеющих свойство Self Illumination.
+ добавлена поддержка свойства Anim Light. В некоторых режимах оно влияет на Self Illumination объектов. Полноценная анимация этого свойства пока не реализована, применяется только начальное состояние.
+ добавлена поддержка языков, прописанных в dark config файле. Ресурсы будут искаться в соответствующих подкаталогах по приоритету, указанному в darkinst.cfg или install.cfg.
2020‒03−28 13:00 MSK (UTC+3:00) Thief 2: The Metal Age 20th Anniversary Build
+ улучшен механизм определения каталогов с ресурсами игры. Теперь миссия, расположенная внутри любой директории игры, легко находит путь к ресурсам.
+ улучшен механизм поиска текстур для моделей. Добавлена поддержка вложенных каталогов по названию языка (правда, пока ищется только "english").
+ добавлена поддержка замещаемых текстур, описываемых параметром TxtRepl r*, где * - номер текстуры [0, 3].
+ увеличен максимальный лимит экспозиции (для повышения яркости клавишами + и -).
+ теперь в миссиях Thief 1 отображаются высокополигональные модели (при наличии).
+ добавлена поддержка открытия программы в нужном каталоге через передачу параметра в командной строке или перетаскиванием каталога на окно программы.
2020‒03−23 01:50 MSK (UTC+3:00) Thief 2: The Metal Age 20th Anniversary Build
+ добавлено отображение моделей персонажей (выражается благодарность Juliusz Kaczmarek aka PinkDot и Randy Sybel aka Shadowspawn).
+ затухание в шейдере переключено на квадратичное. Теперь свет затухает по законам физики, но от этого стало темнее.
+ клавишами "+" и "-" теперь можно менять яркость изображения в режиме свободной камеры.
+ исправлено наследование свойств объектной иерархии.
2020-03-06 14:00 MSK
+ уменьшен радиус SSAO и соответственно, bent normals. Последние теперь включены в финальную картинку, отчего она выглядит немного зашумленной. Отключить вклад SSAO и bent normals можно клавишей k.
+ увеличено значение FOV c 50 до ~74 градусов по вертикали, что соответствует FOV New Dark Engine.
+ переработано взаимодействие с объетной иерархией. Считываются свойства Render Type и Self Illumination, это позволило не рисовать лишние объекты миссии и исправило отображение теней от светильников.
+ исправлено смещение полигонов для обратного буфера глубины. Это предотвращает мельтешение теней (артефакты) при повороте или перемещении камеры.
2020-02-26 20:00 MSK
+ добавлена поддержка миссий формата New Dark Engine! Ура! Особая благодарность выражается Juliusz Kaczmarek aka PinkDot!
+ незначительно ускорена загрузка миссий
+ при открытии миссии, камера позиционируется в стартовой позиции
+ класс цвета переделан на хранение данных в векторе с плавающей точкой, это обеспечивает лучшую точность
+ отключено "залипание клавиш", для предотвращения накопления смещений камеры при управлении интерфейсом
+ увеличена яркость режима просмотра миссий
2020-02-17 23:00 MSK
+ добавлена поддержка цветных полигонов в моделях
+ исправлено отсечение пути к текстурам, находящимся в одном подкаталоге с открытой моделью (информация о текстурах, отображаемая на экране)
+ различные внутренние оптимизации
2020-02-05 23:30 MSK
+ исправлено отображение некоторых проблемных моделей, состоящих из нескольких костей
2020-01-14 15:00 MSK
+ исправлено отображение уровней на видеокартах AMD
+ отрефакторен рекурсивный обход BSP-дерева при открытии моделей, убрана рекурсия
+ исправлено падение программы при открытии некоторых старых или поврежденных моделей
+ откорректирована простановка доступных для выборки mipmap-уровней текстур
+ добавлена отладочная схема отрисовки
2020-01-04 00:55 MSK
+ исправлена ошибка вращения объекта сразу после его открытия, без предварительного движения мышью
+ исправлена ориентация некоторых объектов в миссиях, связанная с особенностью указания ориентации кватернионов в библиотеке GLM
+ исправлено построение AABB и OBB для объектов и их костей
+ шейдеры теперь умеют принимать на вход массивы данных
+ добавлена заготовка схемы отрисовки для дебажного вывода bounding boxes
2019-12-18 23:30 MSK
+ пути к ресурсам игры удаляются из программы, если мы выходим из каталога игры (чтобы ресурсы разных игр не перемешивались при загрузке)
+ исправлено падение программы при клике или скролле на странице ошибки при первом запуске
+ окно программы при запуске располагается по центру экрана
+ исправлено поведение клавиши PgUp, перематывающей список в самый конец, при нажатии в верхней части списка
2019-12-11 16:00 MSK
+ исправлена ошибка компиляции шейдера depth_tree на картах AMD
+ расширено логирование при ошибках поиска текстур для упрощения анализа логов
2019-12-10 15:00 MSK
+ исправлена распаковка нормалей моделей, теперь все объекты корректно освещаются источниками света
2019-12-06 15:00 MSK
+ закрытие дескриптора архива после выхода из него средствами интерфейса
Как запускатьПростой способ: запустить из папки, в которую была распакована программа, и при помощи интерфейса открыть каталог с нужным файлом модели или миссии на диске.
Продвинутый способ: программа принимает на вход путь открываемого ресурса, будь то объект или миссия. Таким образом открыть нужный файл можно четырьмя способами:
— из командной строки, указав путь к открываемому файлу, например так:
dark_engine_viewer_x64.exe "D:\Games\Thief 2 — The Metal Age\MISS13.MIS"
— перетаскиванием файла на значок программы;
— перетаскиванием файла на открытое окно программы;
— созданием ассоциации расширений файлов моделей и миссий (BIN и MIS) с просмотрщиком и открыванием их двойным кликом прямо из Проводника.
Запуск на Linux и устаревшем оборудованииДля старых видеокарт, не поддерживающих OpenGL 3, сделана специальная версия — LEGACY HARDWARE. Её функционал сильно ограничен, но пользоваться основными функциями просмотрщика она позволяет. Для её запуска используйте исполняемый файл dark_engine_viewer_legacy.exe.
Кроме того, есть и linux-сборка просмотрщика: dark_engine_viewer_x64. В настоящее время она работает в режиме LEGACY HARDWARE и так же весьма ограничена в плане графических возможностей, но в отличие от legacy-версии, со временем станет полнофункциональной.
Как пользоватьсяВсё должно быть интуитивно понятно: интерфейс просмотра файлов прокручивается колесиком мыши, модели открываются по клику, перелистывание моделей «предыдущая/следующая» осуществляется стрелками клавиатуры, PgUp, PgDn, Home и End. Открытую модель можно приближать или отдалять от камеры колесиком мыши, вращать левой кнопкой мыши, перетаскивать — правой.
При открытии миссии, в правом верхнем углу программы появляется кнопка «Free camera mode», нажав на которую программа переходит в режим «свободного полета», управление в этом режиме осуществляется следующими клавишами:
WASD и стрелки — перемещение камеры, мышь — вращение по осям x и y
C — перемещение камеры вниз
SPACE — перемещение камеры вверх
SHIFT + клавиша перемещения — ускоренное перемещение
ESC — отображение интерфейса
ALT + ENTER — полноэкранный режим (HD Ready — 720p)
+/- — увеличение/уменьшение яркости
I — вкл/выкл освещение
K — вкл/выкл SSAO
O — вкл/выкл тени
P — вкл/выкл parallax occlusion mapping (выкл по умолчанию, требуется доработка)
U — вкл/выкл мягкие тени (выкл по умолчанию, требуется доработка)
Y — вкл/выкл контактные тени (выкл по умолчанию, требуется доработка)
Назначения цифровых клавиш (будут меняться в последующих сборках):
1 — вывод финального кадра со всеми эффектами (по умолчанию)
2 — вывод нормалей кадра
3 — вывод освещенности кадра
4 — вывод SSAO кадра
5 — вывод глубины кадра
6 — вывод искривленных нормалей кадра (bent normals)
7 — вывод глубины с добавлением карты высот
Эффекты, которые выключены по умолчанию — работают некорректно. Включение parallax occlusion mapping не покажет ничего, потому что у вас, скорее всего, отсутствуют карты высот для текстур. Но если вы захотите посмотреть как оно будет выглядеть, подложив необходимые текстуры, включите эффект клавишей P. При добавлении карты высот, добавьте к её имени постфикс «_h», кстати, для нормалей — это «_n», таким образом, если текстура называется bricks.pcx, то карта высот должна называться bricks_h.dds (формат текстуры может отличаться и быть любым, поддерживаемым игрой, не обязательно DDS, но DDS предпочтительнее), а карта нормалей — bricks_n.dds.
Поддерживаемые форматы текстур: DDS (только сжатые), PNG, TGA, PCX, GIF, JPG, BMP.
Вот вам, скриншот для затравки из предыдущей юбилейной версии программы:

Эксперименты приветствуются! Публикуйте свои скриншоты!
ОграниченияВ настоящее время программа поддерживает три формата моделей: BIN, MIS и OBJ.
Поскольку программа ещё в разработке, поддержка некоторых форматов реализована лишь частично.
BIN — поддерживаются как статические, так и динамические модели, расположенные в файлах obj.crf и mesh.crf соответственно.
MIS — поддерживаются миссии, сделанные как на оригинальном DromEd, так и на новом, расширенном для New Dark Engine.
OBJ — формат поддерживается на базовом уровне, без текстур
Планы развитияВ глобальной перспективе просмотрщик должен превратиться в полноценный 3D-движок — Force Engine. Никто не собирается тягаться с Unreal Engine и Unity, моя личная задача состоит в том, чтобы создать на основе этого движка собственную игру.
Более близкие планы — это поддержка всех необходимых ресурсов Dark Engine, для оттачивания на них общих игровых механик, таких как физика, рендеринг, распространение звука, перемещение по уровню, взаимодействие с персонажами и предметами, искусственный интеллект. Всё это планируется реализовать с ресурсами Dark Engine, поэтому логично ожидать от этого проекта появления какого-то игрового прототипа, внешне похожего на Thief. Степень готовности этого прототипа будет обсуждаться с теми, кто проявляет интерес к проекту.
Планируется регулярная публикация обновлений. Поэтому я буду ждать ваших предложений по необходимому функционалу и коррекции приоритетов задач из списка TODO, который можно найти в этом сообщении чуть ниже.
Концепт, нарисованный Чужим, к которому мы сейчас подбираемся:
ПожеланияПрошу сообщать о всех найденных ошибках, багах, пожеланиях и предложениях либо мне на почту: toforce@ya.ru, либо в прямо в эту тему, либо в тему просмотрщика на
форуме TTLG (eng). Так же, если возникают любые другие вопросы — обращайтесь!
Приветствуется распространение информации о данном проекте всеми возможными способами! Я буду очень благодарен за любое упоминание Dark Engine Viewer и моего сайта
forcesw.com в соцсетях.
БлагодарностиЯ очень благодарен:
— участникам сообщества Dark Fate, без которых этот просмотрщик вряд ли был бы создан, их ники в алфавитном порядке: Boris3000, Chuzhoi, HellRaiser, Maxim, nemyax, Zontik и другим…
— разработчикам и программистам, занимавшимся реверс-инжинирингом оригинального Dark Engine, и запустившим проект Open Dark Engine, без которого идея с ресурсами Thief для Force Engine никогда не состоялась бы, их ники в алфавитном порядке: Telliamed, Volca и всех, кто был причастен к этому.
— Juliusz Kaczmarek aka PinkDot, который помог добавить в программу поддержку формата миссий New Dark Engine, а так же помог в расшифровке формата динамических MESH-объектов.
— Randy Sybel aka Shadowspawn за то, что помог разобраться как использовать расшифрованные данные, полученные из динамических MESH-объектов.
— всем, кто каким-либо образом консультировал, поддерживал и мотивировал меня, включая Vorob’а и мою супругу Татьяну!
Спасибо вам всем!
Авторское правоИспользуя эту программу, вы соглашаетесь с тем, что её автор не несёт никакой ответственности за возможный вред, причиненный оборудованию или программному обеспечению, напрямую или косвенно связанный с использованием данной программы. Целью автора не является заражение вашего компьютера или распространение вирусов, поэтому критически отнеситесь к возможным предупреждениям антивирусного ПО.
Выдержки из TODO (приоритет указан не в строгом порядке)
ОШИБКИ:
- некоторые модели возвращают пустые списки полигонов в своих костях (поврежденная модель). Возможно, следует изменить алгоритм чтения, чтобы учитывать ВСЕ части модели, даже неиспользуемые?
- на конских разрешениях (значительно больше разрешения монитора) интерфейс работает некорректно (разрешение программы не совпадает с запрашиваемым по конфигурации)
ДОРАБОТКИ:
- менять не выдержку, а гамму клавишами "+" и "-".
- некоторые объекты, всё-таки, имеют неверную ориентацию: штурвал корабля в Shipping, сверло-бур в Cargo. Разобраться.
- добавить информацию о разрешении используемой текстуры для моделей
- раскрашенные цветом части модели имеют неправильную нормаль, из-за чего в режиме просмотра миссии с освещением выглядят абсолютно черными. Вернуть нормаль этим полигонам модели
- клавиши общего функционала, разворот на полный экран и др. должны работать в любом режиме программы
- добавить клавишу BACKSPACE - открытие родительского каталога (?)
- закрытие дескрипторов архивов и файлов после завершения работы с ними (загрузка уровней)
- linux: при запросе файла или каталога искать его без учета регистра
- linux: исправить падение при чтении каталога, к которому нет прав доступа (проверить в разных системах)
- обновление данных без перезагрузки интерфейса
- ошибку загружать без замены всего интерфейса
- добавить возможность в шаблоне проверять true/false для пустых/заполненных строк (с переходом на squirrel)
- убрать установку данных в шейдер отдельным методом схемы рендеринга (чтобы не переключать шейдер только для этого)
- можно сделать ленивую загрузку данных текстуры, отделив чтение заголовка от чтения данных цвета, это позволит избавиться от копирования памяти при использовании PBO, сразу читая данные в указатель видеопамяти, заодно можно будет выкинуть код, работающий без PBO
- позиционировать модель перед камерой с более презентативного угла (переместить камеру вправо и вверх)
- восстановить силуэты POM
- исправить отображение теней в режиме POM
- в зависимости от расстояния до объекта менять скорость скроллинга
- сделать hot-key, возвращающий вид в исходный
- вместо ошибок о неподдерживаемых типах текстур, выдавать default-текстуру
- потюнить автомасштаб при открытии модели когда дебажная отрисовка будет готова
- добавить тени для прожекторов (с переходом на кластерный рендерер)
- починить мягкие тени
- сейчас массив hullVertices кости содержат все вершины кости, надо высчитать из них только образующие convex hull (как вариант - использовать OBB - AABB в пространстве модели)
- источник света, находящийся вблизи стены рисует черный квадрат на этой стене (слишком большая разница между точностью глубины источника и камеры? перемещать плоскости отсечения в зависимости от объектов в сцене?)
- LEGACY HARDWARE: каталоги с русскими именами не сортируются (устанавливается ли локаль?)
- LEGACY HARDWARE: не отображаются каталоги, начинающиеся с точки
- добавить атрибут outline для шрифта
- выводить инфу об mtl файлах в интерфейсе
- цветами выделять текстуры из архивов/каталогов/дефолтную
- проверить что будет в критических ситуациях, когда шаблон вывода ошибки сам выводит ошибку
- стабильность, чтоб программа не падала при определенных значениях атрибутов интерфейса
- разрешить менять размер окна, при этом интерфейс не должен масштабироваться, а должен раздвигаться?
НОВЫЕ ФИШКИ:
- запись и чтение конфигурационного файла
- эффекты в режиме просмотра моделей
- направленный источник света
- изменение настроек программы средствами интерфейса
- создание тестовых миссий для демонстрации возможностей движка
- переделать работу с полигонами неба: не удалять их, а выводить кубмапу неба в них
- поддержка прозрачных цветов в палитре (первый цвет) и правильная отрисовка полупрозрачных полигонов
- добавление поддержки squirrel
- переделать шаблонизатор на использование squirrel, отказавшись от самописной логики
- кубмапы для фона просмотра модели на выбор (светлая/темная)
- если список использованных текстур не влезает в экран, выводить кнопку, открывающую всплывающую панель с прокручиваемым списком
- velocity и motion blur
- сохранение скриншотов
- поддержка анимированных текстур
- отображение джойнтов, вхотов, нормалей, костей скелета
- разбиение уровней на octree и загрузка только ближайших кусков
- генерация вокселей для небольших ячеек octree
- кластерный рендерер
- отказаться от кубмапы тени и использовать текстурный атлас (с переходом на кластерный рендерер)
- генерировать reflection probes в текстурный атлас
- GI
- pbr
- поддержка анимаций dark engine?
- добавить поддержку спецификации glTF
УДОБСТВА КОДА/РЕФАКТОРИНГ:
- отрефакторить менеджер команд и их обработку, сейчас слишком всё запутано и неудобно
- получать все синглтоны (менеджеры ресурсов) прямо по месту использования и не хранить ссылки на них в объектах? Или переделать всё на впрыскивание объектов?
- привязывать текстуры к шейдерным юнитам
- сделать bind-guard'ы для всех привязываемых ресурсов, это упростит код
- отделить исключения для вывода ошибки от фатальных исключений, закрывающих программу, чтобы избавиться от бесконечного цикла вызова ошибки из ошибки
- подумать над единобразием места конвертирования путей функцией formatAsPath() и нужно ли оно или достаточно оставить только в функции path()?
- добавить в шаблонизатор проверку условия true/false через оператор (не понадобится с переходом на squirrel)
- Uniform Buffer Object
ПОДУМАТЬ, НУЖНО ЛИ:
- если текстура была загружена в одном режиме (clamp/repeat), она не загрузится в другом
- прерывать выполнение команды при вызове другой (если их не может быть запущено несколько)?
- если пользовательский ввод не привел к изменениям - не перерисовывать кадр? Перерисовывать частично?
- adaptive shadow bias?
- скриншот с прозрачным фоном (?)
- подумать об отказе от ручной линеаризации цвета
- модель при таскании правой кнопкой перемещается не точно по курсору мыши
P.S.Сообщение будет обновляться.