visvise-sdk-go

module
v1.2.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 2, 2026 License: MIT

README

VISVISE Weaver Go SDK

English | 中文

VISVISE Weaver OpenAPI 的 Go SDK,提供:

  • 全部原子 API 方法(逐一对应 OpenAPI 接口)
  • 各节点类型的高阶 Gen*() 方法(自动上传文件 + 创建任务)
  • WaitModel() 异步轮询方法

目录


安装

使用 go get 安装:

go get github.com/tencent-visvise/visvise-sdk-go

快速开始

package main

import (
    "fmt"
    "github.com/tencent-visvise/visvise-sdk-go/visvise"
)

func main() {
    // 创建客户端(可选参数)
    client := visvise.NewClient(
        "your_app_id",
        "your_secret_key",
        nil, // 使用默认配置,或传入 visvise.NewClientOptions()
    )
    // 开启调试日志
    // client := visvise.NewClient("...", "...", visvise.NewClientOptions().SetDebug(true))

    rtx := "your_rtx" // 请求追踪标识,从申请 key 的登录账号获取

    // ① 图生360:上传本地图片,生成多视图
    // name 在 Options 中设置(可选,默认自动生成)
    opts := visvise.NewGen360Options().
        SetEnableAPose(true)  // 可选
    mvModelID, err := client.Gen360("character.png", rtx, opts)
    if err != nil {
        panic(err)
    }

    // ② 等待图生360完成,获取多视图输出
    mvInfo, err := client.WaitModel(mvModelID, rtx, &visvise.WaitOptions{Interval: 3, Timeout: 300})
    if err != nil {
        panic(err)
    }
    outputView := mvInfo.ImageGen360Output.OutputView

    // ③ 图生高模(多视图输出的 COS URL 直接传入)
    opts = visvise.NewGenHighModelOptions().
        SetBackView(outputView.BackView).
        SetLeftView(outputView.LeftView).
        SetRightView(outputView.RightView)
    highModelID, err := client.GenHighModel(outputView.MainView, rtx, opts)
    if err != nil {
        panic(err)
    }

    // ④ 等待高模完成
    modelInfo, err := client.WaitModel(highModelID, rtx, &visvise.WaitOptions{Timeout: 900})
    if err != nil {
        panic(err)
    }
    fmt.Println("输出模型:", modelInfo.OutputModel)
}

客户端初始化

import "github.com/tencent-visvise/visvise-sdk-go/visvise"

// 必需参数
client := visvise.NewClient(
    "your_app_id",     // 必填,由平台分配
    "your_secret_key", // 必填,由平台分配
    nil,               // 可选参数,使用默认配置(EnvProd, Timeout=30, Debug=false)
)

// 可选参数示例
client := visvise.NewClient("...", "...",
    visvise.NewClientOptions().
        SetEnv(visvise.EnvDev).     // 设置环境,默认 EnvProd
        SetTimeout(60).              // 设置超时,默认 30 秒
        SetDebug(true))              // 开启调试日志,默认 false
参数 必填 说明
appID ✅ 由平台分配的客户端标识
secretKey ✅ 由平台分配的签名密钥
opts — 可选参数 *ClientOptions,nil 表示使用默认值

关于 rtx 参数:每次接口调用都需在方法参数中传入 rtx(实际使用人的 RTX 公司账号),它不在 client 构造函数中绑定。 按公司要求,内部用户必须传入实际使用人的 rtx,不可使用项目账号或共享账号代填;外部用户可传业务标识。


枚举常量

SDK 提供以下常量,推荐使用常量替代硬编码数字/字符串:

import "github.com/tencent-visvise/visvise-sdk-go/visvise"

// 面数类型
visvise.FaceTypeTriangle // 1 - 三角面
visvise.FaceTypeQuad     // 2 - 四边面

// 精细程度(重拓扑)
visvise.DetailLevelLow    // 1 - 低
visvise.DetailLevelMedium // 2 - 中
visvise.DetailLevelHigh   // 3 - 高

// 输出模型格式
visvise.OutputModelFormatFBX // "fbx"
visvise.OutputModelFormatOBJ // "obj"
visvise.OutputModelFormatGLB // "glb"

// 布线优化模式
visvise.MeshRefineModeOptimize // 1 - 布线优化
visvise.MeshRefineModeDensify  // 2 - 布线加密

// 2D 拆分方式
visvise.SegmentSplitFrontView // 1 - 生成正视图拆分(默认)
visvise.SegmentSplitFourView  // 2 - 生成四视图拆分

// 2D 拆分颗粒度
visvise.SegmentGranularityCoarse  // 1 - 粗
visvise.SegmentGranularityMedium  // 2 - 中(默认)
visvise.SegmentGranularityFine    // 3 - 细

// 2D 预处理方式
visvise.PreprocessTypeStylized      // 1 - 原画风格化
visvise.PreprocessTypePatterned     // 2 - 智能去花纹

// 风格化
visvise.StyleTypeGrayscale          // 1 - 灰模风
visvise.StyleTypePixel              // 2 - 像素风
visvise.StyleTypeRealistic          // 3 - 写实风
visvise.StyleTypeCartoon            // 4 - 卡通手办风

// 骨骼类别(骨骼架设)
visvise.MeshCategoryHumanoid // "humanoid" - 人形(默认)
visvise.MeshCategoryTetrapod // "tetrapod" - 四足

高阶方法参考

高阶方法封装了「COS 文件上传 + 创建任务」流程,传入文件路径(本地)或 COS URL 均可,返回 model_id。除 GenPreprocess 为同步处理外,其他 Gen*() 方法通常创建异步任务。

所有 Gen*() 方法采用 Options 结构体 模式,通过链式调用设置可选参数,使用更简洁:

关于 name 参数: 所有 Gen* 方法的 name 参数均为可选,默认值在 New*Options() 中设置(如 gen_360、gen_high_model 等)。可通过 SetName() 自定义。

关于 algorithmModel 参数: 所有 Gen* 方法的 algorithmModel 参数均为可选。若不传,SDK 将自动调用 ListAlgorithmModel 获取当前账号可用的第一个算法模型。

关于文件输入: 所有文件类参数(如 main_view / model_path / video_path / input_images 等)统一支持三种形式:

  • 本地路径(str):直接传文件路径,SDK 自动上传。
  • VISVISE 平台 COS URL(str):传入 https://...myqcloud.com/... 形式的链接,SDK 不再上传。
  • 二进制内容(bytes / io.Reader):SDK 自动通过 magic bytes 识别格式(图片 PNG/JPEG/GIF/BMP/WebP/TIFF、3D 模型 FBX/OBJ/GLB/GLTF、视频 MP4/MOV/WebM/AVI、ZIP),用 <uuid>.<识别后缀> 自动命名上传,无需用户提供文件名。
Gen360 — 图生360

从单张图片生成 360 度多视图。→ 示例代码

// 可选参数通过 Options 结构体传递,支持链式调用
// 默认 name="gen_360",输出格式为 fbx,面数类型为三角面
opts := visvise.NewGen360Options().
    SetName("my_360").                                    // 可选,默认 "gen_360"
    SetOutputModelFormat(visvise.OutputModelFormatFBX).   // 可选,输出格式(默认 fbx)
    SetFaceType(visvise.FaceTypeTriangle).                // 可选,面数类型(默认三角面)
    SetEnableAPose(true).                                 // 可选,是否开启 A-Pose
    SetStyle(string(GRAY_MODEL)).                                      // 可选,风格类型(仅 VISVISE 自研模型支持),只接受 ImageGen360Style 枚举:GRAY_MODEL/PHOTOREAL/Q_TOON/PIXEL,传其他值会报错
    SetBackView("path/to/back.png").                      // 可选,背视图
    SetLeftView("path/to/left.png").                      // 可选,左视图
    SetRightView("path/to/right.png")                     // 可选,右视图

modelID, err := client.Gen360("path/to/character.png", rtx, opts)

GenStyleTransfer / GenPatterAutoRemove — 2D预处理

对图片进行风格化或去花纹处理,并保存为2D预处理资产(node_type=16)。→ 示例代码

// 原画风格化
styleOpts := visvise.NewGenStyleTransferOptions().
    SetName("gen_style_transfer").                         // 可选,资产名称,默认 "gen_style_transfer"
    SetStyleType(visvise.StyleTypeGrayscale).               // 可选,风格类型,默认灰模风
    SetAlgorithmModel("VISVISE-Pre2D-V1.0.0")              // 可选,算法模型;不传自动选择首个可用模型

styledID, err := client.GenStyleTransfer("character.png", rtx, styleOpts)

// 智能去花纹
patternOpts := visvise.NewGenPatterAutoRemoveOptions().
    SetName("gen_patter_auto_remove").                     // 可选,资产名称,默认 "gen_patter_auto_remove"
    SetAlgorithmModel("VISVISE-Pre2D-V1.0.0")              // 可选,算法模型;不传自动选择首个可用模型

patternedID, err := client.GenPatterAutoRemove("character.png", rtx, patternOpts)

GenHighModel — 图生高模

从图片/多视图生成高精度 3D 模型(node_type=3)。→ 示例代码

opts := visvise.NewGenHighModelOptions().
    SetName("my_high_model").                            // 可选,默认 "gen_high_model"
    SetOutputModelFormat(visvise.OutputModelFormatFBX).  // 可选,输出格式(默认 fbx)
    SetFaceType(visvise.FaceTypeTriangle).               // 可选,面数类型(默认三角面)
    SetFaceNum(500000).                                  // 可选,目标面数(1000~1500000)
    SetBackView(outputView.BackView).                    // 可选,背视图
    SetLeftView(outputView.LeftView).                    // 可选,左视图
    SetRightView(outputView.RightView)                   // 可选,右视图

modelID, err := client.GenHighModel("path/to/main.png", rtx, opts)

GenMidModel — 图生中模

中模要求四视图全部必传(node_type=11)。→ 示例代码

opts := visvise.NewGenMidModelOptions().
    SetName("my_mid_model").                             // 可选,默认 "gen_mid_model"
    SetOutputModelFormat(visvise.OutputModelFormatFBX).  // 可选,输出格式
    SetFaceType(visvise.FaceTypeTriangle).               // 可选,面数类型
    SetFaceNum(30000).                                   // 可选,目标面数(0~30000,0=默认)
    SetSegmentModelID("Model2026...").                   // 可选,2D 分割资产 ID
	SetModelID360("Model2026...")                        // 可选,图生360 资产 ID

// 若是用户上传原画视图,则(mainView)必填
modelID, err := client.GenMidModel(
    "path/to/main.png",
    nil,
    nil,
    nil,
    rtx,
    opts,
)

GenLowModel — 图生低模

低模只需主视图(node_type=13)。→ 示例代码

opts := visvise.NewGenLowModelOptions().
    SetName("my_low_model").                             // 可选,默认 "gen_low_model"
    SetOutputModelFormat(visvise.OutputModelFormatFBX).  // 可选,输出格式
    SetFaceType(visvise.FaceTypeTriangle).               // 可选,面数类型
    SetBackView("path/to/back.png").                     // 可选,背视图
    SetLeftView("path/to/left.png").                     // 可选,左视图
    SetRightView("path/to/right.png")                    // 可选,右视图

modelID, err := client.GenLowModel("path/to/main.png", rtx, opts)

GenMeshRefine — 重布线

对模型进行布线优化(node_type=10)。→ 示例代码

opts := visvise.NewGenMeshRefineOptions().
    SetName("my_mesh_refine").                           // 可选,默认 "gen_mesh_refine"
    SetInputModelFormat(visvise.OutputModelFormatFBX).   // 可选,输入模型格式(默认 fbx)
    SetMode(visvise.MeshRefineModeOptimize).             // 可选,布线优化模式
    SetFaceNum(50000).                                   // 可选,目标面数(仅布线优化 mode=1 生效,0~50000,0=不设置)
    SetColorModel("path/to/color.fbx")                   // 可选,色彩模型

modelID, err := client.GenMeshRefine("path/to/model.fbx", rtx, opts)

GenRetopology — 重拓扑

对高面数模型进行拓扑优化(node_type=1)。→ 示例代码

注意:混元模型传 DetailLevel,VISVISE 自研模型传 FaceNum,二选一。

// 混元模型示例
opts := visvise.NewGenRetopologyOptions().
    SetName("my_retopo").                                // 可选,默认 "gen_retopology"
    SetAlgorithmModel("hunyuan3D-RTP-v1.5").             // 可选
    SetOutputModelFormat(visvise.OutputModelFormatFBX).   // 可选,输出格式
    SetFaceType(visvise.FaceTypeQuad).                   // 可选,面数类型(默认四边面)
    SetDetailLevel(visvise.DetailLevelMedium)            // 可选,混元模型

// VISVISE 自研模型示例
opts := visvise.NewGenRetopologyOptions().
    SetAlgorithmModel("VISVISE-RTP-V1.0.0").
    SetFaceNum(50000)                                    // 可选,VISVISE 自研模型

modelID, err := client.GenRetopology("path/to/model.fbx", rtx, opts)

GenLOD — LOD

生成多级细节模型(node_type=2),支持抽卡。默认抽卡次数为 3。→ 示例代码

reduceFaces := []visvise.ReduceFace{
    {ReduceLevel: 1, ReducePercent: 50, FaceType: visvise.FaceTypeQuad},
    {ReduceLevel: 2, ReducePercent: 25, FaceType: visvise.FaceTypeQuad},
}

opts := visvise.NewGenLODOptions().
    SetName("my_lod").                                   // 可选,默认 "gen_lod"
    SetOutputModelFormat(visvise.OutputModelFormatFBX).   // 可选,输出格式(默认 fbx)
    SetGenTimes(3)                                       // 可选,抽卡次数(默认 3)

modelIDs, err := client.GenLOD("path/to/model.fbx", reduceFaces, rtx, opts)

GenUV — UV展开

自动 UV 展开(node_type=9)。→ 示例代码

opts := visvise.NewGenUVOptions().
    SetName("my_uv").                                     // 可选,默认 "gen_uv"
    SetEnableAutoSmoothing(true)                          // 可选,是否启用自动平滑

modelID, err := client.GenUV("path/to/model.fbx", rtx, opts)

GenTexture — 贴图纹理

为模型生成贴图纹理(node_type=8)。→ 示例代码

InputView.MainView 与 Prompt 至少传一个,可同时传入。

view := &visvise.View{MainView: "path/to/ref.png"}

opts := visvise.NewGenTextureOptions().
    SetName("my_texture").                               // 可选,默认 "gen_texture"
    SetInputView(view).                                   // 可选,原画视图(与 prompt 至少传一个)
    SetResolution(2048).                                  // 可选,分辨率
    SetUnwarpUV(true).                                    // 可选,是否同时展开 UV
    SetPrompt("high quality, realistic")                   // 可选,贴图文本提示词

modelID, err := client.GenTexture("path/to/model.fbx", rtx, opts)

GenRigging — 骨骼架设

自动为模型生成骨骼(node_type=5)。SDK 自动将模型文件与参数 JSON 打包成 zip 上传,无需手动准备 zip 包。→ 示例代码

opts := visvise.NewGenRiggingOptions().
    SetName("my_rigging").                                // 可选,默认 "gen_rigging"
    SetMeshCategory(visvise.MeshCategoryHumanoid).       // 可选,人形(默认)或 visvise.MeshCategoryTetrapod(四足)或 visvise.MeshCategoryOther(其他)
    SetAlgoScenario(1).                                  // 可选,生成方式 1=一键自动(默认),visvise.RiggingAlgoScenarioTemplateSkeleton =人形+模版,visvise.RiggingAlgoScenarioAdditionalBones=附加骨骼
    SetGenerateRoot(false).                              // 可选,是否生成 Root 骨骼
    SetTemperature(-1).                                  // 可选,高级采样-自由度 与 num_beams 不同时使用。 取值范围:(0~1)
    SetNumBeams(10).                                     // 可选,高级采样-搜索广度 与 temperature 不同时使用。取值范围:(5-15) 
    SetMeshNames([]string{"pCube1", "pCube2"}).          // 可选,mesh_names,内容可为空
    SetTemplateSkeleton("path/to/skeleton.fbx")           // 可选,模板骨骼(algo_scenario=2 时需要)

modelID, err := client.GenRigging("path/to/model.fbx", rtx, opts)

GenSkinning — 蒙皮生成

自动绑定蒙皮权重(node_type=6)。SDK 自动将模型文件与参数 JSON 打包成 zip 上传。→ 示例代码

meshNames := []string{"Body_Mesh", "Hair_Mesh"}
jointNames := []string{"Bip001", "Bip001 Pelvis"}

opts := visvise.NewGenSkinningOptions(meshNames, jointNames).
    SetName("my_skinning").                               // 可选,默认 "gen_skinning"

modelID, err := client.GenSkinning("path/to/rigged_model.fbx", rtx, opts)

GenVideoMotion — 视频生动画

从视频中提取动作驱动 3D 模型(node_type=4)。→ 示例代码

opts := visvise.NewGenVideoMotionOptions().
    SetName("my_video_motion").                           // 可选,默认 "gen_video_motion"
    SetOutputModelFormat(visvise.OutputModelFormatFBX).   // 可选,输出格式
    SetWithHand(true).                                    // 可选,是否开启手部捕捉
    SetMultipleTrack(false).                              // 可选,是否开启多人捕捉
    SetRotateAxisAngle(0, 0, 0)                           // 可选,旋转轴角 [x, y, z](弧度)

modelID, err := client.GenVideoMotion("path/to/model.fbx", "path/to/dance.mp4", rtx, opts)

GenTextMotion — 文本生动画

通过提示词生成动画,一次返回 4 个模型供抽卡(node_type=4)。支持单段 prompt 与多段 segments 两种模式(segments 非空时以多段为准)。→ 示例代码

// 方式一:多段提示词 segments(1~15 段),无需 prompt
numFrames60, numFrames90, overlap10 := 60, 90, 10
segments := []visvise.MotionSegment{
    {Text: "从站立姿势开始,缓缓抬起右手", NumFrames: &numFrames60},
    {Text: "向前走两步", NumFrames: &numFrames90, OverlapFramesWithPrev: &overlap10},
}

opts := visvise.NewGenTextMotionOptions().
    SetName("my_text_motion").                            // 可选,默认 "gen_text_motion"
    SetOutputModelFormat(visvise.OutputModelFormatFBX).   // 可选,输出格式
    SetSegments(segments).                                // 可选,多段时间轴(非空时优先于 prompt)
    SetEnableRewrite(true).                               // 可选,是否开启 rewrite(默认 true)
    SetDuration(10).                                      // 可选,动画时长(仅单段 prompt 模式生效)
    SetEnableLoop(false).                                 // 可选,是否循环播放
    SetLoopFrames(5)                                      // 可选,循环帧数(1~20)

modelIDs, err := client.GenTextMotion("path/to/model.fbx", rtx, opts)
// modelIDs 包含 4 个 ID,等待其中你需要的那个即可

// 方式二:单段提示词 prompt(segments 为空时回退使用)
modelIDs, err = client.GenTextMotion("path/to/model.fbx", rtx,
    visvise.NewGenTextMotionOptions().SetName("my_text_motion").SetPrompt("一个人在跳街舞"))

GenPose — 图生Pose

从参考图生成 Pose 模型(最多 10 张图片)。→ 示例代码

inputImages := []visvise.FileInput{
    "path/to/pose_ref_1.png",
    "path/to/pose_ref_2.png",
}

opts := visvise.NewGenPoseOptions().
    SetName("my_pose").                                   // 可选,默认 "gen_pose"
    SetOutputModelFormat(visvise.OutputModelFormatFBX)    // 可选,输出格式

modelIDs, err := client.GenPose("path/to/model.fbx", inputImages, rtx, opts)

GenSegment2D — 2D 拆分

对图生 360 输出的多视图进行组件分割(node_type=14,SSE 协议)。生成的分割资产 model_id 可作为图生中模的 segmentModelID 输入。→ 示例代码

