0
$\begingroup$

I have some problem with my blender code export to fbx file. I set color by vertex_color and set mode is Vertex_paint. But when I export this object to fbx file and open in Unity it is not include color. I think the reason might be dont set color for material of object. So could you help me to convert ? This is my code. Thank you so much for your help

import math

# mesh arrays
verts = []
faces = []

# mesh variables
numX = 10
numY = 10

# wave variables
freq = 1
amp = 1
scale = 1

#fill verts array
for i in range (0, numX):
    for j in range(0,numY):
        x = scale * i
        y = scale * j
        z = scale*((amp*math.cos(i*freq))+(amp*math.sin(j*freq)))
        vert = (x,y,z) 
        verts.append(vert)

#fill faces array
count = 0
for i in range (0, numY *(numX-1)):
    if count < numY-1:
        A = i
        B = i+1
        C = (i+numY)+1
        D = (i+numY)
        face = (A,B,C,D)
        faces.append(face)
        count = count + 1
    else:
        count = 0

#create mesh and object
mesh = bpy.data.meshes.new("wave")
object = bpy.data.objects.new("wave",mesh)
#set mesh location
object.location = bpy.context.scene.cursor.location
bpy.context.collection.objects.link(object)

#create mesh from python data
mesh.from_pydata(verts,[],faces)
mesh.update(calc_edges=True)

vert_list = mesh.vertices
color_map_collection = mesh.vertex_colors
if len(color_map_collection) == 0:
    color_map_collection.new()
else:
    color_map_collection.active

color_map = color_map_collection['Col']
i = 0

for poly in mesh.polygons:
    for idx in poly.loop_indices:
        loop = mesh.loops[idx]
        v = loop.vertex_index
        final = (0.1,0.5,0.2,1)
        color_map.data[i].color = final     
        i += 1

bpy.context.view_layer.objects.active = object
bpy.ops.object.mode_set(mode='VERTEX_PAINT', toggle=False)
$\endgroup$
8
  • $\begingroup$ Do the colors look like you'd expect in blender? Unity doesn't read vertex color by default, you have to enable it. Also when you build, you need to enable vertex color under the mesh optmization options. Other than that I never had troubles with vertex color and fbx. $\endgroup$ Apr 8, 2020 at 8:30
  • $\begingroup$ HI @FrederikSteinmetz absolutely, I would like to make the color look like blender in Unity. Thank you for your reply. Btw if you have any document or example about how to enable vertex color under the mesh optimization options in blender/ even Unity, please share for me. Honestly, I pretty fresh in this field. Thank you $\endgroup$ Apr 8, 2020 at 9:17
  • $\begingroup$ before I do this, do you have a shader that handles vert. col. in Unity? $\endgroup$ Apr 8, 2020 at 10:29
  • $\begingroup$ Your mean is vertex and faces define? Sorry for my silly question. Because I am not clearly understand "shader". $\endgroup$ Apr 8, 2020 at 10:32
  • $\begingroup$ You won't see any vertex colors in Unity, unless you have a shader (material) that can read them. $\endgroup$ Apr 8, 2020 at 10:38

1 Answer 1

0
$\begingroup$

Unity is a game engine, not a vertex editing engine. While you can build or download tools to edit meshes inside of Unity, I'd advise you to stick to Blender for that. Unity displays everything similar to Eevee. If you assign a default material to an object in Eevee it also won't show vertex colors, unless you tell your material to read them. In Blender, you need a built-in node for that, in Unity you need a shader that can read and display them.
https://forum.unity.com/threads/finding-and-using-a-vertex-colors-shader.236366/
Unity will also omit any vertex color information in the build, unless you tell it to keep them.
enter image description here
This option is in the Player Settings.

$\endgroup$
2
  • $\begingroup$ Thank you for your support, I actually import fbx within color into Unity $\endgroup$ Apr 9, 2020 at 3:48
  • $\begingroup$ if it helped yout, would you mind accepting my answer? $\endgroup$ Apr 9, 2020 at 9:51

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .