keyshot脚本开发-python脚本-渲染图片-渲染视频-控制方式

keyshot脚本开发-python脚本-渲染图片-渲染视频-控制方式,第1张

文章目录
    • 1.脚本使用方法
      • 1.1 实时脚本控制台
      • 1.2 脚本库中的脚本
      • 1.3 命令行方法
    • 2.帮助函数
    • 3.常用脚本功能
      • 3.1 导入文件
      • 3.2 渲染图片
      • 3.3 取消脚本
      • 3.4 相机 *** 作
      • 3.5 “自定义输入”对话框
      • 3.6 访问场景节点
      • 3.7 转换场景节点
    • 4.作者答疑

  在keyshot中,可以通过脚本实现许多常用功能,从而释放其强大的自动化和批量处理性能。预定义的脚本在脚本窗口的脚本选项卡里可以找到,包含用于批量渲染的易用脚本和编码视频等,结合其完整功能创建和保存自定义脚本,包括相机控制、照明预设、材质和材质模板、环境、背景、渲染(图像、动画和VR),以及打开/保存/导入文件。本文整理至互联网,方便读者学习,如有侵权,请联系,第一时间删除。

1.脚本使用方法 1.1 实时脚本控制台 1.2 脚本库中的脚本 1.3 命令行方法

  在命令行上运行KeyShot:keyshot.exe(打开的可选文件)-script (可选的脚本参数…)

2.帮助函数

  在窗口>脚本控制台,打开脚本控制台界面,如下图所示:


  输入help(lux.pause)命令查找帮助,或者输入网址查找帮助http://www.kaotop.com/file/tupian/20220421/image.png", width = 1200, height = 1000)

  在这种情况下,我们将图像渲染为尺寸为1200x1000像素的PNG文件到“ /path/to/save/image.png”。请注意,图像的格式由文件扩展名确定。与导入一样,可以使用opts选项传递高级选项。例如,可以设置最长10秒的渲染时间:

>>> opts = lux.getRenderOptions()
>>> opts.setMaxTimeRendering(10)
>>> lux.renderImage("/path/to/save/image.png", width = 1200, height = 1000, opts = opts)

  另一个示例是使用具有64个样本,8个线程和64个射线反d的高级渲染方法进行渲染:

>>> opts = lux.getRenderOptions()
>>> opts.setAdvancedRendering(64)
>>> opts.setThreads(8)
>>> opts.setRayBounces(64)
>>> lux.renderImage("/path/to/save/image.png", width = 1200, height = 1000, opts = opts)
3.3 取消脚本

  通常,您不能取消脚本,但是可以执行某些 *** 作,例如导入文件或渲染图像,动画或XR。在这些情况下取消表示取消关联的对话框,例如渲染输出窗口或导入进度对话框。

  可取消的 *** 作是:
  lux.importFile()
  lux.renderImage()
  lux.renderFrames()
  lux.renderAnimation()
  lux.renderXR()
  lux.encodeVideo()
  只需检查返回值以查看它是否为False,从而被取消或失败。特别是如果您使用的是循环结构,则可以执行以下 *** 作:

>>> frames = 10
>>> for frame in range(1, frames + 1):
        lux.setAnimationFrame(frame)
        if not lux.renderImage("/path/to/output.{}.png".format(frame)):
            break
3.4 相机 *** 作

  在脚本中使用相机就像在Project→Camera中使用“相机”选项卡 :您可以创建相机,根据需要对其进行 *** 作并保存。

>>> lux.newCamera("New")
True
>>> lux.setCameraLookAt(pt = (1, 1, 1)) # Example manipulation.
>>> lux.saveCamera()

  检查可用的摄像机:

>>> lux.getCameras()
['New', 'last_active', 'default']

  选择其他相机:

>>> lux.setCamera("default")

  删除刚创建的相机:

>>> lux.removeCamera("New")
True
>>> lux.getCameras()
['last_active', 'default']

  请注意,如果您删除活动的摄像机,它将选择“默认摄像机”。
  您还可以设置标准视图:

>>> lux.setStandardView(lux.VIEW_TOP)

  提供以下7种标准视图:
  lux.VIEW_FRONT
  lux.VIEW_BACK
  lux.VIEW_TOP
  lux.VIEW_BOTTOM
  lux.VIEW_LEFT
  lux.VIEW_RIGHT
  lux.VIEW_ISOMETRIC
  设置标准视图会 *** 纵活动的摄像机,因此您可以为每个标准视图创建摄像机,但要记住要保存它们。

3.5 “自定义输入”对话框

  在脚本中,当需要多个输入时,最好显示一个对话框。为此,您可以使用lux.getInputDialog()。Luxion提供的脚本将使用此脚本。例如,如果我们要编写视频编码脚本,则以下对话框可能就足够了:

>>> values = [("folder", lux.DIALOG_FOLDER, "Folder with frames:", None), \
              ("fmt", lux.DIALOG_TEXT, "Frame file format:", "frame.%d.jpg"), \
              ("start", lux.DIALOG_INTEGER, "Start frame:", 1, (1, 4096)), \
              ("end", lux.DIALOG_INTEGER, "End frame:", 10, (1, 4096)), \
              ("fps", lux.DIALOG_INTEGER, "FPS:", 10, (1, 1024)), \
              ("name", lux.DIALOG_TEXT, "Video name:", "video.mp4")]
>>> opts = lux.getInputDialog(title = "Encode Video", \ # Shows the dialog.
                              desc = "Put a description here.", \
                              values = values)
>>> opts
{'end': 10, 'fps': 10, 'fmt': 'frame.%d.jpg', 'name': 'video.mp4', 'start': 1, 'folder': ''}

  如果您单击“确定”而不更改任何值,那么您将获得上面的Python字典。每个键都与对话框中的值相关联。请注意,上面的“ \”字符指示该行的继续,因此它不会拆分为多行,而是理解为一行。对于经常运行的脚本,让KeyShot记住再次显示对话框时的最后一个值很方便,这可以通过对id选项使用唯一值来实现:

>>> opts = lux.getInputDialog(title = "Encode Video", \
                              desc = "Put a description here.", \
                              values = values, \
                              id = "something_unique_goes_here")

  如果其他脚本已经使用了唯一值,那么您将得到不想要的结果。但是,请记住,脚本每次都必须使用相同的唯一值来检索您的值。

3.6 访问场景节点

  可以通过lux.getSceneTree() 访问场景的元素,每个场景树节点的类型为lux.SceneNode。这非常有用,因为对于每个节点,您可以隐藏/显示,锁定/解锁,选择/取消选择,更改材质,应用变换,复制,移动等等。请尝试使用help(lux.SceneNode)了解更多信息。假设您要隐藏名称中包含“ Cord”的所有节点:

>>> root = lux.getSceneTree()
>>> for node in root.find(name = "Cord"):
        node.hide()

  另一个示例可能是您想要访问所有名为"Padding"的组,并选择所有名称为"Ear Pad"的子节点(在带有轮廓的场景中):

>>> for node in root.find(name = "Padding", types = lux.NODE_TYPE_GROUP):
        for ch in node.getChildren():
            if ch.getName() == "Ear Pad":
                ch.select()

  如果您隐藏了某些部分,只是想再次显示所有内容:

>>> root.show()

  请注意,根节点本身就是lux.SceneNode,因此可以在其上调用与子节点相同的功能。也可以更换材料。要模拟环境光遮挡,可以执行以下 *** 作:

>>> lux.setEnvironmentImage("All White.hdr")
>>> for node in root.find(""):
        node.setMaterial("Matte White")

  一个技巧是使用lux.SceneNode.find(“”)来查找所有内容。可以将节点移动到其他组,就像通过拖放 *** 作在场景树中一样。在下面的代码中,我们找到"Headphone#1"组,并将所有使用带有"Padding"材料的节点移动到该组。

>>> grp = root.find(name = "Headphone #1")[0] # Take first node of set.
>>> for node in root.find(mat = "Padding"):
        node.moveToGroup(grp)
True
3.7 转换场景节点

  节点可以通过脚本进行平移,缩放,旋转等。通过使用luxmath.Matrix类型的4x4转换矩阵是可能的。有两种转换方式:相对转换或绝对转换。相对变换意味着将变换局部应用,即在现有变换链中最后相乘。这意味着,如果相对平移(1,0,0),那么它将仅根据节点的位置沿x轴移动一个节点。相反,绝对变换的链接方式不同,并且绝对平移(1,0,0)会将节点始终定位在(1,0,0)。进行变换时,将单位矩阵(对角线为1s)用作基本矩阵很重要。它是通过以下方式获得的:

>>> M = luxmath.Matrix().makeIdentity()
>>> print(M.dump())
| 1.00  0.00  0.00  0.00 |
| 0.00  1.00  0.00  0.00 |
| 0.00  0.00  1.00  0.00 |
| 0.00  0.00  0.00  1.00 |

  用(5,0,1)转换节点:

>>> M = luxmath.Matrix().makeIdentity().translate(luxmath.Vector((5, 0, 3)))
>>> node.applyTransform(M)
>>> print(M.dump()) # Let's have a look at the matrix.
| 1.00  0.00  0.00  0.00 |
| 0.00  1.00  0.00  0.00 |
| 0.00  0.00  1.00  0.00 |
| 5.00  0.00  3.00  1.00 |

  如果要进行绝对位置调整,请执行以下 *** 作:

>>> M = luxmath.Matrix().makeIdentity().translate(luxmath.Vector((5, 0, 3)))
>>> node.applyTransform(M, absolute = True)

  注意,只有对象节点可以应用绝对变换!
  有关可能进行哪些转换的更多信息,请参阅luxmath.Matrix的文档。
  合理的脚本代码可以有效的提高工作效率,减少重复劳动。

4.作者答疑

  如有疑问,请留言。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/715144.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-25
下一篇 2022-04-25

发表评论

登录后才能评论

评论列表(0条)