From: <au...@us...> - 2013-01-25 00:53:22
|
Revision: 12416 http://supertuxkart.svn.sourceforge.net/supertuxkart/?rev=12416&view=rev Author: auria Date: 2013-01-25 00:53:10 +0000 (Fri, 25 Jan 2013) Log Message: ----------- Add new LOD option : conveniently automate exporting with and without modifiers as two LOD levels Modified Paths: -------------- media/trunk/blender_25/B3DExport.py media/trunk/blender_25/stk_track.py media/trunk/blender_25/stkdata/stk_object_parameters.xml Modified: media/trunk/blender_25/B3DExport.py =================================================================== --- media/trunk/blender_25/B3DExport.py 2013-01-24 22:53:34 UTC (rev 12415) +++ media/trunk/blender_25/B3DExport.py 2013-01-25 00:53:10 UTC (rev 12416) @@ -991,8 +991,10 @@ if arm_action: data = obj.data + elif b3d_parameters.get("apply-modifiers"): + data = obj.to_mesh(the_scene, True, 'PREVIEW') # Apply modifiers else: - data = obj.to_mesh(the_scene, True, 'PREVIEW') # Apply modifiers + data = obj.data temp_buf += write_int(-1) #Brush ID temp_buf += write_node_mesh_vrts(obj, data, obj_count, arm_action, exp_root) #NODE MESH VRTS @@ -1451,7 +1453,8 @@ lights = bpy.props.BoolProperty(name="Export Lights", default=False) mipmap = bpy.props.BoolProperty(name="Mipmap", default=False) localsp = bpy.props.BoolProperty(name="Use Local Space Coords", default=False) - + applymodifiers = bpy.props.BoolProperty(name="Apply modifiers", default=True) + overwrite_without_asking = bpy.props.BoolProperty(name="Overwrite without asking", default=False) #skip_dialog = False @@ -1480,6 +1483,7 @@ b3d_parameters["lights" ] = self.lights b3d_parameters["mipmap" ] = self.mipmap b3d_parameters["local-space" ] = self.localsp + b3d_parameters["apply-modifiers"] = self.applymodifiers the_scene = context.scene Modified: media/trunk/blender_25/stk_track.py =================================================================== --- media/trunk/blender_25/stk_track.py 2013-01-24 22:53:34 UTC (rev 12415) +++ media/trunk/blender_25/stk_track.py 2013-01-25 00:53:10 UTC (rev 12416) @@ -312,7 +312,7 @@ speed = getProperty(obj, "speed", None ) length = getProperty(obj, "length", None ) lAnim = checkForAnimatedTextures([obj]) - b3d_name = self.m_parent_track_exporter.exportLocalB3D(obj, self.m_export_path, name) + b3d_name = self.m_parent_track_exporter.exportLocalB3D(obj, self.m_export_path, name, True) s = " <water model=\"%s\" %s" % (b3d_name, getXYZHPRString(obj)) if height: s = "%s height=\"%.2f\""%(s, float(height)) if speed: s = "%s speed=\"%.2f\"" %(s, float(speed)) @@ -1089,7 +1089,7 @@ # Exports the models as b3d object in local coordinate, i.e. with the object # center at (0,0,0). - def exportLocalB3D(self, obj, sPath, name): + def exportLocalB3D(self, obj, sPath, name, applymodifiers=True): # If the name contains a ".b3d" the model is assumed to be part of # the standard objects included in STK, so there is no need to # export the model. @@ -1109,7 +1109,7 @@ the_scene.obj_list = [obj] bpy.ops.screen.b3d_export(localsp=True, mipmap=True, lights=False, vcolors=True, vnormals=True, cameras=False, filepath=sPath+"/"+name, - overwrite_without_asking=True) + overwrite_without_asking=True, applymodifiers=applymodifiers) the_scene.obj_list = [] #bpy.ops.screen.b3d_export.skip_dialog = False #setObjList([]) @@ -1607,16 +1607,29 @@ type = getProperty(obj, "type", "X") if type != "lod_instance": - b3d_name = self.exportLocalB3D(obj, sPath, name) + b3d_name = self.exportLocalB3D(obj, sPath, name, True) kind = getProperty(obj, "kind", "") if type == "lod_instance": model_string = "" elif type == "single_lod": # single_lod is a shortcut that generates both a lod_instance and a lod_model + + loddistance = str(getProperty(obj, "lod_distance", 60.0)) + + if getProperty(obj, "nomodifierautolod", "false") == "true": + loddistance = str(getProperty(obj, "nomodierlod_distance", 30.0)) + exportedModelfFilename3 = self.exportLocalB3D(obj, sPath, (b3d_name[:-4] + '_mid'), False) + model_string3 = " model=\"%s\""%(b3d_name[:-4] + '_mid') + lodstring3 = ' lod_distance="' + str(getProperty(obj, "lod_distance", 60.0)) + '" lod_group="_single_lod_' + name + '"' + f.write(" <static-object%s model=\"%s\" %s interaction=\"%s\"/> <!-- writeStaticObjects -->\n" % (lodstring3, exportedModelfFilename3, getXYZHPRString(obj), getProperty(obj, "interaction", "static")) ) + + model_string2 = " model=\"%s\""%b3d_name - lodstring2 = ' lod_distance="' + str(getProperty(obj, "lod_distance", 60.0)) + '" lod_group="_single_lod_' + name + '"' - f.write(" <static-object%s%s %s interaction\"%s\"/> <!-- writeStaticObjects -->\n" % (lodstring2, model_string2, getXYZHPRString(obj), getProperty(obj, "interaction", "static")) ) + lodstring2 = ' lod_distance="' + loddistance + '" lod_group="_single_lod_' + name + '"' + f.write(" <static-object%s%s %s interaction=\"%s\"/> <!-- writeStaticObjects -->\n" % (lodstring2, model_string2, getXYZHPRString(obj), getProperty(obj, "interaction", "static")) ) + + model_string = "" else: model_string = " model=\"%s\""%b3d_name @@ -1965,7 +1978,7 @@ if type == "lod_instance": b3d_name = None else: - b3d_name = self.exportLocalB3D(obj, sPath, name) + b3d_name = self.exportLocalB3D(obj, sPath, name, True) # First kind of object: ipo. There is one or @@ -2081,7 +2094,7 @@ speed = getProperty(obj, "speed", None ) length = getProperty(obj, "length", None ) lAnim = checkForAnimatedTextures([obj]) - b3d_name = self.exportLocalB3D(obj, sPath, name) + b3d_name = self.exportLocalB3D(obj, sPath, name, True) s=" <water model=\"%s\" %s" % \ (b3d_name, getXYZHPRString(obj)) if height: s="%s height=\"%.2f\""%(s, float(height)) Modified: media/trunk/blender_25/stkdata/stk_object_parameters.xml =================================================================== --- media/trunk/blender_25/stkdata/stk_object_parameters.xml 2013-01-24 22:53:34 UTC (rev 12415) +++ media/trunk/blender_25/stkdata/stk_object_parameters.xml 2013-01-25 00:53:10 UTC (rev 12416) @@ -130,8 +130,12 @@ </EnumChoice> <EnumChoice id="single_lod" label="LOD Standalone" doc="An object that will only be visible when the camera is close enough (shortcut for LOD objects that don't have multiple levels)"> <StringProp id="name" name="Name" default="" doc="Name of this object, used to name the model file when exporting (if not specified, the blender name of the object will be used)" /> - <FloatProp id="lod_distance" name="Distance" default="60.0" min="0.0" max="5000.0" + <FloatProp id="lod_distance" name="Visibility distance" default="60.0" min="0.0" max="5000.0" doc="Distance from the camera at which this object becomes visible"/> + <BoolProp id="nomodifierautolod" name="Also export without modifiers" default="false" doc="Export one version of the model without modifiers as an extra LOD level"> + <FloatProp id="nomodierlod_distance" name="Modifiers enabled distance" default="30.0" min="0.0" max="5000.0" + doc="Distance from the camera at which the model is seen with modifiers. Should be smaller than 'Visibility distance'."/> + </BoolProp> </EnumChoice> <!-- Nitro --> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |