ArsLudica.org Forum

Effettua l'accesso o una nuova registrazione.

Inserisci il nome utente, la password e la durata della sessione.
Ricerca avanzata  

News:

Autore Topic: Sviluppo XNA  (Letto 6041 volte)

Ziggybee

  • Administrator
  • Hero Member
  • *****
  • Offline Offline
  • Post: 8.383
  • Gamer Extraordinaire
    • Mostra profilo
Re: Sviluppo XNA
« Risposta #15 il: Febbraio 15, 2009, 21:14:13 »

Per controllo approfondito intendo:

alloco questo buffer che conterrà al massimo N mesh grandi al massimo N Kb (tra index e vertex buffer).
Quando carico la mesh, la carico in quei buffer.
Immagino che in qualche modo di possa, ma però ho un terribile dubbio.

Il tutto mi suona un po' come "se vuoi fare le figate, devi farti tutto da te e non usare niente di quello che c'è già".


Le mesh sono statiche o dinamiche?
Connesso
Matteo Anelli

Vazkor: "Altro che Apple TV"

Monopoli

  • Hero Member
  • *****
  • Offline Offline
  • Post: 4.296
    • Mostra profilo
Re: Sviluppo XNA
« Risposta #16 il: Febbraio 15, 2009, 21:16:05 »

Per controllo approfondito intendo:

alloco questo buffer che conterrà al massimo N mesh grandi al massimo N Kb (tra index e vertex buffer).
Quando carico la mesh, la carico in quei buffer.
Immagino che in qualche modo di possa, ma però ho un terribile dubbio.

Il tutto mi suona un po' come "se vuoi fare le figate, devi farti tutto da te e non usare niente di quello che c'è già".


Le mesh sono statiche o dinamiche?

Intendi dire se il vertex buffer cambia durante l'esecuzione del programma? Se è così, no :)
Connesso
Il mio blog agghiacciante
http://monopoliano.blogspot.com
E' Uscito! Compra qui: http://itunes.apple.com/us/album/crystal/id461134607

"Monopoli hai la voce da frocio ma sei un figo sull'Arsludicast."

Ziggybee

  • Administrator
  • Hero Member
  • *****
  • Offline Offline
  • Post: 8.383
  • Gamer Extraordinaire
    • Mostra profilo
Re: Sviluppo XNA
« Risposta #17 il: Febbraio 15, 2009, 21:23:37 »

Mi pare di capire che le dimensioni massime sono note a priori, o no?

Fatti una ArrayList di N Mesh, al limite estendila per gestire il riuso delle istanze, così non incasini il garbage collector e non chiami proprio l'allocatore della 360 :)

In pratica io ho un allocatore (scritto coi generics) che mi gestisce buffer di N oggetti arbitrari. All'inizio mi prealloca le N istanze, da quel momento in poi quando me ne serve una, la chiedo a lui, quando una non mi serve più la dò a lui, così me la tiene in caldo sino a che non mi riserve. Utile quando hai migliaia di proiettili da gestire con relative geometrie. :)

Se ho finito gli N oggetti a disposizione me lo dice così mi regolo.

Ma è un terrain engine per caso?
Connesso
Matteo Anelli

Vazkor: "Altro che Apple TV"

Monopoli

  • Hero Member
  • *****
  • Offline Offline
  • Post: 4.296
    • Mostra profilo
Re: Sviluppo XNA
« Risposta #18 il: Febbraio 15, 2009, 21:48:01 »

Mi pare di capire che le dimensioni massime sono note a priori, o no?

Fatti una ArrayList di N Mesh, al limite estendila per gestire il riuso delle istanze, così non incasini il garbage collector e non chiami proprio l'allocatore della 360 :)

In pratica io ho un allocatore (scritto coi generics) che mi gestisce buffer di N oggetti arbitrari. All'inizio mi prealloca le N istanze, da quel momento in poi quando me ne serve una, la chiedo a lui, quando una non mi serve più la dò a lui, così me la tiene in caldo sino a che non mi riserve. Utile quando hai migliaia di proiettili da gestire con relative geometrie. :)

Se ho finito gli N oggetti a disposizione me lo dice così mi regolo.

