Освещение и текстуры

Автор: Hruka

Введение

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

Текстуры

Перед тем как начать, мы сделаем небольшой уровень из двух комнат, соединенных коридорчиком. Размер комнат, равно как текстуры и освещение не имеет значения, единственное что надо сделать, так это добавить PlayerStart:


Ну а теперь можно начать. Текстуры, как впрочем и все остальные объекты в Unreal, хранятся в специальных запакованных файлах, называемых packages. Файлы с текстурами имеют расширение *.utx. В каждом таком файле собраны текстуры определенной темы, например в файле StarShip.utx находятся текстуры космического корабля, а в файле NaliCastle.utx - замка Нали, того самого, который в заставке Unreal. В самих текстурных файлах для удобства текстуры разделены на группы. Например, в группе Wall находятся текстуры стен, в группе Floor - пола и т.д. Чтобы загрузить какой-нибудь текстурный файл, надо в верхнем поле браузера выбрать "Textures" и нажать кнопку Load внизу. Загрузите package под именем PlayrShp.utx, в нем находится большинство текстур из первого уровня Unreal. Теперь посмотрите на панель браузера. Вы видите, что во втором сверху поле появилось название файла - PlayrShp. Слева от этого поля находятся две кнопки, которые последовательно переключают все загруженные текстурные packag'и. В поле внизу вы выбираете группу в текущем packag'e. Выберите там группу "Walls". Еще ниже есть несколько кнопок. Первые две, в виде стрелочек, последовательно переключают группы, следующими тремя можно выбрать формат отображения текстур в браузере, а последняя просто отменяет текущий выбор группы, показывая все текстуры из файла. Ну а теперь давайте начнем текстурирование уровня. Сначала выберите все стены в уровне. Это можно сделать выбрав по отдельности каждую стену, но гораздо проще выбрать только одну, а затем нажать Shift+W. Это выберет все стены, прилегающие к выбранной стене. Теперь в браузере выберите группу Walls(стены) и кликните на подходящую текстуру (например Ribbed1). Теперь выберите поверхности пола. Это проще всего сделать выбрав только одну поверхность и нажав Shift+F. Это выберет все поверхности пола прилегающие к данной. Теперь выберите группу Floor и кликните на какую-нибудь текстуру. Теперь проделайте то же самое с потолком, выбирая текстуры из группы Ceiling.

Окно

Теперь давайте сделаем еще одну комнату рядом с нашей первой комнатой и между этими комнатами сделаем окно. Сначала вырежьте еще одну комнату на расстоянии одной клетки от первой комнаты и прорежьте небольшую дырку размерами 128x128 между этими комнатами:


Если вы не можете правильно поместить вашу дырку, то измените размер сетки до 8 единиц. Для этого нажмите правую кнопку на пустом месте в 2D окне и выберите Grid->8 units. После того, как вы вырезали дырку, можно делать и само окно (стекло в этой дырке). Сначала выберите подходящую текстуру стекла. Ее можно найти в packag'e GenIn.utx, в группе Glass. Теперь мы сделаем саму поверхность стекла. Нажмите правой кнопкой на кнопку "Build a sheet" () и выберите из меню Sheet properties. Значения полей U(длина) и V(ширина) поставьте на 128(размер нашей дырки), В поле Orientation выберите X-Wall или Y-Wall. Теперь подвиньте поверхность точно в центр нашей дырки:

Теперь нажмите кнопку Add Special Brush (), в поле predefined выберите "Transparent window", в поле Visibility выберите 2-sided и нажмите на кнопку Add Special. Поверхность окна появится в 3D окне. Окно готово, однако когда вы запустите игру, вы увидите, что сквозь это окно без проблем проходят выстрелы, объекты, монстры и т.п. Это происходит из-за того, что простая поверхность никогда не будет блокировать актеров. Для того чтобы через окно нельзя было стрелять, надо добавить невидимое препятствие. Сделайте куб размерами 126x126x1 и поместите его точно перед поверхностью (для этого надо установить размер сетки равный единице):

Почему этот куб должен быть размерами 126x126, а не 128x128? Да потому что если бы он касался сторон нашей дырки, то возник бы эффект HOM (Hall Of Mirrors). Теперь нажимайте на кнопку Add Special Brush и в поле Predefined выберите Invisible Collision Hull. Теперь жмите на кнопку "Add Special". В 3D окне появится этот куб, но в самой игре его не будет видно. Также его не будте видно, если включить обновление уровня в реальном времени (кнопка в виде джойстика в углу 3D окна). Все, окно готово.

Параметры текстур

У каждой поверхности в вашем уровне есть множество параметров. Чтобы их увидеть, нажмите на поверхность правой кнопкой и выберите "Surface Properties" из меню. Вы увидите что-то похожее на это:


Как вы видите, для каждой поверхности можно установить различные эффекты. Вот краткое описание основных эффектов:
MASKED - делает невидимым цвет (0,0,0) в текстуре. Обычно это черный цвет. Используется во всяких решетках, окнах, цепях и т.п. Примеры таких текстур можно найти в файле DecayedS.utx в группе Mask. Просто добавьте где-нибудь sheet с этой текстурой и установите этот параметр, чтобы посмотреть что он делает.
INVISIBLE - делает поверхность невидимой
2-SIDED - делает поверхность видимой с обеих сторон. Дело в том, что большинство поверхностей видны только с одной стороны. Если в случае с трехмерными брашами с этим не возникает проблем (вы никогда не видите браш изнутри), то в случае с поверхностами (sheet), этот параметр может быть очень полезен.
PORTAL - делает поверхность границей между зонами.
MIRROR - делает поверхность зеркалом. В сочетании с Translucent поверхность будет выглядеть тщательно отполированной.
SPECIAL LIT - Поверхность освещается только источниками света с параметром Special Lit.
UNLIT - поверхность всегда 100% освещенная.
HI/LO SHADOW DETAIL - высокая/низкая детализация текстур. Если выбраны оба параметра, то детализация текстур будет супернизкой.
TRANSLUCENT - Делает поверхность прозрачной, чем темнее цвет, тем он прозрачнее.
MODULATED - то же самое что и Translucent, только наоборот - чем светлее цвет, тем он прозрачнее.
BIG/SMALL WAVY - Слабое/сильное волнообразное движение текстуры
FAKE BACKDROP - Вместо этой текстуры рисуется небо (SkyBox)
U/V PAN - движение текстуры по разным осям.
Кроме закладки Effects в окне свойствтекстуры есть еще несколько закладок. В закладке Rotate можно вращать текстуру с шагом 45 градусов. Чтобы повернуть текстуру на какой-то другой угол, надо использовать кнопку Rotate Textures (слева от кнопки Build a cylinder). После нажатия этой кнопки текстуры можно будет вращать нажав Ctrl+кнопку мыши. В закладке Pan можно двигать текстуру. Ее также можно дивгать нажав кнопку Pan Textures (слева от Rotate Textures) и Ctrl+кнопка мыши. В закладке Align можно избавится от нестыковки текстур. Например, выберите все текстуры пола и нажмите Floor/Ceiling. Если текстуры пола не были состыкованы, то они автоматически состыкуются. Так же можно поступить со стенами и потолком. Наконец, в закладке Scale можно увеличивать/уменьшать текстуру. Лично у меня работает только режим Simple Scaling, а Custom Scaling вылетает при попытке нажать Apply. Так что я использую Log Window для ввода нужных значений. Для этого надо открыть это окно (Window->Log), выбрать поверхность и написать "POLY TEXSCALE UU=x VV=y".

Освещение

Итак, у нас есть три комнаты, но все еще нету источников света. Давайте добавим их. Для начала добавьте в каждую комнату по одному простому источнику света, расположенному где-то на потолке и перестройте уровень. Как вы видите, если расположить источники света на потолке, то они дадут не слишком много света. Поэтому поместите их прямо в центре комнаты. Можете также переместить только один источник света и увидеть разницу. Теперь посмотрите на пол комнаты, в том месте, где начинается коридор, карты света (lightmaps) могут несостыковываться:


