3D-ассеты через агента Лицензии, происхождение и приёмка чужого
0%

Лицензии, происхождение и приёмка чужого

Лицензии, происхождение и приёмка чужого

Всё предыдущее было про то, как сделать ассет и убедиться, что он не сломан. Осталась проверка, которую не выполняет ни один скрипт: имеете ли вы право положить это в продукт.

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

Три источника чужого

В пайплайне из этого трека чужое попадает в ваш файл тремя путями, и у каждого свой набор вопросов.

Банки материалов. Poly Haven, включённый по умолчанию в главе про установку, раздаёт HDRI, текстуры и модели под CC0 — то есть без требований атрибуции и без ограничений на коммерческое использование. Это самый спокойный случай из трёх, и именно поэтому он включён, а остальные — нет.

Стоки и маркетплейсы. Здесь лицензия у каждой модели своя: где-то CC0, где-то CC-BY с обязательной атрибуцией, где-то собственная лицензия площадки с запретом перепродажи «как есть». Название площадки не говорит о лицензии ничего — говорит карточка конкретного файла на момент скачивания.

Сервисы генерации. Hyper3D Rodin, Sketchfab, Hunyuan3D — те самые, что в главе про установку выключены. Что можно делать с результатом, определяют условия сервиса, и они разные, меняются и обычно зависят от тарифа. Плюс отдельный слой: правовой статус сгенерированного различается по юрисдикциям и обсуждается прямо сейчас, а не решён.

Здесь нужна честная оговорка. Эта глава не даёт юридических утверждений и не может их давать: вопрос зависит от страны, от площадки и от того, что именно написано в вашем договоре. Что она даёт — список вопросов, которые надо задать, и способ хранить ответы так, чтобы к ним можно было вернуться. Разбор моделей лицензирования и распространения — в главах «Лицензирование» и «Распространение игр».

Что проверять у каждого источника

Вопрос Почему он важен именно для 3D
Разрешено ли коммерческое использование «Для личных проектов» — самая частая приписка на бесплатных моделях
Нужна ли атрибуция и в каком виде Требование указать автора распространяется и на игру, а не только на страницу загрузки
Можно ли изменять и делать производные Вы будете сокращать, разворачивать, запекать — это производная работа
Можно ли распространять внутри продукта Ключевой пункт, см. ниже
Есть ли запрет на перепродажу «как есть» Набор ассетов, перепроданный набором, — типичное нарушение
Отзывается ли лицензия Скачанное вчера могло быть выложено не тем, кто имел право

Пункт про распространение стоит развернуть, потому что формат прячет проблему.

В .glb текстуры лежат внутри файла — так решено ещё в главе «Экспорт в GLB» и не зря: один файл теряется реже, чем комплект. Но это же означает, что чужая текстура физически едет в вашем билде и попадает на диск каждому игроку. Юридически это распространение, а не использование, и лицензии эти два случая различают.

Тот же вопрос — про запечённые карты из главы про UV: карта нормалей, снятая с чужой модели, содержит информацию о её форме. «Я же не использовал сам меш» — не аргумент.

Манифест происхождения

Ответы на вопросы выше стоят немного, пока их получают один раз. Дорого становится тогда, когда через год нужно ответить, откуда взялась текстура ржавчины на ящике номер сорок два.

Поэтому к манифесту вариантов из главы про вариации добавляется происхождение:

{
  "name": "crate_042",
  "file": "crate_042.glb",
  "generator": "crates/build.py@1.4.0",
  "blender": "4.5.11",
  "sources": [
    {
      "kind": "texture",
      "asset": "rusty_metal_02",
      "origin": "polyhaven",
      "license": "CC0",
      "url": "https://polyhaven.com/a/rusty_metal_02",
      "fetched": "2026-08-02"
    },
    {
      "kind": "reference",
      "origin": "own",
      "license": "proprietary",
      "note": "бриф и эскиз внутренние, наружу не отправлялись"
    }
  ]
}

Четыре поля, которые записывать обязательно: что взято, откуда, под какой лицензией и когда. Дата нужна потому, что условия меняются; ссылка — потому что доказательство должно быть предъявляемым; строка про лицензию — потому что через год её никто не вспомнит.

И — как в главе «Ассет как код» — этот файл не документ, а вход для проверки. Из него собирается файл благодарностей, который едет в продукт:

credits = [s for a in manifest for s in a["sources"] if s["license"] != "CC0"]
missing = [s for s in credits if not s.get("url") or not s.get("author")]
assert not missing, f"нечем атрибутировать: {missing}"

