Створіть пошукову AI-бібліотеку 3D-асетів із Tripo та Zilliz

AI-генерація 3D значно спрощує командам створення 3D-асетів у масштабі. З Tripo автори можуть генерувати високоякісні 3D-моделі з текстових промптів або референсних зображень, що корисно для розробки ігор, візуалізації в e-commerce, маркетингового виробництва, концепт-дизайну та внутрішніх креативних workflow.

Але щойно кількість згенерованих асетів зростає, з'являється нова проблема.

Як швидко знайти потрібний 3D-асет?

Коли команда має лише кілька моделей, назв папок і ручного перегляду може бути достатньо. Але коли з'являються сотні або тисячі згенерованих асетів, традиційний підхід до керування файлами починає руйнуватися. Дизайнери можуть багаторазово генерувати схожі асети. Ігрові команди можуть втрачати з поля зору корисні варіації персонажів або props. Маркетингові команди можуть витрачати більше часу на пошук асетів, ніж на їх використання.

Саме тут пошукова AI-бібліотека 3D-асетів стає цінною.

У цьому workflow Tripo генерує 3D-асети, а Zilliz Cloud виконує роль retrieval layer для мультимодальних векторів і metadata. Він зберігає embeddings, що представляють кожне render-зображення, і пов'язує їх із корисними полями, такими як category, style, color, object type, use case і source file. Результат — легка мультимодальна retrieval-система, у якій користувачі можуть шукати за текстом, референсним зображенням або обома варіантами й отримувати відповідні render-зображення, згенеровані Tripo, зі структурованими metadata.

Zilliz — це компанія з AI data infrastructure і творець Milvus, open-source vector database, що лежить в основі цього workflow. Milvus створений для production AI use cases, таких як RAG, AI agents, multimodal search, recommendation systems, enterprise knowledge bases, semantic search і content deduplication. Це також graduate project Linux Foundation AI & Data з 44 000+ GitHub stars і понад 100 мільйонами Docker pulls, що дає командам знайому основу для зберігання та retrieval vector embeddings неструктурованих даних.

Це важливо для користувачів Tripo, тому що кожен 3D-асет — це більше, ніж один файл. Кожна модель може бути пов'язана з render preview, input reference image, caption, tags, categories, colors, use cases, project IDs і URLs. Zilliz Cloud робить ці сигнали пошуковими разом, тож зростаюча бібліотека AI-згенерованих моделей може стати багаторазово використовуваною production asset system, а не папкою одноразових результатів.

Навіщо створювати пошукову бібліотеку 3D-асетів

AI-інструменти для 3D чудово підвищують швидкість виробництва. Один автор тепер може за дуже короткий час згенерувати кілька концептів персонажів, product mockups, props, елементів середовища або стилізованих асетів.

Однак швидкість створює обсяг. Обсяг створює проблеми керування.

Пошукова бібліотека 3D-асетів допомагає розв'язати кілька поширених проблем:

  • Команди можуть швидко знаходити наявні асети замість генерації дублікатів.
  • Дизайнери можуть шукати за концептом, стилем, кольором, типом об'єкта або use case.
  • Розробники можуть ефективніше повторно використовувати 3D-асети в різних проєктах.
  • Креативні команди можуть створити внутрішню бібліотеку затверджених, багаторазово використовуваних візуальних матеріалів.
  • E-commerce або маркетингові команди можуть організовувати product-like 3D-асети за категорією та стилем.

Замість того щоб розглядати AI-згенеровані 3D-файли як одноразові результати, цей workflow перетворює їх на багаторазово використовувану систему асетів.

Чому Zilliz Cloud підходить для мультимодального пошуку 3D-асетів

Zilliz Cloud — це повністю керована платформа Vector Lakebase, створена авторами Milvus. У її основі — production-grade vector database для high-throughput, low-latency vector search у масштабі 100 мільярдів. Навколо цього ядра Zilliz Cloud розширює vector search відкритістю, масштабованістю та економікою мультимодальних data lakes, даючи командам одну платформу для пошуку, аналізу та governance неструктурованих даних для production AI.

