Adu Blog - shader
type: channel
link: https://aducg.com/tag/shader/
items: MaterialX介绍
items: Houdini Arnold自定义Cryptomatte
items: Autodesk Standard Surface
items: PBR material和V-Ray material 有什么区别？
items: Arnold to Maya MultiSub Shader
items: WindowBox Shader
items: OctaneRender for Maya Bubble Shader
items: V-Ray alsurface shader
items: Cryptomatte tools
items: Arnold MatCap Shader

MaterialX介绍
type: item
date: 2022-10-24T01:57:00+08:00
description: Houdini终于从19.0版开始支持MaterialX（1.38版）：在：https://www.sidefx.com/docs/houdini/solaris/materialx所以我想写一些关于MaterialX的东西。目前的Houdini虽然支持导入MaterialX，不支持导出。也许它将来会支持出口。否则无法使用。看H19.0.440的更新MaterialX vops 有一个 RMB > Save > MaterialX... 菜单项，用于将着色器网络保存到 .mtlx 文件。您现在可以导出到 MaterialX。此外，大约有 148 个由 MaterialX 准备的标准节点（在官方 MaterialX 中内联或 OSL 中编写）作为 VOP 实现。当我尝试放置它时...... 看起来 MaterialX 中作为标准提供的大多数节点都是用 VOP 实现的，除了 Lama 节点。 可用的节点不多。有吸引力的节点也很少。 但是你要注意什么？ 此 MaterialX 标准曲面的规格在https://autodesk.github.io/standard-surface/中有详细说明。 Karma 的 MaterialX 标准曲面： Arnold 的 aiStandardSurace 参数： 参数完全相同。 换句话说，Karma 和 Arnold 现在可以使用通用的 Uber 着色器。standard_surface此外，AMD 的 GPUOpen 站点 ( https://matlib.gpuopen.com/main/materials/all ) 发布了大量的 MaterialX 文件。什么是 MaterialX？什么是 MaterialX？我认为有些人会成为这样的人。这里有一些我想介绍的网站。MaterialX官网https://www.materialx.org/MaterialX 的概述、规格和API文档都写在这里。我已经在我的网站上发布了规范的日文翻译，所以如果您有兴趣，请访问。除了MaterialX github https://github.com/materialx/MaterialX源代码，您还可以下载使用下面介绍的 MaterialXViewer。Autodesk 的 github https://github.com/autodesk-forks/MaterialX如果您在 Arnold 中寻找 MaterialX，也请查看此处。MaterialX 很难解释，因为您必须多次阅读规范才能理解它，但这里是我发布的翻译介绍的一部分。1.1. 简介许多 CG 制作工作室为每个制作流程使用涉及多个软件工具的工作流程。此外，由于需要在多个设施之间共享和外包大量工作，因此其他部门和工作室需要使用不同的软件包和渲染系统的完全外观开发模型。必须通过。此外，工作室渲染管道过去使用由经验丰富的程序员开发并由技术总监修改的整体着色器。纹理和着色器之间的预硬化连接和硬编码纹理颜色校正选项现在可用于通过图像处理树和混合运算符将输入纹理图像和程序纹理生成器转换为各种着色器。灵活的基于节点图的着色器网络，可连接和构建任意输入。至少需要四种不同的相关数据关系来指定 CG 对象的完整“外观”：根据图像处理网络是如何使用源、运算符、连接和参数构建的，输出空间可变数据流的数量会有所不同。 不同的贴图类型取决于与纹理文件名或 ID 关联的几何特定信息。 根据空间可变数据流、统一值和 BxDF 着色器输入之间的关系，您可以定义不同数量的材质。 根据材质与特定几何图形的关联方式，您创建的外观数量会有所不同。 据我们所知，没有通用的开放标准来传输上述所有数据关系。每个应用程序都有自己的文件格式来存储这些信息，但这些格式是私有的、专有的，并且没有充分指定和实施以完全打开和重现应用程序。不是... 因此，要指定由着色器网络构造的 CG 对象的“外观”，可以将这种外观（或外观的子组件）从一个软件包传递到另一个软件包或在安装之间传递。我们需要一个定义明确的标准，独立于平台。1.2. 提案我们提出了一个新的 Material Content Schema、MaterialX 和一个基于 XML 的文件，用于读取和写入该 MaterialX 内容。MaterialX 模式定义了一些主要元素类型和一些互补的子元素类型。主要元素类型有：定义数据处理图的标准节点集 使用 BxDF 着色器和自定义处理运算符扩展标准节点集。 定义绑定到特定统一参数值和空间变化输入数据流的着色器实例。 定义可以从节点图中引用的几何属性。 定义附加到几何体的材料和属性的特定组合。MTLX 文件是表示 MaterialX 文档的标准 XML 文件。此处使用的 XML 元素和属性对应于 Ma…

Houdini Arnold自定义Cryptomatte
type: item
date: 2020-04-29T03:20:00+08:00
description: Cryptomatte默认使用了Asset ，Object以及Material 三种ID，但实际生产中，往往可能需要自定义些其它类型ID，Cryptomatte也支持使用自定义属性来区分ID。创建cryptomatte节点创建一个Arnold shader network，在其中创建AOV Output以及cryptomatte节点，在cryptomatte的user中，添加自定的AOV名称以及ID属性名称：给物体添加string类型属性使用Attribute Wrangle，在primitives上添加字符串属性，属性名称就来自于之前cryptomatte定义的data的名称。在渲染输出中添加对应AOV在arnold output设置中，在AOV Shader接入之前创建的aov节点，并创建AOV输出，选择之前定义的AOV名称选项。

Autodesk Standard Surface
type: item
date: 2019-05-27T21:43:00+08:00
description: 伊利扬 · 格奥尔基耶夫、杰米 · 朴茨茅斯、扎普 · 安德森、阿德里安 · 赫鲁贝尔、艾伦 · 金、大垣慎司、弗雷德里克 · 斯文特版本 1.0.1.1本文档是 uber 表面着色器的规范，旨在提供一种材质表示，能够对实际视觉效果和动画制作中使用的绝大多数材质进行准确建模。它遵循 Arnold 渲染器中标准曲面着色器的设计，其实现相对简单，其用户界面由一小组具有直观含义和范围的参数组成。本文档是版本化的，将随着规范的发展而更新。我们提供 OSL 和 MaterialX 参考实现 [Georgiev2019 ]，其目的是指定足够的细节，以允许在其他渲染器中实现，根据目的将外观与合理的保真度相匹配。今天，不同设施之间计算机图形场景资产的交换仍然是一个重大问题，尤其是在表面外观方面。不同的渲染器和 3D 引擎使用不同的着色系统、着色语言和固定功能的管道。此外，准确地建模表面外观仍然是一个复杂而相关的问题，并且是一个活跃的科学研究主题。然而，_当今_行业迫切需要找到一种标准化的材料模型，既涵盖日常工作流程中的最常见用例，又易于使用。多年来，随着不同供应商达成共识，将材料定义与场景中的光传输模拟分开，某些事实上的标准外观定义框架已经出现。此类通用框架包括 MaterialX、材质定义语言 (MDL) 和开放着色语言 (OSL) [Gritz2010]，允许将材料指定为原始表面反射模型的组合。然而，这些框架本身不足以满足最终用户的外观开发，他们不应该为日常任务从头开始构建表面着色器。需要具有一组明确定义的参数的标准超级着色器参数化，这些参数可以进行调整以表示大多数真实世界（以及想象中的）材质。在本提案中，我们旨在填补这一空白；我们的参考实现之一是用 OSL [Georgiev2019 ]编写的。我们提出的模型紧跟 Arnold 5 标准曲面着色器，它在 Anders Langlands 的 alSurface [Langlands2014 ] 和 Autodesk 3ds Max 的 Physical Material [Andersson2016 ] 中具有强大的精神前辈。alSurface 着色器在一段时间内已成为业界事实上的标准，但不再积极开发。3ds Max 的物理材质又受到 Allegorithmic 的 PBR 着色模型 [McDermott2018 ]、迪斯尼的 Principled Shader [Burley2012 ] 和几个实时 3D 引擎的一般行业趋势的强烈启发，并且在所有主要渲染引擎的支持下都得到了生产证明用于 3ds Max。在这个提议中，我们没有为每个可能的情况提供参数，而是有意尝试将参数集归结为仅在实践中最有用的参数。我们还修复了原始反射模型的组合，以确保用户尽可能在物理上合理的范围内工作。我们的目标是使整体行为简单、合乎逻辑、直观且易于理解，以便该模型涵盖大多数日常用例。对于它没有涵盖的少数几个，可能需要使用特定于渲染器的着色器，或构建定制的着色网络。我们的目标是创建一个表面着色模型，能够忠实地代表各种现实世界的材料。金属、玻璃或墙漆等基本材料表面的光散射特性得到了很好的研究，可以通过简单的分析模型准确地表示出来。其他材料，例如成品木材、布料或皮肤，包括堆叠在彼此顶部的半透明物质层。此类材料更复杂的行为是光在这些层之间的界面处散射并通过它们传播的结果，并且每个此类散射界面通常可以由分析模型表示。此外，许多现实世界的物体由几种不同的材料制成，例如金属和塑料，通过在其表面上对每种材料的类型进行纹理化，可以方便地对此类对象的外观进行建模。虽然材料过渡通常是突然的，但连续混合材料的能力对于艺术目的以及抗锯齿都很有用。两个基本操作——分层和混合——提供了一种语言来对具有复杂外观的不同材料进行建模。对于具有物理意义的堆叠层，它的底部应该有一个不透明（例如金属）或透明（例如玻璃或皮肤）的体块，并在其顶部有一组电介质板。任何未在两层之间的界面处反射的光都会向下传输通过下层，并在其相应的介质内进行选择性吸收。混合操作可以被认为是两种材料的统计混合，即使并非所有组合都具有物理意义。作为线性插值，该操作自动保持能量守恒。我们的着色器对包含十个组件的材质进行建模，这些组件按层次分层和混合，如图 1 所示。单个组件的属性可以在整个表面上变化。图 1：我们的着色器模拟的理想化材质模型的示意图。组件的水平堆叠代表统计混合，垂直堆叠代表分层。标有星号的组件是可选的，如第2.2节所述 。闭合混合表示给定一个着色点和一个视图方向，我们着色器的评估结果是一个_双向散射分布函数_(BSDF)，它描述了表面在那个点和方向上的光散射特性（加上一个发射分量和一个次表面散射分布1） . 由于在材料的整个结构内传播和散射，因此产生的 BSDF 表示在最…

PBR material和V-Ray material 有什么区别？
type: item
date: 2019-01-16T14:22:00+08:00
description: PBR material在游戏行业中变得流行，并且CG渲染已经越来越多地发展。也就是说，游戏行业的材料正在慢慢追逐电影和电视的影响，而在过去的两年里，我们已经接近这个现实。CG渲染中使用的材质几乎可以实现游戏PBR材质的所有效果，相反，不会。PBR中使用的参数（此处最流行的金属粗糙度模型）是反照率金属度粗糙度法线，V-Ray material的主要相应参数是漫反射镜面光泽度正常或凸起。Albedo是熟悉的漫反射，即物体的固有颜色。金属度描述的是材料是金属还是电介质，这是一种感性解释，事实上，这个参数真正控制的是F0，即Feyner反射，垂直于相机视线的平面的反射率，当金属度为0时，F0的值为0.04，即IOR为1.5时的对应F0; 当金属度为1时，F0的值为1，当金属度为0-1的中位数时，F0也在0.04和1之间插值，我猜它是线性插值，F90在此过程中保持不变，始终恒定为1.这是实际上是对菲涅耳效应的粗略描述。在V-Ray材质球上，没有与金属相对应的参数，有些人可能认为它是镜面反射，这个参数控制反射强度，实际上不是。因为镜面反射整体上改变了整个材料球的反射率，金属度只会改变F0的正反射率，侧面总是1。F0和折射率，即IOR，有一个对应的关系，它可以通过公式转换。所以在V-Ray中，IOR在某种程度上可以对应于金属性。单词rough = 1-glossiness本身就是反义词。只要属性完全相互对应，V-Ray material就可以完全恢复PBR material的效果。但V-Ray的材质还有很多其他功能，例如透明，半透明，物理算法SSS效果，漫反射本身的粗糙度属性不适用于pbr。此外，一些PBR材料具有镜面特性。例如，UE4的PBR材料，但这里的镜面有点类似于V-Ray中的镜面反射，但不同。UE4材质球的镜面反射率是指F0的反射强度，默认值0.5对应于F0的0.04。F0会略微降低到0.在1音可以略微改善F0。原则上使用正确的方法来链接地图，v-ray纹理球可以获得非常类似于PBR纹理球的视觉效果，但边缘的反射强度的处理是不同的，尽管由于菲涅耳反射的存在，模型边缘的反射率恒定为1，但当物体表面粗糙，光线位于边缘时，容易发生相互反射，遮挡等现象，会使反射率看起来很好在宏观层面上较低。目前，我已经测试了几个渲染器，V-Ray Arnold和Martial Ray在处理边缘模糊反射方面不同于PBR球，而且实际上是错误的，我发现唯一正确的是redshift material。如果您使用的是V-Ray，Arnold或Mental Ray渲染器，并且没有发现问题，那么可以说您调整的大部分材料都是错误的。但遵循PBR材料的想法是对的。

Arnold to Maya MultiSub Shader
type: item
date: 2018-07-23T03:27:00+08:00
description: 功能：mtoa多维材质实现方法，以实现将多种材质或者多种纹理通过ID方式分配给不同物体。思路：aiSwitch是将多种shader切换输出，但aiSwitch的切换方式是以index值为准，比如当输入0时，则输出0的shader，这样我们可以给每个物体添加不同的index值，并将其传递到aiSwitch的index属性上。实现方法：依次将多个shader连接到aiSwitch的输入中，创建一个aiUserDataFloat节点，将outvalue输出到aiSwitch的index上:aiUserDataFloat节点上的attribute上填写传递的属性名称，比如index。选择物体的Shape节点，并给其添加一个浮点类型的属性，mtoa对自定义属性命名格式如下：mtoa_constant_<attribute-name>在这里，我们建立一个index的属性名称，则为mtoa_constant_index。数据类型为浮点，其它默认:创建属性完毕后会在物体的Shape节点下多出index属性:给每个物体设置好index的编号，最后渲染就能得到对应的shader结果:

WindowBox Shader
type: item
date: 2017-10-18T03:12:00+08:00
description: Julius Ihle用OSL编写的jiWindowBox shader，支持PRman,Vray,Arnold,Blender等不同平台渲染器。只需一个简单的平面，就可以模拟出室内的效果，透视完美匹配相机，极适合大型城市场景的制作，因为是利用单张贴图去映射，模拟出的室内并不参与光照反射等的计算，大大减轻了模型工作量和渲染压力。这种方式被称为Interior Mapping或Parallax Mapping。参考链接：http://interiormapping.oogst3d.net/贴图说明除了房间的所有墙壁，还有一个中间层（例如可以是家具）和一个窗帘层，以提供真实的深度感。贴图需要注意以下几点：确保只在中间和窗帘区域有alpha。所有的墙壁，天花板和地板都应该是黑色的。RenderMan和Arnold渲染时，最好使用maketx（Arnold）或txmake（RenderMan）将纹理转换为mipmapped纹理文件，这样可以大大提高渲染速度。属性Shader安装Prman可以直接使用编译后的oso文件或者使用osl。VRray可直接使用编译后的oso文件或者使用osl。Arnold5.0需要使用编译后的oso文件拷入 ARNOLD_PLUGIN_PATH路径下，或是使用osl放入同一路径下，启动MAYA后加载mtoa自动编译。可参考 MtoA2.0使用osl Arnold 5.0刚出不久，其中最让我高兴的是支持了osl，目前世面的上几个主流渲染器，基本都早已支持了osl，... Shader下载http://pan.baidu.com/s/1hseTyYS

OctaneRender for Maya Bubble Shader
type: item
date: 2017-09-08T01:21:00+08:00
description: 不得不说Octane渲染这类东西太爽了，cam上可以添加“特效”和“调色”，合成都省去了。使用最新的OctaneRender for Maya 3.06.4版：

V-Ray alsurface shader
type: item
date: 2016-09-23T02:01:00+08:00
description: ChaosGroup官方提供了V-Ray的alSurface shader下载，目前版本是v0.2b-alpha，而且一直在更新中。alSurface shader是来自于Anders Langlands的开源项目https://bitbucket.org/anderslanglands/alshaders/wiki/Home目前他们提供了arnold的shader，并且功能上要比ai的更好用，更完善，再加上因为是免费开源，现在许多公司和个人都在使用alshader。ChaosGroup或许是跟随潮流，参考alSurface编译出了vray版本的alSurface。下载地址：https://github.com/ChaosGroup/vray_al_surface/tags可惜目前还不支持折射。

Cryptomatte tools
type: item
date: 2016-08-10T06:15:00+08:00
description: 在2015年SIGGRAPH上，Psyop的Jonah Friedman和Andy Jones提出了"Cryptomatte"，它可以自动分配ID，并且可以支持motion blur，Depth of field及transparency。SIGGRAPH上的详细介绍http://www.jonahfriedman.com/wp-content/uploads/psyop_IDmattes_poster.pdf现在他们已经提供了nuke工具的下载，并且将Cryptomatte功能集成到了1.0.0RC17的AlShaders。工具下载地址https://github.com/Psyop/CryptomattealSurface,alHair,alLayer上可以直接输出Cryptomatte AOV。目前alshader上可以分别输出crypto_asset，crypto_material，crypto_object三个类型的ID，全部是自动分配，并且不限ID数量。https://aducg.com/ueditor/php/upload/image/20160810/1470779785511714.pngNnke的工具是一个Cryptomatte节点，这里可以添加选择ID和减选。选择可以使用鼠标点选，也可以直接输入物体名称或者材质名称。还有两个项可以分别创建出所有ID的遮罩和所选择的ID遮罩。效果参考

Arnold MatCap Shader
type: item
date: 2015-11-24T03:40:00+08:00
description: MatCap在游戏引擎一类的地方很常用，因为计算快，其实就是一张贴图，当然也没有什么可调节的东西。显然AR这类渲染器并不需要MatCap，但是有时候会碰到各类奇葩的效果，比如TOON一类的效果就体现出它的价值了。只要求出物体的法线便可做到，所以方法很多，而且很简单。其它渲染器也都可以完成。但为什么要用arnold做这个事情呢?原因大致有两点：是我太无聊了。同一镜头全部使用一种渲染器完成会更“好”些，尤其MAYA。MatCap我也仅仅只是拿来渲染某个层方便合成师去完成最终效果而已。因为渲染太快了，所以我多渲染了点.........具体制作方法如下