Low-Poly: Setup

Lernziel

Was kann modelliert werden? Das wohl häufigste Motiv sind Landschaften mit den folgenden Objekten, die wir zum Teil auch erzeugen wollen:

  • Bäume

  • Berge

  • Wolken

  • Gras

  • Wasser

  • Steine

Handlungsanweisungen/Aufgaben

  1. Erstell Dir eine eigenen Konfiguration und/oder erweitere das hier vorgestellte Skript.

  2. Lade alle Generator-Scripte und führe sie der Reihe nach aus.

  3. Nacharbeiten sind sicher noch notwendig, justiere die Skripte und Parmaeter.

Konfiguration

Vor dem ersten Rendern müssen wichtige Einstellungen vorgenommen werden. Das könnte über eine Blenderdatei geschehen, die schon alle Elemente wie Kamera, Lampen und Hintergrund enthält. Etwas flexibler, wenn auch etwas schwieriger zu erstellen ist ein Skript.

Die Kamera

Die Einstellungen der Kamera ist wohl am einfachsten, denn lediglig die Position und der Winkel wird verändert.

    def set_camera(self):
        if(len(bpy.data.cameras) == 1):
            obj = bpy.data.objects['Camera'] # bpy.types.Camera
            obj.location.x = 0.0
            obj.location.y = -120.0
            obj.location.z = 1.0
            obj.rotation_euler[0] = math.pi/2
            obj.rotation_euler[1] = 0
            obj.rotation_euler[2] = 0
            

Die Lampen

Jetzt bist Du dran…

Der Hintergrund

Der Hintergrund wird über den node-Editor gesteuert. Dieser Teil des Skripts ist noch nicht perfekt, zeigt aber, wie das Problem gelöst werden könnte.

Wie immer, so auch hier wieder das komplette Script als Startpunkt für eigene Erweiterungen und Experimente …

 1#!bpy
 2"""
 3Name: 'Template'
 4Blender: 2.69
 5Group: 'Sample'
 6Tooltip: 'Template for new scripts, copy it and start coding...'
 7"""
 8import bpy
 9import random
10import math
11
12class Setup():
13    """Configuration of a scene"""
14
15    def __init__(self):
16        pass
17    def set_sky(self):
18        # Quelle: http://www.blendpolis.de/viewtopic.php?f=16&t=45533
19        # set render engine to cycles
20        context = bpy.context
21        scene = context.scene
22        obj = context.active_object
23        # mat = obj.data.materials['Material']
24    
25        bpy.context.scene.render.engine = "CYCLES"
26
27        world = bpy.data.worlds["World"]
28        world.use_nodes = True
29        nodes = world.node_tree.nodes
30        links = world.node_tree.links
31        # remove all nodes
32        nodes.clear()
33        
34        node_0 = nodes.new("ShaderNodeTexSky")
35        node_0.label ="SkyTexture"
36        node_0.location = (580.0, 0.0)
37        
38        node_1 = nodes.new("ShaderNodeBackground")
39        node_1.label ="Background"
40        node_1.location = (300.0, 0.0)
41        
42        node_2 = nodes.new("ShaderNodeOutputMaterial")
43        node_2.label ="Surface Output"
44        node_2.location = (0.0, 0.0)
45        
46        # link nodes
47        link1_0 = links.new(node_0.outputs['Color'], node_1.inputs['Color'])
48        link2_1 = links.new(node_1.outputs['Background'], node_2.inputs['Surface'])
49    
50    def set_camera(self):
51        if(len(bpy.data.cameras) == 1):
52            obj = bpy.data.objects['Camera'] # bpy.types.Camera
53            obj.location.x = 0.0
54            obj.location.y = -120.0
55            obj.location.z = 1.0
56            obj.rotation_euler[0] = math.pi/2
57            obj.rotation_euler[1] = 0
58            obj.rotation_euler[2] = 0
59            
60if __name__ == '__main__':
61    # Edit-Mode verlassen, fall notwendig
62    if bpy.ops.object.mode_set.poll():
63        bpy.ops.object.mode_set(mode='OBJECT')
64
65    # Alle Meshobjekte aus der Szene löschen
66    bpy.ops.object.select_by_type(type='MESH')
67    bpy.ops.object.delete()
68    scn = Setup()
69    scn.set_camera()
70    scn.set_sky()
71    bpy.ops.render.render()

Ein Beispiel mit allen bisher erstellten Elementen.

../../../../_images/scene_final.png