Це підходить для бібліотеки асетів Tripo, тому що дані за своєю природою мультимодальні. Пошуковий 3D-каталог може одночасно працювати з render images, reference images, text captions, generated metadata, team ownership fields і project-specific tags. Zilliz Cloud поєднує ці сигнали через vector search і metadata retrieval, тож користувачі можуть знаходити асети за змістом, візуальною схожістю, структурованими filters або комбінацією всіх трьох.

Zilliz пояснює цю еволюцію продукту в From Vector Database to Vector Lakebase і Why We Built Vector Lakebase. Ключова ідея полягає в тому, що сучасним AI-системам потрібно більше, ніж nearest-neighbor search. Їм також потрібна data foundation для real-time serving, iterative discovery, batch analytics і governance над швидкозростаючими неструктурованими наборами даних. Ці потреби напряму відповідають AI 3D-бібліотекам, де команди хочуть отримувати найкращий результат сьогодні й постійно покращувати каталог з часом.

Огляд workflow

У цьому demo використовуються три типи локальних даних:

  • CSV-файл зберігає metadata для кожного 3D-асету, як-от category, style, object type, color, use case, file name і пов'язану project information.
  • Папка milvus_render_images/ зберігає rendered preview images асетів, згенерованих Tripo. Ці render images є основними retrieval targets.
  • Папка milvus_input_images/ зберігає reference images, використані під час image-to-3D generation. Вони переважно використовуються як metadata і як optional query references.

Простіше кажучи: це налаштування дозволяє користувачам описувати те, що їм потрібно, завантажувати візуальний референс або поєднувати обидва inputs, щоб знаходити релевантні асети в бібліотеці.

Передумови

Перед початком переконайтеся, що у вас є таке:

  1. Обліковий запис Zilliz Cloud. Zilliz Cloud — це повністю керована платформа Vector Lakebase, створена авторами Milvus. Вона поєднує production-grade vector database з lake-native foundation для мультимодальних даних, тож ви можете зберігати embeddings і structured metadata без самостійного обслуговування vector infrastructure. Free tier достатньо, щоб пройти цей матеріал. Зареєструйтеся в Zilliz Cloud, створіть безкоштовний cluster і візьміть його URI та token.
  2. OpenRouter API key для мультимодальної embedding-моделі Gemini, використаної нижче.
  3. Python 3.10+ з установленим Milvus Python SDK (pip install -U pymilvus). Дивіться посібник зі встановлення PyMilvus, якщо ви працюєте з ним уперше.
  4. Набір 3D-асетів, згенерованих Tripo — render preview images і, за бажанням, reference images, використані для image-to-3D generation.

Крок 1: Підготуйте дані 3D-асетів, згенерованих Tripo

Перший крок — підготувати дані, згенеровані через Tripo.

Кожен асет має містити щонайменше:

  • Render preview image
  • Рядок metadata у CSV
  • Необов'язкову інформацію про input/reference image
  • Поля category, style, use case, object і color, якщо доступні

Наприклад, один асет може містити такі metadata:

FieldExample Value
CategoryCharacter
StyleFantasy
Object TypeFemale warrior
ColorBlue, Silver
Use CaseGame asset
File Namewarrior_female_01.webp

Ці metadata важливі, тому що одного лише vector search не завжди достатньо. У реальній бібліотеці асетів користувачі часто хочуть поєднувати semantic search із filters.

Наприклад:

  • Знайти "female character" у use case "game asset".
  • Знайти "fantasy sword with blue gemstone" у категорії "weapon".
  • Знайти асети в певному візуальному стилі, наприклад realistic, cartoon, sci-fi або low poly.

Що краща структура ваших metadata, то кориснішою стає ваша бібліотека асетів.

Обмеження формату зображень для embedding

Render images і input reference images зберігаються у форматі .webp для ефективності зберігання.

Однак embedding-модель Gemini (gemini-embedding-2-preview) надійно підтримує лише PNG і JPEG inputs. WebP images можуть спричиняти embedding failures залежно від API backend.

Тому перед генерацією embeddings потрібен preprocessing step для конвертації зображень у PNG або JPEG.

Крок 2: Створіть колекцію Zilliz Cloud

