聊聊OpenEXR

小插曲 早一个月以前,我在找寻关于工业光魔的书籍时,发现了一本宝藏书《The Art of Film Magic》,里面主要讲述了Weta Workshop最近20年的电影特效成果,我想通过国内的购买渠道购买这一套书籍,最后发现书中部分内容因为和中国法律有冲突,书中冲突部分的内容被第三方做了撕页处理,于是我找到了Weta Workshop的官方商店,直接从欧洲购买这套书籍,然后经过UPS的转运,昨天顺利到达。 是的,电影工业确实是一门魔术,是一门具有艺术性的魔术,艺术与科技相结合才有了呈现在大银幕上的电影。那么今天我想介绍一款工具OpenEXR,它是工业光魔在1999年开发的数字图片存储格式,存储具有高动态范围场景数据。 设计 OpenEXR的特点: 高动态范围,我们也可以表示为High Dynamic Range,EXR图像中的像素数据以16bit或者32bit的浮点数存储。 相比于8bit数据存储的图像,EXR对于调色更加友好,尤其是进行大幅度的色彩调整,使用EXR的图像不会出现条带化现象。 无损压缩,EXR提供很多的压缩算法,降低存储成本,同时像素数据不会随之流失。 多通道存储,EXR可以存储图像的多通道数据,除了常见的Red Green Blue Alpha,还有场景的深度信息,物体表面法线方向,高光通道等等。 能够更好的与C C++进行交互,EXR提供C C++接口,方便外部应用读写EXR文件。 EXR色彩管理 OpenEXR图像通常是Scene-referred(场景参考),相对于Display-referred,我们做一个简单的介绍,显示参考我们是以某个显示标准为图像的色彩显示,比如使用相机拍摄sRGB图片,那么在100%sRGB的显示器上,我们看到的图像色彩和现实场景中的是一样的,但是拿到Rec709的显示器上,图像会与我们的sRGB显示器有区别,这就是显示参考,我们依据显示的标准来标定图像的正确色彩,场景参考就是不管我们用什么摄影机拍摄,用什么样的显示器显示,最终对于同一个场景,所得到的图像结果都是一致的,场景参考的色彩存储都是和现实世界的光照成线性比例的,在有关ACES色彩管理的文章中我们介绍过这一点。OpenEXR只是一个数据存储的容器,不论你用什么摄影机拍摄,整个场景的信息都能够存储在EXR文件中,为了后期能够方便的显示和处理图像,我们需要对OpenEXR进行色彩管理,不像Jpeg,PNG格式的图像,他们都是内嵌色彩信息,比如图像的色彩空间是sRGB或者Rec709,Gamma是sRGB或者Gamma2.2,这些数据在OpenEXR里面都是不存在的,因为后者都是依赖于显示参考,而EXR是场景参考。以下是我根据2004年工业光魔发表的一篇文章《A Proposal for OpenEXR Color Management》做为参考来理解OpenEXR的色彩管理科学。 将摄影数据存储在OpenEXR之前,我们都要进行场景线性化的转换,数字电影机的RAW就是摄影机所能看到的场景中的所有数据,已经是场景线性参考了,所以存储到OpenEXR不需要进行线性转换,当在OpenEXR中处理完成图像数据之后,我们需要将场景参考转换到显示参考,这样我们就能在各种显示器上正确查看图像的色彩。

April 15, 2022

Run renderman compatible render engine aqsis on armv6

