Nuke - 写入节点

写入节点

在 Nuke 中支持 Shotgun 写入节点。


开发者:Shotgun Software
最新版本:v1.2.0 (Prod)
我们的版本号遵循语义版本控制标准。
系统名称:tk-nuke-writenode

目录:

概述

文档

      一般用法

      重置渲染路径

      添加另一个写入节点配置文件

            提升写入按钮

      渲染农场集成 1

            使用 init.py 引导 Shotgun Pipeline Toolkit 插件

            Deadline 特定事项

      渲染农场集成 2

      技术细节

                  get_write_nodes()

                  get_node_name()

                  get_node_profile_name()

                  get_node_render_path()

                  get_node_render_files()

                  get_node_render_template()

                  get_node_publish_template()

                  get_node_proxy_render_path()

                  get_node_proxy_render_files()

                  get_node_proxy_render_template()

                  get_node_proxy_publish_template()

                  get_node_published_file_type()

                  generate_node_thumbnail()

                  reset_node_render_path()

                  is_node_render_path_locked()

                  convert_to_write_nodes()

                  convert_from_write_nodes()

                  process_placeholder_nodes()

安装、更新和开发

配置选项

概述

本文档介绍仅当控制 Toolkit 配置时可用的功能。有关详细信息,请参见 Shotgun 集成用户手册。此应用包含一个适用于 Nuke 的自定义写入节点小控件,使用户不必关心文件系统路径,从而只需关注于为特定输出命名。Shotgun 会完成其余操作! 此应用通常与发布应用结合使用,如果您安装了适用于 Nuke 的发布应用,您很可能也想要安装此应用!

文档

Nuke 写入节点应用提供一个自定义的 Shotgun 写入节点,让您可轻松设置标准化的图像渲染位置。您可以为每个环境配置它。除了路径以外,配置还将决定要使用的渲染格式。

一般用法

要使用 Shotgun 写入节点,可先将脚本另存为 Toolkit 工作文件,然后通过 Nuke 菜单创建一个新节点。此操作将创建一个与普通写入节点类似的节点:

写入节点

您不用输入路径,只需指定输出名称,Toolkit 便会自动计算路径的其余部分。您可以在用户界面中查看计算得到的路径,并可单击“Show in File System”按钮打开磁盘上的位置。渲染内容的写入位置取决于 Toolkit 的配置。

渲染内容将实施版本控制,版本号始终遵循当前的 Nuke 脚本版本,会在您使用多发布进行发布时自动递增。

重置渲染路径

写入节点会缓存当前路径,以便文件在 Toolkit 工作区外部打开时,路径仍然有效。有时,这意味着路径可能会变得不同步和被“锁定”。如果渲染路径被锁定,将无法发布使用此写入节点创建的渲染内容。

要重置渲染路径,请使用工作文件应用的“升级场景版本”命令升级场景的版本,或单独选择写入节点,然后在属性中单击 Reset Path

写入图形

添加另一个写入节点配置文件

Shotgun 写入节点封装了 Nuke 内置的写入节点,因此 Nuke 支持的任何格式均可用于此应用,并且通过配置可另外再添加节点。最简单的入门方法是使用您需要的参数设置一个简单的 Nuke 写入节点。 例如,我们假设您使用 LZW 压缩来保存 16 位 TIFF 文件。如果您在文本编辑器中查看自己的 Nuke 脚本,会发现写入节点将如下所示:

...
Write {
    file /Users/ryanmayeda/Desktop/test.%04d.tif
    file_type tiff
    datatype "16 bit"
    compression LZW
    checkHashOnRead false
    name Write1
    xpos -145
    ypos -61
}
...

上面的文本显示了您需要的参数名称和值各是什么。在本例中为 datatypecompression。接下来,转到环境配置(例如:/path/to/pipeline/config/env/shot_step.yml)并找到配置 tk-nuke-writenode 应用的部分。在 settings 部分使用这两个参数添加另一个写入节点:

...
tk-nuke-writenode:
  location: {name: tk-nuke-writenode, type: app_store, version: v0.1.6}
  template_script_work: nuke_shot_work
  ...
  write_nodes:
  - file_type: exr
    ...
  - file_type: dpx
    ...
  - file_type: tiff
    name: Mono Tif
    publish_template: nuke_shot_render_pub_mono_tif
    render_template: nuke_shot_render_mono_tif
    proxy_publish_template: null
    proxy_render_template: null
    settings: {datatype: 16 bit, compression: LZW}
    tank_type: Rendered Image
    tile_color: []
    promote_write_knobs: []
...

更新后的配置将在 Nuke 显示这个另外添加的 Shotgun 写入节点:

添加新节点

注意:请务必将任何新模板(例如 nuke_shot_render_mono_tif)添加到 templates.yml 文件中,该文件可在项目配置中找到 (<configuration root>/config/core/templates.yml)。

下面是另一个示例,显示了如何添加一个以 0.5 的压缩率和 4:2:2 的子采样率输出 JPEG 的 Shotgun 写入节点。此配置文件还使用了“promote_write_knobs”选项将 JPEG 质量旋钮提升到小控件的用户界面。这样,配置文件便可以设置图片质量的默认值,同时还能为用户提供滑块控件以自己更改该设置:

...
tk-nuke-writenode:
  ...
  write_nodes:
    - file_type: jpeg
      name: Compressed JPEG
      publish_template: nuke_shot_render_pub_jpeg
      render_template: nuke_shot_render_jpeg
      proxy_publish_template: null
      proxy_render_template: null
      settings: {_jpeg_quality: 0.5, _jpeg_sub_sampling: "4:2:2"}
      tank_type: Rendered Image
      tile_color: []
      promote_write_knobs: [_jpeg_quality]
...

提升写入旋钮

如上面的配置文件示例中所示,封装的写入节点中的旋钮可以通过提升,显示在 Shotgun 写入节点的属性面板中。提升的写入旋钮在配置文件中定义,并以旋钮名称进行标识。有多个旋钮可以提升。

渲染农场集成 1

工作室常常使用渲染农场来运行作业管理工具(例如 Deadline),这类工具往往会在渲染时直接启动 Nuke。由于渲染农场在 Shotgun 环境外部,因此,如果不借助一些额外的帮助,将找不到 tk-nuke-writenode 应用和“写入节点”小控件。

我们正在努力寻找一种更完整的解决方案,而下面使用的是 tk-nuke 插件的一个精简引导,目的是使 Shotgun 写入节点能够按预期运行。

使用 init.py 引导 Shotgun Pipeline Toolkit 插件

