Модератор форума: Kris†a™  
Форум » TES V: Skyrim » Мастерская » Вопросы по моделированию (Экспорт моделей в скайрим и т.п.)

Вопросы по моделированию
Tyddyner  Offline  Сообщение №1 написано: 9 января 2012, 18:09 | Отредактировано: Mojave_Ranger - 5 июня 2012, 15:05



106
В общем, сразу скажу, эта тема не для заказов, а для вопросов и ответов на эти вопросы от более умудрённых опытом камрадов.


Пару мануалов


Создание моделей с коллизиями для Skyrim. Часть1. Пока без коллизии.

Создание моделей с коллизиями для Skyrim. Часть2. Подготовка и внедрение коллизий.

jasondevilka  Offline  Сообщение №1651 написано: 23 декабря 2014, 16:45 | Отредактировано: jasondevilka - 23 декабря 2014, 16:44



4
Цитата @perture

з сообщения 1631 понятно, что модель экспортировалась с блоком NiMaterialProperty, который надо удалить, поскольку в Skyrim он не используется. Ещё как минимум блок BSLightingShaderProperty требует тонкой настройки.


спасибо, удалил блок в нифскопе и ошибка исчезла

anton  Offline  Сообщение №1652 написано: 23 декабря 2014, 17:09



362
@perture, матрицы поворотов тоже.
Matrix.invert() переворачивает все углы в противоположную сторону.
Обычно это нужно, чтобы посчитать "компенсаторную" матрицу для патишина, или преобразовать матрицу глобальных углов в локальные (для данной косточки относительно родительской).

Мой Блог
@perture  Offline  Сообщение №1653 написано: 23 декабря 2014, 18:55


$cience innov@tor


Цитата anton

думаю анимация тоже будет экспортироваться некорректно

Да, судя по скрипту, тоже. Да и вообще, товарищ там много лишнего и непонятного наворотил, проще новый скрипт написать. При экспорте анимации координаты и повороты тоже нужны в parent?

"Не спорьте с идиотами! Вы опуститесь до их уровня, а там они вас задавят своим опытом!" ©
anton  Offline  Сообщение №1654 написано: 23 декабря 2014, 20:08



362
@perture, да, все изменения происходят в локальной системе координат для каждой косточки, это только для создания "патишинов" используются глобальные координаты.
Да и в Блендере так же просто: например в имени функции получения матрицы дописываешь в конце _local и получаешь в локальной системе (или наоборот .. ^_^ )

Мой Блог
@perture  Offline  Сообщение №1655 написано: 23 декабря 2014, 20:48


$cience innov@tor


anton, с координатами понятно, объясни логику расчета координат


Код
- "компенсаторные" координаты для текущей кости в пространстве,  
  - "компенсаторная" матрица поворотов.
Из примеров ни чего не понятно, слишком они примитивны.

"Не спорьте с идиотами! Вы опуститесь до их уровня, а там они вас задавят своим опытом!" ©
anton  Offline  Сообщение №1656 написано: 23 декабря 2014, 21:31



362
@perture, "компенсаторные" координаты рассчитываются как обратные текущим, но только в глобальной системе координат (т.к. все вертексы модели находятся именно в ней). И нужны только для создания патишн-блоков [NiSkinInstance]. 

Своими словами: их роль "вернуть" вертексы, задействованные скином данной косточки на своё место. Если просто привязать вертексы к ноду-косточке (без компенсаторного патишина) то все они переместятся в систему координат этой косточки и модель порвёт на части. В патишн-блоке хранятся данные об обратном преобразовании, Нифскоп (/Движок игры) берёт их и возвращает каждый вертекс на своё место.
Надеюсь у меня получилось объяснить blush

Мой Блог
@perture  Offline  Сообщение №1657 написано: 23 декабря 2014, 21:35 | Отредактировано: @perture - 23 декабря 2014, 21:37


$cience innov@tor


Понятно. Хорошо бы для отладки сделать сценку с несколькими костями, мешем и простейшей анимацией одинаковую для двух программ. Я могу сделать такую в максе, но как я буду знать, что у меня всё правильно экспортируется?

"Не спорьте с идиотами! Вы опуститесь до их уровня, а там они вас задавят своим опытом!" ©
anton  Offline  Сообщение №1658 написано: 23 декабря 2014, 22:03



362
@perture, отправил в личку.

Мой Блог
@perture  Offline  Сообщение №1659 написано: 24 декабря 2014, 03:25 | Отредактировано: @perture - 24 декабря 2014, 03:58


$cience innov@tor


Да, только анимацию я не могу импортировать из нифа. Попробуй из блендера в FBX формат экспортировать этим плагином.

И ещё один момент. Ты говоришь, что

"компенсаторные" координаты рассчитываются как обратные текущим, но только в глобальной системе координат


но в твоём файле Skeleton.txt я не вижу глобальной системы координат, координаты кости NPC Root [Root]в глобальной системе -0.000001    -5.000000    15.000000


Код
Bone_Name   =['NPC Root [Root]']
Bone_Parent =['Controller_BASE']
   0.000000   0.000000   0.000000
   1.000000   0.000000   0.000000
   0.000000   0.000000  -1.000000
   0.000000   1.000000   0.000000
  -0.000000  -0.000000  -0.000000
   1.000000  -0.000000   0.000000
  -0.000000   0.000000   1.000000
   0.000000  -1.000000   0.000000

"Не спорьте с идиотами! Вы опуститесь до их уровня, а там они вас задавят своим опытом!" ©
Aksyonov  Offline  Сообщение №1660 написано: 24 декабря 2014, 03:33



937
Цитата @perture

Да, только анимацию я не могу импортировать из нифа.


@perture, а почему не можешь ? берешь утилиту Fallout Archive Manager распаковываешь анимацию из animations.bsa
и конвертируешь файлы в расширении * в kf и открываешь анимацию в 3ds max, ну если я все правильно понял что тебе нужно.

@perture  Offline  Сообщение №1661 написано: 24 декабря 2014, 05:33 | Отредактировано: @perture - 24 декабря 2014, 06:25


$cience innov@tor


Нет, ты не правильно понял. Там другой формат данных, к .kf отношения не имеет.

Добавлено (24 Декабря 2014, 08:03)
---------------------------------------------
Следующее наблюдение. Привожу данные  для кости Bone_RightUp.R
из твоего файла

   
Код
-0.960870  -0.276975  -0.003658
     -0.203150   0.695658   0.689050         - матрица поворотов текущей кости
     -0.188305   0.662831  -0.724704

      0.960870   0.203150  -0.188305
      0.276975  -0.695658   0.662831        - "компенсаторная" матрица поворотов
      0.003659  -0.689050  -0.724704

и из своего

     
Код
0.960870   0.276975   0.003658
       0.203150  -0.695658  -0.689050         - матрица поворотов текущей кости
      -0.188305   0.662831  -0.724705

       0.960870   0.203150  -0.188305
       0.276975  -0.695658   0.662831        - "компенсаторная" матрица поворотов
       0.003658  -0.689050  -0.724704

Как думаешь, что происходит со знаками в первых двух строках? Я ни каких преобразований не произвожу, просто получаю матрицу поворота в "родительской" системе координат для текущей кости, и инвертирую для "компенсаторной". Из последнего следует то, что в твоем файле для "компенсаторной" матрицы используется "родительская" система координат, а не глобальная.

Добавлено (24 Декабря 2014, 08:33)
---------------------------------------------
Подозреваю, что в твоём файле знаки изменены из-за этого действия

Код
# Компенсация наклона скелета в НИФ-е на 90" из за приПеренченной к "NPC Root [Root]" ИК косточки "Controller_BASE"
           if Bone.parent:    
               if (Bone.parent.name == "Controller_BASE"):
                   Compensation = Armatura.data.bones['Controller_BASE'].matrix.to_3x3().copy()
                   Matrix.rotate(Compensation)

В моём скрипте кость Controller_BASE не создается, соответственно компенсация не нужна. Что думаешь об этом?

PS Возможно причина в том, что в твоём исходнике углы одни, а в нифе другие, с применением компенсации. И у меня в максе как в нифе. Наверное на него не стоит опираться, давай пробовать через FBX.

"Не спорьте с идиотами! Вы опуститесь до их уровня, а там они вас задавят своим опытом!" ©
anton  Offline  Сообщение №1662 написано: 24 декабря 2014, 08:24



362
@perture
Цитата @perture

В моём скрипте кость Controller_BASE не создается, соответственно компенсация не нужна

Совсем забыл про этот момент. Тебе действительно это может не понадобиться.
А у меня в Блендере за "направление/(длину)" кости отвечает ось Y (кость стоящая вертикально будет иметь локальную ось Y указывающую в направление глобальной оси Z), поэтому чтобы получить глобальные координаты данной кости, нужно учесть этот поворот осей на 90 градусов.

FBX мне кажется мало что даст. Можно попробовать сделать тест по другому. Я сделаю новый файл, где кости будут стоять на целых одинаковых расстояниях (например в 1 юнит) и направлены строго по осям. Тогда в Максе будет проще его повторить руками. Хотя из за компенсации ТХТ файлы всё равно окажутся разные... Может вообще на мои ТХТ файлы не полагаться, а делать тесты только в Максе ?

Мой Блог
@perture  Offline  Сообщение №1663 написано: 25 декабря 2014, 12:58


$cience innov@tor


Скачал блендер, экспортировал проект в FBX, импортировал в макс, вроде всё корректно, скелет, анимация. На всё потратил 3 минуты :D . Пойду смотреть дальше.

Добавлено (24 Декабря 2014, 15:36)
---------------------------------------------

Цитата anton

Я сделаю новый файл, где кости будут стоять на целых одинаковых расстояниях (например в 1 юнит) и направлены строго по осям.


Да, наверное надо сделать новую сценку. Только расстояния и направления не надо выравнивать, а то в матрице будут одни нули и единицы, толку от них будет мало. И еще один момент - в иерархии скелета должно быть не менее трех костей, root и еще минимум две, а лучше четыре. Можешь скинуть мне .blend, в макс я сам перегоню, через FBX нормально получается.

Добавлено (25 Декабря 2014, 15:58)
---------------------------------------------
anton, ну что, модельку тестовую сделаешь? А то я в блендере не осилю так сходу, без изучения, а изучать не охота, пользоваться им не планирую. Сделать модель в максе я, конечно сам могу, но насколько я понимаю, мой скрипт должен на выходе выдать данные полностью идентичные твоему. А отладить скрипт можно только имея идентичные модели для обеих программ. И не просто пару костей сориентированных по осям, а чуть более сложную. Чем сложнее модель, тем лучше будут видны все тонкости.


"Не спорьте с идиотами! Вы опуститесь до их уровня, а там они вас задавят своим опытом!" ©
Myprism  Offline  Сообщение №1664 написано: 30 декабря 2014, 03:11


Физик


Вожусь сейчас с преломлением и возникла куча сложных вопросов. Но, может, кто и подскажет что.
Преломление делается так: карта нормалей ставится модели и вместо диффузной текстуры и вместо нормальной и устанавливается шейдерный флаг рефракция.
Преломление имитируется при этом некоторым образом, и если не влезать в детали, то довольно сносно. Но мне как раз нужно влезть в детали.
Задача такая: вписал внутрь женского тела скелет, честно вписал. Теперь нужно сделать прозрачное тело вокруг него. Посмотрел в игре, довольно забавно получается. Но вылезли вопросы. Буду копать сам и дальше, но, может, кто и подскажет. Главная проблема - неизвестность точной математической формулы, как работает шейдер рефракции.

1. Зачем карта нормалей ставится в 2 текстурных слота - и вместо диффузной и и вместо нормальной текстуры? Ведь для расчёта эффекта она нужна только один раз.

2. У меня преломляющая модель отвечает только за преломление. За цвет и блеск поверхности отвечает другая. Это так и должно быть, что преломляющую модель можно настроить только на преломление, или я не умею настраивать?

