Hilo oficial Dolphin (Emulador GameCube/Wii)

@ppmeis parece un gran avance. Lo k no termino de entender es si ya está implementado en las últimas compilaciones o lo harán durante este mes de agosto. Alguien sabría decirme?
@michaelpegaso ya está disponible en las últimas builds de desarrollo ;).

Saludos.
ppmeis escribió:Hola a tod@s:

Hace tiempo que no me paso por este hilo, pero este mes merece la pena pasarse. Ha habido una gran mejora en el emulador y es digno de mención ;).

Me he molestado en traducir el informe de progreso del mes de julio para que lo entienda todo el mundo interesado en este emulador. Os lo dejo en el spoiler a continuación:

Ubershaders: Una solución ridícula para un problema imposible.


Imagen


Cuando estás jugando a tu juego favorito en Dolphin con un ordenador potente, las cosas suelen funcionar bien. El juego va a toda velocidad, no hay errores gráficos, y puedes usar tu mando favorito si quieres. Aún así, cada vez que llegas a un área nueva, o cargas un nuevo efecto, hay un pequeño pero notorio "parón". Quitas el limitador de frames para comprobar que tu equipo puede ejecutar el juego incluso más allá del 100% de la velocidad. ¿Qué está pasando?

Las ralentizaciones cuando cargas nuevas áreas, efectos, modelos y más es lo que comúnmente se conoce como "Shader Compilation Stuttering", algo que a los usuarios y los desarrolladores no les gusta. Este problema ha sido parte de Dolphin desde el comienzo, pero sólo nos centramos en él desde hace poco.

Cuando los juegos raramente van bien, un pequeño "tirón" aquí y allá no es un gran problema. Pese a que la emulación se ha ido perfeccionando en muchos títulos, el stuttering se ha mantenido igual con el paso de los años. Desde que sacamos la versión de Dolphin 4.0, los usuarios se han dado cuenta aun más del problema del stuttering por la compilación de shaders. Aunque parte de esto fue debido al aumento de cálculos de íntegros matemáticos requeridos a la GPU, la verdadera causa fue que se notaba más este fallo tras haber solucionado muchos otros.

Hubo mucha frustración e incluso antipatía de los desarrolladores ante el stuttering por la compilación de shaders. Fue algo que se tildó de irreparable y provocó mucha ira y frustración en la comunidad. Irónicamente, odiamos elstuttering más que a nada, pero la pura locura que suponía abordar el problema era suficiente como para mantener a la mayoría de los desarrolladors alejados. A pesar de todo, algunos mantenían en privado un rayo de esperanza. Comenzó como una teoría que supuso ciento sino miles de horas de trabajo sólo para ver si era posible.

Esa esperanza es lo que impulsó un arduo viaje hacia algo aparentemente imposible. Un viaje que le llevaría durante dos años a varios ingenieros de GPU. Todo ello en un esfuerzo de emular toda la gama de flujos proto-programables de Gamecube/Wii sin caer víctima del tan odiado stuttering.

Este es el amanecer de la era de los Ubershaders.


El Problema

Las GPUs modernas son muy flexibles pero a su vez muy complicadas. Nos referimos como shaders a los diversos programas que ejecuta la GPU, del mismo modo que un programa de pc es ejecutado por la CPU. La tarea principal de los shaders es la de programar a la GPU para realizar efectos y técnicas de renderizado complejas.

Los desarrolladores escriben un shader sobre una API (OpenGL, Direct3D, Vulkan…) y el driver de vídeo la compila y la traduce a binario para que la GPU la ejecute. Todo esto conlleva su tiempo y potencia de procesamiento, por lo que los juegos de PC compilan los shaders cuando la tasa de frames no importa, eso se traduce en tiempos de carga ó más recientemente secuencias de carga (Dead Space y el elevador, Tomb Raider…).

Como cada configuración de PC es diferente, es imposible precompilar los shaders para cada GPU, así que la única manera es que el driver de vídeo lo haga en algún punto del juego.

Las consolas son muy distintas. Cuando conoces el hardware de manera precisa, y sabes que éste no va a cambiar, puedes precompilar los programas para la GPU e incluirlos en el disco, obteniendo así tiempos de carga más rápidos y un rendimiento óptimo. Esto es muy importante en consolas antiguas, las cuales no tienen la memoria suficiente o la capacidad de almacenar los shaders en memoria. Flipper, la GPU de Gamecube, es este último caso.

Imagen
Flipper, la GPU de Gamecube, es el chip más grande de la placa base


Mientras tiene su parte con funciones fijas, Flipper dispone de una unidad programable llamada TEV (Texture EnVironment, entorno de textura) que puede configurarse para realizar una gran variedad de efectos y técnicas de renderizado, tal y como hacen los pixel shaders. De hecho, la unidad TEV tiene capacidades similares al pixel shader de DirectX 8 de la Xbox. Incluso su arquitectura resultó tan flexible que permitió portarla a la GPU de Wii (Hollywood) con unas simples modificaciones.

Desafortunadamente, la unidad TEV está diseñada para que el juego demande un shader en el momento que lo necesite. No existe una precarga de la configuración de la unidad TEV porque no tiene memoria dedicada para ello.

Esta carga instantánea es la fuente de los problemas. Dolphin tiene que traducir cada configuración que cada juego manda a la GPU Flipper/Hollywood en un shader específico para que las GPUs actuales lo ejecute, y estos shaders tienen que ser ejecutados en el momento que el juego lo necesita, sin retardo o demora. Para lidiar con esta disparidad, la única opción de Dolphin es la de retardar el hilo de la CPU mientras que la GPU y el driver de vídeo realizan la compilación – básicamente pausando la emulación. Normalmente la compilación suele llevar un frame hasta que se ha completado, pero cuando le lleva más tiempo, el juego mostrará stuttering (parones o ralentizaciones) hasta que la compilación haya finalizado. Esto es el denominado shader compilation stuttering. Normalmente el stuttering solo conlleva caídas de unos pocos frames, pero en escenas con muchos efectos el stuttering puede traducirse en más de un segundo.

Imagen
Hasta que el caché de shader se haya creado, Metroid Prime 3 es un suplicio.


Al ser el primero en emular un sistema con una GPU tan programable a toda velocidad, Dolphin tuvo que apañárselas sólo para solucionar este problema. Implementamos el shader caching para que si alguna configuración ocurría una segunda vez no pararía la emulación, pero tener un caché completo de shaders para un juego llevaría horas, incluso un cambio de hardware, de drivers o incluso de versión de Dolphin podría invalidar esa caché y tener que empezar de nuevo. Durante años, parecía que no se podía hacer nada contra el stuttering provocado por la compilación de shaders, y muchos se preguntaban si esto tendría solución algún día…


Solucionando un problema imposible.

De todos los problemas restantes de Dolphin, el stuttering por la compilación de shaders era del que más se quejaban. Miraras en el tracker de problemas, medios sociales, o el IRC, este problema emergía constantemente. Con el paso de los años, la reacción ante el problema iba cambiado. Se suponía que no era un problema en sí, salvo de rendimiento. Hasta que en 2015 se aceptó formalmente como un bug en el tracker de problemas de Dolphin, y concienciarnos en ello.


La soluciones potenciales

Generar todos los shaders posibles

Dolphin es muy rápido generando los shaders que necesita, pero luego compilarlos es un problema. Si pudiéramos de alguna forma generar y compilar todos los shaders para cada única configuración, eso solucionaría el problema, ¿verdad? Desafortunadamente, esto es imposible.

Hay como 5.64 x 10^511 configuraciones potenciales sólo de la unidad TEV, y habría que hacer un shader de cada una para cada configuración única. Además, los vertex shaders son utilizados para emulador la semi-programable transformación por hardware y la unidad de Iluminado, lo que eleva aún más el número de combinaciones posibles.

ImagenComo referencia, hay 7.5 x 10^15 granos de arena en la Tierra.


Aunque fuéramos capaces de compilar todo esto, estos shaders sólo serían útiles para la versión de Dolphin con la que fueron generados. Actualizar a una nueva versión requeriría un nuevo set de shaders. Cambiar de tarjeta gráfica o de drivers podría significar recompilar todo de nuevo. Y todo ello suponiendo que el driver tenga un caché de bajo nivel, cosa que no todos los drivers tienen.


Predecir qué shaders necesita el juego

Si pudiéramos generar y compilar los shaders durante los tiempos de carga o donde fuera, no tendríamos stuttering en puntos importantes. Tratar de predecir lo que el juego quiere hacer no es factible para resolver el problema. Las implicaciones en implementación y rendimiento sobre tener a Dolphin “tratando de intuir”, ya fuera por fastforwarding o por la predicción de entradas tendría un coste demasiado grande como para ayudar.

Imagen


La predicción a ciegas tampoco funciona: un juego puede elegir ejecutar cualquier configuración cuando quiera sin avisar, y las configuraciones pasadas no dan pistas sobre las siguiente. La única manera de saber qué shader va a necesitar un juego sería ir a través del juego y descubrir cada configuración que podría desear.

Lo que nos lleva a la siguiente propuesta.

Compartir Shaders

Dolphin usa un objecto con “ID Único”, o “UID” para representar una configuración the la GPU emulada, y estos UIDs son convertidos en shaders y entragados al driver de vídeo para su compilación. Como los UIDs están antes de la compilación y no se han adaptado a ninguna GPU de PC específica, son compatibles con muchos ordenadores y pueden en teoría compartirse. Los usuarios se refieren a esto como “sharing shaders” y en teoría si los usuarios comparten los archivos UID, podrían compilar los shaders antes de tiempo y no tener stuttering. De hecho, el motor Vulkan ya tiene esta función para evitar problemas de sombreado en ciertos controladores.

Imagen


¿Entonces por qué no prosperó esta solución?

Dolphin se está mejorando constantemente, cualquier parche que fuera añadido puede hacer esos UIDs inservibles.

No todos los juegos serán preparados. Mientras los juegos más populares tendrán colección de UIDs completos, la gente que juegue a títulos raros no tendrá ningún soporte.

En las pruebas, hay muy poca coincidencia de UIDs entre juegos. The Legend of Zelda: Wind Waker y The Legend of Zelda: Twilight Princess comparten una pequeña parte (15%) de configuraciones, pero ambos se ejecutan en el mismo motor gráfico. La mayoría de los juegos tendrán aún menos en común entre ellos, así que compartir UIDs de los juegos más populares no ayudará al resto.

Los usuarios pueden perder varios UIDs. Que se pasen el juego al 100% no significa que obtengan todos los shaders del juego.

Los desarrolladores consideraron esta opción, pero construir la infraestructura para albergar y distribuir todos los UIDs provocó más desacuerdos que soluciones. Aunque se podía usar para mejorar el problema, no era una solución funcional en sí.


Compilación de shaders Asíncrona

Famosa por un fork, asynchronous shader compilation (compilación de shaders asíncrona, desde ahora ASC) es una solución creativa para el dilema de la compilación de shaders. Tino se fijó en el problema enfocándolo en cómo los juegos modernos manejaban este hecho teniendo que compilar dinámicamente los nuevos shaders – cuando pasas de un área a otra, algunas veces los objetos nuevos aparecen de repente cuando son cargados en pantalla. Se preguntó si podía hacer algo similar en un emulador y empezó rescribiendo cómo los shaders son manejados en su fork.

El concepto de ASC cambia la manera en la que Dolphin se comporta cuando no hay una caché de shaders para una configuración demandada a Flipper/Hollywood. En vez de pausar el juego y esperar a que el shader sea creado, simplemente se salta el renderizado del objeto. Esto significa que no hay pausas o stuttering, a cosa de que algunos objetos desaparecen durante un tiempo en pantalla hasta que el shader está listo.

Imagen


Esto funciona bien en muchos juegos. Dependiendo de cómo el motor del juego genera los objetos cuando dibuja el entorno, objetos que se van del campo de visión de la cámara, o sólo cubren unos pixels en pantalla todavía están por renderizar. En ese caso, saltarse el renderizado de esos objetos es casí imperceptible. Sin embargo, dependiendo del juego, esto puede resultar en “pop in” y objetos desaparecidos como decíamos anteriormente.

Imagen
Ignorar la compilación de shaders puede resultar en “pop in” y errores gráficos. Pero se mantiene suave.


Una de las cosas que se preguntaban los usuarios es por qué Dolphin no implementaba el ASC de Tino como una opción para combatir el stuttering de la compilación de shaders. Al final, se reducía en el hecho de que la gente que podrían haberlo implementado junto con otros desarrolladores estaban en contra de tomarla como una solución. Lo veían como un simple hack que podría causar falsos positivos en el tracker de problemas y provocar errores mayores durante el transcurso del proyecto. Estas preocupaciones fueron fundadas cuando te das cuenta de que algunos juegos necesitan renderizar los objetos en el mismo frame que lo piden. En este caso, las cabezas de los Miis son sólo renderizadas una vez en el framebuffer incorporado. Si la copia del EFB es olvidada por culpa del ASC, las cabezas de los Miis no se mostrarán hasta el final del juego o hasta que se generen.

Imagen
Un momento, eso no son gominolas…


A pesar de sus defectos, los usuarios del fork de Tino juran por ASC. A pesar de todo lo malo de los shaders asíncronos, ellos han solventado el problema del stuttering por la compilación de shaders a toda costa. Las desventajas eran demasiado grandes como para fusionar esta solución en Dolphin, pero sin duda esta solución hizo que la generación de shaders se considerara un gran problema. El trabajo de Tino dio a conocer cuántos usuarios se preocupaban por este problema, y motivó al equipo a buscar una solución más completa.


La Solución

Escribir un intérprete para el flujo de renderizado de Gamecube/Wii con los shaders y ejecutarlo en el tarjeta gráfica.

A veces, una de las mejores maneras de solventar un problema imposible es cambiar la perspectiva. No importa lo que se haya probado, No hay manera de compilar shaders específicos tan rápido como un juego puede cambiar las configuraciones.

Pero, ¿Y si no tenemos que centrarnos en los shaders específicos? Una idea loca nació para emular el flujo de renderizado en sí mismo con un intérprete que se ejecutara directamente en la GPU como un set de monstruosos shaders flexibles. Si compilamos esos shaders masivos al inicio del juego, cuando un juego configurara a Flipper/Hollywood para renderizar algo, estos “uber shaders”se podrían configurar por sí mismos y renderizarse sin necesidad de nuevos shaders. Teóricamente, esto solventaría los problemas de stuttering al prescindir de la compilación en su totalidad.

Esta idea es una locura, pero fue la primera idea que tuvo el potencial de solucionar por completo este problema imposible. La dificultad de esta solución vino de la cantidad absurda de trabajo y conocimiento necesarios que conllevaba pasa siquiera probarla. Para ponerla en perspectiva, incluso juntando a todos los desarrolladores que trabajan en Dolphin, solo dos o tres como mucho tienen los conocimientos necesarios para no sólo el hardware de Gamecube/Wii, sino también de las GPUs modernas, APIs, y los drivers para escribir, depurar y optimizar los shaders. Por no mencionar que ejecutar un intérprete como una gran cantidad de shaders no era una tarea sencilla para la GPU, y muchos temían que todo este trabajo ni siquiera tendría un buen rendimiento en las tarjetas gráficas de hoy en día.

Cientos, sino miles de horas de mentalmente agotador, repetitivo, además de difícil trabajo fueron necesarias sin garantías de éxito.

Hubo un primer intento en 2015, cuando phire llegó a estar tan frustrado con el stuttering en un nuevo y flamante PC que se propuso a diseñar un marco de trabajo para el Ubershaders. Aunque era consciente de las dificultades, parecía decidido a demostrar que Ubershaders era la solución para este viejo problema. phire fue completamente solo en un intento de enseñar a Dolphin cómo renderizar todo de nuevo.

Imagen
Ésto no es un filtro gráfico...


ImagenWow, hay muchas cosas mal aquí...


ImagenPor su simplicidad, SM64 fue uno de los primeros juegos en renderizar algo en Ubershaders.


Después de moldear la función durante más de un mes, se las arregló para conseguir el Pixel Ubershaders hasta el punto de que algunos juegos empezaron a funcionar. La sorpresa no fue que funcionara, sino que el prototipo de Ubershaders iba a toda velocidad. La primera reacción de phire fue algo así como, ¡Ost**s! Ya funciona a toda velocidad y admitió además que las GPUs no deberían ser capaces de ejecutar esto a velocidades jugables, pero lo hacen. A pesar de las pocas probabilidades que tenían, los prototipos demostraron que los Ubershaders podrían ser la solución al stuttering. Y así, siguió moldeando y comenzó a mejorar la precisión del Ubershaders, solucionar muchos errores e implementar nuevas características.

Imagen
Al principio, Ubershaders haría a los juegos parecer realidades distorsionadas jamás vistas.


Imagen
No llevó mucho hacer que las cosas fueran mejor.


Imagen
Antes de que lo supiéramos, Wind Waker era renderizado con leves errores.


Imagen
phire fue capaz de que Wind Waker se viera perfecto muy rápido. Desafortunadamente, otros juegos que usan más funciones seguían necesitando mucho más trabajo.


El esfuerzo de llevar a Ubershaders hasta aquí dejó a phire exhausto con el proyecto. Además de esto, phire tuvo que centrarse en una tonelada de trabajo de limpieza de otros proyectos para la versión 5.0 de Dolphin. Los retrasos pasaron factura y provocaron que phire no se preocupara más por Ubershaders, influenciado además por las preocupaciones sobre las limitaciones de los drivers y las APIs para llegar a una solución. A pesar de estar cerca del 90%, el 90% del proyecto quedaba por hacer, incluyendo algunas características clave:

  • Finalizar el Vertex Ubershaders.
  • Infraestructura/vincular Pixels y Vertex Ubershaders.
  • Solucionar problemas de rendimiento en OpenGL y Vulkan.
  • Limpieza de códigos, bugs, y hacer el renderizado idéntico a los shaders específicos.
  • Opciones en la GUI.
  • Opcional – Un modo Híbrido para GPUs integradas / menos potentes.

Verlos en la cúspide del trabajo era doloroso. Pero, no había ningún desarrollador capaz de trabajar en él con la voluntad de asumir un proyecto tan grande. Incluso aquellos que hubieran considerado trajabar en él no estaban preparados para asumir toda la limpieza de código, bugs y el trabajo de la infraestructura. Durante más de un años, Ubershaders decayó en los fondos de una gran lista de características que nunca fueron terminadas, y la esperanzo se desvanecía una vez más.


Ubershaders 2.0

El stuttering por la compilación de shaders es uno de los bugs con más quejas en Dolphin, así que después de que del desarrollo de Ubershaders parara, la gente no olvidó el problema. El hilo del foro de solicitudes siguió teniendo comentarios, e incluso fue mencionado en varios mensajes en los trackers de errores.

Ubershaders había sido la primera esperanza real de eliminar el stuttering, que arraigó en la gente durante meses. En todo caso, el paso del tiempo sólo alimentó el deseo de la comunidad por una solución. Tras muchas súplicas, plegarias y mucho chantaje coacción honesta, Stenzek a regañadientes tomó el mando del proyecto.

Antes de que Stenzek empezara a trabajar en el Ubershaders, el equipo tomó varias decisiones a favor del mantenimiento de los motores gráficos. Una de esas decisiones, buena o mala, fue la de eliminar el motor D3D12. A diferencia de D3D9, no fue debido a un proceso de depreciación; lo quitamos porque nadie lo iba a mantener.

Fue una decisión fortuita después de todo, con la eliminación de este backend además del cambio de rumbo y renacimiento del Ubershaders, cuando Stenzek estaba listo para darle un empujón. Como era el arquitecto del motor Vulkan de Dolphin, él ya estaba más que dispuesto a tomarse este trabajo extra para hacer funcional los Ubershaders en Vulkan.

Cuando Pixel y Vertex Ubershaders fueron finalmente juntados y listos para una ejecución, los testers lo probaron en los peores escenarios. Considerando que ninguna de las soluciones anteriores había funcionado en Metroid Prime 3, éste fue el primero en ser probado.

Imagen
Metroid Prime 3 fue uno de los únicos juegos en los que el stuttering causó que el juego no fuera jugable. ¡Hasta ahora!


Los primeros test del Ubershaders fueron un éxito rotundo, con el stuttering eliminado en D3D, y sólo unos extraños parones puntuales en OpenGL y Vulkan. El continuo trabajo en Ubershaders hizo que las cosas fueran a mejor en cada motor, con algunas excepciones que comentaremos más tarde. But, sólo ejecutar juegos en el Ubershaders no era el fin del juego; El uso de Ubershaders puro era un gran impacto en el rendimiento de la tarjeta gráfica. Si bien los requisitos de cada juego varían, la tarjeta gráfica se verá afectada en mayor medida cuanto más alta sea la resolución. A 1x de resolución interna (480p) la mayoría de las GPUs no tendrán problemas, con las últimas tarjetas gráficas podrás llegar a resoluciones 1080p con Ubershaders en modo Exclusivo sin impacto en el rendimiento. Desafortunadamente, muchos usuarios no tienen el hardware necesario para ejecutar Ubershaders a la resolución que ellos prefieren, lo que lleva a elegir entre resolución y rendimiento.

Imagen
Las gráficas integradas de Intel apenas pueden ejecutar shaders específicos de Dolphin a altas resoluciones y no tienen ninguna oportunidad contra Ubershaders.


Una gran porción de los usuarios de Dolphin están utilizando gráficas integradas. En nuestros tests, las soluciones integradas como mucho pueden llegar al 50% de velocidad con Ubershaders a 1x IR en un juego 3D. Los desarrolladores sentían que ignorar a un grupo tan grande de usuarios de Dolphin sería un error y haría de Ubershaders una victoria parcial. Así el trabajo continuó para dar una solución más robusta que curaría estos punts débiles del funcionamiento de una vez por todas.


Ubershaders en modo Híbrido

El Hybrid Mode Ubershaders (Ubershaders en modo Híbrido) es un matrimonio entre Ubershaders y ASC en una bella solución que hace las mejores partes de ambos sin ninguno de sus debilidades. Debido a que el modo Híbrido reduce notoriamente el coste de rendimiento de Ubershaders, suponemos que será el modo más utilizado.

Bajo el modo Híbrido, siempre que una nueva petición de configuración aparezca, Dolphin usará los shaders ya compilados por Ubershaders para al instante renderizar el efecto sin stuttering mientras que sigue compilandos el shader específico en segundo plano. Una vez que este último está hecho, Dolphin entonces pasará los objetos renderizados por Ubershaders a través de los nuevos shaders específicos generados.

