作者:CG风火连城 前言: 这段时间研究Maya的线性工作流程与VUE的线性工作流程(linear workflow,LWF),也一并测试了结合Nuke使用的方法及优缺点,有所总结,想与大家分享讨论,于是有了以下的文字。 本文列出了若干篇网络上其他搞CG的同仁写的有关linear workflow的文章的链接,如果每一位读者都看完这些链接里的文章估计会有点儿累,那么亲爱的读者如果你信得过我,就可以直接阅读我所写的文字,如果你对某些细节有疑问再去看本文里的那些链接。 --------------------------------- 1、笔者对线性工作流程的一些观点 2、Maya的与Nuke结合的线性工作流程
2.1
2.2 2.3 基于Maya2011及以上版本的“色彩管理”方案 2.4 总结(哪个更适合我的项目) 2.5 附录(提升效率的小脚本等等) --------------------------------- 本人对于线性工作流程的一些观点: 观点之一:无论是Max、Maya、C4D、Houdini还是VUE等,理论上任何三维软件实施linear workflow的原理都是一样的。 观点之二:linear workflow最最最最灵魂的东西是什么?为什么要用linear workflow?答案就是为了让灯光设置环节更加物理,灯光效果更加接近真实,灯光亮度过渡平滑,不容易爆,灯光能够使用二次方衰减。 观点之三:linear workflow的要求是尽可能地保持数据的原始状态,不要经过任何的色彩空间或者是gamma的转换过程,否则就算不上是“线性”了。 观点之四:Nuke的“raw data”读取方式能够确保8位图与16位图的render passes的合成不会出现问题,如果不用“raw data”读取的话,render passes的分通道合成你可以自己试试...是合不回三维渲染的原始效果的,因为数据是非线性的(当然你改下Nuke读取8位图与16位图的默认LUT也行...这玩意儿说多了更容易混乱,不如不说)。32位图不存在问题。 观点之五:“线性工作流程”是个工作流程,讲究的是批量可操作性,因此如果不好操作的话就不方便应用于流程,因此以下的文字,都是在试图尽可能简化操作,例如统一8bit、16bit integer(16位整型)、16bit half float(16位半精度浮点)、32bit float(32位浮点)图片的处理方式,不是不能分图片位深来分别处理,而是分别处理容易导致犯错。 一、Maya的与Nuke结合的线性工作流程 在开始之前请明确一点:maya software渲染器不能很好的支持32bit浮点图像,并且我个人不推荐使用software渲染器去实施线性工作流程。 1、经典实施方案(包含Nuke后期部分的处理) 我不得不提一下的是,很多搞CG的人对linear workflow都有所耳闻,网络上也有很多的教程等等,但是很多在对原理的理解上都有问题(当然这是我个人的看法),对于linear workflow很多人采取的是“不动脑照搬”与“以讹传讹”的方式去对待,当然我说的有点夸张,本人并没有攻击他人的意思,只是希望以我个人的理解更加严谨的诠释linear workflow,很可能我的理解也有错误,不足之处请指出。 以下是两个非常棒的人写的关于linear workflow如何实施的blog:
Linear Workflow
(线性工作流程) 首先,我要说的是这两个博文中有关linear workflow是写的已经很棒了,但是仍然存在一些问题,如果大家按照以上两篇博文中的任何一篇去实施linear workflow,在场景包含32位图或者包含三维软件渲染的图片的情况下,可能会出问题,或者让你混淆。 网络上还有很多人写文章提到linear workflow,有些写的更简单,甚至就是错的。 个人认为网络上对mentalray for Maya的linear
workflow实施方法描述最严谨最正确的是djx的博文:Maya
Linear Workflow In Two
Steps,个人以为这篇文章可以作为mentalray for
Maya的线性工作流程实施操作说明书来使用,由于是英文的文章,因此我将之重点内容翻译如下段。另外,还有一篇不错的有关线性工作流程的文章,Linear
Workflow, part 2 两步搞定Maya线性工作流程(by djx) 步骤一:在你制作任何材质、贴图或者灯光之前,创建一个mia_exposure_simple节点并连接到你渲染相机的mentalray选项卡的Lens Shader。设置mia_exposure_simple的参数为Pedestal=0, Gain=1, Compression=0, Gamma=2.2,由于Compression参数为0因此Knee这个参数在这儿可以无视,值随意。
步骤二:如果你读入的彩色数据图(彩色贴图)是8位图,那么将mip_gamma_gain节点(推荐) 就这两步,线性工作流程就设置完成了,且慢,以下还有几个要注意的地方: 非颜色的属性(黑白贴图):例如diffuse weight,bump values,displacement,reflectivity等不是彩色的属性,都不需要添加gamma 0.455进行校正。 浮点图像(16bit half float和32bit float):已经是linear,gamma 0.455的校正是不必要的。 Frame Buffer Gamma:就当没这参数,保持默认值为1。 最终输出:调节材质灯光预览的时候请正常用Render View就行了,不过渲染的时候如果是一次性渲染完成不需要后期处理的话,正常批渲染就完事。如果渲染完的图像还要进合成软件进行合成与校色,那么在你批渲染之前,请断开渲染相机上的mia_exposure_simple,或者将mia_exposure_simple的gamma参数设置为1。无论你渲染8位图、16位图还是32位图都是可以的,当然推荐32位浮点以保留高动态以及更细腻的色阶。 总结:正确实施线性工作流程的核心就是确保输入的颜色是线性的(通过应用gamma=0.455对8位图进行校正。所有的预览测试渲染请在渲染相机上挂上gamma=2.2的mia_exposure_simple节点。 好了,按照以上两个步骤,你就完成了线性工作流程中Maya部分的工作,那么进Nuke中怎么处理?8位图、16位图、32位图处理方法是不是不一样?我告诉大家一个简单但是好用的方法:无论你是8位、16位还是32位图,无论是整型还是浮点,进Nuke后(一定要先保证你的Nuke的viewer的LUT没有被乱改,默认是sRGB,见下图)在你文件的Read节点上一律勾上“raw data”(见下图),然后你就按照平常该干嘛干嘛就行了,Nuke最后输出的时候正常输出(write节点不必勾选“raw data”,切记)。什么?这方法你不信?先试试再说吧:)。
经典实施方案之优点: 很严谨,数值保真度最高,实现了线性灯光、线性合成,原汁原味的线性工作流程。 经典实施方案之缺点: A、每次批渲染素材需要断开渲染相机上的mia_exposure_simple,这一点在实际项目中操作人员经常容易忘记,结果有的渲染时相机是断开的,有的则没断,出来的图像数据就会混乱; B、给贴图加gamma节点也是很需要小心操作的环节,该加的没加,不该加的加上了...类似事件很容易发生,而且错误不易察觉,对操作人员要求比较高。 ------------------------------------------------------------------------------------------------------------------------------------ 2、基于“经典实施方案”的简化改良版 考虑到经典实施方案的缺点A,本人想出一套消除缺点A的简化改良版。 在Maya中:实施方法与经典实施方案一致,唯一的区别就是无论是预览还是批渲染,相机上的mia_exposure_simple曝光节点一直挂着,并且它的gamma=2.2。就这样渲染输出素材。 在Nuke中:因为Maya在渲染的时候就已经进行了gamma2.2的校正,进Nuke后除了Read节点上一律勾上“raw data”外,还需要在每个Read节点下游添加一个Gamma节点反向校正,gamma值=0.455(用表达式写=1/2.2最精确),然后Nuke中Viewer的LUT保持sRGB不动(不做任何更改),接下来该咋合成就咋合,输出正常输出就ok了。 基于“经典实施方案”的简化改良版之优点: 比经典实施方案用起来更方便。 基于“经典实施方案”的简化改良版之缺点: A、本方法最大的问题是数据精度不如“经典实施方案”高,进Nuke合成后你会发现:在贴图颜色的过渡区域和“经典实施方案”稍有不同。见下图。对于大多数情况应该无伤大雅,以一点点精度牺牲换取流程更简便,如何取舍看项目需求了。 B、如同经典实施方案之缺点B。 ------------------------------------------------------------------------------------------------------------------------------------ 3、基于Maya2011及以上版本的“色彩管理”方案 可喜可贺,Maya从2011版以来针对mentalray渲染器增加了早就该有的color management(色彩管理)功能。这个和Max的Vray LWF好像设置起来是一样的了。 值得喜极而泣的,这个色彩管理的计算精度有问题,因此以下的方法理论上是对的,实际效果确实色彩是有所损失的(颜色会变得有点儿怪,说不清楚,反正没有1、2方法弄的好看)。这个方案用起来最简单,但是我没在实际项目中测试过,如有哪位同志用一下再反馈心得就太感谢了。
3.1
3.2 在Render view下打开Color Management,打开“显示的色彩管理”,设置如下图。 3.3进Nuke后在你文件的Read节点上一律勾上“raw data”,然后你就按照平常该干嘛干嘛就行了,Nuke最后输出的时候正常输出就行。 基于Maya2011及以上版本的“色彩管理”方案之优点:操作最方便,最省事儿。 基于Maya2011及以上版本的“色彩管理”方案之缺点:色彩有一定程度失真,失真的原因是否是Maya软件bug未知,能否应用于项目未知。 4、总结:线性工作流程很实用,尤其当你使用MR分通道渲染合成以及使用16位半精度浮点或者32位浮点的情况下。对于小规模成熟团队(渲染+合成不超过6人),使用1、经典实施方案是没有问题的,出错率不会高。如果是大型团队或者新手比较多的情况下,同时考虑到项目精度要求不是很变态的情况下,可以使用2、基于“经典实施方案”的简化改良版,关于3、基于Maya2011及以上版本的“色彩管理”方案,看起来很好,实际使用效果还有待项目验证。 5、附录: 给场景中的贴图批量加gamma0.455的mel: proc addGammaCX(float $gamma) 一些解释性图片: 上图为线性空间与sRGB空间示意图 上图为sRGB与Gamma 2.2(反向校正)的大致匹配度 上图为显示屏的“电压-亮度”响应曲线与gamma2.2(正向校正)的示意图 二、VUE与Nuke结合的线性工作流程 |
|