3. Неожиданно выяснилось, что модель тела великолепно преломляет в виде сзади (в направлении Y). Так, что хоть законам оптики учись. Но в виде спереди преломление почти отсутствует. Разумеется, мелкие детали карты нормалей преломляют правдоподобно, проблемы только в больших деталях, таких, как объём самого тела. Раз столкнулся с такой анизотропией, то стал копать дальше. Оказалось, что если в фотошопе у карты нормалей инвертировать красный канал (отвечает за компоненту Х нормальных векторов), то преломление становится хорошим спереди, но сзади ухудшается. Обнаружилась анизотропия эффекта - вдоль оси Y, но инвертирование канала Y (синий) видимого эффекта не дало. Так вот тут, похоже, происходит взаимодействие нормалей модели (вертексных) с нормалями карты нормалей, причём, возникает их компенсация в некоторых (Y) направлениях. И тут возникает более общий вопрос: Как складываются нормали вертексов с нормалями карты нормалей?  Можно ли сделать преломление только поверхностью треугольников модели, а не картой нормалей? Как управлять сложением вертексных нормалей с текстурными? Похоже, что для реализации правильного преломления нужна не карта нормалей. Она только похоже работает, но на самом деле, требуется специальная карта нормалей для преломления, в которой содержатся только локальные неровности, а не вся форма, как это делают в моделях тел.

Добавлено (30 Декабря 2014, 06:11)
---------------------------------------------
Ну вот, уже сам начинаю отвечать, может кому пригодится :)
Оказалось, что для реализации преломления текстуры совсем не нужны :) То "качественное" преломление, которое мне понравилось, рассчитывается только на основании формы тела. А вот преломление за счёт карты нормалей установленной в слот карты нормалей СКЛАДЫВАЕТСЯ с преломлением тела. А в карте нормалей тела заложена форма тела, которая в одном направлении добавляется с противоположным знаком. Т.е. для правильной работы карты нормалей в преломлении, в ней должны быть только локальные неровности, но не форма тела.


anton  Offline  Сообщение №1665 написано: 30 декабря 2014, 09:01



362
@perture, ну что это такое творится ! опять я прозевал твой ответ :(  Уведомления не пришло, а сам в эту ветку не заходил, извини (если бы Myprism сюда не написал, так бы и думал, что ты занят...)
Вот файл с новым тестом: "Скачать". 
По идее полностью идентичными они могут и не быть. Если в Максе не нужно делать компенсаторный поворот для на 90 градусов, то координаты скелета и анимации будут немного другими.
Но на работу ЕХЕ-шника это повлиять не должно.

Myprism, интересно, это получится прозрачное, преломляющее свет тело, внутри которого будут видны косточки скелета ? а можно на скриншот этого чуда глянуть ? :)

Мой Блог
Myprism  Offline  Сообщение №1666 написано: 30 декабря 2014, 09:43 | Отредактировано: Myprism - 30 декабря 2014, 10:23


Физик


anton,
Примерно вот так, хотя статическая картинка даёт слабое представление о прозрачных переливающихся объектах:



anton  Offline  Сообщение №1667 написано: 30 декабря 2014, 11:28



362
Myprism, а ведь классный эффект получается, особенно на 2-м скриншоте (с тенью на стене), смотрится очень необычно !
А что это будет: одежда, расса, компаньон ? В общий доступ планируешь выдать или это только для себя ?

Мой Блог
Myprism  Offline  Сообщение №1668 написано: 30 декабря 2014, 12:18


Физик


anton, это войдёт в обновление Небесного Замка. Собственно говоря, уже вошло. У меня там система смены тел одеванием соответствующего кольца. Можно выбрать UNP, DG, LB. Соответственно добавил сейчас вот эти скелетики для тел DG и UNP. Эти тела похожи и различаются только в мягких :) местах, так что я мог для них ограничиться изготовлением только одного скелета на все случаи жизни. Отдельными модами не выкладываю. Дело в том, что для такого тела нужна только броня, которая одевается ПОВЕРХ тела, а не подменяет его. В Замке у меня как раз вся броня переделана в такую и туда эти тела великолепно вписываются, а вот без Замка людям не будет проку от этих тел. Замок стал слишком большой, поэтому я не выкладываю его обновления часто. Вот и сейчас разрываюсь между желанием выложить обновление перед Новым Годом и желанием доделать туда что-то ещё :(
Там у меня ещё возникла проблема со скинингом кистей рук, но это я отпишу в ветку с утилитами экспорта/импорта.

anton  Offline  Сообщение №1669 написано: 30 декабря 2014, 13:20



362
Myprism, ничего, подождём :)  У меня вот тоже руки чешутся выложить следующую версию летательного аппарата, но я пока держусь, тренирую силу воли :D

