Здравствуйте. Вы находитесь на сайте Unreal Level. Данный ресурс посвящен редакторам карт игр серии Unreal, UT и Gears of War. Основная цель сайта , помочь всем желающим освоить любой из редакторов вышеперечисленных серий. Наибольшим приоритетом на этом сайте, обладает редактор UnrealED for Unreal Engine 3 и редактор движка Unreal Engine 3.5, входящий в комплект разработки UDK, поскольку это наиболее актуальная на сегодняшний день технология.
Crate model to UDK in Maya
автор: Niana | 22 Ноября 2010 | Просмотров: 4920
Автор: redbox
Оригинал: gamedev.ru



Здравствуйте.
Я хотел бы рассказать вам небольшой базовый урок о создании моделей для Unreal Engine 3.


Предварительные данные

Координатные оси

Maya             Unreal

x - z                z - x
     |                      |
     y                     y

Единицы измерения

Работайте всегда в сантиметрах, так проще жить, серьезно :)

Бюджет и оптимизация

Давайте посмотрим на следующую иллюстрацию:

Crate model to UDK in Maya


На верхнем рисунке все ребра модели жесткие, на нижнем - мягкие.
Почему такая разница в количестве Vertex? Потому что жесткие ребра добавляют вертексы. Один Hard Edge - +2 вертекса. Вообще они добавляют даже не вертексы, а поля для записи дополнительной информации...

Теперь посмотрим такую иллюстрацию:

Crate model to UDK in Maya


Здесь в обоих случаях все ребра мягкие, а UV сшиты.Но, на первой по краю мы видим 8 вертексов, а на второй - 4. Вот Вам и разница 16-12. Разрез на UV тоже добавляет вертексы. Одно разрезанное на UV ребро - +2 вертекса. Плюс еще не стоит забывать про второй UV канал на LightMap, при неаккуратном исполнении он тоже создаст лишние байты. А если модель большая? Сколько дополнительной лишней информации запишется в файл?
Кстати, Вы не увидите эти изменения в *.ase файле, они проявляются только после импорта в движок. Владельцы исходного кода возможно захотят ознакомится с FStaticMeshRenderData::Build и USkeletalMesh::CreateSkinningStreams для более детального ознакомления с проблемой.

Ни Maya, ни 3DsMax не умеют показывать настоящее число вертексов, которое после импорта покажет движок. Может однажды кто-то напишет какой-то хороший и быстрый скрипт...
Да, возможно эти заморочки излишни, но если Вы боретесь с лишними полигонами, наверно Вы подумаете и об этой оптимизации.

Настройка сцены

Начнем с простого. Запускаем Maya, и настраиваем сцену.

Up axis z
Units centimeter
fps ntsc 30


На этом настройка сцены еще не закончена. Давайте представим что мы в итоге хотим получить. Это будет некий пропс, с лодом, коллизией, лайтмапой, и полным набором текстур (diffuse, normal, specular). Открываем Hypershade и создаем в нем простой Phong, называем его как-нибудь, я назвал Material. В вкладке 2DTextures находим и добавляем к материалу 4 ноды файлов:

Crate model to UDK in Maya


Обзываем их соответственно - Diffuse, Normal, Specular и Lightmap. Если у Вашей модели будут еще и элементы с альфа-каналом, то возможно стоит добавить ноду OpacityMask.

Теперь хитрым хаком мы обманем Майку. Зачем поймете потом.
Во вкладке OtherTextures выбираем единственную LayeredTexture. И теперь, через drug and drop по средней кнопке мыши, мапим Diffuse в ее input[0], а Lightmap в input[1].
Открываем свойства LayeredTexture в редакторе атрибутов и ставим BlendMode - None.
Далее, опять же через drug and drop по средней кнопке мыши, накидываем каждый файл на Ваш материал.

LayeredTexture - Color

Normal - Other - в редакторе связей - OutColor - NormalCamera

Crate model to UDK in Maya


Specular - SpecularColor

У Вас получится такая конструкция:

Crate model to UDK in Maya


Все, заготовка готова, сохраняемся. Советую Вам сохранить эту сцену в какой-то отдельный файл, как начальную - для работы над такими объектами.


Создание объекта

Создаем наш простой объект.

Crate model to UDK in Maya


Так как объект гениален и самодостаточен по своей сути, его совершенно не нужно переделывать. Возможно Вы даже нарисуете на него текстуры и назначите в соответствующие ноды в материале... Но мы ведь хотели еще LOD, коллизию и лайтмапу!

Если Вы знаете и понимаете что такое LOD, я думаю у Вас не возникнет проблем с его созданием. В Unreal есть только один момент, который нужно учитывать - по умолчанию, расстояния переключений LODов выставлены таким образом что первый не успевает исчезнуть до появления второго. Отсюда можно наблюдать эффект стробления. Старайтесь чтобы полигоны LODов не находились в одних плоскостях. Сдвигайте их немного, или масштабируйте сами модели.

Создать коллизию мы можем из этого же кубика. Дублируем его, обзываем UCX_01, и прячем в какой нибудь слой PhysL.

Для более сложных объектов правила создания коллизий не намного сложнее:
1. Именование UCX_*, где * - нумерация или имя английскими буквами.
2. Все элементы коллизии должны быть замкнутыми (без дыр) и выпуклыми (convex) поверхностями.
3. Нельзя объединять элементы коллизии в один меш, они просто должны быть выделены в момент экспорта меша, если Вы делаете ExportSelection, или же просто присутствовать в сцене если Вы экспортите ее полностью.
4. Нельзя чтобы элементы пересекались, они могут только примыкать.
5. Естественно пытайтесь избегать сложной коллизии.
6. На элементы коллизии должен быть назначен материал самого меша, или один из его материалов.
7. И одно от меня - никогда не делайте элементам коллизии отрицательный скейл. Никакой FreezeTransform Вас не спасет. Элемент всегда будет испорчен после импорта в движок.

Создаем развертку для лайтмапы

Открываем UVTextureEditor. Выделяем все развертки, далее Polygons - Copy UVs to UV Set - Into New UV Set. По умолчанию он получит какое-то имя, его не нужно изменять.

Crate model to UDK in Maya


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

Crate model to UDK in Maya


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

Pixelmap32

alt


Спокойно! Это просто маленькая картинка. Сохраните ее себе и назначьте в Lightmap ноду материала. После этого выделите Вашу модель, Window - RelationshipEditors - UVLinking - UV-Centric. В открывшемся редакторе отношений Вы увидите Вашу модель с ее каналами координат и материал с его нодами текстур. Выберите второй канал UV и ноду Lightmap. Теперь пиксельмапа видна в UVTextureEditor.

Crate model to UDK in Maya


Остальное не сложно. Сделайте отображение текстуры без фильтрации и включите Snap к пикселям. Переразложите UV максимально заполняя пространство.
Я сделал так:

alt
 


Теперь проделываем эту операцию и с LOD'ом также.

Почему нельзя по-другому? Зачем обязательно четко по пиксельмапе?
Потому что лайтмапа прожигается по этим пикселям.
Если у Вас шеллы ювишек не будут лежать четко по пикселам, и расстояние между ними будет меньше 2х пикселов, или они пересекутся, Вы будете постоянно получать непонятные проблемы с освещением. Какие-то светлые или темные полосы и пятна там, где их быть не должно. Изначально Вам захочется решить проблему увеличением размера лайтмапы в самом движке, поставить не 32 а 128, например. Да, это выход, но когда Вы дойдете до сцен размером в несколько тысяч объектов, где вам не будет хватать лишних 5 мегабайт, чтоб что-то перестало постоянно мипмапиться, первым делом Вы вспомните про лайтмапы.

Спасибо за внимание.
Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь. Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

#1 написал: FACH
24 Ноября 2010 23:36 | ICQ: 562039160 |


Группа: Администраторы
Регистрация: 27.06.2009
Сообщайте о новостях мне в личку, я туда не всегда смотрю. Это всем, кто выкладывает что-то на главную


--------------------
Публикаций: 134 | Комментариев: 778      
#2 написал: bobr
26 Ноября 2010 21:16 | ICQ: Не Указано |


Группа: Гости
Регистрация: Не Указано
может мне тоже самое про xsi написать ?
Публикаций: 0 | Комментариев: 0      
#3 написал: StarLight
27 Ноября 2010 01:40 | ICQ: 430549081 |


Группа: Модераторы
Регистрация: 28.06.2009
Урок вроде неплохой, но ну нафиг майку )))) Всю охоту отбили в ней ковыряться


--------------------
Публикаций: 5 | Комментариев: 21      
#4 написал: IntelXeon
13 Декабря 2010 01:18 | ICQ: 563469751 |


Группа: Посетители
Регистрация: 10.12.2010
November 2010 UDK x64 + Autodesk Maya 2011 SP1 x64 + ActorX for Maya 2011 x64

Экспорт объектов работает без проблем с этим плагином который можно найти в папке с установленным UDK.

В MEL скрипт/строку просто написать axmesh; и запустить или на полку положить скрипт.

Настроить поставив галочки которые необходимы вам в окне и нажать export и на выходе объект будет в формате *.ase

В чем проблема собственно ? Кол-во вертексов у пирамиды что в Мае что в редакторе 5... Как и должно быть.

ps

И может все же не "crate" а "create" ?
Публикаций: 0 | Комментариев: 6      
#5 написал: Hypnoticat
14 Декабря 2010 22:58 | ICQ: 407814872 |


Группа: Активист
Регистрация: 15.01.2010
Crate - как ящик переводится. Но смысл подобного урока сомнителен, по-моему...
Публикаций: 0 | Комментариев: 16      
#6 написал: seaman
17 Декабря 2010 12:19 | ICQ: Не Указано |


Группа: Посетители
Регистрация: 16.07.2010
1. В текстурных координатах вообще не может идти речь о каких-то пикселях. Текстурные координаты измеряются от 0 до 1 без какой бы то ни было привязки к пикселям.
2. "шеллы ювишек не будут лежать четко по пикселам"...
Расположить шеллы по Вашим пикселям можно только для куба. Попробуйте проделать то же самое для чего-нибудь органического...
3. "увеличением размера лайтмапы в самом движке, поставить не 32 а 128"...
Может я туплю, но увеличение лайтмапы в редакторе достигается уменьшением с 32 до 16-8-...

Однако глюки на разных размерах лайтмапы действительно появляются. Возможно именно из не очень хорошей развертки во втором канале...

2IntelXeon
А проблемы собственно нет все работает и без всяких забот о вертексах. Это чисто для оптимизации...
Публикаций: 0 | Комментариев: 4      
#7 написал: FACH
17 Декабря 2010 12:24 | ICQ: 562039160 |


Группа: Администраторы
Регистрация: 27.06.2009
Да, глюки из-за развертки и размера.
Но на статиках размер, чем больше тем выше формат Лайтмапы. Это у БСП делитель, чем он ниже - тем лучше качество, а в терранке и других объектах резолюция ставится выше


--------------------
Публикаций: 134 | Комментариев: 778      
Информация
Посетители, находящиеся в группе Гости, не могут оставлять Комментарии в данной новости...






При копировании материалов, активная ссылка на UNREAL-LEVEL.RU обязательна!
© 2008—2012, UNREAL-LEVEL.RU. Все права защищены.