Ma è un terrain engine per caso?


Ok, quindi si può.
No, niente terrain engine :D Non ho idea di quello che voglio fare, sto solo cercando di capire quali limiti il sistema mi imporrà :D
Connesso
Il mio blog agghiacciante
http://monopoliano.blogspot.com
E' Uscito! Compra qui: http://itunes.apple.com/us/album/crystal/id461134607

"Monopoli hai la voce da frocio ma sei un figo sull'Arsludicast."

Ziggybee

  • Administrator
  • Hero Member
  • *****
  • Offline Offline
  • Post: 8.383
  • Gamer Extraordinaire
    • Mostra profilo
Re: Sviluppo XNA
« Risposta #19 il: Febbraio 15, 2009, 22:26:19 »

Io uso questa regola aurea che sovrastima abbastanza: per 50MB/s di traffico in oggetti (gestiti senza alcuna pre-ottimizzazione delle allocazioni) un GC non gestito crea circa 500Kb di overhead per la gestione dell'heap (oggetti temporanei, reference counter, tabelle dei cicli di vita, etc etc).

Io non mi sono mai fatto troppi problemi perché sono molto lontano dal saturare la memoria della 360 ma se usi quel margine di prudenza, considerando pure che ogni oggetto che utilizzi lo ricrei nell'heap ad ogni ciclo, sicuramente ci stai dentro.

Cmq ti ricordo che puoi andare in debug da visual studio tramite ethernet sulla 360, quindi puoi vedere chiaramente quanto overhead viene generato dal tuo engine nell'ambiente di esecuzione di .NET, nonché profilare.
Connesso
Matteo Anelli

Vazkor: "Altro che Apple TV"

Monopoli

  • Hero Member
  • *****
  • Offline Offline
  • Post: 4.296
    • Mostra profilo
Re: Sviluppo XNA
« Risposta #20 il: Febbraio 15, 2009, 22:48:34 »

http://creators.xna.com/it-IT/sample/normalmapping

 ???

Ma stiamo scherzando? Apriamo il file e guardiamo che casino mostruoso bisogna fare per programmare la pipeline.
Inconcepibile.
Siamo pure in un linguaggio al alto livello.
Fare un materiale nuovo dovrebbe essere una banalità, qui invece è un casino mostruoso.
Ma perfavore.
Connesso
Il mio blog agghiacciante
http://monopoliano.blogspot.com
E' Uscito! Compra qui: http://itunes.apple.com/us/album/crystal/id461134607

"Monopoli hai la voce da frocio ma sei un figo sull'Arsludicast."

Ziggybee

  • Administrator
  • Hero Member
  • *****
  • Offline Offline
  • Post: 8.383
  • Gamer Extraordinaire
    • Mostra profilo
Re: Sviluppo XNA
« Risposta #21 il: Febbraio 15, 2009, 22:54:05 »

Ma ti riferisci ai processor?
Quello è un pezzo della content pipeline, se vuoi implementare il normal mapping SENZA predisporre i contenuti per uno streaming ottimizzato e multipiattaforma, integrato con visual studio non c'è bisogno di tutto quel casino, ti carichi geometrie, texture e modelli e poi ti implementi tutto a mano, con dei loading time di 4-5 ore :)
Connesso
Matteo Anelli

Vazkor: "Altro che Apple TV"

Monopoli

  • Hero Member
  • *****
  • Offline Offline
  • Post: 4.296
    • Mostra profilo
Re: Sviluppo XNA
« Risposta #22 il: Febbraio 15, 2009, 22:57:05 »

Ma ti riferisci ai processor?
Quello è un pezzo della content pipeline, se vuoi implementare il normal mapping SENZA predisporre i contenuti per uno streaming ottimizzato e multipiattaforma, non c'è bisogno di tutto quel casino.

Mi sa che non hai mai visto come si fa questa roba nei gochi fatti coi i sistemi normali :D
Se voglio fare il normalmapping con neon, in tre minuti faccio il normal mapping ottimizzato per tre piattaforme.
Ed è in C++.

Qui invece per fare il normal mapping devo fare un macello per farlo andare ottimizzato solo su due.
Mi aspettavo che tutto sto .NET, con le sue promesse, non mi facesse fare PIU' lavoro di quanto non sia richiesto da un sistema che lavora in C++.
Connesso
Il mio blog agghiacciante
http://monopoliano.blogspot.com
E' Uscito! Compra qui: http://itunes.apple.com/us/album/crystal/id461134607

"Monopoli hai la voce da frocio ma sei un figo sull'Arsludicast."

Ziggybee

  • Administrator
  • Hero Member
  • *****
  • Offline Offline
  • Post: 8.383
  • Gamer Extraordinaire
    • Mostra profilo
Re: Sviluppo XNA
« Risposta #23 il: Febbraio 15, 2009, 22:57:38 »

cmq penso che quello sia un esempio vecchio (tipo per 1.0 o 2.0), io faccio così:

Codice: [Seleziona]
namespace NormalMappingProcessor
{
    [ContentProcessor(DisplayName = "Model - ShipGame Normal Mapping")]
    public class NormalMappingModelProcessor : ModelProcessor
    {
        public const string TextureMapKey = "Texture";
        public const string NormalMapKey = "Bump0";
        public const string SpecularMapKey = "Specular0";
        public const string GlowMapKey = "Emissive0";

        public override ModelContent Process(NodeContent input,
            ContentProcessorContext context)
        {
            if (input == null)
            {
                throw new ArgumentNullException("input");
            }
            PreprocessSceneHierarchy(input);
            return base.Process(input, context);
        }

        private void PreprocessSceneHierarchy(NodeContent input)
        {
            MeshContent mesh = input as MeshContent;
            if (mesh != null)
            {
                MeshHelper.CalculateTangentFrames(mesh,
                    VertexChannelNames.TextureCoordinate(0),
                    VertexChannelNames.Tangent(0),
                    VertexChannelNames.Binormal(0));

                foreach (GeometryContent geometry in mesh.Geometry)
                {
                    if (false == geometry.Material.Textures.ContainsKey(TextureMapKey))
                        geometry.Material.Textures.Add(TextureMapKey,
                                new ExternalReference<TextureContent>(
                                        "null_color.tga"));

                    if (false == geometry.Material.Textures.ContainsKey(NormalMapKey))
                        geometry.Material.Textures.Add(NormalMapKey,
                                new ExternalReference<TextureContent>(
                                        "null_normal.tga"));

                    if (false == geometry.Material.Textures.ContainsKey(SpecularMapKey))
                        geometry.Material.Textures.Add(SpecularMapKey,
                                new ExternalReference<TextureContent>(
                                        "null_specular.tga"));

                    if (false == geometry.Material.Textures.ContainsKey(GlowMapKey))
                        geometry.Material.Textures.Add(GlowMapKey,
                                new ExternalReference<TextureContent>(
                                        "null_glow.tga"));
                }
            }

            foreach (NodeContent child in input.Children)
            {
                PreprocessSceneHierarchy(child);
            }
        }

        static IList<string> acceptableVertexChannelNames =
            new string[]
            {
                VertexChannelNames.TextureCoordinate(0),
                VertexChannelNames.Normal(0),
                VertexChannelNames.Binormal(0),
                VertexChannelNames.Tangent(0)
            };


        protected override void ProcessVertexChannel(GeometryContent geometry,
            int vertexChannelIndex, ContentProcessorContext context)
        {
            String vertexChannelName =
                geometry.Vertices.Channels[vertexChannelIndex].Name;

            // if this vertex channel has an acceptable names, process it as normal.
            if (acceptableVertexChannelNames.Contains(vertexChannelName))
            {
                base.ProcessVertexChannel(geometry, vertexChannelIndex, context);
            }
            // otherwise, remove it from the vertex channels; it's just extra data
            // we don't need.
            else
            {
                geometry.Vertices.Channels.Remove(vertexChannelName);
            }
        }

        protected override MaterialContent ConvertMaterial(MaterialContent material,
            ContentProcessorContext context)
        {
            EffectMaterialContent normalMappingMaterial = new EffectMaterialContent();
            normalMappingMaterial.Effect = new ExternalReference<EffectContent>
                ("shaders/NormalMapping.fx");

            foreach (KeyValuePair<String, ExternalReference<TextureContent>> texture
                in material.Textures)
            {
                normalMappingMaterial.Textures.Add(texture.Key, texture.Value);
            }

            return context.Convert<MaterialContent, MaterialContent>
                (normalMappingMaterial, typeof(MaterialProcessor).Name);
        }
    }
}

Connesso
Matteo Anelli

Vazkor: "Altro che Apple TV"

Monopoli

  • Hero Member
  • *****
  • Offline Offline
  • Post: 4.296
    • Mostra profilo
Re: Sviluppo XNA
« Risposta #24 il: Febbraio 15, 2009, 22:59:47 »

Ma cos'è sta roba??
        protected override void ProcessVertexChannel(GeometryContent geometry,
            int vertexChannelIndex, ContentProcessorContext context)
        {
            String vertexChannelName =
                geometry.Vertices.Channels[vertexChannelIndex].Name;

            // if this vertex channel has an acceptable names, process it as normal.
            if (acceptableVertexChannelNames.Contains(vertexChannelName))
            {
                base.ProcessVertexChannel(geometry, vertexChannelIndex, context);
            }
            // otherwise, remove it from the vertex channels; it's just extra data
            // we don't need.
            else
            {
                geometry.Vertices.Channels.Remove(vertexChannelName);
            }
        }

Cosa fa questo codice? Perchè serve? E perchè serve nel progetto del gioco?

Questa roba deve stare fuori! Cos'è questo mischiare creazione di asset col gioco?
« Ultima modifica: Febbraio 15, 2009, 23:01:37 da Monopoli »
Connesso
Il mio blog agghiacciante
http://monopoliano.blogspot.com
E' Uscito! Compra qui: http://itunes.apple.com/us/album/crystal/id461134607

"Monopoli hai la voce da frocio ma sei un figo sull'Arsludicast."

Ziggybee

  • Administrator
  • Hero Member
  • *****
  • Offline Offline
  • Post: 8.383
  • Gamer Extraordinaire
    • Mostra profilo
Re: Sviluppo XNA
« Risposta #25 il: Febbraio 15, 2009, 23:16:33 »

Ma cos'è sta roba??
        protected override void ProcessVertexChannel(GeometryContent geometry,
            int vertexChannelIndex, ContentProcessorContext context)
        {
            String vertexChannelName =
                geometry.Vertices.Channels[vertexChannelIndex].Name;

            // if this vertex channel has an acceptable names, process it as normal.
            if (acceptableVertexChannelNames.Contains(vertexChannelName))
            {
                base.ProcessVertexChannel(geometry, vertexChannelIndex, context);
            }
            // otherwise, remove it from the vertex channels; it's just extra data
            // we don't need.
            else
            {
                geometry.Vertices.Channels.Remove(vertexChannelName);
            }
        }

Cosa fa questo codice? Perchè serve? E perchè serve nel progetto del gioco?

Questa roba deve stare fuori! Cos'è questo mischiare creazione di asset col gioco?

E' proprio per evitare di avere decine di developer ognuno con la sua parrocchia, limitare i costi e snellire i tempi di gestione di tutto il processo di sviluppo.

Comunque la gestione dei processor non riguarda il programmatore grafico. Se avessi letto la documentazione lo sapresti.

Quello che hai visto tu è un ESEMPIO. Nei progetti veri, come nelle reference implementation quel codice se ne sta nella sua assembly di gestione degli asset (scritta una volta e poi dimenticata per sempre). L'esempio ti spiega come fare ma non è che tu lo devi per forza rifare. Se ragioni su questa logica, dovresti metterti a leggere tutti i sorgenti di .NET, visto che te li corredano :)

Cmq al programmatore non frega una ceppa. Al grafico nemmeno.

Può sembrare verboso, specie se lo paragoni ad un middleware, eppure di giochi per 360 basati su XNA ne sono già usciti parecchi (parlo di quelli XBLA, non Community) e stimati professionisti finiscono un progetto in pochi mesi con staff piccolissimi e molto più agili ed economici di quelli con utilizzo di tecnologie più datate.
Connesso
Matteo Anelli

