IPB

Здравствуйте, гость ( Вход | Регистрация )

 
Reply to this topicStart new topic
> Создание карт и модов для Half-Life, Valve Hammer Editor (WorldCraft 3.4)
DARK_KRIMSON
сообщение 11 Mar 2005, 12:46 (Сообщение отредактировал cерый - 20 Oct 2010, 22:33)
Сообщение #1

Инквизитор - Элементалист
Сообщений: 313
Спасибо сказали: 0 раз




Эта тема для тех кто хочет научиться создавать карты и моды для Half-Life. Задавайте вопросы, выкладывайте свои проекты (желательно в разрешении RMF и BSP), обмениваемся впечатлениями, и.т.д. Сам редактор (Прилагается)

Русификатор - ТУТ

FGD файлы - ТУТ

Новые компиляторы ZHLT (Zoner's Half-Life Tools) - ТУТ

Upgrade Zoner's Half-Life Tools - Custom Build 1.6 (Прилагаются)

Ух! Ну этот форум явно не для моддинга халфы. Здесь данные темы заглохнут со скоростью звука. Данные темы нужно создавать на специализированных по халфе форумах. Сию тему предлагаю удалить, ибо если народ будет искать что то моддингу халфы, то он будет искать на специализировнных форумах, а не здесь - геройском форуме wink.gif
Прикрепленные файлы
Прикрепленный файл  hammer_v34.zip ( 2.02 мегабайт ) Кол-во скачиваний: 307
Прикрепленный файл  zhlt253_161.zip ( 142.92 килобайт ) Кол-во скачиваний: 283
 


--------------------
Дрогнет Запад и дрогнет Восток.Сила,Сила в Руке.Девять Звёзд - Синий Цветок, Синий Цветок на Клинке.
Go to the top of the pageAdd Nick
 
+Quote Post
DARK_KRIMSON
сообщение 12 Mar 2005, 14:23 (Сообщение отредактировал DARK_KRIMSON - 12 Mar 2005, 14:24)
Сообщение #2

Инквизитор - Элементалист
Сообщений: 313
Спасибо сказали: 0 раз




Бьющиеся и небьющиеся стекла

func_breakable

func_wall

1. Бьющиеся стекла
Нет ничего проще, чем создание стекол smile.gif Вот как создаются бьющиеся стекла:

Создайте браш в форме стекла любых размеров (оптимальная толщина 2-4 юнита). Для закрашивания хорошо подходят стандартные текстуры со словом GLASS такие как: GLASSBRIGHT, GLASSBLUE1, GLASSGREEN. Мы будем использовать последнюю, GLASSGREEN. Вообще-то для стекол можно использовать практически любую текстуру (кроме специальных и воды, разумеется), т.к. все-равно объект будет прозрачным, но текстуры со словом GLASS подойдут лучше.

Итак, Вы создали браш, теперь превратите его в func_breakable и выставьте следующие свойства:

Strength — 30 (прочность стекла. Чем больше значение, тем больше пуль необходимо выстрелить по стеклу, чтобы оно разбилось);
Material Type — Glass (материал, естественно, выбираем стекло);
Render Mode — Texture (этот режим делает объект прозрачным, также можно использовать Additive);
FX Amount — 40 (степень прозрачности. Чем ближе значение к 0, тем стекло прозрачнее и наоборот, чем ближе к 255, тем — непрозрачнее. При fx amount = 0 стекло будет полностью невидимым)

Бьющееся стекло готово! Мы же говорили, что это очень просто.

Для бьющихся стекол (объект func_breakable) дополнительно можно выставить следующие флаги:

Only Trigger — если отмечено, то стекло разобъется только от триггера (стеклу, т.е. объекту func_breakable надо дать имя и активировать триггером, чтобы оно разбилось);
Touch — если отмечено, то стекло разобъется от прикосновения игрока;
Pressure — если отмечено, то стекло разобъется от давления (игрок встал на стекло). Можно, например, использовать для создания ломающегося льда;
Instant Crowbar — мгновенное разрушение от монтировки (используется в HL)

2. Небьющиеся стекла
Небьющиеся стекла можно изготовить тремя способами:

a) изспользуем func_breakable

Material Type — Unbreakable Glass (материал: неразбиваемое стекло);
Render Mode — Texture;
FX Amount — 40


б) изспользуем func_breakable и флаг Only Trigger

