<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.8.5">Jekyll</generator><link href="https://miguelpef.github.io/feed.xml" rel="self" type="application/atom+xml" /><link href="https://miguelpef.github.io/" rel="alternate" type="text/html" /><updated>2019-06-19T08:01:08+00:00</updated><id>https://miguelpef.github.io/feed.xml</id><title type="html">Miguel Ángel Pérez Fraguas</title><subtitle>AR/VR/MR Indie Game Developer</subtitle><entry><title type="html">UE4 Opciones Gráficas Android</title><link href="https://miguelpef.github.io/opciones-graficas-android-ue4/" rel="alternate" type="text/html" title="UE4 Opciones Gráficas Android" /><published>2019-06-16T00:00:00+00:00</published><updated>2019-06-16T00:00:00+00:00</updated><id>https://miguelpef.github.io/opciones-graficas-android-ue4</id><content type="html" xml:base="https://miguelpef.github.io/opciones-graficas-android-ue4/">&lt;p&gt;&lt;img src=&quot;/images/graficos/Graficos.png&quot; alt=&quot;_config.yml&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Dentro del mundo Android encontramos muchas diferencias entre dispositivos. A nivel de Hardware es un gran impedimento para la reproducción de aplicaciones que requieran una gran potencia. 
En este sentido el juego que estoy desarrollando necesita de las mejores condiciones para funcionar ya que se desarrolla bajo OpenGL ES 3.1 un render específico para móvil con un componente visual muy potente. Para más información sobre OpenGL ES 3.1 puedes ir a este &lt;a href=&quot;https://docs.unrealengine.com/en-US/Platforms/Mobile/Android/OpenGLES31MobileRenderer/index.html&quot; target=&quot;_blank&quot;&gt;enlace&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;Gestionando la configuración gráfica en Android&lt;/h2&gt;
&lt;p&gt;En primer lugar hay que dar la posibilidad de cambiar las opciones gráficas desde algún tipo de menú que se encuentre tanto en el inicio del juego por si el dispositivo no puede iniciarlo con la máxima calidad posible y otro durante el juego por si en cualquier momento se quiere cambiar por cualquier motivo.
Para ello usaremos tres botones, calidad alta, calidad media y calidad baja. Lo único que cambiaremos por el momento será el porcentaje de resolución de pantalla, haciendo que en la calidad más baja se llegue a distorsionar la imagen y dando a los bordes unos dientes de sierra que si bien empeoran la experiencia de juego, permiten aceptar un mayor número de dispositivos.
&lt;br /&gt;
Para realizar este cambio ejecutaremos en consola los siguientes comandos:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;r.ScreenPercentage 40&lt;/li&gt;
  &lt;li&gt;r.ScreenPercentage 80&lt;/li&gt;
  &lt;li&gt;r.ScreenPercentage 100&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Donde el número es el porcentaje de resolución que comprende desde el 0 hasta el 100 siendo este último la máxima posible. Puedes ver más información sobre esta opción en el siguiente &lt;a href=&quot;https://docs.unrealengine.com/en-US/Resources/ContentExamples/PostProcessing/1_13/index.html&quot; target=&quot;_blank&quot;&gt;enlace&lt;/a&gt;.
