JBeam Introduction/ru

JBeam Introduction/ru

From BeamNG
Language: English  • Deutsch • русский

Introduction-Введение

The nodes, beams and the Triangle between the nodes

Этот учебник предназначен для пользователя, чтобы понять основы файла jbeam. После прочтения необходимо понять и создать простой файл jbeam. Здесь объясняются основы, узлы, балки и треугольники / квадрациклы. Много более сложных вещей объясняется на других Вики-страницах, их также следует прочитать, чтобы полностью понять все возможности.

Например, страница [[[JBeam_Reference]]] показывает намного больше возможностей для каждого раздела, а на странице создание контента есть много ссылок на страницы с более подробным объяснением.

Предпочтительно иметь jbeam открытым рядом с этим учебником, чтобы быть в состоянии видеть части, объясненные примененный. Способ настройки узлов и балок основан на том, как настроены официальные части, может быть много способов настройки jbeam. Официальные файлы автомобиля можно найти по адресу "...\steamapps\common\BeamNG.drive\content\vehicles".

Что такое jbeam? В jbeam в основном это скелет автомобиля. Автомобиль, который вы видите на экране, называется "flexbody" (иногда также называемый "сеткой") и вместе с материалами и текстурами не более чем визуальная часть автомобиля, немного похожая на вашу кожу, является визуальной частью вашего тела. Jbeam-это скелет; он определяет, насколько сильны части, как они двигаются, ведут себя, когда они ломаются и т. д. Это очень простой текстовый файл, который можно открыть с помощью текстового редактора, например блокнот или Notepad++.

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

The Basics-Основы

Во-первых, если вы используете проводник и посмотрите на файлы в папке автомобиля, вы увидите .jbeam, .формат JSON. ,dds .ПК среди других файлов. Мы заинтересованы в этом .файлы jbeam. Для ясности, мы будем называть имена из jbeam файлы jbeamfile имена, и сам jbeams в 'jbeam имена'. Там может быть несколько jbeams внутри одного файла jbeam .

Для программы, чтобы увидеть различные разделы jbeam и jbeam " {"запускает jbeam или раздел,"} " заканчивается один. Это очень важно сделать правильно, иначе автомобиль будет разбит. На первом рисунке показано, как может выглядеть файл jbeam, содержащий два jbeam, обратите внимание на скобки. На втором рисунке показать jbeam файл может выглядеть, содержащий один jbeam, который имеет различные разделы. Начало и конец кронштейн файла jbeam синий цвета, в jbeam начала и окончания кронштейн желтого цвета и разных jbeam участки красного цвета. Опять же, обратите внимание на все скобки. Все разделы, кроме "рельсы" и аппарат разделы, Start и End С '[' и ']' соответственно. Кроме того, каждая строка должна заканчиваться запятой.

  • Jbeams внутри файла, обратите внимание на скобки
  • Разделы внутри jbeam, обратите внимание на скобки

В то время как в игре, можно увидеть jbeam скелет нажатием Ctrl N', чтобы показать узлы, нажав клавиши Ctrl B', чтобы показать балки и нажав сочетание клавиш Ctrl T' на шоу треугольников. Можно нажать CTRL + или CTRL -, чтобы увеличить или уменьшить визуализацию flexbody. Это может быть полезно, чтобы ясно видеть, как построен jbeam.

  • Flexbody вполне видимое
  • Flexbody частично виден
  • Flexbody совершенно невидимый