У Zilliz Cloud кожен record у collection представляє один 3D-асет, згенерований Tripo.

Саме тут модель Vector Lakebase стає корисною. Традиційна vector database чудово підходить для real-time similarity search. Vector Lakebase зберігає цей retrieval path, додаючи спільну lake-native data foundation для multimodal data, batch analytics, iterative discovery і governance. У цьому demo ми використовуємо її в легкому форматі, але така сама структура може зростати разом із набагато більшою бібліотекою асетів Tripo.

Collection зберігає як structured metadata, так і multimodal vector. Ключове vector field — multimodal_vector. У цьому demo розмірність вектора становить 3072, а як similarity metric використовується COSINE.

Оскільки text, image і text-plus-image queries embedded в один і той самий vector space, система може шукати всі асети за допомогою одного unified vector field.

Ось спрощене налаштування schema:

python
from pymilvus import MilvusClient

client = MilvusClient(uri=ZILLIZ_URI, token=ZILLIZ_TOKEN)

schema = client.create_schema(auto_id=False, enable_dynamic_field=False)
schema.add_field("asset_id", datatype=DataType.VARCHAR, max_length=64, is_primary=True)
schema.add_field("project_id", datatype=DataType.VARCHAR, max_length=64)
schema.add_field("operator_id", datatype=DataType.VARCHAR, max_length=64)
schema.add_field("caption", datatype=DataType.VARCHAR, max_length=1024)
schema.add_field("llm_category", datatype=DataType.VARCHAR, max_length=256)
schema.add_field("llm_style", datatype=DataType.VARCHAR, max_length=256)
schema.add_field("llm_object_type", datatype=DataType.VARCHAR, max_length=256)
schema.add_field("llm_color", datatype=DataType.VARCHAR, max_length=256)
schema.add_field("llm_use_case", datatype=DataType.VARCHAR, max_length=256)
schema.add_field("generation_mode", datatype=DataType.VARCHAR, max_length=64)
schema.add_field("render_image_path", datatype=DataType.VARCHAR, max_length=1024)
schema.add_field("input_image_path", datatype=DataType.VARCHAR, max_length=1024)
schema.add_field("multimodal_vector", datatype=DataType.FLOAT_VECTOR, dim=3072)

Потім створіть vector index:

python
index_params = client.prepare_index_params()
index_params.add_index(
    field_name="multimodal_vector",
    index_type="AUTOINDEX",
    metric_type="COSINE"
)

Після визначення schema та index виконайте:

python
client.create_collection(
    collection_name="tripo_asset_library",
    schema=schema,
    index_params=index_params
)

Після завершення команди ви маєте побачити collection у консолі Zilliz Cloud.

Клікнувши collection, ви також можете переглянути її status, schema, loaded entities і vector field configuration.

Примітка щодо index: у цьому demo використовується AUTOINDEX, що дозволяє Zilliz Cloud самостійно вибирати й налаштовувати vector index на основі ваших даних — без ручного вибору index types або parameters. Metric type COSINE відповідає L2-normalized embeddings, згенерованим на наступному кроці. А оскільки кожен record є однією entity в managed collection, те саме налаштування масштабується від сотень асетів до мільйонів без re-architecting.

Крок 3: Згенеруйте embeddings для render images

Далі згенеруйте embeddings для render preview images Tripo.

У цьому workflow render images конвертуються в base64 data URLs і надсилаються до embedding model. Повернені vectors нормалізуються, щоб їх можна було використовувати з COSINE similarity search.

Ось основна логіка:

python
import requests
import base64

def get_image_embedding(image_path: str) -> list[float]:
    with open(image_path, "rb") as f:
        b64 = base64.b64encode(f.read()).decode("utf-8")
    data_url = f"data:image/png;base64,{b64}"

    response = requests.post(
        "https://openrouter.ai/api/v1/embeddings",
        headers={"Authorization": f"Bearer {OPENROUTER_API_KEY}"},
        json={
            "model": "google/gemini-embedding-2-preview",
            "input": [{"data": data_url, "type": "image"}]
        }
    )
    embedding = response.json()["data"][0]["embedding"]
    norm = sum(x*x for x in embedding) ** 0.5
    return [x / norm for x in embedding]

