Skip to content

模型贴图

解决 3D 模型“有皮没肉”的问题。支持为已有的 3D 网格全自动生成 UV 布局并填充高品质纹理。无论是基于文本描述还是参考图,都能实现材质的精准覆盖。

典型应用场景

  • 角色换装:为已有角色模型快速生成不同风格(如赛博、复古、机甲)的皮肤纹理
  • 低成本材质制作:将白模道具快速转化为具备真实质感的成品资产

本页使用的 API 参考 POST /3d_models/textures

3D 模型传入方式

模型参数同样支持三种传入格式:

  • 前置任务结果:将文生模型或图生模型任务返回的 asset_path 直接使用,实现无缝串联
  • Base64 编码:传入 .glb 文件内容的 base64 字符串(不含 data: 前缀)
  • 公网 URL:传入可公开访问的 .glb 或其他支持格式文件链接

基础示例

bash
curl -X POST 'https://api.v2fun.ai/api/v1/3d_models/textures' \
  -H 'Authorization: Bearer $V2FUN_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
      "input_model": "models/example.glb",
      "prompt": "A beautiful sunset over the mountains"
    }'
javascript
const response = await fetch('https://api.v2fun.ai/api/v1/3d_models/textures', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer $V2FUN_API_KEY',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "input_model": "models/example.glb",
    "prompt": "A beautiful sunset over the mountains"
  }),
});
const data = await response.json();
python
import requests

resp = requests.post(
    'https://api.v2fun.ai/api/v1/3d_models/textures',
    headers={
        'Authorization': 'Bearer $V2FUN_API_KEY',
        'Content-Type': 'application/json',
    },
    json={
        "input_model": "models/example.glb",
        "prompt": "A beautiful sunset over the mountains"
    },
)
print(resp.json())
java
import java.net.URI;
import java.net.http.*;

HttpClient client = HttpClient.newHttpClient();
String body = "{\"input_model\":\"models/example.glb\",\"prompt\":\"A beautiful sunset over the mountains\"}";
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://api.v2fun.ai/api/v1/3d_models/textures"))
    .header("Authorization", "Bearer $V2FUN_API_KEY")
    .header("Content-Type", "application/json")
    .POST(HttpRequest.BodyPublishers.ofString(body))
    .build();
HttpResponse<String> response = client.send(
    request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());

核心用例

基于文本描述生成贴图

通过自然语言描述目标材质。AI 将自动完成 UV 映射并生成符合语义的纹理,如"古老的锈铁剑"。

bash
curl -X POST 'https://api.v2fun.ai/api/v1/3d_models/textures' \
  -H 'Authorization: Bearer $V2FUN_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
      "input_model": "https://asset.v2fun.ai/upload/retex-input-gamepad.glb",
      "prompt": "golden luxury gamepad with diamond-encrusted buttons, ornate metallic sheen"
    }'
javascript
const response = await fetch('https://api.v2fun.ai/api/v1/3d_models/textures', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer $V2FUN_API_KEY',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "input_model": "https://asset.v2fun.ai/upload/retex-input-gamepad.glb",
    "prompt": "golden luxury gamepad with diamond-encrusted buttons, ornate metallic sheen"
  }),
});
const data = await response.json();
python
import requests

resp = requests.post(
    'https://api.v2fun.ai/api/v1/3d_models/textures',
    headers={
        'Authorization': 'Bearer $V2FUN_API_KEY',
        'Content-Type': 'application/json',
    },
    json={
        "input_model": "https://asset.v2fun.ai/upload/retex-input-gamepad.glb",
        "prompt": "golden luxury gamepad with diamond-encrusted buttons, ornate metallic sheen"
    },
)
print(resp.json())
java
import java.net.URI;
import java.net.http.*;

HttpClient client = HttpClient.newHttpClient();
String body = "{\"input_model\":\"https://asset.v2fun.ai/upload/retex-input-gamepad.glb\",\"prompt\":\"golden luxury gamepad with diamond-encrusted buttons, ornate metallic sheen\"}";
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://api.v2fun.ai/api/v1/3d_models/textures"))
    .header("Authorization", "Bearer $V2FUN_API_KEY")
    .header("Content-Type", "application/json")
    .POST(HttpRequest.BodyPublishers.ofString(body))
    .build();
HttpResponse<String> response = client.send(
    request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
输入模型
输出结果

基于参考图生成贴图

上传一张材质参考图,AI 将提取图中的纹理细节并完美应用到您的 3D 模型上。

bash
curl -X POST 'https://api.v2fun.ai/api/v1/3d_models/textures' \
  -H 'Authorization: Bearer $V2FUN_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
      "input_model": "https://asset.v2fun.ai/upload/retex-input-gamepad.glb",
      "input_image": "https://asset.v2fun.ai/upload/demo-input-texture-ref.png"
    }'
javascript
const response = await fetch('https://api.v2fun.ai/api/v1/3d_models/textures', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer $V2FUN_API_KEY',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "input_model": "https://asset.v2fun.ai/upload/retex-input-gamepad.glb",
    "input_image": "https://asset.v2fun.ai/upload/demo-input-texture-ref.png"
  }),
});
const data = await response.json();
python
import requests

resp = requests.post(
    'https://api.v2fun.ai/api/v1/3d_models/textures',
    headers={
        'Authorization': 'Bearer $V2FUN_API_KEY',
        'Content-Type': 'application/json',
    },
    json={
        "input_model": "https://asset.v2fun.ai/upload/retex-input-gamepad.glb",
        "input_image": "https://asset.v2fun.ai/upload/demo-input-texture-ref.png"
    },
)
print(resp.json())
java
import java.net.URI;
import java.net.http.*;

HttpClient client = HttpClient.newHttpClient();
String body = "{\"input_model\":\"https://asset.v2fun.ai/upload/retex-input-gamepad.glb\",\"input_image\":\"https://asset.v2fun.ai/upload/demo-input-texture-ref.png\"}";
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://api.v2fun.ai/api/v1/3d_models/textures"))
    .header("Authorization", "Bearer $V2FUN_API_KEY")
    .header("Content-Type", "application/json")
    .POST(HttpRequest.BodyPublishers.ofString(body))
    .build();
HttpResponse<String> response = client.send(
    request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
材质参考图
材质参考图
输入模型
输出结果

保留原始 UV 布局

如果您的模型已经有了人工优化的 UV 展开,开启 keep_uv 可以避免 AI 重新切割模型,确保纹理分布完全可控。适合有专业 UV 展开需求的制作团队。

bash
curl -X POST 'https://api.v2fun.ai/api/v1/3d_models/textures' \
  -H 'Authorization: Bearer $V2FUN_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
      "input_model": "https://asset.v2fun.ai/upload/keepuv-input-roseCarvedBuildingBlock.glb",
      "prompt": "ancient Roman stone relief carving style, weathered marble texture, classical Roman ornamental motifs, stone-carved bas-relief finish",
      "keep_uv": true
    }'
javascript
const response = await fetch('https://api.v2fun.ai/api/v1/3d_models/textures', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer $V2FUN_API_KEY',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "input_model": "https://asset.v2fun.ai/upload/keepuv-input-roseCarvedBuildingBlock.glb",
    "prompt": "ancient Roman stone relief carving style, weathered marble texture, classical Roman ornamental motifs, stone-carved bas-relief finish",
    "keep_uv": true
  }),
});
const data = await response.json();
python
import requests

resp = requests.post(
    'https://api.v2fun.ai/api/v1/3d_models/textures',
    headers={
        'Authorization': 'Bearer $V2FUN_API_KEY',
        'Content-Type': 'application/json',
    },
    json={
        "input_model": "https://asset.v2fun.ai/upload/keepuv-input-roseCarvedBuildingBlock.glb",
        "prompt": "ancient Roman stone relief carving style, weathered marble texture, classical Roman ornamental motifs, stone-carved bas-relief finish",
        "keep_uv": true
    },
)
print(resp.json())
java
import java.net.URI;
import java.net.http.*;

HttpClient client = HttpClient.newHttpClient();
String body = "{\"input_model\":\"https://asset.v2fun.ai/upload/keepuv-input-roseCarvedBuildingBlock.glb\",\"prompt\":\"ancient Roman stone relief carving style, weathered marble texture, classical Roman ornamental motifs, stone-carved bas-relief finish\",\"keep_uv\":true}";
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://api.v2fun.ai/api/v1/3d_models/textures"))
    .header("Authorization", "Bearer $V2FUN_API_KEY")
    .header("Content-Type", "application/json")
    .POST(HttpRequest.BodyPublishers.ofString(body))
    .build();
HttpResponse<String> response = client.send(
    request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
输入模型(原始 UV)
输出结果

PBR 材质与高清优化

一键生成全套 PBR 贴图并进行纹理增强,使模型表面呈现出细腻的金属光泽或皮革纹理。

bash
curl -X POST 'https://api.v2fun.ai/api/v1/3d_models/textures' \
  -H 'Authorization: Bearer $V2FUN_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
      "input_model": "https://asset.v2fun.ai/upload/retex-input-cat.glb",
      "prompt": "ancient terracotta warrior statue, hand-painted clay texture with gold and red lacquer details",
      "pbr_texture": true,
      "hd_texture": true
    }'
javascript
const response = await fetch('https://api.v2fun.ai/api/v1/3d_models/textures', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer $V2FUN_API_KEY',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "input_model": "https://asset.v2fun.ai/upload/retex-input-cat.glb",
    "prompt": "ancient terracotta warrior statue, hand-painted clay texture with gold and red lacquer details",
    "pbr_texture": true,
    "hd_texture": true
  }),
});
const data = await response.json();
python
import requests

resp = requests.post(
    'https://api.v2fun.ai/api/v1/3d_models/textures',
    headers={
        'Authorization': 'Bearer $V2FUN_API_KEY',
        'Content-Type': 'application/json',
    },
    json={
        "input_model": "https://asset.v2fun.ai/upload/retex-input-cat.glb",
        "prompt": "ancient terracotta warrior statue, hand-painted clay texture with gold and red lacquer details",
        "pbr_texture": true,
        "hd_texture": true
    },
)
print(resp.json())
java
import java.net.URI;
import java.net.http.*;

HttpClient client = HttpClient.newHttpClient();
String body = "{\"input_model\":\"https://asset.v2fun.ai/upload/retex-input-cat.glb\",\"prompt\":\"ancient terracotta warrior statue, hand-painted clay texture with gold and red lacquer details\",\"pbr_texture\":true,\"hd_texture\":true}";
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://api.v2fun.ai/api/v1/3d_models/textures"))
    .header("Authorization", "Bearer $V2FUN_API_KEY")
    .header("Content-Type", "application/json")
    .POST(HttpRequest.BodyPublishers.ofString(body))
    .build();
HttpResponse<String> response = client.send(
    request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
输入模型
输出结果