Suponiendo que los drivers las APIs se comporten de la manera que queremos, esta solución es perfecta. Debido a que los Ubershaders sólo se ejecutan en una fracción de los objetos en una escena y sólo por frames a la vez, el golpe en rendimiento es casi nulo y se elimina el parpadeo. Desafortunadamente, los drivers y las APIs no son perfectas, limitando la efectividad del modo Híbrido en algunas configuraciones. Lo que nos lleva a…


El Salón de la vergüenza de API y Driver de Ubershaders

Los equipos de desarrollo de drivers de GPU tienen un trabajo duro exprimiendo tanta potencia como sea posible de sus productos a la vez que proporcionan una experiencia estable para sus usuarios. No queremos faltar al respeto a nadie que trabaje en estos drivers, pero uno de los obstáculos más grandes para este proyecto ha sido un ridículo número de peculiaridades en los drivers y APIs que forzaron soluciones y otros cambios en la funcionalidad.

Sacando esto a la luz, esperamos captar su atención. Quizás alguien fuera del proyecto nos puede llegar con una solución o al menos monitorizarla en caso de que una futura actualización de driver/API arregle el problema mencionado.


Generación de variantes de Shader

Los drivers pueden hacer cosas de manera que nosotros no esperamos ni podemos controlar. Cuando tenemos que generar un nuevo flujo para una diferente mezcla o estado profundo, algunos drivers no son lo suficientemente listos como para compartir los shaders entre flujos. Esto causará un pequeño parpadeo la primera vez que un nuevo modo de mezcla es usado. La mayor parte del tiempo las variantes que un juego usará son generadas durante los primeros minutos de juego, pero pueden seguir siendo frustrantes cuando buscas la perfección.

Por suerte, algunos drivers son los suficientemente listos como para compartir shaders entre flujos, como el driver Mesa, y no parece haber parpadeo adicional. Los demás drivers disponibles parecen sufrir algo de parpadeo durante la generación de variantes. Ya que nosotros actualmente no podemos hacer nada sobre esto, Esperamos que a medida que los drivers de Vulkan maduren, asumirán el comportamiento más favorable de Mesa.


Shader de NVIDIA bloqueado en OpenGL y Vulkan

Algunos usuarios han reportado que en OpenGL y Vulkan (en concreto en el modo Híbrido) hay un leve parpadeo cuando los shaders son compilados. Como no sabemos qué está mal exactamente, ya que esto no sucede en D3D, estamos casi seguros de que es alguna peculiaridad del driver de NVIDIA más que un fallo en cómo Dolphin maneja las cosas. Basándonos en nuestros tests, parece que es algo aparte de la generación de variantes.


La compilación de Shaders de NVIDIA en OpenGL y Vulkan son más lentas que en D3D.

Esto en particular es muy frustrante y no hay manera para nosotros de depurarlo. Estamos proporciando los mismos shaders a la GPU en OpenGL, Vulkan y D3D, sin embargo, D3D termina los shaders mucho más rápido que los otros dos motores. Esto significa que en una GTX760, sólo obtendrás 1x de resolución interna en algún juego bajo OpenGL o Vulkan, pero en D3D, serás capaz de alcanzar el doble o incluso el triple antes de apreciar ralentizaciones.

Dado que NVIDIA no nos permite desensamblar shaders a pesar de que a los fabricantes de GPUs de PC sí, no tenemos manera de depurar o darnos cuenta de por qué el código compilado es mucho más eficiente en D3D. Pensad en lo ridículo que suena: queremos hacer que Dolphin funcione mejor en NVIDIA y ellos no nos proporcionan las herramientas para tan siquiera intentarlo. Es una decisión desconcertante que esperamos sea rectificada en el futuro. Sin las herramientas de desensamblado de shaders proporcionadas por otros vendedores, reparar varios bugs habría sido mucho más difícil.

Lo triste es que las herramientas existen…si eres un gran estudio de videojuegos. Editado: NVIDIA nos informó de que la única herramienta de desensamblado de shaders disponible es de Direct3D 12 (bajo NDA*), y no la hay para otras APIs independientes del NDA. Esperemos que las herramientas para otras APIs estén disponibles en el futuro.
NDA: Non Disclosure Agreement, Acuerdo de no divulgación.


Drivers Vulkan de AMD siguen sin soportar caché de shaders

Durante la edición de este artículo, ¡nuestros deseos fueron respondidos! El driver Vulkan de AMD ahora soporta caché de shaders. Esto mejora gratamente lo que era una situación precaria con Ubershaders, ya que siginificaba que tendríamos que recompilar los Ubershaders en cada nuevo inicio. También mejora el parpadeo mencionado antes.


Los drivers gráficos de macOS son terribles

Como con cada excitante función, los usuarios de macOS estén esperando por el inevitable “pero en macOS…” y aquí está. El desfasado e ineficiente driver OpenGL 4.1 de macOS simplemente no es capaz de adoptar Ubershaders de ninguna manera. El modo Híbrido reducirá el parpadeo, pero, el modo Exclusivo es muy lento. Además, macOS siguen sin soportar caché de shaders bajo ningún driver.


Configuración recomendada para Ubershaders

Con todos problemas de drivers anteriores, no es una sorpresa que algunas tarjetas gráficas funcionen mejor en algunos motores y ajustes. Hemos descrito configuraciones recomendadas generales basadas en varias tarjetas de vídeo. Dependiendo de tu preferencia o tu tarjeta gráfica en particular, puedes desviarte de las recomendaciones. Daros cuenta de que cambiar ciertos ajustes mientras se ejecuta un juego, como per-pixel lighting (iluminación por píxel) y en nivel de anti-aliasing, requerirá compilar diferentes Ubershaders y pueden provocar una pausa larga mientras esto se realiza. Recordad además que Ubershaders requiere más potencia de GPU, así que los mismos ajustes requerirán una tarjeta gráfica más potente.

  • Intel en Windows
      - Usar D3D para el modo Híbrido. El modo Exclusivo funciona, pero las GPUs de Intel no son tan potentes actualmente como para ejecutarlo al 100% ni en resolución nativa.
      - El Driver genera variantes con OpenGL, o sea stuttering.
      - Vulkan sólo soporta Skylake+, y está demasiado roto como para usarlo hoy en día.

  • Intel en Linux
      - Usar Vulkan en modo Híbrido. El modo Exclusivo funcionará, pero no obtendrás velocidad total.
      - El driver Anv es fantástico y debería tener todos los beneficios de Ubershaders.
      - El driver i965 de Intel no comparte shaders OpenGL entre hilos, lo que se traduce en stuttering. El modo Exclusivo, aunque lento, funciona perfectamente pero el modo Híbrido dará stuttering.

    Imagen


  • AMD en Windows
      - Usa D3D en modo Híbrido.
      - Usa D3D o Vulkan en modo Exclusivo.
      - El driver OpenGL de AMD es lento en general.

  • AMD en Linux
      - Usa Vulkan para los modos Exclusivo o Híbrido.
      - Radv es muy parecido a anv y funciona muy bien.

    Imagen


  • NVIDIA en Windows
      -Usa D3D o OpenGL en modo Híbrido.
      - Usa D3D, OpenGL o Vulkan para el modo Exclusivo. Los Ubershaders de D3D tienden a ser más eficientes que OpenGL y Vulkan, dando mejor rendimiento en GPUs más antiguas.

  • NVIDIA en Linux
      - Usa OpenGL en modo Híbrido.
      - Usa OpenGL o Vulkan en modo Exclusivo. El rendimiento puede variar según qué motor sea más rápido para cada juego. Tener en cuenta que Vulkan dará stuttering mientras se generan las variantes de flujo, lo que puede causar uno o dos pequeñísimos parones al principio de la sesión de juego.

  • NVIDIA en Android
      - Usar OpenGL en modo Híbrido.
      - Usar OpenGL o Vulkan en modo Exclusivo. Esto puede llegar a velocidad completa en juegos muy básicos en la NVIDIA Shield TV.

    Imagen


  • PoweVR en Android
      - No recomendado. Mientras se ejecuta Ubershaders hay errores gráficos por los errores de compilación de shaders, pero se corrigen por sí solos en modo Híbrido así como los shaders específicos compilados. Demasiado lento como para ser útil en el hardware actual.

  • Adreno en Android
      - No recomendado. El modo Híbrido fallará y el modo Exclusivo mostrará errores gráfivos graves. Demasiado lento como para ser útil en el hardware actual.

  • Mali en Android
      - No se ha probado. Aun así podemos decir con seguridad que no funcionará bien.

Imagen



Conclusiones

Resulta extraño estar hablando del proyecto Ubershaders en pasado ahora mismo. Está completo, está fusionado y lo puedes usar ahora mismo en la última build de desarrollo. Aunque haya ciertos lastres aquí y allá, por fin tenemos una solución al stuttering por la compilación de shaders. Ubershaders será mejor con el paso de los años así como las tarjetas gráficas serán más potentes y el modo Exclusivo tendrá un mayor uso. El modo Híbrido también debería mejorar, así como los drivers de Vulkan maduren y otras peculiaridades sean solventadas. Y, por supuesto, seguiremos trabajando por nuestra parte mejorando la emulacion.

Aunque el stuttering por la compilación de shaders está solucionado, Dolphin sigue necesitando de un ordenador potente para emular el juego. Además, hay ciertos lastres en el JIT que pueden causar ralentizaciones. Actualmente, el JIT con soporte de branching de Dolphin tiene serios problemas en juegos que usan un JIT (como los juegos de la VC de Nintendo 64), causando un stuttering similares a los de la compilación de shaders, pero esto es otra cosa. Mientras esperamos solventar este problema, es probable que incluyamos una opción para desactivar el branching del JIT si no lo podemos corregir, por lo que los usuarios tendrán la opción de desactivarlo para títulos problemáticos.

Debido a este gigantesco artículo, no vamos a hacer un informe de progreso este mes. Tendremos los grandes cambios de julio en el informe de progreso de agosto. Va a ser de los grandes, así que ¡os esperamos! Hasta entonces, disfrutad.

Puedes continuar la conversación en el hilo del foro de este artículo.


Saludos.


Muchísimas gracias por la traducción compañero. Ahora lo entiendo todo mucho mejor ;)
naron escribió:
ppmeis escribió:Hola a tod@s:

Hace tiempo que no me paso por este hilo, pero este mes merece la pena pasarse. Ha habido una gran mejora en el emulador y es digno de mención ;).

Me he molestado en traducir el informe de progreso del mes de julio para que lo entienda todo el mundo interesado en este emulador. Os lo dejo en el spoiler a continuación:

Ubershaders: Una solución ridícula para un problema imposible.


Imagen


Cuando estás jugando a tu juego favorito en Dolphin con un ordenador potente, las cosas suelen funcionar bien. El juego va a toda velocidad, no hay errores gráficos, y puedes usar tu mando favorito si quieres. Aún así, cada vez que llegas a un área nueva, o cargas un nuevo efecto, hay un pequeño pero notorio "parón". Quitas el limitador de frames para comprobar que tu equipo puede ejecutar el juego incluso más allá del 100% de la velocidad. ¿Qué está pasando?

Las ralentizaciones cuando cargas nuevas áreas, efectos, modelos y más es lo que comúnmente se conoce como "Shader Compilation Stuttering", algo que a los usuarios y los desarrolladores no les gusta. Este problema ha sido parte de Dolphin desde el comienzo, pero sólo nos centramos en él desde hace poco.