Мой Блог
@perture  Offline  Сообщение №1670 написано: 2 января 2015, 20:03


$cience innov@tor


Всех с наступившим 2015-м годом!

anton, скрипт написал, вроде работает как надо, но один момент остался непонятным.

Код
[Begin]1
MESH_NAME   =['Box001']
1
Bone_Name   =['Point005']
8
      7   1.000000
      6   1.000000
      5   1.000000
      4   1.000000
      3   1.000000
      2   1.000000
      1   1.000000
      0   1.000000
[End]

Нумерация вершин идет в обратном порядке, по убывающей. Это имеет значение для последующей работы?

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

"Не спорьте с идиотами! Вы опуститесь до их уровня, а там они вас задавят своим опытом!" ©
anton  Offline  Сообщение №1671 написано: 3 января 2015, 09:38



362
@perture, с Новым годом !

Просто замечательно !
По идее нумерация значения не имеет. Это даже не нумерация, а индексы вертексов в OBJ файле, и обрабатываются они соответственно, но проверить не помешает конечно.
Вот файл посложнее: "Скачать"

ПС: можно будет предложить Aksyonov-у поэкспериментировать, ему должно понравиться ))

Мой Блог
@perture  Offline  Сообщение №1672 написано: 3 января 2015, 14:20


$cience innov@tor


anton, есть вопросы по твоим файлам. В частности в файле Weights.txt указано, что в модели 35 объектов, а ниже перечислено 23 объекта, поскольку именно это количество заскинено. 12 объектов модификатора скин не имеют. И второе, количество вертексов, указанное в файле Weights.txt и их фактическое количество не совпадают для всех объектов. В чем причина?

"Не спорьте с идиотами! Вы опуститесь до их уровня, а там они вас задавят своим опытом!" ©
Aksyonov  Offline  Сообщение №1673 написано: 3 января 2015, 15:19



937
Цитата anton

ПС: можно будет предложить Aksyonov-у поэкспериментировать, ему должно понравиться ))


О да конечно я жду готовности скрипта под макс новой версии от @perture, и с радостью его протестирую ! )) слежу за темой )

anton  Offline  Сообщение №1674 написано: 3 января 2015, 19:08 | Отредактировано: anton - 3 января 2015, 19:09



362
@perture, с обьектами всё просто: это особенность моего скрипта для Блендера такая, так было проще его сделать. Он считает всё обьекты сцены, а экспортирует только те, которые привязаны к арматуре.
Если реальное число обьектов будет меньше указанного этой цифрой, то ничего страшного, программа только выдаст сообщение и всё. А вот если будет больше - то завершится с ошибкой.

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

Если встретятся вертексы вообще без привязки - программа выдаст предупреждение (и это надо будет исправлять в 3D редакторе).
Если встретятся вертексы с привязкой к нескольким косточкам и при этом имеющие общую сумму весов большу единицы - программа выдаст предупреждение, но сама нормализует их между четырмя наибольшими весами (если влияло больше 4-х косточек, то остальные будут убраны из скина)

Aksyonov, я так и знал ))

Мой Блог
@perture  Offline  Сообщение №1675 написано: 3 января 2015, 20:01 | Отредактировано: @perture - 3 января 2015, 20:03


$cience innov@tor


Цитата anton

Если встретятся вертексы с привязкой к нескольким косточкам и при этом имеющие общую
сумму весов большу единицы - программа выдаст предупреждение, но сама
нормализует их между четырмя наибольшими весами (если влияло больше 4-х
косточек, то остальные будут убраны из скина)

В 3ds Max эти моменты легко пресечь. Во первых, модификатор skin не позволит общему весу перевалить за единицу, а во вторых установка параметра <<Bone Affect Limit>> в 4 ограничит скиннинг объекта четырьмя костьми на уровне редактора.

Добавлено (03 Января 2015, 23:01)
---------------------------------------------
Aksyonov, с таким спонсорством горы свернём! lol

