Как создать механику резьбы бензопилой — описание главных принципов Статьи редакции

Объекты состоят из вокселей, а распиливание реализовано при помощи алгоритма Marching cubes.

Глава AR/VR-отдела в Shopify Дэниель Бошам опубликовал в Твиттере тред, в котором рассказал о реализации механики резьбы бензопилой в VR. В основе технологии лежит алгоритм Marching cubes, для которого все вычисления производятся при помощи GPU. Бошам рассказал, что техника часто используется в приложениях для скульптинга, например, в Oculus Medium. Вы можете узнать больше о технологии здесь.

Сами объекты состоят из вокселей, а для определения их формы используется карта расстояний (Signed Distance Field). Для бревна Бошам применил цилиндрическую функцию: подробнее можно узнать здесь.

Лезвие пилы — это бокс с цилиндром на конце. Разработчик использовал SDF-вычитание, чтобы придать лезвию нужную форму.

Для адекватной реализации механики игра должна понимать, в какие моменты отпиленный кусок должен отвалиться, а в какие — нет. Для этого Бошам использует технику маркировки подключенных компонентов (Connected-component labeling): она подробно описана здесь. Также вы можете самостоятельно опробовать принцип работы алгоритма, пройдя по этой ссылке.

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

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

Демонстрация поведения отпиленной части

Чтобы не делать эту механику чрезмерно ресурсоёмкой, разработчик ограничил размеры воксельной сетки до 64x64x64. Из-за этого разрез получается слишком широким, но это помогает снизить нагрузку на систему.

Для создания колец на бревне Бошам использовал текстуру с горизонтальными линиями — он наносил их при помощи circular mapping. То же самое он делал с картой нормалей.

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

На боковом разрезе можно наглядно увидеть, как шум делает кольца более реалистичными
Кора — это тоже текстура, наложенная на бревно при помощи circular mapping

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

Чтобы разрезы выглядели объёмными, разработчик использовал ambient occlusion. Для этого он применил эту технику.

Последний шаг — добавление частиц, появляющихся при соприкосновении пилы с деревом.

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

{ "author_name": "Владимир Семыкин", "author_type": "editor", "tags": ["\u043e\u043f\u044b\u0442","\u0430\u0440\u0442"], "comments": 37, "likes": 360, "favorites": 239, "is_advertisement": false, "subsite_label": "gamedev", "id": 274960, "is_wide": true, "is_ugc": false, "date": "Fri, 04 Dec 2020 16:34:31 +0300", "is_special": false }
0
37 комментариев
Популярные
По порядку
Написать комментарий...
112

у всех связанных клеток

клеток связанных внутри

Ответить
30

Скованные одной клеткой

Ответить
0

оДНОЙ клеткой скованные

Ответить
2

связанных

Ответить
1

клеток в едином стебле

Ответить
1

Да да , бледный огонь что то там ... Набоков

Ответить

Интеллектуальный Валера

51

только у него явно не бревно получилось, а масло сливочное 

Ответить
28

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

Ответить
6

Бревно из ствола пальмы. Все так и есть. Или вы считаете, что сливочное масло в вашем холодильнике из чего-то другого выпилено? :)

Ответить
26

так сливочное масло из слив делают...

Ответить
3

Вот, бля,меня всю жисть найобывали.

Ответить
1

частиц не хватает

Ответить
13

Поделюсь пожалуй интересным роликом с похожей тематикой.
Правда в нём никаких алгоритмов нету, но всё мне он понравился:

Ответить
2

Очень интересный видос, спасибо!

Ответить
0

Да, спасибо, в тему.

Ответить
2

Если понравилось, можешь заценить ещё вот этот:
Тут вообще работает просто БОГ домашнего геймдева :D

Ответить

Комментарий удален

Комментарий удален

5

Когда-то давно, наверное, лет пять назад, а может и больше, видел и щупал демку программиста, который запилил механику разрезания деревяшек и их последующего сколачивания друг с другом в Unity. Сложно сказать, насколько "дешевле" его реализация, но тогда она работала у меня на Q6600+8600GT очень бодро и весело даже.
Собственно, если кто-то владеет информацией, где найти последнюю версию этой демки, то буду благодарен.
По воспоминанием тред был на форуме gamedev.ru, но сейчас там найти не могу. Возможно, что с источником ошибаюсь.
Дополнительная информация: помимо разрубания деревяшек, их можно было "призвать" с неба в любом количестве, были бруски, доски, бревна(?), разные инструменты, вроде линейки, можно было выбрать угол распила по трем точкам и... Помню, что в треде было некоторое количество скринов построек тех, кто играл в это.
Буду безмерно благодарен.

Ответить

Мужской Паша

5

Вальщик видимо с похмелья, судя по тому как руки трясутся.

Ответить
1

Тоже охуел, как пилу колдоёбит.

Ответить
0

Он просто удаленно работает с инпут лагом, да и дерево довольно жесткое, поэтому от сопротивления с материалом, руки дрожат

Ответить
2

Спасибо, Владимир! Отличный материал. Про MGS тоже с удовольствием читал. 

Ответить
1

Обалденно выглядит. Насколько прожорливо до гпу ресурса ? Хотелось бы еще узнать как в спинтайр деформация грунта реализована.

Ответить
0

А там не тесселяцией? Полигональная геометрия по-другому работает по сравнению с вокселями

Ответить
0

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

Ответить
1

Ну мне было достаточно посмотреть на гифку. Физический движок создайте, а костыли и так все умеют создавать. 
Впихивают сомнительные лучи (хотя я и был всегда сторонником), а вот физики в играх ничерта нет. Любая презентация физики АМД\НВИДИА 15-летней давности даст сейчас фору любой игре.

Ответить
0

ФИЗИКУ ЗАПИЛИ ! 

Ответить
0

Вопрос можно? Заранее скажу, что я тупой и мало что понимаю в кодинге, а читать забугорную вики тяжко.
По поводу CCL. Вот у нас в примере обсчитывается возможность соединения с 4-мя соседними клетками. То есть проверка на соединение происходит 5 раз за клик (куда кликнули, плюс соседние). Если есть соединение, то все клетки с таким же лейблом автоматом меняют свой лэйбл.
Или цикл всё полотно пересчитывает каждый клик? Не слишком ли расточительно?
В вики описано несколько разных реализаций. Какая используется в кодпине и какая в игре автора?

Ответить

Комментарий удален

Средневековый самолет

0

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

Ответить
0

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

Ответить
0

Осталось совместить с новым DualSense и будет огонь

Ответить
0

Ну, не знаю как остальным, а мне конечный результат нравится.

Ответить
–3

Упс, я спросил про член, и комментарий удалили. С каким пор DTF такой чувствительный? Тут матеряться на каждом шагу и норм. А я зашёл на реакцию посмотреть.

Ок, спрошу в стиле, актуальном для DTF:

Можно ли этим интрументом выпилить из бревна хуй?

Ответить

Комментарии

null