Modificar n polígonos x distancia cámara

tas - 04/04/2007 16:16
Hola a todos, hace tiempo que no preguntaba nada por aquí. Utilizo 3dstudiomax9. Tengo que hacer una bandada de pájaros que se acercan a cámara, y pasan muy cerca, pero son demasiados polígonos para todo lo que dura el video. Porque cuando están lejos casi ni se ven.

Lo que quería hacer es que según a la distancia que estén de la cámara se le reduzca el número de polígonos, me suena que esto se podía hacer, pero no recuerdo cómo. Recuerden que está animado con huesos, no sé si esto puede afectar a la animación.

Si a alguien se le ocurre alguna manera, de esta forma o de cualquier otra que me lo diga. Gracias.
alberizo - 04/04/2007 16:33
Eso se llama lof (level of detail) si no te quieres complicar mucho, aplicas a loas pájaros un modificador optimize y lo animas para cuando esté lejos tenga pocos polígonos y cuando se acerca le bajas hasta 0.

Algó más currado seria vincular esto con la posición de la cámara con Reaction Manager, calculas la distancia entre el objeto y la posición de la cámara, y esto lo vinculas con el modificador optimize.
tas - 04/04/2007 17:02
No es lo que yo decía, pero parece resultón, lo voy a probar, gracias.
alberizo - 04/04/2007 21:01
No sé, es lo que entendí, modificar el número de polígonos según la distancia a cámara, por cierto el modificador multires va mucho más rápido y la optimización es mucho mejor.
Caronte - 04/04/2007 21:38

Eso se llama lof (level of detail).

Sera Lod.
Pepius - 04/04/2007 21:43
Lol.
Caronte - 04/04/2007 22:19
[modo_chiquito on]
nor (por la gloria de tu madre)
[modo_chiquito of]
.
SHAZAM - 04/04/2007 22:32
098:019.
Jose M. - 04/04/2007 22:33

No sé, es lo que entendí, modificar el número de polígonos según la distancia a cámara, por cierto el modificador multires va mucho más rápido y la optimización es mucho mejor.

Sin duda multires. El optimize al lado de multires es pobre.

Lo que sucede, es que puede ser peor el remedio que la enfermedad. Ya que si son muchos pájaros con el multires aplicado, la escena se va a disparar en consumo de Ram y en el visor también será más torpe. Aunque en el render sí vas a ganar tiempo.

El multires es una herramienta magnífica. Pero es una de esas herramientas que no puedes tener en la escena de trabajo porque consume demasiado. Es decir, que es mejor aplicar multires y contraer la malla. Al menos desde mi experiencia. Saludos.
Birkov - 05/04/2007 00:49
Otra opción es ir al panel utilities y ahí tienes una que te permite aplicar Lod a un objeto, bueno en realidad a 3, lo que hace es sustituir uno por otro dependiendo de lo que ocupen en pantalla, el inconveniente es que, si usas huesos tendrás que tener pesadas 3 mallas en vez de una.
ikerCLoN - 05/04/2007 00:58

Otra opción es ir al panel utilities y ahí tienes una que te permite aplicar Lod a un objeto, bueno en realidad a 3, lo que hace es sustituir uno por otro dependiendo de lo que ocupen en pantalla, el inconveniente es que, si usas huesos tendrás que tener pesadas 3 mallas en vez de una.

Siempre puedes pesar una, y usar el comando convert to skin del modificador skin Wrap, aplicado a los otros dos objetos.
promineo - 05/04/2007 01:21
Y digo yo. Pongamos de ejemplo un pájaro, hazle dos mallas, una de alta y otra de baja, las dos tienen skin. Hacerte un pequeño script no es nada difícil. Según la distancia de cámara a objetivo determinas que se esconda o se muestre la malla de alta, por ejemplo, las mallas de alta las llamas todas terminadas en __high y las de baja __low.

Así pensando a lo bruto sin comprobar nada y sin pensar en optimizar ni nada.

Rango seria el rango de animación.

For I=1 todo rango do.

Slidertime = i.

If $Camera, targetdistance < 80 then.

For o in objects where matchpattern o, name pattern:*__high do.

Unhide o.

For o in objects where matchpattern o, name pattern:*__low do.

Hide o).

Else (.

For o in objects where matchpattern o, name pattern:*__high do.

Hide o.

For o in objects where matchpattern o, name pattern:*__low do.

Unhide o).
).
*repito esto lo he escrito así a vote pronto ni lo he comprobado ni nada de nada.
promineo - 05/04/2007 01:44
Se me olvidó comentar si lo que quieres es en vez de la distancia de cámara al objetivo de cámara prefieres a un objeto calcula la distancia entre la cámara y el objeto con esta función.

Distance $Camera $paharo01__high.
Caronte - 05/04/2007 07:43
2 mallas no son suficientes para hacer un Lod decente, porque habrá un salto visible de la malla high a la Low. Hace falta una progresión más suave.
tas - 05/04/2007 08:46
Buenos días a todos, muchas gracias por vuestras respuestas, me parece que el Lod es muy trabajoso si tengo que pesar 3 o 4 mallas.

Lo que me parece interesante y voy a probar es el script, aunque yo nunca los he usado, la programación es algo que me puede. Gracias otra vez y ya os diré si me funciona.
Caronte - 05/04/2007 09:12

Me parece que el Lod es muy trabajoso si tengo que pesar 3 o 4 mallas.

¿en 3dsmax no tenéis algo para pasar los pesos de una malla a otra por proximidad?
Si no es así, alguien que controle la programación de scripts en 3dsmax debería intentar hacerlo, porque yo en Blender lo he usado (para pasar los pesos de un cuerpo a su ropa) y funciona de lujo.
alberizo - 05/04/2007 09:48
Si, si se puede, con Physique.
tas - 05/04/2007 10:07
Con skin no se puede? Yo siempre los peso con skin, me parece mejor, o más fácil, pero, se podría pasar los pesos calculados con skin al Physique?
alberizo - 05/04/2007 10:18
Eso ya no lo sé, para mí Physique es más completo, aunque más difícil de ajustar, con Physique te guardas un archivo como.phy y luego se lo puedes aplicar a cualquier objeto.
promineo - 05/04/2007 10:43
Vaya mi madre, skin Wrap muchacho, skin wrappppppp.