diff --git a/src/product_gen/__pycache__/generate_lamp.cpython-35.pyc b/src/product_gen/__pycache__/generate_lamp.cpython-35.pyc index a1d8dad..2608040 100644 Binary files a/src/product_gen/__pycache__/generate_lamp.cpython-35.pyc and b/src/product_gen/__pycache__/generate_lamp.cpython-35.pyc differ diff --git a/src/product_gen/__pycache__/generate_product.cpython-35.pyc b/src/product_gen/__pycache__/generate_product.cpython-35.pyc new file mode 100644 index 0000000..9d17d08 Binary files /dev/null and b/src/product_gen/__pycache__/generate_product.cpython-35.pyc differ diff --git a/src/product_gen/generate_lamp.py b/src/product_gen/generate_lamp.py index be61e60..f3bfb55 100644 --- a/src/product_gen/generate_lamp.py +++ b/src/product_gen/generate_lamp.py @@ -3,18 +3,7 @@ import bpy import product_gen.generate_lamp_base import product_gen.generate_shades -def generate(shape, - height, - radius, - color, - output_prefix, - is_final=False): - - prefix = os.getcwd() + "/" + output_prefix + "/" + output_prefix - - # Set up scene - objs = bpy.data.objects - objs.remove(objs["Cube"], True) +def generate_models(shape, height, radius): # Shade radius2 = 0.3 @@ -27,7 +16,6 @@ def generate(shape, elif shape == "bio": shade = product_gen.generate_shades.generate_bio_shade(radius, radius2, height) - # Base radius1 = 0.3 radius2 = 0.2 @@ -44,10 +32,12 @@ def generate(shape, chord = product_gen.generate_lamp_base.generate_chord(height, radius, location) - models = {shade.name: shade, chord.name: chord, base.name: base} + return models + +def optimize_for_render(models): # Smooth shapes for eachModel in models.values(): @@ -55,11 +45,7 @@ def generate(shape, for poly in bpy.context.object.data.polygons: poly.use_smooth = True - # Set up materials and textures - # Get material - colormap = {"shade": color, - "base": (220.0/255.0, 220.0/255.0, 220.0/255.0), - "chord": (20.0/255.0, 20.0/255.0, 20.0/255.0)} +def apply_textures(colormap, models): for eachName in colormap.keys(): mat = bpy.data.materials.get(eachName + "-material") @@ -81,31 +67,4 @@ def generate(shape, bpy.context.active_object.data.materials[0] = mat else: # no slots - bpy.context.active_object.data.materials.append(mat) - - # Set up world - bpy.context.scene.world.use_sky_paper = True - bpy.context.scene.world.horizon_color = (0.9, 0.9, 0.9) - #bpy.context.scene.world.light_settings.use_environment_light = True - - # Set up lamps and cameras - objs["Lamp"].location = objs["Camera"].location - objs["Lamp"].delta_location = (-3, 0, -1) - - # Set up and do the render - bpy.context.scene.render.resolution_x = 600.0 - bpy.context.scene.render.resolution_percentage = 99.0 - - if is_final: - bpy.context.scene.render.filepath = prefix + "_kitchen.png" - bpy.ops.render.render(write_still=True) - - bpy.context.scene.render.filepath = prefix + "_hall.png" - bpy.ops.render.render(write_still=True) - - bpy.context.scene.render.filepath = prefix + "_landing.png" - bpy.ops.render.render(write_still=True) - - else: - bpy.context.scene.render.filepath = prefix + ".png" - bpy.ops.render.render(write_still=True) \ No newline at end of file + bpy.context.active_object.data.materials.append(mat) \ No newline at end of file diff --git a/src/product_gen/generate_product.py b/src/product_gen/generate_product.py new file mode 100644 index 0000000..aac66ae --- /dev/null +++ b/src/product_gen/generate_product.py @@ -0,0 +1,46 @@ +import os +import bpy +import product_gen.generate_lamp +import rendering.setup_scene +import rendering.setup_renderer + +def generate(shape, + height, + radius, + color, + output_prefix, + is_final=False): + + rendering.setup_scene.initialize_scene() + + # Generate models + models = product_gen.generate_lamp.generate_models(shape, height, radius) + + # Optimize geometries for render + product_gen.generate_lamp.optimize_for_render(models) + + # Set up materials and textures + colormap = {"shade": color, + "base": (220.0/255.0, 220.0/255.0, 220.0/255.0), + "chord": (20.0/255.0, 20.0/255.0, 20.0/255.0)} + product_gen.generate_lamp.apply_textures(colormap, models) + + rendering.setup_scene.setup_scene() + + rendering.setup_renderer.setup_renderer() + + # Do rendering + prefix = os.getcwd() + "/" + output_prefix + "/" + output_prefix + if is_final: + bpy.context.scene.render.filepath = prefix + "_kitchen.png" + bpy.ops.render.render(write_still=True) + + bpy.context.scene.render.filepath = prefix + "_hall.png" + bpy.ops.render.render(write_still=True) + + bpy.context.scene.render.filepath = prefix + "_landing.png" + bpy.ops.render.render(write_still=True) + + else: + bpy.context.scene.render.filepath = prefix + ".png" + bpy.ops.render.render(write_still=True) \ No newline at end of file diff --git a/src/rendering/__pycache__/setup_renderer.cpython-35.pyc b/src/rendering/__pycache__/setup_renderer.cpython-35.pyc new file mode 100644 index 0000000..073e1a0 Binary files /dev/null and b/src/rendering/__pycache__/setup_renderer.cpython-35.pyc differ diff --git a/src/rendering/__pycache__/setup_scene.cpython-35.pyc b/src/rendering/__pycache__/setup_scene.cpython-35.pyc new file mode 100644 index 0000000..c7debdf Binary files /dev/null and b/src/rendering/__pycache__/setup_scene.cpython-35.pyc differ diff --git a/src/rendering/setup_renderer.py b/src/rendering/setup_renderer.py new file mode 100644 index 0000000..9696b19 --- /dev/null +++ b/src/rendering/setup_renderer.py @@ -0,0 +1,18 @@ +import bpy + +def setup_renderer(engine="CYCLES"): + + # Set up and do the render + if engine=="CYCLES": + bpy.context.scene.render.engine = 'CYCLES' + bpy.context.scene.cycles.samples = 300.0 + bpy.context.scene.cycles.caustics_reflective = False + bpy.context.scene.cycles.caustics_refractive = False + bpy.context.scene.cycles.max_bounces = 1000.0 + bpy.data.scenes["Scene"].render.use_border = True # Tell Blender to use border render + bpy.data.scenes["Scene"].render.border_max_y = 0.75 # Set the border top at 3/4 of the image's height + bpy.data.scenes["Scene"].render.border_min_y = 0.33 # Set the border bottom at 1/3 of the image's height + bpy.data.scenes["Scene"].render.border_min_x = 0.25 # Set the border left at 1/4 of the image's width + bpy.data.scenes["Scene"].render.border_max_x = 0.65 # Set the border right at the image's right border + bpy.context.scene.render.resolution_x = 600.0 + bpy.context.scene.render.resolution_percentage = 100.0 \ No newline at end of file diff --git a/src/rendering/setup_scene.py b/src/rendering/setup_scene.py new file mode 100644 index 0000000..b15b657 --- /dev/null +++ b/src/rendering/setup_scene.py @@ -0,0 +1,20 @@ +import bpy + +def initialize_scene(): + + # Set up scene + objs = bpy.data.objects + objs.remove(objs["Cube"], True) + +def setup_scene(): + + # Set up world + bpy.context.scene.world.use_sky_paper = True + bpy.context.scene.world.horizon_color = (0.95, 0.95, 0.95) + #bpy.context.scene.world.light_settings.use_environment_light = True + + # Set up lamps and cameras + bpy.data.objects["Lamp"].location = bpy.data.objects["Camera"].location + bpy.data.objects["Lamp"].delta_location = (-3, 0, -3) + #bpy.data.objects["Lamp"].type = "POINT" + bpy.data.objects["Lamp"].name = "front" \ No newline at end of file diff --git a/src/utility/apply_texture.py b/src/utility/apply_texture.py index 2adf8c7..7316c1c 100644 --- a/src/utility/apply_texture.py +++ b/src/utility/apply_texture.py @@ -2,7 +2,7 @@ import os import sys import random import json -import product_gen.generate_lamp +import product_gen.generate_product from argparse import ArgumentParser @@ -19,10 +19,10 @@ if __name__ == "__main__": height = float(shape_params["height"]) radius = float(shape_params["radius"]) - color = [random.random()*255.0, - random.random()*255.0, - random.random()*255.0] - product_gen.generate_lamp.generate(shape, height, radius, color, output) + color = [random.random(), + random.random(), + random.random()] + product_gen.generate_product.generate(shape, height, radius, color, output) shape_parameters = shape_params shape_parameters["color"] = color diff --git a/src/utility/final_render.py b/src/utility/final_render.py index fd1da70..98ce61e 100644 --- a/src/utility/final_render.py +++ b/src/utility/final_render.py @@ -3,7 +3,7 @@ import ast import sys import random import json -import product_gen.generate_lamp +import product_gen.generate_product from argparse import ArgumentParser @@ -22,5 +22,5 @@ if __name__ == "__main__": radius = float(shape_params["radius"]) color = ast.literal_eval(shape_params["color"]) print(color[0]) - product_gen.generate_lamp.generate(shape, height, radius, + product_gen.generate_product.generate(shape, height, radius, color, output, is_final=True) diff --git a/src/utility/generate_shape.py b/src/utility/generate_shape.py index 1d0162b..eb8f5a0 100644 --- a/src/utility/generate_shape.py +++ b/src/utility/generate_shape.py @@ -2,7 +2,7 @@ import os import sys import random import json -import product_gen.generate_lamp +import product_gen.generate_product from argparse import ArgumentParser if __name__ == "__main__": @@ -18,9 +18,9 @@ if __name__ == "__main__": height = 1.0 + random.random()*1.5 radius = 0.2 + random.random()*1.0 - color = [18.0, 18.0, 18.0] + color = [0.1, 0.1, 0.1] - product_gen.generate_lamp.generate(shape, height, radius, color, output) + product_gen.generate_product.generate(shape, height, radius, color, output) shape_parameters = {"shape": shape, "height": height, diff --git a/src/utility/test456/test456.json b/src/utility/test456/test456.json index c7c4630..e9a7a87 100644 --- a/src/utility/test456/test456.json +++ b/src/utility/test456/test456.json @@ -1 +1 @@ -{"output": "test456", "radius": "1.0", "color": [154.90465134747797, 85.00668266837187, 234.34599434969277], "height": "1.0", "shape": "cone"} \ No newline at end of file +{"color": [0.2536788765243849, 0.7557341205824731, 0.6786201102941254], "shape": "cone", "height": "1.0", "radius": "1.0", "output": "test456"} \ No newline at end of file diff --git a/src/utility/test456/test456.png b/src/utility/test456/test456.png index fd2c3b6..c7b700a 100644 Binary files a/src/utility/test456/test456.png and b/src/utility/test456/test456.png differ