Cuando los juegos raramente van bien, un pequeño "tirón" aquí y allá no es un gran problema. Pese a que la emulación se ha ido perfeccionando en muchos títulos, el stuttering se ha mantenido igual con el paso de los años. Desde que sacamos la versión de Dolphin 4.0, los usuarios se han dado cuenta aun más del problema del stuttering por la compilación de shaders. Aunque parte de esto fue debido al aumento de cálculos de íntegros matemáticos requeridos a la GPU, la verdadera causa fue que se notaba más este fallo tras haber solucionado muchos otros.

Hubo mucha frustración e incluso antipatía de los desarrolladores ante el stuttering por la compilación de shaders. Fue algo que se tildó de irreparable y provocó mucha ira y frustración en la comunidad. Irónicamente, odiamos elstuttering más que a nada, pero la pura locura que suponía abordar el problema era suficiente como para mantener a la mayoría de los desarrolladors alejados. A pesar de todo, algunos mantenían en privado un rayo de esperanza. Comenzó como una teoría que supuso ciento sino miles de horas de trabajo sólo para ver si era posible.

Esa esperanza es lo que impulsó un arduo viaje hacia algo aparentemente imposible. Un viaje que le llevaría durante dos años a varios ingenieros de GPU. Todo ello en un esfuerzo de emular toda la gama de flujos proto-programables de Gamecube/Wii sin caer víctima del tan odiado stuttering.

Este es el amanecer de la era de los Ubershaders.


El Problema

Las GPUs modernas son muy flexibles pero a su vez muy complicadas. Nos referimos como shaders a los diversos programas que ejecuta la GPU, del mismo modo que un programa de pc es ejecutado por la CPU. La tarea principal de los shaders es la de programar a la GPU para realizar efectos y técnicas de renderizado complejas.

Los desarrolladores escriben un shader sobre una API (OpenGL, Direct3D, Vulkan…) y el driver de vídeo la compila y la traduce a binario para que la GPU la ejecute. Todo esto conlleva su tiempo y potencia de procesamiento, por lo que los juegos de PC compilan los shaders cuando la tasa de frames no importa, eso se traduce en tiempos de carga ó más recientemente secuencias de carga (Dead Space y el elevador, Tomb Raider…).

Como cada configuración de PC es diferente, es imposible precompilar los shaders para cada GPU, así que la única manera es que el driver de vídeo lo haga en algún punto del juego.

Las consolas son muy distintas. Cuando conoces el hardware de manera precisa, y sabes que éste no va a cambiar, puedes precompilar los programas para la GPU e incluirlos en el disco, obteniendo así tiempos de carga más rápidos y un rendimiento óptimo. Esto es muy importante en consolas antiguas, las cuales no tienen la memoria suficiente o la capacidad de almacenar los shaders en memoria. Flipper, la GPU de Gamecube, es este último caso.

Imagen
Flipper, la GPU de Gamecube, es el chip más grande de la placa base


Mientras tiene su parte con funciones fijas, Flipper dispone de una unidad programable llamada TEV (Texture EnVironment, entorno de textura) que puede configurarse para realizar una gran variedad de efectos y técnicas de renderizado, tal y como hacen los pixel shaders. De hecho, la unidad TEV tiene capacidades similares al pixel shader de DirectX 8 de la Xbox. Incluso su arquitectura resultó tan flexible que permitió portarla a la GPU de Wii (Hollywood) con unas simples modificaciones.

Desafortunadamente, la unidad TEV está diseñada para que el juego demande un shader en el momento que lo necesite. No existe una precarga de la configuración de la unidad TEV porque no tiene memoria dedicada para ello.

Esta carga instantánea es la fuente de los problemas. Dolphin tiene que traducir cada configuración que cada juego manda a la GPU Flipper/Hollywood en un shader específico para que las GPUs actuales lo ejecute, y estos shaders tienen que ser ejecutados en el momento que el juego lo necesita, sin retardo o demora. Para lidiar con esta disparidad, la única opción de Dolphin es la de retardar el hilo de la CPU mientras que la GPU y el driver de vídeo realizan la compilación – básicamente pausando la emulación. Normalmente la compilación suele llevar un frame hasta que se ha completado, pero cuando le lleva más tiempo, el juego mostrará stuttering (parones o ralentizaciones) hasta que la compilación haya finalizado. Esto es el denominado shader compilation stuttering. Normalmente el stuttering solo conlleva caídas de unos pocos frames, pero en escenas con muchos efectos el stuttering puede traducirse en más de un segundo.

Imagen
Hasta que el caché de shader se haya creado, Metroid Prime 3 es un suplicio.


Al ser el primero en emular un sistema con una GPU tan programable a toda velocidad, Dolphin tuvo que apañárselas sólo para solucionar este problema. Implementamos el shader caching para que si alguna configuración ocurría una segunda vez no pararía la emulación, pero tener un caché completo de shaders para un juego llevaría horas, incluso un cambio de hardware, de drivers o incluso de versión de Dolphin podría invalidar esa caché y tener que empezar de nuevo. Durante años, parecía que no se podía hacer nada contra el stuttering provocado por la compilación de shaders, y muchos se preguntaban si esto tendría solución algún día…


Solucionando un problema imposible.

De todos los problemas restantes de Dolphin, el stuttering por la compilación de shaders era del que más se quejaban. Miraras en el tracker de problemas, medios sociales, o el IRC, este problema emergía constantemente. Con el paso de los años, la reacción ante el problema iba cambiado. Se suponía que no era un problema en sí, salvo de rendimiento. Hasta que en 2015 se aceptó formalmente como un bug en el tracker de problemas de Dolphin, y concienciarnos en ello.


La soluciones potenciales

Generar todos los shaders posibles

Dolphin es muy rápido generando los shaders que necesita, pero luego compilarlos es un problema. Si pudiéramos de alguna forma generar y compilar todos los shaders para cada única configuración, eso solucionaría el problema, ¿verdad? Desafortunadamente, esto es imposible.

Hay como 5.64 x 10^511 configuraciones potenciales sólo de la unidad TEV, y habría que hacer un shader de cada una para cada configuración única. Además, los vertex shaders son utilizados para emulador la semi-programable transformación por hardware y la unidad de Iluminado, lo que eleva aún más el número de combinaciones posibles.

ImagenComo referencia, hay 7.5 x 10^15 granos de arena en la Tierra.


Aunque fuéramos capaces de compilar todo esto, estos shaders sólo serían útiles para la versión de Dolphin con la que fueron generados. Actualizar a una nueva versión requeriría un nuevo set de shaders. Cambiar de tarjeta gráfica o de drivers podría significar recompilar todo de nuevo. Y todo ello suponiendo que el driver tenga un caché de bajo nivel, cosa que no todos los drivers tienen.


Predecir qué shaders necesita el juego

Si pudiéramos generar y compilar los shaders durante los tiempos de carga o donde fuera, no tendríamos stuttering en puntos importantes. Tratar de predecir lo que el juego quiere hacer no es factible para resolver el problema. Las implicaciones en implementación y rendimiento sobre tener a Dolphin “tratando de intuir”, ya fuera por fastforwarding o por la predicción de entradas tendría un coste demasiado grande como para ayudar.

Imagen


La predicción a ciegas tampoco funciona: un juego puede elegir ejecutar cualquier configuración cuando quiera sin avisar, y las configuraciones pasadas no dan pistas sobre las siguiente. La única manera de saber qué shader va a necesitar un juego sería ir a través del juego y descubrir cada configuración que podría desear.

Lo que nos lleva a la siguiente propuesta.

Compartir Shaders

Dolphin usa un objecto con “ID Único”, o “UID” para representar una configuración the la GPU emulada, y estos UIDs son convertidos en shaders y entragados al driver de vídeo para su compilación. Como los UIDs están antes de la compilación y no se han adaptado a ninguna GPU de PC específica, son compatibles con muchos ordenadores y pueden en teoría compartirse. Los usuarios se refieren a esto como “sharing shaders” y en teoría si los usuarios comparten los archivos UID, podrían compilar los shaders antes de tiempo y no tener stuttering. De hecho, el motor Vulkan ya tiene esta función para evitar problemas de sombreado en ciertos controladores.

Imagen


¿Entonces por qué no prosperó esta solución?

Dolphin se está mejorando constantemente, cualquier parche que fuera añadido puede hacer esos UIDs inservibles.

No todos los juegos serán preparados. Mientras los juegos más populares tendrán colección de UIDs completos, la gente que juegue a títulos raros no tendrá ningún soporte.

En las pruebas, hay muy poca coincidencia de UIDs entre juegos. The Legend of Zelda: Wind Waker y The Legend of Zelda: Twilight Princess comparten una pequeña parte (15%) de configuraciones, pero ambos se ejecutan en el mismo motor gráfico. La mayoría de los juegos tendrán aún menos en común entre ellos, así que compartir UIDs de los juegos más populares no ayudará al resto.

Los usuarios pueden perder varios UIDs. Que se pasen el juego al 100% no significa que obtengan todos los shaders del juego.

Los desarrolladores consideraron esta opción, pero construir la infraestructura para albergar y distribuir todos los UIDs provocó más desacuerdos que soluciones. Aunque se podía usar para mejorar el problema, no era una solución funcional en sí.


Compilación de shaders Asíncrona

Famosa por un fork, asynchronous shader compilation (compilación de shaders asíncrona, desde ahora ASC) es una solución creativa para el dilema de la compilación de shaders. Tino se fijó en el problema enfocándolo en cómo los juegos modernos manejaban este hecho teniendo que compilar dinámicamente los nuevos shaders – cuando pasas de un área a otra, algunas veces los objetos nuevos aparecen de repente cuando son cargados en pantalla. Se preguntó si podía hacer algo similar en un emulador y empezó rescribiendo cómo los shaders son manejados en su fork.

El concepto de ASC cambia la manera en la que Dolphin se comporta cuando no hay una caché de shaders para una configuración demandada a Flipper/Hollywood. En vez de pausar el juego y esperar a que el shader sea creado, simplemente se salta el renderizado del objeto. Esto significa que no hay pausas o stuttering, a cosa de que algunos objetos desaparecen durante un tiempo en pantalla hasta que el shader está listo.

Imagen


Esto funciona bien en muchos juegos. Dependiendo de cómo el motor del juego genera los objetos cuando dibuja el entorno, objetos que se van del campo de visión de la cámara, o sólo cubren unos pixels en pantalla todavía están por renderizar. En ese caso, saltarse el renderizado de esos objetos es casí imperceptible. Sin embargo, dependiendo del juego, esto puede resultar en “pop in” y objetos desaparecidos como decíamos anteriormente.

Imagen
Ignorar la compilación de shaders puede resultar en “pop in” y errores gráficos. Pero se mantiene suave.


Una de las cosas que se preguntaban los usuarios es por qué Dolphin no implementaba el ASC de Tino como una opción para combatir el stuttering de la compilación de shaders. Al final, se reducía en el hecho de que la gente que podrían haberlo implementado junto con otros desarrolladores estaban en contra de tomarla como una solución. Lo veían como un simple hack que podría causar falsos positivos en el tracker de problemas y provocar errores mayores durante el transcurso del proyecto. Estas preocupaciones fueron fundadas cuando te das cuenta de que algunos juegos necesitan renderizar los objetos en el mismo frame que lo piden. En este caso, las cabezas de los Miis son sólo renderizadas una vez en el framebuffer incorporado. Si la copia del EFB es olvidada por culpa del ASC, las cabezas de los Miis no se mostrarán hasta el final del juego o hasta que se generen.