Material Type — Glass;
Render Mode — Texture;
FX Amount — 40

Флаги:

Only Trigger — если установлен этот флаг, то игрок разбить стекло не сможет (ни ножом, ни оружием)


в) изспользуем func_wall

С func_wall еще проще, т.к. необходимо выставить только параметры отображения.

Render Mode — Texture или Additive;
FX Amount — 40 (степень прозрачности. Значения от 0 до 255)
Прикрепленные файлы
Прикрепленный файл  glass.zip ( 12.64 килобайт ) Кол-во скачиваний: 154
 


--------------------
Дрогнет Запад и дрогнет Восток.Сила,Сила в Руке.Девять Звёзд - Синий Цветок, Синий Цветок на Клинке.
Go to the top of the pageAdd Nick
 
+Quote Post
DARK_KRIMSON
сообщение 12 Mar 2005, 17:27 (Сообщение отредактировал DARK_KRIMSON - 12 Mar 2005, 17:30)
Сообщение #3

Инквизитор - Элементалист
Сообщений: 313
Спасибо сказали: 0 раз




------------------------------------------------------------------------------------
1. Простейшая вода

Простейшую воду можно создать двумя способами. Во-первых, можно просто окрасить обычный браш со всех сторон текстурой воды (название начинается с восклицательного знака !). Движок Half-Life автоматически превратит такой браш в воду и придаст ему соответствующие свойства. Довольно много различных текстур воды Вы можете найти в стандартном wad-файле liquids.wad, который находится в папке valve.

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

Ниже мы приводим основные свойства func_water:

Render Mode — Texture (этот режим делает воду прозрачной. Также в некоторых случаях можно использовать режим Additive);
FX Amount — 45 (прозрачность воды. Чем ближе значение к 0, тем вода прозрачнее и наоборот, чем ближе к 255, тем непрозрачнее. При fx amount = 0 вода становится абсолютно невидимой);
Wave Height — 0 (высота волн - колыхания воды. Здесь можно указывать как целые, так и дробные значения, например, 0.3, 1, 2.5 и т.д. Высота волны измеряется в юнитах. Рекомендуем не делать слишком большую высоту волн, т.к. это выглядит довольно нелепо)

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


Отличия между водой из браша и func_water

Вода из браша непрозрачная и у нее нет волн. В любом случае, мы рекомендуем использовать объект func_water, т.к. вода в этом случае выглядит более реалистично и красиво.

=====================================================

2. Вода с течением

Для создания воды с течением мы будем использовать следующие энтити-объекты:


ambient_generic

func_conveyor

func_water

trigger_push

Ambient_generic — для озвучивания потока при помощи стандартного файла waterrun.wav;
Func_conveyor — для изображения воды и изменения визуальной (не физической) скорости движения потока воды;
Func_water — для имитации нахождения игрока в воде (этот объект будет невидимым);
Trigger_push — для толкания игрока в сторону движения потока с определенной скоростью.

Создадим в каком-нибудь углублении браш, окрасим его со всех сторон текстурой SCROLLWATER1 (это двигающаяся текстура, на это указывает слово SCROLL в названии) и превратим в объект func_conveyor. Этот объект предназначен для создания конвейера, однако, мы будем использовать его для создания эффекта движения потока.

В обычном случае, игрок, наступивший на конвейер, перемещается в направлении, указанном углом «Angle». Нам же необходимо, чтобы игрок не только наступал на конвейер (поток воды), но и мог находиться внутри него, поэтому выставим флаги «No Push» и «Not Solid». Итак, у объекта func_conveyor будут следующие свойства:

Render Mode — Texture (этот режим придаст потоку прозрачность);
FX Amount — 210 (степень прозрачности потока. Чем ближе значение к 0, тем поток прозрачнее и чем ближе к 255, тем непрозрачнее);
Conveyor Speed — 50 (скорость движения конвейера (потока). В нашем случае, т.к. через поток можно будет проходить, этот параметр определяет скорость движения текстуры воды SCROLLWATER1).

Флаги:

No Push — не толкает игрока (толкать будет специальный объект trigger_push);
Not Solid — этот флаг делает поток нематериальным. Это необходимо, иначе игрок сможет ходить только по поверхности воды).

Теперь скопируем func_conveyor и вставим на то же самое место. Нажмем [Alt-Enter], чтобы вызвать свойства объекта и в списке выберем func_water.

Примечание: чтобы выбрать в 3-х мерном виде нужный объект при условии, что на одном и том же месте находятся два или больше объектов, необходимо нажать и удерживать левую кнопку мыши на объектах. Объекты, попадающие под курсор, будут выбираться по очереди. Названия объектов показываются в строке подсказок снизу.

Итак, изменив один из объектов func_conveyor в func_water, выставим для него (func_water) следующие свойства:

Render Mode — Texture (этот режим придаст воде прозрачность);
FX Amount — 0 (здесь обязательно поставьте ноль).

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

И последний объект, который непосредственно относится к потоку, это trigger_push. Выберите объект func_conveyor или func_water (без разницы какой именно). Скопируйте его и вставьте где-нибудь около будушего потока. Замените на нем текстуру воды на всех сторонах на специальную текстуру AAATrigger. Нажмите [Alt-Enter] и в списке на этот раз выберите trigger_push. Для этого объекта выставьте только один параметр:

Speed of push — 100 (скорость, с которой поток будет толкать игрока. Необходимо опытным путем, меняя этот параметр и скорость движения текстуры воды в объекте func_conveyor, добиться совпадения скорости толкания и скорости движения текстуры).

Поместите этот объект опять же в то же самое место, где находятся уже два объекта: func_conveyor и func_water. Таким образом, у нас в одном и том же месте будут находится три объекта.

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

Направление толкания игрока задается в параметре «Angle» объекта trigger_push, а направление движения текстуры необходимо задать углом, под которым нанесена текстура на объект func_conveyor. Этот угол показывается на панели работы с текстурами Face Properties в параметре Rotation. При необходимости измените этот угол на 90°, 180°, 270° или 0°.

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

Выставим для них следующие свойства:

Path/filename.wav of WAV — ambience/waterrun.wav (звук течения воды, при необходимости Вы можете его поменять);
Volume (10=loudest) — 8 (громкость звука. Минимум: 0, максимум: 10).

Флаги:

Medium Radius — средний радиус распространения звука (при необходимости измените).

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

Посмотреть поток можно в watersteam.zip(прилагается).

///////////////////////////////////////////////////////////////////////////////////

3. Водопад.

Для этого нам понадобятся следующие энтити-объекты:

ambient_generic

env_sprite

func_illusionary

Выберем текстуру +0WATERFALL1 (это анимированная текстура воды). Построим браш, который будет являться потоком воды.
При необходимости выравняйте текстуру, чтобы она была направлена сверху вниз (иначе водопад будет течь горизонтально smile.gif. Превратим его в func_illusionary и выставим следующие свойства:

Render Mode — Texture (этот режим сделает воду прозрачной);
FX Amount — 180 (степень прозрачности воды, чем ближе к 0, тем прозрачнее и наоборот, чем ближе к 255, тем непрозрачнее).

Внизу потока падающей воды можно разместить простую воду func_water с такими же параметрами отображения.

Теперь создадим эффекты брызгов и паров воды внизу водопада. Для этого будем использовать спрайты (файлы *.spr). Вставлять спрайты будем при помощи объекта env_sprite. Для создания брызгов хорошо подойдет спрайт wsplash3.spr, а для пара — rk_steam.spr (это нестандартный спрайт, его мы включили в архив с нашей картой-примером).

Вставьте несколько объектов env_sprite внизу водопада так, чтобы они «перекрывали» всю его ширину.

Для всех объектов env_sprite выставим следующие свойства:

Render Mode — Additive (этот режим уберет черную подложку у спрайта, оставив только белый пар или брызги воды);
FX Amount — 200 (степень прозрачности, чем ближе к 0, тем прозрачнее и наоборот, чем ближе к 255, тем непрозрачнее);
Sprite Name — в случае с паром путь будет sprites/rk_steam.spr, а в случае с брызгами — sprites/wsplash3.spr;
Scale — масштаб спрайта. Для пара мы установили 3, а для брызгов — 2.

И последнее, озвучим падающую воду при помощи объекта ambient_generic. Свойства будут следующие:

Path/filename.wav of WAV — ambience/waterfall3.wav (путь к стандартному звуку падающей воды);
Volume (10=loudest) — 8 (громкость звука. Минимум: 0, максимум: 10).

Флаги:

Medium Radius — средний радиус распространения звука.

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

Посмотреть водопад можно в waterfall.zip(прилагается).

***************************************************************

4 Сливающаяся вода (бассейн).

Нам потребуются следующие энтити-объекты:


func_button

func_water

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

Но ведь вода обладает всеми свойствами объекта func_door (!) такими, как скорость и направление движения. Таким образом, мы можем заставить воду двигаться.

Итак, разместим обычную воду func_water в бассейне.

Выставим для воды следующие свойства:

Angle — Down (вода должна опускать вниз, поэтому значение down);
Name — water1 (это имя мы запишем в свойства кнопки, при нажатии на которую, вода начнет спускаться);
Render Mode — Texture (этот режим сделает воду прозрачной);
FX Amount — 50 (степень прозрачности воды. Чем ближе к 0, тем прозрачнее и наоборот, чем ближе к 255, тем непрозрачнее);
Speed — 20 (скорость юнитов в секунду, с которой вода будет спускаться/подниматься);
Lip «-2» (отрицательное значение заставит воду опуститься ниже дна бассейна на 2 юнита. Это необходимо, чтобы вода полностью скрылась под бассейном);
Wave Height 0.5 (высота волн в юнитах)

Флаги:

Toggle — необходимо отметить этот флаг, чтобы вода не поднималась автоматически

На дне бассейна мы разместили несколько небольших объектов func_water произвольной формы, полученной обрезанием инструментом Clip. Высота этих слоев воды 1 юнит. Эти «лужицы» будут имитировать остатки воды, после того, как она сольется (уйдет вниз).

Свойства этих лужиц следующие:

Render Mode — Texture (этот режим делает лужицы прозрачными);
FX Amount — 15 (степень прозрачности воды. Заметьте, что лужицы более прозрачны, чем основная вода. Это сделано, чтобы снаружи, когда вода еще находится в бассейне, этих лужиц не было заметно).

Ну, и последнее. Создадим кнопку func_button и запишем в параметре «Targetted object» имя воды, т.е. water1. Также поставим «Delay before reset»: 7 секунд (в течении этого времени кнопка будет неработоспособна. Время рассчитано, исходя из размера воды по высоте и скорости ее движения (высота/скорость). 124 : 20 = ~6 секунд. Мы добавили одну секунду на всякий случай smile.gif. Во флагах отметим «Don't move» и «Toggle».

Вот и все, бассейн готов! При нажатии на кнопку вода начнет медленно сливаться. Когда она полностью уйдет под бассейн, на его дне останется несколько небольших лужиц воды. Повторное нажатие на кнопку (через 7 секунд) вызовет подъем воды.

Посмотреть бассейн можно в swimming_pool.zip(прилагается).



P.S. НУ ЗА ЭТОТ ПОДБОР СТАТЕЙ ТОЛЬКО +++, и НИЧЕГО КРОМЕ +! biggrin.gif nunu.gif nunu.gif nunu.gif
Прикрепленные файлы
Прикрепленный файл  watersteam.zip ( 70.31 килобайт ) Кол-во скачиваний: 161
Прикрепленный файл  waterfall.zip ( 84.42 килобайт ) Кол-во скачиваний: 152
Прикрепленный файл  swimming_pool.zip ( 52.37 килобайт ) Кол-во скачиваний: 145
 


--------------------
Дрогнет Запад и дрогнет Восток.Сила,Сила в Руке.Девять Звёзд - Синий Цветок, Синий Цветок на Клинке.
Go to the top of the pageAdd Nick
 
+Quote Post
Гость_Rumit_Gronovsky_*
сообщение 06 Apr 2005, 13:28 (Сообщение отредактировал cерый - 20 Oct 2010, 22:30)
Сообщение #4







А заодно научите пользоваться форумомsmile.gif). Дано: Карта ХЛ, сделанная (мной) в хаммере. Комната с кууучей мелких, детализированных объектов. Найти: Как с "Малой Кровью", уменьшить количество полигонов с 900 до, хотя бы, 600. Ума не приложу... А так не охота удалять ничего. Решение? Очень прошу без мата.
Go to the top of the pageAdd Nick
 
+Quote Post
DARK_KRIMSON
сообщение 07 Apr 2005, 20:00 (Сообщение отредактировал DARK_KRIMSON - 08 Apr 2005, 11:48)
Сообщение #5

Инквизитор - Элементалист
Сообщений: 313
Спасибо сказали: 0 раз




1. Форумом пользоваться... biggrin.gif хороший вопрос yes.gif , попробуй понажимать все кнопки подряд crazy.gif , только с минусиками не балуй crazy.gif crazy.gif crazy.gif
2. выложи карты или скинь мне на мыло!
2. 1. если самому интересно... Слухай сюда:

Что такое R_SPEEDS?

R_SPEEDS — это специальный параметр, который показывает количество полигонов, видимых игроком на карте. Чем больше полигонов одновременно отображаются, тем меньше FPS (количество кадров в секунду). Если полигонов слишком много, то карта начинает, как говорится, «тормозить». Итак, FPS зависит от количества полигонов, а значит от показаний параметра R_SPEEDS. Чем больше R_SPEEDS (чем больше полигонов), тем меньше FPS и наоборот.

R_SPEEDS параметр динамичный, он меняется в зависимости от положения игрока на карте и от направления его взгляда. Действительно, если Вы будете смотреть в стену или угол, то количество кадров в секунду скорее всего будет максимальным 99-100. Если же Вы выйдете на открытое пространство, то FPS будет уже поменьше, а R_SPEEDS соответственно побольше.

________________________________________________________________

Итак, как же нам посмотреть R_SPEEDS на своей карте?

Проверьте, что в ярлыке для CS у Вас прописан параметр -console, который позволит нам открыть консоль в игре. Т.е. строка запуска игры выглядит примерно так: C:\Games\HL\hl.exe -game cstrike -console.

Создадим сервер на своей карте. После загрузки уровня, выдвинем консоль и напишем:

developer 1
r_speeds 1

После этого в левом углу экрана и в консоли побегут циферки, которые будут изменяться при перемещении игрока по карте или при изменении направления взгляда.

Как Вы можете видеть, цифры разбиты на 4 колонки. Нас интересуют колонки со словами wpoly и epoly (это 2 правые колонки).

310 wpoly — (от англ. world polygons) количество полигонов, которые создают браши: земля, стены, крыши, скалы и т.п. Это основной показатель R_SPEEDS. Чем больше wpoly, тем больше тормозит карта.

988 epoly — (от англ. entity polygons) количество полигонов, которые создают модели (руки с оружием, игроки, другие модели). Когда Вы видите на экране 4-5 игроков, то epoly заметно выше, нежели если Вы видите 1 игрока.

Если набрать в консоли команду r_drawviewmodel 0, то это уберет с экрана изображение рук и оружия и тем самым, снизит показатель epoly до нуля (если Вы не видите других игроков). На слабых компьютерах это может значительно повысить FPS (примечание: данная консольная команда была актуальна для CS версии 1.5 и более ранних, в CS 1.6 убрать оружие с экрана нельзя из-за щита).

На двух картинках ниже наглядно продемонстрирована зависимость R_SPEEDS (и FPS) от размера видимого пространства.

_________________________________________________________________

Каким должен быть максимальный R_SPEEDS?

Споров на тему максимального R_SPEEDS много. Одни говорят, что параметр wpoly не должен быть больше 600, другие допускают 1000 wpoly, приводя в качестве аргумента тот, факт, что компьютеры на данный момент довольно мощные.

Мы придерживаемся следующего мнения:

1) В местах стычек команд, там, где постоянно происходят перестрелки, количество wpoly должно быть минимально — до 600 (в идеале: 400-450).

2) На базах команд, в тех местах, где игроки появляются редко или встречаются 1 на 1, а не 5 на 5, количество wpoly может быть больше — до 750.

После того, как Вы откомпилировали карту, необходимо побегать по всем ее местам и посмотреть R_SPEEDS. Если Вы заметите высокие значения wpoly (больше 750), то это место карты необходимо оптимизировать (см. ниже) или полностью переделать.

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

Epoly не такой важный показатель как wpoly, однако слишком высокие значения (больше 4000-5000 epoly) этого параметра также вызывают существенное понижение FPS. В принципе, на показатель epoly внимания обращать не следует. При тестировании карты необходимо учитывать лишь значения wpoly.



Причины большого R_SPEEDS

Итак, мы уже знаем, что количество кадров в секунду зависит от количества полигонов, которое в своем максимуме должно составлять 500-700 wpoly. А теперь давайте посмотрим от чего же зависит количество полигонов и вообще из чего получаются полигоны.

Разбиение на полигоны при соприкосновении брашей

Игровой движок Half-Life устроен таким образом, что при соприкосновении малого браша с более крупным (например, ящик стоит на земле) происходит разбиение земли на более мелкие полигоны. Вот как это происходит (белые полосы обозначают границы полигонов).

Абсолютно неважно какой энтити-объект Вы используете (func_wall, func_breakable, func_train, func_illusionary, func_button, func_vehicle или любой другой энтити-объект) — при соприкосновении с брашами разбиения не происходит!

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

Кстати, очень часто в узких местах на картах (корридоры, туннели) мелкие объекты (светильники, картины ...) превращают func_illusionary. Это помогает, во-первых, сберечь несколько полигонов, а? во-вторых, не мешает игроку передвигаться (игрок может спокойно проходить сквозь func_illusionary).

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

ВАЖНО: никогда не превращайте в энтити-объекты стены (или не дай Бог пол!), которые составляют основу Вашей карты. Дело в том, что игровой движок «видит» сквозь энтити-объекты и рисует все, что находится за ними. Например, если за какой-то стеной находится полкарты и Вы превратите ее в func_wall, то в этом месте будут большие «тормоза» из-за высокого R_SPEEDS.

_________________________________________________________________

Разбиение на полигоны текстурами

Как Вы знаете, текстуры имеют определенный размер, например, 128х128 пикселей. Давайте представим, что у нас на карте есть стена с размерами, бОльшими, чем размер текстуры, например, 256х256 юнитов. В этом случае хоть браш у нас и один, но полигонов будет больше.

Например, если стена имеет размеры 256х256, а текстура 128х128, то данный браш будет разбит на 4 полигона, т.к. площадь текстуры ровно в 4 раза меньше площади браша.

В редакторе Hammer у нас есть возможность менять масштаб текстуры. Делается это (напомним smile.gif) на панели «Face Properties» в параметре Scale.

_______________________________________________________________

Большие открытые пространства

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

