Освещение и текстуры
Автор: 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 и вряд ли вы захотите в это играть. В общем, используйте цветное
освещение на всю катушку и ваш уровень станет просто превосходным... и еще:
побольше экспериментируйте. Не бойтесь изменять значения разных параметров и
смотреть что из этого выходит. Таким способом можно добиться множества
красивейших эффектов. Ну в общем теперь точно все. Если у вас возникнут волпросы
то мыльте мне, я постараюсь ответить...