Tales Of Tamar 3D Map La page de son programmeur
  Le début
J'ai été contacté par Martin Wolf, créateur de Tales of Tamar, en mai 2003.
Je venais juste d'ecrire ma Woof3D.library qui permettait sur PC, Amiga et Linux de manipuler de petits objets 3D (mais je vous déconseille de downloader ce programme obsoléte et buggé).
La carte 3D de Tamar était en projet dans l'équipe de Martin et je tombais donc à pic avec mon programme lui aussi multi-plateforme

Néanmoins Tot3D n'est pas basé sur les sources de Woof3D (heureusement) mais sur une réécriture compléte d'un moteur 3D.
Normalement ce moteur 3D devrait servir de fondation à une Woof3D.library version 2 mais je n'en ai jamais le  temps

  • Alain Thellier (moi) ait écrit la totalité du code de la 3D map (542 ko de sources) pour OpenGL et Warp3D
  • Arkadius Zielinski a initié le  projet de 3D Map  et l'a énormément soutenu durant ces années en imaginant et fabriquant la (presque) totalité des objets 3D.
  • Martin Wolf a fourni la documentation et le soutien sur les fichiers et structures des cartes.
  • Carsten Berger a créé la nouvelle GUI qui sert désormais aussi dans TOT2D
  • Stephan Schäfer a porté (et nettoyé) mon code dans les sources globales de Tales of Tamar 
  La galére des exports

Dès le début nous avons été confonté au problème d'importation des objets
Une grande part du développement a consisté à écrire des loaders permettant d'importer des fichiers dans le moteur 3D.
Ainsi au fil des mois nous avons utilisés
  • Le Game Exporter Okino (GOF,GAF,GMF)
  • Le format OBJ
  • Le format RTG
Aucun n'était satisfaisant...

Un dragon créé par Arkadius et exporté par Alain
Pour le fun j'ai codé aussi des loaders
  • LightWave (LWO)
  • Cinema4D (C4D)
  • Videoscape3D (GEO)
  • Caligari24 (SOB)
  • Flight Simulator (MDL)
Et un Saver pour le format OBJ

La fameuse vache au format Lightwave, exportée puis texturée par Alain

Corollaire il a aussi fallu créer un format de fichier pour sauvegarder nos objets car aussi incroyable que cela paraisse et malgré le nombre incroyable de formats de fichiers 3D existant il n'existait aucun format sauvegardant à la fois dans un seul fichier les objets, leur hiérarchie, leurs animations, leurs coordonnées UV et leurs images textures.
Ainsi le moteur 3D peut aussi servir de Visualiseur / Convertissseur d'objets 3D c'est à dire qu'il charge dans des listes temporaires les objets grace aux différents loader (LoadOBJ, LoadGOF, LoadMC4D, LoadGEO, LoadRTG, LoadMDL, LoadSOBJ, LoadLWO) puis les convertit en format natif et le sauve en fichier .TOT
Seuls les objets en format natif .TOT sont alors chargés dans la Carte (LoadTOT)
 

  Le format .TOT

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 

Dès le début je pensais créer un format binaire pour nos objets
J'avais espéré qu'il soit conforme au standard IFF mais ce but n'a été atteint que récemment
Néanmoins dès le début il reprenait le concept des chunks 
 
Chaque chunck ayant un header et étant rempli d'une liste de choses d'un seul type.
Ainsi tout les objets 3D se suivent, toutes les textures, toutes les bitmaps,tout les points,etc...
Les animations complétes et les bitmaps des textures sont dedans aussi..
Ce format est vraiment très compact : par exemple le fichier contenant toute l'animation du busard (rapace) qui sert de pointeur ne fait que 64 Ko.
La consommation de mémoire
N'importe quel programmeur peut comprendre comment marche la 3D Map
(=comme un grand échiquier) et espèrer en faire une rapidement. Mais ne triomphez pas car moi aussi dès lors que j'ai réussi à afficher (charger les fichiers de) mes premiers hexagones je faisais ma première carte. Mais périodiquement reviens le même problème:  l'envahissement par les données.
Avec la 3D Map il ne s'agit pas de faire un moteur affichant impeccablement un seul objet même très beau et constitué de milliers de points mais bien plutôt d'afficher n'importe quel point d'un monde contenant des milliers d'hexagones et de personnages.
Au fur et à mesure que l'on ajoutait les nouveaux objets conçus par Arkadius Zielinski le moteur 3D était plus envahi par les données.
Il fallait donc périodiquement revoir les fondements du moteur 3D pour lui faire utiliser moins de mémoire et tracer moins de facettes.
Ce travail ne se voyait pas (aucune amélioration esthétique visible) mais était périodiquement nécessaire.

Juste quelques uns des hexagones créés par Arkadius

Et ça fait quoi ?
 

Le moteur a été conçu comme un programme indépendant qui charge des cartes sous forme de fichiers *.map et MapPrefs.tot de l'ancien Tales of Tamar et les affiche sous forme d'une vue 3D pour ce faire il dispose de ses 426 fichiers .TOT (au moins 426 objets 3D)
  • 13  d'objets généraux
  • 45  de personnages
  • 92  d'hexagones * 4 saisons 
On peut donc tourner, basculer (flip) redimensionner la carte (zoom).
Les déplacements peuvent être relatif à la position écran ou absolu selon la carte
Comme dans la carte 2D une "MiniMap" sous forme de compas donne une vue plus générale de la carte.
Le ciel tourne avec la carte, la nuit peut tomber avec un lever de lune et un coucher de soleil.
Les quatre saisons sont inpléméntées et donc les hexagones existent en 4 modéles et aussi dans une version moins détaillée selon le zoom


La neige en Hiver

A l'automne il pleut plus ou moins, en hiver c'est de la neige. Pour ces deux saisons le vent souffle plus ou moins sur les arbres et les courbe plus ou moins fort.
Certains personnages sont animés et peuvent attaquer ou marcher jusqu'à un hexagone 
Les vagues sont animées et les bateaux dessus aussi
Un bouclier tourne et un busard (un rapace) vole en rond. Ces deux animations servent de pointeur de l'hexagone séléctionné.

Les hexagones des ruines ont une animation de feu et de la fumée
 

Les barrières rouges ou bleues des joueurs peuvent être affichées
Une gestion des cotes en bord d'eau est implémentée (optionnelle)
 
OldLook2D
Est une option qui fait afficher au moteur 3D comme l'ancienne carte 2D.
Bien sur tout est calculé en 3D en fait.
Donc cela demande bien plus de ressources (mémoire et CPU) que l'ancienne carte à base d'images 2D.
Par contre l'aspect est beaucoup plus lissé, plus moderne et l'affichage est plus rapide que la 3D Map (car tout est simplifié)


Fumée et Feu

  Les portages

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 

WINDOWS
Les premiers développements ont été faits en utilisant Woof3D pour le rendu mais très rapidement je suis passé à OpenGL + GLUT.
LoadTOT/saveTOT utilise LibJPEG et les autres loader DEVIL
Tout le développement est fait sous Windows avec LCC-Win32 + le débuggeur de VisualC
 

LINUX
Ceci à permis d'obtenir un éxécutable Windows et très rapidement un éxécutable Linux (les sources sont vraiment les mêmes, seule la compilation avec GCC change) 

AMIGA 68040
Pour obtenir une version Amiga une faible nombre de fonctions ont été wrappées (20% du code) Ce sont les fonctions d' Ouverture/Gestion de fenêtre/écran (car GLUT est mal implémentée sur AmigaOS et n'est donc pas utilisée) et bien sûr les quelques fonctions de tracé 3D s'appuyant sur Warp3D.

Un des rares grabs faits sur un Amiga4040 avec CV64-3D. A cette époque le clipper3D n'avait pas été implémenté pour cette version (voir coté gauche)

Comme les fonctions de  tracé sont rarement modifiées normalement la recompilation des nouvelles versions sur AmigaOS se passe sans problèmes.
La version Amiga 68040 demande beaucoup de ressources. Ellle avait été testée partiellement sur un Amiga4040 + CV64/3D mais le manque de mémoire empéchait de charger toutes les données de la carte. Le 68040 était trop faible aussi pour afficher plus de quelques FPS.
Cette version est compilée dans WiNUAE avec GCC en utilisant le répertoire des sources coté PC 

WINUAE
QuarkTex peut permettre d'émuler Warp3D uniquement dans WinUAE (c'est un wrapper Warp3D/AmigaOS -> OpenGL/Windows)  et donc pourrait permettre de lancer Tot3D dans WinUAE ... malheureusement j'ai eu des problèmes avec cette library qui ne semble pas compatible avec tout les drivers OpenGL (Virge sur K6 par exemple).
Un petit rendu soft a donc été ajouté: il est rustique et ne marche que sous des WinUAE vraiment très rapides avec JIT.
Note 2006:
Ces routines de tracé software CPU ont été intégrées en 2006 à une réimplémentation de Warp3D devenue "libre" en 2007 et nommée Wazp3D http://thellier.free.fr/Wazp3D.htm
Donc désormais les versions Amiga et WINUAE ne sont plus qu'une et basée sur Warp3D (émulée par Wazp3D ou QuarkTex )
 


Le rendu soft sous WinUAE

MORPHOS
La version Morphos est la version Amiga recompilée sur un PegasosII avec les drivers Radeon prototypes. Quelques problèmes d'affichage (fog,etc..) sont peut être dus au driver mais les performances de la carte 3D compléte avec toutes les options restent honorables (son chargement est même bien plus rapide que sur PC)
Cette version est obtenue avec GCC en modifiant juste un peu le makefile de la version Amiga 68040. Les sources sont exactement les mêmes que la version AmigaOS 68040

AMIGAONE
Faute de disposer d'un AmigaOne il n'existe pas de binaire PPC pour lui
Mais comme sur Pegasos la version AmigaOS 68040 marche très bien avec la JIT, alors ce binaire 68040 doit (?) certainement marcher sur un AmigaOne + JIT
(et au moins les affichages Warp3D y seront faits par la Warp3d.library PPC de l'AmigaOne)
 

Alain Thellier  - Paris - France - Juin 2006