Imagen
Un momento, eso no son gominolas…


A pesar de sus defectos, los usuarios del fork de Tino juran por ASC. A pesar de todo lo malo de los shaders asíncronos, ellos han solventado el problema del stuttering por la compilación de shaders a toda costa. Las desventajas eran demasiado grandes como para fusionar esta solución en Dolphin, pero sin duda esta solución hizo que la generación de shaders se considerara un gran problema. El trabajo de Tino dio a conocer cuántos usuarios se preocupaban por este problema, y motivó al equipo a buscar una solución más completa.


La Solución

Escribir un intérprete para el flujo de renderizado de Gamecube/Wii con los shaders y ejecutarlo en el tarjeta gráfica.

A veces, una de las mejores maneras de solventar un problema imposible es cambiar la perspectiva. No importa lo que se haya probado, No hay manera de compilar shaders específicos tan rápido como un juego puede cambiar las configuraciones.

Pero, ¿Y si no tenemos que centrarnos en los shaders específicos? Una idea loca nació para emular el flujo de renderizado en sí mismo con un intérprete que se ejecutara directamente en la GPU como un set de monstruosos shaders flexibles. Si compilamos esos shaders masivos al inicio del juego, cuando un juego configurara a Flipper/Hollywood para renderizar algo, estos “uber shaders”se podrían configurar por sí mismos y renderizarse sin necesidad de nuevos shaders. Teóricamente, esto solventaría los problemas de stuttering al prescindir de la compilación en su totalidad.

Esta idea es una locura, pero fue la primera idea que tuvo el potencial de solucionar por completo este problema imposible. La dificultad de esta solución vino de la cantidad absurda de trabajo y conocimiento necesarios que conllevaba pasa siquiera probarla. Para ponerla en perspectiva, incluso juntando a todos los desarrolladores que trabajan en Dolphin, solo dos o tres como mucho tienen los conocimientos necesarios para no sólo el hardware de Gamecube/Wii, sino también de las GPUs modernas, APIs, y los drivers para escribir, depurar y optimizar los shaders. Por no mencionar que ejecutar un intérprete como una gran cantidad de shaders no era una tarea sencilla para la GPU, y muchos temían que todo este trabajo ni siquiera tendría un buen rendimiento en las tarjetas gráficas de hoy en día.

Cientos, sino miles de horas de mentalmente agotador, repetitivo, además de difícil trabajo fueron necesarias sin garantías de éxito.

Hubo un primer intento en 2015, cuando phire llegó a estar tan frustrado con el stuttering en un nuevo y flamante PC que se propuso a diseñar un marco de trabajo para el Ubershaders. Aunque era consciente de las dificultades, parecía decidido a demostrar que Ubershaders era la solución para este viejo problema. phire fue completamente solo en un intento de enseñar a Dolphin cómo renderizar todo de nuevo.

Imagen
Ésto no es un filtro gráfico...


ImagenWow, hay muchas cosas mal aquí...


ImagenPor su simplicidad, SM64 fue uno de los primeros juegos en renderizar algo en Ubershaders.


Después de moldear la función durante más de un mes, se las arregló para conseguir el Pixel Ubershaders hasta el punto de que algunos juegos empezaron a funcionar. La sorpresa no fue que funcionara, sino que el prototipo de Ubershaders iba a toda velocidad. La primera reacción de phire fue algo así como, ¡Ost**s! Ya funciona a toda velocidad y admitió además que las GPUs no deberían ser capaces de ejecutar esto a velocidades jugables, pero lo hacen. A pesar de las pocas probabilidades que tenían, los prototipos demostraron que los Ubershaders podrían ser la solución al stuttering. Y así, siguió moldeando y comenzó a mejorar la precisión del Ubershaders, solucionar muchos errores e implementar nuevas características.

Imagen
Al principio, Ubershaders haría a los juegos parecer realidades distorsionadas jamás vistas.


Imagen
No llevó mucho hacer que las cosas fueran mejor.


Imagen
Antes de que lo supiéramos, Wind Waker era renderizado con leves errores.


Imagen
phire fue capaz de que Wind Waker se viera perfecto muy rápido. Desafortunadamente, otros juegos que usan más funciones seguían necesitando mucho más trabajo.


El esfuerzo de llevar a Ubershaders hasta aquí dejó a phire exhausto con el proyecto. Además de esto, phire tuvo que centrarse en una tonelada de trabajo de limpieza de otros proyectos para la versión 5.0 de Dolphin. Los retrasos pasaron factura y provocaron que phire no se preocupara más por Ubershaders, influenciado además por las preocupaciones sobre las limitaciones de los drivers y las APIs para llegar a una solución. A pesar de estar cerca del 90%, el 90% del proyecto quedaba por hacer, incluyendo algunas características clave:

  • Finalizar el Vertex Ubershaders.
  • Infraestructura/vincular Pixels y Vertex Ubershaders.
  • Solucionar problemas de rendimiento en OpenGL y Vulkan.
  • Limpieza de códigos, bugs, y hacer el renderizado idéntico a los shaders específicos.
  • Opciones en la GUI.
  • Opcional – Un modo Híbrido para GPUs integradas / menos potentes.

Verlos en la cúspide del trabajo era doloroso. Pero, no había ningún desarrollador capaz de trabajar en él con la voluntad de asumir un proyecto tan grande. Incluso aquellos que hubieran considerado trajabar en él no estaban preparados para asumir toda la limpieza de código, bugs y el trabajo de la infraestructura. Durante más de un años, Ubershaders decayó en los fondos de una gran lista de características que nunca fueron terminadas, y la esperanzo se desvanecía una vez más.


Ubershaders 2.0

El stuttering por la compilación de shaders es uno de los bugs con más quejas en Dolphin, así que después de que del desarrollo de Ubershaders parara, la gente no olvidó el problema. El hilo del foro de solicitudes siguió teniendo comentarios, e incluso fue mencionado en varios mensajes en los trackers de errores.

Ubershaders había sido la primera esperanza real de eliminar el stuttering, que arraigó en la gente durante meses. En todo caso, el paso del tiempo sólo alimentó el deseo de la comunidad por una solución. Tras muchas súplicas, plegarias y mucho chantaje coacción honesta, Stenzek a regañadientes tomó el mando del proyecto.

Antes de que Stenzek empezara a trabajar en el Ubershaders, el equipo tomó varias decisiones a favor del mantenimiento de los motores gráficos. Una de esas decisiones, buena o mala, fue la de eliminar el motor D3D12. A diferencia de D3D9, no fue debido a un proceso de depreciación; lo quitamos porque nadie lo iba a mantener.

Fue una decisión fortuita después de todo, con la eliminación de este backend además del cambio de rumbo y renacimiento del Ubershaders, cuando Stenzek estaba listo para darle un empujón. Como era el arquitecto del motor Vulkan de Dolphin, él ya estaba más que dispuesto a tomarse este trabajo extra para hacer funcional los Ubershaders en Vulkan.

Cuando Pixel y Vertex Ubershaders fueron finalmente juntados y listos para una ejecución, los testers lo probaron en los peores escenarios. Considerando que ninguna de las soluciones anteriores había funcionado en Metroid Prime 3, éste fue el primero en ser probado.

Imagen
Metroid Prime 3 fue uno de los únicos juegos en los que el stuttering causó que el juego no fuera jugable. ¡Hasta ahora!


Los primeros test del Ubershaders fueron un éxito rotundo, con el stuttering eliminado en D3D, y sólo unos extraños parones puntuales en OpenGL y Vulkan. El continuo trabajo en Ubershaders hizo que las cosas fueran a mejor en cada motor, con algunas excepciones que comentaremos más tarde. But, sólo ejecutar juegos en el Ubershaders no era el fin del juego; El uso de Ubershaders puro era un gran impacto en el rendimiento de la tarjeta gráfica. Si bien los requisitos de cada juego varían, la tarjeta gráfica se verá afectada en mayor medida cuanto más alta sea la resolución. A 1x de resolución interna (480p) la mayoría de las GPUs no tendrán problemas, con las últimas tarjetas gráficas podrás llegar a resoluciones 1080p con Ubershaders en modo Exclusivo sin impacto en el rendimiento. Desafortunadamente, muchos usuarios no tienen el hardware necesario para ejecutar Ubershaders a la resolución que ellos prefieren, lo que lleva a elegir entre resolución y rendimiento.

Imagen
Las gráficas integradas de Intel apenas pueden ejecutar shaders específicos de Dolphin a altas resoluciones y no tienen ninguna oportunidad contra Ubershaders.


Una gran porción de los usuarios de Dolphin están utilizando gráficas integradas. En nuestros tests, las soluciones integradas como mucho pueden llegar al 50% de velocidad con Ubershaders a 1x IR en un juego 3D. Los desarrolladores sentían que ignorar a un grupo tan grande de usuarios de Dolphin sería un error y haría de Ubershaders una victoria parcial. Así el trabajo continuó para dar una solución más robusta que curaría estos punts débiles del funcionamiento de una vez por todas.


Ubershaders en modo Híbrido

El Hybrid Mode Ubershaders (Ubershaders en modo Híbrido) es un matrimonio entre Ubershaders y ASC en una bella solución que hace las mejores partes de ambos sin ninguno de sus debilidades. Debido a que el modo Híbrido reduce notoriamente el coste de rendimiento de Ubershaders, suponemos que será el modo más utilizado.

Bajo el modo Híbrido, siempre que una nueva petición de configuración aparezca, Dolphin usará los shaders ya compilados por Ubershaders para al instante renderizar el efecto sin stuttering mientras que sigue compilandos el shader específico en segundo plano. Una vez que este último está hecho, Dolphin entonces pasará los objetos renderizados por Ubershaders a través de los nuevos shaders específicos generados.

Suponiendo que los drivers las APIs se comporten de la manera que queremos, esta solución es perfecta. Debido a que los Ubershaders sólo se ejecutan en una fracción de los objetos en una escena y sólo por frames a la vez, el golpe en rendimiento es casi nulo y se elimina el parpadeo. Desafortunadamente, los drivers y las APIs no son perfectas, limitando la efectividad del modo Híbrido en algunas configuraciones. Lo que nos lleva a…


El Salón de la vergüenza de API y Driver de Ubershaders

Los equipos de desarrollo de drivers de GPU tienen un trabajo duro exprimiendo tanta potencia como sea posible de sus productos a la vez que proporcionan una experiencia estable para sus usuarios. No queremos faltar al respeto a nadie que trabaje en estos drivers, pero uno de los obstáculos más grandes para este proyecto ha sido un ridículo número de peculiaridades en los drivers y APIs que forzaron soluciones y otros cambios en la funcionalidad.

Sacando esto a la luz, esperamos captar su atención. Quizás alguien fuera del proyecto nos puede llegar con una solución o al menos monitorizarla en caso de que una futura actualización de driver/API arregle el problema mencionado.


Generación de variantes de Shader

Los drivers pueden hacer cosas de manera que nosotros no esperamos ni podemos controlar. Cuando tenemos que generar un nuevo flujo para una diferente mezcla o estado profundo, algunos drivers no son lo suficientemente listos como para compartir los shaders entre flujos. Esto causará un pequeño parpadeo la primera vez que un nuevo modo de mezcla es usado. La mayor parte del tiempo las variantes que un juego usará son generadas durante los primeros minutos de juego, pero pueden seguir siendo frustrantes cuando buscas la perfección.

