14.09.2015, 03:14 | #81 |
Местный
Регистрация: 12.07.2015
Сообщений: 417
|
Спасибо, конечно, за спасибо! Но!
Есть большая ж. Даже так - Ж! Группы сглаживания в Иловских мешах не сохраняются! Для того, чтобы ускорить загрузку моделей в игре, иловский меш уже содержит все необходимые, предварительно рассчитанные нормали. Т.е., в таком подходе большой плюс в том, что у тебя все необходимые данные просто грузятся в буферы и отдаются на отрисовку. Не надо на этапе загрузки моделей рассчитывать нормали (а это занимает время и требует определённых манипуляций с данными). Разработчики не ставили целью возможность восстановить модель из своего формата, им это не нужно было, у них модели и так были в наличии. А вот скорость загрузки моделей и простата манипуляций с ними для них важна. Я уже давно ломаю голову над тем, как можно из имеющихся данных попробовать восстановить группы сглаживания. К сожалению простых и надёжных способов для этого нет. И открытых алгоритмов для этого, похоже тоже нет. Беглым просмотром в гугле я ничего толкового на эту тему не нашел, даже намёков на решение. Придётся придумывать самостоятельно, а это очень трудоёмкая и непростая задача. Не знаю, буду ли я этим вообще заниматься. Было бы хотя бы годное описание мат аппарата для этой задачи, хоть можно было бы оценить во что это выливается. У меня опыта в решении такого рода задач нет. Как я уже говорил, 3Д я раньше вообще не занимался. Сложность в том, что группа сглаживания задаёт некоторые области для которых нормали должны рассчитываться определённым, заданым автором модели, образом. И группа, как раз, и содержит в себе эти параметры. И в иловском меше, кроме уже рассчитанных нормалей, следов этого определения нет. А нормаль - это уже результат вычислений по заданным в группе правилам. Значит надо проходить по всем полигонам и каким-то образом определять степень искривления поверхности, группировать полученные данные определённым образом и потом пытаться понять является ли некоторая группа полигонов обеденённой в одну группу сглаживания, либо нет. В принципе, наименее сложно выделить группы полигонов (для плоских поверхностей), у которых сглаживание было отключено, у них все нормали принадлежащих им вершин в замкнутой поверхности смотрят в одну сторону и параллельны. Но даже это без гарантии, по крайней мере у меня нет сейчас уверенности в том, что это не будет искажать результат. Вот такие пироги. Последний раз редактировалось NB79; 14.09.2015 в 03:30. |
14.09.2015, 03:16 | #82 |
Местный
Регистрация: 12.07.2015
Сообщений: 417
|
Переделал сохранение obj-а (всё ещё не полное, пока надо разобраться что не так с загрузкой). Проверьте, пож., будет Макс его грузить, или нет. И если загрузит, то всё ли нормально.
|
14.09.2015, 15:07 | #83 |
нужно больше чамфера!
|
Ого, как все сложно... У меня маленький опыт экспорта. При моих попытках слетал мапинг или игра не видела сам меш. Да же не знаю чем помочь. Разве что только попробовать сделать экспорт. Колизий, хуков для макса у меня нет. Но есть распакованный ил, так что это не помеха.) Если нужно что, попробую помочь.
|
14.09.2015, 15:25 | #84 | |
нужно больше чамфера!
|
Цитата:
|
|
14.09.2015, 16:13 | #85 |
Местный
|
А какие сохраняют без наличия других проблем?
Может тогда есть возможность сразу конвертнуть в .max? |
14.09.2015, 16:17 | #86 |
нужно больше чамфера!
|
ндык .obj. В идеале .fbx.
Последний раз редактировалось Pumping_Noise; 14.09.2015 в 20:00. |
14.09.2015, 16:40 | #87 |
нужно больше чамфера!
|
Макс открывает. Материалы, мапинг вроде на месте. Только носом вниз почему-то.
|
14.09.2015, 16:46 | #88 | |
Пытающийся полететь
|
Цитата:
Используемые текстуры дописал по аналогии как конвертер MSFX пишет в создаваемый файл .mtl при сохранении в OBJ newmtl Glass2 Ns 50.0000 Ni 1.5000 d 1.0000 Tr 0.0000 Tf 1.0000 1.0000 1.0000 illum 2 Ka 0.9176 0.9176 0.9176 Kd 0.9176 0.9176 0.9176 Ks 0.0000 0.0000 0.0000 Ke 0.0000 0.0000 0.0000 map_Kd glass.tga newmtl Gloss1D0o Ns 50.0000 Ni 1.5000 d 1.0000 Tr 0.0000 Tf 1.0000 1.0000 1.0000 illum 2 Ka 0.8353 0.9176 0.9176 Kd 0.8353 0.9176 0.9176 Ks 0.0000 0.0000 0.0000 Ke 0.0000 0.0000 0.0000 map_Kd skin1o.tga 2. Имеются странности в вашем файле. Тоесть с текстурами файл открывается MSFX конвертере и показывает нормальный маппинг на экране, 2.1 при сохранении в 3ds в этом MSFX конвертере и последующей загрузке этого 3ds в макс маппинг становится такой же неправильный как и в описании пункта 3 ниже 3. При загрузке вашего obj стразу в макс2012 вроде все нормально, но маппинг НЕ ПРАВИЛЬНЫЙ !!! показывает Пробовал сразу в максе разобраться куда сдвинут маппинг и вот картинки в архиве. 4. Там еще "заплатками" имеются полигоны использующие материал NULL. На скрине из макса это БЕЛО_ГОЛУБЫМ цветом они показываются. Эти полигоны вроде тоже выводятся, правда в списке материалов в максе материал NULL отсутсятвует. В подготовленных для экспорта в игру файлах этот материал часто присутствует и назначен определенным дополнителшьным полигонам. Насколько мне известно эти полигоны с материалом NULL используются для закрытия СТЫКОВ мешей . Этот материал NULL для меня пока темное дело, тут например должен У2 подключится и пояснить наверное. Последний раз редактировалось carsmaster; 14.09.2015 в 17:27. |
|
14.09.2015, 17:13 | #89 |
Пытающийся полететь
|
|
14.09.2015, 20:12 | #90 | ||
Местный
Регистрация: 18.01.2012
Сообщений: 792
|
Цитата:
Файлы объектов наземки используют обычно только два основных метериала, но и там нужно по-хорошему оставлять для NULL материала ID1. Я всегда считал, что из текстового меша фейсы с материалом нуль не восстановить, т.к. сами фейсы в текстовый меш не идут, а используются для просчёта нормалей смежных фейсов. Пример на практике применения материала NULL был рассмотрен choisek-ом в теме E13A, где он сглаживал им заслонки радиаторов на капоте. Также, сколько я видел конвертеров мешей, ни один из них абсолютно корректно группы сглаживания не восстанавливал, и файлик приходилось пилить вручную. А ну и про масштаб напомню, хорошо бы, чтобы при импорте в макс можно было указывать масштаб вручную, тк в иле принято модели в максе делать в масштабе 20:1. Цитата:
Последний раз редактировалось yt2; 14.09.2015 в 20:16. |
||
14.09.2015, 20:35 | #91 | |
Пытающийся полететь
|
Цитата:
Хотя с другой стороны, может забить на этот NULL и от безисходности смирится с последующим вручную работой в максе с этим материалом ? Или как предложил У2 просто забить место в списке материалов для NULL в виде ID1 Последний раз редактировалось carsmaster; 14.09.2015 в 20:38. |
|
14.09.2015, 21:14 | #92 | |
Местный
Регистрация: 12.07.2015
Сообщений: 417
|
Цитата:
Скины у самолётов в формате IMF. У TGA формата в заголовке есть флажок указывающий на то, как сканлайны в файле идут. Если он не установлен, то идут сверху вниз. Если установлен, то снизу вверх. У IMF такого флага нет. При конвертации из IMF в TGA этот флаг нужно всегда устанавливать, в IMF сканлайны идут снизу вверх (по крайней мере другого ни разу я не видел). При просмотре TGA файла вьювер ориентируется на этот флаг и соответственно начинает выводить картинку либо сверху вниз, либо снизу вверх. И всегда на экране мы её будем видеть правильно. Но вот при операциях с файлом, если мы этот флаг будем игнорировать, то при установленном флаге картинка будет перевёрнута вверх ногами. На скришотах я вижу, что изображение перевёрнуто относительно маппинга. Сам маппинг я не трогаю, как он был в Иловском меше, так я его и отдаю наружу. У себя, при отрисовке модели, я всегда смотрю, надо ли переворачивать картинку перед тем, как текстуру биндить. Если надо, я меняю верх с низом. Текстуры рисуются правильно. И ваш конвертер для MSFX тоже маппинг показывает правильно, значит он тоже смотрит на этот флаг и при биндинге текстур, если надо, переворачивает их. Возможно, что Максу надо принудительно переворачивать текстурные координаты. Но если это так, то это очень неприятно. Во-первых, это чревато различными не предсказуемыми косяками. Во-вторых, возникает путаница в текстурах, становится непонятно, когда надо переворачивать, когда нет. Мне не нравится даже сама идея, что надо что-то менять во входном потоке, и без этого во всёй это процедуре конвертации проблем масса. Может в Максе есть какая ни будь настройка, в которой указывается, что у текстуры надо верх с низом поменять местами? Хотя это всё равно очень странно. |
|
14.09.2015, 21:35 | #93 |
Пытающийся полететь
|
вы правы, отразил текстуру в фотошопе по вертикали и в вашем файле маппинг стал нормально видится в максе.
Вот и думаю в чем засада, в ИЛ-2 впервые сталкиваюсь с таким .Текстуры из IMF в TGA перегонял проверенным безлтказным ViewIMF-V1_0.exe Так как МАКС c IMF(из ИЛ-2) не может работать С таким "переверт" текстурами сталкивался в MSFX или X-Plane , когда они используют текстуры DDS. Там тоже бывает приходится для работы с моделью в максе перевертывать текстуры. В ИЛ-2 с таким сталкиваюсь впервые. Давайте "выдайте"(если конечно сейчас можно это) людям тулзу с возможностью записи, попробуем на разных мешах набрать статистику далее Последний раз редактировалось carsmaster; 14.09.2015 в 21:56. |
14.09.2015, 22:17 | #94 |
Местный
Регистрация: 12.07.2015
Сообщений: 417
|
В Иле часть текстур - TGA, а часть (возможно, что большая, не проверял) - IMF. Как уже говорил, для IMF нужно верх с низом менять местами.
Мне сложно сказать, в каком месте возникает проблема. На Макс сложно грешить в вопросах работы с изображениями, продукт очень солидный. Может проблема в конвертере IMF в TGA, он ведь картинку конвертит так, чтоб для просмотра верх был верхом. А ИЛ при биндинге текстур ориентируется на то, чтобы текстура села правильно. Если у модели маппинг перевёрнут, то и картинку нужно перевернуть. Т.е., если вы делаете модель, то в экспорт идёт модель именно с той текстурой, что была при изготовлении модели. И тогда Ил покажет модель корректно. А как эта картинка показывается во вьювере - совершенно не важно. Текстуры для Ила изначально делались в DDS. Потом их конвертировали в TGA. Потом часть текстур дополнительно конвертировалась в IMF. Мне кажется, что проблема где-то здесь и зарыта. Движок Ил биндит IMF текстуры зная об особенностях их ориентации. Конвертер же конвертит IMF так, чтобы верх РИСОВАЛСЯ верхом. Конвертером я не пользуюсь, у меня работа с IMF своя прописана. Моя утилита может работать и с TGA, и с IMF текстурами, ей без разницы. Надо будет наверное при экспорте делать и экспорт текстур, и если текстура IMF, то конвертить её в TGA так, чтоб в Максе она показывалась и мапилась правильно. |
14.09.2015, 22:31 | #95 | |
Пытающийся полететь
|
Цитата:
Вот два скрина настроек меш конвертера при экспорте меша в 3ds например . первый с настройками по умолчанию второй рекомендуемые авторами меш конвертера, там в двух местах надо -1 ставить |
|
14.09.2015, 22:58 | #96 |
Местный
Регистрация: 12.07.2015
Сообщений: 417
|
Не знаю, пока ничего сказать не могу.
На самом деле в Иловских материалах есть поля и скалирования, и смещения. Но они, на сколько я понимаю, немного для другого используются. Они используются при биндинге текстур и отрисовке модели. Что будет с моделью в самой игре, если принудительно менять модели и текстуры, я не знаю. Не хотелось бы сейчас вносить изменения сразу во много мест. Иначе потом, в случае каких-то проблем, будет вообще не разобраться откуда ноги растут. Сейчас я ориентируюсь на то, что у себя во вьювере я вижу правильную модель и правильный маппинг. И именно так, как это видно в игре. Какие-то данные модели я трогать категорически не хочу. Модель надо экспортировать без малейших изменений в структуре и данных. И мне надо просто понять, как правильно экпортировать текстуру, что с ней сделать, что-бы она была валидна и для Макса, и для игры, и для вьювера. Тогда и обратный экспорт в игру будет проходить без доп. заморочек. Иначе неизбежно вылезут косяки. PS: Обновлённую утилитку с записью в obj выложу завтра, не всё доделано. Основной работы сейчас много, на утилитку очень мало времени очтаётся. |
14.09.2015, 23:09 | #97 | |
Пытающийся полететь
|
Цитата:
Удачи вам. Спасибо за желание внести свой вклад в развитие ИЛ-2. |
|
15.09.2015, 00:11 | #98 |
Местный
Регистрация: 12.04.2009
Сообщений: 5,062
|
да... достойное дело!
__________________
ищется идейный Программер ) |
15.09.2015, 20:42 | #99 |
Местный
Регистрация: 12.07.2015
Сообщений: 417
|
Пффф...
Однако, я так сохранение в obj до конца и не доделал. Плотно залип с хуками и по этому не дописано сохранение коллизий и библиотеки материалов. В аттаче версии, которые записывают obj, без коллизий и библиотеки материалов. Надеюсь, что смогу к завтрему дописать недостающее. Почему так долго этот экспорт пишется? Потому, что приходится решать довольно сложные проблемы. Часть вчерашнего дня и весь сегодняшний, ушли на хуки. Коротко опишу о некоторых важных моментах, с ними связанных. Это важно для правильного экспорта/импорта моделей. Итак. Хук, в нашем случае, это место присоединения к объекту эффекта, либо место, в котором может возникнуть другой обект. Например, эффект горения, или место появления выпрыгивающего из кокпита пилота, или место выстрела и так далее. Одним словом - всё то, что в изначальную модель не входит, но должно на этой модели появляться в определённые моменты. В Ил-2 хук представляет из себя матрицу поворота (3x3, w векторов = 0) и 3 компонента из матрицы перемещения (из нижнего ряда матрицы 4x4, w = 1). И тут самый важный для правильного экспорта/импорта момент: фактически хук, это точка, но объект, присоединяемый к этой точке должен в соответствии с матрицей поворота оказаться развёрнут относительно его локальных координат. С одной стороны - в этом ничего сложного нет. Про маричные преобразования литературы вагоны и учат их на первом, кажется, курсе института (я учил 35 лет назад ). Однако у нас имеется некоторая проблема. В obj нельзя описывать локальные матрицы. В 3ds, например, можно, а в obj нет. Или я тупой и не мог найти в спецификации соответствующий механизм. Таким образом, при экспорте хуков приходится создавать какой ни будь объект, поворачивать в соответствии с матрице поворота и смещать в соответствии с матрицей перемещения. Вот по этому мы и видим на месте хуков кубы. А у куба 6 граней, и если все грани закрашены одинаковым образом, то совершенно не понятно каким образом расположены его локальные оси, т.е., куда он смотрит - ХЗ. Чтобы этого избежать я крашу грани кубов в разный цвет, по нему визуально можно понять его ориентацию. Это важно потому, что если вы этот куб крутанёте при редактировании, то, для примера, на месте хука с утечкой топлива топливо начнёт вытекать вверх. Пока, из-за того, что запись библиотеки материалов не доделана, всем граням назначен Default материал. Когда доделаю они будут красится так, как у меня во вьювере: Front - ярко краный Back - тёмно красный Bottom - ярко зелёный Top - тёмно зелёный Right - ярко синий Left - тёмно синий Либо могу назначить другие, нужные вам цвета. Может есть что-то общепринятое в мире 3Д моделинга, я ж не в курсе. Ещё один момент, связанный с хуками и obj форматом, это размер куба на месте хука. Поскольку у нас объект после трансформаций, то нужную для Ила матрицу при импорте из obj в игру надо будет рассчитывать из модели. Кстати, именно по этому, скорее всего, в MeshConverter-е кубы имеют длину грани 1 и такие здорОвые. Так считать проще. Но я не хочу делать их слишком большими, выбрал размер грани 0.5, вроде так по лучше чисто визуально. Что в этом важно. Если вы во время редактирования поменяете размеры граней для кубов на месте хука, то есть риск того, что точка присоединения поплывёт и поплывёт матрица поворота. Размеры кубов на месте хуков при редактировании и в экспорте в obj лучше не трогать. При экспорте в 3ds - пофиг. Там локальные матрицы сохраняются при записи. Вроде всё на сегодня. Посмотрите, правильно ли экспортируются хуки и нет ли каких косяков. Во вьювере добавил вкл/выкл показа хуков. Имейте ввиду, иногда хук сидит внутри модели и чтоб его увидеть надо включить показ одной сетки (ну и хуков, естественно ). |
15.09.2015, 22:51 | #100 |
Пытающийся полететь
|
Еще раз спасибо за Ваш труд. очень полезная тулза получается.
1. Проверил пока мельком, открывает правильно даже те бинарные меши, что меш конвертер не мог открыть корректно. Эти упрямые меши ваша тулза и в OBJ корректно перевела. В максе все верно кажет. Единственное ,что как и раньше приходится для макса текстуру после перевода из IMF в TGa прогой ViewIMF-V1_0.exe ,переворачивать в фотошопе,чтоб маппинг правильно отображался в максе. 2. Теперь по хукам. Меш конвертер например все хуки в формате 3ds валит в центр координат, хотя их там несколько(хуков). НО !!! у полученных таким образом хуков через меш конвертер(хоть хуки все и свалены в одну кучу) имеется свой центр координат(пивот) У каждого свой по которому и можно увидеть ориентацию самого каждого хука. Ваша прога сейчас корректно расставляет в пространстве сами хуки по местам. Все вроде нормально выглядит. НО !!!! вот незадача, у всех хуков центр координат локальный (пивот) каждого хука установлен в центр координат глобальный ,тоесть в 0 0 0 Тоесть у каждого хука центр в одном и том же месте и ориентация соотвенственно одинаковая А должно быть у каждого хука свой центр(пивот) координат в центре кубика видимого и соответсвенно при перемещении кубика в максе и центр должен двигаться вместе с кубиком Если описал сумбурно и непонятно, то дайте знать и сделаю скрины. Последний раз редактировалось carsmaster; 15.09.2015 в 23:05. |
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
|
|