{"id":42068,"date":"2025-05-09T17:31:54","date_gmt":"2025-05-09T15:31:54","guid":{"rendered":"https:\/\/www.levelup-gamedevhub.com\/docs\/preincubacion\/recursos\/coding\/unity-optimizacion-grafica\/"},"modified":"2025-05-09T18:23:26","modified_gmt":"2025-05-09T16:23:26","slug":"unity-optimizacion-grafica","status":"publish","type":"docs","link":"https:\/\/www.levelup-gamedevhub.com\/en\/docs\/preincubacion\/coding\/coding\/unity-optimizacion-grafica\/","title":{"rendered":"Unity: optimizaci\u00f3n gr\u00e1fica"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Se recomienda planificar lo antes posible la optimizaci\u00f3n gr\u00e1fica de nuestros juegos desde el momento cero de desarrollo la versi\u00f3n de producci\u00f3n. Para evitar el efecto bola de nieve.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En prototipos que se van a desechar se puede descargar de recursos al equipo en cuanto a los requisitos de optimizaci\u00f3n.<br><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Indicadores de rendimiento<\/strong>\n<ul class=\"wp-block-list\">\n<li><strong>Game Panel<\/strong> > Stats\n<ul class=\"wp-block-list\">\n<li>CPU: <mark>main X ms<\/mark> | render <mark>thread X ms<\/mark><\/li>\n\n\n\n<li><mark>Batches<\/mark>: X | <mark>saved by batching<\/mark>: X<\/li>\n\n\n\n<li><mark>Tris<\/mark>: X<\/li>\n\n\n\n<li>Screen: <mark>AxB<\/mark> &#8211; <mark>X MB<\/mark><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Profiler<\/strong>\n<ul class=\"wp-block-list\">\n<li>Funcionamietno por modulos (recomendado prestar atenci\u00f3n a los siguientes m\u00f3dulos) Lo recomendable es capturar los valores por script y sacar un output por consola de ciertos valores de dichos m\u00f3dulos.\n<ul class=\"wp-block-list\">\n<li>CPU<\/li>\n\n\n\n<li>Rendering<\/li>\n\n\n\n<li>Memory (<mark>Modulo extra<\/mark>: <a href=\"https:\/\/docs.unity3d.com\/Packages\/com.unity.memoryprofiler@0.2\/manual\/index.html\" target=\"_blank\" rel=\"noopener\">Memory Profiler<\/a>)<\/li>\n\n\n\n<li>UI<\/li>\n\n\n\n<li>UI Details<\/li>\n\n\n\n<li>Global Illumination<\/li>\n\n\n\n<li>Virtual Texturing<\/li>\n\n\n\n<li><a href=\"https:\/\/docs.unity3d.com\/Packages\/com.unity.mobile.adaptiveperformance@0.1\/manual\/index.html\" target=\"_blank\" rel=\"noopener\">Adaptative Performance<\/a><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Scene<\/strong>\n<ul class=\"wp-block-list\">\n<li><mark>Overdraw<\/mark><\/li>\n\n\n\n<li><a href=\"https:\/\/docs.unity3d.com\/ScriptReference\/SceneManagement.SceneManager.html\" target=\"_blank\" rel=\"noopener\"><mark>Manager<\/mark><\/a> ( Clave para clasificar el orden de carga y los tiempos dedicados para cargar la escena )<br><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>T\u00e9cnicas de optimizaci\u00f3n<\/strong>\n<ul class=\"wp-block-list\">\n<li>Shaders aplicados al proyecto\n<ul class=\"wp-block-list\">\n<li>Evitar usar los shaders de Unity ( Solo el de UI o el de Sprites )<\/li>\n\n\n\n<li>Usar el m\u00ednimo de variables posibles<\/li>\n\n\n\n<li>Usar variables de poca profundidad de bits (m\u00ednimo posible de decimales: <strong>fixed<\/strong>, <strong>half<\/strong>, <mark>float<\/mark>)<\/li>\n\n\n\n<li>Es mejor usar personalizados o de compra con buenas referencias de otros devs.<\/li>\n\n\n\n<li>Vertex Program\n<ul class=\"wp-block-list\">\n<li>C\u00e1lculos por cada v\u00e9rtice que hay en la mesh ( C\u00e1culos derivados de las UVs \/ Normales )<\/li>\n\n\n\n<li>Calculos de textura, transformaci\u00f3n de vertices<\/li>\n\n\n\n<li>Iluminaci\u00f3n local por v\u00e9rtice<\/li>\n\n\n\n<li>Iluminaci\u00f3n global<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Fragment Program\n<ul class=\"wp-block-list\">\n<li>C\u00e1lculos por cada p\u00edxel obtenido ( Colores e iluminaci\u00f3n )<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><mark>Velocidad de dibujado<\/mark><\/li>\n\n\n\n<li>Im\u00e1genes\n<ul class=\"wp-block-list\">\n<li>Canales de color que vas a usasr<\/li>\n\n\n\n<li>Profundidad de bits de los canales de color<\/li>\n\n\n\n<li>Capacidad de transparencia (JPEG vs PNG)<\/li>\n\n\n\n<li>Capas via PSB (compatible con unity como sprites o skinning de huesos)<\/li>\n\n\n\n<li>Escoger adecuadamente la resoluci\u00f3n de las im\u00e1genes usadas en cada modelo, etc\u2026<\/li>\n\n\n\n<li>Uso de canales de color para ahorrar samples de textura (cuando existe limitaci\u00f3n de samples seg\u00fan plataforma)<\/li>\n\n\n\n<li>Importador de texturas\n<ul class=\"wp-block-list\">\n<li>Elegir muy cuidadosamente el tipo de compresi\u00f3n y formato de la textura en los atributos del asset en cuesti\u00f3n. Tab Default o por Plataforma. (Formato, compresi\u00f3n o crunch compression)<\/li>\n\n\n\n<li>Advanced > Mip Maps ( con juegos 2D o c\u00e1maras ortogr\u00e1ficas no suelen usarse )\n<ul class=\"wp-block-list\">\n<li>Genera diferentes resoluciones de textura en funci\u00f3n del tama\u00f1o del tri\u00e1ngulo que lo renderiza.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Texture Type > Sprite > Mesh Type\n<ul class=\"wp-block-list\">\n<li>Tigh: renderiza una <mark>mesh adaptada a la forma de transparencia<\/mark> del asset visual (irregular)<\/li>\n\n\n\n<li>Full Rect: renderiza una <mark>mesh quad<\/mark> para pintar el sprite (regular)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Create > 2D > <a href=\"https:\/\/docs.unity3d.com\/Manual\/class-SpriteAtlas.html\" target=\"_blank\" rel=\"noopener\">Sprite Atlas<\/a> ( deben ubicarse en la carpeta resources )\n<ul class=\"wp-block-list\">\n<li>Este tipo de t\u00e9cnicas ayudan a reducir las Draw Calls<\/li>\n\n\n\n<li>Debemos usar esta t\u00e9cnica con sprites que se usen en la misma escena para optimizar realmente. No mezclar sprites de diferentes escenas donde nunca se vayan a usar simult\u00e1nemanete, la optimizaci\u00f3n no ser\u00e1 eficiente y consumiriamos m\u00e1s memor\u00eda sin sentido.<\/li>\n\n\n\n<li>Agrupa todas las coordenadas de multiples coordenadas de texturas procedentes de m\u00faltiples assets.<\/li>\n\n\n\n<li>Se pueden crear variantes de Sprite Atlas seg\u00fan las necesidades de densidad de pantalla que queremos tener especiales para sustituirlos por coveniencia.<\/li>\n\n\n\n<li>Existen alternativas externas al Sprite Atlas como <a href=\"https:\/\/www.codeandweb.com\/texturepacker\" target=\"_blank\" rel=\"noopener\">Texture Packer<\/a><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table class=\"has-fixed-layout\"><tbody><tr><th><strong>Recursos<\/strong><\/th><th><strong>Descripci\u00f3n<\/strong><\/th><th><strong>URL<\/strong><\/th><\/tr><tr><td>Amply Shader Editor<\/td><td>Amplify Shader Editor (ASE) is a node-based shader creation tool inspired by industry leading software.<\/td><td><a href=\"https:\/\/assetstore.unity.com\/packages\/tools\/visual-scripting\/amplify-shader-editor-68570\" target=\"_blank\" rel=\"noopener\">Amplify Shader Editor<\/a><\/td><\/tr><\/tbody><\/table><\/figure>\n","protected":false},"featured_media":0,"parent":42065,"menu_order":0,"comment_status":"open","ping_status":"closed","template":"","meta":{"rs_blank_template":"","rs_page_bg_color":"","slide_template_v7":"","_is_vendor_doc":"0","footnotes":""},"doc_tag":[],"class_list":["post-42068","docs","type-docs","status-publish","hentry"],"comment_count":0,"_links":{"self":[{"href":"https:\/\/www.levelup-gamedevhub.com\/en\/wp-json\/wp\/v2\/docs\/42068","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.levelup-gamedevhub.com\/en\/wp-json\/wp\/v2\/docs"}],"about":[{"href":"https:\/\/www.levelup-gamedevhub.com\/en\/wp-json\/wp\/v2\/types\/docs"}],"replies":[{"embeddable":true,"href":"https:\/\/www.levelup-gamedevhub.com\/en\/wp-json\/wp\/v2\/comments?post=42068"}],"version-history":[{"count":1,"href":"https:\/\/www.levelup-gamedevhub.com\/en\/wp-json\/wp\/v2\/docs\/42068\/revisions"}],"predecessor-version":[{"id":42069,"href":"https:\/\/www.levelup-gamedevhub.com\/en\/wp-json\/wp\/v2\/docs\/42068\/revisions\/42069"}],"up":[{"embeddable":true,"href":"https:\/\/www.levelup-gamedevhub.com\/en\/wp-json\/wp\/v2\/docs\/42065"}],"wp:attachment":[{"href":"https:\/\/www.levelup-gamedevhub.com\/en\/wp-json\/wp\/v2\/media?parent=42068"}],"wp:term":[{"taxonomy":"doc_tag","embeddable":true,"href":"https:\/\/www.levelup-gamedevhub.com\/en\/wp-json\/wp\/v2\/doc_tag?post=42068"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}