Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: MetroEX - универсальный инструмент для работы с ресурсами игр серии Метро
GAMEINATOR forums > Общие разделы > Создание и модификация игр. Геймдев.
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17
Hellroon
Цитата(Egorich___ @ 14.04.2019, 21:21) *
iOrange, запили ресайз текстур в 64x64px, сравним производительность и как это будет выглядеть с RTX


так сказал будто это делается в один клик, и там текстур 10.
iOrange
Цитата(Thekello @ 31.03.2019, 19:20) *
каждый день читаю тему, и жду тот день когда увижу Выгрузку уровней))

Ожидайте в версии v0.5 wink_old.gif
Thekello
Цитата(iOrange @ 15.04.2019, 01:40) *
Цитата(Thekello @ 31.03.2019, 19:20) *
каждый день читаю тему, и жду тот день когда увижу Выгрузку уровней))

Ожидайте в версии v0.5 wink_old.gif

Отлично thank_you2.gif , ждать придется долго?))
iOrange
Цитата(Thekello @ 15.04.2019, 12:06) *
ждать придется долго?))

Будет зависеть от востребованности такого функционала.
Частично функционал есть в программе, просто заблокирован пока + есть наработки по остальным частям уровней.
Так что после выхода v0.4 (который уже очень скоро) нет, не долго.

Скриншот из старой версии программы
WolfHeart
Цитата(iOrange @ 15.04.2019, 21:49) *
Будет зависеть от востребованности такого функционала.

Думаю большая часть посетителей данной темы ждут этого.
Цитата(iOrange @ 15.04.2019, 21:49) *
Частично функционал есть в программе, просто заблокирован пока + есть наработки по остальным частям уровней.

Это просто не может не радовать.
Цитата(iOrange @ 15.04.2019, 21:49) *
Скриншот из старой версии программы

Можно поинтересоватся из какой именно? wink.gif

Ага, сам нашел, с v025 по v028c включительно. smile.gif

Правда и толку от этого пока мало, только поглядеть.
Thekello
Цитата(iOrange @ 15.04.2019, 21:49) *
Будет зависеть от востребованности такого функционала.
Частично функционал есть в программе, просто заблокирован пока + есть наработки по остальным частям уровней.
Так что после выхода v0.4 (который уже очень скоро) нет, не долго.

Спасибо, буду ждать smile.gif
iOrange
Цитата(WolfHeart @ 15.04.2019, 21:08) *
Правда и толку от этого пока мало, только поглядеть.

Потому и был заблокирован, ибо предстояла сложная задача - анимации.
На v0.4 планы - запаковка файлов в архивы и скармливание игре.
Потому на v0.5 - будут вам уровни, я же помню что а) когда-то обещал, б) просили же, значит востребовано.

WolfHeart
Цитата(iOrange @ 15.04.2019, 22:49) *
Потому и был заблокирован, ибо предстояла сложная задача - анимации.

Да это понятно, просто интересно было самому увидеть то, о чем не подозревал.
Цитата(iOrange @ 15.04.2019, 22:49) *
Потому на v0.5 - будут вам уровни

Ждем, ох как ждем, но не торопим.
Цитата(iOrange @ 15.04.2019, 22:49) *
я же помню что а) когда-то обещал,

Повода усомнится в твердости своего слова, ты нам не давал, так что мы в этом и не сомневаемся. wink1.gif
mopsyatina
Цитата(WolfHeart @ 15.04.2019, 22:08) *
Можно поинтересоватся из какой именно?

Ну ты коллекционер biggrin.gif
WolfHeart
Цитата(mopsyatina @ 16.04.2019, 00:53) *
Ну ты коллекционер

Ну уж нет. Просто взял себе за правило, пока идет разработка понравившегося мне проекта, до выхода финальной версии, сохранять предварительные.
В жизни всякое бывает. smile.gif
Thekello
Ребята, кто-нибудь сталкивался с такой проблемой, пытаюсь выгрузить динамическую модель в формат FBX, и зависает программа.
Тык
WolfHeart
Цитата(Thekello @ 18.04.2019, 16:44) *
кто-нибудь сталкивался с такой проблемой,

Если выгружаешь в FBX, то да сталкивались. У некоторых моделей очень много анимаций из за этого и зависает. Уважаемый iOrange, об этой проблеме уже знает и обещал решить ее. Если анимации тебе не нужны, пробуй выгрузить ее в .OBJ, должна нормально сохраниться.
P.S. Смотри Сообщение #549 и следующее за ним.
iOrange
Цитата(Thekello @ 18.04.2019, 15:44) *
Ребята, кто-нибудь сталкивался с такой проблемой, пытаюсь выгрузить динамическую модель в формат FBX, и зависает программа.

