Você está na página 1de 6

Optimizando el Rendimiento Grfico

Un buen rendimiento es crtico al xito de muchos juegos. Abajo hay algunas guas simples para
maximizar la velocidad de la renderizacin grfica de su juego.

Dnde estn los costos de los grficos


Las partes grficas de su juego pueden principalmente tener un precio en dos sistemas del
computador: el GPU o el CPU. La primera regla de cualquier optimizacin es encontrar dnde el
problema de rendimiento est; ya que las estrategias para optimizar el GPU vs. el CPU son
bastantes diferentes (y puede inclusive ser opuesto - es bastante comn hacer que el GPU trabaje
ms mientras se optimice para el CPU, y vice versa).
Problemas tpicos y maneras de revisarlos:
GPU es a menudo limitado por fillrate o el ancho de banda de memoria.
Correr el juego en una resolucin menor de pantalla lo hace ms rpido? Si es as, usted lo
ms probable est limitado por fillrate en el GPU.
El CPU a veces es limitado por el nmero batches que necesitan ser renderizados.
Marque batches en la ventana Rendering Statistics.
Claro est, estas solo son reglas generales; el problema puede tambin estar en otra parte.
Problemas menos tpicos:
Renderizar no es un problema, ni en el GPU ni en el CPU! Por ejemplo, sus scripts o su
fsica pueden ser el problema actual. Utilice Profiler para resolver esto.
El GPU tiene demasiados vrtices para procesar. La cantidad de vrtices que estn ok
dependen en el GPU y la complejidad de los vertex shaders. Figuras tpicas no son ms que
100 mil en mviles, y no son ms que varios millones en PC.
El CPU tiene demasiados vrtices para procesar, para cosas que hacen un procesamiento de
vrtices en el CPU. Esto puede ser skinned meshes, simulacin de tela, partculas etc.

Optimizacin del CPU


Con el fin de renderizar cualquier objeto en la pantalla, el CPU tiene algn trabajo que hacer - cosa
como averiguar qu efectos de iluminacin afectan el objeto, ajustando el sombreador(shader) & los
parmetros del sombreador, mandar comandos drawing al controlador de grficos, que luego
prepara los comandos para ser mandados a la tarjeta grfica. Todo el precio de CPU por esto por
objeto no es muy barato, entonces si usted tiene muchos objetos visibles, esto se puede agregar.
Entonces por ejemplo, si usted tiene miles de tringulos, sera mucho ms barato si todos ellos
estn solos en un mesh, en vez de tener mil. meshes individuales cada uno de un tringulo. El costo
de ambos escenarios en el GPU va a ser muy similar, pero el trabajo hecho por el CPU para
renderizar mil objetos (en vez de uno) va a ser significante.
Con el fin de que el CPU haga menos trabajo, es bueno reducir la cuenta de los objetos visibles:

Combine objetos cerca juntos, ya sea manualmente, o utilizando el draw call batching de
Unity.
Utilice menos materiales en sus objetos, poniendo texturas separadas a un atlas de textura
grande y as.
Utilice menos cosas que cause que los objetos sean renderizados mltiples veces
(reflecciones, sombras, iluminacin por-pxel., vea a continuacin).
Combine los objetos juntos para que cada mesh tenga al menos varios cientos de tringulos y utilice
solo un Material para el mesh entero. Es importante entender que combinar dos objetos que no
compartan un material no le da a usted ningn incremento de rendimiento. La razn ms comn
para tener mltiples materiales es que dos meshes no comparten la misma textura, entonces para
optimizar el rendimiento CPU, usted debe asegurarse que cualquier objeto que usted combine
comparta la misma textura.
No obstante, cundo utilice muchas luces de pxel en el Forward rendering path, hay muchas
situaciones dnde combinar objetos no tiene sentido, como es explicado a continuacin.

GPU: Optimizar la Geometra de un Modelo


Cundo optimice la geometra de un modelo, hay dos reglas bsicas:
No utilice ms tringulos de los necesarios
Intente mantener el nmero del UV mapping de seams y bordes duros (vrtices duplicados)
lo mas bajo posible.
Tenga en cuenta que el nmero actual de vrtices que el hardware de grficas tiene que procesar es
usualmente no es lo mismo que el nmero reportado por una aplicacin 3D. Aplicaciones de
modelado usualmente muestran la cuenta de vrtice geomtrico, i.e. el nmero de diferentes puntos
de bordes que hacen un modelo. Para una tarjeta de grficas, no obstante, algunos vrtices
geomtricos van a necesitar ser divididos a dos o ms vrtices lgicos debido a propsitos de
renderizacin. Un vrtices debe dividirse si tiene mltiples normales, coordenadas UV o colores de
vrtice. En consecuencia, la cuenta de vrtices en Unity es invariablemente superior que la cuenta
dada por la aplicacin 3D.
Mientras la cantidad de geometra en los modelos es muy relevante para el GPU, algunas
caractersticas en Unity tambin procesan modelos en el CPU, por ejemplo mesh skinning.

