Blender Python编程创建发光材质示例详解

 更新时间:2022年08月07日 15:43:53   作者:ShaderJoy  
这篇文章主要为大家介绍了Blender Python编程创建发光材质示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

前言

Blender 并不是唯一一款允许你为场景编程和自动化任务的3D软件; 随着每一个新版本的推出,Blender 正逐渐成为一个可靠的 CG 制作一体化解决方案,从使用油脂铅笔的故事板到基于节点的合成。

事实上,你可以使用 Python 脚本和一些额外的包来批处理你的对象实例化,程序化地生成东西,配置你的渲染设置,甚至获得你当前项目的自定义统计数据,这是非常棒的功能! 这是一种减轻繁琐任务负担的方式,同时也能让开发者参与到这个创造性工具社区中,而不仅仅是美术人员。

正文

在 Blender 中,着色器通常是通过基于节点的图形编辑器(可以在 “Shading” 选项卡中找到)来编辑的,它可以让你根据想要构建或多或少复杂的着色流程来链接和组合尽可能多的内置节点。然而,在本文中,我们将制作一个超级简单的着色器,只有一个节点,所以我们将在 Python 脚本 🙂 中做所有的事情。

创建完材质之后会使用那些着色器,并应用到你的 3D 几何物体上。一个物体可能有几个 材质槽,例如,它可以为几何的不同部分使用不同的着色器,但我们今天不会讨论这种复杂的情况,我们将只考虑 每个物体一个材质槽 的情形。

发光材质 为例。你可以把它想象成一个有强度(strength 参数)和颜色的大灯泡。它将使你的 3D 对象发光(所以你的对象将成为你场景中的光源,将与其余的网格交互!) 🙂

PS: 选择 Shader 类型对于这个项目,我使用的 EEVEE 引擎,其也可以与着色器节点工作,即使它与 Cycles 引擎并不是所有节点类型都相同。

在 Python 脚本中创建一个着色器

为了完全通过脚本创建和分配一个着色器,我们必须:

  • 使用 bpy.data 子模块创建一个新的着色器资源
  • “编辑” 这个着色器,就像我们使用着色器节点编辑器一样: 我们将删除一些节点,添加其他节点,设置它们的属性并将它们链接在一起
  • 对新创建材质的引用进行检索
  • 最后,将其添加到我们对象的材质数据(即槽)中

让我们一步一步来做这件事。我们将从创建一个名为 create_emission_shader() 的新函数开始

它将接收一些 强度Strength) 和 颜色Color) 参数,并使用这些参数来设置一个基本的 2 节点图,其中有一个发光Emission)节点和一个输出Output)节点。

我们的想法

  • 从基本节点模板开始,清除所有初始节点
  • 然后,可以添加我们的 发光 节点和 输出 节点,通过更新其输入字段的值来配置 发光 节点
  • 并在两个节点之间创建一个链接

具体代码与注释

创建发光材质

def create_emission_shader(color, strength, mat_name):
    # create a new material resource (with its
    # associated shader)
    mat = bpy.data.materials.new(mat_name)
    # enable the node-graph edition mode
    mat.use_nodes = True
    # clear all starter nodes
    nodes = mat.node_tree.nodes
    nodes.clear()
    # add the Emission node
    node_emission = nodes.new(type="ShaderNodeEmission")
    # (input[0] is the color)
    node_emission.inputs[0].default_value = color
    # (input[1] is the strength)
    node_emission.inputs[1].default_value = strength
    # add the Output node
    node_output = nodes.new(type="ShaderNodeOutputMaterial")
    # link the two nodes
    links = mat.node_tree.links
    link = links.new(node_emission.outputs[0], node_output.inputs[0])
    # return the material reference
    return mat

现在很容易使用这个方法来创建我们的材质资源,并将它们应用到我们的对象上。

例如,我们将需要一个白色的发光材质为光环,一个黄色的发光材质为太阳,为每个行星创建一个随机颜色的发光材质(尽管我将添加更多的蓝色,以更好的整体颜色平衡 😉):

具体调用代码

# ...
N_PLANETS = 6
ring_mat = create_emission_shader(
    (1, 1, 1, 1), 1, "RingMat"
)
for n in range(N_PLANETS):
    # ...
    planet = create_sphere(r, d, "Planet-{:02d}".format(n))
    planet.data.materials.append(
        create_emission_shader(
            (random(), random(), 1, 1),
            2,
            "PlanetMat-{:02d}".format(n)
        )
    )
    # add the radius ring display
    ring = create_torus(d, "Radius-{:02d}".format(n))
    ring.data.materials.append(ring_mat)
# add the sun sphere
sun = create_sphere(12, 0, "Sun")
sun.data.materials.append(
    create_emission_shader(
        (1, 0.66, 0.08, 1), 10, "SunMat"
    )
)

如果你在 3D 视图中将阴影模式改为 “rendering”,并删除当前场景中的所有对象,然后运行以上脚本,你会看到它们现在有了漂亮的发光材质!

  • 应用材质前

  • 应用材质后

注意,在运行脚本后,你甚至可以进入 “Shading” 选项卡,选择一个带有着色器的对象并查看其着色器图。

它看起来像预期的那样: 两个节点,一个 Emission 和一个 Output,两者之间的链接,以及一些StrengthColor 属性的自定义值。

以上就是Blender Python编程创建发光材质示例详解的详细内容,更多关于Blender Python创建发光材质的资料请关注脚本之家其它相关文章!

相关文章

  • Pyinstaller将py打包成exe的实例

    Pyinstaller将py打包成exe的实例

    下面小编就为大家分享一篇Pyinstaller将py打包成exe的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-03-03
  • Django重设Admin密码过程解析

    Django重设Admin密码过程解析

    这篇文章主要介绍了Django重设Admin密码过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • python多项式拟合之np.polyfit 和 np.polyld详解

    python多项式拟合之np.polyfit 和 np.polyld详解

    这篇文章主要介绍了python多项式拟合之np.polyfit 和 np.polyld的实例代码,python数据拟合主要可采用numpy库,库的安装可直接用pip install numpy等,需要的朋友跟随小编一起学习吧
    2020-02-02
  • Python的pandas类库结构参数

    Python的pandas类库结构参数

    pandas是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的,Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具,需要的朋友可以参考下
    2023-07-07
  • Python实现的爬取百度文库功能示例

    Python实现的爬取百度文库功能示例

    这篇文章主要介绍了Python实现的爬取百度文库功能,结合实例形式分析了Python针对百度文库的爬取、编码转换、文件保存等相关操作技巧,需要的朋友可以参考下
    2019-02-02
  • 使用Python的Django框架实现事务交易管理的教程

    使用Python的Django框架实现事务交易管理的教程

    这篇文章主要介绍了使用Python的Django框架实现事务交易管理的教程,针对数据库的事务行为进行一系列操作,要的朋友可以参考下
    2015-04-04
  • 部署django项目安装uwsgi出错的解决方法总结

    部署django项目安装uwsgi出错的解决方法总结

    uwsgi协议是一个uWSGI服务器自有的协议,它用于定义传输信息的类型(type of information),每一个uwsgi packet前4byte为传输信息类型描述,它与WSGI相比是两样东西,下面这篇文章主要给大家介绍了关于部署django项目安装uwsgi出错的解决方法,需要的朋友可以参考下
    2022-08-08
  • 使用Mixin设计模式进行Python编程的方法讲解

    使用Mixin设计模式进行Python编程的方法讲解

    Mixin模式也可以看作是一种组合模式,综合多个类的功能来产生一个类而不通过继承来实现,下面就来整理一下使用Mixin设计模式进行Python编程的方法讲解:
    2016-06-06
  • Python requests用法和django后台处理详解

    Python requests用法和django后台处理详解

    这篇文章主要给大家介绍了关于Python中requests用法和django后台处理的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2022-03-03
  • Python将多个list合并为1个list的方法

    Python将多个list合并为1个list的方法

    今天小编就为大家分享一篇Python将多个list合并为1个list的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06

最新评论