Alive!!! It’s alive!!!

30. avril 2010

Ce message est top secret et je devrais vous couper la langue à la serpe rouillée une fois que vous l’aurez lu.

La première version 0.0.0.1 de Nova4Phone tourne sur l’émulateur. La première chose à dire c’est que le développement sur Windows Phone 7 c’est juste génial. Ca coule tout seul, c’est rapide, efficace. Je suis fan.

image

Pour autant, tout n’est pas encore disponible. Par exemple, il n’est pas possible de faire des shaders customs (pourtant le matériel semble être capable de faire des shaders v2.0). J’espère juste que ce n’est que temporaire.

De plus, le truc qui me broute méchamment la nouille c’est le passage en main droite au niveau du repère. Bon ok, je ne vais pas en pondre des briquets mais c’est quand même lourd.

Hormis ces quelques détails, le boulot effectué par Microsoft sur le SDK et les outils fait vraiment plaisir à voir.

Les scènes produites par Nova sont lisibles via le web par le Windows Phone.

Bien sur de nombreuses contraintes liées à la plateforme (et surtout à l’abscence des shaders customs) sont à noter (liste non exhaustive):

- Pas de point lights
- Pas de shaders
- Juste 2 textures en multi-texturing

Il est évident que le développement n’en est qu’à ses débuts et que tout ça va progresser.

Par contre, comme le Windows Phone est multitouch, il est super agréable de se promener dans une scène avec les doigts.

De plus, le support de l’accéléromètre ouvre la voie à une nouvelle manière fort intuitive de naviguer.

 

Bon le truc maintenant c’est d’arriver à suffisamment scier les nouilles à Microsoft (message subliminal à l’attention de Mitsu et de Pierre C.) pour obtenir un prototype pour que je puisse tester tout cela en live.

Nova, Windows Phone

Nostalgie

23. avril 2010

Je viens de tomber, en faisant le ménage sur mon disque, sur deux trucs poussiéreux mais qui m’ont fait plaisir à voir. Il s’agit des deux démos que nous avions réalisées avec Mitch (et un pote musicien Zaac) pour les Slach Party 2001 et 2002. Ces rassemblements étaient des compétitions autour de la création sur ordinateurs (PC/Amiga) et nous avions gagné la catégorie reine (démo sur PC) deux années de suite:).

Notre groupe s’appelait Zalemcorp (Pour la petite histoire, Nova vient de Desty Nova le savant fou du manga Gunmm et Zalem est dans ce manga le nom de la cité volante).

Le truc amusant c’est que ces démos tournaient sur Nova 3.0 (sachant que nous en sommes à la version 2010 qui est numérotée 6.0). Comme quoi le code n’était pas si pourri puisque ça marche toujours sur mon Windows 7 x64 avec DirectX10 dessus!

Alors bien sûr, ça a méchamment vieilli mais pour les vieux briscards de la scène démo cela peut rappeler de bons souvenirs.

image

 

Nova Mark 4.0:La gagnante de la Slach 2002. Un “benchmark” utilisant Nova et jouant les 4 scènes qui la composent à fond les ballons pour évaluer les capacités de rendu de la machine.

Téléchargeable ici.

 

 

image

 

NewMillenium: Ma préférée. Gagnante de la Slach 2001. Une suite de scènes 3D sur une musique de Zaac avec notamment un tunnel qui m’arracherait presque une larme encore aujourd’hui.

Téléchargeable ici.

Nova

Le truc à la con du jour : “Method Implementation is empty”

22. avril 2010

Après avoir passé plus de deux heures avec deux collègues sur ce bug, je me devais d’en parler ici.

Donc pour la petite histoire, lors du lancement d’une application, nous recevions ce message de la part du framework qui indiquait clairement qu’une méthode n’avait pas d’implémentation. Cette méthode est portée par une assembly C# tout à fait standard.

Hop, un coup de Reflector nous permet de valider que la méthode existe bien et que du code y est bien présent.

Je vous la fait courte : Cette méthode référençait une assembly C++/CLI qui était compilée en x86 alors que le code appelant était en C# compilé en “Any CPU”. Or, ce code s’exécutait sur une machine 64 bits, donc le code C# était exécuté dans un process 64 bits. Toutefois le class loader au moment de jitter la méthode incriminée se retrouvait en train de charger une assembly qui n’etait donc pas dans le bon format (x64 vs x86) et de ce fait n’arrivait pas à fournir une implémentation.

 

Donc voila, pour tous ceux qui tomberont sur cette erreur…

.Net

Nova 2010 is OUT!

20. avril 2010

vertice_RVB_texte_noirVLD

 