Por suerte, algunos drivers son los suficientemente listos como para compartir shaders entre flujos, como el driver Mesa, y no parece haber parpadeo adicional. Los demás drivers disponibles parecen sufrir algo de parpadeo durante la generación de variantes. Ya que nosotros actualmente no podemos hacer nada sobre esto, Esperamos que a medida que los drivers de Vulkan maduren, asumirán el comportamiento más favorable de Mesa.


Shader de NVIDIA bloqueado en OpenGL y Vulkan

Algunos usuarios han reportado que en OpenGL y Vulkan (en concreto en el modo Híbrido) hay un leve parpadeo cuando los shaders son compilados. Como no sabemos qué está mal exactamente, ya que esto no sucede en D3D, estamos casi seguros de que es alguna peculiaridad del driver de NVIDIA más que un fallo en cómo Dolphin maneja las cosas. Basándonos en nuestros tests, parece que es algo aparte de la generación de variantes.


La compilación de Shaders de NVIDIA en OpenGL y Vulkan son más lentas que en D3D.

Esto en particular es muy frustrante y no hay manera para nosotros de depurarlo. Estamos proporciando los mismos shaders a la GPU en OpenGL, Vulkan y D3D, sin embargo, D3D termina los shaders mucho más rápido que los otros dos motores. Esto significa que en una GTX760, sólo obtendrás 1x de resolución interna en algún juego bajo OpenGL o Vulkan, pero en D3D, serás capaz de alcanzar el doble o incluso el triple antes de apreciar ralentizaciones.

Dado que NVIDIA no nos permite desensamblar shaders a pesar de que a los fabricantes de GPUs de PC sí, no tenemos manera de depurar o darnos cuenta de por qué el código compilado es mucho más eficiente en D3D. Pensad en lo ridículo que suena: queremos hacer que Dolphin funcione mejor en NVIDIA y ellos no nos proporcionan las herramientas para tan siquiera intentarlo. Es una decisión desconcertante que esperamos sea rectificada en el futuro. Sin las herramientas de desensamblado de shaders proporcionadas por otros vendedores, reparar varios bugs habría sido mucho más difícil.

Lo triste es que las herramientas existen…si eres un gran estudio de videojuegos. Editado: NVIDIA nos informó de que la única herramienta de desensamblado de shaders disponible es de Direct3D 12 (bajo NDA*), y no la hay para otras APIs independientes del NDA. Esperemos que las herramientas para otras APIs estén disponibles en el futuro.
NDA: Non Disclosure Agreement, Acuerdo de no divulgación.


Drivers Vulkan de AMD siguen sin soportar caché de shaders

Durante la edición de este artículo, ¡nuestros deseos fueron respondidos! El driver Vulkan de AMD ahora soporta caché de shaders. Esto mejora gratamente lo que era una situación precaria con Ubershaders, ya que siginificaba que tendríamos que recompilar los Ubershaders en cada nuevo inicio. También mejora el parpadeo mencionado antes.


Los drivers gráficos de macOS son terribles

Como con cada excitante función, los usuarios de macOS estén esperando por el inevitable “pero en macOS…” y aquí está. El desfasado e ineficiente driver OpenGL 4.1 de macOS simplemente no es capaz de adoptar Ubershaders de ninguna manera. El modo Híbrido reducirá el parpadeo, pero, el modo Exclusivo es muy lento. Además, macOS siguen sin soportar caché de shaders bajo ningún driver.


Configuración recomendada para Ubershaders

Con todos problemas de drivers anteriores, no es una sorpresa que algunas tarjetas gráficas funcionen mejor en algunos motores y ajustes. Hemos descrito configuraciones recomendadas generales basadas en varias tarjetas de vídeo. Dependiendo de tu preferencia o tu tarjeta gráfica en particular, puedes desviarte de las recomendaciones. Daros cuenta de que cambiar ciertos ajustes mientras se ejecuta un juego, como per-pixel lighting (iluminación por píxel) y en nivel de anti-aliasing, requerirá compilar diferentes Ubershaders y pueden provocar una pausa larga mientras esto se realiza. Recordad además que Ubershaders requiere más potencia de GPU, así que los mismos ajustes requerirán una tarjeta gráfica más potente.

  • Intel en Windows
      - Usar D3D para el modo Híbrido. El modo Exclusivo funciona, pero las GPUs de Intel no son tan potentes actualmente como para ejecutarlo al 100% ni en resolución nativa.
      - El Driver genera variantes con OpenGL, o sea stuttering.
      - Vulkan sólo soporta Skylake+, y está demasiado roto como para usarlo hoy en día.

  • Intel en Linux
      - Usar Vulkan en modo Híbrido. El modo Exclusivo funcionará, pero no obtendrás velocidad total.
      - El driver Anv es fantástico y debería tener todos los beneficios de Ubershaders.
      - El driver i965 de Intel no comparte shaders OpenGL entre hilos, lo que se traduce en stuttering. El modo Exclusivo, aunque lento, funciona perfectamente pero el modo Híbrido dará stuttering.

    Imagen


  • AMD en Windows
      - Usa D3D en modo Híbrido.
      - Usa D3D o Vulkan en modo Exclusivo.
      - El driver OpenGL de AMD es lento en general.

  • AMD en Linux
      - Usa Vulkan para los modos Exclusivo o Híbrido.
      - Radv es muy parecido a anv y funciona muy bien.

    Imagen


  • NVIDIA en Windows
      -Usa D3D o OpenGL en modo Híbrido.
      - Usa D3D, OpenGL o Vulkan para el modo Exclusivo. Los Ubershaders de D3D tienden a ser más eficientes que OpenGL y Vulkan, dando mejor rendimiento en GPUs más antiguas.

  • NVIDIA en Linux
      - Usa OpenGL en modo Híbrido.
      - Usa OpenGL o Vulkan en modo Exclusivo. El rendimiento puede variar según qué motor sea más rápido para cada juego. Tener en cuenta que Vulkan dará stuttering mientras se generan las variantes de flujo, lo que puede causar uno o dos pequeñísimos parones al principio de la sesión de juego.

  • NVIDIA en Android
      - Usar OpenGL en modo Híbrido.
      - Usar OpenGL o Vulkan en modo Exclusivo. Esto puede llegar a velocidad completa en juegos muy básicos en la NVIDIA Shield TV.

    Imagen


  • PoweVR en Android
      - No recomendado. Mientras se ejecuta Ubershaders hay errores gráficos por los errores de compilación de shaders, pero se corrigen por sí solos en modo Híbrido así como los shaders específicos compilados. Demasiado lento como para ser útil en el hardware actual.

  • Adreno en Android
      - No recomendado. El modo Híbrido fallará y el modo Exclusivo mostrará errores gráfivos graves. Demasiado lento como para ser útil en el hardware actual.

  • Mali en Android
      - No se ha probado. Aun así podemos decir con seguridad que no funcionará bien.

Imagen



Conclusiones

Resulta extraño estar hablando del proyecto Ubershaders en pasado ahora mismo. Está completo, está fusionado y lo puedes usar ahora mismo en la última build de desarrollo. Aunque haya ciertos lastres aquí y allá, por fin tenemos una solución al stuttering por la compilación de shaders. Ubershaders será mejor con el paso de los años así como las tarjetas gráficas serán más potentes y el modo Exclusivo tendrá un mayor uso. El modo Híbrido también debería mejorar, así como los drivers de Vulkan maduren y otras peculiaridades sean solventadas. Y, por supuesto, seguiremos trabajando por nuestra parte mejorando la emulacion.

Aunque el stuttering por la compilación de shaders está solucionado, Dolphin sigue necesitando de un ordenador potente para emular el juego. Además, hay ciertos lastres en el JIT que pueden causar ralentizaciones. Actualmente, el JIT con soporte de branching de Dolphin tiene serios problemas en juegos que usan un JIT (como los juegos de la VC de Nintendo 64), causando un stuttering similares a los de la compilación de shaders, pero esto es otra cosa. Mientras esperamos solventar este problema, es probable que incluyamos una opción para desactivar el branching del JIT si no lo podemos corregir, por lo que los usuarios tendrán la opción de desactivarlo para títulos problemáticos.

Debido a este gigantesco artículo, no vamos a hacer un informe de progreso este mes. Tendremos los grandes cambios de julio en el informe de progreso de agosto. Va a ser de los grandes, así que ¡os esperamos! Hasta entonces, disfrutad.

Puedes continuar la conversación en el hilo del foro de este artículo.


Saludos.


Muchísimas gracias por la traducción compañero. Ahora lo entiendo todo mucho mejor ;)


+1 por aquí.

Muchísimas gracias por el currazo que te has pegado con la traducción
No hay que darlas .

Saludos.
¿Hay alguna manera de jugar un juego 4:3 en 16:9 sin que se vea estirado? Me pasa con zelda twilight princess, si fuerzo el 16:9 se me ve todo estirado y en 4:3 es muy incómodo con las bandas negras que ocupan medio monitor.
@carokix Tienes que activar el hack de pantalla panorámica para que te muestre 16:9 reales ya que sino tal y como dices sale estirado.

Saludos
Raugo escribió:@carokix Tienes que activar el hack de pantalla panorámica para que te muestre 16:9 reales ya que sino tal y como dices sale estirado.

Saludos


Ahora si! gracias [beer]
Hola que tal?

Veo que hay movimiento por aqui!
Ayer me bajé la ultima version de dolohin ishiiruka, y los juegos me funcionan sobre los 50..60fps a resolucion interna x2.

Pero tengo un problema. Jugando con esta configuración al new super mario bros wii, no me aparece el suelo. Lo pongo a resolución nativa y vuelve a aparecer. Me pasé unas dos horas y no logré encontrar solución.

Mi pc:

Intel xeon x5460
4gb ram
Nvidia gt730 2gb gddr5


Gracias!
Buenas, estoy probando el dolphin y tengo un problema. El caso es que puedo jugar tanto wind waker, como metal gear twin snakes, Mario kart wii, etc de maravilla, sin caídas de fps. Pero luego juego a Zelda collector edition y pongo el majoras mask y no hay manera de jugarlo, en ciudad reloj los fps están en 13-14 cuando deberían estar en 19-20. Falta de potencia no será porque juegos más potentes como los que he dicho antes los juego sin problemas. Alguna solución?
Tengo Ryzen 5 1600, gtx 560 ti y 8 gb de ram
Hola! Buenas tardes a ver si alguien me puede ayudar, se lo agradecería mucho.
Tengo un macbook pro 15 de mediados de 2012 con un procesador 2,7 GHz Intel Core i7,16 GB de ram 1600 MHz DDR3 y dos gráficas NVIDIA GeForce GT 650M 1024 MB e Intel HD Graphics 4000 1536 MB, y el problema es que cuando ejecuto dolphin 5.0 tanto los juegos de gamecube como los de wii se me reducen los fps a 10 14 haciendo que jugar sea tarea imposible, sobre todo cuando los pongo a pantalla completa, he probado mil configuraciones y nada de nada, alguien tendría alguna solución? no entiendo que con un ordenador de estas características haya este problema, cuando puede correr perfectamente por ejemplo bioshock infinite al máximo. Muchas gracias!
Hola.

Estoy con Dolphin 5.0, con el pad que siempre uso en PC. Me reconoce todos los botones excepto B, X e Y.

Utilizo este: https://www.amazon.es/GameSir-G3s-Bluet ... ds=gamesir

