El nivell de detall (o LOD: Level Of Detail) és una tècnica imprescindible en gràfics 3D generats en temps real, per a poder mantenir la velocitat de refresc de pantalla sense gastar temps inutilment. Del que es tracta és de tenir models simplificats (en diferents graus) d'un mateix objecte. Llavors es tria quin dels models s'ensenya en cada moment segons la distància a la que està de l'observador. Això es fa per que no té sentit dibuixar un objecte molt complex amb centenars de polígons si aquest objecte ocupa 3x3 pixels a pantalla. Si no tinguéssim models simplificats estariem malgastant temps en dibuixar a plé detall una cosa que finalment no s'apreciaria.
La manera en que es treballa en aplicar el LOD, és a base de definir espais o rangs davant l'observador i assignar un dels models del nivell de detall adient per a ser vist en aquelles distàncies. El node que el VRML implementa per a assolir aquest efecte és precisament el node LOD.
El següent exemple ens mostra l'efecte d'anar-nos apropant a una cadira. Conforma ens anem apropant el model va guanyant
en definicó.
|
Exemple1: Definició d'una cadira en nivells de detall.
LOD {
range [ 10 15 20 ]
level [
Group { # Nivell 1 (maxim nivell): dues caixes i quatre cilindres
children [
Transform { # Respatller
translation 0 3.5 -1.75
children Shape {
geometry Box { size 3.5 3 0.5 }
appearance Appearance { material Material { diffuseColor 0.8 0.6 0 } }
}
}
Shape { # Seient
geometry Box { size 3.5 0.5 3.5 }
appearance Appearance { material Material { diffuseColor 0.8 0.6 0 } }
}
Transform { # Pota posterior esquerra
translation -1.75 0 -1.75
children Shape {
geometry Cylinder { radius 0.25 height 10 }
appearance Appearance { material Material { diffuseColor 0.8 0 0.2 } }
}
}
Transform { # Pota posterior dreta
translation 1.75 0 -1.75
children Shape {
geometry Cylinder { radius 0.25 height 10 }
appearance Appearance { material Material { diffuseColor 0.8 0 0.2 } }
}
}
Transform { # Pota frontal esquerra
translation -1.75 -2.5 1.75
children Shape {
geometry Cylinder { radius 0.25 height 5 }
appearance Appearance { material Material { diffuseColor 0.8 0 0.2 } }
}
}
Transform { # Pota frontal dreta
translation 1.75 -2.5 1.75
children Shape {
geometry Cylinder { radius 0.25 height 5 }
appearance Appearance { material Material { diffuseColor 0.8 0 0.2 } }
}
}
]
}
Group { # Nivell 2: sis caixes
children [
Transform { # Respatller
translation 0 3.5 -1.75
children Shape {
geometry Box { size 3.5 3 0.5 }
appearance Appearance { material Material { diffuseColor 0.8 0.6 0 } }
}
}
Shape { # Seient
geometry Box { size 3.5 0.5 3.5 }
appearance Appearance { material Material { diffuseColor 0.8 0.6 0 } }
}
Transform { # Pota posterior esquerra
translation -1.75 0 -1.75
children Shape {
geometry Box { size 0.5 10 0.5 }
appearance Appearance { material Material { diffuseColor 0.8 0 0.2 } }
}
}
Transform { # Pota posterior dreta
translation 1.75 0 -1.75
children Shape {
geometry Box { size 0.5 10 0.5 }
appearance Appearance { material Material { diffuseColor 0.8 0 0.2 } }
}
}
Transform { # Pota frontal esquerra
translation -1.75 -2.5 1.75
children Shape {
geometry Box { size 0.5 5 0.5 }
appearance Appearance { material Material { diffuseColor 0.8 0 0.2 } }
}
}
Transform { # Pota frontal dreta
translation 1.75 -2.5 1.75
children Shape {
geometry Box { size 0.5 5 0.5 }
appearance Appearance { material Material { diffuseColor 0.8 0 0.2 } }
}
}
]
}
Group { # Nivell 3: dues caixes
children [
Transform { # Respatller
translation 0 2.5 -1.75
children Shape {
geometry Box { size 4 5 0.5 }
appearance Appearance { material Material { diffuseColor 0.8 0.6 0 } }
}
}
Transform { # Seient
translation 0 -2.5 0
children Shape {
geometry Box { size 4 5 4 }
appearance Appearance { material Material { diffuseColor 0.8 0.6 0 } }
}
}
]
}
Shape { # Nivell 4 (mes baix): una caixa
geometry Box { size 4 10 4 }
appearance Appearance { material Material { diffuseColor 0.8 0.6 0 } }
}
]
}
|
Les parts del node LOD són les següents. En primer lloc trobem el field range on definim les particions de distància on es veurà cada nivell de model. Voldrem definir quatre (4) models diferents i per això definim tres (3) valors. El primer valor ens indica que s'ha de veure el model més detallat si l'observador està a menys de 10 unitats de l'objecte. El segon valor ens indica que s'ha de veure el segon nivell de detall si l'observador està a menys de 15 unitats ( i a més de 10 unitats) de l'objecte. El tercer valor ens indica que s'ha de veure el tercer nivell de detall si l'observador està a menys de 20 unitats ( i a més de 15 unitats) de l'objecte. Finalment, no cal posar quart valor per que ja es dedueix que s'ha de veure el quart nivell de detall si l'observador està a més de 20 unitats de l'objecte.
El segon element que trobem és el field level que és on hi posem les diferents versions de l'objecte en ordre de més a menys detall.
Evidentment, els rangs que hem agafat no produeixen un efecte suau de canvi, i són solament a tall didactic. Per que
us feu una idea de com son els quatre elements, aquí els podreu veure tots un al costat de l'altre:
4nivells.wrl.
Exercicis proposats:
|