"Не спорьте с идиотами! Вы опуститесь до их уровня, а там они вас задавят своим опытом!" ©
anton  Offline  Сообщение №1676 написано: 3 января 2015, 20:59



362
@perture, правильно будет, если количество мешей в ТХТ файле будет равно этой цифре (если мешей будет меньше - нестрашно, а вот если больше - будет ошибка). Т.е. 23 - это именно то, что и должно там стоять.

Понял что не так. Извиняюсь, 30 вертексов - это моя ошибка. Я дал ТХТ файл от версии, где уже была сделана UV развёртка (а следовательно и разрезы по швам, которые и дали дополнительные 10 вертексов). Просто в том Blend файле, где есть UV, нету анимации (не проверил этот нюанс, думал, что с анимацией у меня идут самые последние версии модели).

Что то мне подсказывает, что скрипту уже можно открывать ОБТ :)

Мой Блог
@perture  Offline  Сообщение №1677 написано: 4 января 2015, 09:01


$cience innov@tor


Цитата anton

Что то мне подсказывает, что скрипту уже можно открывать ОБТ

Кое что уточню с экспортом скелета - и в ОБТ. Всё таки переброс сцены через FBX кое что нарушает, приходится отслеживать нарушения и корректировать их вручную. И здесь основная трудность - не знание блендера.

Добавлено (04 Января 2015, 12:01)
---------------------------------------------
Open Beta Test


"Не спорьте с идиотами! Вы опуститесь до их уровня, а там они вас задавят своим опытом!" ©
Aksyonov  Offline  Сообщение №1678 написано: 6 января 2015, 00:55



937
Цитата @perture

Open Beta Test


Великолепно спасибо @perture, уже выпустил скрипт ! проверю обязательно ! но есть ещё одна просьба - мне тут пришла в голову мысль о том что неплохо было бы получить сцены с готовой анимацией - когда персонаж сидит - стоит, в общем в тех позах которые есть в скайриме по умолчанию принципиально для удобства подгонки при настройки скинов, но открыв стандартный скелет Skeleton.nif в 3ds max 2013 и загрузить анимацию нужную в в kf не получается, это делает только версия 3ds max 2010 но при этом не может сохранить сцену - что не так я делаю ? может кто нибудь сможет предоставить мне подобные сцены ? был бы очень вам благодарен коллеги, или же может быть в сети уже у кого нибудь есть для 3ds max подобные сцены, желательно - сцены нужны такие: с анимацией сидения, каста магии с двух рук и стойки с оружием, а то так тратиться куча времени на просмотр изменений по скиннингу - на глаз я ещё не умею подгонять вес вершин, что бы настроив их в игре быть уверенным что все будет идеально. 

Если создавать сцены вам лень и слишком долго, скажите пожалуйста хотя бы почему макс 2013 версии не отрывает анимацию в kf ? неправильно установлен nif plugins ?

@perture  Offline  Сообщение №1679 написано: 6 января 2015, 08:07


$cience innov@tor


Aksyonov, плагин 2013 сырой, недоделанный. Автор уделил внимание экспорту коллизий, а остальное осталось недоработаным. Если тебе принципиальна работа в 2013 версии, то можно создать сцену со скелетом и анимацией в 2012 (её плагин импортирует всё без проблем), а потом открыть её в 2013.
А вообще я пишу скрипт, который будет создавать скелет с анимацией для скининга. Игровых анимаций там не будет, будет просто набор экстремальных поз, по типу скелета от Майка.

"Не спорьте с идиотами! Вы опуститесь до их уровня, а там они вас задавят своим опытом!" ©
Aksyonov  Offline  Сообщение №1680 написано: 6 января 2015, 08:11



937
То что коллизии умеет экспортировать и то прекрасно ! но не думал что он не умеет скилет переносить во всяком случае сохранять сцену он с ним не умеет, по поводу скрипта - не совсем понял - тот что для набора анимации он ведь для создания статичных анимированных объектов годиться ? дверь открываем и так далее ? будет время протестирую - может тогда и из статуса бета выйдет ?

Форум » TES V: Skyrim » Мастерская » Вопросы по моделированию (Экспорт моделей в скайрим и т.п.)
Поиск:





Ответ на жалобу смотрите в разделе жалоб