Nuke 将运行在其插件路径中找到的任何 init.py 脚本 - 请参见此处 (http://docs.thefoundry.co.uk/nuke/63/pythondevguide/startup.html) 了解更多详情。

下面的示例 init.py 脚本应放在以下三个位置之一,这将确保 tk-nuke 插件正确加载。

# Save this file as init.py in your nuke plug-in path as described here:
#
#   http://docs.thefoundry.co.uk/nuke/63/pythondevguide/startup.html
#

# Tell the script where the Toolkit Core API is installed.
# This is often referred to as the 'studio' location.
# Don't forget back slashes in the windows path!

SGTK_STUDIO_LOCATION_LINUX   = "/mnt/software/shotgun/studio"
SGTK_STUDIO_LOCATION_MAC     = "/mnt/software/shotgun/studio"
SGTK_STUDIO_LOCATION_WINDOWS = "z:\\mnt\\software\\shotgun\\studio"

# Tell the script where the project root is located. 
# This location will be used if no .nk file is specified on the command line

SGTK_DEFAULT_WORK_AREA_LINUX   = "/mnt/projects/my_project"
SGTK_DEFAULT_WORK_AREA_MAC     = "/mnt/projects/my_project"
SGTK_DEFAULT_WORK_AREA_WINDOWS = "z:\\mnt\\projects\\my_project"

def init_sgtk():
    """
    Minimal setup to ensure the tk-nuke engine is up
    and running when Nuke is started outside or the
    Tank command or Shotgun context menus 
    """    
    import sys, os

    studio_map = {"linux2": SGTK_STUDIO_LOCATION_LINUX,
                  "win32":  SGTK_STUDIO_LOCATION_WINDOWS,
                  "darwin": SGTK_STUDIO_LOCATION_MAC }

    work_area_map = {"linux2": SGTK_DEFAULT_WORK_AREA_LINUX,
                     "win32":  SGTK_DEFAULT_WORK_AREA_WINDOWS,
                     "darwin": SGTK_DEFAULT_WORK_AREA_MAC }

    # make sure sgtk module can be found in the python path:
    core_python_path = os.path.join(studio_map[sys.platform], "install", "core", "python")
    if core_python_path not in sys.path: 
        sys.path.append(core_python_path)

    # Check that we need to start the engine:
    if "TANK_ENGINE" in os.environ:
        # tk-nuke engine is going to be set up by
        # tk-multi-launchapp so we don't need to bother
        return

    # Check that the engine isn't already running
    if "TANK_NUKE_ENGINE_MOD_PATH" in os.environ:
        # tk-nuke engine is running which will handle all 
        # engine & context management from now on
        return

    # initialize tk-nuke engine:
    try:
        # Determine the work area path that will be used to
        # create the initial context the engine will be
        # started with.  If a file path was specified on the
        # command line then this will be sys.argv[0]
        work_area_path = work_area_map[sys.platform]
        if len(sys.argv) > 0 and sys.argv[0].endswith(".nk") and os.path.exists(sys.argv[0]):
            # file path was passed through the command line
            work_area_path = sys.argv[0] 

        import sgtk
        # instantiate an sgtk instance from the current work area path:
        tk = sgtk.sgtk_from_path(work_area_path)
        # make sure we have synchronised the file system structure from
        # Shotgun (for core v0.15 and above):
        tk.synchronize_filesystem_structure()
        # build a context from the work area path:
        ctx = tk.context_from_path(work_area_path)
        # Finally, attempt to start the engine for this context:
        sgtk.platform.start_engine("tk-nuke", tk, ctx)
    except Exception, e:
        print "Failed to start Toolkit Engine - %s" % e

init_sgtk()

您需要修改此脚本,提供具体的工作室/代码和项目根目录 - 如果您的配置比此示例更复杂,或者要使用 -t 标志而非 Nuke (.nk) 脚本向命令行传递 Python 脚本,可能还需要扩展此脚本。

Deadline 特定事项

Deadline 可能会在渲染时将 Nuke 脚本复制到一个临时位置。这会导致 Toolkit 出现问题,因为这种情况下文件已不在 Toolkit 识别的磁盘位置。要禁用此行为并从原始位置加载脚本:

  1. 在 Deadline 中,导航到“Tools”>“Configure Plugin”(在超级用户模式下)
  2. 禁用“Enable Path Mapping”选项。

渲染农场集成 2

如果无法在渲染农场上安装 Toolkit,另一个可用方案是先将 Shotgun 写入节点转换为常规 Nuke 写入节点,然后再发送脚本进行渲染。

为了方便节点转换,tk-nuke-writenode 应用提供了两个方法,分别是 convert_to_write_nodes()convert_from_write_nodes()

要将脚本中的所有 Shotgun 写入节点转换为常规 Nuke 写入节点,请运行:

import sgtk
eng = sgtk.platform.current_engine()
app = eng.apps["tk-nuke-writenode"]
if app:
    app.convert_to_write_nodes()

虽然有一个对应的 convert_from_write_nodes() 函数可用,但是为了确保数据完整性,建议仅将它用于调试目的,不要在您的工作流中使用它。

技术细节

应用提供以下 API 方法:

get_write_nodes()

返回当前场景中所有 Shotgun 写入节点的列表。

list app.get_write_nodes()

参数和返回值

  • 返回值:list - 在场景中找到的 Toolkit 写入节点的列表。

示例

>>> import sgtk
>>> eng = sgtk.platform.current_engine()
>>> app = eng.apps["tk-nuke-writenode"]
>>> nodes = app.get_write_nodes()

get_node_name()

返回指定的写入节点的名称。

string get_node_name(node 节点)

参数和返回值

  • node node - 要查询的写入节点。
  • 返回值:string - 节点名称。

示例

>>> import sgtk
>>> eng = sgtk.platform.current_engine()
>>> app = eng.apps["tk-nuke-writenode"]
>>> nodes = app.get_write_nodes()
>>> app.get_node_name(nodes[0])

get_node_profile_name()

获取指定的写入节点使用的配置文件的名称。

string get_node_profile_name(node 节点)

参数和返回值

  • node node - 要查询的写入节点。
  • 返回值:string - 配置为此写入节点定义的配置文件名称。

示例

>>> import sgtk
>>> eng = sgtk.platform.current_engine()
>>> app = eng.apps["tk-nuke-writenode"]
>>> nodes = app.get_write_nodes()
>>> app.get_node_profile_name(nodes[0])

get_node_render_path()

获取指定的写入节点渲染图像的路径。

string get_node_render_path(node 节点)

参数和返回值

  • node node - 要查询的写入节点。
  • 返回值:string - 此节点的渲染路径。

示例

>>> import sgtk
>>> eng = sgtk.platform.current_engine()
>>> app = eng.apps["tk-nuke-writenode"]
>>> nodes = app.get_write_nodes()
>>> app.get_node_render_path(nodes[0])

get_node_render_files()

获取指定的写入节点已渲染的所有图像文件的列表。

list get_node_render_files(node 节点)

参数和返回值

  • node node - 要查询的写入节点。
  • 返回值:list - 此写入节点渲染的图像文件的列表。

示例

>>> import sgtk
>>> eng = sgtk.platform.current_engine()
>>> app = eng.apps["tk-nuke-writenode"]
>>> nodes = app.get_write_nodes()
>>> app.get_node_render_files(nodes[0])

get_node_render_template()

获取配置中定义的一个模板,该模板决定指定的写入节点将渲染图像写入哪个位置。

template get_node_render_template(node 节点)

参数和返回值

  • node node - 要查询的写入节点。
  • 返回值:template - 此节点配置使用的渲染模板。

示例

>>> import sgtk
>>> eng = sgtk.platform.current_engine()
>>> app = eng.apps["tk-nuke-writenode"]
>>> nodes = app.get_write_nodes()
>>> app.get_node_render_template(nodes[0])

get_node_publish_template()

获取配置中定义的一个模板,该模板决定指定的写入节点将渲染图像发布至哪个位置。

template get_node_publish_template(node 节点)

参数和返回值

  • node node - 要查询的写入节点。
  • 返回值:template - 此节点配置使用的发布模板。

示例

>>> import sgtk
>>> eng = sgtk.platform.current_engine()
>>> app = eng.apps["tk-nuke-writenode"]
>>> nodes = app.get_write_nodes()
>>> app.get_node_publish_template(nodes[0])

get_node_proxy_render_path()

获取指定的写入节点渲染代理图像的路径。

string get_node_proxy_render_path(node 节点)

参数和返回值

  • node node - 要查询的写入节点。
  • 返回值:string - 此节点的代理渲染路径。

示例

>>> import sgtk
>>> eng = sgtk.platform.current_engine()
>>> app = eng.apps["tk-nuke-writenode"]
>>> nodes = app.get_write_nodes()
>>> app.get_node_proxy_render_path(nodes[0])

get_node_proxy_render_files()

获取指定的写入节点已渲染的所有代理图像文件的列表。

list get_node_proxy_render_files(node 节点)

参数和返回值

  • node node - 要查询的写入节点。
  • 返回值:list - 此写入节点渲染的代理图像文件的列表。

示例

>>> import sgtk
>>> eng = sgtk.platform.current_engine()
>>> app = eng.apps["tk-nuke-writenode"]
>>> nodes = app.get_write_nodes()
>>> app.get_node_proxy_render_files(nodes[0])

get_node_proxy_render_template()

获取配置中定义的一个模板,该模板决定指定的写入节点将代理渲染图像写入哪个位置。

如果指定的节点未配置代理渲染模板,将返回常规渲染模板。

template get_node_proxy_render_template(node 节点)

参数和返回值

  • node node - 要查询的写入节点。
  • 返回值:template - 此节点配置使用的代理渲染模板。

示例

>>> import sgtk
>>> eng = sgtk.platform.current_engine()
>>> app = eng.apps["tk-nuke-writenode"]
>>> nodes = app.get_write_nodes()
>>> app.get_node_proxy_render_template(nodes[0])

get_node_proxy_publish_template()

获取配置中定义的一个模板,该模板决定指定的写入节点将代理渲染图像发布到哪个位置。

如果指定的节点未配置代理发布模板,将返回常规发布模板。

template get_node_proxy_publish_template(node 节点)

参数和返回值

  • node node - 要查询的写入节点。
  • 返回值:template - 此节点配置使用的代理发布模板。

示例

>>> import sgtk
>>> eng = sgtk.platform.current_engine()
>>> app = eng.apps["tk-nuke-writenode"]
>>> nodes = app.get_write_nodes()
>>> app.get_node_proxy_publish_template(nodes[0])

get_node_published_file_type()

获取配置中定义的一个发布文件类型,为指定的写入节点渲染的图像创建发布文件时,将使用此类型。

string get_node_published_file_type(node 节点)

参数和返回值

  • node node - 要查询的写入节点。
  • 返回值:string - 此节点配置使用的发布文件类型。

示例

>>> import sgtk
>>> eng = sgtk.platform.current_engine()
>>> app = eng.apps["tk-nuke-writenode"]
>>> nodes = app.get_write_nodes()
>>> app.get_node_published_file_type(nodes[0])

generate_node_thumbnail()

为指定的写入节点生成缩略图。此方法会将序列中间的一帧渲染到一个临时文件 (.png),最大尺寸为 800x800 像素。当不再需要此文件时,调用程序负责清理此文件。

string generate_node_thumbnail(node 节点)

参数和返回值

  • node node - 要查询的写入节点。
  • 返回值:string - 渲染的缩略图图像在磁盘上的路径。

示例

>>> import sgtk
>>> eng = sgtk.platform.current_engine()
>>> app = eng.apps["tk-nuke-writenode"]
>>> nodes = app.get_write_nodes()
>>> app.generate_node_thumbnail(nodes[0])

reset_node_render_path()

将指定的写入节点的渲染路径重置为与当前脚本一致。

None reset_node_render_path(node 节点)

参数和返回值

  • node node - 要查询的写入节点。
  • 返回值:None - 不返回任何值。

示例

>>> import sgtk
>>> eng = sgtk.platform.current_engine()
>>> app = eng.apps["tk-nuke-writenode"]
>>> nodes = app.get_write_nodes()
>>> app.reset_node_render_path(nodes[0])

is_node_render_path_locked()

判断指定的写入节点的渲染路径是否已锁定。

bool is_node_render_path_locked(node 节点)

参数和返回值

  • node node - 要查询的写入节点。
  • 返回值:bool - 渲染路径锁定时返回 True,否则返回 False。

示例

>>> import sgtk
>>> eng = sgtk.platform.current_engine()
>>> app = eng.apps["tk-nuke-writenode"]
>>> nodes = app.get_write_nodes()
>>> app.is_node_render_path_locked(nodes[0])

convert_to_write_nodes()

将在当前脚本中找到的所有 Shotgun 写入节点转换为常规 Nuke 写入节点。其他 Toolkit 信息将存储在名为“tk_*”的用户旋钮上。

None convert_to_write_nodes()

示例

>>> import sgtk
>>> eng = sgtk.platform.current_engine()
>>> app = eng.apps["tk-nuke-writenode"]
>>> app.convert_to_write_nodes()

convert_from_write_nodes()

将之前从 Shotgun 写入节点转换而来的所有常规 Nuke 写入节点转换回 Shotgun 写入节点。

None convert_from_write_nodes()

示例

>>> import sgtk
>>> eng = sgtk.platform.current_engine()
>>> app = eng.apps["tk-nuke-writenode"]
>>> app.convert_from_write_nodes()

process_placeholder_nodes()

将任何占位符节点转换为完整的 Shotgun 写入节点。这主要用于在 Nuke 中首次打开脚本时转换由 Hiero Toolkit 脚本导出器创建的占位符节点。

None process_placeholder_nodes()

示例

>>> import sgtk
>>> eng = sgtk.platform.current_engine()
>>> app = eng.apps["tk-nuke-writenode"]
>>> app.process_placeholder_nodes()

相关应用和文档

发布

本文档介绍仅当控制 Toolkit 配置时可用的功能。有关详细信息,请参见《Shotgun 集成用户手册》(https://support.shotgunsoftware.com/hc/en-us/articles/115000068574-Integrations-User-Guide#The%20Publisher)。多发布是一个工作流应用,美工人员可以使用它向 Shotgun 发布文件。该应用提供了一个建立在高度可自定义核心上的简单 UI,可轻松对其进行配置以发布工作场景及其从属项(例如 Maya 场景、Nuke 脚本、OBJ、Alembic 缓存、摄影机、纹理等)中的文件或数据的任何组合。多发布应用用于所有默认配置中,可以轻松进行配置以支持以下各种工作流:在 Maya 中生成 Alembic 缓存、在 Nuke 中渲染发布、在 Photoshop 中进行美术参照管理或在 Shotgun 和 Shell 环境中进行图版插入。

发布

详细信息待定

安装和更新

将此应用添加到 Shotgun Pipeline Toolkit

如果您想将此应用添加到 Project XYZ 中,请在名为 asset 的环境中执行以下命令:

> tank Project XYZ install_app asset tk-nuke tk-nuke-writenode

更新至最新版本

如果您已在某个项目中安装了此应用,要获取最新版本,可运行 update 命令。您可以导航到该特定项目随附的 tank 命令,并在该项目中运行它:

> cd /my_tank_configs/project_xyz
> ./tank updates

或者,也可以运行您的工作室的 tank 命令并指定项目名称,指示该命令要对哪个项目运行更新检查:

> tank Project XYZ updates

协作和代码演进

如果您可以获取 Shotgun Pipeline Toolkit,意味着也可以获取我们在 GitHub 中存储和管理的所有应用、插件和框架的源代码。欢迎根据实际需要演进和完善这些内容,以它们为基础做进一步的独立开发,修改它们(以及向我们提交 Pull 请求!),或者只是随手玩一玩,简单了解它们的构建方式和 Toolkit 的工作原理。您可以通过以下网址访问此代码库:https://github.com/shotgunsoftware/tk-nuke-writenode

特殊要求

  • 需要安装 Shotgun Pipeline Toolkit 核心 API 版本 v0.14.37 或更高版本才能使用此功能。
  • 需要安装插件版本 v0.2.3 或更高版本才能使用此功能。

配置

下面是使用的所有配置设置的摘要。您需要在要启用此应用或插件的环境文件中定义这些设置。

template_script_work

类型:template

说明:引用一个模板,该模板用于定位磁盘上的 Nuke 脚本工作文件。此参数用于驱动渲染的版本和(可选)名称。

write_nodes

类型:list

说明:这是一个词典列表,其中的词典定义了此配置支持的 Shotgun 写入节点。每个词典条目需要具有以下键:“Name”- 此节点的描述性名称。“file_type”- 渲染使用的文件类型(exr、cin、dpx 等)。此参数将在渲染时传递给 Nuke 写入节点。“settings”- 给定文件类型的配置设置(以词典形式)。此参数也将在渲染时传递给写入节点。接下来,您需要两个名为“render_template”和“publish_template”的条目 - 它们控制工作流各个阶段的数据写入位置。这些模板需要包含“version”字段,并可选择性地包含“name”、“width”、“height”(体现渲染的图像分辨率)和“output”(区分不同的写入节点)字段。如果您要进行立体渲染,并且想使用 Nuke 的 %V 标志,请包含“eye”字段。Shotgun 写入节点计算路径时,会将路径中的此字段替换为 %V。最后,您需要“proxy_render_template”和“proxy_publish_template”模板,它们与常规的渲染和发布模板要求相同,只是适用于代理模式下的渲染。如果缺少这些模板(设置为空),将改用常规模板。

关注

0 评论

登录写评论。