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

Объекты состоят из вокселей, а распиливание реализовано при помощи алгоритма 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. Для этого он применил эту технику.

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

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

365365
37 комментариев

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

113
Ответить

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

30
Ответить

связанных

2
Ответить

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

1
Ответить

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

1
Ответить

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

51
Ответить

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

28
Ответить