blender 三渲二
时间: 2024-12-28 18:24:37 浏览: 17
### 使用 Blender 实现三渲二效果
#### 方法一:基于 Eevee 的卡通渲染设置
为了创建带有笔刷效果的影子,在材质编辑器中可以应用沃罗诺伊纹理来调整阴影形状,防止光栅化问题。对于自发光和 Shader 转 RGB 技术的应用十分广泛,尤其是在追求二次元风格的作品里。这些技术能够帮助模拟出更加生动的画面质感[^3]。
```python
import bpy
# 创建新的材料并启用 'Use Nodes'
material = bpy.data.materials.new(name="CartoonMaterial")
material.use_nodes = True
nodes = material.node_tree.nodes
links = material.node_tree.links
# 移除默认 Principled BSDF
bsdf_node = nodes.get('Principled BSDF')
if bsdf_node is not None:
nodes.remove(bsdf_node)
# 添加 Emission 和 Shader to RGB 节点
emission_node = nodes.new(type='ShaderNodeEmission')
shader_to_rgb_node = nodes.new(type='ShaderNodeShaderToRGB')
# 连接节点
links.new(emission_node.outputs['Emission'], shader_to_rgb_node.inputs['Shader'])
# 设置输出节点
output_node = nodes.get('Material Output')
links.new(shader_to_rgb_node.outputs['Color'], output_node.inputs['Surface'])
```
#### 方法二:结合 BSDF 与菲涅尔效应
此方法涉及到了混合不同类型的着色器以达到特定视觉效果的目的。具体来说,就是将漫反射 BSDF 和透明涂层相结合,并通过菲涅尔因子控制两者之间的过渡平滑度。这样不仅可以强化物体表面特性,还能营造出独特的艺术氛围。
```python
# 继续上面的例子...
fresnel_node = nodes.new(type='ShaderNodeFresnel')
mix_shader_node = nodes.new(type='ShaderNodeMixShader')
# 插入 Fresnel 输入到 Mix Shader 控制权重
links.new(fresnel_node.outputs['Fac'], mix_shader_node.inputs['Fac'])
# 将原始发射节点连接至第一个输入端口
links.new(emission_node.outputs['Emission'], mix_shader_node.inputs[1])
# 新建一个 Glossy BSDF 并将其连接到第二个输入端口
glossy_bsdf_node = nodes.new(type='ShaderNodeBsdfGlossy')
links.new(glossy_bsdf_node.outputs['BSDF'], mix_shader_node.inputs[2])
# 更新最终输出路径
links.new(mix_shader_node.outputs['Shader'], shader_to_rgb_node.inputs['Shader'])
```
#### 方法三:添加轮廓线(描边)
为了让角色看起来更像手绘插画,可以在对象上附加 Solidify 修改器,并配合专门设计用于显示边缘线条的新材质完成这一目标。这一步骤的关键在于适当调节参数使得线条宽度适中且自然流畅。
```python
# 获取当前活动的对象
obj = bpy.context.active_object
# 应用 Solidify Modifier 来增加厚度
solidify_modifier = obj.modifiers.new(name="Solidify", type='SOLIDIFY')
solidify_modifier.thickness = -0.05 # 设定为负值表示内部扩展
solidify_modifier.offset = 1 # 向外偏移量
solidify_modifier.use_flip_normals = True # 反转法线方向以便正确显示内侧
solidify_modifier.use_even_offset = False # 关闭均匀分布选项获得更好看的结果
# 定义一个新的纯黑材质供轮廓使用
outline_material = bpy.data.materials.new(name="OutlineMaterial")
outline_material.diffuse_color = (0, 0, 0, 1) # 黑色不透明
bpy.ops.object.material_slot_add()
obj.material_slots[-1].material = outline_material
```
阅读全文