Коллизия колеса с поверхностью земли — Houdini

Вступление и дискламер

Всем привет. Меня зовут Евгений, в данный момент я нахожусь на позиции CG Artist-а в студии PLAYD. С недавних пор я выбрал в качестве основного инструмента в своем пайплайне Гудини. И решил завести тут небольшой блог с описанием решений некоторых повседневных задач из своих проектов. Во многом для себя, но может и другие найдут это интересным.

Опыта в подобных туторах у меня немного. Так что…

Задача:

Осуществить коллизию колеса с поверхностью земли.

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

Решение (алгоритм тут получился не сложный):
1. Высчитать точку в центре колеса.
2. Посчитать дистанцию от этой точки до поверхности.
3. Сместить точку на эту величину вниз.
4. Скорректировать положение точки вверх на величину радиуса колеса.

Как это выглядит в Гудини:

Имеем меш колеса и неровную поверхность

Коллизия колеса с поверхностью земли

Пакуем колесо в пакед и тем самым получаем точку в середине.

Чтобы посчитать дистанцию до поверхности на точку сперва нужно добавить нормаль направленную на поверхность. Сделать это можно нодой Point.

КОЛЛИЗИЯ КОЛЕСА С ПОВЕРХНОСТЬЮ ЗЕМЛИТеперь можно посчитать дистанцию до земли нодой Ray. По большому счету нода Ray сразу и сместит точку на поверхность. Это нам как раз и надо. Но если вдруг нет, или нам перед смещением нужно сделать какие то действия то можно отключить галку с Transform Points оставив только на Point Intersection Distance.

 

Ну теперь нам надо только поднять колесо на высоту его радиуса. Используем функцию Bounding Box по Y (http://www.sidefx.com/docs/houdini15.0/ref/expression_cookbook)

КОЛЛИЗИЯ КОЛЕСА С ПОВЕРХНОСТЬЮ ЗЕМЛИ

Перемещать колесо или землю под ним естественно нужно перед заходом в ноду Ray.

На этом пока все, тема для меня интересная так что с радостью подискутирую в комментариях.