martes, 3 de mayo de 2011

LOD level of detail en Unity3D


Este es un recurso a pedido por rodF.

El LOD (Level of detail) tiene una gran función en los juegos de video ya que nos permite crear referencias económicas para nuestros objetos cuando estamos cerca o lejos de ellos.

Por ejemplo: Si nos encontramos a una distancia muy lejana no tiene caso que se dibujen todos los polígonos de un objeto, pero si nos acercamos si será necesario verlo a detalle.

Ésto evita recursos en el vRam o memoria dedicada al video y es excelente para mundos muy grandes con objetos muy detallados.

El LOD funciona de la siguiente manera:


Los objetos reducen su número de polígonos mientras están más alejados de la cámara.

Para crear un LOD deberemos crear 2 objetos:
1.-Objeto detallado.
2.-Objeto reducido en polígonos con la misma topología.

Creamos un GameObject vacío y agregamos tanto el objeto detallado como el reducido:


Copia el siguiente código "LODmanager" y pegalo en un nuevo Js:

Automatically set LOD Levels of models (C)2010 by Tom Vogt Use and modify as you wish, but retain author credits (aka BSD license)

public var Distances : float[];
public var Models : GameObject[];
private var current = -2;

function Start() {
for (var i=0; i
Models[i].SetActiveRecursively(false);
}
}

function Update() {
var d = Vector3.Distance(camera.main.transform.position, transform.position);
var stage = -1;
for (var i=0; i
if (d
stage=i;
i=Distances.Length;
}
}
if (stage==-1) stage=Distances.Length;
if (current!=stage) {
SetLOD(stage);
}
}

function SetLOD(stage) {
Models[stage].SetActiveRecursively(true);
if (current>=0) Models[current].SetActiveRecursively(false);
current = stage;
}



Agrega el código al GameObject y modifica los elementos de la siguiente manera:

En models agrega los 2 niveles: detallado y reducido y calcula Distances, que es la distancia de la cámara, entre más alto sea el número mayor será la distancia de transformación de niveles.
Recuerda que los 2 objetos deben estar en la misma posición y sitio.

Suerte rodF

No hay comentarios:

Publicar un comentario