Для работы jbeam должны присутствовать только раздел информации и slotType. Все остальные разделы являются дополнительными. Таким образом, jbeam может состоять только из показа Flexbody без добавленных узлов и балки, например (в этом случае flexbody должен использовать nodegroup другой детали

Information section-Информационный раздел

"van_body": {
    "information":{
        "authors":"BeamNG",
        "name":"Van Body",
        "value":8000,
    }

Это информационный раздел. В "van_body" имя jbeam, автор дал понять, что 'имя' (имя которого появляется в селекторе части) и значение. Последний представляет собой вымышленную ценность для еще не выпущенной функции покупки и продажи BeamNG.

SlotType and slots section-Раздел SlotType и слоты

More possible values and options can be found in the jbeam reference page

    "slotType" : "main",
    "slots": [
        ["type", "default", "description"]
        ["van_frame","van_frame", "Frame",{"coreSlot":true}],
        ["paint_design","", "Paint Design"],
        ["skin_interior","van_skin_interior", "Interior Color"{"coreSlot":true}],
        ["van_mod", "", "Additional Modification"],
    ],

Раздел slotType и slots связаны друг с другом, хотя slotType является обязательным для присутствия, раздел slots не является.

Slothierarchy некоторых jbeams фургона. Зеленый цвет значение по умолчанию, красный другой вариант.

Каждый автомобиль должен иметь "главный" слот. BeamNG ищет в папке транспортного средства для этого "главного" jbeam и начинает "строительство" транспортного средства оттуда. Как только основной jbeam определен, можно добавить части при помощи слотов. Как объяснено в самой jbeam, slotType следующей части находится в первой части, (необязательно!) имя по умолчанию jbeam определяется во второй части, а последняя часть-это имя, которое появляется в селекторе частей в игре. Дополнительная деталь coreSlot означает, что деталь должна быть выбрана, в селекторе деталей не будет "пустой" опции. Также может быть функция nodeOffset:

        ["van_suspension_R_heavy","van_axle_R_heavy", "Rear Suspension", {"nodeOffset":{"x":0,"y":0.5,"z":0}}],

Который перемещает все jbeams в этом слоте. Например. он используется на фургоне и на пикапе, последний-удлиненная задняя часть рамы, как и задняя часть обычной рамы, но перемещается назад. Кровать точно такая же для обеих рамок (включая узлы приложения!), единственная разница-позиция.

refNodes Section-раздел refNodes

Дополнительные возможные значения и параметры можно найти на справочной странице jbeam

    "refNodes":[
        ["ref:", "back:", "left:", "up:", "leftCorner:", "rightCorner:"]
        ["fr9", "fr10", "fr9l", "fr11", "f7ll", "f7rr"],
    ],
Опорные узлы Серии D

Ссылка узлах разделе "должен присутствовать как минимум один jbeam транспортного средства во все времена", и в том числе когда нет других выбранных деталей, за исключением основных (часто рамы или кузова) jbeam, поэтому желательно иметь его в главном jbeam (или рамка/тела jbeam есть coreslot).

  • Он определяет ось транспортного средства. Таким образом, программа знает, что такое местоположение и вращение транспортного средства.
  • Раздел также используется внешней камерой, те по умолчанию направлены на refnode, расположенный с расстоянием от refnode в направлении узла " назад.
  • Эти узлы запускают контрольную точку при движении через нее.
  • Эти узлы используются A. I.

Camera section-Раздел камеры

Как refNodes разделе camerachase и внешней камерой разделы должны присутствовать по крайней мере один jbeam транспортного средства во все времена, так в том числе когда нет других выбранных деталей, за исключением основных (часто рамы или кузова) jbeam, поэтому желательно иметь его в главном jbeam (или рамка/тела jbeam есть coreslot).

Камеры по умолчанию направлены на refnode, расположенный с расстоянием от refnode в направлении узла " назад.

    "cameraChase":{
        "distance":6.1,
        "distanceMin":2,
        "defaultRotation":{"x":0,"y":-11,"z":0},
        "offset":{"x":0, "y":0.65, "z":1.60},
        "fov":65,
    },
    "cameraExternal":{
        "distance":6.1,
        "distanceMin":2,
        "offset":{"x":0, "y":0.65, "z":0.56},
        "fov":65,
    },

Здесь, в разделе refnodes первый узел-это узел, центр (refnode), второй непосредственно позади и т. д. Так же, как и объяснение в самом разделе. В секциях камеры по умолчанию расстояние от камеры до refnode, минимальное расстояние, вращение и смещение по умолчанию определены.

Ropables

Этот раздел находится в стадии разработки, это для будущей функции;)

Glowmap

    "glowMap":{
            "van_signal_L":{"simpleFunction":{"signal_L":0.49,"lowhighbeam":0.49}, "off":"van_lights", "on":"van_lights_on", "on_intense":"van_lights_on_intense"},
            "van_signal_R":{"simpleFunction":{"signal_R":0.49,"lowhighbeam":0.49}, "off":"van_lights", "on":"van_lights_on", "on_intense":"van_lights_on_intense"},
            "van_taillight_L":{"simpleFunction":{"signal_L":0.49,"brake":0.49,"lowhighbeam":0.49}, "off":"van_lights", "on":"van_lights_on", "on_intense":"van_lights_on_intense"},
            ...
    },

Этот раздел определяет, какие материалы могут "светиться", когда функция включена. Возьмите первую строку примера в разделе glowmap. Сначала определяется материал "van_signal_L", который приводится в действие двумя функциями;" signal_L "(что логически означает, если левый сигнал включен) и" lowhighbeam " функция, которая означает, что она включена, когда lowbeam, но и highbeam активируется. Числа, следующие за функциями, означают, сколько свечения включено. Остальная часть строки определяет, какой материал активируется, когда ни одна из функций не включена, когда активируется только одна и когда активируются обе.

Engine-Двигатель

Этот раздел находится за пределами этого введения, более подробную информацию можно найти на этой вики-странице: Engine. Вкратце в этом разделе определяется, какие break-или enginegroups срабатывают в случае, если там на функции срабатывает. Е. Г. он определяет, какая группа вызывает инвалидность двигателя в случае забора воды .

Flexbody

Здесь определяется, какое Flexbody должно использоваться и к каким узлам оно принадлежит. Flexbody должно быть назначено по крайней мере трем узлам; менее трех у него недостаточно ссылок для ссылки на все оси (x,y,z). Кроме того, узлы должны быть примерно одинакового размера и формы по сравнению с Flexbody. Несколько узлов, близких друг к другу для большого Flexbody, приведут к "ошибке VY", точно так же, как узлы закрываются или на оси. BeamNG нужно достаточно ссылки во всех трех направлениях. Назначение узлов Flexbody, nodegroups используются. Назначение узлов nodegroups объясняется в следующем разделе. Flexbody нуждается по крайней мере в одной nodegroup, но может иметь больше.



    "flexbodies": [
         ["mesh", "[group]:", "nonFlexMaterials"],
         ["van_body", "van_framefront", "van_framecab", "van_rearshocktop", "van_framerear", "van_cab", "van_body", "van_firewall", "van_frontmeat", "van_lowermounts", "van_uppermounts", "van_shocktop"]],

Deformgroup можно использовать для изменения материала при срабатывании определенной deformgroup (определенной в разделе jbeam). В следующем примере "van_chmsl" Flexbody изменения материала из "van_lights" в "van_light_dmg" когда deformgroup "van_chmsl_break" срабатывает. Не забывайте, что до конца этого deformgroup!

         {"deformGroup":"van_chmsl_break", "deformMaterialBase":"van_lights", "deformMaterialDamaged":"van_lights_dmg"}
         ["van_chmsl", ["van_body"]],
         {"deformGroup":""}
     ],

Чтобы иметь возможность перемещать Flexbody, когда nodeoffset используется в предыдущем слоте, нужно добавить строку pos(0,0,0) после Flexbody. Если ввести ненулевое значение, можно также переместить гибкое тело по сравнению с исходным положением в.dae.

         ["pickup_taillightframe_L", ["pickup_framebed","pickup_bed"],[],{"pos":{"x":0.0, "y":0.0, "z":0.0}}],

Props

Секция props очень похожа на секцию Flexbody; за исключением того, что props может двигаться с nodegroup (педали, например) или так называемые прожекторы ("сияющая" часть фары, например). Более точные объяснения выходят за рамки этого введения, они объясняются на вики-странице Props

Как нацелить прожектор можно найти на вики-странице Spotlight Positioning

Nodes-Узлы

Дополнительные возможные значения и параметры можно найти на справочной странице jbeam

образец

    "nodes": [
         ["id", "posX", "posY", "posZ"],
         {"selfCollision":false},
         {"collision":true},
         //front of frame bottom
         {"frictionCoef":0.5},
         {"nodeMaterial":"|NM_METAL"},
         {"nodeWeight":12.5},
         {"group":"van_framefront"},
         ["fr1r", -0.44, -2.03, 0.48],
         ["fr1", 0.0, -2.03, 0.48],
         ["fr1l", 0.44, -2.03, 0.48],
         ["fr2r", -0.44, -1.74, 0.48,{"group":"van_framefront","van_swaybar_F"],"chemEnergy":200,"burnRate":0.3,"flashPoint":200,"specHeat":0.1,"smokePoint":150,"selfIgnitionCoef":false}],
         ["fr2", 0.0, -1.74, 0.48],
         ...
         ],

Ось транспортного средства

В этом разделе поясняется раздел узла. Узел подобен соединению в скелете; балки прикреплены к узлу и могут вращаться вокруг них. Узлы определяют вес транспортного средства. В примере вы увидите, как определить nodegroup; путем добавления одной строки или непосредственно за линией узла. Таким образом, можно назначить несколько групп узлов узлу. С selfcollission можно выбрать, может ли он столкнуться с другими узлами и треугольниками этого автомобиля, с столкновением, если он может столкнуться с другими автомобилями, другими объектами и картой высот. Frictioncoef определяет, сколько трения он имеет, когда он попадает в другой объект, и nodematerial, как он реагирует, когда он попадает что-то еще. Металл может произвести искры например Имена и значения после этого имени группы более сложны и описаны на другой странице wiki. Важно знать, что два узла с включенным selfcollission не могут быть расположены слишком близко друг к другу, в противном случае это может привести к непредвиденной вибрации и нестабильного поведения. Безопасное расстояние составляет не менее трех сантиметров между двумя узлами.


Один узел имеет положение в направлении x, y и Z. В BeamNG, все корабли имеют x в ширине, Y в длине и z в вертикальном направлении. Корабли в BeamNG конструированы с центром сразу между колесами, поэтому колеса на таком же расстоянии y от нулевого положения. Значение меньше нуля означает, что оно находится перед нулевым положением, значение больше единицы означает его после нулевого положения. Очевидно, что нулевое положение x находится в симметричной линии транспортного средства, причем все справа (видно сверху) имеет значение меньше единицы, а все слева-значение больше единицы. Нулевое положение оси z менее очевидно, берется значение положения. Именование узла важно знать, что имя может использоваться только один раз; если другой jbeam после этого jbeam имеет то же имя узла, последний будет использоваться. Он сохраняет серии времени использовать логически имена, в вышеуказанном примере логически узлы для рамки и одно может ясно увидеть которые узлы использованы для которой стороны корабля.


Найти количество и положение узлов. Очевидно, что у узла есть место, где подвеска A-arm прикреплена к корпусу, но где ее надеть, например, капот, нужно решить, насколько подробно автомобиль должен изгибаться или позволять лучам вращаться. BeamNG должен вычислять местоположение узла 2000 раз в секунду, поэтому чем больше узлов, тем больше нагрузка на процессор. Для плоской пластины оруженосца можно было бы иметь узел в каждом углу, как пример, нарисованный на изображении. Хотя объект может сгибаться, он не может иметь вмятин между этими узлами. Добавление узлов между ними добавляет эту способность, но более чем удваивает количество узлов и добавляет в четыре раза больше балок. Таким образом, надо иметь flexbody, что можно согнуть на достаточно места. Если flexbody-это низко-Поли', например, она имеет мало граней, ребер и вершин flexbody не согнется, даже если jbeam скелет-бенд. Как правило, нужно поместить по крайней мере узлы на внешнем крае. Можно использовать программу 3D-рисования, такую как blender, чтобы посмотреть расположение краев flexbody. Узел в правильной nodegroup влияет на вершины Flexbody. Flexbody может только "сгибаться" в вершинах, предпочтительно располагать узел в вершине или вблизи вершины.

  • Разница в плотности узлов. Оставил по умолчанию, правой стороне сгиба
  • Отношение между узлом и числом вершин


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

  • Линейное отношение расстояния между узлом и Flexbody
  • Связь между расположением узла и вершинами при изгибе