onThinking := func(content string) {
    fmt.Println("[思考]", content)
}

opts := visvise.NewGenSegment2DOptions().
    SetName("my_segment").                                // 可选,默认 "gen_segment_2d"
    SetInputView(&visvise.View{MainView: "path/to/ref.png"}) // 可选,输入视图
    SetSplitType(visvise.SegmentSplitFrontView).          // 可选,正视图/四视图拆分
    SetGranularity(visvise.SegmentGranularityMedium).     // 可选,颗粒度
    SetPrompt("segment by body parts").                   // 可选,自然语言描述拆分规则
    SetOnThinking(onThinking).                            // 可选,处理 thinking 事件的回调
    SetReadTimeout(120)                                   // 可选,SSE 读取超时(秒)

segModelID, err := client.GenSegment2D("Model2026...", rtx, opts)
// 后续可作为 segmentModelID 传给 GenMidModel

WaitModel — 等待完成

轮询等待异步任务完成,返回 ModelInfo。

modelInfo, err := client.WaitModel(
    "Model2026033100192028",
    rtx,
    &visvise.WaitOptions{
        Interval: 2,  // 轮询间隔(秒),默认 2
        Timeout: 600, // 超时时长(秒),默认 600
    },
)

fmt.Println(modelInfo.OutputModel) // 输出模型下载 URL
fmt.Println(modelInfo.TimeCost)   // 耗时(秒)

错误:

  • PollingTimeoutError:超时仍未完成时抛出
  • ModelGenerationError:模型生成失败(status=4)时抛出
  • InvalidParamsError:轮询接口返回参数错误时立即抛出(不重试)
  • 其他网络/业务错误不抛出,会打印日志并继续重试

原子 API 方法参考

通过 client.GetAPI().xxx() 访问底层接口:

api := client.GetAPI()

// 获取临时上传凭证
cred, err := api.GetCosCred(true, false, rtx)

// 查询剩余配额
quota, err := api.GetUserQuota(rtx)
fmt.Println(quota.ModelQuota)     // 模型剩余次数
fmt.Println(quota.AnimationQuota) // 动画剩余次数

// 拉取模型列表
models, total, err := api.GetModelList(
    []string{"Model2026..."},
    nil, nil, "", 10, 1, 0, nil, nil, rtx,
)

// 获取算法模型列表
algModels, err := api.ListAlgorithmModel(int(visvise.NodeTypeAnimation), nil, rtx)

// 获取下载链接
url, err := api.DownloadModel("Model2026...", rtx)

// 删除单个
err = api.DeleteModel("Model2026...", rtx)

// 批量删除
err = api.BatchDeleteModel([]string{"Model2026...", "Model2026..."}, rtx)

// 去除背景
outURL, err := api.RemoveBackground("https://cos.../image.png", rtx)

// 文生动画提示词列表
prompts, err := api.GetText2MotionPromptList("zh", rtx)

错误说明

所有 SDK 错误均继承自 WeaverError,可以捕获基类也可以精确捕获子类。

错误类 对应错误码 说明
WeaverError 任意 基础错误
NetworkError — 网络连接失败、超时等
SignatureError 410 签名错误
SignatureExpiredError 411 签名过期,本地时钟与服务端偏差过大
InvalidParamsError 120008 请求参数错误
UserNotFoundError 120017 用户未找到
PermissionDeniedError 120018 用户无权限
QuotaExceededError 120020 每日配额超出上限
ProjectPermissionError 120027 项目权限未授权
ServerNetworkError 120028 服务器网络错误
ServerTimeoutError 120032 服务器处理超时
RateLimitError 120040 请求过于频繁
ModelGenerationError — 模型生成失败(status=4)
PollingTimeoutError — WaitModel 等待超时
import (
    "fmt"
    "github.com/tencent-visvise/visvise-sdk-go/visvise"
)

client := visvise.NewClient("...", "...", nil)

modelID, err := client.Gen360("image.png", rtx, visvise.NewGen360Options())
if err != nil {
    if _, ok := err.(*visvise.QuotaExceededError); ok {
        fmt.Println("今日配额已用完,明天再试")
    } else if _, ok := err.(*visvise.PollingTimeoutError); ok {
        fmt.Println("等待超时")
    } else {
        fmt.Printf("接口错误: %v\n", err)
    }
}

完整流程示例

示例一:图片 → 高模(图生360 + 图生高模,高模也支持单图直接生成)
package main

import (
    "fmt"
    "github.com/tencent-visvise/visvise-sdk-go/visvise"
)

func main() {
    client := visvise.NewClient("...", "...", nil)

    // Step 1: 图生360
    fmt.Println("Step 1: 生成多视图...")
    opts := visvise.NewGen360Options()
    mvID, _ := client.Gen360("character.png", rtx, opts)
    mv, _ := client.WaitModel(mvID, rtx, &visvise.WaitOptions{Interval: 3, Timeout: 300})
    views := mv.ImageGen360Output.OutputView

    // Step 2: 图生高模
    fmt.Println("Step 2: 生成高模...")
    opts = visvise.NewGenHighModelOptions().
        SetBackView(views.BackView).
        SetLeftView(views.LeftView).
        SetRightView(views.RightView)
    highID, _ := client.GenHighModel(views.MainView, rtx, opts)
    highModel, _ := client.WaitModel(highID, rtx, &visvise.WaitOptions{Timeout: 900})
    fmt.Println("高模下载地址:", highModel.OutputModel)
}

示例二:动画生成流水线(骨骼 → 蒙皮 → 动画)
package main

import (
    "fmt"
    "github.com/tencent-visvise/visvise-sdk-go/visvise"
)

func main() {
    client := visvise.NewClient("...", "...", nil)

    // Step 1: 骨骼架设
    opts := visvise.NewGenRiggingOptions()
    rigID, _ := client.GenRigging("character.fbx", rtx, opts)
    rig, _ := client.WaitModel(rigID, rtx, &visvise.WaitOptions{Timeout: 600})
    fmt.Println("骨骼模型:", rig.OutputModel)

    // Step 2: 蒙皮生成
    opts = visvise.NewGenSkinningOptions([]string{"Body_Mesh"}, []string{"Bip001", "Bip001 Pelvis"})
    skinID, _ := client.GenSkinning("rigged_character.fbx", rtx, opts)
    client.WaitModel(skinID, rtx, &visvise.WaitOptions{Timeout: 600})

    // Step 3: 视频生动画
    opts = visvise.NewGenVideoMotionOptions()
    animID, _ := client.GenVideoMotion("skinned_model.fbx", "dance.mp4", rtx, opts)
    anim, _ := client.WaitModel(animID, rtx, &visvise.WaitOptions{Timeout: 900})
    fmt.Println("动画下载地址:", anim.OutputModel)
}

示例三:LOD 生成(含抽卡)
package main

import (
    "fmt"
    "github.com/tencent-visvise/visvise-sdk-go/visvise"
)

func main() {
    client := visvise.NewClient("...", "...", nil)

    reduceFaces := []visvise.ReduceFace{
        {ReduceLevel: 1, ReducePercent: 50, FaceType: visvise.FaceTypeQuad},
        {ReduceLevel: 2, ReducePercent: 25, FaceType: visvise.FaceTypeQuad},
    }

    opts := visvise.NewGenLODOptions()
    modelIDs, _ := client.GenLOD("high_model.fbx", reduceFaces, rtx, opts)

    // 等待全部完成
    for _, mid := range modelIDs {
        r, _ := client.WaitModel(mid, rtx, &visvise.WaitOptions{Timeout: 300})
        fmt.Println(r.ModelID, r.OutputModel)
    }
}

许可证

MIT License

Directories

Path Synopsis
examples
gen_360 command
gen_high_model command
gen_lod command
gen_low_model command
gen_mesh_refine command
gen_mid_model command
gen_pose command
gen_preprocess command
gen_retopology command
gen_rigging command
gen_segment_2d command
gen_skinning command
gen_text_motion command
gen_texture command
gen_uv command

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL