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

2022-08-07 18:52:17
目录
前言正文在 Python 脚本中创建一个着色器我们的想法具体代码与注释创建发光材质具体调用代码

前言

Blender>

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

正文

在>

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

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

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

在>

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

    使用 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创建发光材质的资料请关注易采站长站其它相关文章!