Et oui, après une grosse année de dur labeur, Nova 2010 est sorti avec une quantité assez impressionnante de nouveautés.

Tout d’abord l’habillage : nouveau site, nouvelle iconographie, nouvelle charte graphique.
Ensuite au-delà d’une baisse générale des tarifs, il existe désormais une version gratuite. Cela permettra à tous ceux qui le souhaitent de découvrir la 3D en toute légalité.

 

 

Finalement, comme j’ai la place, je vous livre ici le document interne de recensement des nouveautés de la version. Vous ne trouverez pas plus précis :)

  • SDK
    • Nouveau namespace : Vertice.Nova.Procedurals. Ce namespace héberge les classes permettant de développer des textures procédurales.
  • Nova
    • Support du provider DirectX 10
    • Support du provider DirectX 10 Software : le rendu est entièrement fait par les CPU. Aucun accès n’est fait à la carte graphique.
    • Réfraction
      • Trois algorithmes sont supportés
        • Réfraction standard : Les objets en réfraction sont considérés comme de vrais objets transparents
        • Réfraction par Réfraction Lists
          • Les objets réfractés sont rendus dans une texture (comportement de Nova 2009)
          • Support de la mise à jour différée
        • Advanced réfraction (uniquement dx10)
          • La réfraction est calculé de manière précise en utilisant une cube map.
          • Disparition des erreurs sur le bord des objets
          • Les objets transparents sont vus dans la réfraction
          • Support réaliste de l’indice de réfraction
    • Support de plusieurs providers en simultanée.
    • Support de plusieurs cartes graphiques en simultanée.
    • Bump
      • Suppression du paramètre Emit Bump Vector
    • Nouveaux post-process
      • Blur
      • Motion Blur (uniquement dx10)
      • Depth of Field (uniquement dx10)
      • Haute definition (uniquement dx10)
    • Cube textures
      • Support de la mise à jour différée des TrueRef
      • Support des TrueRef dans les shaders per-pixel
    • Miroirs
      • Support de la mise à jour différée
      • Simplification du mécanisme d’inclusions d’objets dans le calcul des miroirs
    • Rendu sur texture des caméras
      • Support de la mise à jour différée
    • Nouveau moteur d’ombres temps réel
      • Simplification du mécanisme d’inclusions d’objets dans le calcul d’ombres
      • Shadow Volumes
        • Les paramètres Camera Bias et ShaderShadow ne sont plus nécessaires
        • Réécriture de l’algorithme pour une bien plus grande robustesse
      • Shadow Map
        • Support des Soft Shadows (ombres douces)
        • Support des lumières omnidirectionnelles
        • Les lumières directionnelles n’ont plus besoin d’une position d’émission
        • Support de la mise à jour différée
      • Variance Shadow Maps (uniquement dx10)
        • Nouvelle technologie de rendu des shadow maps
        • Meilleur support des softs shadows
        • Support de la mise à jour différée
    • Nouveaux outils de debugs
      • Geometry Impostors : permet de tester si le rendu est ralenti par la géometrie
      • Material Impostors : permet de tester si le rendu est ralenti par les matériaux
    • Textures de type WebCam
      • Possibilité de définir des webcams comme source des textures
    • Vortex
      • Nouvelle version 3.0
      • Nouveau système d’interaction entre objets physiques et objets animés
      • Support du multithreading
      • Nouvel algorithme de contacts pour une stabilité largement améliorée
      • Support des champs de force attractifs et répulsifs
    • Particules
      • Support des softs particules (uniquement dx10)
    • Support du streaming (format MXS)
      • Les scènes peuvent désormais se charger depuis un stream http avec affichage progressif et support des domaines
    • Support des textures au format TIFF
    • Support des textures animées en séquences (format IFL)
      • Possibilité d’avoir plusieurs textures cyclant selon un timing défini dans le fichier IFL
    • Support d’un nouveau mode de blending du canal d’ambiant : Ambiant LuminosityBlending
      • Possibilité de mixer au sein d’une même texture un support de l’illumination et de l’ombrage (support partiel dans le cadre des matériaux standard dx 9)
    • Ambient Occlusion
      • Support de la technologie de Screen Space Ambient Occlusion (SSAO)
      • Génération en temps réel des informations d’occlusions sur toute la scène
      • Uniquement dx 10
    • DirectX 10
      • Support matériel complet des bones (Geometry Shader)
      • Support matériel complet des particules (Geometry Shader)
      • Support matériel complet des space warps (Geometry Shader)
      • Support matériel complet des morphers (Geometry Shader)
      • Calcul du brouillard au niveau du pixel
      • Fur Shader entièrement réécrit (Geometry Shader)
      • Cartoon Shader entièrement réécrit (Geometry Shader)
      • Standard material
        • Support du niveau pour chaque canal
      • PerPixel Shader
        • Gestion de l’atténuation des lumieres
        • Support des Opacity Maps
        • Support des Emissive Maps
        • Support des Glossiness Maps
        • Support des miroirs
        • Support du fresnel pour la réflexion, le diffus, le spéculaire et l’opacité
        • Support du niveau pour chaque canal
        • Gestion du spéculaire constant
      • Support matériel complet des shadow volumes (Geometry Shader)
      • Support des requêtes de prédiction de rendu (Occlusion Predicates)
      • Shadow Maps
        • Le paramètre CameraBias n’est plus nécessaire
  • Nova Studio
    • Nouveau nom : Nova Studio
    • Nouvelle version 64 bits complète
    • Support des plans d’alimentations (Windows Vista et plus)
    • Support d’une instance unique
    • Intégration d’un mode de design complet
    • Support d’un cache local pour le chargement des MXC depuis le réseau
    • Auto rechargement des scènes modifiées par des programmes tiers
    • Nouvel onglet pour gérer les effets de post-process.
    • Nouveaux importeurs
      • FBX
      • OBJ
      • 3DS
      • DXF
    • Sélection des couleurs par roue chromatique dynamique
    • Refonte du plugin d’informations système
    • Possibilité de sauvegarder les textures sur le disque depuis l’entity browser
    • Les textures de rendus sont désormais visibles dans l’entity browser (type true ref, rendu sur texture, miroir)
    • Shader Forge
      • Support des shaders 4.0 (y compris le Geometry Shader)
    • Nouvel éditeur depuis l’entity browser pour la liste des objets rentrants dans le calcul de l’ombre
    • Nouvel éditeur depuis l’entity browser pour la liste des objets rentrants dans le calcul des miroirs
    • Générateur d’exécutables
      • Possibilité de choisir la résolution de l’exécutable
      • Possibilité de choisir le fournisseur de l’exécutable
      • Possibilité de choisir la plateforme
      • Support des presets de génération d’exécutables
    • Nouvel onglet : Design
      • Visualisation des lumières
      • Visualisation des caméras
      • Création et édition de scènes
      • Création et édition de lumières
      • Création et édition de caméras
      • Création et édition de matériaux
      • Création et édition d’objets
    • Option de restauration de la position et rotation de la caméra d’origine
    • Suppression du paramètre non nécessaire TouchPrecision de la caméra
    • Génération d’arrière-plan du bureau
    • Génération d’économiseur d’écran
    • Rendu multi-ecran (dx10 uniquement)
      • Split horizontal
      • Split vertical
      • Stereoscopic
      • Multi-cameras
    • Support du rendu en tâche de fond
    • Support du streaming via le format MXS
    • Actions Builder
      • Améliorations des outils de sélections d’entités (Max et Nova Explorer)
      • Support des post-process
      • Nouvelle cible : Self et ParentObject
      • Nouvelle action : OpenUrl
      • Nouvelles options pour le ControlUI
        • IncreaseResolution
        • DecreaseResolution
        • MaximumResolution
      • Debugger d’actions : Outil permettant de suivre le flux des actions et le comportement des variables
    • Editeur de particules
      • Visualisation de l’objet émetteur
    • Scripts et plugins
      • Nouvelles propriétés
        • ExplorerMainRibbon : Donne accès au ruban principal
        • ExplorerMainStatusBarText : Donne accès au texte de la barre de statut
        • Nouvelles méthodes
          • CloseCurrentScene : Ferme la scène courante
      • Nouveau type de plugin : Plugin de contrôles
      • Le DistancePicker et le TrajectoryManager sont désormais accessibles depuis le script
    • Exportateurs
      • Support de 3ds Max 2011 et 3ds Max Design 2011
  • Nova Web Player
    • Support de Firefox
    • Support de Google Chrome
    • Support de Opéra
    • Support de Safari
    • Support d’un cache local pour ne pas recharger les scènes déjà chargées
    • Support du streaming via le format MXS

Nova

Le truc à la con du jour : Problème de signature et de manifeste d’une application C++/CLI sous Visual Studio 2010

18. avril 2010

Je viens de basculer plusieurs projets Visual Studio C++ vers la version 2010. Hors alors que tout se passait bien j’ai pris un vilain warning du compilateur :
“mt.exe : general warning 810100b3: is a strong-name signed assembly and embedding a manifest invalidates the signature. You will need to re-sign this file to make it a valid assembly”

Oui je sais c’est bien moche comme on aime.

Alors, bon selon moi c’est un bug mais soyons sympas, le message est quand même clair. En effet, j’ai demandé à VS2010 de signer mon assembly mais il semblerait que le Manifest Tool vienne faire sauter cette signature en injectant le manifeste. Soit, je suis pas contrariant alors que si je voulais faire chier je pourrais dire que si les compilateurs de VS 2010 ne sont pas foutus de bosser ensemble c’est un peu la honte. Mais je ne suis pas comme ça. Ouh la non…

Au final, il faut donc se faire une petite post build event à l’ancienne comme on aime avec des petits bouts de “je te la bidouille” dedans.

Comme je suis sympa voila la commande en question: sn -Ra "$(TargetPath)" $(ProjectName).snk

Visual Studio, .Net

Le truc à la con du jour : Sélectionner un item dans une treeview WPF