Rendimiento de Iluminacin
La iluminacin que no es computarizada para nada siempre es la ms rpida! Utilice Lightmapping
para bake una static lighting (iluminacin esttica) solo una vez, en vez de computarla cada
frame. El proceso para generar un ambiente lightmapped toma solo un poco ms que simplemente
colocar una luz en la escena en Unity, pero:
Va a correr mucho ms rpido (23 veces por 2 luces por-pxel)
Y se ver mucho mejor ya que usted puede bake una iluminacin global y el lightmapper
puede suavizar los resultados

En muchos casos puede haber trucos simples posibles en sombreadores y contenido, en vez de
agregar ms luces por todo el lugar. Por ejemplo, en vez de agregar una luz que alumbre directo a la
cmara para obtener un efecto rim lighting, considere agregar una computacin dedicada rim
lighting a sus sombreadores(shaders) directamente.
Las luces en forward rendering
Una iluminacin dinmica por-pxel va a agregar una carga de renderizacin significante a cada
pxel afectado y puede llevar a que los objetos se renderizen en mltiplos pases. En dispositivos
menos poderes, como los mviles, o PC GPUs de baja gama, evite tener ms de una Pixel Light
iluminando cualquier objeto nico, y utilice lightmaps para iluminar objetos estticos en vez de
tener su iluminacin calculada cada fotograma. Una iluminacin dinmica por-vrtice puede
agregar un costo significante a transformaciones de vrtice. Intente evitar situaciones dnde
mltiples luces iluminen cualquier objeto dado.
Si usted utiliza una iluminacin de pxel, cada mesh tiene que ser renderizado tantas veces como
haya luces de pxeles iluminndola. Si usted combina dos meshes que estn muy lejos entre s, va a
aumentar el tamao efectivo del objeto combinado. Todas las luces de pxel que iluminen cualquier
parte de este objeto combinado va a ser tomado en cuento durante la renderizacin, para que el
nmero de pases de renderizacin que se deben hacer para renderizar el objeto combinado es la
suma del nmero de pases para cada uno de los objetos separados, por lo que nada gana al
combinarlos. Por esta razn, usted no debe combinar meshes que estn lo suficiente aparte para ser
afectados por diferentes conjuntos de luces de pxel.
Durante la renderizacin, Unity encuentra todas las luces alrededor del mesh y calcula cul de esas
luces lo afectan ms. Las Quality Settings son utilizadas para modificar cuntas de sas luces
terminan como luces de pxel y cuntas como luces de vrtice. Cada luz calcula su importancia
basada en qu tan lejos est desde el mesh y qu tan intensa su iluminacin es. Adicionalmente,
algunas luces son ms importantes que otras puramente del contexto del juego. Por esta razn, cada
luz tiene un ajuste Render Mode que puede ser establecido a Important o Not Important; las luces
marcadas como Not Important van a tpicamente tener una carga menor de renderizacin.
Como un ejemplo, considere un juego de carreras dnde el carro del jugador est andando en la
oscuridad con los faros delanteros prendidos. Los faros son probablemente las fuentes de luz
visualmente ms significantes en el juego, entonces su Render Mode va a probablemente ser
establecido a Important. Por otro lado, puede haber ms luces en el juego que son menos importante
(las luces traseras de otros carros, por decir) y que eno mejoran el efecto visual por mucho por ser
luces de pxel. El Render Mode para aquellas luces pueden ser establecidas con toda seguridad a
Not Important para evitar gastar capacidad de renderizado en lugares dnde dar poco beneficio.
Optimizar una iluminacin por-pxel salva ambos CPU y GPU: el CPU tiene menos draw calls por
hacer, y el GPU tiene menos vrtices para procesar y pxeles por rasterizar para todos estos
renderizadores de objetos adicionales.

GPU: Compresin de Textura y Mipmap


Utilizar Compressed Textures va a disminuir el tamao de sus texturas (resultando en unos tiempos

de carga ms rpidos y huellas de memoria ms pequeas) y tambin puede dramticamente


aumentar el rendimiento de renderizacin. Las texturas comprimidas utiliza solo una fraccin del
ancho de banda de memoria necesitado para texturas 32bit RGBA sin comprimir.
Utilice Mip Maps de Textura
Como regla de oro, siempre tenga Generate Mip Maps habilitado para texturas utilizadas en escenas
3D. De la misma forma en que la compresin de Texturas (Texture Compression) puede ayudar
limitar la cantidad de datos de textura transferida cundo el GPU est renderizando, una textura mip
mapped va a habilitar el GPU para utilizar una textura de baja-resolucin para tringulos pequeos.
La nica excepcin para esta regla es cundo un texel (pxel de textura) es conocido de mapear 1:1
al pxel de la pantalla renderizada, tal como elementos UI o en un juego 2D.