&lt;br /&gt;
&lt;img src=&quot;/images/graficos/settinggraph.png&quot; alt=&quot;_config.yml&quot; /&gt;
&lt;br /&gt;&lt;/p&gt;
&lt;h2&gt;Ejemplo y diferencias entre las distintas resoluciones en dispositivo Android&lt;/h2&gt;
&lt;h3&gt;Calidad Baja&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/images/graficos/Lowset.png&quot; alt=&quot;_config.yml&quot; /&gt;
&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;Calidad Media&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/images/graficos/mediumset.png&quot; alt=&quot;_config.yml&quot; /&gt;
&lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;Calidad Alta&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/images/graficos/highset.png&quot; alt=&quot;_config.yml&quot; /&gt;
&lt;br /&gt;&lt;/p&gt;
&lt;h2&gt;Otros comandos para cambiar la configuración gráfica&lt;/h2&gt;
&lt;p&gt;El número que se escribe es el rango entre el que se puede variar la configuración, si nos encontramos 0-4 podemos poner 0,1,2,3,4 pero solo un número que será la configuración que tendrá.
&lt;br /&gt;
&lt;b&gt;Post Procesado&lt;/b&gt;
&lt;br /&gt;
&lt;code&gt;
r.MotionBlurQuality=0-4&lt;br /&gt;
r.BlurGBuffer=0-1&lt;br /&gt;
r.AmbientOcclusionLevels=0-3&lt;br /&gt;
r.AmbientOcclusionRadiusScale=1.7-1.0&lt;br /&gt;
r.DepthOfFieldQuality=0-2&lt;br /&gt;
r.RenderTargetPoolMin=300-400&lt;br /&gt;
r.LensFlareQuality=0-2&lt;br /&gt;
r.SceneColorFringeQuality=0-1&lt;br /&gt;
r.EyeAdaptationQuality=0-2&lt;br /&gt;
r.BloomQuality=4-5&lt;br /&gt;
r.FastBlurThreshold=0-7&lt;br /&gt;
r.Upscale.Quality=1-3&lt;br /&gt;
r.Tonemapper.GrainQuantization=0-1&lt;br /&gt;
&lt;/code&gt;
&lt;br /&gt;
&lt;b&gt;Sombras&lt;/b&gt;
&lt;br /&gt;
&lt;code&gt;
r.LightFunctionQuality=0-1&lt;br /&gt;
r.ShadowQuality=0-5&lt;br /&gt;
r.Shadow.CSM.MaxCascades=1-4&lt;br /&gt;
r.Shadow.MaxResolution=512-1024&lt;br /&gt;
r.Shadow.RadiusThreshold=0.06-0.03&lt;br /&gt;
r.Shadow.DistanceScale=0.6-1.0&lt;br /&gt;
r.Shadow.CSM.TransitionScale=0-1.0&lt;br /&gt;
&lt;/code&gt;
&lt;br /&gt;
&lt;b&gt;Texturas&lt;/b&gt;
&lt;br /&gt;
&lt;code&gt;
r.Streaming.MipBias=2.5-0&lt;br /&gt;
r.MaxAnisotropy=0-8&lt;br /&gt;
r.Streaming.PoolSize=200-1000&lt;br /&gt;
&lt;/code&gt;
&lt;br /&gt;
&lt;b&gt;Efectos&lt;/b&gt;
&lt;br /&gt;
&lt;code&gt;
r.TranslucencyLightingVolumeDim=24-64&lt;br /&gt;
r.RefractionQuality=0-2&lt;br /&gt;
r.SSR=0-1&lt;br /&gt;
r.SceneColorFormat=3-4&lt;br /&gt;
r.DetailMode=0-2&lt;br /&gt;
r.TranslucencyVolumeBlur=0-1&lt;br /&gt;
r.MaterialQualityLevel=0-1&lt;br /&gt;
&lt;/code&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Para más información acerca de las opciones gráficas en Unreal Engine 4 ir al siguiente &lt;a href=&quot;https://docs.unrealengine.com/en-US/Engine/Performance/Scalability/ScalabilityReference/index.html&quot; target=&quot;_blank&quot;&gt;enlace&lt;/a&gt;.&lt;/p&gt;</content><author><name>MiguelPeF</name></author><summary type="html"></summary></entry><entry><title type="html">Proyecto Rashan(Uso de cámaras) UE4</title><link href="https://miguelpef.github.io/uso-de-camaras-UE4/" rel="alternate" type="text/html" title="Proyecto Rashan(Uso de cámaras) UE4" /><published>2019-06-10T00:00:00+00:00</published><updated>2019-06-10T00:00:00+00:00</updated><id>https://miguelpef.github.io/uso-de-camaras-UE4</id><content type="html" xml:base="https://miguelpef.github.io/uso-de-camaras-UE4/">&lt;p&gt;&lt;img src=&quot;/images/rashanCamera.png&quot; alt=&quot;_config.yml&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Desde que comencé el proyecto de creación de mi primer videojuego con Unreal Engine 4 no me han dejado de surgir retos… El último de ellos, la elección de la cámara (posicionamiento, seguimiento…)
Explicaré de forma resumida por qué finalmente incorporé varios tipos de cámara al entorno y cómo generé el cambio de cámara para cada situación, los problemas con los que me encontré y la mejor solución para ellos.&lt;/p&gt;

&lt;h1&gt;Elección de cámaras&lt;/h1&gt;

&lt;p&gt;Unreal Engine da la posibilidad de generar plantillas en primera y tercera persona, es una forma muy sencilla de comenzar un proyecto para no iniciar de 0. Sin embargo, el problema nos lo encontramos cuando no nos resulta ninguna de estas la forma de elaborar nuestro videojuego.
Para el proyecto Rashan quería que en los exteriores la vista fuese en tercera persona y que acompañase al jugador en el movimiento, todo era muy sencillo desde esta primera perspectiva. El problema llegó cuando entraba en interior, al situarse la cámara en el blueprint del personaje siempre mantenía la distancia esto hacia que la visión del espectador chocase contra el techo de las casas, las paredes…&lt;/p&gt;

&lt;p&gt;Por ese motivo una vez tenía resuelto la visión desde exteriores me puse a investigar cómo se desenvolvían otros videojuegos. Me llamó la atención cómo lo hacian los antiguos Resident Evil que seguro que muchos recordaréis…&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/resident-evil.jpg&quot; alt=&quot;_config.yml&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Comencé con la creación de este sistema de una forma sencilla, aplicando triggers de accionamiento con Begin Overlap y referenciando la cámara que se posicionaba siempre abarcando el espacio que ocupaba el trigger box. Los blueprint que usé son:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/bp1.png&quot; alt=&quot;_config.yml&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Todo funcionaba de forma correcta, pero empezaron a surgir los problemas…&lt;/p&gt;

&lt;h1&gt;Problemas con cámaras estáticas&lt;/h1&gt;
&lt;h2&gt;Problema 1: Control del personaje y perspectiva&lt;/h2&gt;
&lt;p&gt;Supongamos que la cámara que tenemos al principio se encuentra mirando al frente, pero cuando accedemos al trigger mencionado anteriormente la cámara a la que cambia se encuentra mirando exactamente hacia el sentido contrario. El movimiento del personaje se invierte totalmente haciendo que el control sea un infierno e imposibilitando el disfrute del juego.&lt;/p&gt;

&lt;h2&gt;Problema 2: Escasa visión del entorno&lt;/h2&gt;
&lt;p&gt;Al ser una cámara estática y no poder rotar sobre el entorno, se limita la posible sensación de descubrimiento, hablamos de un juego de aventura y descubrimiento donde hay que recoger objetos por el mundo… La visión sobre el escenario debe alcanzar el máximo espacio posible para detectar todos los secretos que el entorno tiene para el jugador.&lt;/p&gt;

&lt;h2&gt;Problema 3: Transición entre cámaras estáticas y móviles&lt;/h2&gt;
&lt;p&gt;Pongamos el ejemplo que estamos en la cocina con la cámara X, y pasamos al salón que tiene la cámara Y. El cambio de imagen si es instantáneo nos hará perdernos por unos segundos en el entorno. Por ello me gusta siempre realizar cualquier cambio de vista de forma progresiva, que el espectador entienda que está ocurriendo y no pierda la sensación de control.&lt;/p&gt;

&lt;h1&gt;Solución para el Proyecto Rashan&lt;/h1&gt;
&lt;p&gt;Podría haber modificado el control para solucionar de forma rápida el problema 1, pero el juego acabaría siendo más complejo de lo que en un principio se ideo. &lt;br /&gt;
Para resolver el problema 2 habría sido buena idea que las cámaras estáticas rotaran en función de la posición del jugador, pero continuaríamos con el problema 1. &lt;br /&gt;
La solución para el Proyecto acabó siendo lo que se había pensado en un principio, un cambio de cámara de móvil a estático. Sin embargo, la cámara estática siempre tendría que estar mirando al frente y nunca a la derecha, izquierda o invertido… Además habría que posicionar un número elevado de cámara por los interiores para que se pudiese solucionar el problema 2. El cambio de cámara sería progresivo gracias a la opción del blueprint set view target with blend, posicionando blend time con valor de 1.0, logramos conseguir que el cambio se realice durante 1 segundo.&lt;/p&gt;

&lt;div class=&quot;video-container&quot;&gt;&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/8yNQEdk9gOE&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;</content><author><name>MiguelPeF</name></author><summary type="html"></summary></entry></feed>