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.
This commit is contained in:
parent
67effc8aef
commit
a06358570e
@ -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
|
||||
|
@ -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 */
|
||||
|
143
intern/cycles/app/io_export_cycles_xml.py
Normal file
143
intern/cycles/app/io_export_cycles_xml.py
Normal file
@ -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()
|
||||
|
Loading…
Reference in New Issue
Block a user