The first weblog devoted to Demoniak3D Demo-System

Nouveau Mirroir pour Demoniak3D

January 10th, 2008 Posted in FR, News | No Comments »

Notre partenaire WorldPCSpecs a mis à jour son mirroir pour le téléchargement de Demoniak3D. Le download est maintenant direct sans avoir à se connecter sur le forum oZone3D.Net. Le download à partir du serveur de WorldPCSpecs est accessible soit sur la page @ oZone3D.Net soit chez WorldPCSpecs.

  • Page de téléchargement sur oZone3D.Net: DOWNLOAD @ oZone3D.Net
  • Page de téléchargement sur WorldPCSpecs: DOWNLOAD @ WorldPCSpecs
  • Petite présentation de Demoniak3D

    December 30th, 2007 Posted in FR, News | No Comments »

    Je viens de tomber sur un blog qui propose un petit billet sur Demoniak3D (vu que le billet date du début novembre, son auteur, Xavier Gouchet, utilisait encore Hyp3rion3D). Le billet en question se trouve ici:

    Demoniak3D: un moteur 3D scriptable en XML et LUA

    J’aime bien de genre de description précise et concise.
    Voilà c’est tout pour ce petit post…

    GLSL Fog Tutorial

    December 28th, 2007 Posted in FR, GLSL, Tutorials | No Comments »

    Voici un nouveau tuto sur le GLSL fait avec Demoniak3D. Cette fois ci nous apprenons à implémenter les équations du brouillard (le fameux fog) avec le langage de shading d’OpenGL, le GLSL. J’ai eu souvent des questions du type: le fog ne marche pas avec le shader de phong, que faut-il faire? La réponse est dans ce tuto. Vous y apprendrez aussi une utilisation intéressante de la variable GLSL gl_FragCoord. Voilà et bonne lecture!

    Le tutorial se trouve ici: www.ozone3d.net/tutorials/glsl_fog/.

    Pour les feedbacks, veuillez utilisez ce fil de discussion: GLSL Fog Tut @ oZone3D.Net Forums.

    Demo de Noël Releasée

    December 21st, 2007 Posted in Demos, GLSL, News | No Comments »

    Maintenant que Demoniak3D est sorti, les news concernants notre tool préféré vos défiler ces prochains jours. Pour commencer, notre ami shadow a releasé sa demo de noël avec rendu cartoon (cel-shading).

    La page officielle de la démo se trouve ici: www.ozone3d.net/demos_projects/toon-snow.php

    Demoniak3D 1.17.0

    December 20th, 2007 Posted in News | No Comments »

    Avec le changement de nom, j’en ai profité pour corriger quelques bugs et ajouter des nouvelles fonctionnalités. On peut maintenant (depuis le temps!) afficher la même scène 3D dans plusieurs viewports (donc plusieurs caméras) en même temps. Au niveau du plugin PhysX, j’ai corrigé quelques bugs génants dans la gestion des matériaux et surtout j’ai ajouté le support des meshes pour les collisions (HYP_Nx_Physics.AddMeshActorToScene()). J’ai une petite démo dans un coin montrant montrant la gestion des collisions entre un mesh terrain et une pile de cubes. Je la release asap. Pour plus de détails, vous pouvez consulter le changelog.

    Among the new features, Demoniak3D now supports the rendering in several viewports (then several cameras) simultaneously. I fixed some troublesome bugs in material management of the PhysX plugin. I also added the support of mesh shapes for collision detection (HYP_Nx_Physics.AddMeshActorToScene()). I will release asap a small demo that shows how to use mesh shapes. As usual, see the changelog for further details.

    Demoniak3D download: www.ozone3d.net/demoniak3d/download.php

    Hyperion is now Demoniak3D

    December 20th, 2007 Posted in Demoniak3D, News | 2 Comments »

    Pour des raisons strictement légales, le nom Hyperion est abandonné et notre demo-système préféré se prénomme désormais Demoniak3D. A part un logo beaucoup plus chouette et professionnel que l’ancien, rien ne change au niveau du soft. Demoniak3D est 100% compatible avec toutes les demos et tous les graphes de scène existants.

    For legal reasons only, the name Hyperion is no longer valid and our favourite demo-system is now called Demoniak3D. But don’t worry, Demoniak3D is fully compatible with all existing demos and scene graphs.

    Demoniak3D utilise une nouvelle racine XML pour les graphes de scène: <demoniak3d>. Il suffit donc de remplacer <hyperion> par <demoniak3d>. Mais pour les paresseux (comme moi), Demoniak3D accepte aussi <hyperion>.

    Demoniak3D uses a new XML root for scene graphs: <demoniak3d>. Just replace <hyperion> by <demoniak3d>. But for lazy people (like me), Demoniak3D also accepts <hyperion>.

    La homepage se trouve maintenant ici: Demoniak3D homepage.

    Et je profite de ce billet pour remercier Steph3D qui a consacré un peu de son temps précieux à l’élaboration du logo de Demoniak3D. Excellent travail Steph!

    General Modelling Workflow

    December 13th, 2007 Posted in 3D, Demoniak3D, Technique, Tips'n'Tricks, UK | No Comments »

    This is an answer to this forum topic.

    Hyperion can load directly the following model file formats:
    - .3DS: 3DStudio MAX binary model format.
    - .OBJ: Alias|Wavefront ascii model format
    - .XML: XML format created by the Wak Exporter for 3DStudio MAX 7/8.

    If you work with 3DStudio MAX 7 you have the following choices:
    - export your model directly in *.3DS.
    - export your model using the Wak Exporter: http://www.ozone3d.net/wak/

    If you work with 3DStudio MAX 8 you have the following choices:
    - export your model directly in *.3DS.
    - export your model directly in *.OBJ.
    - export your model using the Wak Exporter: http://www.ozone3d.net/wak/

    If you work with 3DStudio MAX 9 and up you have the following choices:
    - export your model directly in *.3DS.
    - export your model directly in *.OBJ.

    If you work with Cinema4D 9/10 you have the following choices:
    - export your model directly in *.OBJ with the Riptide plugin.

    Now some advices. Currently, the best way to export/load your models is done with 3DStudioMAX 7/8 and the Wak Exporter. Wak Exporter produces a model format that matches exactly the data structures used by Hyperion (position, normals, texcoords, …).

    The most important point is the normals. Normals are fundamental in many applications. The .3DS format does not include normals. Hyperion has to compute them and depending the algorithm, the result may be incorrect. Thus the best way to get nice normals is to let the modeling tool does this tricky job and export the normals in the file. 3DStudioMAX can export normals in the OBJ. Cinema4D can export them too using Riptide. When Hyperion loads a file that contains normals, it uses them directly.

    If you export in .3DS, you have to pay attention to material, textures and meshes names:
    - material name: 10 characters max!
    - mesh name: 10 characters max!
    - texture filename: old DOS convention: 8.3. This point is very important.

    If you export in .OBJ or with Wak, these limitations disappear.

    Multitexturing and UVmap: only the XML format exported by Wak supports the multitexturing and several UVmap per vertex. The .3DS and .OBJ are limited to one texture and one UVmap per vertex.

    Last point about 3DStudioMAX: if you export in .3DS, you may have your models totally exploded when they are loaded in Hyperion. This is due to the manipulation of the pivots. Once way to solve this problem is to reset the transformation before exporting.
    Read the detailed explanation here: http://www.ozone3d.net/smf/index.php/topic,713.0.html

    Cinema4D is not designed to export model for real time apps. C4D can directly export in .3DS or .OBJ but normals and materials are not well managed. Only Riptide can do a good result but in some cases, there are still bugs in the export.

    Conclusion: if you have the possibility, use 3DStudioMAX 7/8 and the Wak Exporter. But .3DS or .OBJ can be good alternative depending your needs.

    Hyperion: 3D temps réel à la portée de (presque) tous

    December 5th, 2007 Posted in Demoniak3D, FR | No Comments »

    On peut découvrir sur le blog de Benoît Rogez (aka shadow sur le forum) une présentation d’Hyperion:
    LIEN: http://www.shadows.fr/blog/hyperion-3d-temps-reel.

    Noël approche…

    December 4th, 2007 Posted in 3D, Demoniak3D, Demos, Wip | No Comments »

    En cette période de fin d’année, les productions autour du thème de Noël commencent à montrer le bout de leur nez. En voici une faite par shadow, un des membres du forum:

    Cette vidéo ne montre pas encore la version finale. Bon travail shadow!

    LUA programming tips & tools

    November 28th, 2007 Posted in Demoniak3D, Lua, Programming, Tips'n'Tricks | No Comments »

    Developing LUA code for Hyperion can be somewhat frustrating if you don’t follow some guidelines to code, test and debug before launching it in Hyperion. Here is how I work:

    1. I extensively use LuaEdit. LuaEdit is a complete IDE for LUA that offers an editor with syntax coloring and auto completion, syntax checking, plus a complete debugger with step by step, breakpoints and variables watch. It also includes some project management features, alas still a bit unstable. It’s the best IDE I found for LUA, and it’s free : get it !
    2. I write my code in order to test it as much as possible outside Hyperion. The trick is to have a variable set to true if the code runs in Hyperion and false otherwise. Either I include
      hyperion = true

      in my script, or I put something like

      if HYP_GetBaseDir then hyperion=true end

      somewhere at the beginning of my code to detect if any Hyperion API function is defined.

    3. Then I use the “hyperion” variable to alter the execution of low-level functions. A quite important function to define this way is
      function require(file)
          if hyperion then
              dofile(HYP_GetBaseDir()..file)
          else
              dofile(file)
          end
      end

      which ensures files are included the same way in Hyperion or outside it.(*)

    4. LUA allows to define functions twice and “instantiate” only one. For example, one could also have written :
      if hyperion then
          function require(file)
              dofile(HYP_GetBaseDir()..file)
          end
      else
          function require(file)
              dofile(file)
          end
      end

      This is useful for performance critical functions, or to clearly distinguish test code from Hyperion code

    5. Another useful trick is to define:
      function log(s)
          if hyperion then HYP_Debug.Trace(s) else print(s) end
      end

      this enables easy tracing whether in Hyperion or not

    6. Of course it’s not possible to test a complex interactive graphics application outside Hyperion, but most functions can be tested by creating “unit testing” modules, which can fool the tested code by emulating the required Hyperion API. For example :
      -- this is the function that must be tested:
      function IsLeftOf(id1,id2)
          local x1,y1,z1 = HYP_Object.GetPosition(id1)
          local x2,y2,z2 = HYP_Object.GetPosition(id12)
          if x1<x2 then return true else return false end
      end
      
      -- this is the test code
      -- emulate the Hyperion API functions we need
      HYP_Object={}
      HYP_Object.GetPosition = function(id) return id,4,5 end
      
      assert(IsLeftOf(1,2))

    Using the tricks above, I’m able to run, test and debug 90% of my code in LuaEdit, before launching it in Hyperion. This saves me a lot of time and hopefully will lead to reliable libs that you’ll be able to use very soon.

    (*) Note : Hyperion doesn’t support the standard “require” LUA function, which ensures a file is included only once. By redefining it, we reach 2 goals :

    1. by using dofile(), an included file is read the same number of times either in Hyperion or outside of it,
    2. when JegX will implement “require” in Hyperion, we’ll only have to remove the function.

    Ageia PhysX Drivers 7.11.13

    November 23rd, 2007 Posted in Ageia PhysX, FR, News | 1 Comment »

    Ageia vient de mettre à jour ses pilotes pour cartes PhysX.

    Les pilotes sont dispo ici: PhysX Drivers 7.11.13 for XP/Vista.
    Les release notes sont disponible ici: Release Notes – PDF.

    Les pilotes PhysX sont nécessaires pour faire fonctionner les demos Hyperion utilisant la librairie HYP_Nx_Physics de la host API Hyperion/LUA.

    ImageMagick

    November 18th, 2007 Posted in 2D, Programming, Texture, Utility | 2 Comments »

    If you like Hyperion, then you like graphics and programming, and you’ll like ImageMagick too. The best way to describe this fantastic free tool is “programmable Photoshop” : you can create, manipulate and process 2D images with all the powerful functions of an advanced graphics package, but with code lines instead of a GUI and a mouse.

    ImageMagick can be used from many languages such as Python or C++, alas not yet LUA, and, of course, from a DOS batch file. This makes it very interesting to automates some operations on textures, or to create graphics for HUDs like in the examples below:

    This simple batch creates buttons images with each of the 7 words in the “items” list :

    set items=Home Previous Next First Last Help About
    set params=-fill black -font c:\windows\fonts\verdanab.ttf
    rem Create blank rounded button, as a base for all the others:
    convert -depth 8 -size 90x18 -frame 3X3+3+0 -blur 1x1 xc:silver blank.png
    for %%a in (%items%) do
        convert %params% -draw "text 8,16 %%a" blank.png %%a.png
    for %%a in (%items%) do convert -gamma 1.5 %%a.png %%a_h.png
    for %%a in (%items%) do convert -roll +1+1 %%a.png %%a_c.png

    Three .png files are created for each button, one in “normal” state, one highlighted for mouse over, and one when clicked :

    about.png about_h.png about_c.png

    Here they look very basic, but with more code you can do just anything you want : check here to have an idea of what’s possible to do with ImageMagick

    In a forthcoming article on HUDs, I’ll show a complete User Interface on Hyperion, with sophisticated graphics created with ImageMagick, and object oriented LUA code to handle it.

    Stay tuned !

    Comments in LUA

    November 15th, 2007 Posted in Lua, Tips'n'Tricks, UK | No Comments »

    As you know, you can put comments in LUA with the double hyphen (–):

    -- This is a comment
    DoSomething();
    
    -- This is another comment.
    ReDoSomething();

    But the double hyphen is not very convenient for commenting multiple lines. Like in C language, there is a multi-lines comment:

    --[[
    This is a ...
    multiline...
    comment!
    --]]
    DoSomething();

    This multiline or block comment is really cool since you can enable or disable a piece of code using a single hyphen.
    Hereafter, the function mySqr_v1 is commented:

    --[[
    function mySqr_v1(a)
    	return a * a;
    end
    --]]
    
    function mySqr_v2(a)
    	local b = a*a;
    	return b;
    end

    and now, you can simply uncomment it with one hyphen:

    ---[[
    function mySqr_v1(a)
    	return a * a;
    end
    --]]
    
    function mySqr_v2(a)
    	local b = a*a;
    	return b;
    end

    Now both functions are active!

    Wath-out: –[[ .... --]] is the right manner. I often see –[[ .... ]]– which seems to work but it’s wrong.

    Three new demos released

    November 14th, 2007 Posted in Demos, News, UK | No Comments »

    With the release of Hyperion 1.16.0, I released three new demos:

    Hyperion 1.16.0 released!

    November 14th, 2007 Posted in Ageia PhysX, Demoniak3D, News, UK | No Comments »



    Another version of Hyperion has been released. This version adds many new functions to deal with Ageia PhysX engine joints. Joints allow to link two objects together with some constraints on the motion.

    I put back the shortcut in the Explorer context menu. That allows to load XML scenes file from everywhere just with the right click on the file. To add Hyperion in the Explorer context menu, go to the “Tools” menu of Hyperion and click on “Add Hyperion to Explorer”. You will see a new entry in the Explorer context menu: [Open with Hyperion].
    To remove this entry, just click on “Tools -> Remove Hyperion from Explorer”.

    More info about Hyperion: Hyperion Homepage.
    Release notes: changelog.
    As usual, you can download Hyperion here.

    Enjoy!

    Ageia PhysX Distance Joint Demo

    November 12th, 2007 Posted in Ageia PhysX, Demos, UK | No Comments »

    Distance joints are very cool and allow to do some funny things like this pendulum simulation:

    The balls become red when they are selected with 3D picking. Once a ball is selected, the space key allows to throw it based on the camera position.

    Only in Hyperion 1.16.0+!

    Aaarrggghh Ageia n’aime pas VC6!

    November 12th, 2007 Posted in Ageia PhysX, FR | No Comments »

    La compilation du plugin Ageia PhysX avec VC6 pose toutjours un problème avec chaque nouvelle version du SDK de Ageia. Quelque part dans les profondeurs du SDK, on trouve la fonction suivante:

    NX_INLINE void NxSegmentPlaneIntersect(const NxVec3& v1,
    const NxVec3& v2, const NxPlane& plane, NxReal& dist,
    NxVec3& pointOnPlane)
    	{
    	return NxGetUtilLib()->NxSegmentPlaneIntersect(v1,
    		v2, plane, dist, pointOnPlane);
    	}

    VC6++ comme tout bon compilateur qui se respecte, trouve une belle erreur. La voyez-vous? …
    L’erreur vient du fait que la fonction est prototypée avec un beau void devant alors que son implémentation effectue un return…

    Alors après une petite recherche sur le forum Ageia, je suis tombé sur la réponse du team Ageia: “We don’t support Visual Studio 6, as indicated on the first page of the documentation”…

    Ce qui veut dire que pour VC7 ou VC8, ce genre de fonction est correcte ????

    Pas grave, je ne m’arrête pas à ce genre de problème. Une petite suppression du return et tout rentre dans l’ordre. Hyperion ne semble pas être trop affecté par cette fonction bancale (du moins pour le moment…).

    A part ce bug, la compilation du plugin ageia physx avec VC6 se déroule bien et donc il semblerait quand même que VC6 soit bien supporté par Ageia.

    Liste des Meshes d’un Modèle 3D

    November 11th, 2007 Posted in Demoniak3D, FR, Lua, Tips'n'Tricks | No Comments »

    Un modèle 3D dans hyperion est, par défaut, une hiérarchie à un niveau: la racine est l’objet modèle lui même (réduit à un gizmo) et le premier niveau de la hiérarchie représente tous les meshes qui composent le modèle.

    La question intéressante est de savoir comment manipuler toute cette structure en LUA. Il existe pour cela quelques fonctions dans la lib HYP_Object. Pour commencer, nous avons HYP_Object.GetNumChildren() qui nous renvoie le nombre d’enfants du premier niveau de hiérarchie d’un objet. Ensuite nous avons HYP_Object.GetChildByIndex() qui permet de récupérer un enfant précis du premier niveau de la hiérarchie. D’autres fonctions existent ( HYP_Object.GetChild(), HYP_Object.GetNameFromId(), … ) mais les deux premières sont suffisantes pour effectuer l’enumération de la liste des meshes d’un modèle.Je vous propose donc une petite fonction récurvive pour parcourir la hiérarchie complète d’un modèle:

    function processChildren( parent )
    	local num_children = HYP_Object.GetNumChildren( parent );
    	local i=0;
    	while(i<num_children) do
    		child = HYP_Object.GetChildByIndex( parent, i );
    		DoSomethingWithChild();
    		processChildren( child );
    		i = i + 1; -- next child
    	end
    end
    
    processChildren( "humanModel" );

    Hyperion 1.15.1

    November 8th, 2007 Posted in Demoniak3D, FR, News | No Comments »

    Je viens de mettre online une bugfix release d’Hyperion. Le calcul des normales est de nouveau opérationnel pour les modèles 3D chargés à partir de fichiers ne contenant pas les normales.
    Hyperion 1.15.1 Download.

    Ageia PhysX Revolute Joint Demo

    November 8th, 2007 Posted in Ageia PhysX, Demos, UK | No Comments »

    Here is a small video that shows the use of the revolute joint of the upcoming Hyperion 1.16.0.