Да, к сожалению, FBX SDK умирает на большом количестве анимаций.
У некоторых моделей количество анимаций достигает количества в 11000 !

В версии v0.4 будут добавлены дополнительные опции экспорта, которые должны исправить ситуацию и дать больше контроля над процессом экспорта.

Приношу извинения за неудобства, сильно торопился выпустить версию с поддержкой анимаций, и не учел всех нюансов.
santaZX
Привет, хотелось узнать будет возможность скармливать архивы с новыми звуками кроме текстур?
Есть идея обновить ряд диалогов. wink.gif
iOrange
Цитата(santaZX @ 19.04.2019, 05:05) *
будет возможность скармливать архивы с новыми звуками кроме текстур?

Да
iOrange
Сегодня-завтра планируется релиз v0.4 + немного плохих новостей sad.gif (заранее прошу прощения)
WolfHeart
Цитата(iOrange @ 01.05.2019, 16:21) *
Сегодня-завтра планируется релиз v0.4

Это не может не радовать! bravo7kg.gif
Цитата(iOrange @ 01.05.2019, 16:21) *
+ немного плохих новостей

Цитата(iOrange @ 01.05.2019, 17:15) *
с Exodus меня обломали.

А вот это, очень сильно настораживает и пугает.
Не томи, мы-же спать не сможем. Что стряслось?
Не пугай нас, скажи что не все так страшно, как мы думаем. Обнадежь нас хотя-бы.
iOrange
Думаю что стоит выложить то, что должно было стать MetroEX v0.4
http://s.gameru.net/metro/MetroEX_v04.zip

Для начала я должен расписаться невыполнении обещанного... Я опрометчиво пообещал функционал, реализовать который (в полном объеме) я, на данный момент, не в состоянии.
Речь о пользовательских патч-архивах. Понадеявшись что поведение игры в этом плане не изменилось с прошлых частей, я имел неосторожность пообещать в слепую... Будет мне уроком.

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

Если это сейчас читают ребята из 4A Games - пожалуйста, не лишайте нас шатких надежд на моддинг! Я понимаю что издатель не дает добро, а существующее ограничение не просто так присутствует, но дайте нам крохотную лазейку, неофициальную, без поддержки и гарантий на 100% работу - это будет лучше чем ничего.

На данный же момент есть два способа изменять игровые данные:
1) Собирать изменения в архив patch_00.vfx, и подменять им существующий. Благо там всего 3 файла, и они малозначимы (есть в следующих архивах).
2) Заменять файлы в самом последнем архиве.

Первый вариант самый простой и безопасный, но позволяет менять только те файлы, которых нет в более поздних патч-архивах.

Второй вариант геморройный и крайне неудобный. Я даже делал утилиту для этого, но пока отмел эту идею, ибо мне она видится крайне неудачной.

Однако, если же 4A Games не пойдет нам на встречу (и винить я их не стану) - второй вариант станет, наверное, нашим единственным, и тогда я потрачу время на доработку утилиты и будем использовать его.

Вобщем, это были плохие новости. Возможно кому как, но мне это стоило многих бессонных ночей, нервов и небольшого срыва...

Теперь об изменениях вошедших в v0.4

Изначальная логика загрузки и экспорта анимаций была слишком оптимистична. Оказалось что некоторые модели содержат почти 11,000 (одинадцать тысяч) анимаций!
Одна лишь загрузка их в память кушала около 1,5 ГБ
Попытка экспорта такой модели в FBX заканчивалась неудачей - FBX SDK съедал всю доступную память и вешал процесс.

Была переделана логика загрузки и работы с анимациями - теперь они грузятся только по требованию, и в большинстве случаев вообще не потребляют памяти.

Так же были добавлены доп. опции экспорта в FBX:
* Export animations - определяет нужно ли вообще экспортировать анимации. Полезно если вам просто нужна модель в FBX, без анимаций
* Animations to separate files - имеет смысл только в паре с предыдущей опцией, и при включении будет экспортировать анимационные треки в отдельные FBX файлы. Т.е. на выходе будет FBX файл с моделью и скелетом, и рядом с ним FBX файлы, по одному на анимацию. Попытка экспорта моделей с 11,000 анимаций все равно займет прилично времени, но при этом памяти будет потребляться не много, и даже при сбое - у вас останутся те файлы, что успели записаться.

[1] Был доработан немного 3D просмотрщик моделей - теперь реализована "правильная" Arcball камера, так что вращать и рассматривать модели стало удобнее.
Так же был добавлен режим отображения сетки полигонов поверх модели.

[2] Добавлено окно отображения свойств модели. Там отображена вся информация о модели. Есть даже информация о том, кто и на каком компьютере создал эту модель, и имя оригинального файла.

