Долгий разговор о коллизиях и взаимодействии с поверхностям Пытливые умы, конечно, помнят, что частицы, от упоминания о которых кому-то уже невмоготу, могут довольно весело сталкиваться с поверхностями с помощью операции Make Collide. Исследуем аналогичную возможность для системы волос.
Создайте полигональный тор: Create=>Polygon Primitives=>Torus.
Задайте для него: Radius=3. Чтобы задать столкновение кривых с поверхностью тора, выберите объект hairSysteml, затем pTorus! и выполните операцию Hair=>Make Collide.
Запустите анимацию и дайте волю эмоциям. Кривые проходят сквозь поверхность, лишь слегка покачнувшись при первом соприкосновении. В чем дело?
Тут самое время вспомнить динамику мягких тел, а также опять обратить ваше внимание на фаворитов нашего хит-парада - частицы. Если кто-то из вас пытался делать тряпки из мягких тел и сталкивать их с чем-нибудь (или пытался хотя бы выполнить упражнение из соответствующей главы этой книги), вы помните, что мягкие тела сталкиваются с объектами при помощи своих частиц, не обязательно лежащих на поверхности мягкого тела. Тоже самое относится к динамическим кривым. Они взаимодействуют с поверхностями своими контрольными точками, а никак не сегментами, соединяющими эти точки. Поэтому при настраивании столкновений кривых с поверхностями всегда следует отчетливо представлять себе, из какого количества точек состоит каждая кривая и достаточно ли этого количества, чтобы описать как столкновение, так и саму форму кривой.
Самый простой способ оценить количество точек на кривой - это, естественно, метод пристального взгляда.
Выберите любую кривую и включите постоянное отображение ее контрольных вершин: Display=>NURBS Components=>CV.
Как следует из появившегося количества вершин, кривые у нас довольно разреженные. Однако не спешите хвататься за сердце и проводить операцию Rebuild Curve. Для решения проблемы столкновений есть другие методы.
Предположим, что количество точек (и, соответственно, сегментов), нас вполне устраивает с точки зрения движения тяжелых веревок. В этом случае надо повнимательнее разобраться с параметрами столкновения кривых с поверхностью.
В отличие от частиц (редкий случай), эти параметры определяются атрибутами объекта hairSystem, а не атрибутами поверхности.
Выберите hairSysteml и разыщите в Attribute Editor раздел Collisions, отвечающий за столкновения.
По умолчанию просчет столкновений включен (Collide=On). А вот следующий атрибут (Collide Over Sample) отвечает за пространственную точность отслеживания столкновений. Если установить его в единицу, то каждый сегмент кривой (участок между двумя точками) будет разбит пополам и полученные дополнительные точки будут использованы для просчета коллизий. Двойка соответствует разбиению на три подсегмента. Дополнительные точки будут использованы только для отслеживания столкновений, а вся остальная динамика будет рассчитана для основных контрольных вершин.
Примечание. Оказывается, только значения 1 или 2 просто разбивают отрезки между контрольными вершинами на дополнительные подсегменты. Пытливые умы, попробовавшие радостно установить в Collide Over Sample большие значения, наверняка будут разочарованы полученным результатом. Дело в том, что если задать для этого атрибута значение больше двух, вместо дополнительных подразбиений, вокруг каждой контрольной вершины будет возникать кольцо из заданного количества точек-сэмплов. То есть в этом случае используется принципиально другой метод увеличения точности просчета столкновений. Таким образом, если у вас не хватает контрольных вершин для столкновений с узкими или острыми объектами, используйте для Collide Over Sample значения 1 или 2. Если же вы хотите более точно отслеживать коллизии для широких пучков или толстых веревок, задавайте значения 3 и выше. Как раз про пучки и пойдет речь дальше.