Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Actualidad Del Motor

Iniciado por Gezequiel, 23 de Mayo de 2005, 11:42:40 PM

« anterior - próximo »

Gezequiel

 En que anda ese genial motor que estan desarrollando?? terminado?? un 75%??? un 50%???

Que trae de importante??? Que tienen pensado???
Es para mantenerme un poco al tanto de en que anda el motor que ah largo plazo tengo pensado uzar...

Otra cosa, si voy a programar algo en C# puedo usar un motor en C++??? o obligadamente tengo que usar uno del mismo lenguaje???

Haddd

 
Citar
Características generales

1.   Desarrollado íntegramente en C# 2.0 y MDX
2.   Totalmente integrado en la plataforma .Net
3.   Enfocado a tarjetas con unos requerimientos mínimos de shaders 2.0

Scripting

1.   Utiliza el propio C#, con lo que la calidad y potencia del scripting está garantizada.

Editores

1.   Basado principalmente en la potenciación del 3Dmax como herramienta principal de edición.
2.   Editor de Noise
3.   Editor de Materiales ( en desarrollo )
4.   Editor de Partículas

Física

1.   Utiliza el motor de física Newton para generar movimientos y respuestas realistas: rigid body, múltiples tipo de joint, colisiones, rag dolls...

Iluminación

1.   Iluminación per-pixel soportando Diffuse, Specular, Bump maps, parallax mapping, environment mapping
2.   Soporte para lightmaps generados directamente desde MAX

Sombras

1.   ShadowMapping
2.   Stencil Shadows
3.   Sombras suaves para los dos tipos de sombreado

Gestión de la escena

1.   Scene Graph incorporado
2.   Portal Rendering
3.   Mirrors
4.   Render targets

Animación

1.   Animación esquelética por canales
2.   Importación directa del formato MD5 de ID.
3.   Animación por blending de keyframes

Efectos especiales

1.   SkyBox
2.   BillBoarding
3.   Sistema de partículas
4.   Light Shafts
5.   Depth of Field
6.   Glow
7.   Sistema de postproducción integrado

Sonido

1.   Sonido 2D, 3D y streaming
2.   Soporte de Ogg Vorbis

IA

1.   Búsqueda de caminos
2.   Steering Behaviours


Actualmente estamos centrados en la parte de los materiales. Como andando se aprende mucho, parece que hemos encontrado una buena solución para ese problema. Por ejemplo, os pongo el shader Phong:



#region VS

#end VS

#region PS
{
float3 diffuseColor = 0.0f;

if(Uniform.affectDiffuse)
{
 diffuseColor = base * diffuse(N, L) * MATERIAL_Diffuse;
}

// Si tenemos que calcular el specular o el environment map, calculamos el vector "Reflection"

if(Uniform.affectSpecular || Uniform.envMapEnabled)
 R = reflect(L, N);
 
if(Uniform.affectSpecular)
{
 float specularTerm = specular(R, -V, MATERIAL_SpecularPower) * MATERIAL_Specular;

 fragmentColor = LIGHT_Color * (diffuseColor + specularTerm);
}
else
{
 fragmentColor = LIGHT_Color * (diffuseColor);
}
}
#end PS


Y el Minnaert:

#region VS
{
}
#end VS

#region PS
{
float3 diffuseColor = 0.0f;

float NdotL = dot(N, L);
float NdotV = dot(N, V);

float irradiance = max(0.0f, NdotL);

// TODO: Esto debería ser una constante
float Power = 1.0f;

fragmentColor = LIGHT_Color * base * MATERIAL_Diffuse * pow(NdotV * NdotL, Power) * irradiance;

// Si tenemos que calcular el environment map, calculamos el vector "Reflection"

if(Uniform.envMapEnabled)
 R = reflect(L, N);
}
#end PS


Simplemente indicas el tipo de iluminación necesaria y automáticamente soporta:

1. Sombras
2. Emissive
3. EnvMap
4. Normal
5. Proyectores
6. DOF

Todo lo que es global, como proyectores, sombras, emissive...no lo especificas tu sino que el propio motor lo adecua al shader. Así que escribir shaders de iluminación para el motor es ahora bastante bastante sencillo y potente.

Por ejemplo, con cualquier shader puedes activar un proyector así:


flashLight.ProjectorMap = Haddd.Video.Textures.Create2D("vidriera_diffuse",true);
flashLight.ProjectorEnabled = false;


Y no tienes que tener NADA en cuenta a la hora de escribir tu shader de iluminación ( si es que necesitas crear alguno, porque nosotros ya suministramos bastantes )

