Как создать механику резьбы бензопилой — описание главных принципов Статьи редакции
Объекты состоят из вокселей, а распиливание реализовано при помощи алгоритма Marching cubes.
Глава AR/VR-отдела в Shopify Дэниель Бошам опубликовал в Твиттере тред, в котором рассказал о реализации механики резьбы бензопилой в VR. В основе технологии лежит алгоритм Marching cubes, для которого все вычисления производятся при помощи GPU. Бошам рассказал, что техника часто используется в приложениях для скульптинга, например, в Oculus Medium. Вы можете узнать больше о технологии здесь.
Сами объекты состоят из вокселей, а для определения их формы используется карта расстояний (Signed Distance Field). Для бревна Бошам применил цилиндрическую функцию: подробнее можно узнать здесь.
Лезвие пилы — это бокс с цилиндром на конце. Разработчик использовал SDF-вычитание, чтобы придать лезвию нужную форму.
Для адекватной реализации механики игра должна понимать, в какие моменты отпиленный кусок должен отвалиться, а в какие — нет. Для этого Бошам использует технику маркировки подключенных компонентов (Connected-component labeling): она подробно описана здесь. Также вы можете самостоятельно опробовать принцип работы алгоритма, пройдя по этой ссылке.
Разработчик решил, что рассчёт коллизий у отпиленных кусков — слишком ресурсоёмкая задача. Поэтому он нашёл альтернативное решение: каждая отпиленная часть сразу же отлетает за пределы экрана. Бошам сделал это при помощи вершинного шейдера: если вертекс отделяется от бревна, эта часть отлетает параллельно лезвию.
Чтобы не делать эту механику чрезмерно ресурсоёмкой, разработчик ограничил размеры воксельной сетки до 64x64x64. Из-за этого разрез получается слишком широким, но это помогает снизить нагрузку на систему.
Для создания колец на бревне Бошам использовал текстуру с горизонтальными линиями — он наносил их при помощи circular mapping. То же самое он делал с картой нормалей.
Чтобы кольца были неровными, разработчик наложил на них карту шума: она постоянно меняется, поэтому кольца всегда выглядят по-разному.
На бревне всегда остаются следы от пилы. Чтобы добиться этого эффекта, Бошам сделал так, чтобы каждый воксель сохранял информацию о направлении пилы. Разработчик использует нормали вокселей, чтобы проецировать текстуру в нужном направлении.
Чтобы разрезы выглядели объёмными, разработчик использовал ambient occlusion. Для этого он применил эту технику.
Последний шаг — добавление частиц, появляющихся при соприкосновении пилы с деревом.
Вы можете узнать о других способах реализации механики разрезания предметов в нашем материале.
Скорее световой меч вместо пилы т.к режет всей поверхностью и не оказывает физического воздействия на бревно.
Бревно из ствола пальмы. Все так и есть. Или вы считаете, что сливочное масло в вашем холодильнике из чего-то другого выпилено? :)
Поделюсь пожалуй интересным роликом с похожей тематикой.
Правда в нём никаких алгоритмов нету, но всё мне он понравился:
Если понравилось, можешь заценить ещё вот этот:
Тут вообще работает просто БОГ домашнего геймдева :D
Комментарий удален
Комментарий удален
Когда-то давно, наверное, лет пять назад, а может и больше, видел и щупал демку программиста, который запилил механику разрезания деревяшек и их последующего сколачивания друг с другом в Unity. Сложно сказать, насколько "дешевле" его реализация, но тогда она работала у меня на Q6600+8600GT очень бодро и весело даже.
Собственно, если кто-то владеет информацией, где найти последнюю версию этой демки, то буду благодарен.
По воспоминанием тред был на форуме gamedev.ru, но сейчас там найти не могу. Возможно, что с источником ошибаюсь.
Дополнительная информация: помимо разрубания деревяшек, их можно было "призвать" с неба в любом количестве, были бруски, доски, бревна(?), разные инструменты, вроде линейки, можно было выбрать угол распила по трем точкам и... Помню, что в треде было некоторое количество скринов построек тех, кто играл в это.
Буду безмерно благодарен.
Спасибо, Владимир! Отличный материал. Про MGS тоже с удовольствием читал.
Обалденно выглядит. Насколько прожорливо до гпу ресурса ? Хотелось бы еще узнать как в спинтайр деформация грунта реализована.
По прожорливости, могу предположить, что на таком количестве вокселей там по определению ничего тормозить не будет.
Ну мне было достаточно посмотреть на гифку. Физический движок создайте, а костыли и так все умеют создавать.
Впихивают сомнительные лучи (хотя я и был всегда сторонником), а вот физики в играх ничерта нет. Любая презентация физики АМД\НВИДИА 15-летней давности даст сейчас фору любой игре.
Вопрос можно? Заранее скажу, что я тупой и мало что понимаю в кодинге, а читать забугорную вики тяжко.
По поводу CCL. Вот у нас в примере обсчитывается возможность соединения с 4-мя соседними клетками. То есть проверка на соединение происходит 5 раз за клик (куда кликнули, плюс соседние). Если есть соединение, то все клетки с таким же лейблом автоматом меняют свой лэйбл.
Или цикл всё полотно пересчитывает каждый клик? Не слишком ли расточительно?
В вики описано несколько разных реализаций. Какая используется в кодпине и какая в игре автора?
Комментарий удален
Пиздец меня только что накрыло. На автомате открыл сайт и залип на видео в ленте. Не передать словами мое удивление, когда я понял, что это не видео с какого-нибудь гоупро. Дошло примерно на моменте с двумя большими пальцами. Возможно, это так сказываются на мне 5 часов сна.
Упс, я спросил про член, и комментарий удалили. С каким пор DTF такой чувствительный? Тут матеряться на каждом шагу и норм. А я зашёл на реакцию посмотреть.
Ок, спрошу в стиле, актуальном для DTF:
Можно ли этим интрументом выпилить из бревна хуй?
Комментарии