reference http://alvyray.com/Pixar/documents/Pixar_ImageComputer.pdf https://ohiostate.pressbooks.pub/app/uploads/sites/45/2017/09/pixar-image-processor.pdf Pixar Image Computer 启发我写这篇文章的原因是上个月也就是三月份我快速的看了一遍《The Renderman Companion A Program’s Guide To Realistic Computer Graphics》,书里面主要描述的是如何利用Renderman C API接口去实现3D图像的渲染,这本书是在1989年出版的,当时的Pixar已经开发了Renderman渲染接口标准,并且实现了目前电影工业广泛使用的PRMan(PhotoRealistic Renderman实现。其中有意思的是在1986年Pixar还开发了类似今天的Nvidia通用显卡的计算机图形学硬件系统—Pixar Image Computer。 在没了解Pixar之前,我以为Nvidia是最早做显卡的,原来还有更早的Pixar Image Computer,它的使用方式类似现在Nvidia显卡,做为一个扩展卡与本地计算机进行通讯,本地CPU发送数据到Pixar Image Computer中进行计算,然后从Pixar Image Computer中取回计算好的数据。具体架构如下: 设计这样的架构优点就在于以下三点: 通用硬件设计的实现 并行执行图像处理操作 支持多个CHAPs系统 架构设计: Pixel data structure: 所有的Pixar Image System组件都被设计成可以容纳"Pixel data structure"这样的数据结构,其中结构体当中包含RGBA(Red Green Blue Alpha)各个通道的存储信息。 Chap:Chap包含四个处理器,分别用来处理RGBA四个通道的数据,CHAP是一个单指令多数据处理的机器,四个核心处理器会分别在四个通道上执行相同的指令,每一个处理器分别处理对应通道的数据。 CHAP数据处理的循环过程: ALU: 由AMD29116A芯片组成,所有的四个ALU在一个像素点的四个通道数据上执行相同的指令。 Multiplier: 数据由MBUS进入,通过乘法处理将结果输出到ABUS。 Pbus buffer: 像素数据在CHAP和image Memory之间的交换。 Yapbus buffer: 在CHAP与CHAP之间进行数据交换。 Scratchpad: 程序执行期间像素数据高速暂存存储器。 Write crossbar: ABUS的目的地,过滤控制哪些数据可以写入到Scratchpad。 Read crossbar: SBUS的源头,对读取到的数据进行分类。 Yapbus: CHAP与CHAP之间的数据交换。 ...

April 5, 2022

Piotr Pielaszek 2021 Violin Record

获得2021意大利三年赛银奖的小提琴,由Piotr Pielaszek制作,我使用了BMPCC摄影机对这把小提琴进行了拍摄记录。 Youtube: Bilibili:

March 13, 2022

BMPCC低通滤镜更换

我在2017年购买的BMPCC摄影机出现了低通滤镜氧化的问题,其拍摄的影像里面出现了污点,我利用今天下午的闲暇时间为这台BlackMagic Pocket Cinema Camera更换了低通滤镜,毕竟从购买这台摄影机之后,我用它拍摄了很多有趣的作品。 用BMPCC拍摄的作品赏析(创作于2018.12):

March 11, 2022

Renderman 历史

创新艺术 提到Renderman,那么我们也就不得不提Pixar,对,就是这家制作动画电影的工作室。与其说Renderman的历史还不如讲讲Pixar的历史,正是因为Pixar工作室的艺术家需要在数字世界里面创造真实的影像才诞生了Renderman。我们来看下这家工作室的历史背景。 通过Pixar的发展历史可以看出科学与艺术在电影创作的世界里是相辅相成的,我们来了解下Renderman到底是什么工具。就像画画一样,画家通过不断的对周围事物的观察,在大脑中记忆自己所看到的物体的色彩,光影,然后依靠自己的双手将三维世界的物体呈现在两纬的画布上,Renderman就是这样一组工具,我们告诉他三维空间中都有哪些物体,光源在哪里,摄影机的位置和观察这个空间的角度是怎么样的,将这些数据输入到Renderman中,Renderman就会生成一张类似画家画完画后的两纬图像,Rendering在中文中解释为渲染,渲染一张图片当然还是不够的,我们要让观赏这幅画的人感觉画面是用真实的摄影机拍摄的,那么我们就需要在计算机的世界中去模拟现实世界的光影和色彩,这也是Renderman需要去实现的。告诉Renderman三维空间中有哪些物体,哪些光源,摄影机的位置,这个是由计算机建模来完成的,模型建立完成之后,我们可以输出兼容Renderman程序的场景描述文件,将这一描述文件输入到Renderman中,我们也就得到了具有真实质感的照片,Renderman其实就是对一系列外部接口的规定和实现,将Rendering从建模中抽离出来进行独立的开发,那么任何三维建模程序只要能够通过这些接口与Renderman进行通讯,都可以将场景描述输送到具有Renderman接口实现的渲染器中渲染图像。 Pixar每一部电影制作都会用到Pixar工作室实现的Renderman渲染器-PhotoRealistic RenderMan,1988年pixar开发了Renderman的初版本,经过30多年的发展,Renderman不断的在被Pixar的工程师和科学家们优化和改进。最近发布的24版本中PRMan可以处理能够想象到的最复杂的3D场景,能够同时使用CPU+GPU进行渲染的XPU技术,以及经过多部电影考验的着色技术,最重要的是他支持了开源的三维建模动画程序Blender。学习Renderman就如同像站在巨人的肩膀上一样,使得我们能够更充分更扎实的去了解计算机图形学。 文档翻译计划 早期使用Pixar Renderman,用户还需要学习编程技术,现在Renderman的使用更加人性化,但是相比于市面上流行的其他渲染器而言,Renderman还是缺少许多具体的使用文档和教程,尤其是中文领域。我目前已经在着手翻译Renderman的官方文档和Pixar的具体论文,借助DeepL的帮助翻译进度还是蛮快的。

February 25, 2022

CG319x EIZO

在2020年的时候我写过一篇博客 Renderman24 Will Support Blender,在文章的最后我记录了自己打算购买商业版本的Renderman。经过一年多的时间之后,我实现了自己的想法,为自己配置了图像工作站,购买了具有商业版权的Renderman,最重要的是我也为自己购置了一套EIZO CG319x显示器。准备这些的初衷主要是因为web3.0的崛起,我设想过一个人的自由职业,因为电影行业是通过非常庞大的群体来完成创作的,要让一个人独立完成一部真人电影或者动画长片,甚至短片,那是非常耗时的,因为有很多的技术以及艺术的绊脚石在你面前,你必须一点一滴的克服才能完成影片中的每一个细节。然后我就设想能否通过机器的算法来完成人物环境的设定,在计算机的世界中生成生命和环境,在常规的电影制作中那叫做建模和动画以及场景制作,这些技术都是由技术以及美术人员来完成创作的,计算机只是如实的向观众呈现这些创作。大胆想象如果计算机能够完成这些创作过程,比如动物的蹦跑,模型的材质,抠像,人类的行走,我们不再是通过画关键帧,调试材质,手动绿幕抠像,而是通过计算机对这个现实世界的学习来主动探索这些关键帧,实现对现实世界物体材质的模拟,对画面中人物的精确抠像,那么似乎一个人创作一部精彩的电影是没有问题的。当然这只是个设想,目前技术还达不到这样科幻的地步。 现在就来讲讲CG319x-4k HDR Monitor,它由EIZO公司生产和发行,在2021奥斯卡科学与技术的颁奖典礼上,EIZO获得了科学技术奖。有很多的电影动画以及视效公司在使用EIZO的CG显示器,包括ILM(工业光魔),Pixar,MPC FILM,DNEG(Dune 2021的视效团队)。EIZO官方介绍 Academy of Motion Picture Arts and Sciences,Oscars SCIENTIFIC & TECHNICAL AWARDS 2020。对于工具我的认知是尽量购买自己能力范围内最好的,并且也要考虑工具的保值程度,在购买CG319x的时候我也综合考虑了这两方面,使用好的工具将精力投入到学习和创作中,我觉得付出再多的价钱它也是值得的,因为它会给你带来双倍的回报。通过这款显示器,我希望自己能够做到的是不断地去观察周围的自然世界,然后将其精细的展现在数字世界中,就犹如画家通过手中的画笔来展现他所看到的世界,这也是我的目标。

February 16, 2022

ACES 色彩管理

