Arnold(C4DToA)阿诺德渲染教程(101) Open Shading Language (OSL) 开放的着色器语言

本文索引

前言

Arnold(C4DToA)阿诺德渲染教程(101) Open Shading Language (OSL) 开放的着色器语言 - R站|学习使我快乐! - 1
开放的着色器编程语言 (OSL)是一个由 Sony Pictures Imageworks (索尼影业旗下的 Imageworks 公司)开发的着色器编程语言,OSL 的表面和体积着色器,定义了物体的表面和体积,如何使用重要性采样来发散光线,因此,OSL 语言很适合支持光线追踪和全局光照的物理渲染器,比如:Arnold 渲染器。这种语言同时也被 V-Ray 3 和 Blender 里面的 Cycles 渲染器(从 Blender 2.65 开始)支持。

Arnold(C4DToA)阿诺德渲染教程(101) Open Shading Language (OSL) 开放的着色器语言 - R站|学习使我快乐! - 2

在 Arnold5.0 中,OSL 着色器可以实现简单的纹理图案到闭包材质,非常牛逼。它是一种替代 C++的着色器方案,并拥有简单高效的编写方法。
PS:新版 Arnold 添加了 OSL 节点可以使用;

OSL 安装

只需要将 OSL 着色器(.OSL,.MTD)放置在 plugins/C4DtoA/shaders 目录下即可使用,重启 Arnold 会自动加载生成节点,和其他着色器一样使用;
如果有 UI 资源文件(.Res,.h,.STR),可放置在/plugins/C4DtoA/res 中;
还可以使用 ARNOLD_PLUGIN_PATH,来指定着色器搜索路径。
使用 Kick 命令可以检测着色器及其参数:

$ kick -info gamma
node:         gamma
type:         shader
output:       RGB
parameters:   3
filename:     gamma.oso
version:      4.2.12.0
Type          Name                              Default
------------  --------------------------------  --------------------------------
RGB           Cin                               0, 0, 0
FLOAT         exponent                          1
STRING        name

OSL 局限性

着色器名称必须唯一,否则不会加载,可以通过日志看到记录;
目前只支持一个输出参数,不支持多个输出。

Arnold(C4DToA)阿诺德渲染教程(101) Open Shading Language (OSL) 开放的着色器语言 - R站|学习使我快乐! - 3

OSL 工作流

OSL 着色器一般为.OSL 文件,每个文件对应一个阿诺德着色器节点(可以在节点编辑器中找到),看例子:
Gamma.osl

shader gamma(   //与文件名一致
color Cin = color(0, 0, 0),
float exponent = 1,
output color Cout = color(0, 0, 0))
{
Cout = pow(Cin, 1/exponent);
}

着色器问见面 Gamma.osl,所以 shader 的名称需要与其一致;
着色器定义的输入输出参数很像 Arnold C++的着色器节点,但语法更紧凑;
这里 Cin 和 gamma 是输入参数,而 Cout 是输出参数,所有参数必须用默认初始化值。

OSL 编译

阿诺德会自动搜索到着色器并进行自动编译,编译后在.OSL 文件的同目录中,会多出一个.OSO 文件.
如果没有对应的.OSO 或.OSL 被修改,通常会进行自动编译。
你也可以使 Arnold 的 OSLC 程序手动编译。

$ oslc gamma.osl
Compiled gamma.osl -> gamma.oso

.OSO 文件包含了与操作系统和 CPU 指令无关的中间代码。
在渲染的时候,.OSL 会动态的将着色器节点转换为机器代码,并且最大化的优化着色器,从分利用着色器节点的参数。

手动加载 OSL 着色器

除了前面的可以自动搜素之外,还可以通过 OSL 节点手动加载着色器。
你可以将表达式插入到着色器节点中,让它加载别的着色器,从而进行更多的控制。
OSL 使用 shadername 参数来指定加载的着色器,不需要.osl 或.oso 后缀;
一旦用 shadername 参数,OSL 就会被添加到节点同,同时具有 param_ 前缀;

osl
{
 name myshader
 shadername somefolder/test  //加载着色器
 param_value 0.5
}

当然你也可以直接嵌入.OSL 代码

osl
{
 name myshader
 code "shader test(float value = 0, output float result = 0)//嵌入着色器
       {
          result = value * 10;
       }"
 param_value 0.5
}

支持特性

参数
通常情况下,OSL 的默认参数会被转换成相应的 Arnold 参数,因为 Arnold 只目前只支持一个输出参数,因此如果有多个输出参数,将以第一个为准。

