Перейти к содержимому


Фотография

Object builder в примерах: Разбираемся с LOD-ами. Урок II


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 6

#1 OFFLINE   vitacite

vitacite

    Ефрейтор

  • Пользователи
  • 98 сообщений
  • Откуда:Novosibirsk

Отправлено 14 September 2016 - 14:37

Информация о работе в Object Builder - подчерпнута от Xakuda, конфигов StellRat, большая часть перевод мануалов БИС. Однако разобраться с ним без выше указанных товарищей было бы сложновато.

 

Хотел сразу продолжить предыдущий урок, но понял, что не разобравшись с LOD-ами будет сложно рассказывать дальше. Поэтому разбираемся в этом уроке, чтобы дальше уже не останавливаться. 

 

Итак поехали:

 

Что такое LOD детализации ? (выдержка из мануаля WikI Bistudio перевод)

 

Lod расшифровывается как уровень детализации (Level of Detail), однако для Арма3 в LOD определяется не только детализация различных вариантов модели, (как она выглядит на том или ином расстоянии), но и взаимодействие этой модели с окружающей средой. Такие лоды называются не просто набором цифр, а имеют уникальные имена, например Path или ViewGeometry и тд.

 

В object builder LOD-ы детализации можно создать путем клика правой кнопкой мышки в окне List of LODs

 

Прикрепленный файл  lod1.jpg   35.68К   23 Количество загрузок:

 

и выбором New

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

 

Все остальные типы LOD-ов будут создаваться через LOD-ы детализации путем изменения в пункте Properties их свойств.

 

   В любой 3D игре, даже выполненной низкоплигональными моделями (как Арма3), а особенно если этот мир открытый, для каждой модели применяется несколько уровней детализации, что позволяет за счет снижения детализации (читай числа полигонов) на более удаленных от наблюдателя моделях, снизить общее число полигонов в сцене, а следовательно нагрузку на CPU и видеокарту и повысить FPS для игрока.

 

   Переключение между LOD-ами происходит в Арма 3 автоматически, на основе сразу нескольких параметров – расстояние до объекта, качество видеокарты, загрузки CPU.

 

При этом, -  ПОРЯДКОВЫЙ НОМЕР  LOD-а в Арма3 НЕ ОКАЗЫВАЕТ НИКАКОГО ВЛИЯНИЯ, на то, в какой момент и в каком диапазоне его надо показывать, и никаких методов определить когда этот LOD надо отображать – нет.

 

   Поэтому моделист, должен обеспечить МНОГОКРАТНОЕ разрешение LOD с различной плотностью полигонов. В object builder LOD –ы должны быть обязательно упорядочены в соответствии с их polygoncount (LOD в котором модель имеет самое большое число полигонов должен носить порядковый номер 0 и тд..)

 

 

Вот, например, таблица lod-ов на модели T-100 Varsuk из мануаля BiStudio

 

Прикрепленный файл  lod2.jpg   43.18К   14 Количество загрузок:

 

      Обычно практикуется “уполовинивание’ полигонов для более низкого разрешения в качестве ориентира, самый последний LOD должен иметь самое низкое число полигонов обычно менее  500.  При этом следует учитывать, что в случае когда в модели меньше  500 полигонов, (которые нагружают GPU). - число секций (нагружающих в свою очередь CPU), будет иметь большее значение при влиянии на производительность чем число полигонов… (число точек (points) полигонов (face), секций(Sections), указывается внизу Object Builder). Для LOD –ов с низким разрешением, не имеет смысла указывать материалы, нормали и тд. (так как смысла при удалении от объекта они не имеют, но дают нагрузку на модель.)

   Число полигонов в каждом LOD-е должно быть ниже, чем максимальное   возможное значение и это совсем не значит, что все модели должны иметь максимально значение нормалей вершин.

В Арма, Арма2, и ранней версии Арма3 максимальный предел нормалей вершин (vertex normal) составлял 2 ^ 15 = 32768. Однако в версиях Арма3 после 70 версии, которая используется уже direct X 11 число вершин было увеличено до 2^16= 65536, что однако не сильно повысило производительность.

Обратите внимание это не полигоны!!! Почему полигоны не важны объясняет Black_General 

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

 

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

 