Щоб створити embedding cache для всього dataset, виконайте:

python
import csv, json

embedding_cache = {}
with open("asset_metadata.csv") as f:
    reader = csv.DictReader(f)
    for row in reader:
        render_path = row["render_image_path"]
        embedding_cache[render_path] = get_image_embedding(render_path)

with open("embedding_cache.json", "w") as f:
    json.dump(embedding_cache, f)

Крок із cache корисний, тому що генерація embeddings може бути тривалою та залежною від API. Замість генерації embeddings щоразу під час імпорту даних ви можете один раз створити cache і повторно використовувати його під час import process.

Крок 4: Імпортуйте дані в Zilliz Cloud

Після генерації embedding cache кожен рядок у CSV перетворюється на одну entity Zilliz Cloud.

Кожна entity містить:

  • Asset ID
  • Project ID
  • Operator ID
  • Caption
  • LLM-generated metadata
  • Generation mode
  • Render image file information
  • Input image file information
  • Multimodal vector

Ось спрощена версія функції перетворення entity:

python
def csv_row_to_entity(row: dict, embedding_cache: dict) -> dict:
    render_path = row["render_image_path"]
    return {
        "asset_id": row["asset_id"],
        "project_id": row["project_id"],
        "operator_id": row["operator_id"],
        "caption": row["caption"],
        "llm_category": row.get("category", ""),
        "llm_style": row.get("style", ""),
        "llm_object_type": row.get("object_type", ""),
        "llm_color": row.get("color", ""),
        "llm_use_case": row.get("use_case", ""),
        "generation_mode": row.get("generation_mode", ""),
        "render_image_path": render_path,
        "input_image_path": row.get("input_image_path", ""),
        "multimodal_vector": embedding_cache.get(render_path, [])
    }

Потім імпортуйте повний dataset:

python
entities = []
with open("asset_metadata.csv") as f:
    reader = csv.DictReader(f)
    for row in reader:
        entities.append(csv_row_to_entity(row, embedding_cache))

client.insert(collection_name="tripo_asset_library", data=entities)

Після завершення import відкрийте консоль Zilliz Cloud і перевірте вкладку Data. Ви маєте побачити imported asset records, включно з metadata fields і vector information.

На цьому етапі 3D-асети, згенеровані Tripo, більше не є просто локальними файлами. Тепер це searchable entities у vector database.

Крок 5: Шукайте в бібліотеці 3D-асетів

Search system підтримує три query modes:

  1. Text Search — пошук за semantic description
  2. Image Search — пошук за visual similarity
  3. Text + Image Search — поєднання обох для точнішого retrieval

Усі три query types перетворюються на vectors за допомогою тієї самої multimodal embedding model. Потім query vector шукається в полі multimodal_vector у Zilliz Cloud.

Text search корисний, коли користувач уже знає, що хоче.

Приклад query: "A female character with blue and silver armor"

Система створює embedding для text query, шукає в collection і повертає найближчі render images з metadata.

Це особливо корисно для креативних команд, які хочуть шукати за semantic intent, а не за точними назвами файлів. Наприклад, дизайнеру не потрібно пам'ятати, чи файл називається char_f_warrior_01, чи f_warrior_blue. Він може просто шукати: "female warrior blue armor". У цьому різниця між файловим архівом і справжньою asset retrieval system.

Image search корисний, коли користувач має reference image і хоче знайти візуально схожі 3D-асети.

Наприклад, game artist може завантажити reference image стилізованого щита й шукати схожі props, згенеровані Tripo, в наявній бібліотеці. Замість ручного перегляду сотень зображень система може retrieve асети, що відповідають visual structure, style або object concept завантаженого reference.

Text-plus-image search — найгнучкіший варіант. Він дозволяє користувачу поєднувати semantic intent із visual guidance.

Наприклад, користувач може завантажити sword reference image і додати text query: "fantasy sword with blue gemstone". Зображення надає visual reference, а текст звужує search intent. Це робить retrieval конкретнішим, ніж використання будь-якого input окремо.

Ось спрощена search logic:

