离线渲染与后处理

后处理文档概述

  • 本部分文档将具体从:流程概述、数据导入、数据的查看与调整、数据可视化、渲染、合成6个方面对PeriDyno的后处理进行讲解。

一、流程概述

  • PeriDyno在数据的种类上主要分为网格、粒子、曲线三种,涉及abc、obj、txt等格式。在后处理过程中,主要选用Houdini作为数据整合、可视化及渲染的主要平台。

  • 基于Houdini的特性,能够很好的进行数据整合、数据查看、数据调整、数据可视化、数据渲染等工作,并能够基于非破坏性的流程进行快速的迭代,使前处理与后处理工作在一定程度上得以并行推进,提高效率。 此外,Maya、Blender等全流程三维软件也是PeriDyno数据后处理工作可选择的平台,其也能够完成材质、灯光及渲染工作,但在兼容性及数据查看方面稍显逊色,本文档不做过多推荐与介绍。

  • 最终上述三维软件所渲染出的序列帧可以使用Adobe After Effects、The Foundry Nuke、Adobe Premiere Pro等后期合成及剪辑软件完成合成与输出。

二、数据导入

PeriDyno输出的数据主要分为网格、粒子、曲线三种类型,涉及abc、obj、fbx、txt等格式。

  • 网格数据以obj、obj序列的格式导入。

  • 粒子数据abc、abc序列的格式导入。

  • 曲线数据abc、abc序列的格式导入。

  • 骨骼网格体数据以fbx格式 进行导入。

  • txt格式的粒子数据能够通过MeshlessSkinning工具转换为网格数据并输出为obj序列从而进行导入。

导入方法:

1.使用Houdini菜单栏File-Import进行文件的导入。

  • 通过Houdini菜单栏File-import进行文件的导入,并根据需求选择相应的格式即可。在通常情况下可以使用Geometry选项进行导入。其会为我们在Object层级下创建一个Geo节点,并根据所选的格式适配合适的节点进行文件的导入(*注意:此方法不适用于骨骼网格体,骨骼网格体请详见本节的fbx character import部分)。

2.创建Geo节点,进入节点内,创建File、Alembic或fbx character import等节点进行进行导入。

(1)通过File节点导入

  • 在节点工作区Object层级按下Tab键,并搜索Geo,创建Geometry节点,并使用Enter键进入。

  • 在Geometry层级下创建File节点。

  • File节点的Geometry File通道可以指定文件路径,其支持以下格式(不建议用此节点导入abc格式文件,其对abc没有单独的优化,运行效率较低,建议使用Alembic节点进行abc文件的导入)。 *.geo, *.bgeo, *.hclassic, *.bhclassic, *.geo.gz, *.geogz, *.bgeo.gz, *.bgeogz, *.hclassic.gz, *.hclassicgz, *.bhclassic.gz, *.bhclassicgz, *.geo.sc, *.geosc, *.bgeo.sc, *.bgeosc, *.hclassic.sc, *.hclassicsc, *.bhclassic.sc, *.bhclassicsc, *.json, *.bjson, *.json.gz, *.jsongz, *.bjson.gz, *.bjsongz, *.json.sc, *.jsonsc, *.bjson.sc, *.bjsonsc, *.poly, *.bpoly, *.d, *.rib, *.vrmesh, *.vrscene, *.flt, *.hgt, *.r16, *.r32, *.img, *.tif, *.tiff, *.png, *.jpg, *.exr, *.pic, *.GoZ, *.vdb, *.usd, *.usda, *.usdc, *.bhclassic.lzma, *.bgeo.lzma, *.hclassic.bz2, *.bgeo.bz2, *.pc, *.pmap, *.geo.lzma, *.off, *.iges, *.igs, *.ply, *.obj, *.pdb, *.hclassic.lzma, *.lw, *.lwo, *.geo.bz2, *.bstl, *.eps, *.ai, *.stl, *.dxf, *.bhclassic.bz2, *.abc, *.fbx

  • 针对“name+序号.文件类型”的序列文件,如以name_001.obj为第一帧的文件序列可以通过将命名修改为name_$F.obj进行动画序列的导入。

(2)通过Alembic节点导入

  • 在节点工作区Geometry层级下创建Alembic节点。在Alembic节点的File name通道指定文件路径。

  • 针对“name+序号.文件类型”的序列文件,如以name_001.abc为第一帧的文件序列可以通过将命名修改为name_$F.abc进行动画序列的导入。

(3)通过fbx character import节点导入

  • 本文档推荐使用Houdini 18.5及其后续版本进行骨骼网格体的导入,其Kine FX模块的角色功能能够大幅简化工作流程。

  • 在节点工作区Geometry层级下创建FBX Character Import节点,并通过FBX File通道进行骨骼网格体文件导入。

三、数据的读取与查看

1.通过Transform节点调整模型变换

  • 检查数据的变换及空间比例,并通过Transform节点进行空间比例与位置的调整。

2.通过Convert/Unpack节点进行数据读取

  • 对于导入的打包数据应使用Convert或Unpack转化或解包,从而读取到文件中的数据。此处推荐使用Convert进行转化,其能够指定文件类型,选择合适的模式或优化模式进行转化,如NURBS Curve、Polygon、Polygon Soup等。

  • 粒子及网格数据推荐将类型选择为Polygon。曲线转换为NURBS Curve。

(1)Convert节点的使用

  • 在Geometry层级下创建Convert节点,并在Convert to通道选择合适的类型即可。粒子及网格数据需要将类型选择为Polygon或Polygon Soup。曲线转换为NURBS Curve。

(2)Unpack节点的使用

  • 在Geometry层级下创建Unpack并与数据节点连接即可。

  • 转化或解包后可以在节点上按下鼠标中间查看文件数据概况。

3.Geometry Spreadsheet数据查看

  • 通过Geometry Spreadsheet可以查看模型、点、顶点、基元层级上的具体属性。如果Geometry Spreadsheet只显示一组数据,请检查是否进行了Convert或Unpack处理。

四、数据可视化

  • 本节分为“粒子可视化”、“曲线可视化”、“网格可视化”三个部分。

(一)粒子可视化

1.粒子着色

①使用AttributeVop节点进行粒子着色:

  • 在Geometry层级下创建Attribute Vop节点,并双击进入VEX Builder层级。

  • 创建Length节点并连接到v,将速度转换为浮点值。

  • 创建Fit节点,将val与length的输出相连,并在节点上右键-Vex/Vop Option-Create input parameters将参数暴露至当前的Attribute Vop节点中方便调整。

  • 创建Ramp Parameter节点,并将input连接至fit的输出端,将ramp连接至Geometry Vop Output的Cd端实现顶点色的输出。

  • 回到Attribute Vop并选择,此时能够看到Fit节点和Ramp Parameter节点所暴露出来的参数。根据粒子的实际运动速度调整Fit输入速度的最大值。将Fit的输出值调整为0-1,用以Ramp的输入(Ramp默认拾取0-1的float值)。最后调整Ramp进行调色,完成粒子着色。

②使用AttributeWrangle节点进行粒子着色:

  • 在Geometry层级下创建Attribute Wrangle节点。

  • 将Run Over 为Points,确保其运行在点层级下。

  • 在VEXpression中输入:f@speed=fit(length(@v),0,ch(“in_max”),0,1);@Cd=chramp(“ramp”,@speed);(1.创建一个浮点属性@speed。使用length函数转换为浮点值,并使用fit函数将其输出值设定为0-1,为输入值的最大值设定为“in_max”。2.使用chramp函数基于上述创建的@speed属性进行颜色映射,并将其指定到顶点色。)

	f@speed=fit(length(@v),0,ch("in_max"),0,1);
	
	@Cd=chramp("ramp",@speed)
  • 选择VEXpression右侧(如图中黄色框1中的按钮)Creates spare parameters for each unique call of ch()按钮,根据ch函数创建参数。

  • 根据粒子的实际运动速度的最大值调整in_max参数,通过Ramp调色,完成粒子着色。

2.粒子缩放

使用AttributeWrangle节点设置粒子大小

  • Houdni中粒子大小属性为浮点属性@pscale。

  • 创建一个AttributeWrangle节点,确保其Run Over为Points层级,并在VEXpression输入@pscale=0.2;将粒子大小设置为0.2或一个合适的值,该属性可以直接被渲染器读取,并默认渲染为一个相应大小的sphere。

	@pscale=0.2;

3.粒子网格化

使用ParticleFluidSurface进行粒子网格化

  • 粒子转网格主要通过Geometry层级下的Particle Fluid Surface节点完成。调整Paticle Separation以控制生成网格的距离阈值。

  • 如需要对网格进行速度着色则应关闭Particle Fluid Surface的Adaptivity,保证网格布线均匀(@Cd是顶点色属性,需要足够数量且均匀的顶点分布以确保着色效果)。

  • 在Transfer Attributes通道下增加Cd属性。

  • 最后可以添加File Cache节点并在Geometry File通道指定一个路径进行网格文件的缓存。

使用MeshlessSkinning工具进行粒子网格化

  • txt格式的粒子数据可以使用MeshlessSkinning工具进行网格化。具体使用方法如图所示:

(二)曲线可视化

1.曲线网格化

  • 曲线转网格主要通过Geometry层级下的Sweep节点完成。该节点需要一条目标曲线和一个扫描曲线进行工作。

  • 首先将abc格式的曲线文件通过Alembic进行导入,而后使用convert节点将其转换为NURBS Curve类型(详情请见本文档“二、数据文件的导入”、“三、数据读取与查阅”)。

  • 创建一个Circle节点作为扫描曲线,并通过Uniform Scale通道调节其缩放。

  • 创建一个Sweep节点。将导入的目标曲线数据连接到输入端1,将Circle节点连接到输入端2。如需要进行贴图,可以在UVs and Attributes标签下勾选Compute UVs。

  • 创建UVquickshade节点可视化检查UV。

(三)网格可视化

1.UV处理流程

  • 对于需要进行贴图绘制但没有UV的动画序列,可以先通过时间冻结或导出模型的方式选取其中一帧进行UV拆分,而后基于顶点序号使用AttributeCopy节点进行UV属性的拷贝。

2.UV展开

(1)houdini UV展开

  • 通过UV unwrap节点进行UV展开。

  • 添加UV layout节点进行UV排布。

(2)其他方式的UV展开

  • 您可以通过Maya、RizomUV、Zbrush、Substance Painter等软件进行手动或自动的UV展开。

  • UV展开请查阅相关软件具体说明。

3.使用AttributeCopy进行UV属性的拷贝

  • 在Geometry层级下创建AttributeCopy节点,将原模型序列连接至输入端1,将完成UV展开的模型连接至输入端2。

  • 设定Attribute Name通道为uv,完成uv属性的传递。

五、渲染

1.渲染概述:

  • Houdini中渲染方案较多,如Mantra、Arnold、V-Ray、Redshift以及最新的Karma等。本文档以Vray为例,对最为重点和核心的内容进行渲染指南和说明。

  • 在渲染工作中主要需要完成“渲染设置”、“摄像机”、“灯光”、“材质”四部分工作。

  • 本文档目前将主要以V-Ray渲染器为例进行讲解,其具有效率高、易学习的特点,能够快速上手,并适合3dsMax、Maya等平台用户进行快速迁移与查阅。此外其能够兼容到其他支持V-Ray Sence的三维平台,为后续的工作创造更大的空间。

2.渲染设置

(1)渲染器指定

(2)V-Ray渲染器基本设置

①Export标签

  • Export-Render Device选项卡:此部分可以选择渲染模式,如CPU/CUDA/RTX等,注意GPU渲染可能会不支持某些渲染特性。详情请参见: https://docs.chaos.com/display/VRAYHOUDINI/Set+Up+GPU+Rendering

  • Export-IPR选项卡:1.Use Denoiser开启降噪,其能够在较低的渲染采样下得到较高的渲染质量,提升渲染效率。2.Use Render Elements开启渲染元素,可根据是否需要多通道渲染酌情勾选。

②Images标签

  • Images-File Path:指定渲染路径与渲染文件的格式,注意渲染器会自动识别文件名后缀的格式。如:G:/../ImageName.${AOV}.0001.png将会被渲染为.png的图像格式。

  • Render Elements:指定所需要使用的Render Elements,如:/obj/ropnet1/renderElements

③Render-Sampler标签

  • 将Render-Sampler标签下的Type由Progressive改为Bucket将在最终渲染时在一定程度上减少噪点。

④Render-Global Illumination标签

  • 将On选项勾选,开启全局光,产生光子反弹的效果,得到更接近真实的照明效果。注意其在得到更好的光照效果的同时大幅增加了渲染时间。可以根据项目需求决定是否开启全局光照明,开启该选项后需要注意调节Sampler标签下的采样值,以减少噪点。

(3)多通道渲染

  • 如有进行后期合成的需求,则需要在Ropnet下创建Render Elements渲染元素节点,并在V-Ray Renderer节点的Image标签下的Render Elements通道指定此节点进行激活,以启用渲染通道。

  • 关于分层渲染,其内容较为繁杂,详情请移步Vray帮助文档进行了解: https://docs.chaos.com/display/VRAYHOUDINI/List+of+Supported+Render+Elements

3.摄像机

  • 在Objects层级下创建一个Camera节点,并选取一个合适的角度对对象进行拍摄,注意合理的构图能够对数据的展示和画面的美观程度进行较大的提升。

  • 在View标签下调节Resolution,此分辨率为最终渲染图的分辨率。此外此标签下还有摄像机的投影模式、焦距、裁切等重要参数。您可以根据项目的需求酌情设置。

4.灯光

  • 灯光在渲染中较为重要,合理的布光可以有效提升画面表现效果,并可能减少噪点。

  • 本文档建议首先使用VrayLightDome节点创建穹顶灯,并勾选Use Texture 设置基于HDRI贴图的环境照明。

  • 如需进行自定义打光,您可以在HDRI的基础照明之上创建VrayLight Rectangle节点,用面光源完成主光、补光等灯光环境的创建。详情请参见: https://docs.chaos.com/display/VRAYHOUDINI/Lights

4.材质

  • 在Objects层级下创建一个Matnet节点并双击进入。详情请参见: https://docs.chaos.com/display/VRAYHOUDINI/mat+Network

  • 创建V-ray Material Builder节点并进入。

  • 创建V-Ray Material节点,该节点内容较多,您可以查阅官方网站根据图片了解和对比各参数的效果: https://docs.chaos.com/display/VRAYHOUDINI/V-Ray+Material

  • ①Diffuse标签:Diffuse控制漫反射颜色,可以在材质节点中调节颜色,或创建V-Ray User Color及V-Ray Image File节点完成颜色设置。Opacity不透明度,可以使用V-Ray Image File连入一张图像作为遮罩控制物体的透明度属性。

  • ②Bump标签:Bump Map通道可以指定一张凹凸贴图或法线贴图以模拟物体表面的凹凸细节。

  • ③Reflection标签:可以在Color通道调节反射颜色,并在Glossiness调节材质光泽度以表现不同的质感。

  • V-Ray image File节点可以读取图像文件作为贴图。

  • User Color用户颜色:该节点可以将顶点色(或您创建的其他属性),即Houdini中的Cd属性进行渲染。主要针对需要顶点色着色的粒子、网格等对象。您可以创建V-Ray UserColor节点,将Attribute设置为Cd以读取顶点色,并连接至V-ray Material的Diffuse通道。

六、合成

  • 在PeriDyno中,主要使用Adobe AfterEffects进行序列帧的合成、调色,并最终输出成视频。