11. avril 2010

C’est ballot mais contrairement à Windows Forms, il n’y a pas un support direct de la sélection d’un item dans une treeview WPF.

Toutefois, la solution est relativement simple, puisqu’elle passe par la fonctionnalité des treeviews qui permet de récupérer les TreeViewItems depuis les objets liés : ItemContainerGenerator.

Ainsi, en respectant la hierarchie de la treeview on peut parcourir l’arbre à la recherche du container de l’item.

Cela donne donc le code suivant:

public static bool SetSelected(ItemsControl parent, object child)
{
    if (parent == null || child == null)
    {
        return false;
    }

    TreeViewItem childNode = parent.ItemContainerGenerator.ContainerFromItem(child) as TreeViewItem;

    if (childNode != null)
    {
        childNode.Focus();
        return childNode.IsSelected = true;
    }

    if (parent.Items.Count > 0)
    {
        foreach (object childItem in parent.Items)
        {
            ItemsControl childControl = parent.ItemContainerGenerator.ContainerFromItem(childItem) 
as ItemsControl; if (SetSelected(childControl, child)) { return true; } } } return false; }

Et le tour est joué.

.Net, WPF

On remet le couvert!!!

9. avril 2010

Après une BDC mémorable à Toulouse, on remet ça sur Aix le 18 Mai.

N’hésitez pas à vous inscrire…

Au menu : Du Sharepoint 2010, du Visual Studio 2010, du Silverlight 4, de l’ergonomie, du Windows Phone 7 et bien d’autres choses encore…

clip_image001

.Net, Divers

Je passe à la télé!

8. avril 2010

Ou presque:) En fait après une attente finalement plus longue que prévue, les webcasts des TechDays 2010 sont disponibles ici.

Pour vous faciliter la vie voici les liens vers mes sessions:

.Net

Composition d’images avec WPF

8. avril 2010

Dans le cadre d’un projet, j’ai eu besoin de générer une image contenant d’autres images composées ainsi que du texte. Ceci devait être fait dans un thread séparé pour des raisons de performances.

Pour cela, il existe une technologie bien sympatique en WPF, le RenderTargetBitmap. Ce dernier permet en effet de dessiner des Visual directement dans son contenu. Pour ce faire on s’appuie sur la classe DrawingVisual qui est un peu l’équivalent de la classe Graphics en Windows Forms/GDI+.

Cette dernière permet par exemple de dessiner des images (et donc de les redimensionner) ainsi que du texte (notamment).

Cela donne donc ceci:

FormattedText text = new FormattedText("Message à caractère informatif",
new CultureInfo("en-us"), FlowDirection.LeftToRight,
new Typeface(new FontFamily("Arial"), FontStyles.Normal, FontWeights.Bold, new FontStretch())
, 18, Brushes.Black); DrawingVisual drawingVisual = new DrawingVisual(); DrawingContext drawingContext = drawingVisual.RenderOpen(); drawingContext.DrawImage(image, new Rect(0, 0, renderTarget.PixelWidth, renderTarget.PixelHeight)); drawingContext.DrawText(text, new Point(renderTarget.PixelWidth - text.Width - 45, 350)); text.SetForegroundBrush(Brushes.White); drawingContext.DrawText(text, new Point(renderTarget.PixelWidth - text.Width - 45 - 1, 349)); drawingContext.Close(); renderTarget.Render(drawingVisual);

 

Par la suite, ce RenderTargetBitmap peut servir de source à un contrôle Image ou peut être sauvegarder sur le disque via la classe BmpBitmapEncoder:

string picturePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
, "urza.bmp"); FileStream stream = new FileStream(picturePath, FileMode.Create); BmpBitmapEncoder encoder = new BmpBitmapEncoder(); encoder.Frames.Add(BitmapFrame.Create(renderTarget)); encoder.Save(stream);
 
Et le tour est joué!

.Net, WPF