Killing Floor 2 SDK Руководство

Тема в разделе "Killing Floor 2", создана пользователем gall87, 16 янв 2017.

  1. gall87

    gall87 Капо

    Навигация
    Навигация персонажей
    • KFPathNode – обьект(метка) навигации
    • KFPlayerStart – обычное место появления игрока
    • KFDoorMarker – навигационная метка, помогающая Zed'ам найти дверь
    • KFPickupFactory_Ammo – потенциальная навигационная метка (по умолчанию выключена) направляющая к патронам
    • KFPickupFactory_Item_Default – потенциальная навигационная метка (по умолчанию выключена) направляющая к оружию 1го уровня
    • KFTrigger_ChokePoint – навигационная метка, помогающая Zed'ам проходить по узким проходам
    • KFDoorTrigger – Не навигационное действие, работающее с KFDoorMarker и KFPathNode. Используется для разрешения Zed'ам взаимодействования с дверьми.
    • KFPawnBlockingVolume – специальный блокирующий обьект, мешающий игрокам и Zed'ам

    Полезные дополнения редактора
    [​IMG]Если вы выберете обьект и кликнете ПКМ по нему, выскочит контекстное меню, в котором есть пункт Path Options, позволяющий связать две навиационные метки, и предоставляет полезную информацию об NPC, ниже описание функций в данным пункте:
    • Auto Position – включив эту опцию движок игры, попытается выровнять навигационные метки
    • Select Unnecessary Pathnode(s)[TW] – активация этой опции начнет выборку лишних PathNodes в области.
    • Force one-way connection – создаст принудительное направление между двумя выбраными метками
    • Proscribe connection in one direction – запретит путь между 2мя метками
    • Proscribe Paths – запретит путь между 2мя или более метками
    • Force Paths – создаст путь между 2мя или более метками - игнорируя запреты

    Навигационная разметка
    [​IMG]Для двери требуются особые пути. KFPathNodes должны быть в пределах области KFDoorTrigger, и распологатся с обеих сторон. Все PathNodes, которые подключаются к навигационным меткам за пределами радиуса KFDoorTrigger должны иметь запрещенный путь(Заблокированый(КРАСНЫЙ)).

    Цвета соедиенения путей
    Обычные соедиенеия:

    • Голубой- Узкий путь (Сталкер, Ползун, Сирена и другие мелкие Zed'ы)
    • Зеленый- Обычный путь(Клот, Горфаст, Хаск)
    • Белый - Широкий путь (Толстяк, Мясник, Ганс, ФП)
    • Розовый - Очень широкий путь (Таких Zed'оф пока не существует)
    Специальные соедиенеия:
    • Желтый - Принудительный путь
    • Красный - Запрещеный путь
    • Светло-фиолетовый - Необходим высокий прыжок
    • Фиолетовый - "Дополнительный" путь
    • Orange - Направление по стене


    Двери
    Описание обьекта:
    Свойства KFDoorActor
    [​IMG]
    • Mesh Attachments - обьект StaticMesh , свойства которого используются для установки дверь по бокам([0] -Лево [1]-Право),прикрепляется к обьекту SkeletalMesh , который используется для управления дверью.
    • Center Weld Component - обьект StaticMesh, свойство которого используются для определения петли сварки.
    • Skeletal Mesh Comp - "внутрений-код", который взаимодействует с дверью. Обычно не подверагается модификации.
    • Damage Emitter - Система частиц, используемая дверью при получении урона.
      • ParticleSystem'FX_Environmental_EMIT.Doors.FX_Door_Pound_metal_01'
      • ParticleSystem'FX_Environmental_EMIT.Doors.FX_Door_Pound_Wood_01'
      • ParticleSystem'FX_Environmental_EMIT.Doors.FX_Door_Pound_Mech_01'
    • Destroyed Emitter - Система частиц, используемая дверью при разрушении.
      • ParticleSystem'FX_Environmental_EMIT.Doors.FX_Door_Pound_metal_01'
      • ParticleSystem'FX_Environmental_EMIT.Doors.FX_Door_Pound_Wood_01'
      • ParticleSystem'FX_Environmental_EMIT.Doors.FX_Door_Pound_Mech_01'
    • Door Material - [EDMT_Metal/EDMT_Wood] Используется для определения материала, из которого создана дверь, и определения соотвествующего звука.
    • Max Health - максимальное кол-во урона, которое дверь выдержит перед разрушением.
    • Max Weld Integrity - Максимальное кол-во завариваемого "здоровья", которое дверь может иметь.
    • Combat Weld Modifier - Кол-во уменьшения сварки при получении дверью урона.
    • Frame Size of Two Doors - Размер места, которое будет занимать "двойная" дверь. "Внутрений-код" пропорционально масштабирует это значение.
    • My Nav Mesh Obstacle - Не используется - создает связь KFDoorNavMeshObstacle с дверью (используется только с NavMesh)
    • Broken Door Impulse - количество силы, применяемой к двери, когда она разрушется. Используется для моделирования срыва двери с петель.
    • Max Angular Velocity - используется для определения максимального угла поворота двери при разрушении. Используется для моделирования срыва двери с петель.
    Открытие
    • Door Mechanism - механизм открытия двери
      • EDM_Hinge - обычное открытие двери.
      • EDM_Slide - горизонтальное(вьезд в стены).
      • EDM_Lift - Вертикальное(вьезд в потолок).
    • Cool Down Time - Время между взаимодействием с дверью
    • Open Blend Time - Время на закрытие / открытие двери
    • Hinged Rotation - Угол, на который дверь будет открыта (используется ТОЛЬКО в EDM_Hinge механизме)
    • Slide Translation - Как широко откровется дверь (используется ТОЛЬКО а EDM_Slide механизме)
    • Lift Translation - Как высоко откроется дверь (используется ТОЛЬКО а EMD_Lift механизме)
    • Automatic Door - Не используется - Настройка, позволяющая дверям открываться автоматически
    Свойства KFDoorTrigger
    [​IMG]
    • Door Actor - Используется для связи KFDoorTrigger с KFDoorActor
    • Collision - Радиус столкновения - Используется для определения дистанции, на которой Игрок/Zed сможет взаимодействовать с дверью
    Примечание: Если обьект двери не присвоен, KFDoorTrigger может быть определен как узкий проход для облегчения прохождения Zed'ов. KFDoorTrigger уменьшает коллизию на Zed'ах, чтобы позволить им проходить через одиночные двери.


    Торговец
    Капсула торговца
    SkeletalMeshActor'GP_Trader_ARCH.TraderPod'
    Для наилучшей настройки торговца рекомендуется использовать архетип, созданный в Tripwire Interactive. Он имеет все основные параметры. Выше ссылка в Content Browser для капсулы торговца.

    KFTraderTrigger
    Actor → Trigger → Trigger_PawnsOnly → KFTraderTrigger

    Поместите тригер в центре капсулы торговца. Обратите внимание, что неправильная установка триггера (например, в стене), сделает взаимодейтсвие с капсулой невозможным, так как для связи необходима прямая видимость с тригером.
    [​IMG]Знак замка в левом верхнем углу зафиксирует свойства открытыми. Затем выберите капсулу торговца skeletalmesh и нажмите зеленую стрелку.


    Спаун
    KFSpawnVolume
    Кистью создается зона появления. Стержень кисти используется для созданая "внутренней области". Во внутренней области появятся "точки появления". Как правило, используется зона размером 640x640. Затем внутреняя область настраивается таким образом, чтобы она находилась в пределах места, где ей необходимо быть. Затем увеличивается внешняя зона, чтобы позволить игрокам "столкнутся" с областью при перемещении по карте. "Столкновение" игрока с зоной деактивирует место появления.
    [​IMG]
    • Spawn Marker Info List: Список точек появления внутри области, генерируется автоматически.
    • Max Spawn Markers: Кол-во точек, использующихся внутри области
    • Door List: Двери, связанные с областью
    • Spawn Bounds Scale: Изменяемое значение, позволяющее увеличивать/уменьшать размер "внутренней области"(inner marker box). (1.0 полный размер)
    • Largest Squad Type: Тип величины Zed'ов, которые будут выходить из области. Когда система решить заспаунить Zed'а, через область сможет появится выбранная и более подходящая "величина" Zed'ов.
      • EST_Crawler: Только ползуны
      • EST_Small: Ползуны, клоты, сталкеры
      • EST_Medium: Горфаст, сирена ,толсяк
      • EST_Large: Мясник, ФП
      • EST_Boss: Босс
    • Desirability Mod: процентное значение, обозначающее, что зона будет использована.
    • No Zaxis Dist Penalty: Значение, отключающее исключение по спаун. Обычно используется в местах, куда игрок не может добратся.
    • Max Height Diff to Players: Значение в uu, отображающее радиус по оси Z, на котором область отключится, если в ней окажется игрок.
    • Min Distance to Player: Значение в uu, отображающее минимальное расстояние игрока перед отключением зоны.
    • Max Distance to Player: Значение в uu, отображающее максимальное расстояние игрока от зоны перед ее отключением.
    • Out of Sight: Значение, показывающее, что область находится за пределами обзора и может быть активирована.
    • Spawn Derate Time: Время, которое должно пройти перед повторным использованием зоны спауна.
    • Un Touch Cool Down Time: Время, которое должно пройти после того как игрок столкнулся с областью, для ее активации.
    [​IMG]
    KFSpawner
    KFSpawner
    - специальный инструмент, изпользуемый Zed'ами для выхода из пола(решоток), стен и потолков (вентиляционные шахты). Имеет специальные связанные с ним анимации, и должен быть установлен точно для минимизации возможности его использования.

    SDK Карта, содержащая полностью настроеную KFSpawners
    ..\Content\Maps\SDK\Mod_Tools_Spawn_Template.kfm

    SDK карта имеет все виды KFSpawners ,установленных с соответствующими TriggerVolumes. С практической точки зрения, вы должны просто скопировать и вставить его в вашу карту, и повернуть его в соответствующем направлении. Есть четыре типа: высокая стена(high wall), низкая стена(low wall), пол(floor ) и потолок(ceiling).

    Свойства
    [​IMG]
    • Is Triggered Spawner: Значение, сообщающая игре, что данный KFSpawner управлятся тригером или его "родителем".
    • Largest Squad Type: Всегда должно быть установленно EST_Small, если в будущем ничего не изменится.
    • Max Stay Active Time: Максимальное кол-во времени, в секундах, которое KFSpawner может быть активен. При значение >0 будет использован только раз, после чего станет неактивным.
    • Cool Down Time:Время между повторным использованием.
    • Spawn Interval: Частота появлние Zed'ов из KFSpawner, пока он активен.
    • Actor To Reacquire Player Touch: Объем триггера связаный с KFSpawner используется для отслеживания игрока в области действия(используется с Min Reacquire Touch Time)
    • Min Reacquire Touch Time: Минимальное время активации KFSpawner, при при нахождении игрока в зоне действия.
    • Num Touching Zed Required: Кол-во Zed'ов небходимое рядом для активации KFSpawner.
    • Child Spawners: Массив связанных KFSpawners, которые будут использованы в сочетании с "родителем". Когда KFSpawner "Родитель" активизируется, начинается распространение Zed'ов "детям".
    • Emerge Anim: Набор анимаций, которые будет использоваться KFSpawner
      • Emerge_HighWall
      • Emerge_LowWall
      • Emerge_Floor
      • Emerge_Ceiling
    • Destructible To Break: Соответствующий KFDestructible, активируемый при выходе Зедов из KFSpawner

    Требования TriggerVolume
    [​IMG]
    TriggerVolume должен быть создан кистью, которая охватывает пространство, принадлежащие конкретному KFSpawner. Это обусловлено тем, что TriggerVolume используется для запуска активного KFSpawner (См требованияя Kismet), а также используется для отслеживания игрока в области, которую KFSpawner собирается использовать.

    Требованиям Kismet
    [​IMG]












    Детали "дочернего" KFSpawner
    [​IMG]Все подробности "дочернего" KFSpawner наследуются от "родителя". Чтобы "дочерний" KFSpawner работал корректно, его Triggered Spawner должен быть снят, и в Child Spawner должен быть массив "родителя".

    Boss Volumes
    Boss Volumes
    типичный KFSpawnVolume с крупнейшим типом Zed'а. Объем должен иметь по крайней мере 4 "точки появления". Кроме того, они должны располагаться вместе так, чтобы кинематографическая камера могла сработать надлежащим образом.


    Предметы
    KFPICKUPFACTORY_AMMO
    Actor → NavigationPoint → PickupFactory → KFPickupFactory_Ammo
    [​IMG]В KFPickupFactory_Ammo не так много настроек, которые нужно менять, кроме ситуации, когда необходимо добавить путь в навигационную сеть.

    Allow Path Connections - Добавляет в навигационую сеть(по умолчанию отключена)

    KFPickupFactory_ItemDefault
    Actor → NavigationPoint → PickupFactory → KFPickupFactory_Item → KFPickupFactory_ItemDefault
    [​IMG]В KFPickupFactory_ItemDefault не так много настроек, которые нужно менять, кроме ситуации, когда необходимо добавить путь в навигационную сеть.

    Allow Path Connections - Добавляет в навигационую сеть(по умолчанию отключена)

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

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

    KFPickupFactory_Item
    [​IMG]Цель этого обьекта состоит в появлении предмета по определённому типу, чтобы каждый элемент мог помочь игроку.

    В KFPickupFactory_ItemDefault не так много настроек, которые нужно менять, кроме ситуации, когда необходимо добавить путь в навигационную сеть.


    Информация карты
    Свойства WorldInfo
    [​IMG]
    • Title: Название карты
    • Author: Имя автора
    • My Map Info: Описание
    [​IMG]
    • Wave Respawn Period: С какой периодичностью появляются Zed'ы в секундах.
    • KFMap Info: Не используется
    • Music: Музыка (менять не нужно)

    Режим игры
    Используется для определения режим игры, если карта не имеет префикса. Этот параметр используется, в основном, в начале разработки.
    • Default Game Type: Режим игры по умолчанию. Обычно используется, когда карта не имеет префикса
    • Dafault Game in PIE: Режим игры по умолчанию в редакторе, режим, который будет использоваться при запуске Play In Editor (PIE)

    Предвычисляемая видимость
    Этот параметр рассчитывает видимость. Традиционно используется на мобильных играх и некоторых консолях. Он используется и в KF2, поскольку включен отложеный рендеринг вместо передней визуализации, как правило, используется в играх, основанных на Unreal Engine.

    Дополнительная информация:[udn.epicgames.com]


    Местность / Ландшафт
    В настоящее время Killing Floor 2 SDK не поддерживает создание местности и ландшафта. Вы можете создать их в другой 3D программе и импортировать их как статические сетки.


    Модульная настройка (Часть 1)
    Модульная настройка представляет собой связь статических сеток, используемая вместо BSP геометрии в UDK. Отдельные сетки размером 320x320uu (Unreal Units), с полностью наложенным UV. Так, текстура будет использоватся вместе с материалом, сетки будут легко объединятся, если помещены рядом. Но, сетки НЕЛЬЗЯ ПОВОРАЧИВАТЬ! Это изменит ориентацию UV между различными частями, создавая швы.

    Устройство
    Набор состоит из отдельных статических сеток, которые входят в следующие категории: FLOOR(пол), CEILING(потолок), WALL(стены) и MISC(прочее) (например, Лестницы, Перила, Рампы, Двери, окна и т.д.). Первые три имеют двусторонюю, материальную цветовую кодировку: синий, зеленый и оранжевый, соответственно.
    [​IMG]
    Цветовая кодировка карты совпадает с модульной настройкой сетки и имеет обозначение, называется Mod_Tools_Modular_Template. Ниже подобные элементы сгруппированы и ориентированы для удобства.
    [​IMG]
    Внутри "Env_Modular_StaticSet_MESH", сетки первоначально сгруппированы по категориям, упомянутых выше: потолок, двери, пол, лестничная клетка, стены и окна. В каждой из этих категорий существуют подгруппы, такие как: Base, Half, Quarter, Angle, Bevel, Corner и т.д. Выбор и расширение этих подгрупп помогает ограничить число сеток, отображаемых при обзоре, при помощи чего легко найти нужную часть на карте. Например, при выборе категории “Wall”, “corner” с подгруппами "corner_in" и “door”, отобразит только стены, заканчивающиеся с вогнутыми углами и дверьми.

    Методология
    Текстуры по умолчанию визуально показывают, UV ориентацию на основе X и Y координат. Для того, чтобы область была бесшовной, Х и Y должны быть направления в одном и том-же направлении.
    [​IMG]
    На самом деле, лучший способ начать создание карты - это выбрать основную часть пола (то есть,. 'Env_Modular_StaticSet_MESH.single_mesh. Floor.Base.Single_Floor') из Content Browser, щелкните ПКМ и добавить его на карте. Обнулите его координаты, выберите кусок пола, нажмите F4 (для отображения "Properties"), вкладка "Movement". Нажмите на поле рядом с "X", задайте "0" и нажмите Enter, повторите для "Y" и "Z" полей.
    Местоположение:
    [​IMG]
    Это гарантирует, что пол будет работать с размером сетки по умолчанию (то есть, 320uu). Чтобы изменить размер, нажмите на маленькую стрелку в нижней части главного окна Unreal и выберите нужное вам значение.
    Размер Сетки:
    [​IMG]
    С выбором пола активируется виджет "Translation Mode". Удерживая клавишу Alt и пермещая сетку, вы получите ее дубликат. Край новой сетки должен быть привязан к краю ранее размещенной. Повторите это для формирования пола.
    Translation Widget:
    [​IMG]
    Если вы не вращали отдельные элементы пола, то UV ориентация должна одинаковой у всех объектов. Если материал с привязаной текстурой перетащить на сетку, он будет применен на них всех.

    Для того, чтобы создать стены, выберите одну из напольных сеток и скоприуйте ее, щелкнув правой кнопкой, выбрав "copy", а затем правой кнопкой мыши и выбрав "paste" (или просто Ctrl + "C", Ctrl + "V"). В Content Browser, кликните ПКМ на копии пола и выберите "Replace With" и "Add StaticMesh: Env_ Modular_StaticSet_MESH.single_mesh.Wall.Base.Single_Wall"
    Замена(Replace With):
    [​IMG]
    Метод Копировать/Вставить/Заменить имеет важное значение при строительстве карты, потому как при обнулении первого элемента, все прочие сетки будут брать его значения. Это значит, что все модули карты останутся привязаны к первой сетке.

    Если созданная часть стены не выровнена в нужном направлении, с соответсвием с выбраной частью, нажмите пробел для переключения виджета в "Rotation Mode" и просто перетащите, чтобы выровнять стену по своему усмотрению. [Примечание: это одно из немногих исключений в правиле НЕЛЬЗЯ ПОВОРАЧИВАТЬ!, упомянутом выше]
    Вращение:
    [​IMG][Примечание: Вы можете заметить, что нижний край стены не выстраиваются с краем пола причина будет описана ниже]

    Cтена может быть скопирована с помощью клавиши Alt + перетаскивание в "Translation Mode". Вам может потребоваться, чтобы стена перестроилась в угол. Если это "corner in", откройте Content Browser, разверните группу "Wall", "corner", "corner_in" и Base subgroups. Замените левую стену "Single_Wall_Corner_In_ XPOS" сеткой и правую "Single_Wall_Corner_In_Xneg". Это поможет построить углы. Кроме того, отобразит черные стрелки с надписью "corner", который наглядно покажет что угол был создан.
    Углы:
    [​IMG]
    Если угол "corner out", разверните "corner", "corner_out" и "Base" подгруппы в соответствии с "Wall". Замените левую стену "Single_Wall_Corner_Out_Xpos" и правую "Single_Wall_Corner_Out_Xneg".
    [​IMG]
    Вскоре вы сможете быстро создавать некоторые простые коридоры.
    Коридоры:
    [​IMG]
    Причина, по которой края стены не соединяются с краем пола и потолка, - это встроеное смещение на 8uu. Таким образом, модули размещаются в непосредственной близости друг к другу, автоматически создавая толстые стены и полы толщиной в 16uu.
    Смещение:
    [​IMG]Из-за этого, два "corner in", могут быть размещены рядом с двумя “corner out”, чтобы создать комнату, непосредственно близкую к коридору.
    [​IMG]


    Модульная настройка (Часть 2)
    Заменой модуля стены на модуль двери можно соединить две области. Просто выберите часть стены, которую хотите заменить на дверь, кликните ПКМ и выберите "Find in Content Browser..." . Это автоматически выделит выбранную часть в рамках различных подгрупп в Content Browser. Просто выберите подгруппу "door", выберите соответствующую дверь и замените стену. Например, с помощью "Find in Content Browser" на "Single_Wall_Corner_Out_Xpos" внутри "Base" в "corner_out" подгруппы "corner" группы “Wall”. Выбрав "door" в "corner_out", можно заменить на "Single_Wall_Corner_Out_Xpos" с "Single_Wall_Door_Corner_Out_Xpos" или "Single_Wall_DoubleDoor_Corner_Out_Xpos". Тот же метод может быть использован, чтобы заменить "Single_Wall_Corner_In_Xneg" на противоположной стороне.
    Двери:
    [​IMG]
    Продвинутые примеры
    Вы можете перейти по вертикали. Например, создать многоэтажную карту. Существует демонстрационная карта, названная "Mod_Tools_ demo_map", которая имеет, среди прочего, примеры прямых лестниц, лестничных клеткок и другие. Используйте эту карту как пример использования лестниц.
    Лестницы:
    [​IMG]
    Другой способ перехода по вертикали состоит в использовании двери для перехода в многоэтажной комнате. Дверь может пересекать две комнаты любой высоты и ширины, предполагая, что уровни пола одинаковы. Этот пример состоит из одной стены и коридора, который открывается в помещении на 2ом этаже.
    [​IMG]
    Еще один способ перехода по вертикали - использование потолочной сетки, которая подключается к стене (т.е. “corner up”) или полу, который присоединяется к стене (т.е. выпуклая “corner down”). Для того, чтобы потолок соединился со стеной, потолок должен быть выбран (то есть, в пределах (скоса))“bevel” в группе “Ceiling”) к соединяющей к стене. При скосе требуется учитывать смещение между потолком, полом и стеной.
    [​IMG]
    При создании “corner out” совместно с “corner up” и / или “corner down”, скос стены должен быть использован так, чтобы обеспечить выстраивание краев соответствующим образом.
    [​IMG]
    Используя эти части, можно изменить размеры комнаты, изменить высоту потолка и пола. Например, без использования двери создать коридор между этажами. Комбинации могут быть использованы для изменения комнат практически в любых целях.
    [​IMG][​IMG]
    Продвинутое использование модульного строения
    Помимо основных комплектов, обсуждённых ранее, существуют дополнительные части, используемые для создания более сложных или специализированных областей. Например, Angle45 Wall, Ceiling и Floor могут быть использованы для создания комнат с наклонными элементами. В связи с удлинением наклонной стены, формат UVs, сохраняется с правильным соотношением UVs, со швами на конце диагональной комнаты. Таким образом, чтобы свести к минимуму швы, есть различные Angle45 элементы. Примеры из них можно найти в "Mod_Tools_ demo_map", упоминаемой ранее.
    [​IMG][​IMG][​IMG]


    Тени
    Примитивы, у которых переменые CastShadow = TRUE и CastStaticShadow = TRUE отбрасывают статичекую тень на окружение.

    [​IMG]Viewmode: Shadow Map, отображает статические тени на карте
    Примечание: Примитивы могут отображать статические тени окружающих обьектов, даже если установлено обратное значение.

    Все тени, не зависящие от освещения, сглажены и хранятся в виде shadowmap. Это позволяет рендерить статические тени в одно действие во время геометрической проверки затемнения. Единственное исключение - это тени, отбрасываемые глобального источника света. Статические тени от источника света хранятся в отдельном канале shadowmap для предотвращения смешивания на каскадно-теневых картах.

    Примечание: Должен быть только один глобальный источник света на карте.

    Статические тени от глобального источника(солнце), и статические тени от всех других огней занимают до 2 каналов G-Buffer.

    Динамические тени
    Динамические тени (CastWholeSceneDynamicShadows = True) формируют тени для всей геометрии. Динамические тени всегда смешиваются со статическими и являются взаимоисключающими, нельзя чтобы один свет отбрасывал только статические или динамические тени.

    Тени обрабатываются по-разному в зависимости от точечного и направленого света.

    Точечный свет
    Точечные свет отбрасывает единую тень, основанную на направлении 6 источников в каждом из направлений.
    [​IMG]Сцена с использованием точечного освещения

    Граница исчезнования тени содержится в WholeSceneShadowFadeOutDistance и влияет на WholeSceneShadowCutoffDistance. Эти значения указаны в SystemSettings.ini.

    Изчезновение динамический тени линейно зависит от значений расстояния. Исчезновение зависит от источника света. Динамическая тень исчезает целиком (эффект растворения). Нет линии перехода от статической к динамической тени.

    Примечание: Настройки расстояния зависит от точки обзора игрока а нет от источника света.

    Глобалный(направленный) свет
    Глобальное направление света отбрасывает каскадные тени на окружающие обьекты. Настройки каскадной тени доступны в WholeSceneDynamicShadowRadius, NumWholeSceneDynamicShadowCascades, CascadeDistributionExponent.

    Прозрачность вычисляется на пикселях на затененных участках. Это приводит к видимой линии перехода на пороге тени.
    [​IMG]Четкая граница каскадной тени.

    Динамическая тень от обьектов
    PerObject
    - отбрывание тени конкретно обьектом. Источники, которые имеют параметр (CastPerObjectDynamicShadows = True), могут отбрасывать на объект динамические тени, которые имеют параметр (AllowPerObjectShadows = True).Параметр CastWholeSceneDynamicShadows определяет отбрасывается динамеская тень от всех обьектов или нет.
    Примечание: Объект также должен иметь (CastDynamicShadows = TRUE), для того, чтобы отбрасывать тени на объекты.
    [​IMG]1.Освещение, постороннее отбрасыванию каждым обьектом тени. 2. Освещение без отбрасывания тени каждым обьектом

    AllowPerObjectShadows = TRUE - автоматически отключает статические тени для этого примитива.

    Отбрасывание тени PerObject требует много ресурсов, особенно когда они используются вместе с preshadows, следует использовать с осторожностью - в основном для персонажей и других динамических обьектов.

    PerObject накладываются на любые другие или статические тени. Даёт дополнительное преимущество, позволяя комбинировать статические и динамические тени.

    Есть 2 способа управления PerObject, которые работают одновременно. Каждый PerObject имеет растояние, на котором может отбрасывать тень - PerObjectShadowCullDistance. Также PerObject может быть изменен в соотвествии с настройкой из файла SystemSettings.ini ShadowFadeResolution и MinShadowResolution.

    Группирование теней PerObject
    [​IMG]PerObject тени помещаются в фиолетовые боксы, и чем больше растоянние от точки обзора, тем больше теней обьединяются в один бокс

    Следующие параметры в SystemSetting.ini позволяют контролировать поведение системы группировки тени.
    • bAllowGroupedPerObjectShadows - Позволяет группировать обьекты.
    • GroupedPerObjectShadows_MinRadius - Минимиальный радиус, на котором обьекты группируются для отбрасывания динамической тени.
    • GroupedPerObjectShadows_MaxRadius - Максимальный радиус, на котором обьекты группируются для отбрасывания динамической тени.
    • GroupedPerObjectShadows_RampUpFactor - Определяет время того, как быстро тени проходят между GroupedPerObjectShadows_MinRadius GroupedPerObjectShadows_MaxRadius.
    • GroupedPerObjectShadows_RampCutoff - Расстояние от зрителя, в соответствии с которым соблюдаются различные параметры прорисовки.

    Preshadows
    Пред-тени - это тени от окружающей среды на динамических обьектах. Пред-тени могут быть обработаны 2мя разными способами.

    Если персонаж внутри всей динамической тени, он будет получать следы тени по умолчанию, как и любой другой примитив в тени. Это потребляет немного ресурсов и растворение контролируется WholeSceneShadowFadeOutDistance и WholeSceneShadowCutoffDistance.

    [​IMG]Персонаж получает динамическую тень, отбрасываемую каскадной тенью.

    PerObject вместе с Preshadows требуют много ресурсов и должны использоваться экономно. На объект Preshadows разрешаются только огни, которые имеют AllowPerObjectPreShadow = TRUE. В настоящее время этот набор по умолчанию превалирует в направленном свете.

    PerObjectShadowCullDistance применимо к preshadows. Кроме того, объект Preshadows использует настройки MinPreShadowResolution и PreShadowFadeResolution в SystemSettings.ini.

    [​IMG]Персонаж получает динамическую пред-тень за PerObject.

    Примечание: Даже если персонаж может использовать PerObject Preshadows, она будет заменена на динамическую тень, когда объект будет находиться в радиусе динамический тени. Это дает тот же (или лучший) эффект при меньших затратах ресурсов.

    Примечание: Preshadows можно контролировать, как и PerObject. Они используют те же настройки.


    Материалы
    В настоящее время кастомные "родительские" материалы не поддерживаются в Killing Floor 2 SDK.
    Шаг 1
    Сохраните вашу карту в:
    C:\Users\”Your Name”\Documents\My Games\KillingFloor2\KFGame\Unpublished\BrewedPC
    В KF2 ED найдите External папку, в которой хранится ваша карта. ПКМ в content browser и выберите New Material Instance Constant.
    [​IMG]
    Шаг 2
    Во всплывшем огне дайте имя вашему MIC.
    [​IMG]
    Шаг 3
    Ваш новый MIC отобразится в пакете вашей карты
    [​IMG]
    Шаг 4
    Перейдите в Env_Mat_Lib(это место, где хранятся все "родительские материалы") в content browser, и выберите один из материалов. Сначала откройте ваш MIC ,затем выберите SDK_Simple_PM и нажмите зеленую стрелку. Теперь вашему MIC присвоен "родительский" материал.
    [​IMG]
    Теперь вы можете присвоить ему текстуру аналогичным образом.

    Параметры
    У SDK_Simple_PM ограниченый набор параметров, но их достаточно для большинства случаев. Вы можете проверить и отрегулировать их всех на ваше собственное усмотрение.

    Единственный параметр, требующий обьяснения - Scalar_Texture_Scale, это 3 векторная константа, но только константы R и G контролируют покрытие текстурой.

    Scalar_Specular_Power - влияет на отображение, если включен параметр Realtime Reflections. Вы можете наблюдать и редактировать отражение, изменяя значения параметра; значение 10 даст очень "мыльный" эфеект, а 50-зеркальное отражение.
    [​IMG]
    Шаг 5
    Последний шаг, добавление Physical Material. Параматр задает эффект, отображаемый при ударе или выстреле по материалу игроков или зедом во время игры.
    [​IMG]Скопируйте и вставьте один из материалов из списка ниже в слот Physical Material
    PhysicalMaterial'ENV_Surface_Types_PHYS.Asphalt_PM' PhysicalMaterial'ENV_Surface_Types_PHYS.Basket_PM' PhysicalMaterial'ENV_Surface_Types_PHYS.Books_PM' PhysicalMaterial'ENV_Surface_Types_PHYS.Bread_PM' PhysicalMaterial'ENV_Surface_Types_PHYS.Can_PM' PhysicalMaterial'ENV_Surface_Types_PHYS.CanFull_PM' PhysicalMaterial'ENV_Surface_Types_PHYS.CardBoardBox_PM' PhysicalMaterial'ENV_Surface_Types_PHYS.CastIron_PM' PhysicalMaterial'ENV_Surface_Types_PHYS.Cloth_PM' PhysicalMaterial'ENV_Surface_Types_PHYS.Concrete_PM' PhysicalMaterial'ENV_Surface_Types_PHYS.Dust_PM' PhysicalMaterial'ENV_Surface_Types_PHYS.Flesh_PM' PhysicalMaterial'ENV_Surface_Types_PHYS.FruitVeggies_PM' PhysicalMaterial'ENV_Surface_Types_PHYS.Glass_PM' PhysicalMaterial'ENV_Surface_Types_PHYS.Grass_PM' PhysicalMaterial'ENV_Surface_Types_PHYS.Gravel_PM' PhysicalMaterial'ENV_Surface_Types_PHYS.HollowMetal_PM' PhysicalMaterial'ENV_Surface_Types_PHYS.HollowWood_PM' PhysicalMaterial'ENV_Surface_Types_PHYS.Ice_PM' PhysicalMaterial'ENV_Surface_Types_PHYS.Metal_PM' PhysicalMaterial'ENV_Surface_Types_PHYS.MetalArmor_PM' PhysicalMaterial'ENV_Surface_Types_PHYS.Mud_PM' PhysicalMaterial'ENV_Surface_Types_PHYS.Paper_PM' PhysicalMaterial'ENV_Surface_Types_PHYS.PictureFrame_PM' PhysicalMaterial'ENV_Surface_Types_PHYS.Plant_PM' PhysicalMaterial'ENV_Surface_Types_PHYS.Plaster_PM' PhysicalMaterial'ENV_Surface_Types_PHYS.Poop_PM' PhysicalMaterial'ENV_Surface_Types_PHYS.RedBrick_PM' PhysicalMaterial'ENV_Surface_Types_PHYS.Rock_PM' PhysicalMaterial'ENV_Surface_Types_PHYS.Rubber_PM' PhysicalMaterial'ENV_Surface_Types_PHYS.SandBags_PM' PhysicalMaterial'ENV_Surface_Types_PHYS.Silverwear_PM' PhysicalMaterial'ENV_Surface_Types_PHYS.SmWoodFruniture_PM' PhysicalMaterial'ENV_Surface_Types_PHYS.Snow_PM' PhysicalMaterial'ENV_Surface_Types_PHYS.Water_PM' PhysicalMaterial'ENV_Surface_Types_PHYS.WhiteBrick_PM' PhysicalMaterial'ENV_Surface_Types_PHYS.Wood_PM'
    Тепрь сохраните, и на этом настройка материала закончена.

    Примечание:
    Мы используем много различных "родительских" материалов при создании различных эффектов в KF2. Если вы хотите, чтобы ваш MIC имел больше парамеов, я бы посоветовал выбирать вложение одной из наших карт и связать материал с этим вложением. Затем выберите мастер-материал как "родителя" вашего MIC .

    Большинство предметов в KF2 используют Env_Basic_Metal_PM. Этот материал имеет хороший набор параметров, которые могут поддерживать практически любой тип вложения. Только не забудьте изменить Physical Material, дабы тип соотвествовал поверхности.


    UV's и сетка слияния (Часть 1)
    В KF 2, любая сетка имеет как минмиум 3 UV канала.
    • Канал 0 - Базовая текстура.
    • Канал 1 - Световая карта, хранения информации по статическим теням.
    • Канал 2 - Карта брызгов(кровь), лучше всего хранить этот канал на плоских поверхностях.

    Базовые активы UV
    Экран активов UV, в левом верхнем углу обведено кол-во каналов, чуть выше есть кнопка, с помощью которой можно просмотреть содержание каждого из каналов.
    [​IMG]
    Канал 0 - Базовая текстура
    [​IMG]
    Канал 1 - Световая карта
    Обратите внимание, что канал карты света не имеет перекрывающихся граней UV. Перекрытие UV вызовет затенение областей там, где их быть не может, потому как UV может находиться полностью в тени.
    [​IMG]
    Канал 2 - Карта брызгов
    Карта света дублирует поверх брызгов крови. Плоское покрытие лучше всего подходит для брызгов крови. Представьте, что вы вылили ведро крови на этот телевизор. Вполне ожидаемо, что в крови должен быть весь экран, но если покрытие не плоское, вы получите швы, которые не имеют никакого смысла. Все же, учитывая сложность некотрых обьектов, швы неизбежны.
    [​IMG]
    Объединение [TW Tool]
    Объединение множества частей пола в одну. Оъединение обьектов положительно скажется на оптимизации, если, конечно, выполнена грамотно. Карта брызгов тоже должна быть обьединина одну часть, для лучшей работы

    Лучший способ объединения
    При объединении объектов на вашей карте старайтесь лимитировать кол-во вложений в одном слиянии. Каждое уникальное вложение в обьединеной сети добавит уникальный ID-материала к вашей сети. Слишком много ID-матералов могут привести к ухудшению производительности. Рекомендуется использовать максимум 4-5 на обьект размером 2к. Уменьшение ID-матералов увеличит детализацию.(Это сильно влияет на оптимизацию вашей карты)

    Другой способ зависит от положения. Хотите большой обьект, простирающийся вплоть до горизонта? Объедените обьекты по углам, а затем возле углов создайте новые обьекты слияния. Таким образом, как только сетка пропадет из обзора, она перестанет обрабатываться. Пробуйте объединить сетки по натурному признаку, чтобы избежать слишком больших сеток в мире. Большие сетки почти всегда приводят к ухудшению производительности. Иногда простое слияние 2 к 1 отлично себя проявляет, а с полом 8 к 1 превосходно работает. Посмотрите на наши официальные карты и получите представление того, где и почему мы обьединяли сетки.

    Шаг 1
    Выберите все обьекты, ПКМ, Combine Static Meshes[TW]
    [​IMG]
    Шаг 2
    Введите имя вашего объекта в поле Package, постарайтесь задать адекватное имя, чтобы не было множества объектов типа: Combined_Something_01,02,03 и т.д.
    [​IMG]
    Шаг 3
    Кликните Yes, чтобы объеденить все коллизии. Это сохранит каждую коллизию в новом обьекте. Позже мы избавимся от них.
    [​IMG]
    Шаг 4
    Кликните Yes, чтобы заменить обьект. Это удалит все старые раздельные части и вставит свежесозданный обьект. Это важно, так как ваш объект получит "центр". Без этого перемещать/вращать сетку будет довольно проблематично.
    [​IMG]
    Теперь лучше всего соханить карту.

    Придание обекту UV.
    Теперь придадим объекту карту света и брызгов. Если вы объединяете только плоские обьекты(пол, стены, потолок), для создания карт можете использовать UV tool.

    Шаг 1
    Откройте объект в Static Mesh Viewer, в левом верхнем углу, кликните по значку "шахматной доски"
    [​IMG]
    Шаг 2
    • Выберите Create New Planar UVs [TW]
    • Поверните объект, используя Mesh Rotation.
    • Нажмите Apply, создастся канал 1(световая карта) для обекта
    [​IMG]
    Шаг 3
    • Смените UV channel, для изменения канала 2.
    • Нажмите Apply, создастся канал 2(карта брызгов) для объекта
    [​IMG]
    Шаг 4
    Этот шаг нужен не более чем для собственного спокойствия, на экстренный случай. В левом верхнем крае выберите "глаз", чтобы сделать миниатюрное изображение в этом положении. Когда вы откроете сетку, она будет в идеальном положении, преобразуя UV.
    [​IMG]
    UV созданы.


    UV's и сетка слияния (Часть 2)
    Пересоздание коллизий
    Теперь мы возьмем множество существющих коллизий обьекта и объединим их.
    [​IMG]
    Шаг 1
    • Отобразите только ваш объект.
    • Включите кисть(если вы ее не видите, нажмите "B").
    • Выберите режим редактирования и включите ортогональный обзор, чтобы полностью обхватить ваш обьект.
    [​IMG]
    Шаг 2
    Выберите обьект, ПКМ, Set Collision from Builder Brush. Кликните "Yes" для замены коллизии.
    [​IMG]
    Теперь, если вы вернетесь в браузер и посмотрите коллизии, то увидете только 1 бокс вместо множества.
    [​IMG]
    Разрешение карты брызгов
    Следующий шаг - задание разрешений карты брызгов. Необходимо получить равномерное распределение на всех вложениях. Разрешается иметь неоднородные карты брызгов. Некоторые вариации в карте крови едва заметны. Советую использовать модель клота для оценки масштаба карты брызгов.

    Шаг 1
    • Переключитесь на SplatterMap Density [TW]
    • Откройте свойства вашего обьекта и найдите Persistent Splats.
    [​IMG]
    Шаг 2
    Выберите Select Build Splatter Maps [TW], карта попробует создать карту, основываясь на количестве вложений.
    Теперь выберите собственное значение Override. В этом случае значение 10 идельно при проверке на клоте.
    [​IMG][​IMG]
    Шаг 3
    • Сохраните
    • Зайдите в игру, введите в консоли enablecheats.
    • Наберите spawnai clot.
    • Стреляйте в клота и смотрите как кровь покрывает карту.
    [​IMG]Готово!

    Создание комплексной коллизии(Портал)
    Комплексная коллизия используется для создания точек появления в Полах/Стенах. Принцип работы старый, только потребует чуть большую работу кистью.
    [​IMG]Для начала нужно вырезать дыру в центре.

    Шаг 1
    Как и раньше используйте кисть и выберите всё, вплоть до края дыры.
    [​IMG]
    Шаг 2
    Добавьте csg кисть и обведите всё остальное пространство вокруг.(попробуйте обойтись как можно меньшим количеством коллизий, так как это грозит потерей производительности)
    [​IMG]
    Прячьте кисть и ваш объект и перейдите wireframe mode для просмотра кистей.
    [​IMG]
    Шаг 3
    Выделите ваши дополнительные кисти с обычной кистью. Вы можете сделать кисть большой, если хотите, чтобы всё добавляемое находилось внутри.
    Кликните intersect слева
    [​IMG][​IMG]
    Ваша кисть объединит все дополнительные кисти в одну.
    [​IMG]
    Шаг 4
    Удалите дополнительные кисти и восстановите геометрию. Теперь осталась только основная кисть, которую можно использовать для объединнения коллизий.
    [​IMG]
    Шаг 5
    Как и раньше ПКМ по обьекту, Set Collision from Builder Brush.

    Готово


    Настройка звука на карте
    Использование звука на карте
    [​IMG]
    Отражение звука
    Убедитесь, что вы используете KFReverbVolumes. Он обладают особыми свойствами, которые контролируют:
    1. Границы, от которых звук выстрела будет отражаться.
    2. WWISE отражение привязки.
    3. WWISE контроль смешивания.

    Примечание: Эхо зависят от этих значений, они должны быть заданы, так чтобы соответствовать точному контуру помещения или открытого пространства, где вы хотите услышать эхо. KFReverbVolumes могут перекрываться и объем с наивысшим приоритетом, будет проигран.

    KFReverbVolume Свойства
    [​IMG]
    Отражающая среда
    ID срды используется только для:
    • SmallRoom
    • MediumRoom
    • LargeRoom
    • City
    • Mountain
    • Forest

    Настройки положения:
    Когда игрок входит в объем, WWISE будет передано указанное состояние. В приведенном выше скриншоте, оно примет значение Env_Paris_Location.Courtyard.

    WWISE настройка окружения
    [​IMG]Используя настройки KFReverbVolume, вы можете контролировать объемы каждой группы Actor-Mixor. Это поможет, если у вас есть две громные территори, прилегающих друг к другу и вы хотите, смягчить звук между ними. В приведенном выше скриншоте вы можете увидеть, что на открытом воздухе звуки будут ослабляться -9 дБ с некоторым фильтром нижних частот, когда игрок входит в объем отражения Courtyard. Когда игрок выходит за пределы, объема LPF сбрасывается на 0. Переход подземлю превратит внешние звуки в тихий гул.

    • В настоящее время вы можете использовать эту систему только при использвоании звука из одной карты. т.е. Burning Paris или Outpost. В будущем мы планируем изменить эту систему.

    Двери
    К дверям которые можно открыть и закрыть могут быть прикреплены звуки. Они обозначены Door Actors:
    [​IMG]
    Свойств Door Actor (F4) покажет, куда поставить звук:
    [​IMG]
    Опции Door Actor(необязательные):
    Open Sound: Звук когда дверь открывается
    Opening Ambient Sound: Звук когда дверь открыта (может быть зациклена для большых дверей)
    Opened Sound: Звук когда дверь полностью открыта
    Close Sound: Звукогда дверь закрывается
    Closing Ambient Sound: Звук когда дверь закрыта (может быть зациклена для большых дверей)
    Closed Sound: Звук когда дверь полностью закрыта
    Damaged Sound: Звук когда дверь получает урон (от ударов ZED'ов)
    Destroyed Sound: Звук когда дверь полностью уничтоженна (ZED'ы проломили дверь)


    Примечание
    FAQ:
    Q:
    Перевод жутко хромает, а в некотрых местак сложно понять смыл
    A: Перевод в процессе полировки, так, что просьба указывать на все неточности или ошибки в нем.

    Q: Не отображается компоненты пакета StaticSet.
    A: Необходимо его перезагрузить. Для этого в Content Browser перейдите по пути: KFGame\Packages\Environment\ ПКМ по ENV_Modular_StaticSet, Fully Load.

    Q: Помещенная дверь не открыается, и никак не реагирует наи на игрока, ни на зедов.
    A: Необходимо установить KFDoorTriger из Actor Classes и перейти по пути Trigger\Triggers_PawnsOnly\KFTrigger_ChokePoint\, далее привезать данный тригер к классу двери.

    Q: Кисть не отображается, не понятно как создавать с ее помощью обьекты.
    A: Если кисть не отображается нажмите B, для создания области нужно войти в режим создания геометрии(Shift + 2), далее просто выберайте грани и ратягивайте до нужного вам объема, после кликнете по Add Volume, и выберете зону которую хотите добавить.

    Q: Как перейти в ортогональные проекции?
    A: Кнопка в правом верхнем углу редактора.

    Q: Как менять режимы перемещения/вращения/масштабирования
    A: Кнопка Spacebar.

    Q: Как отобразить Content Browser?
    A: Ctrl + Shift + F

    Q: Есть другие статьи по SDK?
    A: На данный момент это все что есть на офф.вики, но есть еще статьи по созданию предметов для Workshop'а, если будет нужно могу взяться за их перевод https://tripwireinteractive.atlassian.net/wiki/display/KF2SW/Killing+Floor+2+Workshop еще в сети есть множества руководств непосредственно по UDK, которые могут оказаться полезными в процессе создания карты.

    Q: С чего начинать? Какой порядок создания карты лучше всего?
    A: Начать нужно с создания окружения(пол, стены, потолок), затем создание дверей/окон, заполнение карты различными объектами(торговец, мебель, оружие, ...), прописывание точек спауна и навигации, текстурирование и освещение. Последний шаг оптимизация карты, удаление нунжных областей/предметов, исправление освещение и прочее.

    Ссылка на статейку http://steamcommunity.com/sharedfiles/filedetails/?id=522257553
     
    w.a.l и Flame нравится это.