Work on ambient light block
This commit is contained in:
parent
4ed2ed487e
commit
b22dd63100
|
@ -4,13 +4,13 @@ import operator
|
|||
|
||||
print("Blender export scene in FBX Format in file "+sys.argv[-1])
|
||||
|
||||
def shouldBakeMaterial(mat):
|
||||
def should_bake_material(mat):
|
||||
return 'bakeType' in mat and mat['bakeType'] == 'lit'
|
||||
|
||||
def shouldBakeObject(obj):
|
||||
return obj.type == 'MESH' and len(obj.material_slots) > 0 and obj.material_slots[0].material and shouldBakeMaterial(obj.material_slots[0].material)
|
||||
def should_bake_object(obj):
|
||||
return obj.type == 'MESH' and len(obj.material_slots) > 0 and obj.material_slots[0].material and should_bake_material(obj.material_slots[0].material)
|
||||
|
||||
def ensureColorLayer(mesh):
|
||||
def get_or_make_color_layer(mesh):
|
||||
for layer in mesh.vertex_colors:
|
||||
if layer.name == 'Col':
|
||||
return layer
|
||||
|
@ -22,6 +22,12 @@ def ensureColorLayer(mesh):
|
|||
def vector_add(a, b):
|
||||
return [a[0] + b[0], a[1] + b[1], a[2] + b[2]]
|
||||
|
||||
def vector_min(a, b):
|
||||
return [min(a[0], b[0]), min(a[1], b[1]), min(a[2], b[2])]
|
||||
|
||||
def vector_max(a, b):
|
||||
return [max(a[0], b[0]), max(a[1], b[1]), max(a[2], b[2])]
|
||||
|
||||
def vector_mul(a, b):
|
||||
if isinstance(a, float):
|
||||
return [x * a for x in b]
|
||||
|
@ -59,12 +65,39 @@ def world_space_verts(obj):
|
|||
|
||||
class AmbientBlock:
|
||||
def __init__(self, obj):
|
||||
if obj.type != 'MESH':
|
||||
raise Exception('Can only make ambient block from mesh')
|
||||
|
||||
vertices, normals = world_space_verts(obj)
|
||||
colors = get_or_make_color_layer(obj.data)
|
||||
|
||||
midpoint = calc_midpoint(vertices)
|
||||
|
||||
self.midpoint = midpoint
|
||||
print(midpoint)
|
||||
corner_colors = [None] * 8
|
||||
|
||||
bb_min = vertices[0]
|
||||
bb_max = vertices[0]
|
||||
|
||||
for index in range(len(vertices)):
|
||||
corner_index = 0
|
||||
vertex = vertices[index]
|
||||
|
||||
bb_min = vector_min(bb_min, vertex)
|
||||
bb_max = vector_max(bb_max, vertex)
|
||||
|
||||
if vertex[0] > midpoint[0]:
|
||||
corner_index = corner_index + 1
|
||||
|
||||
if vertex[1] > midpoint[1]:
|
||||
corner_index = corner_index + 2
|
||||
|
||||
if vertex[2] > midpoint[2]:
|
||||
corner_index = corner_index + 4
|
||||
|
||||
corner_colors[corner_index] = colors.data[index].color
|
||||
|
||||
self.corner_colors = corner_colors
|
||||
self.bb = [bb_min, bb_max]
|
||||
|
||||
|
||||
ambient_blocks = []
|
||||
|
@ -76,5 +109,5 @@ for obj in bpy.data.objects:
|
|||
print("Found ambient_blocks count: " + str(len(ambient_blocks)))
|
||||
|
||||
for obj in bpy.data.objects:
|
||||
if shouldBakeObject(obj):
|
||||
ensureColorLayer(obj.data)
|
||||
if should_bake_object(obj):
|
||||
get_or_make_color_layer(obj.data)
|
||||
|
|
Loading…
Reference in a new issue