参考文章 https://docs.blender.org/manual/en/latest/render/color_management.html https://rmanwiki.pixar.com/display/REN24/Color+Management https://www.arri.com/en/learn-help/learn-help-camera-system/camera-workflow/image-science/aces https://github.com/colour-science/OpenColorIO-Configs https://acescentral.com/knowledge-base-2/using-aces-reference-images/ https://opencolorio.readthedocs.io/en/latest/configurations/aces_1.0.3.html 聊聊Gamma修正(Gamma Correction) Table[x^2.2, {x, 0, 1, 0.1}] {0., 0.00630957, 0.0289912, 0.0707403, 0.133209, 0.217638, 0.325037, \ 0.456263, 0.612066, 0.79311, 1.} Table[x, {x, 0, 1, 0.1}] {0., 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.} Table[x^(1/2.2), {x, 0, 1, 0.1}] {0., 0.351119, 0.481157, 0.578533, 0.659353, 0.72974, 0.792793, \ 0.850335, 0.903545, 0.953238, 1.} #^2.2 & /@ Table[x^(1/2.2), {x, 0, 1, 0.1}] {0., 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.} 初步了解下gamma函数,从上述的表达式中可以看出,通过gamma函数2.2得到的变换,我们可以通过反gamma函数 1/2.2,将输入和输出保持在线性关系上。 ...

January 30, 2022

Renderman24 for Blender - Cameras in Blender

参考资料 Renderman 24 For Blender Doc Blender中的摄影机 Blender中的景深 景深(DOF)是一种摄影技术,用于传达构图中的规模(大小)和兴趣区域。 巧妙的使用可以将观众引向图像的某些部分,并通过正确模仿现实世界的镜头来增加逼真度。 RenderMan为具有景深的现实和引人注目的图像提供控制。还有一些非物理性的选项,但对于创造艺术指导的图像来说是非常好的。 要在Blender中开始使用DOF,请进入你要渲染DOF的相机的相机数据属性,然后点击景深旁边的复选框,如下图所示。 F Stop: 像真正的相机镜头一样,这个设置控制了效果的强度。较低的数值会增加模糊度,而较高的数值会减少模糊度。 Ratio: 景深的比例。 Blades: 这决定了虚化效果的形状。如果你选择少于三个边(三角形),虚化效果将是圆形。 Rotation: 这控制了非圆形的虚化形状的边的相遇角度(边的数量大于2)。 Roundness: 从0到1的数值使形状向外弯曲,使其更加圆滑。从0到-1的值使形状向内弯曲,使之更尖锐。 Density: 这控制整个虚化形状的亮度。0到1使它在外边缘更亮,就像猫眼镜头一样(查一查,相当有趣)。0到-1使它在中心更亮,并向边缘逐渐消失。 关于各种光圈控制的更多信息,见Bokeh。 焦点 Focus Distance: 你希望对焦的物体或位置的距离,以场景网格单位衡量。这被称为 “焦平面”。 Focus Object: 你也可以从场景中选择一个物体来作为你的距离。RfB将使用这个值而不是为距离设置的值。 Blender中的运动模糊 让我们来看看一个简单的场景,它展示了运动模糊设置的效果。 下面的图片显示了两个球在第1、2、3帧的位置。 在这个例子中,关键帧是用线性切线制作的,所以当我们观察快门时间时,球会保持一个固定的速度。 运动模糊可以在渲染属性中,在运动模糊面板下启用。 默认情况下,它是不启用的。 渲染属性中的运动模糊,默认情况下是不启用的。 快门时间 开始帧 下面的图片显示了第1、2和3帧的 “开始帧” 模糊。 快门在画面开始时打开。 默认的快门角度为180,意味着快门打开了一半的画面。 注意最后一帧是如何没有模糊的。 这是因为在该帧的快门打开时间之后没有运动。 中间帧 以下图片显示了中间帧模糊,这意味着快门在画面之前打开,之后关闭,以画面为中心。 第一帧和最后一帧的模糊看起来缩短了,因为动画没有延伸到这些帧之外。 结束帧 下面的图片显示了帧结束的模糊,这意味着快门在帧上关闭。 同样,第一帧没有模糊,因为该帧之前没有动画。 运动采样 Motion Samples 我们的红球在第二帧中的模糊看起来有点奇怪。 模糊是水平的,而球真的应该在那条线的中间达到一个顶点。 默认情况下,只有两个运动采样,因为它们很昂贵,而两个通常就足够了。 你可以在渲染属性的Motion Blur面板中改变全局运动样本的数量。或者如果你知道只有某块几何体需要额外的样本,你可以在球体的对象属性中添加它们。在RenderMan Geometry面板下,你会看到一个复选框来覆盖Motion Samples,以及一个Motion Samples属性。 ...

January 25, 2022

Renderman24 for Blender - Rendering in Blender

参考资料 Renderman 24 For Blender Doc Blender中渲染 Blender中的集成器 集成器接收摄像机的光线,并将结果返回给渲染器。对于主要的集成器来说,这些集成器是对沿射线从外部看到的表面的光能(辐射度)的估计。这些主集成器负责计算整体的光传输,也就是说,光从光源穿过你的场景,从物体到物体(或者穿过物体和体积),到达摄像机。在特殊情况下内部集成器可以协助处理表面或体积内的光线。我们提供了三种主要的用于生产环境的集成器,尽管用户可以用自己的集成器来代替。 PxrPathTracer 实现了一个单向的路径追踪器。它将击中点的材质信息与光线样本结合起来,以估计直接照明和阴影,然后产生/发射额外的光线来处理间接照明。这对环境光和大型直接光源很有效。通常,外部场景,由圆顶灯/HDRI照明的场景以及许多典型的视觉效果镜头都是用这个集成器渲染的。 PxrVCM用双向路径追踪来扩展它。除了来自摄像机的路径之外,它还追踪来自光源的路径,并试图将它们连接起来。它可以解决复杂的间接路径,这些路径可能在PxrPathTracer中收敛得很慢。特别是,它被设计用来处理镜面光晕。光晕是光线在反射或折射到表面后重新聚焦的一种效果。上面的图片展示了这两种效果。如果你的场景需要这些效果,或者你有复杂的照明,其中一些灯可能被覆盖或隐藏在灯具中,那么PxrVCM集成器是你最可能的有效选择。 PxrUnified是可用的,但目前是试验性的,直到它支持商业版本RenderMan的所有功能。 在Blender中设置集成器 默认情况下,RenderMan for Blender会使用PxrPathTracer作为场景的整合器。要设置/使用一个不同的集成器,请进入渲染属性,并点击添加RenderMan集成器节点树。 然后你应该看到像这样的画面。 你可以通过使用下拉菜单选择不同的集成器。 注意,Blender中的集成器只是world node中的着色节点shading nodes。如果你在着色器编辑器中查看world node的着色节点,你应该看到像这样的节点。 Blender中的采样和显示滤镜(Sample && Display Filters) 采样和显示滤镜插件分别用于在集成器产生着色采样值和像素值后,在它们被发送到显示驱动display driver之前,对它们进行调整。 采样滤镜 Sample Filters 采样滤镜插件描述了在对采样值进行像素过滤之前对其进行的颜色转换。 它们在像素滤波应用于原始相机射线样本之前对其进行操作。 一旦一个采样过滤器改变了一个样本,并且进入了帧缓冲区,它就会成为任何渲染图像(包括深层图像)的永久组成部分。请注意,如果一个单一的任意输出变量(AOV)作为多个图像文件的一部分被输出,对一个样本的单一改变可能会影响到所有的文件。采样过滤器所做的改变也会影响自适应采样器。 PxrSampleFilterCombiner PxrCryptomatte 显示滤镜 Display Filters 显示滤镜插件描述了在像素过滤后和输出前对最终像素值进行的颜色转换。 在这一点上,多个图像共享的AOV被认为是不同的,可以单独修改。目前不支持深层图像的显示过滤器,对自适应采样器没有影响。 PxrLightSaturation PxrDisplayFilterCombiner PxrImageDisplayFilter PxrShadowDisplayFilter 在Blender中的设置 你可以在渲染属性中创建显示和采样过滤器。点击Add RenderMan Display Filters Nodetree按钮或Add RenderMan Sample Filters Nodetree。 你应该看到"Display Filters" 和 “Sample Filters"的面板展开,类似于以下情况。 点击添加RenderMan显示滤镜节点将自动添加一个PxrBackgroundDisplayFilter节点,并继承World颜色作为背景色。 可以使用多个显示和采样过滤器。点击 “添加 “将添加一个新的槽,可以添加一个额外的显示过滤器或样本过滤器。要删除一个过滤器,点击名称旁边的-按钮。像集成器一样,显示和样本过滤器只是world node内部的着色节点。 ...

January 24, 2022