119 lines
3.3 KiB
Python
119 lines
3.3 KiB
Python
import bpy
|
|
import os
|
|
|
|
base_path = "src/graphics/technology"
|
|
|
|
base_collection = bpy.data.scenes["Scene"].view_layers["Base"].layer_collection
|
|
shadows_collection = bpy.data.scenes["Scene"].view_layers["Shadows"].layer_collection
|
|
|
|
def set_exclude(model, value):
|
|
base_collection.children[model].exclude = value
|
|
shadows_collection.children[model].exclude = value
|
|
|
|
def set_color(model, variant, values):
|
|
for obj in base_collection.children[model].collection.all_objects.values():
|
|
if obj.data.name == "Floor":
|
|
obj.hide_render = False
|
|
if "liquid_color" not in obj:
|
|
continue
|
|
obj["liquid_color"][0] = values[0]
|
|
obj["liquid_color"][1] = values[1]
|
|
obj["liquid_color"][2] = values[2]
|
|
obj.update_tag()
|
|
glass = "glass_frozen" if variant == "frozen" else "glass_no_back_grime"
|
|
obj.material_slots[0].material = bpy.data.materials[glass]
|
|
obj.material_slots[1].material = bpy.data.materials[f"liquid_clear_surface"]
|
|
obj.material_slots[2].material = bpy.data.materials[f"liquid_clear_glass"]
|
|
|
|
def set_empty(model, variant):
|
|
for obj in base_collection.children[model].collection.all_objects.values():
|
|
if obj.data.name == "Floor":
|
|
obj.hide_render = True
|
|
if "liquid_color" not in obj:
|
|
continue
|
|
glass = "glass_frozen" if variant == "frozen" else "glass_no_back_grime"
|
|
obj.material_slots[0].material = bpy.data.materials[glass]
|
|
obj.material_slots[1].material = bpy.data.materials[f"transparent"]
|
|
obj.material_slots[2].material = bpy.data.materials[f"glass_inside"]
|
|
|
|
|
|
def render_bottle(color, variant, model, output):
|
|
set_exclude(model, False)
|
|
if color != "empty":
|
|
set_color(model, variant, colors[color])
|
|
else:
|
|
set_empty(model, variant)
|
|
bpy.data.scenes["Scene"].render.filepath = output
|
|
bpy.ops.render.render(write_still=True)
|
|
set_exclude(model, True)
|
|
|
|
models = [
|
|
"cone_normal",
|
|
"cone_slim",
|
|
"cone_inverted",
|
|
"cylinder",
|
|
"tube_one",
|
|
"tube_two",
|
|
"tube_three",
|
|
"sphere_normal",
|
|
"sphere_tiny",
|
|
"sphere_double",
|
|
"sphere_tubed",
|
|
"sphere_hemi",
|
|
"sphere_spiked",
|
|
"hourglass",
|
|
"torus",
|
|
"klein",
|
|
"pyramid",
|
|
"cube",
|
|
"triangle",
|
|
"triangle_alt",
|
|
"pentagon",
|
|
"hexagon",
|
|
]
|
|
|
|
colors = {
|
|
"red": [0.554, 0.044, 0.046],
|
|
"green": [0.075, 0.573, 0.075],
|
|
"black": [0.050, 0.050, 0.050],
|
|
"cyan": [0.066, 0.430, 0.592],
|
|
"purple": [0.233, 0.039, 0.372],
|
|
"yellow": [0.536, 0.402, 0.000],
|
|
"white": [0.515, 0.534, 0.555],
|
|
"orange": [0.644, 0.277, 0.012],
|
|
"pink": [0.557, 0.043, 0.433],
|
|
"blue": [0.038, 0.050, 0.606],
|
|
"lime": [0.523, 0.570, 0.000],
|
|
"empty": None,
|
|
}
|
|
|
|
|
|
# Code to render all types
|
|
bottles = []
|
|
for model in models:
|
|
bottles.append(["empty", "clear", model, f"//{base_path}/{model}_empty.png"])
|
|
variants = ["clear"]
|
|
if model == "cone_normal":
|
|
variants.append("frozen")
|
|
for variant in variants:
|
|
for color in colors:
|
|
if color == "empty":
|
|
continue
|
|
bottles.append([color, variant, model, f"//{base_path}/{model}_{variant}_{color}.png"])
|
|
|
|
# Code for prototyping speedup
|
|
#bpy.data.scenes["Scene"].cycles.samples = 1024
|
|
|
|
# Reset visibility of all bottles
|
|
for model in models:
|
|
set_exclude(model, True)
|
|
|
|
# Render the bottles
|
|
for color, variant, model, output in bottles:
|
|
# Code to only render files that don't exist
|
|
#if os.path.exists(bpy.path.abspath(output)): continue
|
|
|
|
print("Rendering", output)
|
|
render_bottle(color, variant, model, output)
|
|
|
|
print("Done!")
|