Sidebar

3d sky — разновидности и способы создания.

  • Рекомендуется задавать вопросы только относительно темы с уроком. Для остальных вопросов существует раздел [url=http://cs-mapping.com.ua/forum/forumdisplay.php?f=12]«Помощь»[/url].

    Темы с просьбами помощи будут удаляться без предупреждения и без объяснения причины.

    Запрещается поднятие старой темы оффтопом. Ваше сообщение будет удалено, а в профиль будет выписано замечание.

Flash

VIP
VIP
21.09.2004
16 981
37
  • Золотая медаль 111
  • Серебряная медаль 216
  • Золотая медаль 221
  • Серебряная медаль 311
  • Серебряная медаль 115
  • Золотая медаль 125
  • Золотая медаль 211
3d sky — разновидности и способы создания.

3d sky — разновидности и способы создания.

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

Часть 1-я, вводная, для новичков:
Итак, для начала создадим коробку, покрасим стены и потолок текстурой неба, а пол соответственно текстурой земли. Также не забудем поставить точку старта игрока и light_environment. Вот что у нас должно получится:
1.jpg

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

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

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

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

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

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

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

Часть 3-я, 3d скай из моделей:
Итак продолжим. Давайте для начала расширим наш уровень (заодно и подправим свет):
7.jpg

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Вот теперь в самый раз.

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

Итак вернёмся к нашим баранам. Так как моделька у нас должна быть за забором, то нам необходимо поднять её центр до достаточного уровня.
Выбираем инструмент "Move Tool":
23.jpg

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

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

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

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

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

Давайте теперь поставим модельки на нашу карту:
28.jpg

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

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

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

Часть 3-я, продвинутый 3d скай:
Для начала нам понадобится скопировать браши которые будут использоваться в 3д скае, то есть лес, дорога с заснеженной землёю, забором… и пожалуй что с домами за оным (но с домами у нас будет меньше забот, так как готовая модель домиков у нас уже имеется). Это нужно для того, чтобы точно подогнать модельку к брашам карты.
Скопированный кусок вставляем в новую карту и обрезаем, для удобства, примерно вот так:
31.jpg

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

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

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

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

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

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

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

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

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

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

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

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

Эпилог:
По сути "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'у за вычитку статьи.
 

KPE030T

Герой Советского Союза
09.11.2010
3 829
111
63
2 ZGreen:
Я такую модель и без всяких китайских приблуд делал, просто правильно рассчитывал, где именно расположить центр так чтобы видно было из всех концов карты:
 

JPEG

Active member
02.10.2013
947
27
За тутор респект, пригодится, хотя сейчас мало новичков для гс. Только чё-то ксм половину картинок не может сразу прогрузить, может на геймерлаб зальёшь? А вообще божественно на голдсорсе 3д скай реализован в моде Naruto Naiteki Kensei R1 от немца DJ-Ready, также автора MechMod, откуда потом ещё все хотели код водички унести :) правда мод сверхглючный
 

Вложения

Chakki Skrip

Active member
13.09.2014
514
24
83
28
next21.ru
2 Flash:
Превосходный урок, карту скачал, классная.
P.S. Кто помнит зеркало в cs 1.6?(Вроде бы от Dr.Tressi) Там энтити отображаться могут. Темы к сожалению на форуме не нашел, может кто-то создаст туториал о создание этого зеркала?
 
Последнее редактирование:

Flash

VIP
VIP
21.09.2004
16 981
37
  • Золотая медаль 111
  • Серебряная медаль 216
  • Золотая медаль 221
  • Серебряная медаль 311
  • Серебряная медаль 115
  • Золотая медаль 125
  • Золотая медаль 211
Если в чистом гс, то только копированием энтить и брашей по ту сторону зеркала.
 

Manson

любитель кубизма
18.12.2007
5 007
35
69
48
Сумы
а я вот думаю, кайф не только в 3D небе,но еще и в движущихся облаках как на сорсе
 

Flash

VIP
VIP
21.09.2004
16 981
37
  • Золотая медаль 111
  • Серебряная медаль 216
  • Золотая медаль 221
  • Серебряная медаль 311
  • Серебряная медаль 115
  • Золотая медаль 125
  • Золотая медаль 211
Ну так не трудно сделать, достаточно сделать полую сферу-модель, с текстурой облаков и сделать анимацию.
 

Manson

любитель кубизма
18.12.2007
5 007
35
69
48
Сумы
2 Flash:
вцелом то да.. но нужны еще и ровные руки :roll:

[ADDED=Manson]1435936316[/ADDED]
а как сделать проекцию на минимодель как в сорс?
 
Последнее редактирование:
Команда форума
VIP
28.03.2010
15 329
253
83
Кубань
  • Золотая медаль 215
  • Серебряная медаль 214
  • Золотая медаль 221
  • Cat
дык. В ксашмоде есть, в параноях есть, в спирите есть, да много где есть.
 

Half-Life: Alyx release

000
Дней
00
часа(ов)
00
minutes
00
Секунды
До выхода Half-Life: Alyx
Half-Life: Alyx вышел!

Донат - Хостинг

Итого
125.00 $
Цель
600.00 $

Доноры Красавчики

Пользователи онлайн

Нет пользователей онлайн.