Материалы с автоматическим тайлингом в UDK

2 фото
Забор с авто-тайлингом текстуры в UDK
image
Работая над сценой игры в редакторе UnrealEd очень часто сталкиваешься с ситуацией, когда нужно растянуть объект на произвольную ширину, но при этом сохранить исходный размер текстуры. Иными словами, текстура при растягивании объекта должна автоматически размножаться (тайлиться) на дополнительную поверхность объекта, полученную в результате растягивания.

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

Тут на помощь приходят автоматически растягивающиеся материалы (с авто-тайлингом), которые позволяет создавать редактор материалов UDK Unreal Material Editor. Делается это с применением блока Object Radius, который, как видно из названия, отражает текущее значение радиуса объекта (видимо, образуемого Bounding Box'ом). Введя параметр от ObjectRadius в качестве множителя к TexCoord, можно динамически управлять тайлингом текстуры.

Для удобства я добавил в материал еще несколько параметров, позволяющих задать множители для тайлинга по U и V отдельно, а также триггеры для включения авто-тайлинга для каналов U и V.

2 изображения

  • Забор с авто-тайлингом текстуры в UDK
  • Материал с авто-тайлингом текстуры в UDK
  • 0
  • 03 октября 2012, 13:17
  • dimanjy

Комментарии (11)

RSS свернуть / развернуть
+
0
А как правильно рассчитать тени при таком методе? Карта теней получается растянутая вместе с мешем.
avatar

Ray

  • 22 октября 2012, 01:59
+
0
Карта теней должна получаться именно растянутой, а не тайлится вместе с текстурой. Тени должны ложиться нормально, т.к. они рассчитываются отдельно от шейдеров материалов. Просто нужно задать побольше разрешение Lightmap для этого объекта.
avatar

dimanjy

  • 22 октября 2012, 11:48
+
0
Ну это понятно. Я рассчитывал при разрешении (резалюшн или как его там) теней 1024. Результат — размазанное месиво из чёрных пятен. Делать разрешение выше не вижу смысла. Похоже придётся по старинке делать — копи/паст.
avatar

Ray

  • 22 октября 2012, 12:54
+
0
Я вообще решил, что вокруг персонажа на 1000 юнитов будет работать только динамическое освещение. Меня тоже не устраивают корявые пятна, особенно на Landscape. А издалека они смотрятся достаточно сносно.
avatar

dimanjy

  • 22 октября 2012, 12:59
+
0
Можно узнать каким макаром это реализуется?
avatar

Ray

  • 22 октября 2012, 19:13
+
0
Спасибо, что спросили. Я полчаса потратил, чтобы вспомнить, где я это настраивал! Теперь если снова забуду, буду знать, где искать :)

Радиус сферы динамического освещения настраивается в свойствах объекта Dominant Directional Light, который должен присутствовать на сцене: Light -> Light Component -> Cascaded Shadow Maps -> Whole Scene Dynamic Shadow Radius. Я поставил 1000. По умолчанию стоит 0, т.е. динамическое освещение не используется, а используется только LightMap.

Подробнее про Dominant Lights в документации.
avatar

dimanjy

  • 22 октября 2012, 20:54
+
0
Спасибо. Потестил. В закрытых помещениях такая штука не покатит. Придётся отказаться от тайлинга.
Вообще, очень сильно напрягает система освещения, замучился уже воевать с ней.
avatar

Ray

  • 23 октября 2012, 02:15
+
0
Для основной геометрии я и сам не рекомендовал бы тайлинг, иначе все будет однообразным в игре. А вот для травки, бордюрчиков всяких, в общем все то, что не бросается в глаза, а размножать замучаешься, — тут тайлинг весьма полезен.

Сам я еще не добрался до внутренних помещений, но наверняка есть какие-то аналогичные настройки для внутреннего освещения… Надо этот вопрос изучить.
avatar

dimanjy

  • 23 октября 2012, 11:03
+
0
Я плинтуса растягивал Вашим методом. Можно конечно поставить PointLightMovable и в комнате будут динамические тени, а для «сглаживания» поставить обычный PointLight с отключенными тенями. Но тут всё упирается в производительность, в каждой комнате по динамическому источнику света не есть гуд. Тем более у моего ГГ есть фонарик, который тоже динамический.
avatar

Ray

  • 23 октября 2012, 13:46
+
0
Отрендерил тоже нечто вроде плинтуса (справа на траве валяется). Разрешение LightMap поставил 256. Основные тени от крупных объектов (столбиков) смотрятся довольно прилично. Даже некий размытый намек на тени от решетки присутствует.



А Вы Unwrap для своих плинтусов по феншую делали? Т.е. отдельный UV-канал для LightMap с разбиением по отдельным островам с отступами в Вашей модели присутствует?
avatar

dimanjy

  • 23 октября 2012, 14:52
+
0
Естественно, отдельным каналом.
avatar

Ray

  • 23 октября 2012, 16:50

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.