¿Por qué los juegos funcionan mucho mejor en Windows que en OSX?

11

Por ejemplo, en mi Mac Mini con Bootcamp, Team Fortress 2 funciona a aproximadamente 20 fps en OSX y 80 fps en Windows. Este parece ser un caso común. ¿Por qué es esto?

sans
fuente
Es la misma máquina con arranque dual en cualquiera de los sistemas operativos.
sin
arranque dual como en "no es una máquina virtual" ¿correcto?
Horacio
1
Sí, arrancando directamente en cualquier sistema operativo.
sin
1
Siempre encuentro estas preguntas interesantes, siempre y cuando no se conviertan en despotricaciones / llamas sin sentido, porque, como usuario de Mac (de 10 meses), puedo ver los conceptos erróneos de los usuarios de Windows.
Ricket

Respuestas:

15

Los controladores Direct3D en Windows están ridículamente optimizados, a veces para juegos específicos, y desarrollados por proveedores de hardware individuales.

Los controladores OpenGL de Apple están escritos y mantenidos (AFAIK) por Apple, y están destinados para el uso del sistema operativo "general", componiendo la interfaz de usuario y otras cosas. No hay tanta optimización para juegos y rendimiento de alto rendimiento.

Básicamente, muchos recursos de muchas fuentes se han dedicado a hacer que DirectX sea rápido en Windows, mientras que hay muchos menos recursos disponibles para hacer lo mismo en Mac.

chrish
fuente
Me inclinaría aún más específicamente hacia el compilador de sombreadores en el controlador como parte de la diferencia. altdevblogaday.com/2011/07/20/… dice que para juegos populares NV / AMD incluso optimizará a mano los sombreadores para su hardware.
Adam
55
No son solo los controladores ... también son los desarrolladores del juego. Por lo general, invierten más recursos en la optimización de Direct3d / DirectX en lugar de OpenGL. Otro caso es cuando un juego se desarrolló inicialmente solo para Windows y luego es portado. Ese debe ser un puerto realmente bueno (por ejemplo, puede resultar en una gran cantidad de reescritura de código) si logra un rendimiento similar ... lo cual no es el caso.
bummzack
Entonces, ¿Team Fortress 2 se representa en OpenGL en OSX pero D3D en Windows?
sin
sans, sí, Direct3D es solo para Windows, por lo que cualquier juego en cualquier otra plataforma se representa utilizando OpenGL (o software ...). Windows también es compatible con OpenGL; pero la mayoría de las versiones de juegos de Windows usarán Direct3D porque, como se mencionó, los controladores para Windows generalmente están mucho más optimizados para D3D.
Ricket
13

Si bien no descartaré la optimización que Microsoft pudo haber puesto en Windows y / o DirectX, creo firmemente que la mayoría de los programas funcionan mejor en Windows simplemente porque eso es en lo que se centran los desarrolladores (ahí es donde está el dinero). Toman decisiones de diseño con Windows en mente y luego intentan que funcione en otros sistemas operativos (Mac, Linux, etc.). Constantemente me encuentro con esto en el trabajo: otros proyectos tienen tantos problemas para portar a sistemas que no son de Windows porque los desarrolladores lo trataron como una idea posterior. Repetidamente he escrito programas que se basan en múltiples sistemas operativos con muy poco esfuerzo porque lo planeé de esa manera desde el principio. Una vez que realmente ha intentado hacerlo (en lugar de hacer el puerto a regañadientes después del hecho), aprende lo que se necesita y requiere muy poco esfuerzo adicional.

Klox
fuente
La curiosidad de un no codificador aquí: ¿Qué sucede con el rendimiento cuando diseñas para multiplataforma? Por ejemplo, ¿su juego multiplataforma se ejecutará tan rápido en Windows como lo hubiera hecho una versión centrada en Windows?
Jason Pineo
@ Jason: se trata más del tiempo dedicado y la especificidad de la plataforma. No hay nada que impida a un desarrollador escribir código que esté completamente optimizado para Windows, escribir código separado que esté completamente optimizado para OSX, y luego simplemente cambiar el que se usa según la plataforma. Sin embargo, el tiempo y, por lo tanto, los recursos dedicados a hacerlo a menudo superan el beneficio de hacerlo.
Jordaan Mylonas
@Jason: en ese caso, realmente depende de qué tan bien hayas diseñado tu juego (y cuando digo diseño me refiero a la planificación, no a la codificación real) y cuán divergentes son los diferentes sistemas operativos. Si son muy diferentes, entonces el comentario de Jordaan es apropiado cuando tiene que abordar cada sistema operativo por separado. Pero con interfaces comunes como OpenGL, y con el tiempo diferentes API toman prestados conceptos entre sí, todos se han vuelto bastante similares. Por lo tanto, hoy es más un ejercicio para combinar funciones y diseñar su software para poder usar cada una de las funciones sin excluir un sistema operativo.
Klox
7

