Как сделать коллизию объекта

Как сделать коллизию объекта

Категории

3ds Max создание коллизий вручную

При создании игр (например на движке Unreal Engine) для игровой модели необходимо создавать коллизии, конечно можно сделать коллизию автоматически при импорте в движок, но это не всегда подходит и не все программы имеют такую возможность. Поэтому в этой статье мы рассмотрим как создать коллизию вручную в программе 3ds Max.

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

Имея некую 3д модель можно использовать на нее три вида коллизии это бокс, сфера и усложненная коллизия. Теперь по порядку:

Допустим у нас есть следующая 3Д модель:

Как сделать коллизию объекта

Как сделать коллизию объекта

Теперь меняем название объекта так чтобы вначале стояло UBX_ а далее уже имя объекта и его номер т.е. UBX_имя_объекта_1 в моем случае будет: UBX_collision_01

Как сделать коллизию объекта

Как сделать коллизию объекта

Как сделать коллизию объекта

Моя коллизия будет иметь имя UCX_collision_03 и выглядеть вот так:

Как сделать коллизию объекта

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

Источник

Как сделать коллизию объекта

Привет. В этом уроке расскажу, как быстро и без всяких усилий создать коллизию объекта. Все действия будут проводиться в 3ds Max 2018. В ранних версиях все аналогично.

Для создания коллизии понадобятся Камс скрипты (они закреплены к теме).

Как сделать коллизию объектаКак сделать коллизию объекта

Как сделать коллизию объекта

Как сделать коллизию объекта

Как сделать коллизию объекта

Как сделать коллизию объекта Как сделать коллизию объектаКак сделать коллизию объекта

Как сделать коллизию объектаКак сделать коллизию объектаКак сделать коллизию объекта

Коллизия объекта готова

P.S. Пока нету раздела моделирования, повесит здесь

Прикрепленные файлы

Как сделать коллизию объекта

Hi. This tutorial will tell you how to quickly and effortlessly create the collision object. All actions will be carried out in 3ds Max 2018. In earlier versions, all the same.

To create a collision you will need a Kams scripts (they are attached to the subject).

1. Select the desired file. You can import the usual way, in 3ds format, if the object was creating in a different editor, for example, in Blender, or import a dff file using Kams scripts. In the tab «Utilities» on the «DFF IO» button. Select the «Import DFF».

2. Select the object and convert in «Editable Poly»

4. Again convert the object in «Editable Poly»

5. Go to the tab «Hierarchy», select «Affect Pivot Only» and «Center To Object».

6. Go to the tab «Create» to the button «Select and Move» and move the object to the center. Equate to zero all the values in the all fields on the need position.

7. Go to the tab «Utilities» and select «Collision IO». Click «Collision Mesh» and click on our object (the button shows the name of the object). Next in the box above the button «Export» enter the name. It should be identical to the name of the dff file. Export and specify the same name.

Источник

Коллайдеры (Colliders)

Collider components define the shape of an object for the purposes of physical collisions. A collider, which is invisible, need not be the exact same shape as the object’s mesh and in fact, a rough approximation is often more efficient and indistinguishable in gameplay.

The simplest (and least processor-intensive) colliders are the so-called primitive collider types. In 3D, these are the Box Collider, Sphere Collider and Capsule Collider. In 2D, you can use the Box Collider 2D and Circle Collider 2D. Any number of these can be added to a single object to create compound colliders.

With careful positioning and sizing, compound colliders can often approximate the shape of an object quite well while keeping a low processor overhead. Further flexibility can be gained by having additional colliders on child objects (eg, boxes can be rotated relative to the local axes of the parent object). When creating a compound collider like this, there should only be one Rigidbody component, placed on the root object in the hierarchy.

There are some cases, however, where even compound colliders are not accurate enough. In 3D, you can use Mesh Colliders to match the shape of the object’s mesh exactly. In 2D, the Polygon Collider 2D will generally not match the shape of the sprite graphic perfectly but you can refine the shape to any level of detail you like. These colliders are much more processor-intensive than primitive types, however, so use them sparingly to maintain good performance. Also, a mesh collider will normally be unable to collide with another mesh collider (ie, nothing will happen when they make contact). You can get around this in some cases by marking the mesh collider as Convex in the inspector. This will generate the collider shape as a “convex hull” which is like the original mesh but with any undercuts filled in. The benefit of this is that a convex mesh collider can collide with other mesh colliders so you may be able to use this feature when you have a moving character with a suitable shape. However, a good general rule is to use mesh colliders for scene geometry and approximate the shape of moving objects using compound primitive colliders.

Colliders can be added to an object without a Rigidbody component to create floors, walls and other motionless elements of a scene. These are referred to as static colliders. In general, you should not reposition static colliders by changing the Transform position since this will impact heavily on the performance of the physics engine. Colliders on an object that does have a Rigidbody are known as dynamic colliders. Static colliders can interact with dynamic colliders but since they don’t have a Rigidbody, they will not move in response to collisions.

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

Физические материалы (Physics Materials)

When colliders interact, their surfaces need to simulate the properties of the material they are supposed to represent. For example, a sheet of ice will be slippery while a rubber ball will offer a lot of friction and be very bouncy. Although the shape of colliders is not deformed during collisions, their friction and bounce can be configured using Physics Materials. Getting the parameters just right can involve a bit of trial and error but an ice material, for example will have zero (or very low) friction and a rubber material with have high friction and near-perfect bounciness. See the reference pages for Physic Material and Physics Material 2D for further details on the available parameters. Note that for historical reasons, the 3D asset is actually called Physic Material (without the S) but the 2D equivalent is called Physics Material 2D (with the S).

Триггеры (Triggers)

The scripting system can detect when collisions occur and initiate actions using the OnCollisionEnter function. However, you can also use the physics engine simply to detect when one collider enters the space of another without creating a collision. A collider configured as a Trigger (using the Is Trigger property) does not behave as a solid object and will simply allow other colliders to pass through. When a collider enters its space, a trigger will call the OnTriggerEnter function on the trigger object’s scripts.

Функции обратного вызова при коллизии

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

У обычных не триггерных коллизий есть ещё дополнительная деталь: как минимум один из вовлечённых в коллизию объектов должен обладать не кинематическим Rigidbody (т.е. IsKinematic должен быть выключен). Если оба объекта являются кинематическими, то тогда не будут вызываться функции, вроде OnCollisionEnter и т.д. С триггерными столкновениями это условие не применяется, так что и кинематические и не кинематические Rigidbody будут незамедлительно вызывать OnTriggerEnter при пересечении триггерного коллайдера.

Взаимодействия коллайдеров

Коллайдеры взаимодействуют друг с другом по разному, в зависимости от того, как настроены их компоненты Rigidbody. Тремя важными конфигурациями являются статичный коллайдер (Static Collider) (т.е. компонент Rigidbody отсутствует вообще), Rigidbody коллайдер (Rigidbody Collider), и кинематический Rigidbody коллайдер (Kinematic Rigidbody Collider).

Статичный коллайдер (Static Collider)

Это игровой объект, у которого есть коллайдер, но нету Rigidbody. Статичные коллайдеры используются для геометрии уровней, которая всегда стоит на месте и совсем не двигается. Встречные Rigidbody объекты будут врезаться в статичный коллайдер, но его не сдвинут.

В физический движок заложено предположение, что статичные коллайдеры никогда не двигаются или меняются, и, на основе этого предположения, движок делает полезные оптимизации. Следовательно, статичные коллайдеры нельзя включать/выключать, двигать или масштабировать во время игрового процесса. Если вы измените статичный коллайдер, то в результате физическим движком будет вызван дополнительный внутренний перерасчёт, который будет сопровождаться большим падением производительности. Хуже того, изменения иногда могут оставить коллайдер в неопределённом состоянии, в результате чего будут производиться ошибочные физические расчёты. Например, рейкаст к изменённому статичному коллайдеру может не обнаружить коллайдера или обнаружить его в случайном месте в пространстве. Кроме того Rigidbody объекты, в которых врежется статичный коллайдер, не обязательно будут “разбужены”, и статичный коллайдер не применит никакого трения. По этим причинам, следует изменять только коллайдеры с Rigidbody. Если вы хотите, чтобы на коллайдер объекта не влияли встречные Rigidbody, но чтобы его можно было двигать при помощи скрипта, то вам следует прикрепить кинематический Rigidbody компонент к нему, нежели вообще не добавлять Rigidbody.

Rigidbody коллайдер (Rigidbody Collider)

Это игровой объект, к которому прикреплён коллайдер и нормальный не кинематический Rigidbody. Rigidbody коллайдеры полностью симулируются физическим движком и могут реагировать на коллизии и силы, приложенные из скрипта. Они могут сталкиваться с другими объектами (включая статичные коллайдеры) и являются самой распространённой конфигурацией коллайдера в играх, которые используют физику.

Кинематические Rigidbody коллайдеры (Kinematic Rigidbody Collider)

Это игровой объект, к которому прикреплён коллайдер и кинематический Rigidbody (т.е. свойство IsKinematic компонента Rigidbody включено). Изменяя компонент Transform, вы можете перемещать объект с кинематическим Rigidbody, но он не будет реагировать на коллизии и приложенные силы так же, как и не кинематические Rigidbody. Кинематические Rigidbody должны использоваться для коллайдеров, которые могут двигаться или периодически выключаться/включаться, иначе они будут вести себя как статичные коллайдеры. Примером этого является скользящая дверь, которая обычно является недвижимым физическим препятствием, но по надобности может открываться. В отличие от статичного коллайдера, движущийся кинематический Rigidbody будет применять трение к другим объектам и, в случае контакта, будет “будить” другие Rigidbody.

Даже когда они неподвижны, кинематические Rigidbody коллайдеры ведут себя иначе, в отличие от статичных коллайдеров. Например, если коллайдер настроен как триггер, то вам также понадобится добавить к нему Rigidbody, чтобы можно было в вашем скрипте принимать события триггера. Если вы не хотите, чтобы триггер падал под действием силы гравитации или подвергался влиянию физики, то тогда вы можете включить свойство IsKinematic.

A Rigidbody component can be switched between normal and kinematic behavior at any time using the IsKinematic property.

A common example of this is the “ragdoll” effect where a character normally moves under animation but is thrown physically by an explosion or a heavy collision. The character’s limbs can each be given their own Rigidbody component with IsKinematic enabled by default. The limbs will move normallly by animation until IsKinematic is switched off for all of them and they immediately behave as physics objects. At this point, a collision or explosion force will send the character flying with its limbs thrown in a convincing way.

Матрица действий коллизии

Источник

Коллизии (Collision) статического объекта для Skyrim

Создаем коллизии для статиков в Skyrim LE

Для начала следует обозначить пару моментов. Во первых, у вас в сцене должен быть 1 объект и соответственно 1 NiTriShape в NifSkope. Для объектов с большим количеством NiTriShape, данный способ не подходит. Во вторых, не советую начинать с импорта модели через Obj формат, как это показано в оригинале. В этом случае, у вас могут сбиться параметры сглаживания и выйдет не совсем то, чего вы ожидали.

Итак, начнем. Запускаем сцену с вашей моделью в 3Ds Max. У меня пусть будет стол. В начале следует его поставить в начало осей координат. для этого выбираем инструмент Move и значение осей X и Y сбрасываем на 0. Ось Z необходимо отредактировать самим, иначе начало осей координат будет находиться
посередине модели.

Как сделать коллизию объекта

После этого можем экспортировать модель в Nif формат. Настойки экспорта:

Как сделать коллизию объекта

Как сделать коллизию объекта

Как сделать коллизию объекта

Как сделать коллизию объекта

Далее выделите NiTriShape, промотайте Block Detalis в самый низ и найдите вкладку Property или BSProperty. Разверните её и вместо None в первой вкладке напишите номер дефолтной ветки BSLightingShaderProperty, которая была сразу в файле.

Как сделать коллизию объекта

Как сделать коллизию объекта

Как сделать коллизию объекта

Как сделать коллизию объекта

Как сделать коллизию объекта
Удалите из вкладки BSFadeNode bhkCollisionObject

Как сделать коллизию объекта

Далее кликните ПКМ по модели, выберите flags, в выпадающем меню выберите Continue и нажмите Accept.

Как сделать коллизию объекта

Сохраните файл. Во вкладке bhkCollisionObject будет bhkConvexVerticlesShape. Это и есть ваш коллизион. Далее зайдите в конструктор, создайте там новый объект, поместите в игру и зайдите проверить, работает ли коллизия.

Как сделать коллизию объекта

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

Источник

UEngine.Ru

Русскоязычное сообщество Unreal Engine 4

Как сделать коллизию объекта

Принципы построения коллизий

Как сделать коллизию объекта

Как сделать коллизию объекта

Как сделать коллизию объекта

Есть пару вопросов:

1. Можно-ли в Unreal, как в Unity, использовать объект в качестве коллизии?
Например: есть у меня простое помещение, сделанное одним объектом, с проемами и окнами.
Или все обязательно делать отдельными боксами и на каждый по коллизии? (подозреваю, что нет)

2. Можно-ли в качестве коллизии использовать любой объект, поставив его в любом месте
и сделав его невидимым?
Например: ставлю вертикально Plane, назначаю ему использование в качестве коллизии,
и игрок упирается в него как в невидимую стену? (подозреваю что нет)

3. До кучи. Обязательно-ли объекты (стены например) делать замкнутыми (box),
или можно односторонними (plane)?

Как сделать коллизию объекта

Как сделать коллизию объекта

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

Можно. Но опять же, это не идеальный вариант.

Не обязательно. Но в таком случае с одной стороны будет просвечивать. Хотя можно сделать двусторонний материал.
_________________
Просьба, не писать вопросы по движку в ЛС. Я не единственный, кто знает UE4, и поэтому пишите на форум или в группу.

Как сделать коллизию объекта

Как сделать коллизию объекта

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

Можно. Но опять же, это не идеальный вариант.

Не обязательно. Но в таком случае с одной стороны будет просвечивать. Хотя можно сделать двусторонний материал.

Смотрю уроки, в одном из них импортируется дом из макса,
как раз таки стены открытой геометрией. На стенах есть коллизия, но как делалась не понятно
Есть урок по коллизии, но там элементарный объект, и суть не раскрывает, более наглядным
был-бы случай с домом (стенами). Делал коллизию в максе, импортил как UCX_***, но UE коллизию попроще берет,
а посложнее уже нет.. Не пойму что делаю не так.

Как сделать коллизию объекта

Как сделать коллизию объекта

Как сделать коллизию объекта

Как сделать коллизию объекта

Как сделать коллизию объекта

Как сделать коллизию объекта

Скрин из урока: Как сделать коллизию объекта

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

Как сделать коллизию объекта

Как сделать коллизию объекта

Стены сделаны примитивами из Box’ов, принцип такой же, что и в уроке по созданию колизии в 3д максе, только этих боксов много.
_________________
Просьба, не писать вопросы по движку в ЛС. Я не единственный, кто знает UE4, и поэтому пишите на форум или в группу.

Как сделать коллизию объекта

Как сделать коллизию объекта

Как сделать коллизию объекта

Как сделать коллизию объекта

Начну отвечать на свои вопросы сам, вдруг кому интересно.
Я так понял, что местные «гуру» или сами не знают, или западло снизойти и ответить на пару тупых вопросов 🙂

1. Можно-ли в Unreal, как в Unity, использовать объект в качестве коллизии?

Да, можно. Для этого не нужно городить лишнюю геометрию для коллизий,
а просто в «Static Mesh Editor» выставить значение «use complex collision as simple»
Как сделать коллизию объекта
Если там-же выставить double sided geometry, то коллизия будет работать с двух сторон,
физические объекты не проскакивают, но отображаться геометрия с обратной стороны не будет
(возможно решается двухсторонним материалом).
Думаю этот способ более логичен и менее ресурсоемок по всем параметрам, если геометрия простая.

Как сделать коллизию объекта

Как сделать коллизию объекта

Спасибо. Я тоже задавался таким же вопросом.

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *