diff options
author | Thomas Dinges <blender@dingto.org> | 2011-12-25 17:34:18 +0400 |
---|---|---|
committer | Thomas Dinges <blender@dingto.org> | 2011-12-25 17:34:18 +0400 |
commit | a06358570e46d675222ad649e33e96561e75c711 (patch) | |
tree | d80da9d480e4d9d5bc52730f32f7e98795dbbb29 /intern | |
parent | 67effc8aefcde5acc72a67aff76d367e22a091ae (diff) |
Cycles Test App:
* Added some new integrator parameters to the xml reading.
* Added ability to specify window width/height, if not set it uses film/camera width/height.
* Added back the xml exporter script from cycles branch, with modifications to hock up into the UI. To use it, copy the script into 2.61/scripts/startup.
Note: This is intended for developers for now, but the standalone Cycles app has potential to be used as benchmark for example.
Diffstat (limited to 'intern')
-rw-r--r-- | intern/cycles/app/cycles_test.cpp | 17 | ||||
-rw-r--r-- | intern/cycles/app/cycles_xml.cpp | 11 | ||||
-rw-r--r-- | intern/cycles/app/io_export_cycles_xml.py | 143 |
3 files changed, 165 insertions, 6 deletions
diff --git a/intern/cycles/app/cycles_test.cpp b/intern/cycles/app/cycles_test.cpp index d162dbf12a9..d9386f75141 100644 --- a/intern/cycles/app/cycles_test.cpp +++ b/intern/cycles/app/cycles_test.cpp @@ -109,12 +109,15 @@ static void session_init() options.scene = NULL; } -static void scene_init() +static void scene_init(int width, int height) { options.scene = new Scene(options.scene_params); xml_read_file(options.scene, options.filepath.c_str()); - options.width = options.scene->camera->width; - options.height = options.scene->camera->height; + + if (width == 0 || height == 0) { + options.width = options.scene->camera->width; + options.height = options.scene->camera->height; + } } static void session_exit() @@ -194,8 +197,8 @@ static int files_parse(int argc, const char *argv[]) static void options_parse(int argc, const char **argv) { - options.width= 1024; - options.height= 512; + options.width= 0; + options.height= 0; options.filepath = ""; options.session = NULL; options.quiet = false; @@ -234,6 +237,8 @@ static void options_parse(int argc, const char **argv) "--samples %d", &options.session_params.samples, "Number of samples to render", "--output %s", &options.session_params.output_path, "File path to write output image", "--threads %d", &options.session_params.threads, "CPU Rendering Threads", + "--width %d", &options.width, "Window width in pixel", + "--height %d", &options.height, "Window height in pixel", "--help", &help, "Print help message", NULL); @@ -287,7 +292,7 @@ static void options_parse(int argc, const char **argv) } /* load scene */ - scene_init(); + scene_init(options.width, options.height); } CCL_NAMESPACE_END diff --git a/intern/cycles/app/cycles_xml.cpp b/intern/cycles/app/cycles_xml.cpp index 21b03b56b7a..e29a73ec9e8 100644 --- a/intern/cycles/app/cycles_xml.cpp +++ b/intern/cycles/app/cycles_xml.cpp @@ -257,7 +257,18 @@ static void xml_read_integrator(const XMLReadState& state, pugi::xml_node node) xml_read_int(&integrator->min_bounce, node, "min_bounce"); xml_read_int(&integrator->max_bounce, node, "max_bounce"); + + xml_read_int(&integrator->max_diffuse_bounce, node, "max_diffuse_bounce"); + xml_read_int(&integrator->max_glossy_bounce, node, "max_glossy_bounce"); + xml_read_int(&integrator->max_transmission_bounce, node, "max_transmission_bounce"); + + xml_read_int(&integrator->transparent_min_bounce, node, "transparent_min_bounce"); + xml_read_int(&integrator->transparent_max_bounce, node, "transparent_max_bounce"); + + xml_read_bool(&integrator->transparent_shadows, node, "transparent_shadows"); xml_read_bool(&integrator->no_caustics, node, "no_caustics"); + + xml_read_int(&integrator->seed, node, "seed"); } /* Camera */ diff --git a/intern/cycles/app/io_export_cycles_xml.py b/intern/cycles/app/io_export_cycles_xml.py new file mode 100644 index 00000000000..2314d935214 --- /dev/null +++ b/intern/cycles/app/io_export_cycles_xml.py @@ -0,0 +1,143 @@ +# +# Copyright 2011, Blender Foundation. +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# + +# XML exporter for generating test files, not intended for end users + +import os +import xml.etree.ElementTree as etree +import xml.dom.minidom as dom + +import bpy +from bpy_extras.io_utils import ExportHelper +from bpy.props import PointerProperty, StringProperty + +def strip(root): + root.text = None + root.tail = None + + for elem in root: + strip(elem) + +def write(node, fname): + strip(node) + + s = etree.tostring(node) + s = dom.parseString(s).toprettyxml() + + f = open(fname, "w") + f.write(s) + +class CyclesXMLSettings(bpy.types.PropertyGroup): + @classmethod + def register(cls): + bpy.types.Scene.cycles_xml = PointerProperty( + type=cls, + name="Cycles XML export Settings", + description="Cycles XML export settings") + cls.filepath = StringProperty( + name='Filepath', + description='Filepath for the .xml file', + maxlen=256, + default='', + subtype='FILE_PATH') + + @classmethod + def unregister(cls): + del bpy.types.Scene.cycles_xml + +# User Interface Drawing Code +class RenderButtonsPanel(): + bl_space_type = 'PROPERTIES' + bl_region_type = 'WINDOW' + bl_context = "render" + + @classmethod + def poll(self, context): + rd = context.scene.render + return rd.engine == 'CYCLES' + + +class PHYSICS_PT_fluid_export(RenderButtonsPanel, bpy.types.Panel): + bl_label = "Cycles XML Exporter" + + def draw(self, context): + layout = self.layout + + cycles = context.scene.cycles_xml + + #layout.prop(cycles, "filepath") + layout.operator("export_mesh.cycles_xml") + + +# Export Operator +class ExportCyclesXML(bpy.types.Operator, ExportHelper): + bl_idname = "export_mesh.cycles_xml" + bl_label = "Export Cycles XML" + + filename_ext = ".xml" + + @classmethod + def poll(cls, context): + return context.active_object != None + + def execute(self, context): + filepath = bpy.path.ensure_ext(self.filepath, ".xml") + + # get mesh + scene = context.scene + object = context.active_object + + if not object: + raise Exception("No active object") + + mesh = object.to_mesh(scene, True, 'PREVIEW') + + if not mesh: + raise Exception("No mesh data in active object") + + # generate mesh node + nverts = "" + verts = "" + P = "" + + for v in mesh.vertices: + P += "%f %f %f " % (v.co[0], v.co[1], v.co[2]) + + for i, f in enumerate(mesh.faces): + nverts += str(len(f.vertices)) + " " + + for v in f.vertices: + verts += str(v) + " " + verts += " " + + node = etree.Element('mesh', attrib={'nverts': nverts, 'verts': verts, 'P': P}) + + # write to file + write(node, filepath) + + return {'FINISHED'} + +def register(): + bpy.utils.register_module(__name__) + +def unregister(): + bpy.utils.unregister_module(__name__) + +if __name__ == "__main__": + register() + |