TouchDesigner是什么?
简单来说就是一种可视化的编程语言。TD 是一种编程语言。TD 不是一个 APP 应用程序,像一般程序那样可以很容易的开始执行动作。touchdesigner 是基于节点的图形化编程软件。这意味着,我们不用打开一个文本文档然后一行行敲代码,TD 用图形化界面来通过节点创建程序。TD 的每一个节点或 OP 元件,执行一个具体的,小的,独立动作。实现一个整体功能,需要多个节点共同完成。它们的输入和输出连接在一起,来传递信息。
基础知识
创建OP元件
在界面双击创建OP元件,或者用快捷键"Tab".(貌似有些windows版本不支持Tab快捷键)。
在OP元件的输出端口鼠标右键可以创建新的OP元件,鼠标中键创建的 OP 会在原链路外,新建一个并联的分支。
在创建 OP 时,有 2 个超有用的快捷键:“ctrl”和“shift”。打开创建 OP 对话框,按
住“ctrl”,然后连续选择多个 OP,这些 OP 会按顺序从上到下添加进界面。这招可以把几个
OP 快速添加进项目。
按 SHIFT 也是一样的操作方法。区别是,这样创建的 OP 会从左往右直接串联好,这种
方法可以快速创建已经连号线的若干 OP.
鼠标和键盘导航
点击图中的 i,可以获得更多所选 OP 元件的详细信息。
在 TD 工程中导航,有一些快捷键。其中两个是 i 和 u 键。
u 键会跳出当下组件,进入上一层网络。
i 键相反,进入一个网络或组件。
如果想看到某个网格中的所有 OP 元件,按 h . 它相当于执行当下网格的 home 动作。
(我这个window的快捷键没有反应,可以使用鼠标滚轮进入或者跳出组件,鼠标右键选择Home All使画面居中显示)
使用外部文本编辑器
TD 中本身可以创建和编辑简单的脚本。不过随着脚本增长,用外部的编译器会
更省事快捷。这样会有一大堆好处,我们简单列举:
代码行号;
分颜色的代码;
查找替换功能;
自动联想语句;
所以,在 TD 中广泛使用 Python,会让你的工作更高效。
Sublime Text 编辑器链接
Notepad++ 编辑器链接
在 Text Editor选择安装编译器的exe文件就好。
帮助
关于程序和具体 OP 元件的任何问题,可以参考官方的 WiKI.每个 OP 有两个快捷方式,
可以指向一个 WIKI 中的网页。
它们位于参数窗口,外形都是问号的样子。其中一个介绍本 OP 元件的用法。 另一个带
Python Logo 的问号,是专门介绍跟这个 OP 相关的 Python 语句的。
参数窗口
在参数窗口可以访问所有 OP 的参数。
有两种方法打开它。
一种是用“P”键,这样会打开一个停靠在窗体右上角的固定窗口。它会显示任何你当下
选择的 OP 的参数。(window版本P无效)
另一种是直接右键 OP,选择 Parameter(参数),这样会打开一个浮动窗口。这种方法的
区别是,此时如果你选了别的 OP,这个窗口的参数还是之前那个 OP 的参数。
想要同时操作多个 OP 的参数时,第二种方法会很有效。虽然每个 OP 的参数设置都不相
同,但它们都用相同的参数选项。下面是个某个 OP 选项的参数。
从左往右,这些参数分别是:
- 元件帮助:在浏览器新窗口中打开 OP 的 WIKI 帮助页面。
- 元件 Python 帮助:在浏览器新窗口中打开 OP 的 Python 帮助页面。
- OP 信息对话框:显示 OP 程序的信息,效果等同于中键点击 OP
- 备注: 显示和编辑 OP 的备注
- 复制参数:显示通过邮件点击菜单复制的参数
- 语言:选择用 Python 还是 tscript 作为 OP 的脚本语言
- 展开/合并参数:展开或合并显示这个 OP 的全部参数
- 非默认参数:只显示被改动过,非默认状态的参数。
参数
1.常数类型
常数类型下,它显示当前值,并且可以被编辑和输入。
大多参数的默认类型是常数型,它的数值区域显示为灰色。
第一个是这个参数脚本的名字。
在 TD 的任何一种脚本语言中,任何时候引用参数,都需要脚本名称。
Noise CHOP 的 Roughness 参数的脚本名称是’rough’。
在 Python 中设置 Roughness 的值为 1 的语句如下:
op(‘noise’).par.rough = 1
2.表达式类型
点击蓝色方框,可以变为表达式类型。
表达式类型下,它显示对应的 Python 脚本。这些表达式可以被输入和编辑。
3.输出类型
要是想变成输出类型,需要把某个 CHOP 元件的 channel 拖到参数上,然后输出类型的小方框会被自动选上,后面的背景色也变成了绿色。
数值区域被一个冒号分为两部分。冒号前是来源元件的名字,冒号后是那个来源元件中
的参数名称。因为这些值会被其他 OP 应用,所以在输出类型下,参数不能被编辑。
运动控制
- 把时间轴拖到第一帧
- 暂停时间轴
- 反向播放
- 正向播放
- 后退一帧
- 向前一帧
- 在选定范围循环播放
- 在选定范围播放一次,并停在最后一帧
最常用的功能是开始和暂停。用空格键实现。
时间轴设置
除非有视频或动画被锁定到时间轴上了,否则一般来说,不用经常操作时间轴的设置。时间轴设置在屏幕左下角,重点是要知道,这里可以改变工程运行的帧速度或节奏。 帧速度决定了项目渲染每一帧的速度,默认是 60 帧/秒。也就是说工程会尽量保证每秒渲染 60 帧画面。
节奏决定了项目每分钟的节拍数,Beat CHOP 这东西会用到它。时间轴设置常用在媒体或者动画需要被锁定在一个一致的时间轴上的情况。 帧控制包括’Start’ 和 'End ',用来控制时间轴的第一帧和最后一帧。同样,‘RStart’ and 'REnd’则是用来控制时间轴循环播放的开始点和结束点。通过这些设置,既能创建一个横跨整个时间轴的4000 帧动画,也能实现循环播放时间轴的一小部分。
分屏显示
在网络之间来回移动和跳转的时候,经常用分屏可以节约很多时间。你要是穿过三层网络来改变一个参数,哪怕只是跳回去看一下变更,都会很浪费时间。而用分屏功能可以把窗体分割成任意块,这样就不用跳来跳去了,每个面本都能保存以供将来使用。
关于面板分屏的快捷键有这些:
- Alt + [:从鼠标处垂直切分面板
- Alt + ]:从鼠标处水平切分面板
- Alt + Z:关闭鼠标所在面板
实时渲染
实时渲染能合理地分配资源,在 GPU 不足时也可以进行编辑。当它被激活(默认激活),TD 会优先使用真实时间。举个简单例子,如果一个影片长 30 秒,不论发生什么,TD会让他播放 30s。如果因此导致帧速度被降低,TD 会试着用虚拟时间。这种模式在实时装置和高性能要求的工作中经常用到。当实时渲染被关掉,TD 将优先渲染真实时间。
**
常用快捷键
**
当鼠标悬停在网络上方,下面的快捷键可以使用:
‘P’ 打开/并关闭选定 OP 的参数窗口
'O’在面板左下角打开和关闭当前网络的概览。
'C’打开和关闭资源查看器。这可以为选定的 OP 添加一个彩色的轮廓,以方便识别
'A’允许与 OP 在状态窗口和编辑窗口之间进行切换
'B’忽略或取消忽略选择的 OP
'H’执行总览网络的动作,实现在屏幕中看到当前网络的所有 OP
‘Shift + H’ 在屏幕中查看所有选择的 OP
'R’切换 OP 的渲染标志(如果有)
‘D’ 切换 OP 的显示标志(如果有)
‘Control + C’ 复制选择的 OP
‘Control + V’ 粘贴复制的 OP
‘Control + Shift + V’ 在鼠标处粘贴复制的 OP
**
TOP元件
**
图片纹理元件,即 TOP,几乎会在每个项目中用到。他们用于处理影片播放、3d 渲染、合成、硬件视频输入输出等这些动作时的图形操作;被用于表现任何输出到监视器、投影机、或 LED 上的东西。
movie元件
在 TOP 元件里,Movie 是最常用的种类之一。 它的功能是把资源加载进 TD。它能加载多种不同资源,从静态图片到各种视频编码格式。 下面是一部分 Movie 常用的文件格式。
.mov、.mp4、.avi、.jpg、.tiff、.png
还有很多其他支持的格式,在 wiki 的’File Types’页下有它们的清单.
在 Movie 中,有一些很棒的功能,可以大大减少那些令人头疼的不同帧速度的资源的采集和输出。一个主要的功能是,Movie 的目标是按真实时长播放资源 。 举个例子,如果项目设置是 60FPS,有一个 10S 的 30FPS 的资源,它会播够 10S 的时长,而不管项目和资源之间的帧速度的差异。相反也是一样。一个 60FPS 的 10S 资源,在一个 30FPS 的时间轴上播放,也一样会播放 10S。在上面这两种情况下,帧数被增加或减少,来匹配真实世界的时长。因此在某些情况下,使用插入帧会成为一个好办法。
预加载影片
在’moviein1’元件的’ 'Tune’参数下,有一个’Pre-Read frames’参数。
'Preload’按钮用下面的 Python 函数来预加载’Pre-Read frames’值所代表的帧数。
op(‘moviein1’).preload()
'Play’按钮开始播放 Movie。‘Unload’停止播放’moviein1’,卸载影片,释放系统资源。
下面的 Python 脚本可以完成这些工作。
op(‘play’).click(0)
op(‘moviein1’).unload()
播放影片前,最好预加载,否则就等着播放的时候卡成狗吧。
NullTOP 和SelectTOP
相比那些费资源的 TOP,比如 Blur TOP,另外一些 TOP 是不需要占用系统资源的,能随便用。 比如 Null TOPs 和 Select TOPs。 尽管这两个 OP 不改变任何元素,但在创建高效的流程上非常有用。
一个布局合理的网络常被放在 Null TOP 和 Select TOP 里,而不是任由连线交错重叠,难以辨识。
上面图片是一大堆 TOP 混在一起。这个项目没有考虑网络布局,接线被 OP 和其他接线重叠覆盖,难以判断 OP 之间的具体关联。
在这个图片里,先用一些 Null TOP 汇集了所有信号,然后才将这些 TOP 组合起来。这些 Null TOP 可以作为一个节点,在快速浏览时,能更容易的追踪 OP 之间的联系
Select TOP 也是一样。当使用嵌套网络,使用 Out TOP,在容器之间连线,会产生和上
面一样的情况,网络很快变得难以辨认。Select TOP 则可以快捷整齐地引用其他 TOP。
上面的图片演示了用 In TOP 和 Out TOP 会额外导致怎样的杂乱。这个例子复制了 12 遍影片。
这个例子成倍增加了所复制的组件的数量,同时显得更清晰明了。更有趣的是用 Select TOP 创建的动态选择系统。这比之前的手动方法要高效的多,允许用 SelectTOP 的 Select 参数中的 Python 脚本,根据名称,来自动引用从上面网络中复制来的相应TOP。在这个观念上更进一步,在 Replicator 复制器的使用上,如果 master 中能有一个selectDAT,每个新产生的子节点都会引用外部数据。
编码器
视频播放是一个繁杂的过程。 明智的做法是花时间尝试不同的编解码器,看哪种在视觉效果和性能的均衡上最适合该项目。
在开始操作具体的编码器前,了解编码器和容器之间的区别很重要。 编码器是音视频文件合格的总称,它容易让初学者弄混。 因为容器可以容纳多种编码器。
编码器是用来压缩和解压的。它有两个主要任务,第一个是压缩视频数据以便于储存和传输;第二个是解压视频数据来播放。因为这两种不同任务的存在,每个编码器有不同的侧重。一些倾向于把文件压缩成小体积,便与传输;而另一些侧重压缩为画质高,适合长期保存的影响。不同项目有不同需求,有时候,目标是用最高质量播放一个内容,另一些时候,必须降低画质来同时播放多个文件。为项目选择正确的编码器需要经过一些测试和思考,但可能会花不少时间。容器的作用,跟它的名字一致。它可以容纳压缩的视频,音频,以及所有一个影片需要解压个播放的数据内容。在 TD 中有多种不同的容器,不过相对于编码器,他们对整个项目的流程影响区别不大。
当不同种类的容器和编码器组合使用,事情会变得复杂。想像下,有个叫’test_movie.mov’ 的视频文件。在一个项目中,这个文件是个QuickTime 容器中的一段Animation 格式压缩编码的.mov 文件。有趣和让初学者迷茫的是,在另一个项目里,它是一段 H.264 压缩编码的文件。更混乱的是,这个 H.264 文件可能还在一个 MPEG-4 容器中,用’.mp4’做后缀。抛开这些混乱,目前的 HAP 家族中用很多流行的编码器可选。H.264, Animation 编码,还有 Cineform。每个编解码器都有自己的优点和缺点。下面是这些编码器的优缺点对比。
IntroductionToTouchDesigner
HAP 家族:
Pros
优点:
可以播放极高分辨率和高帧速率视频
极低的 CPU 消耗
HAP Q 是视觉无损压缩
极低的 GPU 消耗
缺点
大文件大小
难在窗口上编码文件
必须使用固态硬盘或 SSD RAID0 文件播放
主要瓶颈是硬盘读取速度
H.264
优点:
可制作轻量级视频
视频画质相对压缩程度,做的最好。
磁盘使用率低
缺点
需要大量的处理器内核来播放极高的分辨率或高帧速率。
如果在编码中不正确的话,会感到颜色分层化
比特率随内容变化明显
长宽分辨率都是 409
难以创建 alpha 通道
Animation Codec
优点
100%无损文件
优先考虑质量
自带支持 Alpha 通道
缺点:
文件很大
对硬盘和 CPU 的要求都很高
比特率随内容变化明显
Cineform
优点
恒定比特率
高图像质量
自带支持 Alpha 通道
缺点:
文件大
必须购买 cineform 软件编码
**
CHOP元件
**
数据通道类元件,Channel Operators,缩写为 CHOP。是一个负责各种通道类数据处理的元件家族。它可以处理诸如手势交互、音频输入、动画关键帧、硬件输入(Kinect 体感相机、LeapMotion 手势识别设备、Oculus 虚拟现实设备、Pen Table、键盘、麦克、等等)、DMX 调光、MIDI 电子音乐以及 OSC。
这些元件处理输入、运算、输出,并将数据与各种视听设备连接。
例如:
Mixers 调音器、MIDI 控制器、合成器、DMX 调光控制器、Kinect、运行有TouchDesigner 的其他电脑、扬声器、以及其音视频应用如 Max/MSP,Ableton Live,Resolume。
通讯方式
MIDI 与现有的很多软硬件有不错的兼用性。数字音乐工作站-DAW,例如 Ableton Live,Avid Pro Tools, Propellerhead Reason 等等,都支持 MIDI 的输入输出。它是一种快速稳定并经过实践考验的协议。调音器通常配备 MIDI USB,它的输入包括按钮、faders、琴键、触摸板、滚轮、节拍器、电位计。程序运算系统诸如 Cycling 74 Max/MSP, PureData, Native Instruments Reaktor 等等,都已经支持 OSC 通讯。得益于现代网络通讯技术,OSC 有着比 MIDI 更高的性能和更好的架构。OSC 消息可以在 UDP 和 TCP 连接中传输,因此它很容易实现实时长距离的网络传输。目前,OSC 是软件和计算机系统之间通讯最常用的方式。
DMX 是供灯光和控制器之间使用的协议。许多DMX 设备都有多路调光、灯光跟随、RGB 通道、自动化电机等等。许多灯光控制器用 DMX 与其他设备或电脑通讯。当你打算用这些控制器和平台组建项目时,记得认真参考他们的手册。一般来说,就算有些功能这个项目用不上,你也应当有所了解。有多种方式优化 DMX 的数据收发流程,这些将在后面提到。同步输入类 CHOP 和同步输出类 CHOP,通常用于 TD 的内外接口的帧同步。他们用 OSC做底层的通信协议。这两类 OP 通过在每一帧通讯同步状态来工作。当所有同步设备确认,自己已经完成本帧的渲染,他们会同时进入下一帧。通过在每一帧重复这些事件来保证设备间的画面同步。
音频输入与输出
音频有多种来源和多种处理方式。TouchDesigner 能够使用音频文件,视频文件,外部音频接口,网络音频流等资源,来获取并处理音频。甚至也可以无需来源,自己生成音频。
大多涉及声音设计、音频音轨的项目都会有专用的音频文件。TD 能够读取和播放很多标
准的音频文件格式,如 MP3,WAV,AIFF。通过 CHOP 元件中的 Audio File In 和 Audio FileOut,这些音频文件可以被循环、修建、重建、插入,以供各种设备使用。
Audio Movie 型 CHOP 可以从视频文件中播放音频文件。不同于从文件中播放音频,该元件引用了一个 Movie In 型 TOP 元件。这样可以使音频与视频保持同步,并有一些参数来使音频更好的匹配视频。
TD 兼容多种外部音频接口,详细的兼容列表,最好去参考 TD 的维基百科和论坛。
这些外部设备可以提供各种模拟和数字音频的输入和输出。人声、乐器、摄像机、调音台、计算机,都可以作为音频的输入源。TD 中与外部音频接口通讯的是 CHOP 元件中的Audio Device In 以及 Audio Device Out. 他们分别处理输入和输出。 另外还有个 Audio SDI元件(SDI 指的是 Serial digital interface,此元件只有在购买 TouchDesigner Pro 版本之后才会出现),专门跟英伟达的 Quadro SDI 通讯,采集外部音频。
TD 能访问两种音频驱动。DirectSound 是基于 DirectX 的成熟驱动,被大量使用。而在TD 088 版后,加入了 ASIO ,它可以改善 DirectX 的一个主要缺陷-必须基于 windows。它能绕过系统,直接与音频设备通讯,从而获得更低的延时。
采样率-SampleRates
上图是音频应用中的一个基本功能:静音。它用 button的输出值(1 或 0),和音频流数据相乘来控制静音。
在第一图的基础上加入增加了两个元件。一个是 Filter CHOP,它可以在按钮的两种状态之间创建一个平滑处理后的数值。另一个元件是 Resample CHOP。
让音频开关加上淡入淡出效果。
初学者常常会忽略不同原件之间的采样率的区别。但想要创建可自由编辑音频,必须了解这一点。比如 Oscillator CHOP 的采样率是 44100 次每秒,Filter CHOP 采样率是 60 次每秒。这就意味着,当这两者联用的时候,不可能是 1:1 的采样比,在进行乘法运算的时
候,并不会变成一个平稳上升的直线。更准确的说,前者的数据量是后者的 735 倍。也就是说,Oscillator 每过 735 个音频单元,Filter 才会有一次声音上的变化。就像下图中,蓝线是1:1 的采样比,红线是 735:1 的采样比。
再看上面这张图,当这两个不同采样率的通道相乘,有一个很明显的阶梯变化。很多CHOP 元件用 FPS 帧速度作为他们的采样单位。到项目的帧速度被设置成 30FPS 的时候,阶梯将会变得更夸张,比率将变成 1470:1。也就是说在一个帧速度为 30 的项目里,每过1470 个取样,才有一个会产生声音的变化。
上面的例子强调在项目中需要注意元件的采样率,以及按需求使用 Resample CHOP。
除此之外,也有一些情况需要让输入输出数据使用不同的采样率。
时间片段化处理机制-TimeSlicing
一个片段单位是最后渲染帧和当前渲染帧之间的时段。把时间片段想象为一个动态的值,如果一个项目稳定运行在 60 帧,那么时间片段就是 1(因为并没有掉帧)。如果这个项目的实时渲染跟不上,每次渲染中间都丢 10 帧,那时间片段就是 10(当前渲染帧和上一个
渲染帧之前实际上差了 10 帧)。
当存在掉帧现象时,时间片段化处理机制的存在就是为了平滑输出的 CHOP 数据。简单地说,时间片段化处理机制会在 CHOP 渲染的时候去考虑每个事件片段的 长度。这种机制可以看作一种自适应处理,当时间片的长度增加,CHOP 会根据丢失帧的数量做出补偿,调节帧数量,来实现平滑的输出。形成鲜明对比的是没有做时间片化处理的 CHOP。他们在最后一帧处理完数据后,不管中间丢了多少帧,都会直接跳到下一帧的数据 。只有 CHOP 元件能使用时间片段化处理机制。
在上面的例子里,如果时间轴以 30FPS 的速度持续运行,每个时间片段就是 1 帧的长度。如果在一秒钟内或者说 30 帧内,有两条线路的数值都是从 0 到 1,输出都是平滑型线路。但由于某些原因,每 10 帧才有一帧能被处理,两条线路的结果就会大不相同。在没有时间片化的线路中,在处理的那一帧,由于中间帧的丢失,数据会明显跳跃。 有做时间片化的CHOP 会注意到每过 10 帧才有一帧能被处理,所以它会在当前帧和最后一帧之间插入中间帧。这样就可以保证不论发生什么,数据都是平滑的。下图可以说明上面的例子。红线是时间片化后的输出,蓝线是没做片段化机制输出的帧,绿色垂直的线是渲染过的帧。
**
DAT 元件
**
DAT 元件主要用来处理数据。他们可以编辑、分析、创建、收发多种类型的数据。比如文本字符串、列表、Python 脚本、XML、JSON、MIDI、串口、OSC。
项目中的逻辑处理,主要就靠 DAT 元件和 Python 脚本。比如分析列表数据信息,管理其他元件状态、通过外部通讯执行复杂任务,等等。后面会有一些这方面的例子。
TD 可以看作是一个模块化的 Python 编程环境。复杂、长篇的 Python 工程和函数,在这里被拆分,变成轻量化、模块化的片段。就像 TextDAT 元件那样。这种设定易于学习、维护、和扩展的特性,大大方便了分享和项目协作。
通讯方式
TD 原生支持 MIDI、 OSC、 TCP、 UDP、 UDT 以及 Websocket,所以它能跟多种系统如 Web 应用和服务、其他计算机系统、 显示控制硬件等通讯。
CHOP 元件中的 MIDI、OSC、DMX 协议 在 DAT 元件中也适用。
TCP 是因特网的标准通信协议。它是一个面向连接的协议,在通讯双方中有明确的客户端和服务器,并且在传输数据前,先要进行握手连接。这种连接是可靠的,通讯双方可以校验确认所有数据都已经被接收,也就是没有数据丢失。TCP 是一种顺序流通讯,发送方按一定顺序发送,接收方也按一定顺序接收。
而 UDP 是一种无连接的协议。数据发送前,不需要建立连接。UDP 是不可靠的,可能会产生丢包、粘包等问题,不过它的通讯速度更快。
UDT 是一种新的通讯协议,它是 TCP+UDP 的优化版。它基于 UDP,但是是有连接的可靠通讯。它用了 TCP 那套校验规则,还保持 UDP 的收发速度。
无连接协议有个好处是能多播。比如你的系统里有一大堆电脑,多播能一次性发给网络中的全部电脑。避免了逐个发给每台电脑产生的性能开销。相对应的单播,就得一台一台发。
Websocket 用于跟 Web 浏览器和实时 Web 应用通讯。它在一些双向网络通讯的功能上做了简化。
**
SOP元件
**
Surface 元件,亦称 SOP,在整个元件大家庭中负责处理所有与三维有关的操作。
它包含简单的三维几何体,粒子系统,建筑模型,三维字体等等。因为学习难度稍大以至于 SOP 经常被许多初学者忽视。但是请放心坚实的 SOP 操作知识将给你带来许多意外的惊喜,项目中的灵感,以及提供许多非常有效的解决问题的方法。
许多项目涉及到投影映射,实时三维运动捕捉,建筑表面 LED 空间分布,视频分层播放,而如果没有 SOP 元件这将是非常困难或者不可实现。
TouchDesigner 088 目前所支持的 3D 文件类型有:
- .fbx
- .obj
- .3ds
- .dxf
- .dae
保持元件的渲染流畅度是至关重要的。而当它来自 SOP 时,这一点显得尤为重要。通常的操作是将变换的动画数据给到 GeometryCOMP 元件,而不是直接给到一个 SOP 元件。因为 SOP 变换是在 CPU 上执行,并且会将几何体上的每个点都执行一次。而组件级别的变换会将三维几何体或对象视作一个整体,在GPU 上只运行一次。在 GPU 上的一个单独的操作与在 CPU 上成百上千次的操作相比,前者当然更有效率。
模型上的点数,基元数,顶点数与网格数取决于正在被执行操作模型,但基本原则都是模型的顶点或多边形面数越多,电脑操作时需要的运算能力与分配的 GPU 内存也越大。对于复杂模型 TouchDesinger 有内置工具可以减少多边形面数,但是使用专业的模型工具优化几何体会提升更大的灵活性。
渲染
一个三维场景由三部分组成:
- 三维几何体(包含材质)
- 摄像机
- 照明
上图可以看到需要被渲染到场景的三个元件:摄像机,灯光与三维几何体,都被 Render TOP 所引用。我们要对它们逐一介绍,然后观察如何将它们连在一起。
三维模型可以是简单的多边形,三维动画人物,建筑模型等等。无论导入还是生成模型,所以的操作都使用 SOP,并且这些 SOP 以Geometry 组件结束。在 TouchDesigner 中,SOP 自身从不直接被渲染,被渲染的是包含持有渲染标记 SOP 的 Geometry 组件或 Geometry COMP。
上图将一个简单几何体发送给四个有着不同位置的Geometry COMP。 出于案例演示的目的,这个案例使用的是一个 Box SOP,但是它可以是其他更加复杂的模型,这种复杂的模型还可以加上一些动画和交互性。 让我们回顾一下知识点:SOP 不能直接渲染,它只在逻辑上将可以容纳迭代的模型载入一次,然后在 GeometryCOMP 上渲染。
这与前面的案例不同,它是一个单独的 Geometry COMP 中包含有被渲染的三个不同的模型。记住这点:Geometry COMP 是被渲染的,它将其元件内要被渲染的模型视为一个组。现在看起来这并不是一个很重要的行为,但是随着项目越来越复杂,节约资源将会变得非常重要。
到现在为止,各种几何体都没有材质。材质可以将三维场景变得有趣。使用水泥做的方块与普通盒子之间的区别就是材质。纹理可以被应用于两个级别中:SOP 级别与 Component 级别。第一种方法是使用 Material SOP,第二种方法是在 Geometry COMP 的“Render”面板引用材质。在上图中,虽然材质看起来是一样,但是它们使用不同的纹
理映射方法。
这个图与上一个图的是相同案例,但相同的纹理其效果看起来完全不同。这是因为 UV 贴图坐标被改变。
三维场景的第二个部分是灯光。就如现实生活一样,三维场景需要照明。
在这个案例我们看到一个简单的盒子被渲染,但是在 RenderingTOP 中却没有可见的部分。这是为了通过将光线的明暗(dimness)被设置为 0 以说明照明的重要性,并且它是如何经常被忽视的。
渲染三维场景的最后一部分是摄像机。摄像机是眼睛和视角。摄像机看到什么就会渲染什么。
上图的整个场景中的运动都来源于摄像机的运动。通常,当我们将摄像机放置好之后,就把它忘记了。这会导致一个静态,没有活力的枯燥场景。不要害怕像一个摄影师一样思考,尝试改变摄像机位置,焦距与摄像机运动。
摄像机两种类型:透视摄像机与正交摄像机
透视摄像机:
透视摄像机不用多解释,它的工作原理如人眼。透视摄像机由透视点与视锥用于决定摄像机看到的画面将被如何呈现。对于透视摄像机,整个的三维场景都像是集中到一个点。透视校正,亦称“近大远小”,被应用于场景中的所有对象,即对象距离摄像机越远看起来越小。
这种摄像机最经常被应用于模型人眼。
这个案例重点展示透视效果。有两个相同的立方体。在场景中放置较远的立方体显示较小,如现实中看到的一样。这是透视摄像机功能的最简单演示案例。
正交摄像机与透视摄像机有很大不同。正交摄像机的核心原理是没有透视点。三维场景中的所有灯光都不会像在透视摄像机中那样有一个唯一的透视点。对象不会在它们的Z轴上发生变形,意味着无论它与摄像机的距离如何改变,它都不可能看上去比场景中的其他对象更大或更小。
透视摄像机
这个场景与“透视摄像机”完全一样,但是最大的不同是渲染画面,无论两个立方体在 Z 空间如何定位,它们都并排显示。
摄像机在投影映射项目中同样重要。投影映射将在以后的案例中探讨,但现在,关键在于理解摄像机的另一个重要角色。在投影映射中其目标是将现实对象变成三维显示表面。要做到这一点,一个对象模型需要被导入到 TouchDesigner,使用各种资源来为它添加纹理。这个纹理对象接下来需要被渲染。Camera COMP 用来模拟现实中的投影机。收集尽可能多的投影机的特征信息以及它的镜头,Camera COMP 可以在 TouchDesigner 中精确模拟投影机的视野设置(FOV)。这些视野设置将被渲染,输出,校准与 lined up 现实对象,这就是投影映射的基础。
**
COMP元件
**
有三种类型的 Component 元件亦称 COMP,各有用途:
- Object 组件创建、照明与观察三维场景 。
- Panel 组件创建 UI 组件如按钮、滑块与窗口面板。
- Other 组件创建关键帧动画,复制元件,创建输出窗口。
组件元件通常与其他元件组合使用。“Object”组件通过多种组合用于创建与渲染 SOP和三维场景。“Panel”组件用于创建 UI 和其他的元件 (例如配合 container 等) 制作操控输出端的 UI 操作面板。“Other”组件用于完成各种任务,如关键帧动画,动态复制元件,在多输出端显示不同窗口等等。
一个有趣的事实是如此庞大的 TouchDesigner 由本身的内部组件组成。理解这一点非常有助于对 TouchDesigner 的细节把握,以及理解 TouchDesigner 在项目中的运作。 例如所有的面板组件都是由其他元件组成。创建一个 Button COMP,进入它的网络,它的背景是由一个 Text TOP 创建,它的 开/关值是被一个 Panel CHOP 生成。相似的,TouchDesiger 的所有 UI 都是被创建并存储于所有项目根目录的“ui”容器内。甚至菜单与对话框,如 MIDIMapper Dialog 与 Variable Dialog 都是由 TouchDesigner 的其他组件创建。
这个案例介绍一个非常有用的练习,以及一些 WindowCOMP 的功能。这是使用 Container COMP 作为 Window COMP 的输出目标的最佳练习。
这使得即使在 Perform Mode,TOP 中显示的内容也可以在不同输出端之间任意拖动。如果我们仅仅使用 container,我们没法去设定窗口的大小和位置,以及选择输出端口,而这些通过 windowCOMP 就能完成。
这个案例中的其他方法都是比较简单的。利用 Open Window 按钮打开图片,然后利用Change Monitor 将图片在不同输出端之间切换。MonitorsDAT 是个很有意思的元件,在这个案例中用以动态检查有多少显示器被连接。
用户界面组件
组件元件可以在 TouchDesigner 中创建用户界面这使得它显得非常重要。具体而言,Panel 组件提供这些功能。
三个用处最大的 Panel COMP:
- Slider COMP
- Button COMP
- Container COMP
-
前两个的功能与其他应用程序中的滑块与按钮功能一样,但是可以依照需求不同而修改。按钮可以被编程为开关,单选,或者单次点击事件。滑块可以被定义为单轴滑块或全方向滑块(例如一个 UV 的二维区间) 然而,Container COMP 就仅仅是一个存放其他元件的容器,没有很特别的地方。
在这个简单 UI 的案例。由下向上观察这个网络结构,有 2 个 ButtonCOMP 与 5 个 Slider COMP。这些是被用来创建 UI 功能的组件。这些元素的父节点用以将按钮与滑块分开并分别成组。注意即使是“container1”和“container2”是被激活的,UI元素是可用的,但是“container1”和“container2”都没有输出,在它们内部网络也没有元件。
类似的,当“container1”和“container2”由“container3”组合起来时你会看到同样的结果。这是因为 Container COMP 有在视图中显示子容器的功能。Container COMP 可以通过组合多个小容器来创建复杂界面。
MAT元件
Material 元件亦称 MAT,其主要功能是用于为三维几何体添加材质与着色。在进行材质或着色工作时若对计算机图形学与渲染有深入的了解会有很大帮助。如果没
有这方面知识,大部分用户将只会使用 Phong MAT 与 Point Sprite MAT 的基础设置。材质还要涉及到纹理与 UV 贴图,最好是使用特定的模型工具作提前处理。在
TouchDesigner 中可以导入模型添加纹理。有许多修改纹理的工具,如Texture SOP,但是对于复杂的操作还是建议使用特定的软件处理。
Phong、GLSL、与 Point Sprite 材质
以下是三种最常使用的 MAT 元件:
- Phong MAT
- GLSL MAT
- Point Sprite MAT
这是三种不同类型的元件,可以满足大部分的着色与材质需求。
Phong MAT 是最常用的材质元件。它负责将纹理映射到三维几何体。它支持多种贴图,如颜色、凹凸、高光、漫反射等等。Phong MAT 能与环境、漫反射,镜面反射,散射和基本平面光照明(无深度信息)混合。在这个项目,有两个非常简单的Phong MAT 例子。第一个使用纹理的透明通道创建一个透明盒子。第二个忽略场景中的照明,
设置使用(1,1,1)的 Emit 灯光将对象完全照亮。在许多案例中会经常看到 Phong MAT 的应用。
Point Sprite MAT 为粒子系统的点匹配 sprite 。从它的名字理解它的用途,将二维图片(或一个 sprite)替换三维空间中的每一个点。Sprite 总是朝向摄像机,根据 Z 轴深度进行缩放。在上图案例中,在 TouchDesigner 中若不使用 Point Sprite 创建一个类似的效果,不仅仅会是一个相当杂乱的网络,也不知道要添加多少个 Transform TOP 与Composite TOP,另外它们会占用大量的系统资源。通过使用粒子系统 与 Point Sprite,网络结构易于查看,并且不需要大量系统资源。
UV 贴图
对于复杂三维几何体,UV 映射是非常重要的工作。作为三维建模中的另一部分,在专业的三维建模软件中,创建与操作 UV 贴图是比较简单的。
UV 映射允许设计师和艺术家为三维几何创建有趣的动态或静态纹理。它架起了动态与静态图形的二维世界与三维几何世界的桥梁。
UV 映射有三个步骤。第一步,将三维对象展开到二维平面。这个展开的贴图称为 UV 贴图。可以把它看作是一幅地图,因为它非常像其他类型的地图,它是依据三维模型按比例精确创建出来的二维参考。如街道地图或世界地图,将三维世界放到二维平面。
第二步是创建纹理。二维 UV 贴图被艺术家和设计师用来在合成软件中创建动态或静态的纹理。UV 贴图的优点是可以将纹理精确的映射到几何体上。
第三步是纹理在三维几何上的应用。这取决于所使用的软件而有所不同。这三步合起来称为 UV 映射。第三步常在 TouchDesigner 中操作。只要三维几何从它的建模软件中正确导出,它将包含指引其他应用程序应用 UV 贴图的坐标。在这种情况下,通过 Movie In TOP 载入纹理,添加 Phong MAT 到几何体。如果需要改变 UV 贴图的应用方式,可以使用 Texture SOP。
下面是一个简单三维盒子与它的 UV 贴图案例。