XSIforum.com
Foros 3D => Autodesk Softimage => Mensaje iniciado por: Unaided en 14 Noviembre 2013, 20:13:17
-
Estoy intentando hacer un control para que el nombre del archivo de render lleve el nombre del modelo en estado visible.
Esto es. Dada una jerarquía como esta:
+modelo_root
L modelo1
L modelo2
L modelo3
L ...
La idea es que solo uno de los modelos esté visible, y trasladar su nombre como token al filename path de render.
No se me ocurre como plantearlo. No quiero usar passes porque acabaría con una lista muy extensa de ellos. Tampoco puedo usar frames y animando la visibilidad.
-
Danos más pistas... estas usando Python, C++ ..?
Tengo el codigo de un par de exportadores, donde puedes ver bastante ejemplo de C++, en estos links:
https://bitbucket.org/povman/mitxsi/src (https://bitbucket.org/povman/mitxsi/src)
http://src.luxrender.net/luxsi/ (http://src.luxrender.net/luxsi/)
Si estas usando Python, tengo algunos proyectos más, pero esta en mi PC :)
Saludos..
-
No estaba pensando en scripting porque por lo pronto no veo cómo plantearlo. Si acaso barajaba algo de script (js/python) muy simple para comprobar el estado de la visibilidad de los modelos. Pero no estaba pensando en scripting profundo para algo así.
-
Cómo procedimiento no sé si sería factible el recorrer mediante un for los children del objeto model_root evaluando su propiedad visibility y almacenar en una variable una cadena con el name del model si está visible.
Ahora bien, qué ocurre si más de un model está visible, la cadena resultante sería algo como model1model2model3?
Cómo trasladar el valor de esa variable a un token? El token Value acepta cualquier propiedad de Softimage, pero una variable existente en un script puede leerla?
-
En plan 'usar y tirar' yo crearía un custom parameter (TOKEN_DATA en el ejemplo) en la escena con un parametro de tipo string (TOKEN_NAME) desde el cual vincular al pass de render y un pequeño script para actualizar el valor de ese parámetro, algo asi:
root = "modelo_root"
children = sorted(Application.Dictionary.GetObject(root).FindChildren2("*"),
key=lambda x: not x.Properties("Visibility").Parameters("viewvis").Value)
Application.ActiveSceneRoot.Properties("TOKEN_DATA").Parameters("TOKEN_NAME").Value = children[0].Name
Si es algo que usarás a menudo habría que hacerlo bien y buscar un modo genérico, pero en plan guarro lo de arriba debería funcionar :)
-
model1model2model3?
Si quieres los nombres de TODOS los objetos visibles tendrías que modificar lo anterior tal que...
root = "modelo_root"
children = [x.Name for x in Application.Dictionary.GetObject(root).FindChildren2("*")
if x.Properties("Visibility").Parameters("viewvis").Value]
Application.ActiveSceneRoot.Properties("TOKEN_DATA").Parameters("TOKEN_NAME").Value = "".join(children)
-
Funciona perfectamente César!
Muchas gracias!
-
:)