[3] Добавлено окно отображения свойств текстур, находящихся в текстурной базе. Полезно тем, что вы можете найти там дополнительные текстуры, которые на данный момент не экспортирует программа (бамп, детали...)

[4] Добавлено окно настроек программы, настройки сохраняются в файл рядом в папку с программой. Пока там только настройки экспорта, но в будущем туда будут добавляться / выноситься больше настроек.

[5] Реализована заргузка, отображение, и экспорт локализационных файлов. Экспорт производится в формат Excel 2003.

[6] Добавлено меню инструментов, содержащее следующие тулзы:
- [7] Конвертер текстур в формат Metro Exodus. Умеет конвертировать как одиночный файл, так и папку (с подпапками).
- Конвертер локализационных файлов из формата Excel 2003 назад в формат Metro Exodus.
- [8] Злополучная утилита для создания патч-архивов. Указываете где лежит папка content, куда сохранять результирующий архив, и жмете кнопку. Остально за вас сделает программа.

Так же было переписано много кода, решались организационные вопросы, велись работы по функционалу, который войдет в v0.5, но об этом будет позже.

Дальше прикладываю скриншоты к отмеченным изменениям:
screenshots here

[1] Wireframe mode


[2] Model properties


[3] Textures database viewer


[4] Settings window


[5] Localization files support


[6] Tools menu


[7] Textures converter


[8] Archives tool

Z-O-M-B-I-E
iOrange, спасибо за фикс камеры, просмотр стал удобнее. И есть ли возможность отключить экспорт/показ коллизии на модели? В свойствах модели указывается меш коллизии, думаю ее можно отключить при экспорте (там или написано collision или название текстуры invalid), а так же возможность отключить экспорт текстур при экспорте моделей.
WolfHeart
Цитата(iOrange @ 02.05.2019, 08:03) *
Вобщем, это были плохие новости.

Фууух! Ну Слава Богу! Не все так плохо.
Цитата(iOrange @ 02.05.2019, 08:03) *
Возможно кому как, но мне это стоило многих бессонных ночей, нервов и небольшого срыва...

Ты это прекращай! Не бери все так близко к сердцу, от неудач никто не застрахован и никто тебя за это не осудит. Ты и так уже сделал то, на что мы и не расчитывали и к тому-же, не все еще потеряно, есть еще надежда, что тебя, нас услышат. А по сему, подписываюсь под каждым твоим словом в обращении к 4A Games:

Цитата(iOrange @ 02.05.2019, 08:03) *
Если это сейчас читают ребята из 4A Games - пожалуйста, не лишайте нас шатких надежд на моддинг! Я понимаю что издатель не дает добро, а существующее ограничение не просто так присутствует, но дайте нам крохотную лазейку, неофициальную, без поддержки и гарантий на 100% работу - это будет лучше чем ничего.


Цитата(iOrange @ 02.05.2019, 08:03) *
Так же было переписано много кода, решались организационные вопросы, велись работы по функционалу, который войдет в v0.5, но об этом будет позже.

А вот это самая хорошая новость на сегодня!
Хорошая по тому, что работа продолжается, не остановлена, а то ведь уже не весть что думать начали. biggrin1.gif

Цитата(iOrange @ 02.05.2019, 08:03) *
Теперь об изменениях вошедших в v0.4

Все круто! bravo7kg.gif
Низкий тебе поклон. thank_you2.gif
Пошел тестить.
Thekello
Цитата(iOrange @ 02.05.2019, 08:03) *
Думаю что стоит выложить то, что должно было стать MetroEX v0.4
http://s.gameru.net/metro/MetroEX_v04.zip

Огромное Спасибо и Низкий вам поклон bravo7kg.gif
iOrange
Цитата(Z-O-M-B-I-E @ 02.05.2019, 10:33) *
И есть ли возможность отключить экспорт/показ коллизии на модели?

Коллизии я и не загружаю, только рендер геометрию... Но спасибо за скриншот, действительно странный меш.
Возможно это та же странная геометрия, что и у некоторых деревьев.
Проверю, и если что - исправлю.

Цитата(Z-O-M-B-I-E @ 02.05.2019, 10:33) *
возможность отключить экспорт текстур при экспорте моделей.

Добавлю.

Цитата(WolfHeart @ 02.05.2019, 10:41) *
Хорошая по тому, что работа продолжается

Ну я пока и не собирался прекращать, пока все еще теплеется надежда.

Тут у Epic Store в планах на Июнь - поддержка модов. И у меня есть призрачная надежда на то, что 4A Games тоже ждет этой фичи магазина...

Цитата(WolfHeart @ 02.05.2019, 10:41) *
Пошел тестить.

Ваши отзывы помогают сделать программу лучше, спасибо.

Цитата(Thekello @ 02.05.2019, 11:15) *
Огромное Спасибо

rolleyes.gif
Z-O-M-B-I-E
iOrange, это не странная геометрия, а коллизия, она не на всех моделях. Она загружается и экспортируется вместе с моделью. Но по скольку она обозначена в файле моделей как collision или просто меш, с текстурой invalid (или то и другой вместе). То я думаю не сложно реализовать ее отключение при экспорте.

iOrange
Цитата(Z-O-M-B-I-E @ 02.05.2019, 15:32) *
это не странная геометрия, а коллизия, она не на всех моделях

Да, уже вижу. Добавление окна с информацией о модели дало свои плоды.
Спасибо за наблюдательность, в ближайшее время внесу правки и загружу новую версию.
iOrange
Кстати, забыл упомянуть одну мелочь - забавы ради добавил поддержку архивов обоих Redux версий метро (2033 / Last Light) и Arktika.1
Но это побочный эффект, и вряд ли я буду это развивать.
Но как минимум можно открыть архив и распаковать нужные вам папки, вдруг будет кому полезно.
Z-O-M-B-I-E
iOrange, открывает, только модели не просматривает, хотя информацию о них выдает вроде.
Thekello
Цитата(iOrange @ 02.05.2019, 17:56) *
Кстати, забыл упомянуть одну мелочь - забавы ради добавил поддержку архивов обоих Redux версий метро (2033 / Last Light) и Arktika.1
Но это побочный эффект, и вряд ли я буду это развивать.
Но как минимум можно открыть архив и распаковать нужные вам папки, вдруг будет кому полезно.

Тема очень хорошая, я думаю её стоит развивать smile.gif , будет очень классно, если через MetroEX можно будет распаковывать модели и уровни из Redux сразу в OBJ или FBX. Это прям сказка wink.gif
Raily
Цитата(Thekello @ 02.05.2019, 19:28) *
Тема очень хорошая, я думаю её стоит развивать , будет очень классно, если через MetroEX можно будет распаковывать модели и уровни из Redux сразу в OBJ или FBX. Это прям сказка

Если MetroEX будет поддерживать Redux на таком-же уровне как Exodus(Без анимаций), это будет супер классно smile.gif
iOrange
Цитата(Thekello @ 02.05.2019, 18:28) *
Тема очень хорошая, я думаю её стоит развивать

Цитата(Raily @ 02.05.2019, 20:56) *
это будет супер классно

Добавил в список задач с низким приоритетом.
WolfHeart
iOrange, Запросы растут. Сначала просили 2033 и Last Light добавить, теперь уже и Redux-ы подавай.
С нами без дела не останешся. mosking.gif

P.S. Я не знаю на сколько это сложная задача, в виду растущих аппетитов, создать такой себе "комбайн", все в одном. Может есть смысл тогда это поделить, по принципу SDK для Сталка, SoC_SDK, CS_SDK, CoP_SDK?
iOrange
Цитата(WolfHeart @ 02.05.2019, 21:21) *
Сначала просили 2033 и Last Light добавить

Ниже Redux версий я точно не буду обещать поддержку, ибо это действительно будет много работы.
А вот Redux'ы добавить вполне по силам, но прошу меня понять - есть более приоритетные задачи, так что эта - как говорится "если будет свободная минутка", коих и так нет.
WolfHeart
Цитата(iOrange @ 02.05.2019, 22:23) *
Ниже Redux версий

Бррр...
Извини что отвлекаю, но чет я совсем запутался.
Дело в том, что я увлекся Метро только после релиза Exodus-а. И считал, что основные это 2033, LL и Exodus, а Redux-ы, это уже как дополнения.
Так что ты имеешь в виду ниже Redux версий? Ниже есть еще что-то, или ты ниже имеешь в виду 2033, LL?
iOrange
Цитата(WolfHeart @ 02.05.2019, 21:33) *
Так что ты имеешь в виду ниже Redux версий?

Сначала вышли Metro 2033 и Metro Last Light.

Через некоторое время, они были перевыпущены (Redux Edition).
На новом движке, устройство которого очень близко к Exodus (и Arktika.1).

Так вот те "старые" версии (оригинальные 2033 и Last Light) я не собираюсь поддерживать.

А Redux версии 2033 и Last Light - ок.
WolfHeart
Цитата(iOrange @ 02.05.2019, 23:11) *
А Redux версии 2033 и Last Light

Ага, теперь понял. Благодарю за просвещение!
А то ведь я думал что в Redux-ах просто дополнение.
iOrange
Цитата(Z-O-M-B-I-E @ 02.05.2019, 10:33) *
есть ли возможность отключить экспорт/показ коллизии на модели

Цитата(Z-O-M-B-I-E @ 02.05.2019, 10:33) *
а так же возможность отключить экспорт текстур при экспорте моделей.

Добавил.
В версии MetroEX v0.41 добавлены опции экспорта моделей


Так же добавлена кнопка на панели для включения / выключения показа колизии (если таковая есть).
примеры

Включено:


Выключено:


Ну и злополучные деревья, кстати. Помню кто-то в этой теме на них жаловался.
Включено:


Выключено:



Ну и по традиции - небольшой бонус - теперь зажав правую кнопку мышки можно перемещать модель.
Так же на панели инструментов появилась кнопка сброса камеры, для удобства.

Внимание: перенесите файл settings.mex из прошлой версии программы в папку с новой, если хотите сохранить ваши текущие настройки.

http://s.gameru.net/metro/MetroEX_v041.zip
Z-O-M-B-I-E
Спасибо за оперативность, но коллизия все равно экспортируется (в любой формат), даже если галка стоит (будто при экспорте это просто игнорируется). Отключение экспорта текстур работает. Так же есть модели, где несколько коллизий, но как я понимаю, программа и с ними работает без проблем, все коллизии скрывает.


Было бы не плохо еще отключить показ nxcform33x файлов, для удобства.
WolfHeart
Цитата(Z-O-M-B-I-E @ 03.05.2019, 13:58) *
Было бы не плохо еще отключить показ nxcform33x файлов, для удобства.

А так-же, если возможно, отключить экспорт не нужных файлов *.ph_model *.mesh *.bin *.nxcform33x, при массовом экспорте в obj или fbx всей папки meshes. И уж совсем замечательно было бы, если бы при этом экспортировались и текстуры в папку textures с возможностью выбора формата. blush1.gif
iOrange
Цитата(Z-O-M-B-I-E @ 03.05.2019, 12:58) *
будто при экспорте это просто игнорируется

Прошу прощения, замотался.
Исправлено, просто перекачайте v0.41
Спасибо за бдительность!

Цитата(Z-O-M-B-I-E @ 03.05.2019, 12:58) *
отключить показ nxcform33x файлов

Цитата(WolfHeart @ 03.05.2019, 13:09) *
отключить экспорт не нужных файлов *.ph_model *.mesh *.bin *.nxcform33x, при массовом экспорте в obj или fbx всей папки meshes

Добавил в список на подумать.

Цитата(WolfHeart @ 03.05.2019, 13:09) *
И уж совсем замечательно было бы, если бы при этом экспортировались и текстуры в папку textures с возможностью выбора формата

Да, это у меня есть в списке, просто руки не дошли пока.
Thekello
Цитата(iOrange @ 03.05.2019, 07:21) *
Добавил.
В версии MetroEX v0.41 добавлены опции экспорта моделей

Большое Спасибо за обновление good.gif
Z-O-M-B-I-E
iOrange, сейчас все работает, большое спасибо! Надеюсь поддержка редукса не за горами, хотя бы просмотр и эскпорт моделей с отключением коллизии, ибо плагин для макса грузит все подряд, а коллизию от модели порой не отличить.
Imon
iOrange,Большое Спасибо за вашу программу, сейчас попробовал выгрузить модель из Redux, выгрузилась но увы без текстур, я не вкоем случае не тороплю, если у вас появится время заняться Redux, пожалуйста, добавьте выгрузку модели с текстурами smile.gif .
iOrange
Цитата(Imon @ 03.05.2019, 20:14) *
попробовал выгрузить модель из Redux, выгрузилась но увы без текстур

o_O.gif

Однако, это неожиданно. Хехе. Ну раз так просите, постараюсь поправить чтоб работали Redux версии.
Но в анимации впрягаться не буду, сразу говорю.

Кстати - тут народ уже развлекается )))



ed_rez
Цитата(WolfHeart @ 02.05.2019, 21:21) *
Может есть смысл тогда это поделить, по принципу SDK для Сталка, SoC_SDK, CS_SDK, CoP_SDK?

Эх, как тут развивается тема, так бы и о перечисленном. biggrin.gif


iOrange,
благодарю за новую версию! thank_you2.gif
iOrange
Небольшой тизер wink_old.gif

Thekello
Цитата(iOrange @ 05.05.2019, 03:41) *
Небольшой тизер wink_old.gif


Опа, + настроение wink.gif
GoatZombie
Superb work! Thank you very much, I really appreciate the time and effort you put into this! Like all changes you made so far.

1. Most of the "skeletal" models triangles are skewed when previewing its animation in render panel, but when I export the mesh animations as separate files, import it into Unreal engine (as is) it fails to import the animation, but it succeed to import when I reexport (just import -> export) it with 3DS MAX. And it looks fine for most of them that I tried.

2. Since most meshes have normal map associated with them could you possibly add basic normal mapping support in preview window (render panel) with directional light.
I have done it myself somewhat, but I am not that experienced and could be bugs somewhere.

MetroEX ORIGINAL

https://i.imgur.com/a90UTn4.png
https://i.imgur.com/C07uzeU.png

MetroEX WITH NORMAL MAPPING

https://i.imgur.com/MNJahJF.png
https://i.imgur.com/XwNhvA6.png

Changes I made:
RenderPanel.h
CODE
struct RenderGeometry {
        ID3D11Buffer*   vb;
        ID3D11Buffer*   ib;
        size_t          numFaces;
        RenderTexture*  texture;
        RenderTexture*  texture2; // normal map
        bool            isCollision;
    };

struct ConstantBufferData {
        vec4 modelBSphere;
        mat4 matModel;
        mat4 matView;
        mat4 matProjection;
        mat4 matModelView;
        mat4 matModelViewProj;
        mat4 matModelInvTranspose; // world-inverse-transpose, might not be necessary with uniform scaling only
        vec4 camParams;
        mat4 bones[256];
    };


MetroTypes.h
CODE
PACKED_STRUCT_BEGIN
struct MetroVertex {
    vec3        pos;
    uint8_t     bones[4];
    vec4        normal;
    uint8_t     weights[4];
    vec2        uv0;
    vec2        uv1;
    vec4        tangent; // added tangent vector
} PACKED_STRUCT_END;


RenderPanel.cpp InitGraphics function, changed vertex input layout to match
CODE
D3D11_INPUT_ELEMENT_DESC vsDesc[] = {
            { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT,    0, offsetof(MetroVertex, pos),     D3D11_INPUT_PER_VERTEX_DATA, 0},
            { "TEXCOORD", 0, DXGI_FORMAT_R8G8B8A8_UINT,      0, offsetof(MetroVertex, bones),   D3D11_INPUT_PER_VERTEX_DATA, 0},
            { "TEXCOORD", 1, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, offsetof(MetroVertex, normal),  D3D11_INPUT_PER_VERTEX_DATA, 0},
            { "TEXCOORD", 2, DXGI_FORMAT_R8G8B8A8_UNORM,     0, offsetof(MetroVertex, weights), D3D11_INPUT_PER_VERTEX_DATA, 0},
            { "TEXCOORD", 3, DXGI_FORMAT_R32G32_FLOAT,       0, offsetof(MetroVertex, uv0),     D3D11_INPUT_PER_VERTEX_DATA, 0},
            { "TEXCOORD", 4, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, offsetof(MetroVertex, tangent),     D3D11_INPUT_PER_VERTEX_DATA, 0}
        };


RenderPanel.cpp added utility function to calculate tangent vectors
CODE
void CalcTangentVector(MetroVertex& v1, MetroVertex& v2, MetroVertex& v3)
{
    vec4 tangent   = vec4(1.0f, 0.0f, 0.0f, 1.0f);
    vec3 bitangent = vec3(0.0f, 1.0f, 0.0f);

    vec3 edge1 = v2.pos - v1.pos;
    vec3 edge2 = v3.pos - v1.pos;

    vec3 normal = glm::normalize(glm::cross(edge1, edge2));

    edge1 = glm::normalize(edge1);
    edge2 = glm::normalize(edge2);

    vec2 texEdge1 = v2.uv0 - v1.uv0;
    vec2 texEdge2 = v3.uv0 - v1.uv0;

    texEdge1 = glm::normalize(texEdge1);
    texEdge2 = glm::normalize(texEdge2);

    float det = (texEdge1.x * texEdge2.y) - (texEdge1.y * texEdge2.x);

    if (fabsf(det) >= 1e-6f)
    {
        det = 1.0f / det;

        tangent.x = (texEdge2.y * edge1.x - texEdge1.y * edge2.x) * det;
        tangent.y = (texEdge2.y * edge1.y - texEdge1.y * edge2.y) * det;
        tangent.z = (texEdge2.y * edge1.z - texEdge1.y * edge2.z) * det;
        tangent.w = 0.0f;

        bitangent.x = (-texEdge2.x * edge1.x + texEdge1.x * edge2.x) * det;
        bitangent.y = (-texEdge2.x * edge1.y + texEdge1.x * edge2.y) * det;
        bitangent.z = (-texEdge2.x * edge1.z + texEdge1.x * edge2.z) * det;

        tangent   = glm::normalize(tangent);
        bitangent = glm::normalize(bitangent);
    }

    vec3 t = tangent;
    vec3 b;

    b = glm::cross(normal, t);
    tangent.w = (glm::dot(b, bitangent) < 0.0f) ? -1.0f : 1.0f;

    v1.tangent = tangent;
    v2.tangent = tangent;
    v3.tangent = tangent;
}


RenderPanel.cpp modified CreateModelGeometries function
CODE
// MetroModel.h
//MetroMesh*        GetMesh(const size_t idx) const; // removed return constness to be able to change verts without making new copies

//vb
for (int i = 0; i < mesh->faces.size(); i++)
                    {
                        auto& v1 = mesh->vertices[mesh->faces[i].a];
                        auto& v2 = mesh->vertices[mesh->faces[i].b];
                        auto& v3 = mesh->vertices[mesh->faces[i].c];
                        CalcTangentVector(v1, v2, v3);
                    }


                    desc.ByteWidth = scast<UINT>(mesh->vertices.size() * sizeof(MetroVertex));
                    desc.Usage = D3D11_USAGE_DEFAULT;
                    desc.BindFlags = D3D11_BIND_VERTEX_BUFFER;
                    subData.pSysMem = mesh->vertices.data();
                    mDevice->CreateBuffer(&desc, &subData, &rg->vb);


RenderPanel.cpp CreateTexture function, added normal map
CODE
...
String^ texNameManaged = ToNetString(textureName);
                String^ texNameManaged2 = ToNetString(textureName + std::string("_nm"));

                const bool contains = mModelTextures->ContainsKey(texNameManaged);
                if (!contains)
                {
                    CharString texturePath = CharString("content\\textures\\") + (sourceName.empty() ? textureName : sourceName);

                    CharString texturePathBest = texturePath + ".512";
                    size_t textureIdx = VFXReader::Get().FindFile(texturePathBest);

                    rg->texture2 = nullptr;
                    CharString texturePathBest2 = texturePath + "_nm.512";
                    size_t textureIdx2 = VFXReader::Get().FindFile(texturePathBest2);

                    if (textureIdx != MetroFile::InvalidFileIdx) {
                        MemStream stream = VFXReader::Get().ExtractFile(textureIdx);
                        if (stream) {
                            const MetroFile& mf = VFXReader::Get().GetFile(textureIdx);

                            MetroTexture texture;
                            if (texture.LoadFromData(stream, mf.name)) {
                                RenderTexture* rt = new RenderTexture;
                                this->CreateRenderTexture(&texture, rt);
                                mModelTextures->Add(texNameManaged, IntPtr(rt));

                                rg->texture = rt;
                            }
                        }
                    }

                    if (textureIdx2 != MetroFile::InvalidFileIdx) {
                        MemStream stream = VFXReader::Get().ExtractFile(textureIdx2);
                        if (stream) {
                            const MetroFile& mf = VFXReader::Get().GetFile(textureIdx2);

                            MetroTexture texture;
                            if (texture.LoadFromData(stream, mf.name)) {
                                RenderTexture* rt = new RenderTexture;
                                this->CreateRenderTexture(&texture, rt);
                                mModelTextures->Add(texNameManaged2, IntPtr(rt));

                                rg->texture2 = rt;
                            }
                        }
                    }
                }
...


RenderPanel.cpp Render function, set const buffer additional matrix and pass normal map to pixel shader
CODE
...
auto invTrn = glm::inverse(mConstantBufferData->matModel);
            mConstantBufferData->matModelInvTranspose = glm::transpose(invTrn);
...
ID3D11ShaderResourceView* texSRV = (rg->texture) ? rg->texture->srv : nullptr;
                            pin_ptr<ID3D11ShaderResourceView*> srvPtr(&texSRV);
                            mDeviceContext->PSSetShaderResources(0, 1, srvPtr);

                            ID3D11ShaderResourceView* texSRV2 = (rg->texture2) ? rg->texture2->srv : nullptr;
                            pin_ptr<ID3D11ShaderResourceView*> srvPtr2(&texSRV2);
                            mDeviceContext->PSSetShaderResources(1, 1, srvPtr2);


Shaders:

common.hlsli
CODE
struct VSOutput {
    float4 pos      : SV_Position;
    float4 normal   : TEXCOORD0;
    float2 uv       : TEXCOORD1;
    float3 tangent  : TEXCOORD2;
    float3 binormal : TEXCOORD3;
    float3 normalWS : TEXCOORD4;
};

cbuffer ConstantBuffer0 : register(b0)
{
    float4            BSphere;
    row_major matrix  MatModel;
    row_major matrix  MatView;
    row_major matrix  MatProjection;
    row_major matrix  MatModelView;
    row_major matrix  MatModelViewProj;
    row_major matrix  MatModelInvTrans; // new
    float4            CamParams;          // x - FOV, y - aspect, zw - vacant
    row_major matrix  Bones[256];
};


ModelViewerVS.hlsl
CODE
...
struct VSInput {
    float3  pos     : POSITION;
    uint4   bones   : TEXCOORD0;
    float4  normal  : TEXCOORD1;
    float4  weights : TEXCOORD2;
    float2  uv      : TEXCOORD3;
    float4 tangent  : TEXCOORD4; // new
};

VSOutput main(VSInput IN)
{
    VSOutput OUT;

    float3 skinnedPos, skinnedNorm;
    Skin(IN, skinnedPos, skinnedNorm);

    OUT.pos = mul(float4(skinnedPos - BSphere.xyz, 1.0f), MatModelViewProj);
    OUT.normal.xyz = mul(skinnedNorm, (float3x3)MatModelView);
    OUT.normal.w = IN.normal.w;
    OUT.uv = IN.uv;

    OUT.normalWS = mul(IN.normal.xyz, (float3x3)MatModelInvTrans);
    OUT.tangent  = mul(IN.tangent.xyz, (float3x3)MatModelInvTrans);
    OUT.binormal = cross(OUT.normalWS, OUT.tangent) * IN.tangent.w;

    return OUT;
}


ModelViewerPS
CODE
#include "common.hlsli"

Texture2D TexAlbedo     : register(t0);
Texture2D TexNormal     : register(t1);
SamplerState Sampler0   : register(s0);

float4 main(VSOutput IN) : SV_Target0
{
    float3 normalMap = TexNormal.Sample(Sampler0, IN.uv).rgb * 2.0f - 1.0f;

    float3x3 tangentBasis = float3x3(normalize(IN.tangent), normalize(IN.binormal), normalize(IN.normalWS));
    float3 normal = normalize(mul(normalMap, tangentBasis));

    float ambient   = 0.32f;
    float3 lightDir = normalize(float3(0.5f, 0.35f, 0.5f));
    float diffuse   = clamp(dot(normal, lightDir), ambient, 1.0f);

    float vao = IN.normal.w;

    float clipAlpha = 0.1f;
    float4 albedo = TexAlbedo.Sample(Sampler0, IN.uv);
    clip(albedo.a - clipAlpha);

    return float4(albedo.rgb * diffuse * vao, 1.0f);
}


and CubemapViewerVS.hlsl
CODE
#include "common.hlsli"

VSOutput main(uint vertexId : SV_VertexID) {
    VSOutput OUT;

    const float idDiv2 = (float)(vertexId / 2);
    const float idMod2 = (float)(vertexId % 2);

    OUT.pos = float4(idDiv2 * 4.0f - 1.0f, idMod2 * 4.0f - 1.0f, 0.0f, 1.0f);
    OUT.normal = 0.0f;
    OUT.uv = float2(idDiv2 * 2.0f, 1.0f - idMod2 * 2.0f);

// not using these
    OUT.tangent  = 0.0f;
    OUT.binormal = 0.0f;
    OUT.normalWS = 0.0f;

    return OUT;
}


Hopefully I didn't miss anything else.




iOrange
Цитата(GoatZombie @ 05.05.2019, 14:45) *
Superb work! Thank you very much, I really appreciate the time and effort you put into this!

Hi! Thanks for the feedback smile.gif

As for the changes - if you want to contribute - you can make a pull-request on Github, I'll review the code and will include the code if everything is ok.

As for normalmapping - didn't add it because of reasons (need to make proper materials system, make proper rendering framework etc.)

Version v0.5 will include lots of changes, as well as new renderer, so stay tuned wink.gif

As for the code you've posted - no need to calculate TBN since it's there already (aux0 will contain tangent if normalmapped)
iOrange
Выкладываю версию v0.42
Если не будет серьезных косяков - то это будет последняя версия перед v0.5

Что в ней:
* Исправлен экспорт единичной модели в FBX (не всегда правильно реагировала на настройки)
+ Добавлена поддержка текстур и моделей Redux версий Метро (просмотр + экспорт)

Напоминаю что все что не является Metro Exodus - есть неприоритетным и малоинтересным для меня.
Однако, я решил потратить немного времени, и добавить минимальную поддержку, потому что понимаю что для них утилит удобных практически нет.

Надеюсь на ваше понимание, хочу полностью сосредоточиться на версии v0.5, ибо там работы еще море.

http://s.gameru.net/metro/MetroEX_v042.zip
Thekello
Цитата(iOrange @ 06.05.2019, 07:55) *
Выкладываю версию v0.42
Если не будет серьезных косяков - то это будет последняя версия перед v0.5

Спасибо вы Волшебник wink.gif
ed_rez
iOrange,
на сколько трудозатратно сделать поддержку файлов уже распакованных игровых файлов, к примеру, моделей, с текстурами и так все ясно?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.