Как японский онлайн-магазин одежды решил проблему проваливающихся сквозь пол 3D-моделей

04 Aug, 2026
4,390
🔱 324
👥 32

Знаете этот классический баг в играх или симуляциях, когда одежда персонажа вдруг проваливается сквозь его тело или застревает в текстурах пола? В индустрии это называют «клиппингом», и бороться с ним — та еще головная боль. Казалось бы, причем тут крупнейший в Японии ритейлер модной одежды ZOZO? Оказывается, им нужно было настолько точно примерять виртуальную одежду на покупателей, что существующие движки их не устроили. Так появился ppf-contact-solver.

Это физический движок с открытым исходным кодом, который специализируется на расчете контактов. Он работает с оболочками (ткань), твердыми телами и стержнями (канаты, волосы). Главная фишка проекта — полная гарантия отсутствия пересечений. Если вы запустили симуляцию, объекты никогда не пройдут друг сквозь друга, даже если на них действуют экстремальные нагрузки.

Почему это не просто очередной физический движок

Обычно разработчики симуляций ищут компромисс между скоростью и точностью. Если делать быстро, то возникают ошибки округления, и треугольники меша начинают «слипаться» или проваливаться. Команда из ZOZO пошла другим путем. Они внедрили метод конечных элементов (FEM) и символьные якобианы сил, перенеся все вычисления на GPU.

Проект выделяется несколькими вещами:

  • Масштабируемость. В примерах есть сцена с 180 миллионами контактов. Это не опечатка — движок переваривает огромные объемы данных благодаря параллелизму на CUDA.
  • Работа в одинарной точности (FP32). Разработчики умудрились добиться стабильности без использования тяжелых вычислений Double Precision, что экономит видеопамять и время.
  • Отсутствие «резиновости». Ткань не растягивается бесконечно, вы можете задать жесткий лимит деформации (например, не более 1%).

solver_logo

Реклама

Как это пощупать без боли

Часто научные проекты на GitHub требуют неделю на сборку зависимостей. Здесь ситуация приятнее. Есть три способа старта:

  1. Аддон для Blender. Это, пожалуй, самый крутой сценарий. Вы можете работать в Blender даже на macOS или слабом ноутбуке. Аддон отправляет сцену на удаленный сервер с мощной видеокартой NVIDIA, обсчитывает физику и возвращает результат обратно в ваш интерфейс.
  2. Docker-контейнер. Команда подготовила образ весом около 1 ГБ. Развернули, пробросили порты и получили готовый JupyterLab в браузере.
  3. Windows-экзешник. Для тех, кто не хочет возиться с Docker, есть портативная версия. Скачали архив, запустили start.bat — и у вас локально поднялся сервер симуляции.

Пишем симуляцию на Python

Интерфейс библиотеки построен на цепочках методов (method chaining), что напоминает современный JavaScript. Вот как выглядит создание простой сцены, где ткань падает на сферу:

from frontend import App

app = App.create("drape_test")

# Создаем меш ткани 128x128
V, F = app.mesh.square(res=128)
obj = app.asset.add.tri("sheet", V, F)

# Добавляем сферу-коллайдер
V_s, F_s = app.mesh.icosphere(r=0.5)
sphere = app.asset.add.tri("sphere", V_s, F_s)

scene = app.scene.create()
sheet_instance = scene.add("sheet").at(0, 0.5, 0)
# Закрепляем углы
corners = sheet_instance.grab([1, 0, 1]) + sheet_instance.grab([-1, 0, 1])
sheet_instance.pin(corners)

# Запускаем симуляцию
session = app.session.create(scene.build())
session.start().preview()

Интересно, что разработчики добавили поддержку MCP (Model Context Protocol). Это значит, что вы можете подключить Claude или другую LLM, чтобы управлять симуляцией голосом или текстом: «Сделай так, чтобы эта скатерть была шелковой и медленно сползала со стола».

Где это пригодится

Помимо очевидной виртуальной примерки одежды, проект интересен для:

  • CGI и анимации. Когда нужно быстро и без багов «уронить» сложный объект на другой.
  • Робототехники. Симуляция захвата мягких объектов манипулятором.
  • Геймдева (для оффлайн-генерации ассетов). Движок не работает в реальном времени, но отлично подходит для запекания анимаций.

Blender add-on overview

Что в итоге

Проект ppf-contact-solver выглядит как очень крепкий инструмент для тех, кому важна физическая корректность. Лицензия Apache 2.0 позволяет использовать его в коммерческих продуктах без лишних вопросов.

Из минусов — вам обязательно нужна видеокарта NVIDIA (CUDA 12.8+). Если ее нет, придется арендовать инстанс в облаке (в README даже приведена таблица расходов: симуляция сложной сцены на AWS обойдется примерно в 0.3–0.9 доллара).

Если вы занимаетесь 3D-графикой или физическими симуляциями, этот репозиторий точно стоит того, чтобы оказаться в ваших закладках. Хотя бы ради того, чтобы посмотреть, как японские инженеры решают проблемы на стыке высокой моды и математики.

🍪 Мы используем файлы cookie и сервис аналитики Яндекс.Метрика, чтобы сайт работал лучше. Продолжая пользоваться devtrends.ru, вы соглашаетесь с обработкой данных согласно Политике конфиденциальности.