OSL 类型
Arnold 类型
int INT
int (with metadata)
BOOLEAN
int (with metadata)
ENUM
float FLOAT
color RGB
color RGBA
point VECTOR
vector VECTOR
normal VECTOR
point POINT2
matrix MATRIX
array of any type ARRAY
closure color CLOSURE
struct POINTER

布尔和枚举参数使用的是 OSL 元数据的整数创建的。

#define OPTION_A 0
#define OPTION_B 1
#define OPTION_C 2
 
shader example(
    int booleanvalue = 0 [[ string widget = "boolean" ]],
    int enumvalue = 0 [[ string widget = "popup", string options = "OptionA|OptionB|OptionC" ]])
{
    if (booleanvalue)
        ...
    if (enumvalue == OPTION_B)
        ...
}

属性
节点参数和用户数据可通过 getattribute()方法获得。

// 对象参数
int id;
getattribute("id", id);
 
// 对象用户数据
color Cs;
getattribute("Cs", Cs);
 
// 来自其他节点的参数
int AA_samples;
getattribute("options", "AA_samples", AA_samples);

标准参数
使用以下属性,如果 getattribute()函数指定 objectname 参数,就会检索特定于该对象的值。如果没有指定特定对象,则表示当前对象。

名称
类型
描述
"geom:type" string 对象类型
"geom:name" string 对象名称
"geom:bounds point[2] 世界空间中的对象边界框 (min, max)
"geom:objbounds" point[2] 对象空间中的对象边界框 (min, max)

标准相机属性

使用以下属性,如果 getattribute()函数指定了 objectname 参数,并且它是有效摄像机的名称,则检索特定于该摄像机的值。如果没有指定特定的摄像机,则表示全局摄像机或默认摄像机。

名称
类型
描述
"camera:screen_window" int[2] 图像分辨率
"camera:pixelaspect" float 像素长宽比
"camera:projection" string 摄像机类型
"camera:fov" float 视野
"camera:clip_near" float 近端修剪距离
"camera:clip_far" float 远端修剪距离
"camera:clip" float[2] 近端和远端修剪距离
"camera:shutter_open" float 快门打开时间
"camera:shutter_close" float 快门关闭时间
"camera:shutter" float[2] 快门打开和关闭时间
"camera:screen_window" float[4] 屏幕窗口 (xmin, ymin, xmax, ymax)

着色器全局

Arnold 支持大多数 OSL 着色器全局格式,如 P, u, v, N, Ng 和 time。它们的含义与 c++ shading API 中的含义相同。
目前不支持 Ps(用于光滤镜)、surfacearea()、dtime 和 dPdtime 着色器全局。
所有着色器全局都被认为是只读的,我们不支持对 Ci 和 P 进行写操作以输出闭包或置换。应该使用输出参数。标准相机属性
使用以下属性,如果 getattribute()函数指定了 objectname 参数,并且它是有效摄像机的名称,则检索特定于该摄像机的值。
如果没有指定特定的摄像机,则表示全局摄像机或默认摄像机。

纹理

通过内置的 texture()和 gettextureinfo()函数访问纹理。函数的作用是:接受一个可选的 colorspace 参数来表示要转换的纹理的颜色空间。
注意,与 Arnold c++ shading API 不同的是,为了与 OSL 标准保持一致,纹理原点假设位于左上角而不是左下角。
为了匹配,在 UDIM 纹理的情况下,v 坐标可以翻转到 1 - v,或者 floor(v) + 1 - mod(v, 1)。

// 目标纹理颜色
color tex = texture(filename, u, v);
 
// 查询纹理分辨率
int resolution;
gettextureinfo(filename, "resolution", resolution);

体积通道
体积通道可以通过使用对象空间坐标的 texture3d()获得。

point Po = transform("object", P);
float density = texture3d("density", Po, "interp", "bicubic");

闭包
支持以下闭包,与c++ shader API中的闭包相匹配。

closure color emission();
closure color background();
closure color diffuse(normal N);
closure color oren_nayar (normal N, float sigma);
closure color translucent(normal N);
closure color microfacet(string distribution, normal N, vector U,
                         float xalpha, float yalpha, float eta, int refract);
closure color microfacet(string distribution, normal N,
                         float alpha, float eta, int refr);
closure color reflection(normal N, float eta);
closure color reflection(normal N);
closure color refraction(normal N, float eta);
closure color transparent();
closure color holdout();
closure color empirical_bssrdf(vector mfp, color albedo);
closure color volume_absorption();
closure color volume_emission();
closure color volume_henyey_greenstein(color absorption, color scattering,
                                       color emission, float g);