Атрибуция, собираемая сборкой из данных, не забывается. Атрибуция, которую кто-то обещал дописать перед релизом, забывается всегда.

Что уходит наружу

Обратная сторона той же границы, и о ней в главе про установку сказано только половину.

Тогда речь шла о телеметрии: промпты, куски кода и скриншоты вьюпорта уезжали на сторонний сервер, и мы это выключали. Сервисы генерации — тот же поток данных, но включённый вами добровольно и осознанно: наружу уходит ваш бриф, ваш концепт-арт, ваше описание персонажа, то есть ровно то, что составляет художественную часть продукта.

Правило простое: то, что нельзя показать посторонним, не уходит в сторонний сервис. Не потому, что кто-то злонамерен, а потому, что данные, покинувшие ваш контур, живут по чужим правилам хранения. Договорённость с командой стоит записать до первого использования, а не после.

Приёмка чужого ассета

Модель, пришедшая со стока или от подрядчика, проходит те же ворота, что своя, — плюс два пункта, которые к своей неприменимы. Механизм уже собран в главе про сборку, нужен только список:

  • лицензия зафиксирована в манифесте, ссылка проверена, дата проставлена;
  • атрибуция, если требуется, попала в файл благодарностей;
  • бюджет треугольников выдержан (глава 08);
  • развёртка есть, плотность текселя в договорённых пределах (глава 09);
  • имена мешей, материалов и клипов совпадают с конвенцией проекта, а не с фантазией автора;
  • масштаб и ориджин приведены к вашим правилам (глава 06);
  • текстуры встроены, внешних ссылок нет;
  • модель открывается и рисуется в вашем рантайме, а не только в просмотрщике продавца.

Последний пункт — прямое следствие главы «Как агент смотрит на свою работу»: красивый рендер на витрине ассета доказывает ровно столько же, сколько success от инструмента, то есть ничего. Доказывает скриншот из вашей игры.

Отдельная строка про переименование. Чужой ассет почти всегда приезжает со своими именами слотов, и соблазн — подстроить под него код рантайма. Не надо: имена — контракт вашего проекта, а не поставщика. Переименование делается один раз на границе, скриптом приёмки, и дальше рантайм не знает, откуда модель пришла. Тот же принцип, что с осями в главе про экспорт: чините на границе, один раз, там, где различие возникает.

Свод трека

Четырнадцать глав можно свернуть в пять утверждений. Ни одно из них не про 3D.

  1. Инструмент, который врёт бодро, дороже инструмента, который честно падает. Чёрный скриншот со статусом success стоил бы часов работы над исправной моделью. Проверяйте инструмент отдельно от задачи и до задачи.
  2. success — не результат. Проверять надо артефакт: пиксели, треугольники, имена в файле, отчёт сборки. Статус говорит только, что код дошёл до конца.
  3. Задача агенту — это набор проверяемых утверждений. «Премиально» проверить нельзя, «без хвоста» — можно. Бриф, состоящий из проверяемых пунктов, заменяет художественный вкус там, где вкуса у агента нет.
  4. Считайте, а не прикидывайте. 407 тысяч треугольников на кружке, 50 фигур × 32 тысячи на доске, вчетверо более быстрый Cycles без видеокарты — всё это получено измерением и всё противоречило ожиданиям.
  5. Новое добавляется рядом с работающим старым. Игра работала на процедурной геометрии до появления авторских моделей и продолжала работать, когда очередной .glb не собрался. Это и позволило экспериментировать.

Инструментальный итог: агент занимает место не художника, а техартиста-скриптовика. Он силён там, где форма описывается числами, и слаб там, где нужен глаз, — и эта граница за четырнадцать глав не сдвинулась ни на шаг.

Что дальше

Трек закончен. Куда идти дальше — зависит от того, что оказалось узким местом.

Общая карта треков и порядок прохождения — в дорожной карте.

А начать стоит не с чтения. Возьмите свой пайплайн — любой, не обязательно 3D — и найдите в нём место, где успех докладывается статусом, а не артефактом. Оно там есть. Проверка, которую вы туда поставите, окупится быстрее, чем эта глава дочитывается.

Набор для запуска, скил для агента и карточка интеграции перечислены в конце главы «Живой кейс» — всё открытое, покупка не требуется.

Нашли неточность? Выделите фрагмент текста — рядом появится жучок.

Нужен разбор именно вашей ситуации?

Статья описывает общий случай. Если у вас частный — можно разобрать его отдельно, платно. А если не хватает целого материала, предложите тему: её оплачивают вскладчину, и она выходит открытой для всех.

Доска запросов