Como otro usuario de Mac, me gustaría ofrecer un factor adicional: el programador de CPU en OS X es más "justo" que en Windows.

Este es un tema complicado de ciencias de la computación, por lo que aquí hay una manera simple de pensar en su programador de CPU: su procesador tiene que hacer malabarismos con muchas tareas a la vez (todos sus programas abiertos, más los procesos del sistema en segundo plano). En realidad, solo puede hacer un par de cosas a la vez (la cantidad de núcleos multiplicada por la cantidad de subprocesos por núcleo; un i7 de doble núcleo puede hacer 4 tareas a la vez, por ejemplo). Por lo tanto, divide todo el trabajo en pedazos, y alterna entre ellos para que parezca que realmente está haciendo muchas cosas a la vez. Cuando ejecuta dos programas, el procesador en realidad solo alterna de un lado a otro entre el procesamiento de esos dos programas, realmente rápido (como unos pocos microsegundos aquí y luego unos pocos microsegundos allí).

El patrón para el que se ejecutan las cosas en qué orden y durante cuánto tiempo lo decide un "algoritmo de programación". Por ejemplo, el planificador round robin organiza las tareas en un círculo y procesa cada una en orden. Otro programador podría organizar las tareas desde el tiempo restante hasta el más mínimo: las tareas pequeñas se realizarían rápidamente y las tareas grandes podrían tener que esperar un tiempo antes de realizarse.

Windows y OS X son muy diferentes, y sus algoritmos de programación también son un poco diferentes. Windows es un poco más "inteligente" en cuanto a priorizar las cosas, por lo que otorga prioridad adicional a los programas visibles para que la computadora parezca más rápida. OS X, sin embargo, es más justo para los procesos en segundo plano. Los algoritmos generales son muy parecidos entre los dos sistemas operativos (ambos son colas de retroalimentación multinivel ), pero este pequeño detalle da como resultado una experiencia de usuario diferente.

Ambas partes tienen sus ventajas. Como dije, los programas visibles en Windows aparecerán más rápido porque tienen más prioridad; pero si un programa visible decide tomar mucha energía, toda la computadora sufre un poco más. El programador más justo de OS X da como resultado velocidades más predecibles y estables, lo que es bueno para las operaciones de audio y video. Por ejemplo, si está reproduciendo una canción en segundo plano, es menos probable que tartamudee cuando hace otras cosas al mismo tiempo que en Windows.

Entonces, el punto clave es este: un juego de pantalla completa en Windows tendrá alta prioridad en la CPU y todo lo que se ejecute en segundo plano tendrá que esperar. En OS X, este es menos el caso.

Aquí se proporciona información técnica sobre los planificadores ; el resto de esta respuesta proviene de mi educación en informática y mi uso de OS X durante los últimos 10 meses, después de haber usado Windows durante más de 10 años (y Linux ocasionalmente). A veces estoy frustrado por el planificador más justo, pero otras veces aprecio sus ventajas.

Linux, por cierto, tiene una implementación de planificador aún más justa; Esto es lo que lo convierte en un gran servidor, pero en mi opinión la experiencia del usuario está degradada. Por ejemplo, cuando su computadora está empantanada con tareas, su cursor dejará de responder sin problemas porque se le da la misma prioridad que todo lo demás. Esto básicamente nunca sucede en Windows u OS X.

Ricket
fuente
-2

Algunos juegos que han sido "portados" a MacOSX son en realidad juegos de Windows que se ejecutan dentro de un emulador. Si bien no tengo una lista completa de ejemplos, parece que hay al menos SPORE que era así:

SPORE nunca se lanzó oficialmente en GNU / Linux, y la versión de Mac envejeció mal. El puerto Mac es en realidad el lanzamiento de Windows empaquetado con Cider, que es una tecnología depreciada que envuelve una versión (ahora antigua) de WINE en torno a los juegos. ( Fuente )

Ejecutar un software dentro de un emulador es, por definición, más lento que ejecutarlo de forma nativa.

don
fuente