Vazkor: "Altro che Apple TV"

Monopoli

  • Hero Member
  • *****
  • Offline Offline
  • Post: 4.296
    • Mostra profilo
Re: Sviluppo XNA
« Risposta #26 il: Febbraio 15, 2009, 23:20:24 »

Non lo metto in dubbio: Sai bene quanti giochi hanno fatto con Renderware e renderware era una vera merda.

Questa è solo la nuova merda obbligatoria per fare giochi per il marketplace. Più lo guardo più mi disgusta.
Anche la faccenda degli attributi. Che vergogna.
Connesso
Il mio blog agghiacciante
http://monopoliano.blogspot.com
E' Uscito! Compra qui: http://itunes.apple.com/us/album/crystal/id461134607

"Monopoli hai la voce da frocio ma sei un figo sull'Arsludicast."

Monopoli

  • Hero Member
  • *****
  • Offline Offline
  • Post: 4.296
    • Mostra profilo
Re: Sviluppo XNA
« Risposta #27 il: Febbraio 15, 2009, 23:22:42 »

Ma cos'è sta roba??
        protected override void ProcessVertexChannel(GeometryContent geometry,
            int vertexChannelIndex, ContentProcessorContext context)
        {
            String vertexChannelName =
                geometry.Vertices.Channels[vertexChannelIndex].Name;

            // if this vertex channel has an acceptable names, process it as normal.
            if (acceptableVertexChannelNames.Contains(vertexChannelName))
            {
                base.ProcessVertexChannel(geometry, vertexChannelIndex, context);
            }
            // otherwise, remove it from the vertex channels; it's just extra data
            // we don't need.
            else
            {
                geometry.Vertices.Channels.Remove(vertexChannelName);
            }
        }

Cosa fa questo codice? Perchè serve? E perchè serve nel progetto del gioco?

Questa roba deve stare fuori! Cos'è questo mischiare creazione di asset col gioco?

E' proprio per evitare di avere decine di developer ognuno con la sua parrocchia, limitare i costi e snellire i tempi di gestione di tutto il processo di sviluppo.

Comunque la gestione dei processor non riguarda il programmatore grafico.

Infatti qui in casa mia in questo momento siamo in dieci programmatori che vorrebbero fare un giochino, ognuno con la sua specializzazione.
Connesso
Il mio blog agghiacciante
http://monopoliano.blogspot.com
E' Uscito! Compra qui: http://itunes.apple.com/us/album/crystal/id461134607

"Monopoli hai la voce da frocio ma sei un figo sull'Arsludicast."

Ziggybee

  • Administrator
  • Hero Member
  • *****
  • Offline Offline
  • Post: 8.383
  • Gamer Extraordinaire
    • Mostra profilo
Re: Sviluppo XNA
« Risposta #28 il: Febbraio 15, 2009, 23:23:05 »

Non lo metto in dubbio: Sai bene quanti giochi hanno fatto con Renderware e renderware era una vera merda.

Questa è solo la nuova merda obbligatoria per fare giochi per il marketplace. Più lo guardo più mi disgusta.
Anche la faccenda degli attributi. Che vergogna.

Aho, se non ti piace pazienza :)

Attributi?
Connesso
Matteo Anelli

Vazkor: "Altro che Apple TV"

Monopoli

  • Hero Member
  • *****
  • Offline Offline
  • Post: 4.296
    • Mostra profilo
Re: Sviluppo XNA
« Risposta #29 il: Febbraio 15, 2009, 23:24:49 »

Lezione 18, attributi:
http://www.softsteel.co.uk/tutorials/cSharp/lesson18.html

Usati estensivamente nell'esempio di cui sopra.
Connesso
Il mio blog agghiacciante
http://monopoliano.blogspot.com
E' Uscito! Compra qui: http://itunes.apple.com/us/album/crystal/id461134607

"Monopoli hai la voce da frocio ma sei un figo sull'Arsludicast."
 

Pagina creata in 0.017 secondi con 15 interrogazioni al database.