示例着色器输出一个闭包:

shader simple_diffuse(
    color albedo = 0.8,
    float opacity = 1.0,
    output closure color result = 0)
{
    result = opacity * albedo * diffuse(N) + (1 - opacity) * transparent();
}

跟踪

支持 OSL trace()函数,用于跟踪射线。不支持执行着色的阴影参数。
traceset 参数是受支持的,默认情况下使用一个包含的 traceset,如果 traceset 名称的前缀是- character eter,则为 exclusive。
有关命中的信息可以使用 getmessage()检索,支持命中、hitdist、P、N、u、v 以及对命中对象的任意用户数据和参数查找。

int hit = trace(origin, direction, "traceset", tracesetname);
 
if (hit)
{
    // query hit distance
    float hitdist;
    getmessage("trace", "hitdist", hitdist);
 
    // query parameter on object that was hit
    string name;
    getmessage("trace", "name", name);
 
    // query user data on position where object was hit
    color Cs;
    if (getmessage("trace", "Cs", Cs))
        ...;
}

光线类型
OSL raytype()函数返回 1,如果被着色的光线是给定类型的,返回 1,
返回 0,则射线不是这种类型,或者射线类型名称不被渲染程序识别。

支持射线类型
'camera"
"shadow"
'diffuse_transmit"
'specular_transmit"
'volume_scatter"
'diffuse_reflect"
'specular_reflect"
'subsurface"

OSL 性能

OSL 和 c++着色器可以链接到一个单一的着色器节点。
然而,在将 OSL 着色器的输出连接到 c++着色器时,会有少量的开销(可能是总渲染时间的 1- 2%)。
为了使 OSL 优化器能够进行积极的全节点优化,应该使用尽可能多的 OSL 着色器节点。
评估着色器发生在第一次编译和优化时。这增加了第一个像素的时间,但可以在减少渲染时间的整体上得到回报。

调试

OSL_OPTIONS 环境变量可以用来调试着色器中的常见错误或者打印更详细的信息:

# 查找超出边界访问的数组、NaN/Infs 和未初始化变量的使用的昂贵代码
OSL_OPTIONS="range_checking=1,debug_nan=1,debug_uninit=1"
 
#为每个已编译的着色器发出消息
OSL_OPTIONS="compile_report=1"
 
# 每个线程应该处理调用数量的警告
OSL_OPTIONS="max_warnings_per_thread=100"

更多参考信息
Open Shading Language 介绍
Open Shading Language 规范
本文译自 Arnold 官方文档:OSL Shaders

相关推荐

【R站译制】中文字幕 《Arnold6阿诺德渲染器终极指南》The Ultimate Introduction to Arnold 6 for Cinema 4D 视频教程 强烈推荐!!!

Arnold 教科书级百科全书 通过本教程你可以学习到:Arnold6 的工作流程、全面采样设置及注意事项、光线深度设置、全面的灯光使用、Arnold 天空、室内照明、HDRI

【R站翻译】中文字幕 C4D《Arnold(C4DtoA)阿诺德真实材质渲染宝典》高端视频教程(含工程) Developing Realistic shaders in Arnold for Cinema 4D 强烈推荐

Arnold 真实材质经典案例 相信很多小伙伴已经了解过这套教程,应该是目前市面上最好的 Arnold 渲染器节点系统教程,真实渲染什么的,你与大神之间,或许只缺一部

Arnold(C4DtoA)

【R站译制】中文字幕 《Arnold5阿诺德渲染器终极指南》之龙材质 The Dragon Shader 视频教程

2018-7-26 20:07:57

Arnold(C4DtoA)

Arnold(C4DToA)阿诺德渲染教程(102) : 新特性 Sheen 布料着色器 (版本2.4.0\核心5.2)

2018-8-12 16:15:37

37 条回复 A文章作者 M管理员
  1. 淘宝怎么购买听话「『网址』;———cuiyao999.com———」据头条新闻联合报道:当你有想法时,与其听非专业人士随便说,影响了你对一个事物的认知和判断,莫不如实事求是,找个你信得过的专业团队或者加我聊聊,专业的事交给专业的人去做,会让你省时、省力、省心且一本万利。爱国、进步、科学、民主。自强不息,厚德载物。求是创新。博学而笃志,切问而近思。自强、弘毅、求是、拓新。真理!(央视网评论员)“全球伙伴”线上线下互荐优势 展魅力抛招商“橄榄枝”新疆夏粮收购工作已全面启动 平均收购价为2.54元和田玉如何辨真伪?“鉴宝界福尔摩斯”有妙招星火成炬|“超人”战衣两岸记者访天山下的县中学:社团活动丰富多彩 民族传统传承延续斯里兰卡央行加息100个基点应对通胀两岸记者访天山下的县中学:社团活动丰富多彩 民族传统传承延续复活《帝后礼佛图的“80后”:用心讲述洛阳文化故事香港运输署设红光投射灯助行人交通安全 未来将定路线图新闻频道-央视网-CCTV-央视网-搜狐新闻-新浪新闻-腾讯新闻独家声明(参与记者:胡绩伟、穆青、李普、田流、李峰、阎吾、柏生、彭迪、黄钢、金凤)来源:央视网、人民网、搜狐财经、新华网、凤凰资讯、网易新闻、知乎日报、热点资讯、搜狐新闻、新浪新闻总策划:莫言策划:马云、李彦宏监制:雷军、许家印统筹:任正非、柳传志、方洪波文字:李嘉诚、董明珠、宗庆后编辑:王兴、杨元庆视频:沈南鹏视觉/海报:字节跳动、张一鸣新华社国内部新华社广东分社联合出品免责声明:本文来自腾讯新闻客户端自媒体,该文观点仅代表作者本人,搜狐号、网易号、企鹅号、百家号系信息发布平台,本平台仅提供信息存储服务。「『网址』;———cuiyao999.com———」淘宝怎么购买听话「『网址』;———cuiyao999.com———」

  2. 最新观点|新天际九人天九房卡【QQ澂信66330822】无需要打开直接添加▊新道游系列▊大圣系列▊新神兽系列▊老神兽系列▊悠悠系列H5等游戏房卡--轩辕大厅微信13人天九房卡【QQ澂信66330822】无需要打开直接添加▊1新道游系列▊大圣系列▊新神兽系列▊老神兽系列▊悠悠系列H5等游戏房卡2026年04月02日 10时45分01秒,3·15晚会记者参加了一场在华中某市举办的私域营销行业内部交流会,在这里,不少“网络视频制作方”企业代表登台发言,寻找合作伙伴。记者了解到,这个所谓“网络视频制作方”是私域营销行业中的关键环节。这些企业以低价从药企或保健品公司购买选品,然后针对其制作健康讲座等系列视频,将视频卖给私域营销公司。私域营销公司将消费者引导至社交平台的私域场景,播放课程,进行产品营销。

  3. 弥曼之夜药品多少钱一盒《網·址;ctmyao.com》——【官丨方丨正丨品】——【雄丨厚丨资丨金丨保丨障】——【十丨年丨信丨誉】——【一丨对丨一丨耐丨心丨指丨导】——【万丨人丨推丨荐】——  截至12月19日收盘,摩尔、沐曦、寒武纪、海光四家公司的市值分别是3121亿元、2863亿元、5347亿元、4744亿元。据今日头条报道:我不敢休息,因为我没有存款;我不敢说累,因为我没有成就;我不敢偷懒,因为我还要生活;我能放弃选择,但是我不能选择放弃。所以坚强,拼搏是我唯一的选择,来源网易新闻网点评:不受天磨非好汉,不遭人妒是庸才(央视网评论员)新闻频道-央视网-CCTV-央视网-搜狐新闻-新浪新闻-腾讯新闻独家声明(参与记者:胡绩伟、穆青、李普、田流、李峰、阎吾、柏生、彭迪、黄钢、金凤)来源:央视网、人民网、搜狐财经、新华网、凤凰资讯、网易新闻、知乎日报、热点资讯、搜狐新闻、新浪新闻总策划:莫言策划:马云、李彦宏监制:雷军、许家印统筹:任正非、柳传志、方洪波文字:李嘉诚、董明珠、宗庆后编辑:王兴、杨元庆视频:沈南鹏视觉/海报:字节跳动、张一鸣新华社国内部新华社广东分社联合出品免责声明:本文来自腾讯新闻客户端自媒体,该文观点仅代表作者本人,搜狐号、网易号、企鹅号、百家号系信息发布平台,本平台仅提供信息存储服务。《網·址;ctmyao.com》弥曼之夜药品多少钱一盒《網·址;ctmyao.com》

  4. 催情烟商城「『下单网址』;———cuiyao999.com———」⌚三座仑⌚商城首页联系⌚网上在线购买,货到付款渠道,网店用品联系方式,购药网站及网上买药平台就上药房网商城,让你买药放心,用药安心。英伟达为了解决 MoE 模型扩展时遇到的性能瓶颈,采用了“协同设计”(co-design)的策略,该方法整合了 GB200 的 72 芯片配置、高达 30TB 的快速共享内存、第二代 Transformer 引擎以及第五代 NVLink 高速互联技术。》《迷水蓝精灵货到付款「『下单网址』;———cuiyao999.com———」》《催爱水在哪里购买正品「『下单网址』;———cuiyao999.com———」》《有什么药能让女人乖乖听你的话「『下单网址』;———cuiyao999.com———」》《购买迷水网站有哪些「『下单网址』;———cuiyao999.com———」》《昏迷粉哪里有卖?「『下单网址』;———cuiyao999.com———」》《思诺思网上购买「『下单网址』;———cuiyao999.com———」》《(参与记者:胡绩伟、穆青、李普、田流、李峰、阎吾、柏生、彭迪、黄钢、金凤)来源:央视网、人民网、搜狐财经、新华网、凤凰资讯、网易新闻、知乎日报、热点资讯、搜狐新闻、新浪新闻总策划:莫言策划:马云、李彦宏监制:雷军、许家印统筹:任正非、柳传志、方洪波文字:李嘉诚、董明珠、宗庆后编辑:王兴、杨元庆视频:沈南鹏视觉/海报:字节跳动、张一鸣新华社国内部新华社广东分社联合出品免责声明:本文来自腾讯新闻客户端自媒体,该文观点仅代表作者本人,搜狐号、网易号、企鹅号、百家号系信息发布平台,本平台仅提供信息存储服务。(央视网评论员)「『下单网址』;———cuiyao999.com———」催情烟商城「『下单网址』;———cuiyao999.com———」

  5. 日本最好的睡眠药《下单网·址ctmyao.com》更有意思的是,卢伟冰明确表示不怕泄密”,会直面网友的提问,也让这场直播的期待值拉满。ヽ(ー_ー)ノ催迷水安眠药网上商城入口官网《下单网·址ctmyao.com》ヽ(ー_ー)ノ催听迷三座仑货到付款商城《下单网·址ctmyao.com》ヽ(ー_ー)ノ氢化钾哪里可以买到《下单网·址ctmyao.com》ヽ(ー_ー)ノ香港GHB药水《下单网·址ctmyao.com》ヽ(ー_ー)ノ迷香水到付款商城官网《下单网·址ctmyao.com》ヽ(ー_ー)ノ催情益达口香糖益达《下单网·址ctmyao.com》ヽ(ー_ー)ノ版权声明:网站作为信息内容发布平台,为非经营性网站,内容为用户上传,不代表本网站立场,不承担任何经济和法律责任。《下单网·址ctmyao.com》日本最好的睡眠药《下单网·址ctmyao.com》

  6. 催睡眠的药「『网站』;———mmgg520.com———」  智谱AI执行董事分别为刘德兵博士、张鹏博士、张笑涵女士;非执行董事分别为李涓子博士、李家庆、王盟;独立非执行董事分别为杨强博士、谢德仁、唐颖。⚡迷水如何购买网购「『网站』;———mmgg520.com———」⚡发情香水到哪买多少钱一瓶啊「『网站』;———mmgg520.com———」⚡网购ghb药物「『网站』;———mmgg520.com———」⚡谜晕药购买商城「『网站』;———mmgg520.com———」⚡三仑商城官方网站入口「『网站』;———mmgg520.com———」⚡迷香香水网购怎么搜「『网站』;———mmgg520.com———」⚡「『网站』;———mmgg520.com———」催睡眠的药「『网站』;———mmgg520.com———」

  7. 喷雾乖乖迷水官网正品在线购买渠道网上商城《网·址;cuiyao999.com》——《正丨品丨保丨障》——《雄丨厚丨资丨金丨保丨障》——《国丨外丨代丨购》——《口丨碑丨第丨一》——《强丨效丨安丨全》——截至2025年9月30日止九个月,智谱AI拥有超过12,000名机构客户,较截至2025年6月30日止六个月大幅增加。此外,2025年11月,智谱AI的日均token消耗量为4.2万亿。联合出品免责声明:本文来自腾讯新闻客户端自媒体,该文观点仅代表作者本人,搜狐号、网易号、企鹅号、百家号系信息发布平台,本平台仅提供信息存储服来源、人民网、新浪财经、新华网、中新网、凤凰资讯、网易新闻、知乎日报、热点资讯、新浪新闻、新闻总策划:莫言《网·址;cuiyao999.com》喷雾乖乖迷水官网正品在线购买渠道网上商城《网·址;cuiyao999.com》

有新私信 私信列表
搜索