Здравствуйте. Вы находитесь на сайте Unreal Level. Данный ресурс посвящен редакторам карт игр серии Unreal, UT и Gears of War. Основная цель сайта , помочь всем желающим освоить любой из редакторов вышеперечисленных серий. Наибольшим приоритетом на этом сайте, обладает редактор UnrealED for Unreal Engine 3 и редактор движка Unreal Engine 3.5, входящий в комплект разработки UDK, поскольку это наиболее актуальная на сегодняшний день технология.
Terrain Advanced Textures_1
автор: FACH | 28 Сентября 2010 | Просмотров: 5749
 

Автор: Дэвид Грин

Перевод: ScarsSoul 

Оригинал: Terrain Advanced Textures 

Обзор текстурирования ландшафта

 

Текстурирование ландшафта – большая и сложная тема, с огромным разнообразием методов и решений. В этом уроке будет охвачено несколько методов текстурирования, доступных в Unreal Engine 3, наряду с методами повышения качества текстурирования ландшафта, а так же и повышение степени детализации. Этот урок разделен по увеличению сложности, показывающие решения для различных проблем текстурирования.

 

Это продвинутый урок и предполагается, что Вы знакомы со следующим материалом:

 

 

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

 

Есть два основных соображения при разработке системы текстурирования ландшафта: производительности и реалистичность. В большинстве случаев, между ними существует компромисс, однако, следует стараться не допускать случаев, когда производительность приводит к низкому реализму, или высокое визуальное качество в результате дает значительное снижение производительности.


Terrain Advanced Textures_1
 

 

 

Текстурирование ландшафта – пояснения

 

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

 

Масштаб текстур

 

В большинстве случаев, UV масштаб текстур применяемых к ландшафту, корректируется таким образом, чтобы они выглядели достаточно точными при ближнем рассмотрении. Трава или не большие камни (изображенные на текстуре), обычно, масштабируются к аналогичному размеру их реальных прототипов. Однако, проблемы в том, что фрагментация/плиточность изображения может стать более заметной, когда Вы смотрите на ландшафт издали, и текстуры определенного размера могут содержать только конечное количество деталей и различий, учтите, что, обычно, чем меньше разрешение текстур, тем заметнее плиточность, а также гораздо меньше детализация.

 

Если UV масштаб текстуры установлен небольшим, плиточность, чаще всего, очень заметна.

 

Если UV масштаб текстуры установлен большим, плиточность менее заметна и ландшафт кажется разнообразней и гораздо детализированней, но в приближении ландшафт выглядит расплывчатым, а размеры объектов на текстуре, таких как трава или камни, кажутся большими, чем реальные.

 

 

Тайлинг текстур

 

Так как текстуры, созданные для использования на ландшафте, обычно, имеют разрешение 512x512, 1024x1024 или 2048x2048, трудно получить наложение текстур по всей поверхности, при котором бы имелся широкий спектр деталей и не было визуальных артефактов плиточности. В большинстве случаев визуальные различия в текстуре, такие как изменение цвета или яркости на текстуре, или наличие конкретных деталях, таких как большой камень в центре текстуры, может привести к тому, что плиточность будет более заметной.

Скорость заполнения (Fillrate)

 

Так как ландшафт часто используется для создания больших наружных сцен, он обычно занимает значительное количество области экрана, обычно от 50% до 75%. Когда сложность материала ландшафта увеличивается, он может потребовать больших вычислительных мощностей на текстурирование, на обработку, создание и рендер текселей на экране. Использование видеоадаптеров с медленным GPU и невысокой fillrates приведет к более медленному рендеру и понизит производительность.

 

 

Unreal Engine

 

У системы ландшафта в Unreal Engine есть определенные пределы на число материалов, которые могут быть применены и число шейдерных инструкций, которые могут быть выполнены. Точное число варьируется в зависимости от дизайна использованных слоев и ограничений конкретных видеоадаптеров. Видеоадаптеры с поддержкой 2 и 3 шейдеров, поддерживают 16 Texture Samplers. Каждая уникальная текстура, используемая в каждом материале ландшафта, потребует одного из этих образцов (samplers). Обратите внимание, что видеоадаптеры с поддержкой 2 шейдеров неспособны отрендерить материал ландшафта столь же сложный как видеоадаптеры с поддержкой 3 шейдеров. Texture Samplers будут рассмотрены более подробно позже в этом туторе.

 

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

 

 

Экземпляры материалов (Material Instancing)

 

Система материалов в Unreal Engine поддерживает такую возможность как экземпляры материалов (Material Instancing (http://udn.epicgames.com/Three/InstancedMaterials.html)). В сущности, это обеспечивает новые материалы, которые основаны на изменении радетельского/исходного материала (Parent Material). Родительский материал, включает в себя один или несколько параметрических выражений (Parameter Expressions), и при разрешении их модификации в экземпляре материала позволяют изменять подмножество свойств нового материала. Экземпляры материала не требуют перекомпиляции родителя.

 

Простой пример – родительский материал и экземпляр материала при этом второй материал другого цвета. Нет никаких причин для создания двух отдельных материалов, когда можно просто создать параметр (parameter) для родителя, который обеспечил бы изменение RGB цвета в его экземплярах.

 

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

 

Самые распространенные параметрические выражения это узлы ScalarParameter и VectorParameter. Узел ScalarParameter похож на узел Constant, поскольку он имеет единственное значение с плавающей точкой, а узел VectorParameter аналогичен узлу Constant4Vector - четыре значения с плавающей точкой, ARGB.

 

У каждого параметрического выражения есть свойство "ParameterName", которое позволяет определять название для параметра, который отображается в любом экземпляре материала. Советуем Вам использовать подробное/смысловое имя, такое как "DiffuseColor" или "BlendAmount".

 

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

 

Terrain Advanced Textures_1

 

 

Выражения материала – строительные блоки

 

Многие из сложных систем материалов, которые мы будем проектировать для ландшафта, используют ряд общих "строительных блоков" (building blocks) для каждого текстурного слоя ландшафта. Итак, сначала мы будем изучать и описывать функции этих разделов материалов.

 

 

Diffuse текстура – яркость и оттенок

 

Чтобы сократить количество Textures Samples на ландшафте, а также общее количество текстур в игре возможно использование модификаторов яркости и оттенка. Вместо того, чтобы создать несколько версий файла текстуры с различной яркостью и оттенком, например, светло-коричневый и темно-коричневый песок, просто изменим текстуру в пределах материала, используя узел Multiply*, которой изменяет каналы RGB в зависимости от значений узла VectorParameter.

 

Измените RGB свойства VectorParameter, чтобы изменить яркость текстуры и ее оттенок. Значение по умолчанию 1.0,1.0,1.0,1.0 (последняя альфа) значение VectorParameter можно оставить по умолчанию 1.0 и не забудьте дать имя параметру.

 

 

Terrain Advanced Textures_1

 

 

* Multiply - узел Multiply имеет два входа, умножает их и выводит результат. Умножение происходит по каналам. Не забывайте, что материалы в UE3 не ограничены [0,1]! Если цвет/значение больше чем 1, Multiply фактически осветляет цвета.

Примеры: Multiply значений 0.4 и 0.5 будет 0.2; Multiply значений (0.2,-0.4,0.6) и (0.0,2.0,1.0) будет (0.0,-0.8,0.6); Multiply значений (0.2,-0.4,0.6) и 0.5 будет (0.2,-0.4,0.6)

 

 

Яркость микрофактурных/детальных текстур (diffuse detail texture)

 

При использовании черно-белой (grayscale) микрофактурных текстур для увеличения качества diffuse текстур (борется с "размазыванием" как при ближнем рассмотрении, так и на мип-уровнях), часто требуется настройка яркости микрофактурной текстуры, чтобы она не изменяла общую яркость diffuse текстуры. Это можно выполнить, установив свойства микрофактурной текстуры для UnpackMax, но тогда яркость будет фиксированным значением. С помощью узла Multiply, которой изменяет каналы RGB в зависимости от значений узла ScalerParameter, мы можем изменить яркость микрофактурной текстуры на требуемую нам в каждом экземпляре материала.

 

Измените свойства ScalerParameter, чтобы изменять яркость текстуры. Значение по умолчанию 1.0.

 

Terrain Advanced Textures_1

 

 

Микрофактурная текстура карт нормалей – смешивание (Blend) и интенсивность (Strength)

 

NormalMaps (карты нормалей) зачастую могут значительно улучшать реализм больших ‘каменных’ текстур, используемых на ландшафте, таких как скалистые утесы и каменистые горы. Из-за ограничений размера и разрешения текстур в 1024x1024 или 2048x2048, diffuse текстуры скал часто масштабируются до большого размера TerrainMaterial, для имитации реалистичного внешнего вида. Если игрок может приблизиться к этим текстурам, большой масштаб текстуры обычно приводит к расплывчивости и значительной пикселизации. В дополнение к использованию микрофактурной текстуры на diffuse текстурах скал, микрофактурная текстура может использоваться и на картах нормалей.

 

Смешивая две текстуры карт нормалей, Синий (Blue) канал одной из текстур должен быть удален. Это по существу уменьшает рендеринг рельефности (bump). Узлы VectorParameter и Multiply контролируют, ослабляют синий канал микрофактурной текстуры карты нормалей до смешивания ее с основной текстурой карты нормалей. Каналы R и G узла VectorParameter также могут быть скорректированы выше 1.0, для увеличения интенсивности рельефности микрофактурной текстуры.

 

 

Terrain Advanced Textures_1

 

 

* Add узел имеет два входа, складывает данные на них и выдает результат. Суммирование происходит по каналам.

Примеры: Add для 0.2 и 0.4 даст 0.6; Add для (0.2, -0.4, 0.6) и (0.1, 0.5, 1.0) даст (0.3, 0.1, 1.6); Add для (0.2, -0.4, 0.6) и 1.0 даст (1.2, 0.6, 1.6).

 

 

Уровень маски смешивания

 

Некоторые пользовательские материалы, представленных ниже, используют черно-белые маски (grayscale Mask) для выполнения ряда функций, например, смешивание текстур (texture blending). Используя узлы ScalerParameter и Multiply, вес маски (blend weight Mask) может быть изменен непосредственно в материале, для упрощения перестройки и расширения возможностей экземпляра. Узел Clamp* и подключенный к его входу Max узел Constant равный 1 гарантируют, что диапазон маски всегда будет между 0.0 и 1.0.

 

Terrain Advanced Textures_1

 

* Clamp - используется для ограничения значений в указанном диапазоне, определяемого минимальным (Min) и максимальным (Max) значениями. "Min 0.0, Max 0.5" означает, что полученное значение никогда не будет меньше, чем 0.0 и больше 0.5.

Примеры: Clamping 0.3 с Min 0.0 и Max 1.0 на выходе 0.3; Clamping 1.3 с Min 0.0 и Max 1.0 на выходе 1.0.

 

Узел Desaturation (обесцвечивание)

 

Узел Desaturation обесцвечивает изображение согласно входу Percent. Percent может изменяться от 1.0 (полное обесцвечивание) до 0.0 (полностью оригинальный цвет - никакого обесцвечивания). Свойство Luminance узла определяет количество обесцвечивания на канал.

 

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

 

alt
 

 

 

 

Замечания по разработке сложных материалов

 

Названия

 

Для улучшения организации пакетов и упрощения повторного использования объектов движка (engine objects), простое, но строгое правило по названию для всех создаваемых ресурсов. Рекомендуемая система названия следующая:

 

  • TX_ИмяТекстуры_D        diffuse текстура;
  • TX_ИмяТекстуры_DO     diffuse текстура с прозрачностью (opacity) в альфа-канале;
  • TX_ИмяТекстуры_DS      diffuse текстура с зеркальностью (specular) в альфа-канале;
  • TX_ИмяТекстуры_N        – текстура карты нормалей (normalmap texture);
  • TX_ИмяТекстуры_O        – текстура прозрачности (opacity texture);
  • TX_ИмяТекстуры_S         – текстура зеркальности (specular texture);
  • MAT_ИмяМатериала       материал;
  • TM_ИмяМатериала          материал ландшафта (terrain material);
  • TLS_ИмяСлоя                    настройки слоя ландшафта (terrain layer setup).

 

Для определенных пользовательских текстур используются следующие имена:

 

  • TX_Detail[имя]        – 8 битная черно-белая или упакованная BitPlanes микрофактурная текстура (detail texture) (напр. TX_DetailRock1);
  • TX_Macro[имя]      – 8 битная черно-белая или упакованная BitPlanes макро текстура (macro texture) (напр. TX_MacroDirt);
  • TX_Mask[имя]        – 8 битная черно-белая или упакованная BitPlanes текстура маска (mask texture) (напр. TX_MaskRandom).

 

При использовании bitplane версии микрофактурной, макро или текстуры маски, обычно благоразумно назвать текстуру согласно содержанию каждого слоя bitplane для самодокументации. Например, микрофактурная текстура TX_DetailRockGrassDirt содержала бы три 8-битных упакованных текстуры в RGB bitplanes, где R=Rock (камень), G=Grass (трава), B=Dirt (земля). Альфа-канал не использован в этом примере, а мог бы обеспечить четвертую микрофактурную текстуру.

 

Группы комментариев (Comment groups) и описание (Descriptions) узлов

 

При построении сложных систем материала, будет разумным выбором использовать функции описаний (Description) и комментариев (Comment). Это позволит значительно улучшить организацию и читаемость сложных схем материала. Каждый узел/выражение материала имеет свойство "Desc", которому можно присвоить текстовую строку, обозначающую желаемое пояснение к узлу, например, прокомментировать функцию или значение конкретного узла.

 

Для создания объекта комментария (comment object) выберете узлы/выражения, которые хотите сгруппировать, кликните ПКМ по пустой области редактора материала (Material Editor) и выберете из появившегося контекстного меню пункт 'New Comment, в появившемся окне в строке CommentText введите желаемое имя или пояснения к блоку, нажмите Ok.

 

Описание (Description):

 

Terrain Advanced Textures_1

 

Блок комментария (Comment box):

 

Terrain Advanced Textures_1

  

Изменения назначенного слоя ландшафта

 

Выполняя существенные изменения с TerrainLayerSetup, который назначен на объект Terrain, такие как вставка или удаление элементов материала в массиве, изменения порядка расположения элементов в массиве, или изменение свойств Noise, Height или Slope одного или нескольких элементов материала, может сильно нагрузить компьютер, поэтому можно сначала произвести все эти манипуляции с TerrainLayerSetup, до того, как он будет назначен на объекта ландшафта (Terrain object). Как правило, это выгодно только при вставке или удалении элементов или если Вы уже знаете нужное значение свойств Noise, Height или Slope, поскольку Вы утрачиваете визуальную обратную связь – не видите, как влияют изменения на ландшафт. Однако, для существенных изменений, таких как удаление нескольких элементов материала часто оказывается быстрее открепить TerrainLayerSetup от объекта ландшафта, внести изменения, а затем повторно назначить TerrainLayerSetup.

 

Если Вы храните ресурсы непосредственно в файле карты, не забудьте повторно назначить TerrainLayerSetups на объект ландшафта перед ее сохранением, иначе автоматический отбор неиспользованных ресурсов удалит его из файла карты.

 

 

 

Перекомпиляция материалов ландшафта

 

При внесении изменений в систему материалов ландшафта, таких как изменение Materials, TerrainMaterials и TerrainLayerSetups, а так же схемы размещения этих объектов, ландшафт, в настоящее время отображаемый в области просмотра редактора, возможно, не обновится, чтобы показать эти изменения. Нажмите на кнопку Terrain Editing Mode на левой панели инструментов, чтобы отобразить диалог Terrain Edit (http://unreal-level.ru/39-terrain-sozdanie-i-rabota-s-landshaftom.html), а затем нажмите кнопку Recache Terrain Materials "RM", чтобы произвести перекомпиляцию/перекэширование. Как только Вы подтвердите перекомпиляцию – 'Recache terrain shaders?’ -  система ландшафта будет использовать обновленные настройки материалов.

 

 

alt

 

 

 

Поддержка шейдеров видеоадаптерами (GPU)

 

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

 

DirectX D3DCAPS возвращает уровень поддержки операций, задействующих пиксельные шейдеры.

 

Возможность устройства:

  • PixelShader1xMaxValue диапазон значений, которые могут быть сохранены в регистрах [-PixelShader1xMaxValue, PixelShader1xMaxValue]. Это касается только версий от ps_1_1 до ps_1_4.
  • MaxSimultaneousTextures для фиксированной функции конвейера, число сэмплеров текстуры (texture samplers) – MaxTextureBlendStages деленное на MaxSimultaneousTextures. Число texture samplers для пиксельных шейдеров указано ниже
  • PixelShaderVersion – версия пиксельных шейдеров поддерживаемых железом. Пиксельные шейдеры равные или меньше номера версии – поддерживаются.

 

Версии пиксельных шейдеров и количество Texture Samplers:

  • от ps_1_1 до ps_1_3             – 4 texture samplers
  • ps_1_4                                   – 6 texture samplers
  • от ps_2_0 до ps_3_0            – 16 texture samplers

 

 

Сложность материала: Превышение количества Texture Samplers или слишком много инструкций

 

Система ландшафта в Unreal Engine 3 использования GPU, чтобы выполнить рендеринг меша и текстурирование, следовательно, возможности рендеринга ограничены характеристиками и производительностью модуля GPU, таких как Fill Rate (скорость заполнения), версией Pixel Shader (пиксельных шейдеров) и количеством Pixel Shader Engines (пиксельных конвейеров), количеством Texture Samplers и Texture Mapping Units (TMU's).

 

Меш ландшафта разделен на прямоугольные блоки клеток - компоненты ландшафта, основанных на свойстве Terrain.MaxComponentSize.  Например, значение свойства MaxComponentSize равное 16 означает, что размер блока равен 16х16 клеток (см. http://unreal-level.ru/182-using-terrain.html). Каждый компонент ландшафта – отдельно вызывает DrawMesh. Таким образом, общее количество Texture Samplers для поддерживаемой версии пиксельных шейдеров определяет общее количество текстур, которые могут быть отрендерены в пределах каждого компонента ландшафта. Если доступное число Texture Samplers будет превышено на компоненте ландшафта, то ландшафт отрендерит многоцветную текстуру ошибки.

 

Для каждого слоя ландшафта (TerrainLayerSetup) всегда будут три Texture Samplers, зарезервированных для стандартных карт освещения (lightmaps) (для трех light directions (направленных источников света), для поддержки карт нормалей), или один Texture Sampler для "просых" lightmap при низкой детализации - только на PC, консоли не поддерживают "просые" карты освещения и всегда требуют 3 Texture Samplers. В дополнение к этому, каждый элемент ландшафт TextureMaterial в TerrainLayerSetup (s) требует карту веса (weight map так же известную как alphamap), которая определяет, где рендерить текстурный слой на ландшафте. Каждая карта веса - 8-битная черно-белая маска, таким образом, требуется один слой bitplane 32-разрядной ARGB текстуры и они упакованы по четыре текстуры в bitplanes как каналы ARGB. Таким образом, одна составная текстура карты веса может управлять ‘весом’ четырех слоев текстур.

 

Например, на ландшафте применяется 6 различных слоев текстур, тогда потребуется следующее количество Texture Samplers:

 

  • 3 Texture Samplers карт освещения;
  • 6 Texture Samplers слоев текстур;
  • 2 Texture Samplers карт веса, 1 с использованием всех четырех каналов bitplanes и 1с использованием двух каналов bitplanes.

 

Отметьте, что на слабых видео системах, использование слоев ландшафта приведет к переключению на низкую детализацию, которая использует один lightmap и упрощенные текстуры.

 

При проектировании TerrainLayerSetup, если ландшафт отображает текстуру ошибки, то способ исправить это, уменьшить количество текстур на дискретных компонентах. Это может быть сделано одним или несколькими из следующих действий:

 

  • удалите ненужные микрофактурные текстуры (detail texture);
  • объединить несколько черно-белых (grayscale) текстур в bitplanes одной ARGB текстуры;
  • удалите ненужные текстуры карт нормалей (normalmap);
  • удалите один или более слоев diffuse текстур;
  • уменьшите общее количество различных diffuse текстур, многократно используя одну или более diffuse текстур для нескольких слоев,  например, использовать одну текстуру песка, но в материале обеспечить изменение ее яркости, оттенка для многократного использования;
  • объединять черно-белые текстуры масок и альфа карт в bitplanes одной текстуры;
  • объединять несколько текстур в один(у) пакет/четверку текстур(quadrant texture), как описано в одном из методов, ниже;
  • упростить материал, сократив количество инструкций;
  • замените некоторые детали ландшафта соответствующими staticmesh-ами, например, скалы, чтобы уменьшить общее количество текстур.
ЧАСТЬ 2

 

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

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






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