Игровой движок Half-Life не расчитан на большие пространства (необязательно, что это открытое пространство (с небом). Большой пребольшой ангар с массой деталей тоже будет тормозить). Помните для какой игры Вы создаете карты, это Вам не Unreal smile.gif Халф любит закрытые помещения, всякого рода коридорчики и очень расстраивается, когда Вы его заставляете рисовать высоченные горы или 50 многоэтажных зданий на одной улице. Если, созданная Вами карта тормозит, и R_SPEEDS приближается к нескольким тысячам wpoly — нужно координальным образом (хирургическими методами smile.gif изменять карту.

_________________________________________________________________

Методы снижения R_SPEEDS

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


Превращение мелких брашей в энтити (рассмотрено)
Увеличение масштаба текстур (рассмотрено)

Закрытие обзора игрокам
Метод зазора в 1 юнит
Применение SKY-текстур
«Разделение» карты на отдельные пространства


_________________________________________________________________

Закрытие обзора игрокам

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

Итак, создавая открытое пространство, не выходите за рамки разумного. Все пути и подходы к такому «нагруженному» месту должны быть или чем-то отгорожены (как на de_cbble огромными толстыми воротами), или просто они должны быть изогнутыми:


______|---|
|---______|
|---|________
|---------------|
|---------------|
|---------------|
|---------------|

Примитивно но понятно. biggrin.gif

В обоих случаях обзор игроку закрывается, он видит меньше полигонов, следовательно карта меньше тормозит. Естественно, мы привели лишь несколько вариантов, например, можно еще «поиграть» с рельефом (сделать подходы наклонными, как на базу контров на de_cbble), тем более, что «многоэтажные» карты очень нравятся игрокам (de_aztec, de_dust2).
__________________________________________________________________

Метод зазора в 1 юнит

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

Действительно, если подумать, то в таком случае ящик, висящий над землей на расстоянии всего в 1 юнит, не касается ее поверхности. А если нет соприкосновения, то нет и разбиения земли на полигоны. К тому же обычный игрок (не маппер smile.gif не заметит, что ящик висит над землей, ведь он подвешен совсем на чуть-чуть. Естественно, в таком случае ящик не нужно превращать в энтити-объект.

Естетсвенно, не стоит впадать в крайности и подвешивать абсолютно все ящики и пр. объекты. Делайте это в случае необходимости, при большом R_SPEEDS. crazy.gif

__________________________________________________________________


Применение SKY-текстур

Вы уже знаете, что SKY-текстуры применяются для создания неба. Но они обладают еще одним очень хорошим свойством: стороны объектов, окрашенные текстурой SKY, не создают полигонов! То есть, если мы покрасим какие-нибудь объекты SKY-текстурой, то они не создадут полигонов, правда, при этом будут абсолютно прозрачными (через них будет видно небо smile.gif.

SKY-текстуры нужно наносить на те поверхности, которые игрок в игре увидеть не может. Что это за поверхности? Крыши домов, верхние грани заборов, стен — в общем все то, что игрок в нормальных условиях не видит.

Теперь у нас на карте полигонов станет поменьше, плюс меньше времени уйдет на компиляцию, т.к. SKY-поверхности не нуждаются в просчете освещения (они попросту игнорируются).

Все мы замечали, играя например на de_dust, что, если в режиме спектатора подняться чуть выше стен, то потолки становятся прозрачными biggrin.gif

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

Примечание: если Вы по каким-либо причинам создаете небо в виде большой коробки вокруг карты, то следует закрасить SKY-текстурой все внешние стороны карты, а также ее дно

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

Ну, а если Вы строите правильное небо (куполом над картой), то делать этого нет необходимости. А вот крыши в любом случае необходимо закрашивать, т.к. они в 100% случаев подвержены освещению.
__________________________________________________________________


Разделение карты на отдельные пространства

Теперь давайте рассмотрим последний метод (в данной статье) — метод разделения карты на отдельные пространства.

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

Пришло время познакомить Вас с еще одной полезной для тестирования карты консольной командой: r_draworder 1.

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

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

Здесь виден весь центральный проход (несмотря на ворота) и часть базы «В». Все остальное также отбрасывается.

А теперь давайте представим, что было бы, если бы наша карта представляла из себя эдакую коробку, в которой не было бы никаких внутренних стен и проходов?

В этом случае движок отрисовывал бы всю карту, что, естественно, заметно повысило бы ее «тормознутость».

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

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

Какой высоты должна быть стена сказать сложно. Иногда кажется, что ты сделал действительно высокую стену, скажем 320 юнитов, а движок все-равно рисует то, что находится за ней. А если Вы не хотите делать все стены на Вашей карте высотой по 400 юнитов? Что делать?

Исправляется это созданием над стеной SKY-браша. Этот SKY-браш повторяет форму стенки и занимает все пространство от ее верхней части до неба (верхнего SKY-браша).

Так необходимо поступить со всей картой — разделить ее SKY-брашами на отдельные области. Кстати, при создании общего освещения можно сделать лишь 1 объект light_environment, поместить его в любую из областей, и все области будут нормально освещены, т.е. делать несколько «солнышек» нет необходимости (это раньше приходилось освещать каждую область отдельно).

____________________________________________________________________

Консольные команды

И в заключении статьи напомним консольные команды, которые мы использовали для тестирования карты.

developer 1 — отображает на экране различные служебные сообщения;
r_speeds 1 — выводит на экран показатели wpoly и epoly;
gl_wireframe 1 / 2 — показывает границы полигонов (OpenGL);
r_drawflat 1 — заменяет текстурные поверхности на цветные (Software);
r_draworder 1 — показывает какие области карты отображает игровой движок (Software)

Последние 3 команды будут работать только в случае запуска карты из консоли (как одиночного уровня Half-Life).

На этом все. Не позволяйте R_SPEEDS прыгать слишком высоко и принимайте вовремя меры.

P.S. Думаю хватит, а то и так слииишком Бо-о-о-о-ольшая статья получилась crazy.gif crazy.gif crazy.gif


--------------------
Дрогнет Запад и дрогнет Восток.Сила,Сила в Руке.Девять Звёзд - Синий Цветок, Синий Цветок на Клинке.
Go to the top of the pageAdd Nick
 
+Quote Post
Viper
сообщение 06 Jun 2005, 16:10
Сообщение #6

Vampire Blood Lord
Сообщений: 1 806
Спасибо сказали: 35 раз




Дарк а незнаеш как модели к халве делать милкшейкером?


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
DARK_KRIMSON
сообщение 06 Jun 2005, 17:15
Сообщение #7

Инквизитор - Элементалист
Сообщений: 313
Спасибо сказали: 0 раз




Хм... Модели... Я не спец по моделям, но моггу сказать как их на карту воткнуть:

Как вставить модель на карту?

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

Прежде всего поясним, что такое модель. Модель — это объект определенной формы, имеющий свою текстуру (или даже несколько), некоторые модели имеют еще и анимацию и могут ее менять. Модели для Half-Life хранятся в файлах с расширением *.mdl. Один файл — одна модель. Модели бывают самые разные: деревья, оружие, автомобили — в общем объект с формой любой сложности.

Почему мапперы предпочитают использовать модели вместо брашей? Предположим, на своей карте, в месте закладки бомбы Вы захотели поставить какую-нибудь статую smile.gif

Из обычных брашей статуя получился бы довольно неуклюжим и угловатым, если бы вообще Вы смогли бы «построить» такого кролика из брашей. К тому же с большой долей вероятности он будет неправильно откомпилирован (ошибки в поверхностях) и освещен не самым наилучшим образом (артефакты).

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

Вставляются модели при помощи точечного энтити-объекта cycler. В нужном месте карты Вы создаете этот объект и в его свойствах в параметре «Model» указываете путь к нужной модели (файлу *.mdl). Стандартная папка для моделей в CS находится в «Cstrike\models» — туда и следует кидать свои модели.

Также модели можно вставлять при помощи объекта cycler_sprite, который вообще-то предназначен для вставки спрайтов. Но на самом деле его тоже можно использовать. Кстати, даже предпочтительней, потому что с ним модель становится невещественной (когда в нее стреляешь из нее не летят всякие черно-белые ошметки, как это происходит с моделью, вставленной через cycler). Однако, если вы будете использовать cycler_sprite, то будет необходимо «огораживать» модель задерживающими игрока CLIP-брашами, потому что модель будет проходимой насквозь.

Чтобы знать, где именно нужно создавать CLIP-браши вокруг модели, рекомендуем использовать редактор Hammer версии 3.5 beta. В версии 3.5 beta модели отображаются прямо в окне редактора, что очень удобно и наглядно.

Теперь небольшая хитрость о том, как вставить модель, используя cycler_sprite: когда Вы будете выбирать в параметрах этого объекта саму модель, которую хотите вставить, то Вам дадут выбрать лишь файлы *.SPR, т.е. спрайты, а нам нужны модели *.MDL. Это ограничение легко обходится. Просто введите в строке имени файла символы *.*, и Вам станут видны все типы файлов. Дальше Вы идете в папку с моделями «cstrike\models» и выбираете нужную модель.

При создании zip-архива с окончательным вариантом Вашей карты, не забудьте включить в него и все нестандартные модели. Без них карта не запустится! yes.gif

P.S. поищи в Архивах ИГРОМАНИИ, там в каком-то журнеле печатали про создание Моделей для Halfы lupa.gif


--------------------
Дрогнет Запад и дрогнет Восток.Сила,Сила в Руке.Девять Звёзд - Синий Цветок, Синий Цветок на Клинке.
Go to the top of the pageAdd Nick
 
+Quote Post
†Lich†
сообщение 07 Jun 2005, 14:37
Сообщение #8

Alone...
Сообщений: 438
Спасибо сказали: 1 раз




Народ подскажите как биндить в халве оружие ?


--------------------
Suffering is a fact of life. Either you learn to deal with that or you go under. You can stay in your little dream world...
Go to the top of the pageAdd Nick
 
+Quote Post
DARK_KRIMSON
сообщение 08 Jun 2005, 06:52 (Сообщение отредактировал DARK_KRIMSON - 08 Jun 2005, 06:55)
Сообщение #9

Инквизитор - Элементалист
Сообщений: 313
Спасибо сказали: 0 раз




1. Как биндить: в консоли пишешь:
bind (буковка) "give (оружие)"
прописывать надо без скобок, но с кавычками!

2. Надо задавать вопросы в соответствующей теме! А то ненароком можно мод горячую клавиатуру попасться...


--------------------
Дрогнет Запад и дрогнет Восток.Сила,Сила в Руке.Девять Звёзд - Синий Цветок, Синий Цветок на Клинке.
Go to the top of the pageAdd Nick
 
+Quote Post
Viper
сообщение 08 Jun 2005, 11:50
Сообщение #10

Vampire Blood Lord
Сообщений: 1 806
Спасибо сказали: 35 раз




Не в куурсе как во второй халве прописать грави пушку из конца игры7


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 18 October 2019 - 19:31
Copyright by Алексей Крючков
Strategy Gamez by GrayMage
Programming by Degtyarev Dmitry
  Яндекс.Метрика