Pero con cable USB.

¿Será algún tema de incompatibilidades de Dolphin con este pad en concreto?

Gracias.
Los que teneis problemas de rendimiento os recomiendo usar la versión Ishiiruka

https://forums.dolphin-emu.org/Thread-u ... om-version
@bartemal aunque tu ordenador por specs sea potente, lo que lastra los macs son los drivers gráficos tanto de Intel como de Nvidia. Aun teniendo un i7 de 4ª generación no te irá bien por ese problema.

Lo único probar desde la resolución nativa y luego ir probando a subir de resolución poco a poco. Pero en Mac el rendimiento es muy pobre.

@alternis90 parece que no es un mando Xinput, por lo que pone en la web. Los mandos genéricos pueden dar este problema. Puedes probar a descargar x360ce para emular Xinput con tu mando a ver si te reconoce así los botones.

Saludos.
Igual esta pregunta no va aquí, pero dudo encontrar otro sitio con más expertos en el tema. Todos conocemos Dolphin, y es la máxima expresión en emuladores, tanto en funcionalidad como en mejoras, mod, etc... lo que me preguntaba es... ¿Existe algún emulador similar para PSX? Con una comunidad así, que mejore la resolución interna, se le puedan añadir texturas y eso? Sé que es complicado, pero no pierdo la esperanza :P
Necesito ayuda para que el dolphin me reconozca un wiimote real con motion plus integrado, ¿En la versión 5 no los reconoce correctamente? No se que pasa... [buuuaaaa]
Orto2 está baneado por "Saltarse un ban con un clon"
uru1001 escribió:Necesito ayuda para que el dolphin me reconozca un wiimote real con motion plus integrado, ¿En la versión 5 no los reconoce correctamente? No se que pasa... [buuuaaaa]


No des tantos datos, no vaya a ser que alguien te ayude
dj_ryu escribió:Hola que tal?

Veo que hay movimiento por aqui!
Ayer me bajé la ultima version de dolohin ishiiruka, y los juegos me funcionan sobre los 50..60fps a resolucion interna x2.

Pero tengo un problema. Jugando con esta configuración al new super mario bros wii, no me aparece el suelo. Lo pongo a resolución nativa y vuelve a aparecer. Me pasé unas dos horas y no logré encontrar solución.

Mi pc:

Intel xeon x5460
4gb ram
Nvidia gt730 2gb gddr5


Gracias!



Nada, ya está. Usaba una version vieja de ishiiruka. Usando el último build de dolphin funciona!
Orto2 escribió:
uru1001 escribió:Necesito ayuda para que el dolphin me reconozca un wiimote real con motion plus integrado, ¿En la versión 5 no los reconoce correctamente? No se que pasa... [buuuaaaa]


No des tantos datos, no vaya a ser que alguien te ayude


No soy un experto en el tema, que datos necesitas?
@ppmeis muchísimas gracias por tu información, entonces si le hiciera Boot Camp al mac, y arrancara el windows en el mac no tendría problemas??
uru1001 escribió:Necesito ayuda para que el dolphin me reconozca un wiimote real con motion plus integrado, ¿En la versión 5 no los reconoce correctamente? No se que pasa... [buuuaaaa]


Yo tengo una barra sensora mayflash que además sirve para conectar los mandos sin problema

https://www.amazon.es/Mayflash-Dolphinb ... B00HZWEB74

La cuestión es que desde la versión 5.0-910, dolphin reconoce todos los mandos, incluso chinorris, siempre y cuando utilices un dongle bluetooth compatible con el nuevo sistema Passthrough

https://wiki.dolphin-emu.org/index.php? ... assthrough

La putada es que la barra sensora no es compatible con dicho sistema. Si conectas mandos originales no hay problema ... pero si tienes mandos chinorris sí
Tapion escribió:Igual esta pregunta no va aquí, pero dudo encontrar otro sitio con más expertos en el tema. Todos conocemos Dolphin, y es la máxima expresión en emuladores, tanto en funcionalidad como en mejoras, mod, etc... lo que me preguntaba es... ¿Existe algún emulador similar para PSX? Con una comunidad así, que mejore la resolución interna, se le puedan añadir texturas y eso? Sé que es complicado, pero no pierdo la esperanza :P


No sé si lo de añadir texturas lo habrá,pues tampoco busqué....pero lo de aumentar resolución y ver los juegos mejor si que lo tiene el ePSXe,configurando sus plugins de video .

Imagen

Un juego como el primer Tomb Raider se puede ver igual o mejor que el mismo cuando salió para versión PC..

(Este me lo compré para Sega Saturn cuando salió y podia ver como era el de PC alli mismo en la tienda y era un mundo de diferencia...Luego mejoró para la PSX, pero en PC se seguia viendo mucho mejor.)

La última versión que tengo del ePSXe es la 2.5.0 . (Tiene hasta la posibilidad de bajarse trucos del juego que se ponga,,(si los hay en base).
No se que pasa que con la version 5.0 al jugar al Twlight Princess el audio me ralentiza el juego , por ejemplo cuando saco el candil o se lo pone en la espalda mientras lucho, me pasa en el Modo Sonido XAudio2, y si lo pongo en Modo Sonido OpenAL no me pasa eso que se ralentiza pero se escucha mal, como crujidos muy de vez en cuando y es muy molesto esos chirridos, sabeis alguna solucion o algun plugin de sonido mejor que estos dos que vienen en el emulador?

gracias
@indalocbr1000

Muchas gracias. Lo he estado probando... la idea era para el Xenogear que no lo he jugado aún (no me matéis), pero no hay forma de que el sonido funcione bie, no es que falle, es que solo ruido. He probado con varios plugin y nada... pero bueno, no os mareo más con otros emuladores, voy a buscar información que seguro que tiene su propio hilo.
Gracias de nuevo.
Tapion escribió:@indalocbr1000

Muchas gracias. Lo he estado probando... la idea era para el Xenogear que no lo he jugado aún (no me matéis), pero no hay forma de que el sonido funcione bie, no es que falle, es que solo ruido. He probado con varios plugin y nada... pero bueno, no os mareo más con otros emuladores, voy a buscar información que seguro que tiene su propio hilo.
Gracias de nuevo.

Yo tengo una versión del Xenogear que está traducida al español...

Aun no he jugado demasiado a él,pero la música en el poblado y al salir al mapa exterior se oye limpia y perfectamente...

Uso el plugin ePSXe SPU core 2.0.0 ... con la versión ePSXe 2.5.0 y con el plugin basado en OpenGL el que viene en la imagen que puse mas atras..(aunque tambien valdria uno en D3D con la confi parecida).

Para @pasnake :

Prueba con alguna versión como esta : Ishiiruka.366(c9f06a0).x64 u otra de Ishiiruka .. A mi me vá bien en casi cualquier versión de ellas ... tanto en imagen como en sonido.
El sonido dejalo puesto en : Emulacion DSP HLE (rapido) ..,.. En otros podria tener mas calidad pero ralentiza mas.segun potencia de equipo a usar.
@indalocbr1000

Gracias, pero como se instala eso de Ishiiruka.366(c9f06a0).x64? no tengo muchas nociones de estas cosas la verdad
pasnake escribió:@indalocbr1000

Gracias, pero como se instala eso de Ishiiruka.366(c9f06a0).x64? no tengo muchas nociones de estas cosas la verdad


Descarga alguna versión de Dolphin Ishiiruka desde aqui: https://forums.dolphin-emu.org/Thread-u ... om-version por ejemplo.

Ya,pues coges una versión mas actual u otra mas antigua,en los enlaces que vienen.... Suelen ser archivos comprimidos en .zip

Cuando se descargue,pues lo descomprimes para que quede en su carpeta y antes de arrancar el ejecutable Dolphin.exe ,creas un archivo de texto con el nombre de -portable- .. se debe de quedar nombrado asi: portable.txt .. No hay que escribir nada dentro.
Ese archivo "obliga" digamos a que toda carpeta u archivos que se crean al usar el ejecutable del Dolphin,se queden dentro de esa carpeta y tener todo junto.

Ahora ya si ejecutar el Dolphin.exe para empezar a configurar las cosas de video,audio,controles para jugar y demas y elegir en donde se cargarán los juegos.

Asi que no se puede decir que sea una cosa que se instale,tal como otros programas.
indalocbr1000 escribió:
pasnake escribió:@indalocbr1000

Gracias, pero como se instala eso de Ishiiruka.366(c9f06a0).x64? no tengo muchas nociones de estas cosas la verdad


Descarga alguna versión de Dolphin Ishiiruka desde aqui: https://forums.dolphin-emu.org/Thread-u ... om-version por ejemplo.

Ya,pues coges una versión mas actual u otra mas antigua,en los enlaces que vienen.... Suelen ser archivos comprimidos en .zip

Cuando se descargue,pues lo descomprimes para que quede en su carpeta y antes de arrancar el ejecutable Dolphin.exe ,creas un archivo de texto con el nombre de -portable- .. se debe de quedar nombrado asi: portable.txt .. No hay que escribir nada dentro.
Ese archivo "obliga" digamos a que toda carpeta u archivos que se crean al usar el ejecutable del Dolphin,se queden dentro de esa carpeta y tener todo junto.

Ahora ya si ejecutar el Dolphin.exe para empezar a configurar las cosas de video,audio,controles para jugar y demas y elegir en donde se cargarán los juegos.

Asi que no se puede decir que sea una cosa que se instale,tal como otros programas.


Gracias, va mejor ahora si, lo unico que en la Pradera de Hyrule (la segunda) me va muy ralentizado, me baja 13 o 14 fps el juego, es solo esa zona , sabes alguna posible solucion para esta parte del juego?

He encontrado el mismo problema a otra persona tambien https://www.emudesc.com/threads/zelda-t ... in.410171/

https://www.emudesc.com/threads/zelda-t ... pu.409203/

Editado: Solucionado, le he metido el hack ese para que no se ralentice y ahora ve perfecto
pasnake escribió:
indalocbr1000 escribió:
pasnake escribió:@indalocbr1000

Gracias, pero como se instala eso de Ishiiruka.366(c9f06a0).x64? no tengo muchas nociones de estas cosas la verdad


Descarga alguna versión de Dolphin Ishiiruka desde aqui: https://forums.dolphin-emu.org/Thread-u ... om-version por ejemplo.

Ya,pues coges una versión mas actual u otra mas antigua,en los enlaces que vienen.... Suelen ser archivos comprimidos en .zip

Cuando se descargue,pues lo descomprimes para que quede en su carpeta y antes de arrancar el ejecutable Dolphin.exe ,creas un archivo de texto con el nombre de -portable- .. se debe de quedar nombrado asi: portable.txt .. No hay que escribir nada dentro.
Ese archivo "obliga" digamos a que toda carpeta u archivos que se crean al usar el ejecutable del Dolphin,se queden dentro de esa carpeta y tener todo junto.

Ahora ya si ejecutar el Dolphin.exe para empezar a configurar las cosas de video,audio,controles para jugar y demas y elegir en donde se cargarán los juegos.

Asi que no se puede decir que sea una cosa que se instale,tal como otros programas.


Gracias, va mejor ahora si, lo unico que en la Pradera de Hyrule (la segunda) me va muy ralentizado, me baja 13 o 14 fps el juego, es solo esa zona , sabes alguna posible solucion para esta parte del juego?

He encontrado el mismo problema a otra persona tambien https://www.emudesc.com/threads/zelda-t ... in.410171/

https://www.emudesc.com/threads/zelda-t ... pu.409203/


Pues no sé lo que debe pasarte,será cosa de hardware...

Con una versión antigua de Dolphin: la 3.5 -1320, poniendo en configurar,en -limite de frames- en Audio.. (en vez de automático...(No recuerdo si era usando Directx 9 u 11).A mi el juego me iba bien jugando a x3 de la nativa...(en x2 aun mas rendimiento)..
Y no me bajaba corriendo por esa pradera...
(Los únicos momentos que se podia lagear un poco era cuando los dioses o sabios esos,recuperando los racimos de luces ,pues despertaban y hablaban con el protagonista...en ese momento se desplagaban mas efectos en pantalla.
En esa versión del emu,se podia llegar al final del juego,pero no sé porque no se escuchaba la música de fondo en los créditos finales y en otras versiones mas avanzadas,pues ya si.

Todo lo comentado hasta ahora era con un equipo i5 2500 a 3.3 Ghz. Grafica ATI Radeon 5670 1 gb ddr5 y 8 gigas de Ram.

Ahora juego con una versión de Ishiruka y no me falla ni lo que comentaba de la presentacion de los dioses esos con la luz ... jugando a x4 de resolución interna... Solo que en este modo aun no me lo he pasado entero y no sé si la música de los créditos estará presente,cosa que espero que si.

Ahora es un i7 3770K a 3.5 Ghz ,grafica Geforce 970 4 gb ddr5,16 gigas Ram.

Y por supuesto que es mejor activar el Hacks para este juego... Eso ayuda mucho a que vaya mejor.
Buenas, tengo un problema con este emulador. Lo que pasa es que yo configuro todas las opciones en gráficos, y cuando inicio algún juego, la sección de "arreglos temporales" se me desconfigura, quitando alguna opción que hace que el juego vaya a trompicones, en concreto es la opción "Store EFB textures only". La desactiva y la marca en negrita. Bueno obviamente la puedo cambiar con el juego abierto, el problema es que ya no se como volver a la pantalla completa. ¿Alguna solución? Antes no me pasaba esto. Por si sirve, uso el ishiruka 981.
thens escribió:Buenas, tengo un problema con este emulador. Lo que pasa es que yo configuro todas las opciones en gráficos, y cuando inicio algún juego, la sección de "arreglos temporales" se me desconfigura, quitando alguna opción que hace que el juego vaya a trompicones, en concreto es la opción "Store EFB textures only". La desactiva y la marca en negrita. Bueno obviamente la puedo cambiar con el juego abierto, el problema es que ya no se como volver a la pantalla completa. ¿Alguna solución? Antes no me pasaba esto. Por si sirve, uso el ishiruka 981.


No sé por que te hará eso de cambiar la configuración y tampoco lo he probado en otras versiones que tengo yo de ese tipo de emu.Aunque por lo visto,a mi se me mantienen como las ponga.

Lo de cambiar a pantalla completa,a ventana y viceversa,pues siempre ha sido con ALT pulsado y luego darle a ENTER/INTRO.

Una versión que vá muy fina es : Ishiiruka.674(b931d57)

Tambien tengo la 743,pero no me acaba gustar mucho para algun juego en la que si vá la 674.
A veces con unas versiones mas modernas,arreglan algo,pero joden otras cosas.
Prefiero una versión que vaya mejor con casi todo y luego buscar aparte alguna que vaya mejor que esa,para un juego predeterminado y dejarlo solo para ese.
¿Hay alguna forma de sincronizar el wiimote (plus, y original de nintendo) con el ordenador y que se quede sincronizado así siempre? Me pasa que siempre que enciendo el mando empieza a instalar los controladores, y hasta falla un par de veces la instalación hasta que ya sincroniza correctamente. ¿O es esto normal?
Hola, tengo un problemilla con con los wiimote conectado al dolphin.

Hasta ahora me funcionaba todo OK pero ahora me ha dejado de apuntar a la pantalla. Uso una barra sensora inalambrica para ello. He probado el mando en la wii u y va bien, he probado dejando la wii u encendida y la barra sensora conectada para ver si así funcionaba el cursor en el emulador y ni por esas.

Alguien sabe que puede estar pasando?

Muchas gracias
elokillo escribió:Hola, tengo un problemilla con con los wiimote conectado al dolphin.

Hasta ahora me funcionaba todo OK pero ahora me ha dejado de apuntar a la pantalla. Uso una barra sensora inalambrica para ello. He probado el mando en la wii u y va bien, he probado dejando la wii u encendida y la barra sensora conectada para ver si así funcionaba el cursor en el emulador y ni por esas.

Alguien sabe que puede estar pasando?

Muchas gracias


En plan "casero" para salir de dudas si el wiimote apunta bien puedes utilizar dos velas, separadas entre ellas unos 20-30cm, en el sitio donde tienes la barra sensora
cmv escribió:
elokillo escribió:Hola, tengo un problemilla con con los wiimote conectado al dolphin.

Hasta ahora me funcionaba todo OK pero ahora me ha dejado de apuntar a la pantalla. Uso una barra sensora inalambrica para ello. He probado el mando en la wii u y va bien, he probado dejando la wii u encendida y la barra sensora conectada para ver si así funcionaba el cursor en el emulador y ni por esas.

Alguien sabe que puede estar pasando?

Muchas gracias


En plan "casero" para salir de dudas si el wiimote apunta bien puedes utilizar dos velas, separadas entre ellas unos 20-30cm, en el sitio donde tienes la barra sensora


Gracias x responder xro no tengo velas xdd pero la barra sensores conectada a la Wii u no debería servir?


Hracias
elokillo escribió:
cmv escribió:
elokillo escribió:Hola, tengo un problemilla con con los wiimote conectado al dolphin.

Hasta ahora me funcionaba todo OK pero ahora me ha dejado de apuntar a la pantalla. Uso una barra sensora inalambrica para ello. He probado el mando en la wii u y va bien, he probado dejando la wii u encendida y la barra sensora conectada para ver si así funcionaba el cursor en el emulador y ni por esas.

Alguien sabe que puede estar pasando?

Muchas gracias


En plan "casero" para salir de dudas si el wiimote apunta bien puedes utilizar dos velas, separadas entre ellas unos 20-30cm, en el sitio donde tienes la barra sensora


Gracias x responder xro no tengo velas xdd pero la barra sensores conectada a la Wii u no debería servir?


Hracias


Era por descartar si se habia fundido algún led pero no me había dado cuenta que lo habias probado en la wii u. Entonces no sé

Por probar apunta muy cerca de la barra sensora a ver si te posiciona
cmv escribió:
elokillo escribió:
cmv escribió:[

En plan "casero" para salir de dudas si el wiimote apunta bien puedes utilizar dos velas, separadas entre ellas unos 20-30cm, en el sitio donde tienes la barra sensora


Gracias x responder xro no tengo velas xdd pero la barra sensores conectada a la Wii u no debería servir?


Hracias


Era por descartar si se habia fundido algún led pero no me había dado cuenta que lo habias probado en la wii u. Entonces no sé

Por probar apunta muy cerca de la barra sensora a ver si te posiciona


He probado de mil maneras, cerca, lejos... Jajajaja y nada.. con lo que estaba disfrutando del.mario Galaxy 2 jejje
Joder, llevo mazo tiempo esperando que DolphinVR se actualice, y me acabo de enterar de que el equipo Dolphin ha aplicado la licencia GPLv2 de forma un poco discutible para quitarse de encima al autor del branch pq no paraba de escribir cosas sobre politica en Github y demas sitios, que pena !!!! :(

La verdad que les entiendo, pero ha sido un error usar ese truco, en vez de echarle a él en persona, ahora nadie puede continuar ese Branch ...
Buenas, he probado el Just Dance 2017 con el dolphindroid (ya que no tengo mando wii) en el emulador dolphin 4.0.2 y me va bien el problema es que a veces se queda el sonido como "atrancado" o "cortado" y me parece que hay que configurar algo en lo de los gráficos o audio pero no sé que configuración es mejor ponerle. ¿Alguien sabe?
como hago para poner el super mario galaxy a 30fps? a 60 fps me va mal
@pasnake Pues así de primeras como no expliques primero qué ordenador tienes veo complicado que alguien te conteste xD.

Saludos.
ppmeis escribió:@pasnake Pues así de primeras como no expliques primero qué ordenador tienes veo complicado que alguien te conteste xD.

Saludos.


pero me refiero en opciones del emulador, no se puede poner a 30fps el juego?
@pasnake se puede pero te irá a la mitad de velocidad. No es como un juego de PC que puedes elegir los fps a los que trabaje el juego.

Saludos.
ppmeis escribió:@pasnake se puede pero te irá a la mitad de velocidad. No es como un juego de PC que puedes elegir los fps a los que trabaje el juego.

Saludos.

y como se puede?
@pasnake esa opción la tienes en Configuración > Pestaña General > Configuración básica > Límite de velocidad. Pero, como te he dicho, esto limita la velocidad del juego al valor que le pongas, si quieres que el juego vaya a 30fps, tendrás que poner 50% de velocidad, pero eso hará que el juego vaya a la mitad de velocidad.

Resumiendo: no puedes obligar el juego a que renderice a 30fps, no es como un juego de PC.

Saludos.
Hola he leido este tema y la wiki de dolphin y me estoy volviendo loco. Uso dolphin 5.0 Quisiera preguntar por la barra myflash y el bluetooth HK-760 Model, USB 2.0 Bluetooth 2.0 100-Meter/300-Foot Range Class 2 Wireless Dongle (Green), buy in dealextreme SKU 14581.

Yo tengo barra usb asik pense en el bluetooth que segun la wiki conecta 4 mandos pero no lo encuentro a un precio decente y como nadie mas e visto que garantice k funcionan 4 mandos ya sean originales o genericos pues no se si coger otro pero en ningun pone nada a ver si alguien sabe algun otro que me sirva xk kiero tenerlo en condiciones.

La barra myflash me gusta k tb se conecta sin hacer nada pero la gente se quejaba que no reconocia bien algunos mandos y aki decis k no interesa porque no reconoce el bluetooth pass o algo asi lo llaman que no se xk es importante rralmente si funciona igual

Alguien puede ayudarme? Gracias
Necesito ayuda con los parches, tengo 3 para Super Mario Sunshine pero no encuentro en donde como aplicarlo al dolphin 5.0. me ayudarian?
oxob3333 escribió:Necesito ayuda con los parches, tengo 3 para Super Mario Sunshine pero no encuentro en donde como aplicarlo al dolphin 5.0. me ayudarian?


son parches ¿o códigos para activar por ejemplo 60fps ...?
Buenas.

Me ha dado por jugar de nuevo a los Metroid, que lucen expectaculares en el emu, pero tengo una duda.
El Metroid Trilogy, tiene un pequeño problema, no es que sea muy molesto, pero ahí está, que en el centro de la pantalla sale una muesca negra. En los juegos de GameCube no ocurre... ¿se puede hacer algo? La verdad que me da igual jugarme la version de GameCube, es mas, creo que se juega mejor por el mando, pero era por tener todo junto con la trilogia.
@KKnot es un problema conocido. Sucede al utilizar resoluciones internas superiores a 1 (IR>1):

https://wiki.dolphin-emu.org/index.php? ... e:_Trilogy)

Sigue los pasos que se indican en la Wiki y podrás ocultar el punto.

Saludos.
7387 respuestas