微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用一组 {cameras} ✕ {textures}笛卡尔积在 c4d 中排队批量渲染?

如何解决如何使用一组 {cameras} ✕ {textures}笛卡尔积在 c4d 中排队批量渲染?

使用 python 脚本,我尝试使用不同的(vray)相机、给定(vray)材质的不同纹理路径、不同的渲染图像文件名和特定设置来排队渲染当前项目。我找不到一种方法来控制我排队的内容

我的问题是:

  1. 如何获取当前文档中所有(vray)摄像机的列表? 伪代码camNameList = [c.GetName() for c in currentbasedocument.GetAllCameras()]

  2. 如何编辑(vray)材质的纹理?

  3. 如何将集合 {cameras} ✕ {textures} 排队并渲染?

我有一个项目 vray 相机:

camNameList = ["vray Cam2 global","vray Cam1 close tree","vray Cam3 closer tree","vray Cam4 angle L","vray Cam5 angle R","vray Cam6","floor"]

但我没有设法访问它们:

batch = documents.GetBatchRender()
batch.open()
batch.AddFile(file,1) # works but I have not control over 1) which camera
    # 2) which render setting 3) which filename for the rendered image

camOList = doc.SearchObject("vray Cam2 global")
print (camOList) # result: None
  
bd  = doc.GetActiveBaseDraw()
cam = bd.GetEditorCamera()
cname = bd.GetSceneCamera(doc)
print(cam.GetName()) # result: "Camera" but it is not in camNameList
print(cname.GetName()) # result: "Camera"

然后我将使用这些函数来做 {cameras} ✕ {textures} 的笛卡尔积并指定渲染文件名:

from os.path import isfile,join

doneFiles = ["im1.JPG","im2.JPG"]
def GetTex(path):
    return [f for f in listdir(path) if isfile(join(path,f)) and f.endswith(".JPG") and f not in doneFiles]

def FilterCams(camNameList,camTagList):
    return [c for c in camNameList for t in camTagList if t in c]
  
def GetRenderUple(renderList):
    finalUple = []
    for file,camtag in renderList:
        filetag = file.split(".")[0]
        cameraName = [c for c in camNameList if camtag in c][0]
        renderFile = filetag + "_" + camtag + ".tif"
        finalUple.append((file,cameraName,renderFile))
    return finalUple

笛卡尔积没有问题:

from os import listdir
from itertools import product

camNumbers = [2,1,4,5]
camTagList = ["Cam"+str(i) for i in camNumbers]

selectedCam = FilterCams(camNameList,camTagList)
# print(selectedCam)

renderList = list(product(flist,camTagList))
# print(renderList)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。