Merge lp:~widelands-media-dev/widelands-media/animation-scales into lp:widelands-media

Proposed by GunChleoc
Status: Merged
Merged at revision: 234
Proposed branch: lp:~widelands-media-dev/widelands-media/animation-scales
Merge into: lp:widelands-media
Diff against target: 179 lines (+61/-33)
1 file modified
graphics/tools/menu_b25.py (+61/-33)
To merge this branch: bzr merge lp:~widelands-media-dev/widelands-media/animation-scales
Reviewer Review Type Date Requested Status
Widelands Media Developers Pending
Review via email: mp+380358@code.launchpad.net

Commit message

Add support for mipmap scales to Blender export script

To post a comment you must log in.
Revision history for this message
GunChleoc (gunchleoc) wrote :

Merging now, because I'll get too many confusing follow-up branches otherwise.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'graphics/tools/menu_b25.py'
2--- graphics/tools/menu_b25.py 2013-04-18 19:06:28 +0000
3+++ graphics/tools/menu_b25.py 2020-03-06 11:27:41 +0000
4@@ -21,6 +21,12 @@
5 dir_WSW = bpy.props.BoolProperty(name = "WSW", description = "WestSouthWest")
6 dir_WNW = bpy.props.BoolProperty(name = "WNW", description = "WestNorthWest")
7 dir_Orig = bpy.props.BoolProperty(name = "Original pos (buildings)", description = "Make a render with original camera pos as well, can be useful for buildings")
8+
9+ scale_0_5 = bpy.props.BoolProperty(name = "0.5", description = "Scale to 50%")
10+ scale_1 = bpy.props.BoolProperty(name = "1", description = "Scale to 100%")
11+ scale_2 = bpy.props.BoolProperty(name = "2", description = "Scale to 200%")
12+ scale_4 = bpy.props.BoolProperty(name = "4", description = "Scale to 400%")
13+
14 playerColor = bpy.props.BoolProperty(name = "PlayerColors", description = "Render a series with playercolors too. WARNING: Save before, this modifies the file!")
15 offset_angle = bpy.props.FloatProperty(name = "Offset Angle", description = "Angle adjustment (degrees)", max=180, min=-180, step=500)
16 original_angle = bpy.props.FloatProperty(name = "Original Angle", description = "Original angle before rotation", max=180, min=-180, step=500)
17@@ -56,13 +62,20 @@
18 row.prop( scn.wl_render_prop, "dir_S")
19 row.prop( scn.wl_render_prop, "dir_WSW")
20 row.prop( scn.wl_render_prop, "dir_WNW")
21+ box = layout.box()
22+ row = box.row()
23+ row.label( text="Scales:" )
24+ row.prop( scn.wl_render_prop, "scale_0_5")
25+ row.prop( scn.wl_render_prop, "scale_1")
26+ row.prop( scn.wl_render_prop, "scale_2")
27+ row.prop( scn.wl_render_prop, "scale_4")
28 row = layout.row()
29 row.prop( scn.wl_render_prop, "playerColor")
30- row.prop( scn.wl_render_prop, "offset_angle")
31+ row.prop( scn.wl_render_prop, "offset_angle")
32 row = layout.row()
33 row.operator( "wl.rend", icon='RENDER_ANIMATION' )
34 row.operator_menu_enum("wl.rot", 'direction', text="Rotate now!")
35-
36+
37 def playercolor_mask():
38 print("Changing to playercolor mask")
39 bpy.context.scene.world.use_sky_blend = False
40@@ -87,46 +100,61 @@
41 class RenderWidelands(bpy.types.Operator):
42 bl_idname = "wl.rend"
43 bl_label = "Render Animations"
44+
45+ def do_render_animation(self, mainRot, scn, scale_factor, needed_dirs, dirs, dir_names, filename_suffix):
46+ original_scale = bpy.context.scene.render.resolution_percentage
47+ bpy.context.scene.render.resolution_percentage = original_scale * scale_factor
48+ self.report({'INFO'}, "Scale: %d%%" % bpy.context.scene.render.resolution_percentage)
49+ for i in range(13):
50+ if needed_dirs[i]:
51+ mainRot.z = dirs[i]
52+ scn.render.filepath = ph.join(scn.wl_render_prop.path,scn.wl_render_prop.prefix + dir_names[i] + '_' + str(scale_factor) + filename_suffix)
53+ bpy.ops.render.render(animation=True)
54+ bpy.context.scene.render.resolution_percentage = original_scale
55+
56+
57 def execute(self, context):
58 mainRot = bpy.data.objects['MainLightControl'].rotation_euler
59 scn = bpy.context.scene
60 wlp = scn.wl_render_prop
61 wlp.original_angle = mainRot.z
62- needed_dirs = [wlp.dir_SW, wlp.dir_W, wlp.dir_NW, wlp.dir_NE, wlp.dir_E, wlp.dir_SE,
63+ needed_dirs = [wlp.dir_SW, wlp.dir_W, wlp.dir_NW, wlp.dir_NE, wlp.dir_E, wlp.dir_SE,
64 wlp.dir_N, wlp.dir_ENE, wlp.dir_ESE, wlp.dir_S, wlp.dir_WSW, wlp.dir_WNW,
65 wlp.dir_Orig]
66- dir_names = ["_sw", "_w", "_nw", "_ne", "_e", "_se",
67+ dir_names = ["_sw", "_w", "_nw", "_ne", "_e", "_se",
68 "_n", "_ene", "_ese", "_s", "_wsw", "_wnw",
69 ""]
70 dirs = [(dir + wlp.offset_angle)*(2*math.pi/360) for dir in base_dirs]
71 dirs.append(wlp.original_angle)
72-
73+
74+ needed_scales = [wlp.scale_0_5, wlp.scale_1, wlp.scale_2, wlp.scale_4]
75+ scale_factors = [0.5, 1, 2, 4]
76+
77 scn.render.image_settings.color_mode = 'RGBA'
78-
79- for i in range(13):
80- if needed_dirs[i]:
81- mainRot.z = dirs[i]
82- scn.render.filepath = ph.join(scn.wl_render_prop.path,scn.wl_render_prop.prefix + dir_names[i] + '_##')
83- bpy.ops.render.render(animation=True)
84+
85+ self.report({'INFO'}, "Rendering animations...")
86+
87+ for index, scale in enumerate(needed_scales):
88+ if scale:
89+ self.do_render_animation(mainRot, scn, scale_factors[index], needed_dirs, dirs, dir_names, '_##')
90
91 if wlp.playerColor:
92+ self.report({'INFO'}, "Rendering player colors...")
93 playercolor_mask()
94 scn.render.image_settings.color_mode = 'RGB'
95-
96- for i in range(13):
97- if needed_dirs[i]:
98- mainRot.z = dirs[i]
99- scn.render.filepath = ph.join(scn.wl_render_prop.path,scn.wl_render_prop.prefix + dir_names[i] + '_##_pc')
100- bpy.ops.render.render(animation=True)
101-
102+
103+ for index, scale in enumerate(needed_scales):
104+ if scale:
105+ self.do_render_animation(mainRot, scn, scale_factors[index], needed_dirs, dirs, dir_names, '_##_pc')
106+
107 mainRot.z = wlp.original_angle
108 self.report({'INFO'}, "Rendered animations")
109 return {'FINISHED'}
110-
111+
112 class RotateWidelands(bpy.types.Operator):
113 bl_idname = "wl.rot"
114 bl_label = "Rotate to position"
115-
116+
117 direction = bpy.props.EnumProperty(items=(
118 ('SW' , 'SW' , "SouthWest"),
119 ('W' , 'W' , "West"),
120@@ -141,7 +169,7 @@
121 ('WSW', 'WSW', "WestSouthWest"),
122 ('WNW', 'WNW', "WestNorthWest"),
123 ('ORIG', 'Back', "Rotate back")))
124-
125+
126 def execute(self, context):
127 mainRot = bpy.data.objects['MainLightControl'].rotation_euler
128 scn = bpy.context.scene
129@@ -154,14 +182,14 @@
130 dir_enum = ['SW', 'W', 'NW', 'NE', 'E', 'SE', 'N', 'ENE', 'ESE', 'S', 'WSW', 'WNW']
131 dirs = [(dir + wlp.offset_angle)*(2*math.pi/360) for dir in base_dirs]
132 enum_to_dir = dict(zip(dir_enum, dirs))
133-
134+
135 mainRot.z = enum_to_dir[self.direction]
136 wlp.last_angle = mainRot.z
137-
138+
139 self.report({'INFO'}, "Rotated")
140 return {'FINISHED'}
141-
142-
143+
144+
145 def register():
146 unregister()
147 bpy.utils.register_class( WidelandsRenderSettings )
148@@ -185,22 +213,22 @@
149 wlp=bpy.context.scene.wl_render_prop
150 wlp.path = "//"
151 wlp.prefix = ph.splitext(ph.basename(bpy.data.filepath))[0]
152- (wlp.dir_SW, wlp.dir_W, wlp.dir_NW, wlp.dir_NE, wlp.dir_E, wlp.dir_SE,
153+ (wlp.dir_SW, wlp.dir_W, wlp.dir_NW, wlp.dir_NE, wlp.dir_E, wlp.dir_SE,
154 wlp.dir_N, wlp.dir_ENE, wlp.dir_ESE, wlp.dir_S, wlp.dir_WSW, wlp.dir_WNW,
155- wlp.dir_Orig)=(True, True, True, True, True, True,
156- False, False, False, False, False, False, False)
157+ wlp.dir_Orig, wlp.scale_0_5, wlp.scale_1, wlp.scale_2, wlp.scale_4)=(True, True, True, True, True, True,
158+ False, False, False, False, False, False, False, False, True, False, False)
159 wlp.playerColor=False
160 wlp.offset_angle=0
161-
162+
163 def register_building_menu():
164 register()
165 if not bpy.context.scene.wl_render_prop.values():
166 wlp=bpy.context.scene.wl_render_prop
167 wlp.path = "//"
168 wlp.prefix = ph.splitext(ph.basename(bpy.data.filepath))[0]
169- (wlp.dir_SW, wlp.dir_W, wlp.dir_NW, wlp.dir_NE, wlp.dir_E, wlp.dir_SE,
170+ (wlp.dir_SW, wlp.dir_W, wlp.dir_NW, wlp.dir_NE, wlp.dir_E, wlp.dir_SE,
171 wlp.dir_N, wlp.dir_ENE, wlp.dir_ESE, wlp.dir_S, wlp.dir_WSW, wlp.dir_WNW,
172- wlp.dir_Orig)=(False, False, False, False, False, False,
173- False, False, False, False, False, False, True)
174+ wlp.dir_Orig, wlp.scale_0_5, wlp.scale_1, wlp.scale_2, wlp.scale_4)=(False, False, False, False, False, False,
175+ False, False, False, False, False, False, True, False, True, False, False)
176 wlp.playerColor=False
177- wlp.offset_angle=0
178\ No newline at end of file
179+ wlp.offset_angle=0

Subscribers

People subscribed via source and target branches

to status/vote changes: