合成材质
OctaneRender® 合成材质是 Octane 混合材质的高级版本。相比混合材质仅限于混合两种材质,合成材质允许您灵活设置并混合多种材质,生成单一的最终输出,同时严格遵循能量守恒原则。关于能量守恒的详细信息,请参阅相关说明。
(合成材质是旧版本 Octane 中混合材质的重命名升级。)
注意
由于技术原因,合成材质必须使用“子材质”,不能与原始材质类型混用。
将混合材质转换为子材质
在 Cinema 4D 材质管理器中,选中混合材质,然后导航到实时查看器窗口 > 材质 > 转换材质,选择“转换材质”。系统会创建一个新的合成材质,并把原贡献材质转为子材质。
创建子材质
要从零创建子材质,请前往“节点编辑器 > 创建 > 子材质”菜单。这将在工作区新建一个子材质。或者,直接点击 Octane 节点编辑器中的子材质按钮并拖入工作区。

下图为合成材质的基本设置界面:

在上图中,首先“材质 1”和“材质 2”通过“材质蒙版”输入中的“浮点 1”纹理混合。如果“浮点 2”有值,会再次与“输入 1”和“输入 2”结果混合,最终与“输入 3”材质再混合。通过为蒙版插槽分配不同“浮点”纹理节点,可以灵活控制混合方式,且任何类型的纹理均可用作蒙版。
合成材质设置
在实时查看器的材质菜单中选择“合成材质”,即可在 Cinema 4D 材质管理器中新建合成材质。编辑时,在属性面板点击节点编辑器按钮。

材质数量
该选项用于设置要同时混合的材质数量。
材质插槽
可通过材质插槽右侧的复选框启用或禁用连接的子材质。当材质数量增加时,界面会自动生成新的材质插槽。
添加新插槽后,着色器球上方会出现对应标签。需将子材质分配至插槽。当选择暂未分配材质的标签时,将出现“添加材质”按钮,点击即可将子材质加入场景。

使用位移
位移贴图可与混合材质配合使用。您可通过“添加位移”选项应用任意灰度图或程序纹理。关于位移的详细内容,请参考这里。

如上图所示,黄色与黑色条纹基座应用了合成材质。下方为对应材质节点示意:

此例共用三种子材质:
- 一种用于深色条纹
- 一种用于黄色条纹
- 一种为带浅灰色的老化层
条纹本身是通过 OSL 着色器 生成,用作材质蒙版,并连接至第二、第三种材质的蒙版输入。位移节点连接到合成材质节点的“位移”输入。
条纹 OSL 着色器代码由 Microsoft CoPilot 生成,支持自定义条纹特征及方向。
条纹 OSL 着色器(Microsoft CoPilot 输出):
shader soft_stripes_octane_color_pin(
color stripe_color = color(1, 1, 1),
color base_color = color(0, 0, 0),
int stripe_count = 5,
float stripe_width = 0.05,
float blur_width = 0.02,
float falloff_power = 1.0,
float noise_amplitude = 0.01,
color edge_mask = color(0.5) [[ string widget = "null" ]], // 可连接颜色输入
float rotation = 0.0,
float u_shift = 0.0,
float v_shift = 0.0,
output color Cout = 0
)
{
float period = 1.0 / stripe_count;
float clamped_stripe = clamp(stripe_width, 0.0, period * 0.5);
float center_pos = period * 0.5;
float angle = radians(rotation);
float cu = cos(angle);
float su = sin(angle);
float shifted_u = u + u_shift;
float shifted_v = v + v_shift;
float u_local = shifted_u - 0.5;
float v_local = shifted_v - 0.5;
float rotated_u = cu * u_local - su * v_local + 0.5;
float local = mod(rotated_u, period);
float dist = abs(local - center_pos);
float mask_val = luminance(edge_mask); // 从连接的纹理获取灰度
float noisy_dist = dist + (mask_val - 0.5) * 2.0 * noise_amplitude;
float feather_zone = clamped_stripe * 0.5 + blur_width;
float t = clamp(noisy_dist / feather_zone, 0.0, 1.0);
float fade = pow(1.0 - t, falloff_power);
Cout = mix(base_color, stripe_color, fade);
}注意
与 合成纹理 不同,合成材质节点不支持子材质之间的传输模式,只提供基础蒙版(不透明度)功能。