Важно так же соблюдать некие правила.

 

  • Не делать точные копии, lod-а который уже есть, так как кроме увеличения размера Вашей модели это ни к чему хорошему не приведет.
  • В name property для всех LOD-ов резолюций необходимо указывать параметр LodNoShadow=1   дабы отключить автоматическую генерацию теней. В принципе LOD-ы с числом поверхностей более 300 не отбрасывают теней, но тратят ресурсы на их вычисление, поэтому данный параметр повышает производительность.  
  • В случае использования альфа канала в текстурах, и наличия багов связанных с отбрасыванием теней от альфа канала, необходимо в Geometry LOD указать параметр "Forcenotalpha=1"

 

 

Что такое LOD  Geometry?

 

      Этот LOD определяет, где и как модель будет сталкиваться с другими объектами. При этом Geometry LOD будет работать при столкновениях, если один из сталкивающихся объектов не  является объектом PhysX (например солдат, танк и тд).  Для объектов PhysX критическими при столкновении будут являться масса и сила инерции.

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

 

  • Весь LOD должен быть разделен точки (вершины, компоненты), которые должны называться ComponentXX (где XX представляет собой порядковый номер от 01 до 99). (Делается это автоматически путем применения на выделенном объекте CTRL+A точек в меню Structure

 

Прикрепленный файл  lod3.jpg   50.31К   13 Количество загрузок:

 

  • Каждая точка-компонент, должна иметь массу… Задается она в окне массы 

Прикрепленный файл  lod4.jpg   21.41К   6 Количество загрузок:

 

Выглядит это окно примерно так, если оно у вас не отображается найти его можно тут ->

 

Прикрепленный файл  lod5.jpg   44.41К   7 Количество загрузок:

 

        После того, как билдер,  нашел все компоненты, выделяем все (CTRL+A) и вписываем массу. Учитывайте, что масса распределяется по всем компонентам (точкам) равномерно, поэтому указывайте большую массу например 200000… если я правильно понял, как это работает, то объект с большей массой проходит через объект с меньшей массой.

  • Geometry LOD не должен иметь незамкнутых точек.
  • Настройки по умолчанию для 

    Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

     для Geometry LOD являются: canocclude = 0 и canbeoccluded = 1 (для транспортных средств, персонажей и оружия).
  • Максимальный размер Geometry LOD-а  50 метров от центра объекта (перекрестье на сетке вашего редактора) т.е. общая длина либо  ширина 100 м. В высоту (по оси z) ограничений нет вообще. Однако в случае если на LOD будет накладываться Roadway,  то его размеры будут ограничены размерами Roadway.
  • Так же необходимо помнить, что LOD геометрии несет в себе материалы для организации спецэффектов при нанесении объекту урона.  В случае если материалы не назначены, (или при бинаризации объекта неправильно настроен диск P:\  в этом случае материалы “слетят”),  будет отображаться тип воздействия – земля (грязь).

Материалы для спецэффектов проникающих в объект повреждений можно взять тут в библиотеке шаблонов; P:\a3\data_f\penetration

 

Прикрепленный файл  lod8.jpg   70.28К   5 Количество загрузок:

 

в свитке Name Property LOD Geometry, прописываются следующие параметры:

 

map: [иконки, которые будут отображаться на 2D карте]  Building, bunker, busstop, bush, church, chapel, cross, fountain, fortress, fuelstation, fence, hide (не отображать объект на карте), hospital, house (показывает черный квадрат и displayName= при наведении мыши в Mission Editor), lighthouse, mainroad, power lines // note the space, powersolar, powerwave, powerwind, quay, railway, rock, rocks, road. ruin, shiprwreck, smalltree, stack, transmitter, tourism, tree, track, view-tower ,wall, watertower.

 

сlass: [указывает, как объект перемещается по поверхности и влияет на поведение объекта, моделирование разрушений и namesound c дополнительным соображением для класса = house]. В случае если указан * работает если в конфигурации классов модели указан Land_xxx   параметры: building*, bus, fuelstation*, fence*, house* (‘параметр требуется для любых анимаций строений включающих в себя ladders, doors и attendant), streetlamp и  housesimulated (для объектов светящихся ночью в зависимости от параметров указанных в cfgVehicles), road (для дорог и мостов), tree (деревья).

 

dammage: - описание модели повреждений – основывается на параметре armor в config.cpp возможные параметры: building, house, tree (объект наклонится), fence (объект упадет), engine (взрыв при разрушении), bush (объект разрушится), tent (объект коллапсирует), no (никаких визуальных эффектов при разрушении объекта), wall (объект упадет).

 

canOcclude используется с LOD-ами Geometry и ViewGeometry. В тех редких случаях когда надо, чтобы спрятавшегося за объектом было видно например в листве дерева, и объект не исчезал полностью. CanOcclude = 0 

 

canbeOccluded оказывает противоположный эффект, объект будет полностью скрыт за другими объектами.

 

Что такое LOD Path?

 

Lod path предназначен для Ai.  Дело в том, что они игнорируют LOD Geometry поэтому проходят сквозь здания либо застревают в них и других объектах. Чтобы этого избежать необходимо указать некий путь, по которому собственно Ai и будет передвигаться, как вокруг дома, так и внутри его. Путь для Ai рисуется с помощью полигонов квадратной формы и выглядит примерно так:

 

Прикрепленный файл  Lod6.jpg   47.28К   11 Количество загрузок:

 

       К рисованию Path необходимо относиться внимательно, иначе  не избежать глюков. После того, как мы посмотрели во всех проекциях и убедились, что на нашем пути нет никаких предметов, в которые будут утыкаться Ai, необходимо в окне Selection задать точки входа и выхода для Ai. Для этого выделяем отдельные точки и даем им названия. Примерно так.

 

      Прикрепленный файл  lod7.jpg   45.58К   7 Количество загрузок:

 

 

После того как все будет проделано необходимо нажать Shift –E и отредактировать Y ось, на 0,2 чтобы наш Path Way гарантированно был выше поверхности (как бы парил над ней).

 

Что такое LOD  Phys Geometry?

       

  Это еще один геометрический LOD который определяет модель столкновений между объектами PhysX. Он должен быть еще меньше чем LOD Geometry так как на вычисление physx требуется больше ресурсов. Отдельный момент использовать этого LOD-а на технике с вращающимся объектами (стволу орудий, башенки, винты роторов и тд.) т.к. эти объекты могут внезапно и достаточно быстро двигаться приводя к сбоям.

Однако для некоторых предметов *(на пример гранаты) он необходим и используется вместо FireGeometry.

 

Что такое LOD  FireGeometry?

LOD FireGeometry определяет в каком месте модель будет сталкиваться с пулями и ракетами. Если у модели нет этого LOD-а, то вместо него будет использоваться LOD геометрии.

По своей структуре, этот LOD подобен Geometry, в нем так же должны быть найдены ComponentXXX, где X представляет собой порядковый номер,  геометрии должен быть «замкнутым/закрытым/closed» и «выпуклым/convex»/. Для того, чтобы достигнуть этого необходимо в меню выбрать сначала ->

 

Structure | Topology | Find Non-Closed

затем закрыть точки

 

Structure | Topology | Close.

 

 

 После чего проследовать в

 

Structure | Convexities | Find Non-Convexities  (либо Structure | Convexities | Convex Hull)

 

и закрыть их.

 

Подобно LOD геометрии на этот LOD будут накладываться материалы penetration.

 

 

Что такое LOD Roadway (Мостовая)?

 

   Собственно, этот LOD необходим, чтобы игроки могли передвигаться по поверхности. У него есть ограничение 36 м от центра (рабочий центр пересечение оси координат Object Builder) в обе стороны. Поэтому максимальная длинна объекта 72 метра. Соответственно если длина объекта больше, то придется делать отдельные прокси с p3.

Прикрепленный файл  scr38.jpg   64.99К   14 Количество загрузок:

Прикрепленный файл  scr37.jpg   58.75К   12 Количество загрузок:

 

     Этот LOD используется так же для определения звуковых эффектов окружения которые будет слышать игрок. Используемая среда определяется текстурой поверхности roadway (Название текстуры соответствует классам в Cfg Surfaces). Все это счастье находится вот здесь…P:\a3\data_f\surfaces и его вполне достаточно, чтобы создать полное звуковое окружение в вашем объекте.

 

 

Что такое LOD ViewGeometry?

 

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

 

 

Что такое ShadowVolume LOD?.

    

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

 

Этот лод должен быть;

-       Закрытым (Closed),

-       Триангулированным (Triangulated),

-       С острыми краями (Sharp Edges)

 

На сегодня все.


Сообщение отредактировал vitacite: 16 September 2016 - 18:15

  • 4

#2 OFFLINE   vitacite

vitacite

    Ефрейтор

  • Пользователи
  • 98 сообщений
  • Откуда:Novosibirsk

Отправлено 16 September 2016 - 18:16

up! добавлена информация по вершинам.


  • 0

#3 OFFLINE   vitacite

vitacite

    Ефрейтор

  • Пользователи
  • 98 сообщений
  • Откуда:Novosibirsk

Отправлено 15 March 2017 - 08:34

Префикс LAND_ в конфигурации моделей для Arma 3

 

В продолжение урока, необходимо коснутся одной важной темы.  А именно от чего зависит работоспособность окон и дверей в игре. Возможно если вы пытались сделать открывающиеся дверь и бьющиеся окна в своей игре, то убедились, что в редакторе EDEN все работает, но если поставить ваш объект как объектом карты, (запечь в WRP в terrain builder все это ломается. В чем же проблема?

Проблема заключается в правиле по которому в статические модели содержащие анимации должны соответствовать следующим параметрам.

 

1. В самой модели в Lod-е name property должен быть установлен параметр class house - этот параметр существует специально для моделей содержащих анимации, Этот параметр при запекании в объекта в карту, покажется движку, что модель содержит анимации и они будут работать. 

2. В конфиге модели, обязательно должен быть обязательно указан префикс (приставка) LAND_. Ниже  пример из вики BIS

class house_f; // ссылаемся на базовый класс 
class land_my_great_building: house_f // наследуем нашим объектом с анимацией базовый класс house_f - обратите внимание на приставку (перфикс) 
{
// .....
model=\some\location\my_great_building.p3d; // собственно сама модель
// ......
};

Как вы видите саму модель не обязательно называть LAND_ важно, чтобы в конфигурации модели обязательно присутствовал префикс LAND_ После этого, все двери и прочие анимации на статических объектах запеченные в карту начнут работать.

 

Есть еще один тонкий момент.  В случае если анимаций в модели нет - а class house установлен после запекания модели вы увидите ошибку в вашем RPT логе типа  .... .

some\location\my_great_building.p3d: house, config class missing

При этом установка модели в EDEN никаких ошибок не выдается, ошибка появляется после запекания модели объекта в карту... А теперь представьте когда я по доброте душевной все дома на своей карте (более 500) обозначил классом house, что творилось в логах....

В свое время я потратил неделю на решение проблемы, казалось очевидный для дома class house в итоге оказался строго специализированным.

Решилась проблема просто - вместо class house для домов (или других статических объектов) которые не содержат анимации, в name property указывается - class building 

 

Для каких классов еще нужен префикс Land_ в конфигурации моделей. Вики BIS говорит об этом следующее...

class house* - необходим для всех статических объектов с "поведением" - моделирование разрушений, прокси, анимации дверей и окон.

class building* - для объектов которые не имеют model.cfg

class fuelstation*

class fence*

class streetlamp* (ночной свет работает только если в конфиге обозначен Land_ в cfgNonAIvehicles class )

housesimulated* (ночной свет работает только если в конфиге обозначен Land_ в cfgvehicles class)


Сообщение отредактировал vitacite: 15 March 2017 - 08:36

  • 1

#4 OFFLINE   vitacite

vitacite

    Ефрейтор

  • Пользователи
  • 98 сообщений
  • Откуда:Novosibirsk

Отправлено 21 March 2017 - 08:01

Статическая анимация объектов. // Часть справочной информации взята из мануаля PMC_modeling, 
Файл model.cfg - является интерфейсом между моделью p3d и Arma3, он необходим если вы хотите проигрывать анимации для ваших объектов либо анимировать их целиком. Например открывающиеся двери, окна, бьющиеся стекла, вращающиеся вентиляторы или лопасти пропеллера, оружие, анимация техники и тд. и тп. Так же он необходим для динамической анимации, но в данном уроке это не рассматривается.
Этот файл выполняет роль некой справочной таблицы, которая обрабатывается во время процесса бинаризации, чтобы сообщить программе, каковы различные секции модели, какие скелеты используются и как она анимируется. 
Данная система более гибкая, чем ранее использовавшаяся (в OPS), потому что вся информация хранится для модели, а не для класса объекта в основном файле конфигурации. Это означает, что несколько классов объектов могут использовать одну и ту же модель и не обязательно определять анимации для этой модели отдельно. В файл model.cfg вводится class AnimationSource он же вводится в файл основной конфигурации config.cfg таким образом происходит отделение динамической анимационной части от остальной модели. Большинство моделей смогут наследовать определения из базовых определений на более высоких уровнях в иерархии данных.
После создания файла правильного model.cfg вы сможете просматривать анимации (статические) в buldozer за счет прокручивая их колесиком мышки, а динамические анимации прямо в object builder.
 
Ниже рассмотрим сегменты файла model.cfg
Первый сегмент -  CfgSkeleton - определение базовых классов, и "костей" вашего объекта.

class CfgSkeletons
{
	class Default // определение базового класса
	{
		isDiscrete = 1;
		skeletonInherit = "";
		skeletonBones[] = {};
	};

	class vwe_skel : Default // Может называться произвольно, но чтобы не путаться лучше называть как модель.
	{
		skeletonInherit="Default"; // указываем наследовать все подклассы класса Default;
		skeletonBones[]= // Задаем новые кости которые на 100% соответствуют названия в selection вашей модели как на примере ниже.     
		{
			"door1","", // Дверь № 1
			"door2","", // Дверь № 2
			"door3","", // Дверь № 3
			"door4",""  // Дверь № 4
		};
	};
}; 

Прикрепленный файл  primer_01.png   167.5К   4 Количество загрузок:

Второй сегмент: CfgModels:  Этот сегмент определяет все свойства каждой модели. Названия классов соответствуют названию модели. Здесь вы определяете, какие разделы имеет модель, какой скелет использует и какие анимации будут в нее входить.

class CfgModels {
	class Default {
		sectionsInherit=""; определение базовых классов
		sections[] = {};
		skeletonName = "Default";
	};
class wrk_gaz3302 : Default {            // название класса должно строго соответствовать названию модели
		skeletonName="vwe_skel"; // название скелетона который был вами установлен выше
		sectionsInherit="";
		sections[]={"camo"};
		
		class Animations {
			class door_01_rot {  // название класса которое соответствует классу описанному в config.cfg
				source = "door_01_source";
				type="rotation"; // выбранный Animation source
				selection="door1"; // название селекшена из модели
				axis="door1_axis"; // название оси вокруг которой открывается дверь
				memory=1;
				minValue=0.000000;   // ниже параметры описывающие углы вращения и его степень
				maxValue=1.000000;
				angle0=0.000000;
				angle1=1;  
			};
		                       	
			class door_02_rot {
				source = "door_02_source";
				type="rotation";
				selection="door2";
				axis="door2_axis";
				memory=1;
				minValue=0.000000;
				maxValue=1.000000;
				angle0=0.000000;
				angle1=-1;
			};
			class door_03_rot {
				source = "door_03_source";
				type="rotation";
				selection="door3";
				axis="door3_axis";
				memory=1;
				minValue=0.000000;
				maxValue=1.000000;
				angle0=0.000000;
				angle1=-1.6;
			};
		                       	
			class door_04_rot {
				source = "door_04_source";
				type="rotation";
				selection="door4";
				axis="door4_axis";
				memory=1;
				minValue=0.000000;
				maxValue=1.000000;
				angle0=0.000000;
				angle1=-1.6;
			};

		};
	};
};

В таблице ниже описаны типы анимации, которые вы можете использовать для класса анимации:

Прикрепленный файл  table2.png   12.87К   7 Количество загрузок:

и Animation property параметры которые могут быть применены к вашей анимации..

Прикрепленный файл  table3.png   29.93К   2 Количество загрузок:

 

Animation source:  является частью вашего основного файла конфигурации для модели config.cfg и связан параметрами с model.cfg

// Надеюсь вы внимательно прочитали описанное выше.. Основными правилами для успешной анимации являются
// 1. Наличие перфикса Land_ перед названием модели (в случае с примером врека грузовой газели) 
// описываемого тут это будет выглядеть, как..
class CfgPatches {
	class VWE_Terrain_structures_road_wreck { //Путь к папке с моделью
		requiredAddons[] = {VWE_Terrain_map_data}; //ссылка на аддон без которого ничего работать не будет
		requiredVersion = 0.1; // требуемая версия мода.
		units[] = { // перечисление всех моделей в конфиге
		'Land_gaz3302_burn', //Любая модель с анимацией должна начинаться с перфикса (приставки Land_
		'Land_gaz3302_rust'
		};
		weapons[] = {};

// 2. Обязательна так же отсылка к базовому классу House - без этого тоже ничего работать нормально не будет.

class CfgVehicles {	


	class HouseBase; // ссылки на базовые классы
	class House : HouseBase {};
	class House_F : House{
		class DestructionEffects; // External class reference
	};
	
	class Land_gaz3302_burn: House_F {
		editorCategory = EdCat_VWE_Structures; //ссылка на название категориии в EDEN
		editorSubcategory = EdSubcat_VWE_Wreck; //ссылка на название подкатегории в EDEN
 		_generalMacro = "Land_gaz3302_burn"; // ссылки для макросов 
		model="\VWE\Terrain\Structures\Road_wreck\wrk_gaz3302.p3d"; //путь до модели
		displayName="Грузовая газель горелая"; // то что выводится на экран
		scope = public; // позволяет показывать модель в редакторе
		// Выделите всю вашу модель в первом визуальном лоде и назовите ваш selection 
                // - "camo" ссылка на него в model.cfg и config.cfg позволить менять 
                // текстуры для ваших моделей. В данном примере для wreck-а грузовой Газели у меня 
                // на одну модель есть две текстуры - ржавая и горелая
                hiddenSelections[] = {"camo"}; 
		hiddenSelectionsTextures[] = {"\VWE\Terrain\textures\auto_prop\qaz_3302_burnt_co.paa"}; // выбор текстуры для selection
		hiddenSelectionsMaterials[] = {"\VWE\Terrain\textures\auto_prop\qaz_3302_burnt.rvmat"};  //выбор материала для selection
		
                class AnimationSources { // наконец-то добрались до анимации :))
			class door_01_source { // в данном случае определяется пользовательский source
				source = "user";
				initPhase = 0; //фаза инициализации
				animPeriod = 1; // время анимации
				sound = "RoadGateDoors"; // звук который проигрывается при открывании двери модели
				soundPosition = "door1_axis"; // звук будет исходить от оси указанная в model.cfg вокруг которой будет открываться дверь
			};
			
			class door_02_source : door_01_source { 
                        // классы можно наследовать поэтому для второй двери и последующих дверей мы можем сослаться 
                        // на первую и указать только различия в классах в данном случае источник звука

				soundPosition = "door2_axis";
			};

			class door_03_source : door_01_source {
				soundPosition = "door3_axis";
			};

			class door_04_source : door_01_source {
				soundPosition = "door4_axis";
			};
			
		};			
        
		class UserActions { // описание действий пользователя
			class OpenDoor_1 {
				displayNameDefault = "<img image='\A3\Ui_f\data\IGUI\Cfg\Actions\open_door_ca.paa' size='2.5' />"; // пиктограмма двери которая выводится на экран - указанная стандартная, можете заменять на свою.
				priority = 0.4; // Приоритет в акшен-меню играть в первую очередь.
				radius = 2; // Расстояние на котором будет срабатывать Action для армы все очень глючно и странно, выбирается исключительно опытным путем
				onlyForPlayer = false; // false - дверь могут открыть и боты и игрок, true - только игрок
				condition = "this animationPhase ""door_01_rot"" >= 0.5"; //описание анимации из model.cfg
				statement = "this animate [""door_01_rot"", 0];"; 
			};

			class CloseDoor_1: OpenDoor_1 { //используем тот же принцип наследования, ссылаемся на похожий объект и меняем только то, что различается
				displayName = "Открыть дверь водителя";
				condition = "this animationPhase ""door_01_rot"" < 0.5";
				statement = "this animate [""door_01_rot"", 1]; hintsilent 'door1 open';"; 
			};

			class OpenDoor_2: OpenDoor_1 {
				position = "opdoor_2";
				displayName = "Закрыть дверь пассажира";
				condition = "this animationPhase ""door_02_rot"" >= 0.5";
				statement = "this animate [""door_02_rot"", 0]";
			};
			
			class CloseDoor_2: OpenDoor_2 {
				displayName = "Открыть дверь пассажира";
				condition = "this animationPhase ""door_02_rot"" < 0.5";
				statement = "this animate [""door_02_rot"", 1]";
			};
			class OpenDoor_3: OpenDoor_1 {
				displayName = "Закрыть створку №1";
				position = "opdoor_3";
				condition = "this animationPhase ""door_03_rot"" >= 0.5";
				statement = "this animate [""door_03_rot"", 0]";
			};
			
			class CloseDoor_3: OpenDoor_3 {
				displayName = "Открыть створку №1";
				condition = "this animationPhase ""door_03_rot"" < 0.5";
				statement = "this animate [""door_03_rot"", 1]";
			};
			class OpenDoor_4: OpenDoor_1 {
				displayName = "Закрыть створку №2";
				position = "opdoor_4";
				condition = "this animationPhase ""door_04_rot"" >= 0.5";
				statement = "this animate [""door_04_rot"", 0]";
			};
			
			class CloseDoor_4: OpenDoor_4 {
				displayName = "Открыть створку №2";
				condition = "this animationPhase ""door_04_rot"" < 0.5";
				statement = "this animate [""door_04_rot"", 1]";
			};
		};
                // активируем Action описанные выше
		actionBegin1 = OpenDoor_1;
		actionEnd1 = OpenDoor_1;
		actionBegin2 = OpenDoor_2;
		actionEnd2 = OpenDoor_2;
		actionBegin3 = OpenDoor_3;
		actionEnd3 = OpenDoor_3;
		actionBegin4 = OpenDoor_4;
		actionEnd4 = OpenDoor_4;

		// numberOfDoors = 4;
	
	};
        // исходя из тех же принципов наследования для второй модели в данном случае ржавой газели используем
        // меняем только параметр camo и название, ведь все остальное уже описано выше
	class Land_gaz3302_rust: Land_gaz3302_burn {
		_generalMacro = "Land_gaz3302_rust";
		displayName="Грузовая газель Ржавая";
		hiddenSelectionsTextures[] = {"\VWE\Terrain\textures\auto_prop\qaz_3302_rust_co.paa"};
		hiddenSelectionsMaterials[] = {"\VWE\Terrain\textures\auto_prop\qaz_3302_rust.rvmat"};
	};
};

Контроллеры -  которые могут быть определены в классе анимации с использованием параметра source  описаны в таблице ниже

Прикрепленный файл  table1.png   732.08К   3 Количество загрузок:

 

Еще примеры:

class AnimationSources
{
	class MachineGun
	{
		source = "reload"; //The controller used for the definition of
                          //this controller
		weapon = MachineGun25W; //In the specific case of using the reload
	};                         //controller, the weapon class name
};
class AnimationSources
{
	//Used by animations called Door1, which don't define the source
	//parameter or by animations that define source Door1;
	class Door1 
	{
		source = "user"; //The controller is defined as a user animation
		animPeriod = 1;  //The animation period used for this controller
		initPhase=1;     //Initial phase when object is created
	};
};
class AnimationSources
{
	class wheel
	{
		source = "::wheel"; //Overriding the existing wheel controller
	};
};

Сообщение отредактировал vitacite: 21 March 2017 - 09:41

  • 4

#5 OFFLINE   vitacite

vitacite

    Ефрейтор

  • Пользователи
  • 98 сообщений
  • Откуда:Novosibirsk

Отправлено 21 March 2017 - 10:30

В продолжение уроков по Object Builder 

Приколы с прозрачностью :)

 

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

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

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

 

 

Первый и наиболее часто встречаемый заключается в наличие белой каймы при взгляде на прозрачную часть модели на фоне другого объекта, в остальном модель выглядит нормально. Лечится это просто. Выделяете вашу прозрачную текстуру переходите в раздел меню faces->movetop этим вы сообщите билдеру, что первым всегда отрисовывается альфа канал.

Прикрепленный файл  primer_04.png   377.97К   5 Количество загрузок:

 

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

Выход оказался в параметре Forcenotalpha = 1 в Ллоде - Geometry, который принудительно убирает любую альфу для текстур без альфы.


Сообщение отредактировал vitacite: 21 March 2017 - 10:30

  • 3

#6 OFFLINE   vitacite

vitacite

    Ефрейтор

  • Пользователи
  • 98 сообщений
  • Откуда:Novosibirsk

Отправлено 21 March 2017 - 14:54

Up! Урок закончен.


Сообщение отредактировал vitacite: 21 March 2017 - 15:02

  • 1

#7 OFFLINE   Romgrafist

Romgrafist

    Рядовой

  • Пользователи
  • 1 сообщений
  • Откуда:Barnaul
  • Отряд:Siberian

Отправлено 04 October 2020 - 05:23

Up! Урок закончен.

А вся эта информация по LOD-ам актуальна для игры Dayz SA?


  • 0




Яндекс.Метрика