LOD y Distancias de Eliminacin Por-Capa (Per-layer Cull


Distances)
En algunos juegos, puede ser inapropiado eliminar agresivamente objetos pequeos que los ms
grandes, con el fin de reducir la carga de ambos CPU y GPU. Por ejemplo, piedras pequeas y
escombros pueden hacerse invisible en largas distancias mientras que los edificios grandes todava
seran visibles.
Esto puede ser logrado ya sea por un sistema Level Of Detail, o por ajustar manualmente las
distancias de eliminacin por-capa en la cmara. Usted puede colocar los objetos pequeos en un
separate layer y ajustar las distancias de eliminacin por-capa utilizando la funcin script
Camera.layerCullDistances.

Sombras en Tiempo Real


Las sombras en Tiempo Real son buenas, pero ellas pueden costar un montn de rendimiento, tanto
en trminos de draw calls extras para el CPU, y un procesamiento extra en el GPU. Para ms
detalles, ver Light Performance page.

GPU: Tips para escribir shaders de alto rendimiento


Un PC GPU de alta gama y un GPU mvil de baja gama puede ser literalmente cientos de veces
diferentes de rendimiento aparte. Lo mismo es verdad as sea en una sola plataforma. En un PC, un
GPU rpido es una docena de veces ms rpido que un GPU integrado lentos; y en plataformas
mviles usted puede ver esas diferencias grandes solo en GPUs.
Entonces tenga en menta que el rendimiento de GPU en plataformas mviles y PCs de baja gama
van a ser ms bajas que sus maquinas de desarrollo. Tpicamente, los sombreadores necesitarn ser
optimizados a manos para reducir clculos y lecturas de texturas con el fin de obtener un
rendimiento bueno. Por ejemplo, algunos sombreadores integrados de Unity tienen su equivalencia
mvil que son mucho ms rpidos (pero tienen algunas limitaciones o aproximaciones - eso es lo
que lo hacen ms rpido).
Debajo hay unas guas que son importantes para tarjetas grficas de mviles y de PC de baja gama.

Operaciones matemticas complejas


Transcendental mathematical functions (pow, exp, log, cos, sin, tan, etc) are quite expensive,
so a good rule of thumb is to not use them unless you really have to. Consider using lookup textures
as an alternative to complex math calculations if applicable.
No es aconsejable intentar escribir sus propias operaciones normalize, dot, inversesqrt, sin embargo.
Si usted utilizar las integradas entonces el controlador va a generar un cdigo mucho mejor para
usted.
tenga en menta que la operacin (discard) prueba alpha va a ser sus fragmentos sean ms lentos.
fragment shader slower.
Operaciones Floating point
While precision (float vs half vs fixed) of floating point variables is largely ignored on
desktop GPUs, it is quite important to get good performance on mobile GPUs. See Shader Data
Types and Precision page for details.
Para ms detalles acerca del rendimiento del sombreador, por favor lea la Shader Performance page.

Una Lista de Verificacin Simple para hacer su juego ms


Rpido
Mantener la cuenta de vrtices debajo 200k..3M por fotograma cundo se tenga como
destino PCs, dependiendo del GPU de destino
Si usted est utilizando sombreadores(shaders) integrados, escoja de los que estn en la
categora Mobile o Unlit. Ellos trabajan en plataformas no mviles tambin; pero son
versiones simplificadas y aproximadas de los sombreadores(shaders) ms complejos.
Mantenga el nmero de materiales por escena bajo - comparta la mayor cantidad de
materiales entre diferentes objetos como sea posible.
Establezca la propiedad Static en un objeto no-movible para permitir optimizaciones
internas cmo static batching.
No utilice Pixel Lights cundo no es necesario - escoja tener solo una sola (preferiblemente
direccional) luz de pxel afectando su geometra.
No utilice dynamic lights (luces dinmicas) cundo no sea necesario - escoja ms bien bake
la iluminacin.
Utilice formatos comprimidos de textura cuando sea posible, de otro modo prefiere texturas
16bit sobre 32 bit.
No utilice la niebla cundo no es necesario.
Aprenda beneficios de Occlusion Culling y utilcelo para reducir la cantidad de geometra
visible y draw-calls en caso de escena estticas complejas con mucha oclusin. Planee sus
niveles para beneficiarse de la eliminacin de oclusin.
Utilice skyboxes para distancias de geometra falsas.
Utilice sombreadores de pxel o combinadores de texturas para mezclar varias texturas en
vez de un enfoque multi-pass.

Use half precision variables when possible.


Minimice el uso de operaciones matemticas complejas como pow, sin, cos etc. en
sombreadores de pxel.
Escoja para utilizar menos texturas por fragmento.

Ver Vambin
Utilizando el Profiler.
Light Performance.

Você também pode gostar