Узлы могут визуально в игре нажатием Ctrl Н. Это позволит включить режим визуализации узла и, нажав 'CTRL N' один будет прокручивать корыта все различные режимы, каждый из которых имеет различную информацию. Нажатие его несколько раз один в конечном итоге выключить его. Нажатие клавиши 'SHIFT CTRL N' позволит прокручивать доступные режимы в обратную сторону. Пользовательский интерфейс покажет, В каком визуальном режиме он находится. Также есть второй режим визуализации узлов, который включается нажатием клавиши "CTRL M". Этот режим может показать узлы как простую точку, но также может показать скорость или силы на узлах, что может быть полезно при поиске " неустойчивостей".

  • Видимые узлы
  • Видимые узлы расширенного режима

More info about the different nodes options: JBeam_Reference#nodes

Beams

More possible values and options can be found in the jbeam reference page

    "beams": [
          ["id1:", "id2:"],
          {"beamPrecompression":1, "beamType":"|NORMAL", "beamLongBound":1.0, "beamShortBound":1.0},
          //--RIGHT DOOR--
          {"beamSpring":2226840,"beamDamp":260},
          {"beamDeform":72750,"beamStrength":"FLT_MAX"},
          //door main shape
          ["d1r","d2r"],
          ["d2r","d3r"],
          ...	
          {"deformGroup":"pickup_doorglass_R_break", "deformationTriggerRatio":0.01}
          //brittle glass beams
          {"beamDeform":21000,"beamStrength":14240},
          {"breakGroup":"pickup_doorglass_R"},
          ["d11r","d8r"],
          ...	
          {"breakGroup":""},
          {"deformGroup":""}

          //rigidifier
          {"beamSpring":2226840,"beamDamp":325},
          {"beamDeform":2475,"beamStrength":"FLT_MAX"},
          ["d1r","d14r"],
           ...	
          {"beamPrecompression":1, "beamType":"|NORMAL", "beamLongBound":1.0, "beamShortBound":1.0},
    ]
How a node can move with numbers of beams

Between the nodes one has to put (weightless) beams. Regular beams can only cope with normal forces (push or pull), not with moment or torque, so if one wants to cope with that he should make a structure. It is tempting for some to just add beams in between all nodes. That certainly is possible but will create a structure what will react too uniform; for example beams in a door opening wouldn't be realistic as such an opening is relativly weak and would absorb the energy in a crash by bending rather than passing it on by being too stiff. In BeamNG most structures are separated in regular, crossing, rigid, rigifier and limiter beams. To explain what that means look at the drawn example.

At (A) there's only a simple beam (green). At (B), to simulate a flat plate, cross jbeams (yellow) are added to cope with the shear forces. At (C), rigid beams (blue) are added to make a stiffer structure, without it the nodes will rotate around each other. The rigid beams can cope with only a little moment, just like a flat plate can easily be bend. at (D), a rigifier node with beam (red) are added to stiffen up the structure. In real life, the shape of a part influences the stiffnes of the part like with small flanges. To still be able to cope with forces perpendicular to the structure and keep a simple jbeam structure rigifier beams are used. A limiter beam (orange) is often added to the edges of a structure to prevent stretching.

Different beams to connect nodes
Beam tweaking with different node density

A example of the fullsize hood including the beams is shown in

The beam structure of the hood of the fullsize

Beams can also be used to have some degrees of freedom; consider nodes n1 fixed in space, a node n2 can move around n1 in a sphere if it's only attached with a single beam, if it's attached with two beams it will rotate around the axis and with three beams it will be non-movable. Using the version with two fixed nodes the lower A-arm of a suspension can be made e.g.

Every beam has it's own properties; the main properties that can be changes are the the spring, damp, break and bend values. The spring is how much a beam contracts or extend when a certain force is applied, damp is how quickly the energy is dissipated, break means when it breaks and bend when the beam changes length permanently.

It is often considered to have a as large as possible value for the spring property (otherwise it will look like pudding) but one has to take account that there is a maximum spring and damp value a node can handle. This is related to the nodeweight; a heavy node can cope with a larger spring/damp (or more beams) that a lightweight node. If this spring value is too large, the system becomes instable and can implode or 'eat itself'

If a beam may not break or bend permanently, one can assign a large value to this property, but it is considered cleaner to use "FLT_MAX" instead of a very large value.

Tuning the values of beams in a structure can be a tedious job, but if often important to make things realistic. For example, most real-life structures like a H-beam (but also look at a hood and the area where the a-pillar is attached to the roof on crashed vehicles) will bend in a round-ish shape, but will buckle in a single location. Structures with a uniform second moment of area will for example buckle in the center. On the drawn example; on can lower the values of the rigid beam in the center but also add some extra rigid beams.


Besides 'Normal" beams there are lots of other beams, explained JBeam_Reference#beams. The most common other beams are Bounded and Support beams which react different of the amount they're stretched or contracted. BeamCompression is also often used to change the length of a beam at spawn.


There are also two regularly used groups in the beams section: deformgroup and breakgroups; The deformgroup has a triggerratio and when a beam in this group is contracted or stretched with this amount the deformgroup is triggered. This can change a material, like change the 'glass' material to a 'broken glass' material. The Breakgroup is a group that if a single beam is broken all beams in this group will break. One can set the breakgroupType to 1, which means that a broken beam won't trigger the breakgroup but will break if the breakgroup is triggered. It is VERY important to end all breakgroups and deformgroups in a beam section, otherwise beams in other jbeams can break or trigger the deform or breakgroup when a beam breaks. Beams can made visual in-game by pressing 'CTRL B'. This will enable the beam visualization mode and by pressing 'CTRL B' one will scroll trough all the various modes each having different information. Pressing it multiple times one will eventually turn it off. Pressing 'SHIFT CTRL B' one will scroll trough the available modes the opposite way. The UI will show in which visual mode one is.

  • The Beams visible

Hydros

    "hydros": [
            ["id1:","id2:"],
            {"beamPrecompression":1, "beamType":"|NORMAL", "beamLongBound":1.0, "beamShortBound":1.0},
            {"beamDeform":37500,"beamStrength":71200},
            {"beamSpring":256200,"beamDamp":2080},
            ["tsfbr4","tsfb11",{"inputSource":"parkingbrake","inLimit":0,"outLimit":1.85,"inRate":0.4,"outRate":0.5,"inputFactor":1.0}],
    ],

This section contains beams somewhat similar to regular beams, but in contrast to these regular beams hydro's can extend or retract themselves when a function is enabled. A more detailed explanation is given in the Hydros Wiki, but a simple hydro section contains beams defined like in the beam section, but with an inputsource line attached to it. In the example this hydro can only extend (inLimit is zero, outLimit is non-zero), the in- and outRate defines the speed of which the hydro contracts and/or expand. The inputFactor defines which way the hydro reacts - in case the hydro should only retract this value should be set to -1 besides changing the inLimit and outLimit.


Triangles & quads (Coltri's)

    "triangles": [
            ["id1:","id2:","id3:"],
            //tailgate
            {"group":"pickup_tailgateouter"},
            {"dragCoef":6},
            ["t2rr","t1rr","t2r"],
            ["t1rr","t1r","t2r"],
            ["t2r","t1r","t2"],
            ["t1r","t1","t2"],
            ...
            {"dragCoef":0},
            {"breakGroup":"pickup_tailgatelatch"},
            ["b5ll", "b10ll", "t2ll"],
            ...
            {"breakGroup":""},
            {"dragCoef":0},
    ],
Two coltri's shown on a drawn and in-game version, compare to the jbeam example

Triangles & quads are very similar too each other; they have the same purpose with the only difference that a triangle is set up using three nodes where a quad uses four. (the quad is introduced at a later state to make jbeaming easier) The quad is actually two triangles sharing two same nodes. They're almost always called a 'coltri' (collision triangle), which they will be referred as in this section. The Group option is not really necessary but can be useful in finding errors as the console can report in which group the error is located. Coltri's 'fill' the area between nodes, in a way that nodes from an other vehicle or even selfCollision enables nodes from its own vehicle can't pass this area. It isn't a parts of the force carrying structure like a beam - it only causes a force when a node tries to go trough it. This area has a front and a rear; the front won't allow nodes and coltri's from another vehicle or selfcollision enabled nodes from it's own vehicle to pass. This in contrast with the rear which will let those through. To define a front area; if you look at the nodes which should have a triangle or quad in between them, one should write down the nodes in counter-clockwise order. One can check if the coltri's are set up correctly by pressing 'CTRL T' in-game. A green area means the 'front' of a triangle or quad, a red area means the back of it. Pressing 'CTRL T' again makes them disappear again.

The drag of a coltri with respect of the airflow

By adding a breakgroup to the coltri; one can disable the coltris inside this breakgroup when this breakgroup is triggered. This can be very useful so one can have coltris between separate parts (e.g. between doors and the body, or between the tailgate and the bed) so a parts won't be 'caught' that easily by other nodes, but will be disabled when a part falls of. Be careful to end all breakgroups. A 'dragCoef' can be added to simulate pressure drag across the area to simulate air drag and lift. E.g. wings and spoilers have commonly a large value, parts which normally aren't exposed to the outside have a large value. The last reason is that unfortunately currently if a coltri is situated behind another this second area does have the same drag as the front one. Also, the drag is calculated with the part of the coltri is perpendicular to the airflow. So a coltri which is parallel to the airflow won't cause any drag, in contract wit coltris/quads perpendicular to the airflow. But the both the front and rear of a coltri cause equal drag. Take care that, just like selfcollission enabled nodes, one should have a distance between selfcollission enabled nodes and coltri's of about 3 centimeter. Coltri's of a single vehicle can be placed next to each other or can even cross others.

  • Coltris visible

Rails

The rails section is beyond this introduction; more info can be found in this Wiki page: Slidenodes. In short this section works closely together with the slidenodes section. The rails section defines the rails between two or more nodes on which the slidenodes can move. Be aware that this section starts and ends with a '{' and '}' respectively!


Slidenodes

The slidenodes section, like rails section is beyond this introduction; more info can be found at the same Wike page as the rails section: Slidenodes. This section defines which nodes can slide over which rails.


Testing

Once the jbeams are set up, the final thing is testing and improving the jbeams. When there's an error, the game freezes when loading the vehicle. Errors often occur; it happens to most (maybe all?) of us and most of the times it will be a simple forgotten comma or bracket. Remember to open the console (often with the '~' key but it can be different) and look for error. If the entire screen is filled with red lines, scroll to the beginning of those lines. What's wrong should be explained there. You can try to fix it, but if it seems you can't find the issue you can add '//' before a line disabling it, or even disabling a part of the Flexbody by putting '/*' at the start and '*/' at the end. By disabling one can close in in errors. But remember that:

  • There can't be a /*....*/ section in between another /*...*/ section.
  • Even with disabling sections, every opening bracket still needs a closing bracket.

If a part behaves strangely, visualize the jbeam to see what's happening. To have some beams stand out of the rest, one can 'highlight' a beam by adding a line to the beam:

          ["node1","node2"{"highlight":{"radius":0.005, "col":"#ff0000ff" }}],

This beam will then show up under every beam visualization mode. The first six digits mean the HEX colour (so in this case pure red) and the last two is the alpha channel, so how well it is visible (00 being invisible, ff being full visible)


There's a page dedicated to common errors and problem solving: Vehicle Modding Common Problems


If you're somewhat serious about modding, have read the wiki pages (and checked out the forum if the answer may be already answered there) and still have questions or keep running into problems, there are 'mod support meetings' planned. If it really can't wait, don't hesitate to contact the Staff.