Exportar un modelo desde Blender a dDO

Pese a que Quixel dDO es bastante benevolente a la hora de tragar modelos exportados desde otras plataformas, en este caso Blender, conviene hacerlo con unos ajustes determinados para evitar cualquier tipo de problema a la hora de texturizar dicho modelo con la suite de Quixel.

Quizás la observación más importante a la hora de hacerlo es la de evitar modelos que contengan polígonos de más de cuatro caras (quads), siendo esa opción la más conveniente aunque dDO no presentará ningún problema si las caras de nuestro modelo son triangulares en lugar de quads.

Más allá de lo anterior, existe una serie de parámetros que podemos dar a Blender para exportar nuestro modelo en formato .OBJ de modo que al importarlo de nuevo en dDO, el resultado sea lo más óptimo posible. Dichos ajustes son los siguientes:

  • Evitar el uso de polígonos de más de tres o cuatro caras.
  • Es conveniente que el modelo esté centrado en el origen de coordenadas.
  • Los ejes han de ser –Z forward e Y Up.
  • Activar Write Normals.
  • Desactivar Include Edges.
  • Activar Smooth Groups.
  • Activar Include UV’s.
  • Desactivar Write Materials.
  • Activar Triangulate Faces.
  • Desactivar Objects as OBJ Groups.
  • Activar Keep Vertex Order.
  • En algunos casos será conveniente aumentar la escala del objeto en el exportador de Blender para evitar problemas en dDO. Esto es cierto sobre todo cuando tratamos con modelos con mucho nivel de detalle.
  • Activar Apply Modifiers aunque en ciertos casos, esto ya va a gusto del consumidor y sus necesidades, será mejor no hacerlo. Por ejemplo, si el sujeto en cuestión es un modifier de tipo Subdivision Surface, sí será interesante activar este ajuste. Sin embargo, si el modifier es, por ejemplo, un Array, quizás no interese dejarlo desactivado para no generar geometría indeseada.

Los ajustes correctos (suponiendo que nos interesa dejar Apply Modifiers activado), sería el siguiente. Cualquier opción que no se encuentre en la lista anterior se ha de dejar desactivada, tal como viene por defecto:

export_obj_blender_ddoPara que el proceso resulte más cómodo, he hecho un pequeño plugin que nos permite exportar uno o más objetos seleccionados en formato .obj usando los ajustes descritos. Dado que el script está pensado para exportar más de un objeto automáticamente, cada uno de los ficheros .obj tendrá el nombre del objeto en cuestión, es decir, el nombre que le demos en el diálogo de ficheros no tendrá ningún efecto. Además de eso, por defecto el plugin no aplica los modificadores que contengan los objetos por lo que hay que hacerlo a mano antes de exportar o bien modificar el script para que sí lo haga. Al instalar el plugin, aparecerá una opción nueva en el menú para exportar de Blender que es la siguiente: export_obj_ddo

El código completo para el plugin es el siguiente:

[code lang=”python”]
bl_info = {
"name": "Export OBJ for Quixel dDO",
"author": "Jorge Bouza",
"version": (0, 9),
"blender": (2, 77, 0),
"location": "File > Export> Export selected(s) as dDO .OBJs",
"description": "Export an object(s) as .OBJ optimized for Quixel dDO",
"warning": "",
"wiki_url": "",
"category": "Object"}

import bpy
import os

from bpy_extras.io_utils import ExportHelper
from bpy.props import StringProperty, BoolProperty, EnumProperty, IntProperty
from bpy.types import Operator

class ExportSelectedAsObj(Operator, ExportHelper):
"""Export a .OBJ optimized for Quixel dDO"""
bl_idname = "export.selected_as_obj_files"
bl_label = "Export Selected Objects as dDO obj"

global_scale = IntProperty(default=1)
#use_mesh_modifiers = BoolProperty(default=False)
use_filter_folder = True
filename_ext = ".obj"

def write_some_data(self, context, folder):
selected = bpy.context.selected_objects.copy()
bpy.ops.object.select_all(action=’DESELECT’)

for obj in selected:
name = obj.name.replace(‘.’, ‘_’)
obj.select = True
fullpath = os.path.join(folder, name + ‘.obj’)
bpy.ops.export_scene.obj(filepath=fullpath, check_existing=True, axis_forward=’-Z’, axis_up=’Y’, use_mesh_modifiers=False, use_selection=True, use_animation=False, use_edges=False, use_smooth_groups=True, use_normals=True, use_uvs=True, use_materials=False, use_triangles=True, keep_vertex_order=True)
obj.select = False

return {‘FINISHED’}

def execute(self, context):
print(self.filepath)
sliced = os.path.dirname(self.filepath)
if os.path.isdir(sliced):
if os.path.exists(sliced):
self.filepath = sliced
else:
self.report({‘WARNING’}, ‘Not a valid path’)
return {‘FINISHED’}

return self.write_some_data(context, self.filepath)

def menu_func_import(self, context):
self.layout.operator(ExportSelectedAsObj.bl_idname, text="Export selected as dDO .OBJs")

def register():
bpy.utils.register_class(ExportSelectedAsObj)
bpy.types.INFO_MT_file_export.append(menu_func_import)

def unregister():
bpy.utils.unregister_class(ExportSelectedAsObj)
bpy.types.INFO_MT_file_export.remove(menu_func_import)

if __name__ == "__main__":
register()

[/code]

Para utilizarlo basta con copiar el código, pegarlo en un documento de texto y guardarlo con la extensión .py .Después de eso solo habrá que instalarlo como cualquier otro plugin.
Por mayor comodidad, aquí he subido una versión descargable del plugin AQUÍ .

0 comentarios

Dejar un comentario

¿Quieres unirte a la conversación?
Siéntete libre de contribuir!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *