aardio 文档

aardio 范例: 在独立后台 Blender 追加模型并检查贴图,不影响正在运行的 Blender 窗口。

// 在独立后台 Blender 追加模型并检查贴图,不影响正在运行的 Blender 窗口。
import console;
import web.rest.polyHaven;
import process.blender;
import JSON;

var ph=web.rest.polyHaven("aardio-PolyHaven-BlenderExample/1.0");
var directory=io.appData("aardio/PolyHaven/ceramic_vase_03/1k");
var asset,err=ph.downloadAsset("ceramic_vase_03",directory,{maxBytes=16*1024*1024});
ph.close();
if(!asset) { console.error(err);return; }

var body=/**
import bpy, os
with bpy.data.libraries.load(args['path'], link=False) as (src,dst):
    dst.collections=list(src.collections)
imported=[col for col in dst.collections if col]
children={child for col in imported for child in col.children}
for col in imported:
    if col not in children:
        bpy.context.scene.collection.children.link(col)
images=[]
for img in bpy.data.images:
    if img.source=='FILE':
        path=bpy.path.abspath(img.filepath, library=img.library)
        assert img.packed_file or os.path.isfile(path), path
        img.reload()
        assert img.size[0]>0, img.name
        images.append(img.name)
print(json.dumps({'source':'Poly Haven', 'collections':[col.name for col in imported], 'images':images},ensure_ascii=False))
**/;

// exec 的后台脚本没有桥接 args;使用 JSON(以 hex 安全嵌入)传路径。
var payload=string.hex(JSON.stringify({path=asset.mainFile}));
var py='import json\nargs=json.loads(bytes.fromhex("' + payload + '").decode("utf-8"))\n' ++ body;
var p,err=process.blender.exec(py);
if(!p) { console.error(err);return; }
var output,stderr,exitCode=p.readAll();
console.log(output);
console.error(stderr);
console.log("退出代码:",exitCode);
console.pause();

Markdown 格式