重拓扑优化 (Remesh)
这是 3D 生产管线中至关重要的一环。生图模型直接产出的模型往往包含大量杂乱的三角面(Triangles),不仅渲染效率低,且无法进行高质量的骨骼动画蒙皮。本服务支持将杂乱网格重新分布为规整的四边面(Quads),实现模型减面与拓扑结构优化。
典型应用场景
- LOD 优化:将超高面数模型优化为低模,适配移动端实时渲染
- 动画管线适配:生成规整的四边面网格,确保骨骼绑定后的变形平滑自然
本页使用的 API 参考 POST /3d_models/remeshings
3D 模型传入方式
模型参数同样支持三种传入格式:
- 前置任务结果:将文生模型或图生模型任务返回的
asset_path直接使用,实现无缝串联 - Base64 编码:传入
.glb文件内容的 base64 字符串(不含data:前缀) - 公网 URL:传入可公开访问的
.glb或其他支持格式文件链接
基础示例
bash
curl -X POST 'https://api.v2fun.ai/api/v1/3d_models/remeshings' \
-H 'Authorization: Bearer $V2FUN_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"input_model": "models/example.glb"
}'javascript
const response = await fetch('https://api.v2fun.ai/api/v1/3d_models/remeshings', {
method: 'POST',
headers: {
'Authorization': 'Bearer $V2FUN_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"input_model": "models/example.glb"
}),
});
const data = await response.json();python
import requests
resp = requests.post(
'https://api.v2fun.ai/api/v1/3d_models/remeshings',
headers={
'Authorization': 'Bearer $V2FUN_API_KEY',
'Content-Type': 'application/json',
},
json={
"input_model": "models/example.glb"
},
)
print(resp.json())java
import java.net.URI;
import java.net.http.*;
HttpClient client = HttpClient.newHttpClient();
String body = "{\"input_model\":\"models/example.glb\"}";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.v2fun.ai/api/v1/3d_models/remeshings"))
.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());核心用例
多级别 LOD 减面
通过设定 mesh_count,你可以快速生成同一资产的不同精度版本。例如,将 50 万面的原始模型一键优化为 1 万面的低模。
bash
curl -X POST 'https://api.v2fun.ai/api/v1/3d_models/remeshings' \
-H 'Authorization: Bearer $V2FUN_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"input_model": "https://asset.v2fun.ai/upload/remesh-input-robot.glb",
"mesh_count": 10000
}'javascript
const response = await fetch('https://api.v2fun.ai/api/v1/3d_models/remeshings', {
method: 'POST',
headers: {
'Authorization': 'Bearer $V2FUN_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"input_model": "https://asset.v2fun.ai/upload/remesh-input-robot.glb",
"mesh_count": 10000
}),
});
const data = await response.json();python
import requests
resp = requests.post(
'https://api.v2fun.ai/api/v1/3d_models/remeshings',
headers={
'Authorization': 'Bearer $V2FUN_API_KEY',
'Content-Type': 'application/json',
},
json={
"input_model": "https://asset.v2fun.ai/upload/remesh-input-robot.glb",
"mesh_count": 10000
},
)
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/remesh-input-robot.glb\",\"mesh_count\":10000}";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.v2fun.ai/api/v1/3d_models/remeshings"))
.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());输入模型
输出结果
四边面拓扑转换
将拓扑结构切换为 quad。四边面是动画师的最爱,因为它能完美遵循物体的受力形变,彻底解决骨骼动画中的“拉扯感”。
mesh_topology: triangle · quad
bash
curl -X POST 'https://api.v2fun.ai/api/v1/3d_models/remeshings' \
-H 'Authorization: Bearer $V2FUN_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"input_model": "https://asset.v2fun.ai/upload/remesh-input-robot.glb",
"mesh_topology": "quad",
"mesh_count": 5000
}'javascript
const response = await fetch('https://api.v2fun.ai/api/v1/3d_models/remeshings', {
method: 'POST',
headers: {
'Authorization': 'Bearer $V2FUN_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"input_model": "https://asset.v2fun.ai/upload/remesh-input-robot.glb",
"mesh_topology": "quad",
"mesh_count": 5000
}),
});
const data = await response.json();python
import requests
resp = requests.post(
'https://api.v2fun.ai/api/v1/3d_models/remeshings',
headers={
'Authorization': 'Bearer $V2FUN_API_KEY',
'Content-Type': 'application/json',
},
json={
"input_model": "https://asset.v2fun.ai/upload/remesh-input-robot.glb",
"mesh_topology": "quad",
"mesh_count": 5000
},
)
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/remesh-input-robot.glb\",\"mesh_topology\":\"quad\",\"mesh_count\":5000}";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.v2fun.ai/api/v1/3d_models/remeshings"))
.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());输入模型
输出结果
