模型贴图
解决 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());输入模型
输出结果