Y bueno, respecto a lo del juego que estábamos haciendo para Art Futura, deciros que el grupo de grafistas no puede continuar  :(  Así que nos hemos cansado un poco de tanto pedir y pedir y pedir y pedir, y nos hemos centrado en las características del motor, sin tener ningún juego en mente.

Seguimos trabajando cada día en el tema, y la arquitectura del motor está muy bien. El exportador de MAX es fantástico y casi casi conseguimos que nos quede igual que como sale en MAX. El otro día quedaba exáctamente igual, pero con iluminación per Vertex, parece que las normales las trata de otra forma. Eso sí, estamos llegando al límite de los 2.0 y ya estamos pensando en el 3.0

Ahora mismo queremos terminar el tema de materiales, soportando HDR, el editor de Materiales...

Lord Trancos 2

 Ufff... HDR molaaaa....

Oye Haddd, no entiendo como haceis eso de que el usuario pueda escribir su shader y por otro lado el motor pueda proyectar una textura. Si no me equivoco un shader reempleza la fixed pipeline, asin q lo q escriba el usuario en su shader deberia ser lo que se representara, no?

Por otra parte, tambien me gustaria saber como lo haceis para que un mismo shader sirva para N luces.

Edit: veo que no teneis nada en el vertex shader... ¿tiene algo que ver con lo que pregunto?
on los años y mucho esfuerzo he llegado a atesorar una ignorancia total sobre casi todas las cosas.
Gate to Avalon (mi Blog)

Haddd

 El proyector es independiente del tipo de iluminación:está o no está activado, y si lo está siempre actual igual. Por tanto está fuera del trozo que el programador escribe.

Es como la proyección del pto. Eso no lo escribe el programador cada vez. Como siempre es la misma operación, el motor ya lo incluye por él.

Lo que hemos conseguido a base de tanto probar, es entender y crear una estructura lógica de cómo funciona realmente la iluminación, qué es dependiente y que no lo es. Pero siempre encuentras cosas nuevas. Por ejemplo, ayer nos dimos cuenta de que el envmap dependía también del NdotL para que quedara realmente bien. Y es algo que no había visto en ningún shader. Pero como tenemos el render del Max para comprobar si nos sale igual, estamos ajustando todos los flecos que encontramos. La verdad es que es muy muy intersante  :D

Respecto a lo de las luces, hacemos tantas pasadas como luces hay. Así que siempre tratamos una sola luz.

Y sobre el vertex shader tenemos shaders de geometría definidos por el usuario. Pero todavía no hemos creado ninguno, aunque el EffectBuilder ya lo tiene previsto.

seryu

 debo estar muy mal.. porque cuando he visto el titulo de este post, me he preguntado, que coño hace aqui un post sobre coches?  :D  

Lord Trancos 2

 
Citar
El proyector es independiente del tipo de iluminación:está o no está activado, y si lo está siempre actual igual. Por tanto está fuera del trozo que el programador escribe.

Osea, q el programador solo escribe un cacho del shader, no?

Citar
Respecto a lo de las luces, hacemos tantas pasadas como luces hay. Así que siempre tratamos una sola luz.

Ufff... ¿significa eso que transformais y dibujais el objeto tantas veces como luces hay?
imagino que eso simplifica mucho el trabajo con shaders complejos,... pero ¿no es muy intensivo? ¿haceis algo para optimizarlo?
on los años y mucho esfuerzo he llegado a atesorar una ignorancia total sobre casi todas las cosas.
Gate to Avalon (mi Blog)

Haddd

 
Citar
Osea, q el programador solo escribe un cacho del shader, no?

Exacto, sólo escribe el trozo correspondiente al tipo de iluminación. Sólo se tiene que preocupar del diffuse y specular.

Citar
Ufff... ¿significa eso que transformais y dibujais el objeto tantas veces como luces hay?
imagino que eso simplifica mucho el trabajo con shaders complejos,... pero ¿no es muy intensivo? ¿haceis algo para optimizarlo?

No hemos podido probar la diferencia real en un juego de saber cómo funcionaría gestionando desde el shader las luces. Me imagino que habría unos cuantos if y no sé si realmente sería más rápido que procesar los shaders sin ifs

De todas formas, sólo es factible en el modelo de shaders 3.0 y por ahora...no tenemos dinero para ello  (nooo)  

Lord Trancos 2

Cita de: "Haddd"De todas formas, sólo es factible en el modelo de shaders 3.0 y por ahora...no tenemos dinero para ello  (nooo)
¿Y eso pq? ¿En 2.0 tb se pueden usar ifs, no?  :huh:  
on los años y mucho esfuerzo he llegado a atesorar una ignorancia total sobre casi todas las cosas.
Gate to Avalon (mi Blog)

Haddd

 Simula los ifs. Lo que hace es que en realidad procesar todo el código que hay, independientemente de si hay o no el if, y al final hace un lerp entre el valor final y el resultado sin el if.

seryu

 lo cual es horrible, por cierto.

Una duda al respecto, os vais a meter con los 3.0 o estais esperando a los 4?

Haddd

 La verdad es que con la aparición de las nuevas consolas, el pc como sistema de juego estará un poco desfasado. Parece que la XBox360 costará unos 300€....¿qué tarjeta de vídeo de nueva generación costará ese precio ? Me temo que te saldrá más barato comprarte una XBox que una de estas tarjetas..Así que...¿quién comprará realmente tarjetas a 500€?

¿ Y tendrán en cuenta las compañías a los jugadores de PC ? Porque este momento no lo hemos vivido nunca. Siempre el PC iba por delante de las consolas, pero ahora que la consola supera al PC....¿Qué ocurrirá?

Nosotros mantenemos el SM2.0 hasta que las 3.0 estén baratas. Pero realmente el SM3.0 no es una revolución. Es muucho mejor que el 2.0 sobre todo por las limitaciones de nº de instrucciones, pero el SM4.0 es el que realmente te ofrece la posibilidad de crear vértices on the fly y ya es un sistema unificado, eliminando las limitaciones de pasar registros de VS a PS.


Lord Trancos 2

 Oye, Hadd.

Ya que estas podrias esplicar un poco que es eso del sistema de postproduccion integrado? Es una especie de videopost a lo 3DMax? Que tipo de efectos se pueden conseguir? Como esta montado (asi a groso modo) internamente (¿via render to textures+shaders?) ?
on los años y mucho esfuerzo he llegado a atesorar una ignorancia total sobre casi todas las cosas.
Gate to Avalon (mi Blog)

Haddd

 No la postproducción principalmente es un sistema donde el RT que aplicas se convierte en la textura del siguiente.

Es decir, procesas un efecto y el resultado queda disponible para el siguiente efecto. Principalmente es esto. Luego tienes la facilidad con que el programador puede incluir nuevos efectos, claro. Pero eso como lo hacemos con clases derivadas, se convierte en algo bastante sencillo.

Pero cada efecto que quieras realizar depende completamente del shader que escribas. Ahí sí que no podemos ayudar nada  <_<


seryu

 yo no estoy muy de acuerdo con lo que comentas de las consolas, normalmente, por las epocas en las que se ha anunciado una consola, esta era como poco igual de potente que los ordenadores de la epoca, la ps2 y xbox mostraban unos graficos impresionantes en sus primeros dias, y las superproducciones de juegos en estas plataformas son dificilmente superables en calidad en los titulos que tenemos en pc, en parte porque la ser un sistema cerrado, permite una optimizacion y eliminacion de bugs muy grande en comparacion a la inmensidad de sistemas que hay en PC, ademas que en PC cualquiera puede sacar un juego y por tanto hay muchos estudios baratos con juegos baratos que suelen estar peor testeados. Pero no estoy contando nada que no sepamos todos.

Hoy una xbox360 puede parecer sorprendente, lo cierto es que en tres años lo que haya en el mercado de PC y de MAC sera superior, aunque solo sea por potencia bruta (ya que el pc arrastra y arrastrara arquitectura vieja por muuucho tiempo, solo hay que ver el AMD64).

¿Que es mas caro? si, pero eso como te digo ya pasas hoy dia. Por 150 euros te puedes comprar una xbox que es un pc barato con dos juegos. Y si le pones un chip puedes liberar toda la potencia: emuladores, dvd multiregion, reproductor multimedia divx/mp3, radio internet, etc etc... incluso montarte una distri linux y , junto con teclado y raton, usarlo como un pc barebone.

Eso no debiera suponer un cambio en la industria del PC, desde hace años sony ha copado el mercado de ocio, y ahora mismo el mayor numero de usuarios y de ventas de videojuegos se registra en la ps2, y con mucha facilidad, ocurra en ps3, siendo el resto de consolas las que se llevan el resto de beneficios.

El mercado de PC ha sido siempre relativamente marginal (teniendo en cuenta como marginal lo que seria el mercado de gamecube al de ps2, claro).

Esto lo digo, basandome en los datos de ventas a lo largo de estos años, no es una apreciacion personal, aunque mi opinion del tema es clara: son plataformas distintas para usuarios distintos e incluso los juegos que venden tienden a ser distintos.

Las consolas no van a reemplazar a un PC, ni viceversa, en el ambito ludico.

NeLo

 ¿Al final el engine es en inglés o en castellano?

¿Ya se pueden hacer jueguecillos con él?

Saludos!
Drowning deep in my sea of loathing






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.