python
def search_assets(query_embedding: list[float], filter_expr: str = "", limit: int = 12):
    return client.search(
        collection_name="tripo_asset_library",
        data=[query_embedding],
        anns_field="multimodal_vector",
        filter=filter_expr,
        limit=limit,
        output_fields=[
            "asset_id", "caption", "llm_category",
            "llm_style", "llm_use_case", "render_image_path"
        ]
    )

Повернені результати містять і similarity scores, і metadata, що дає змогу показувати matched asset previews у front-end interface.

Зверніть увагу, що пошук не обмежується pure vector similarity. Оскільки кожен асет також має structured metadata (category, style, use case тощо), ви можете поєднувати semantic similarity з metadata conditions в одному request — наприклад, шукати "female", але обмежити результати до llm_use_case == "game asset". Це filtered search, і саме він перетворює bucket of vectors на queryable asset catalog. Якщо згодом ви захочете зіставляти кілька signals одночасно, Zilliz Cloud також підтримує multi-vector hybrid search across multiple embeddings per asset.

Приклад 1: Пошук за текстом і use case

У demo один приклад query використовує текст "female" з use case filter llm_use_case == "game asset" і встановлює limit=12.

Це retrieves top 12 matching assets, які semantic related до "female" і належать до use case game asset.

Такий тип пошуку корисний для pipelines розробки ігор, де командам потрібно швидко знаходити character concepts, NPC designs, stylized avatars або humanoid assets у великій внутрішній бібліотеці.

Приклад 2: Пошук за текстом і reference image

Інший приклад поєднує text query із reference image.

Text query: "Fantasy style weapon with detailed ornamentation and glowing effects". Query також містить visual reference image. Потім система генерує один joint embedding для тексту й зображення разом, шукає в тому самому vector field і повертає найрелевантніші render images.

Це корисно, коли intent користувача надто специфічний для одного лише тексту. Для visual asset search "similar to this, but more like that" часто саме так і мислять автори.

Чому цей workflow важливий

Справжня цінність тут не лише в image search — це багаторазово використовувана AI 3D asset infrastructure. Tripo забезпечує швидку генерацію; Zilliz Cloud відповідає за vector storage, similarity search, metadata retrieval і data layer для multimodal search. Разом вони перетворюють ізольовані 3D-результати на організовану, пошукову, багаторазово використовувану бібліотеку, що напряму підвищує production efficiency для команд, які створюють 3D-контент у масштабі.

Оскільки Zilliz Cloud створений для production AI, той самий pattern може початися з малого й масштабуватися разом із командою. Game studios можуть знаходити варіації characters, props і environments; e-commerce команди можуть організовувати product models за category, color або material; маркетингові команди можуть повторно використовувати наявні visuals замість їх повторної генерації; а creative-ops teams можуть підтримувати central, searchable store затверджених асетів у різних проєктах.

Висновок

AI-генерація 3D тепер настільки швидка, що створення більше не є єдиним bottleneck. Наступний виклик — що відбувається після генерації моделі: як вона зберігається, знову знаходиться, керується та повторно використовується, а не зникає в папці.

Цей workflow поєднує Tripo та Zilliz Cloud, щоб розв'язати саме це: Tripo генерує високоякісні асети з тексту або reference images, а Zilliz Cloud додає retrieval layer — render images, multimodal embeddings, structured metadata і scalable vector search. Іншими словами, Tripo стає 3D creation engine, тоді як Zilliz Cloud стає AI data infrastructure, що зберігає ці creations searchable, reusable і ready for the next project.

Спробуйте самі

AI-генерація 3D — це лише перший крок; справжній ефект з'являється, коли згенеровані асети перетворюються на структуровану, пошукову систему, що масштабується між командами та проєктами. З Tripo ви генеруєте високоякісні 3D-асети з text prompts або reference images. З Zilliz Cloud ви організовуєте й retrieves їх через multimodal vector search across text and images, backed by managed Vector Lakebase, designed for production AI workflows.

Поділитися статтею

Створюйте будь-що у 3D

Натисніть нижче, щоб приєднатися до мільйонів 3D-креаторів. Спробуйте генерацію моделей надвисокої якості та найкращі PBR-текстури.