[英]how do I set the base colour of a material to equal vertex colours in Blender 2.9 using python?
这就是我实例化网格 object 和材料的方式:
mymesh = bpy.data.meshes.new(objname)
myobject = bpy.data.objects.new(objname, mymesh)
mymat = bpy.data.materials.get("Material")
if mymat is None:
mymat = bpy.data.materials.new(name="Material")
if myobject.data.materials:
# assign to 1st material slot
myobject.data.materials[0] = mymat
else:
# no slots
myobject.data.materials.append(mymat)
下面是我如何设置顶点 colors 的颜色:
if len(mymesh.vertex_colors) == 0:
mymesh.vertex_colors.new()
for f in mymesh.vertex_colors[0].data:
f.color = rgb # (0,0,0,1) for black
当我处于顶点绘制模式时,我可以看到 colors,但是当我使用 Eevee 或 Cycles 渲染场景时,colors 不显示。
我可以通过使用 UI 将材质的基色更改为等于顶点 Colors 来解决此问题,但是如何使用 python 代码来做到这一点?
编辑:也许解决方案使用bpy.data.materials["Material"].node_tree.nodes["Principled BSDF"].inputs
?
我想做类似的事情。 我不知道您是否仍在研究它,但这是我发现的似乎适用于 Blender 2.92.0 的解决方案。
要测试脚本:
import bpy
from random import *
# ---------- SET RANDOM COLORS TO VERTICES ----------
# Load vertex colors data
mesh = bpy.data.objects["Cube"].data
if not mesh.vertex_colors:
mesh.vertex_colors.new()
print("Object had no vertex colors, adding them")
# Assign random colors to vertices
for vCol in mesh.vertex_colors[0].data:
for i in range(len(vCol.color) - 1):
vCol.color[i] = random()
# ---------- LOAD AND LINK MATERIAL TO MESH ----------
# Load material
mymat = bpy.data.materials.get("mymat")
if mymat is None:
mymat = bpy.data.materials.new(name = "mymat")
mymat.use_nodes = True
# Link material to mesh
if mesh.materials:
mesh.materials[0] = mymat
else:
mesh.materials.append(mymat)
# ---------- MANAGE NODES OF SHADER EDITOR ----------
# Get node tree from the material
nodes = mymat.node_tree.nodes
principled_bsdf_node = nodes.get("Principled BSDF")
# Get Vertex Color Node, create it if it does not exist in the current node tree
vertex_color_node = None
if not "VERTEX_COLOR" in [node.type for node in nodes]:
vertex_color_node = nodes.new(type = "ShaderNodeVertexColor")
else:
vertex_color_node = nodes.get("Vertex Color")
# Set the vertex_color layer we created at the beginning as input
vertex_color_node.layer_name = "Col"
# Link Vertex Color Node "Color" output to Principled BSDF Node "Base Color" input
links = mymat.node_tree.links
link = links.new(vertex_color_node.outputs[0], principled_bsdf_node.inputs[0])
以下是一些帮助我做到这一点的资源:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.