Эту проблему можно решить, выбрав все поверхности пола и установив для них аттрибут BrightCorners. Теперь внимательно посмотрите на наш уровень. У нас есть три хорошо освещенных комнаты. Но откуда же в них берется свет? Если в уровне нету видимого источника света, то это очень нереалистично и грубо карается теми, кто возможно будет "обзирать" вашу карту. Поэтому давайте добавим источник света на потолок. У нас это будет простой куб 128x128x16 с подходящей текстурой на нем, однако для своих карт вы должны придумать что-то посложнее. Итак, сделайте такой куб, поместите его на потолок и для начала обтяните одной из текстур из группы Base. Теперь выберите нижнюю поверхность браша и наложите на нее текстуру из группы Light (Light_9d например). Теперь перестройте уровень. Как вы видите, наш источник света получился очень темным и непохожим на источник света:

Поэтому мы выберем нижнюю поверхность и установим для нее аттрибут Unlit. Теперь все стало намного лучше:

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

Параметры источника света

У каждого источника света есть свои параметры, увидеть которые можно нажав правой кнопкой на этот источник света и выбрав Light Properties. Нужные нам параметры находятся в группах LightColor и Lighting. Вот краткое описание основных параметров:
LightBrightness - яркость источника света
LightHue - оттенок источника света. 0 - красный, 32 - желтый, 64 - зеленый, 128 - голубой, 192 - синий, 224 - фиолетовый, 256 - красный.
LightSaturation - насыщенность, а вернее сказать, бледность источника света. 255 - самый бледный (оттенок цвета ни на что не влияет), 0 - самый насыщенный.
LightRadius - радиус источника света. При яркости в 64, радиус должен быть в 4 раза больше, чем полщадь, которую освещает данный источник света.
LightEffect, LightType - различные динамические эффекты. Включите обновление мира в реальном времени (кнопка в виде джойстика в углу 3D-окна) и поэкспериментируйте с этими значениями, чтобы узнать что они делают.
bSpecialLit - действует только на поверхности с аттрибутом Special Lit.

Способы освещения поверхности

Помните, я говорил, что есть еще как минимум два способа освещения поверхности нашей лампы на потолке? Так вот они. Эти способы нужны для того, чтобы делать разноцветные источники света - ведь с помощью Unlit'а можно сделать источник света, цвет которого будет совпадать с цветом текстуры. Итак, чтобы сделать, например, красную лампу, надо окрасить текстуру в красный цвет. Существует, как я уже сказал, два способа сделать это. Первый способ - это поместить рядом с лампой очень яркий источник света нужного цвета и с очень маленьким радиусом, чтобы он кроме лампы ничего не задевал. Второй способ - это установить аттрибут Special Lit на нашей лампе и сделать тоже очень яркий источник света с параметром bSpecialLit=true, такой источник света не сможет задеть ничего кроме лампы, а значит этот способ аккуратнее. Однако, в большинстве случаев хватает и первого способа, так что вам решать, каким из этих двух способов надо воспользоваться. Ну вот собственно и все о чем вы должны знать. Только хочу сказать вам, что Unreal стал красивейшей игрой именно благодаря своим текстурам и, особенно, цветному освещению. Если убрать все освещение в игре (консольная команда RMODE 2), то Unreal станет довольно сильно похож на DOOM и вряд ли вы захотите в это играть. В общем, используйте цветное освещение на всю катушку и ваш уровень станет просто превосходным... и еще: побольше экспериментируйте. Не бойтесь изменять значения разных параметров и смотреть что из этого выходит. Таким способом можно добиться множества красивейших эффектов. Ну в общем теперь точно все. Если у вас возникнут волпросы то мыльте мне, я постараюсь ответить...