3d sky — разновидности и способы создания.
3d sky — разновидности и способы создания.
Введение:
Что такое 3d sky? Это декоративный фон на картах, который как правило не доступен игрокам, но призван визуально расширить границы игрового мира. То есть по сути является продвинутым skybox (скайбокс — это картинки неба, например пустыня с горами, (скайбокс по умолчанию на карте)). В отличие от вышеупомянутого скайбокса, который является статичным 2d фоном, 3d скай как понятно из его названия, использует трёхмерные объекты.
Сделать 3d скай можно различными способами, каждый способ имеет свои разновидности и недостатки, которые мы и рассмотрим.
Часть 1-я, вводная, для новичков:
Итак, для начала создадим коробку, покрасим стены и потолок текстурой неба, а пол соответственно текстурой земли. Также не забудем поставить точку старта игрока и light_environment. Вот что у нас должно получится:

Теперь посмотрим как эта коробка будет выглядеть в игре:

Довольно уныло, не так ли? Но по крайней мере небо немного разгоняет уныние. Размеры коробки не позволяют разгуляться игроку, плюс нет визуальных препятствий на пути игрока. Довольно неприятно упираться в невидимую стену на своём пути, не так ли? Поэтому давайте продолжим работу над нашим уровнем, добавим стены, также можно добавить ворота, плюс несколько объектов, для большей логичности уровня (Небольшое отступление, всегда стоит смотреть на свою карту с позиции логики, "А как игрок сюда попал? Если внутри помещения контейнеры, то как они здесь оказались, если здесь нет ворот достаточного размера? Куда ведут эти трубы? И т.д.").

Теперь игровой скрин:

Намного лучше, не так ли? Благодаря нескольким объектам, теперь уровень похож на охраняемую площадку с грузом. Однако наш уровень у нас всё ещё визуально ограничен скайбоксом, в принципе можно так и оставить, но можно ведь и дальше расширить границы мира, чем мы и займёмся в следующей части.
Часть 2-я, брашевый 3д скай:
Самым простым способом сделать 3д скай, является браш на границе карты с битовой маской (то есть с прозрачностью), например лес. Давайте его добавим на нашу тестовую карту, но так как лес плохо сочетается с тематикой "Блэк Месы", то для начала нам нужно будет перекрасить уровень. Например на зимнюю тематику. Так же не забудьте сменить имя скайбокса на соответствующий.

Ничего особенного, но хорошо помогает закрыть скайбокс от взглядов. Разумеется можно усложнить конструкцию, сделать несколько слоёв, добавить отдельных объектов и посмотреть что получится:

Довольно неплохо получилось, не правда ли? Однако более сложные объекты прибавляют полигонов на карте, и если вам приходится их жёстко экономить, то возможно пришло время воспользоваться 3d скаем сделанным из моделей.
Часть 3-я, 3d скай из моделей:
Итак продолжим. Давайте для начала расширим наш уровень (заодно и подправим свет):

Теперь добавим дома за забором, но сделаем их моделью. Так как готовой модельки под рукой у нас нет, то нам придётся сделать её самим.
Если у вас нет навыков работы в 3д редакторе, то возможно пришло время овладеть базисами (которые вам ещё не раз пригодятся), сейчас мы рассмотрим как сделать простейшую модельку. Делать её мы будем в low-poly редакторе kHed (ссылку на редактор вы найдёте в конце этой статьи).
Для начала нам понадобятся текстуры домов (желательно в зимнем варианте), текстуры должны быть такого же формата как и в хаммере (то есть индексированные 256 цветов в 8-битной разрядности).
Откройте редактор и выберите инструмент "Box Tool" (на параметры инструмента пока не обращайте внимания, они нам сейчас не понадобятся):

Теперь включим привязку к сетке (необязательно, но для удобства не помешает), для этого нажмите на иконку магнита, в верхней части окна, затем правой клавишой мышки на цифру 5 (это масштаб привязки). В 2д окне (желательно в фронтальном виде), зажимаем левую кнопку мыши и ведём вверх, затем вбок (тем самым очерчивая вид будущего здания), после чего отпускаем кнопку мышки и тянем ещё раз в сторону, задавая глубину куба:

Должен появится вот такой параллелепипед, разумеется без текстуры (если в 3д виде у вас нет "шахматной" текстуры, то вам надо будет нажать правой клавишей мышки в 3д виде и выбрать пункт "Textured"):

Теперь давайте избавимся от лишних плоскостей нашей модельки, которые игрок не сможет увидеть, для экономии полигонов.
Выберите инструмент "Select Polygon" и в 3д виде выделите полигоны для удаления (нажатие и удержание левой клавиши мышки позволит вращать камеру в 3д виде, одиночный клик выделяет полигон, выделение с shift позволит выбрать несколько полигонов). Нам понадобится только фронтальные и боковые полигоны, остальные можно смело удалять нажатием Del:

Вот что должно у вас получится:

Теперь перейдём к окраске нашей модели, для этого нам понадобится инструмент "Materials", чтобы его выбрать, нажмите "М", либо иконку папки с палитрой (находится сверху, недалеко от иконки с магнитом):

Нажимаем кнопку "New" (иконка с чистым листом), теперь выберем одну из текстур которые мы приготовили заранее, для этого нажимаем на кнопку с трёхточием и находим наши текстуры:

Выделяем нашу модель (Либо ctrl+A, либо выделив модельку в 2д виде, либо выбором инструмента "Select Group" с последующим кликом на модельке в 3д виде) и жмём в окне "Materials" кнопку "Assign":

Итак у нашей модели есть текстура, однако если присмотреться к модели, то станет видно, что на боковых гранях текстура повёрнута на 90 градусов. Исправить эту ошибку можно двумя способами:
1-й способ, выбрать инструмент "UV Editor" нажатием клавиши "Т", либо выбрав крайнюю иконку с надписью "UV":

В левом верхнем углу, есть ряд иконок, нам нам понадобится инструмент "Select Triangle", с зажатым шифтом выбираем боковые грани, нажимаем кнопку "Unweld", ещё раз выбираем боковые грани, в 2д окне нажимаем на один из кружков в углу, и держа нажатой кнопку мышки вращаем текстуру влево, должно получится вот так:

Закрываем окно.
2-й способ будет немного попроще, выделяем боковые грани модельки и выбираем инструмент "Mapping Tool":

Затем в 3д виде кликаем на боковую грань модельки и нажимаем клавишу "Remap":

Теперь нам надо позаботится о масштабе модельки. Для таких целей у меня есть декомпилированная моделька игрока (ссылка как всегда в конце статьи). Выберите File>Import>Wavefront Object (*.obj):

Как видно, масштаб не очень нам подходит. Убираем модельку игрока (Ctrl+Z), выделяем модельку здания и выбираем инструмент "Scale":

Выбираем пункт "Origin" и нажимаем кнопку "Double" несколько раз, трёх раз должно хватить (либо же можно задать нужную величину в окне координат). Проверяем моделькой игрока:

Вот теперь в самый раз.
Небольшой ликбез:
В принципе можно бы модельку и скомпилировать, однако есть несколько нюансов. Во-первых центр модели, он определяется нулевыми координатами, то есть это вон тот самый крестик в 2д виде и координатные линии на сетке в 3д виде. От центра модели зависит её видимость и её освещённость. Точнее свет моделька берёт от физического браша непосредственно под её центром, и этот центр обязательно должен присутствовать в пределах карты, например, если у вас есть огромная моделька трубы\дома\лэп, вам не обязательно её целиком помещать внутрь карты, достаточно разместить лишь её центр в пределах карты (крестик в 2д виде, в хаммере). Такая моделька будет в любом случае видна на карте, даже если её "физическое тело", лежит далеко за пределами карты. На этом собственно и основан наш 3d sky.
Итак вернёмся к нашим баранам. Так как моделька у нас должна быть за забором, то нам необходимо поднять её центр до достаточного уровня.
Выбираем инструмент "Move Tool":

Уменьшаем масштаб просмотра в 2д виде, выделяем модельку и наводим курсор на нижнюю стрелку крестика, когда горизонтальная линия станет синей, потяните вниз, пока моделька не опустится примерно до середины центра:

Так как стена у нас имеет некую толщину, то модельку можно ещё немного отодвинуть вглубь:

Теперь давайте продублируем нашу модель и сделаем ряд домов. Жмём ctrl+D и двигаем модель. Повторяем несколько раз. Думаю штук 5 нам хватит для начала:

Небось уже не терпится посмотреть нашу модельку в игре?
Но ещё немного терпения. Давайте разнообразим наши домики и покрасим парочку другой текстурой.
Для этого выделим два дома (советую выделить в 3д виде инструментом "Select Group", иконка красного шарика справа), откроем окно "Materials", добавим новую текстуру и применим к выделенным моделькам:

Не очень пропорционально в итоге, но для примера сойдёт. Настало время скомпилировать модельку и закинуть её в игру.
Компилируются модели в кеде очень просто, главное не забыть положить файл "studiomdl.exe" (ссылка в конце статьи) в папку с программой. Нажимаем File>Export>Half-life Model (*.mdl), даём ей имя и… всё. Моделька готова, можно закидывать её в каталог с модельками (лучше всего создать отдельную папку в моделях для вашей карты, так будет проще).
Давайте теперь поставим модельки на нашу карту:

Так как моделька оказалась коротковата, пришлось её продублировать, то есть скопировать cyler_sprite (в хаммере проще всего объекты копировать с зажатым shift, т.е. просто передвигаете объект с зажатым шифтом и он продублируется). Как видно по скрину, моделька визуально осталась "за бортом", но её центр находится внутри карты. Давайте же посмотрим игровой скрин:

В игре всё отлично отображается и при этом экономятся драгоценные ресурсы. Однако это был всего лишь простейший пример, можно ведь создавать куда более сложные приёмы. Давайте посмотрим на этот скрин:

Представим что у нас тут конец карты, и нам надо чем-то обосновать этот обрыв в пустоту. Что же мы можем тут поделать? Поставить врата, может туннель, или перекрыть грузовиком? Да, это всё действенные способы, однако есть и более интересные. Ведь мы же можем расшить визуальное пространство при помощи 3д ская! Например мы можем скопировать дорогу, лес и прочие объекты в 3д виде, дабы визуально уровень простирался очень далеко, но нам понадобится довольно точная подгонка моделей к брашам, этот способ мы и рассмотрим в следующей части.
Часть 3-я, продвинутый 3d скай:
Для начала нам понадобится скопировать браши которые будут использоваться в 3д скае, то есть лес, дорога с заснеженной землёю, забором… и пожалуй что с домами за оным (но с домами у нас будет меньше забот, так как готовая модель домиков у нас уже имеется). Это нужно для того, чтобы точно подогнать модельку к брашам карты.
Скопированный кусок вставляем в новую карту и обрезаем, для удобства, примерно вот так:

Компилируем карту как есть, без неба и энтить. Теперь нам понадобится программа BSP Viewer. В ней мы открываем bsp файл и экспортируем карту в формат .3ds, предварительно убрав все галочки:

Также нам понадобится экспортировать используемые текстуры на этом кусочке модели. Открываем kHED и импортируем нашу заготовку:

Как видно, модель появилась далеко от центра, и для удобства нам надо её передвинуть в центр. Удаляем лишние полигоны (в моём случае лишние полигоны остались на полигонах с лесом и на заборе образовалась внизу лишняя полоса, которую пришлось удалить, затем подвинул нижние вертексы до земли). Теперь нам надо покрасить полигоны. Если зайти в группы, то мы увидим несколько групп образованных при экспорте брашей. Три группы "леса", одна группа "забора" и всё остальное.

Нам придётся перераспределить группы, так как на одну группу положена одна текстура, а текстур у нас используется шесть штук. После этого следует назначить каждой группе свою текстуру, должно получится вот так:

Вроде всё в порядке, но не совсем. Выделяем модель и заходим в UV Editor, уменьшаем масштаб картинки, и что же мы видим?

Как видим, текстурная сетка не на своём месте, а убежала куда-то далеко. Наша задача поместить её в квадрат. Так как к сожалению гс (т.е. GoldSource, он же движок Half-life\Counter-strike и т.д.) в моделях, не поддерживает тайлинг текстур (то есть дублирование текстур), то нам придётся хранить текстурную сетку внутри квадрата. Так же если нам понадобится растянуть полигоны модели, то это значит что и текстура растянется вместе с ними, а поэтому придётся дублировать модель, на относительно небольшие квадраты, хотя есть один способ уменьшить их количество… для этого, нам понадобится использовать большие текстуры, как правило "расширяя" имеющиеся текстуры, то есть делая из текстуры размером 128х128 размер 512х512. Такой способ экономит количество полигонов модели. К слову, максимальный размер текстуры модели для гс, равен 1024 пикселя в сумме, то есть, например 512х512, либо 1000х24 и т.д., главное не превышать лимит.
Давайте вернём на место текстурные координаты на всех частях модели (чтобы выбрать другой кусок модели, необходимо ткнуть в надпись "Material 1" сверху и выбрать из выпадающего списка другую текстуру), плюс растянем их по всему периметру квадрата (кроме снега).
После этого можно выйти из режима редактирования текстурной сетки и немного растянуть саму модельку, чтобы текстура на ней выглядела пропорционально, должно получится примерно так:

Обратите внимание, фейс с копией текстурой леса отражён по горизонтали, чтобы не было точной копии (отзеркалить текстуру можно в режиме редактирования текстурной сетки, для этого служат две кнопки сверху, с иконками "Я|R")
Теперь, после всех подготовительных работ, настало время продублировать нашу структуру, раз эдак -надцать, то есть по желанию. Для этого выделяем всю модель, нажимаем комбо "Ctrl+D", двигаем дубль к границам модели (для точности советую включить "магнит", если он у вас был выключен), затем повторяем до нужного количества.
Не забудьте передвинуть модель от центра немного вбок, дабы центр модели был внутри карты.

В принципе можно уже компилировать и пробовать как оно будет смотреться, но всё же предлагаю немного доработать нашу модель, а именно добавить дома, которые мы делали раньше.
Нажимаем File>Import>Half-life Model (*.mdl), указываем модельку домов. Если присмотреться к добавленным моделям, то можно увидеть какую-то тень, дело в том, что импорт искажает группы сглаживания модели, поэтому их надо каждый раз исправлять при импорте. Для этого выделяем добавленную модель, ищем сверху кнопку в виде двух кружок с буквой А, нажимаем в появившимся окне "Ок". Теперь можно передвинуть дома на их место (развернуть по необходимости), продублировать (перед дублированием стоит удалить левую боковую часть домов, так как они не будут видны игрокам).
Теперь можно скомпилировать модель. После компиляции модели, откройте её в программе Jed's Half-Life Model Viewer 1.35, перейдите в вкладку текстуры. Здесь необходимо поставить флажки "Transparent" на текстуре леса и забора, этот флаг включает прозрачность у текстур с битовой маской. После этого сохраняем модель.
Казалось бы, теперь-то уж можно и открыть хаммер, но есть ещё один нюанс, так как у нас дорога идёт в две стороны, то нам понадобится две модельки. Использовать одну и ту же модель не получится, так как центр модели возле самого края, поэтому нам надо отзеркалить модель и сохранить под новым именем.
Выделяем всю модель, возле магнита ищем иконку "Я|R" (нужна именно красно-серая, она служит для отзеркаливания модели, красно-красная иконка делает отзеркаливание с дублированием), компилируем, сохраняем.
Наконец-то можно вернутся в хаммер и добавить новые модельки. Теперь предстоит кропотливая работа по подгонке модельки к краям карты. Для точной подгонки понемногу двигайте модель за точки по периметру.

Как видно на 2д виде, такая моделька может располагаться далеко за пределами карты.
Теперь давайте посмотрим на вид в игре:

Моделька заметно темнее брашей по соседству, нам надо её осветить. Самый просто способ выставить параметр солнца "Pitch" вниз. Также можно просто осветить браш находящийся под центром модели, но по ряду причин такой способ не всегда подходит.
Итак, выставляем угол солнца в зенит и смотрим результат:

Теперь моделька равномерно освещена и хорошо вписывается в окружение. Однако различия между моделькой и брашами, хорошо видны на расстоянии, а всё потому, что модельки не поддерживают мипмаппинг, то есть сглаживание на расстоянии. Если присмотреться к скрину в полном размере, то это отличие становится хорошо видно. Однако если ваша моделька будет располагаться на значительном расстоянии от игрока, то можно либо просто растянуть саму модельку в редакторе, либо же поработать с текстурами, растягивая их до "мутного состояния". Это надо будет для того, чтобы на расстоянии не было значительных различий между моделькой и брашами.
Давайте же взглянем на границу поближе:

Вот теперь различий практически нет, границу можно увидеть только по не подогнанной текстуре забора и более чуть светлее браша (бетонный забор слева также немного темнее), если поиграться с параметрами света, то и эта разница нивелируется.
Эпилог:
По сути "3д скай" рассмотренный в этом туторе, не является настоящим "3д скаем", как в играх на других движках. 3д скаем является проекция группы моделей на скайбокс, в сильно увеличенном виде. Наш же "3д скай" обладает кучей недостатков, таких как полная зависимость её видимости от центра модели (думаю многие сталкивались с внезапно пропадающими деревьями и другими модельками при определённом местоположении игрока), её освещённости и т.д., но это во многом компенсируется обратной стороной медали.
Карта с исходниками и моделями:
Карта
Моделька игрока
Список программ:
Jed's Half-Life Model Viewer 1.35
kHED 1.1.5
studiomd
Bsp Viewer
P.S. Спасибо Mr. Jeff за просьбу написать тутор на тему 3д ская и Mpak'у за вычитку статьи.
3d sky — разновидности и способы создания.
Введение:
Что такое 3d sky? Это декоративный фон на картах, который как правило не доступен игрокам, но призван визуально расширить границы игрового мира. То есть по сути является продвинутым skybox (скайбокс — это картинки неба, например пустыня с горами, (скайбокс по умолчанию на карте)). В отличие от вышеупомянутого скайбокса, который является статичным 2d фоном, 3d скай как понятно из его названия, использует трёхмерные объекты.
Сделать 3d скай можно различными способами, каждый способ имеет свои разновидности и недостатки, которые мы и рассмотрим.
Часть 1-я, вводная, для новичков:
Итак, для начала создадим коробку, покрасим стены и потолок текстурой неба, а пол соответственно текстурой земли. Также не забудем поставить точку старта игрока и light_environment. Вот что у нас должно получится:

Теперь посмотрим как эта коробка будет выглядеть в игре:

Довольно уныло, не так ли? Но по крайней мере небо немного разгоняет уныние. Размеры коробки не позволяют разгуляться игроку, плюс нет визуальных препятствий на пути игрока. Довольно неприятно упираться в невидимую стену на своём пути, не так ли? Поэтому давайте продолжим работу над нашим уровнем, добавим стены, также можно добавить ворота, плюс несколько объектов, для большей логичности уровня (Небольшое отступление, всегда стоит смотреть на свою карту с позиции логики, "А как игрок сюда попал? Если внутри помещения контейнеры, то как они здесь оказались, если здесь нет ворот достаточного размера? Куда ведут эти трубы? И т.д.").

Теперь игровой скрин:

Намного лучше, не так ли? Благодаря нескольким объектам, теперь уровень похож на охраняемую площадку с грузом. Однако наш уровень у нас всё ещё визуально ограничен скайбоксом, в принципе можно так и оставить, но можно ведь и дальше расширить границы мира, чем мы и займёмся в следующей части.
Часть 2-я, брашевый 3д скай:
Самым простым способом сделать 3д скай, является браш на границе карты с битовой маской (то есть с прозрачностью), например лес. Давайте его добавим на нашу тестовую карту, но так как лес плохо сочетается с тематикой "Блэк Месы", то для начала нам нужно будет перекрасить уровень. Например на зимнюю тематику. Так же не забудьте сменить имя скайбокса на соответствующий.

Ничего особенного, но хорошо помогает закрыть скайбокс от взглядов. Разумеется можно усложнить конструкцию, сделать несколько слоёв, добавить отдельных объектов и посмотреть что получится:

Довольно неплохо получилось, не правда ли? Однако более сложные объекты прибавляют полигонов на карте, и если вам приходится их жёстко экономить, то возможно пришло время воспользоваться 3d скаем сделанным из моделей.
Часть 3-я, 3d скай из моделей:
Итак продолжим. Давайте для начала расширим наш уровень (заодно и подправим свет):

Теперь добавим дома за забором, но сделаем их моделью. Так как готовой модельки под рукой у нас нет, то нам придётся сделать её самим.
Если у вас нет навыков работы в 3д редакторе, то возможно пришло время овладеть базисами (которые вам ещё не раз пригодятся), сейчас мы рассмотрим как сделать простейшую модельку. Делать её мы будем в low-poly редакторе kHed (ссылку на редактор вы найдёте в конце этой статьи).
Для начала нам понадобятся текстуры домов (желательно в зимнем варианте), текстуры должны быть такого же формата как и в хаммере (то есть индексированные 256 цветов в 8-битной разрядности).
Откройте редактор и выберите инструмент "Box Tool" (на параметры инструмента пока не обращайте внимания, они нам сейчас не понадобятся):

Теперь включим привязку к сетке (необязательно, но для удобства не помешает), для этого нажмите на иконку магнита, в верхней части окна, затем правой клавишой мышки на цифру 5 (это масштаб привязки). В 2д окне (желательно в фронтальном виде), зажимаем левую кнопку мыши и ведём вверх, затем вбок (тем самым очерчивая вид будущего здания), после чего отпускаем кнопку мышки и тянем ещё раз в сторону, задавая глубину куба:

Должен появится вот такой параллелепипед, разумеется без текстуры (если в 3д виде у вас нет "шахматной" текстуры, то вам надо будет нажать правой клавишей мышки в 3д виде и выбрать пункт "Textured"):

Теперь давайте избавимся от лишних плоскостей нашей модельки, которые игрок не сможет увидеть, для экономии полигонов.
Выберите инструмент "Select Polygon" и в 3д виде выделите полигоны для удаления (нажатие и удержание левой клавиши мышки позволит вращать камеру в 3д виде, одиночный клик выделяет полигон, выделение с shift позволит выбрать несколько полигонов). Нам понадобится только фронтальные и боковые полигоны, остальные можно смело удалять нажатием Del:

Вот что должно у вас получится:

Теперь перейдём к окраске нашей модели, для этого нам понадобится инструмент "Materials", чтобы его выбрать, нажмите "М", либо иконку папки с палитрой (находится сверху, недалеко от иконки с магнитом):

Нажимаем кнопку "New" (иконка с чистым листом), теперь выберем одну из текстур которые мы приготовили заранее, для этого нажимаем на кнопку с трёхточием и находим наши текстуры:

Выделяем нашу модель (Либо ctrl+A, либо выделив модельку в 2д виде, либо выбором инструмента "Select Group" с последующим кликом на модельке в 3д виде) и жмём в окне "Materials" кнопку "Assign":

Итак у нашей модели есть текстура, однако если присмотреться к модели, то станет видно, что на боковых гранях текстура повёрнута на 90 градусов. Исправить эту ошибку можно двумя способами:
1-й способ, выбрать инструмент "UV Editor" нажатием клавиши "Т", либо выбрав крайнюю иконку с надписью "UV":

В левом верхнем углу, есть ряд иконок, нам нам понадобится инструмент "Select Triangle", с зажатым шифтом выбираем боковые грани, нажимаем кнопку "Unweld", ещё раз выбираем боковые грани, в 2д окне нажимаем на один из кружков в углу, и держа нажатой кнопку мышки вращаем текстуру влево, должно получится вот так:

Закрываем окно.
2-й способ будет немного попроще, выделяем боковые грани модельки и выбираем инструмент "Mapping Tool":

Затем в 3д виде кликаем на боковую грань модельки и нажимаем клавишу "Remap":

Теперь нам надо позаботится о масштабе модельки. Для таких целей у меня есть декомпилированная моделька игрока (ссылка как всегда в конце статьи). Выберите File>Import>Wavefront Object (*.obj):

Как видно, масштаб не очень нам подходит. Убираем модельку игрока (Ctrl+Z), выделяем модельку здания и выбираем инструмент "Scale":

Выбираем пункт "Origin" и нажимаем кнопку "Double" несколько раз, трёх раз должно хватить (либо же можно задать нужную величину в окне координат). Проверяем моделькой игрока:

Вот теперь в самый раз.
Небольшой ликбез:
В принципе можно бы модельку и скомпилировать, однако есть несколько нюансов. Во-первых центр модели, он определяется нулевыми координатами, то есть это вон тот самый крестик в 2д виде и координатные линии на сетке в 3д виде. От центра модели зависит её видимость и её освещённость. Точнее свет моделька берёт от физического браша непосредственно под её центром, и этот центр обязательно должен присутствовать в пределах карты, например, если у вас есть огромная моделька трубы\дома\лэп, вам не обязательно её целиком помещать внутрь карты, достаточно разместить лишь её центр в пределах карты (крестик в 2д виде, в хаммере). Такая моделька будет в любом случае видна на карте, даже если её "физическое тело", лежит далеко за пределами карты. На этом собственно и основан наш 3d sky.
Итак вернёмся к нашим баранам. Так как моделька у нас должна быть за забором, то нам необходимо поднять её центр до достаточного уровня.
Выбираем инструмент "Move Tool":

Уменьшаем масштаб просмотра в 2д виде, выделяем модельку и наводим курсор на нижнюю стрелку крестика, когда горизонтальная линия станет синей, потяните вниз, пока моделька не опустится примерно до середины центра:

Так как стена у нас имеет некую толщину, то модельку можно ещё немного отодвинуть вглубь:

Теперь давайте продублируем нашу модель и сделаем ряд домов. Жмём ctrl+D и двигаем модель. Повторяем несколько раз. Думаю штук 5 нам хватит для начала:

Небось уже не терпится посмотреть нашу модельку в игре?
Для этого выделим два дома (советую выделить в 3д виде инструментом "Select Group", иконка красного шарика справа), откроем окно "Materials", добавим новую текстуру и применим к выделенным моделькам:

Не очень пропорционально в итоге, но для примера сойдёт. Настало время скомпилировать модельку и закинуть её в игру.
Компилируются модели в кеде очень просто, главное не забыть положить файл "studiomdl.exe" (ссылка в конце статьи) в папку с программой. Нажимаем File>Export>Half-life Model (*.mdl), даём ей имя и… всё. Моделька готова, можно закидывать её в каталог с модельками (лучше всего создать отдельную папку в моделях для вашей карты, так будет проще).
Давайте теперь поставим модельки на нашу карту:

Так как моделька оказалась коротковата, пришлось её продублировать, то есть скопировать cyler_sprite (в хаммере проще всего объекты копировать с зажатым shift, т.е. просто передвигаете объект с зажатым шифтом и он продублируется). Как видно по скрину, моделька визуально осталась "за бортом", но её центр находится внутри карты. Давайте же посмотрим игровой скрин:

В игре всё отлично отображается и при этом экономятся драгоценные ресурсы. Однако это был всего лишь простейший пример, можно ведь создавать куда более сложные приёмы. Давайте посмотрим на этот скрин:

Представим что у нас тут конец карты, и нам надо чем-то обосновать этот обрыв в пустоту. Что же мы можем тут поделать? Поставить врата, может туннель, или перекрыть грузовиком? Да, это всё действенные способы, однако есть и более интересные. Ведь мы же можем расшить визуальное пространство при помощи 3д ская! Например мы можем скопировать дорогу, лес и прочие объекты в 3д виде, дабы визуально уровень простирался очень далеко, но нам понадобится довольно точная подгонка моделей к брашам, этот способ мы и рассмотрим в следующей части.
Часть 3-я, продвинутый 3d скай:
Для начала нам понадобится скопировать браши которые будут использоваться в 3д скае, то есть лес, дорога с заснеженной землёю, забором… и пожалуй что с домами за оным (но с домами у нас будет меньше забот, так как готовая модель домиков у нас уже имеется). Это нужно для того, чтобы точно подогнать модельку к брашам карты.
Скопированный кусок вставляем в новую карту и обрезаем, для удобства, примерно вот так:

Компилируем карту как есть, без неба и энтить. Теперь нам понадобится программа BSP Viewer. В ней мы открываем bsp файл и экспортируем карту в формат .3ds, предварительно убрав все галочки:

Также нам понадобится экспортировать используемые текстуры на этом кусочке модели. Открываем kHED и импортируем нашу заготовку:

Как видно, модель появилась далеко от центра, и для удобства нам надо её передвинуть в центр. Удаляем лишние полигоны (в моём случае лишние полигоны остались на полигонах с лесом и на заборе образовалась внизу лишняя полоса, которую пришлось удалить, затем подвинул нижние вертексы до земли). Теперь нам надо покрасить полигоны. Если зайти в группы, то мы увидим несколько групп образованных при экспорте брашей. Три группы "леса", одна группа "забора" и всё остальное.

Нам придётся перераспределить группы, так как на одну группу положена одна текстура, а текстур у нас используется шесть штук. После этого следует назначить каждой группе свою текстуру, должно получится вот так:

Вроде всё в порядке, но не совсем. Выделяем модель и заходим в UV Editor, уменьшаем масштаб картинки, и что же мы видим?

Как видим, текстурная сетка не на своём месте, а убежала куда-то далеко. Наша задача поместить её в квадрат. Так как к сожалению гс (т.е. GoldSource, он же движок Half-life\Counter-strike и т.д.) в моделях, не поддерживает тайлинг текстур (то есть дублирование текстур), то нам придётся хранить текстурную сетку внутри квадрата. Так же если нам понадобится растянуть полигоны модели, то это значит что и текстура растянется вместе с ними, а поэтому придётся дублировать модель, на относительно небольшие квадраты, хотя есть один способ уменьшить их количество… для этого, нам понадобится использовать большие текстуры, как правило "расширяя" имеющиеся текстуры, то есть делая из текстуры размером 128х128 размер 512х512. Такой способ экономит количество полигонов модели. К слову, максимальный размер текстуры модели для гс, равен 1024 пикселя в сумме, то есть, например 512х512, либо 1000х24 и т.д., главное не превышать лимит.
Давайте вернём на место текстурные координаты на всех частях модели (чтобы выбрать другой кусок модели, необходимо ткнуть в надпись "Material 1" сверху и выбрать из выпадающего списка другую текстуру), плюс растянем их по всему периметру квадрата (кроме снега).
После этого можно выйти из режима редактирования текстурной сетки и немного растянуть саму модельку, чтобы текстура на ней выглядела пропорционально, должно получится примерно так:

Обратите внимание, фейс с копией текстурой леса отражён по горизонтали, чтобы не было точной копии (отзеркалить текстуру можно в режиме редактирования текстурной сетки, для этого служат две кнопки сверху, с иконками "Я|R")
Теперь, после всех подготовительных работ, настало время продублировать нашу структуру, раз эдак -надцать, то есть по желанию. Для этого выделяем всю модель, нажимаем комбо "Ctrl+D", двигаем дубль к границам модели (для точности советую включить "магнит", если он у вас был выключен), затем повторяем до нужного количества.
Не забудьте передвинуть модель от центра немного вбок, дабы центр модели был внутри карты.

В принципе можно уже компилировать и пробовать как оно будет смотреться, но всё же предлагаю немного доработать нашу модель, а именно добавить дома, которые мы делали раньше.
Нажимаем File>Import>Half-life Model (*.mdl), указываем модельку домов. Если присмотреться к добавленным моделям, то можно увидеть какую-то тень, дело в том, что импорт искажает группы сглаживания модели, поэтому их надо каждый раз исправлять при импорте. Для этого выделяем добавленную модель, ищем сверху кнопку в виде двух кружок с буквой А, нажимаем в появившимся окне "Ок". Теперь можно передвинуть дома на их место (развернуть по необходимости), продублировать (перед дублированием стоит удалить левую боковую часть домов, так как они не будут видны игрокам).
Теперь можно скомпилировать модель. После компиляции модели, откройте её в программе Jed's Half-Life Model Viewer 1.35, перейдите в вкладку текстуры. Здесь необходимо поставить флажки "Transparent" на текстуре леса и забора, этот флаг включает прозрачность у текстур с битовой маской. После этого сохраняем модель.
Казалось бы, теперь-то уж можно и открыть хаммер, но есть ещё один нюанс, так как у нас дорога идёт в две стороны, то нам понадобится две модельки. Использовать одну и ту же модель не получится, так как центр модели возле самого края, поэтому нам надо отзеркалить модель и сохранить под новым именем.
Выделяем всю модель, возле магнита ищем иконку "Я|R" (нужна именно красно-серая, она служит для отзеркаливания модели, красно-красная иконка делает отзеркаливание с дублированием), компилируем, сохраняем.
Наконец-то можно вернутся в хаммер и добавить новые модельки. Теперь предстоит кропотливая работа по подгонке модельки к краям карты. Для точной подгонки понемногу двигайте модель за точки по периметру.

Как видно на 2д виде, такая моделька может располагаться далеко за пределами карты.
Теперь давайте посмотрим на вид в игре:

Моделька заметно темнее брашей по соседству, нам надо её осветить. Самый просто способ выставить параметр солнца "Pitch" вниз. Также можно просто осветить браш находящийся под центром модели, но по ряду причин такой способ не всегда подходит.
Итак, выставляем угол солнца в зенит и смотрим результат:

Теперь моделька равномерно освещена и хорошо вписывается в окружение. Однако различия между моделькой и брашами, хорошо видны на расстоянии, а всё потому, что модельки не поддерживают мипмаппинг, то есть сглаживание на расстоянии. Если присмотреться к скрину в полном размере, то это отличие становится хорошо видно. Однако если ваша моделька будет располагаться на значительном расстоянии от игрока, то можно либо просто растянуть саму модельку в редакторе, либо же поработать с текстурами, растягивая их до "мутного состояния". Это надо будет для того, чтобы на расстоянии не было значительных различий между моделькой и брашами.
Давайте же взглянем на границу поближе:

Вот теперь различий практически нет, границу можно увидеть только по не подогнанной текстуре забора и более чуть светлее браша (бетонный забор слева также немного темнее), если поиграться с параметрами света, то и эта разница нивелируется.
Эпилог:
По сути "3д скай" рассмотренный в этом туторе, не является настоящим "3д скаем", как в играх на других движках. 3д скаем является проекция группы моделей на скайбокс, в сильно увеличенном виде. Наш же "3д скай" обладает кучей недостатков, таких как полная зависимость её видимости от центра модели (думаю многие сталкивались с внезапно пропадающими деревьями и другими модельками при определённом местоположении игрока), её освещённости и т.д., но это во многом компенсируется обратной стороной медали.
Карта с исходниками и моделями:
Карта
Моделька игрока
Список программ:
Jed's Half-Life Model Viewer 1.35
kHED 1.1.5
studiomd
Bsp Viewer
P.S. Спасибо Mr. Jeff за просьбу написать тутор на тему 3д ская и Mpak'у за вычитку статьи.
