Microbe3D: Micro Moteur 3D pour les fichiers Wavefront .OBJ utilisant Warp3D
Microbe3D.library: Alain Thellier - Paris - FRANCE - 2011-2013 
Microbe3D est une couche par dessus Warp3D. Ce qui permet de simplifier 
l'utilisation de la 3D 

Pourquoi Microbe3D?
Microbe3D est un petit moteur 3D qui affiche directement des fichiers Wavefront 
.OBJ
MICROBE3D veut dire "MICRo .OBj Engine for warp3D" (Micro Moteur Warp3D pour 
fichiers .OBJ)

La philosophie générale est "Faire simple et toujours plus simple"
0) Microbe 3D est rapide et beau
1) Pas besoin de connaitre des centaines de fonctions comme avec OpenGL
2) Pas besoin  d'essayer de comprendre comment peut donc fonctionner Warp3D
3) Pas besoin de mettre plein de "States" pour obtenir un effet particulier
4) OpenGL est  orienté "traçage" : En permanence vous tracez des faces, des 
points, des couleurs, etc ..
Mais Microbe3D est orienté objet 3D : il suffit de charger un objet 3D dans la 
Scene puis de tracer la Scene entière avec une seule fonction
5) Si Microbe3D contient 40 fonctions alors mon but est "Peut-il être fait avec 
35 fonctions pour le rendre encore plus simple?"
6) Ainsi quand une fonction fait quelque chose de similaire à une autre, 
j'essaye de faire une fonction générique qui pourrait traiter différentes 
"Things" (choses)
7) Pas besoin de savoir ce que vous manipulez: toutes les structures sont 
privées. Ainsi le programmeur manipule seulement des pointeurs génériques (APTR 
= une adresse mémoire)
8) Lorsque vous appelez une fonction avec un pointeur sur une "Thing", alors 
Microbe3D devinera automatiquement ce qu'est cette "Thing"  (Object, Scene, 
Light, Instance)
9) Microbe3D est orienté objet 3D vous ne dessinez pas ni construisez vos objets 
3D dans Microbe3D = il suffit de les créer avec vos applications 3D favorites 
(comme Blender)
Puis de les exporter sous  .OBJ. .MTL JPG
                        [Menu Blender: Fichier/Exporter/Wavefront (  .OBJ)]
10) Maintenant (Fevrier 2013) Microbe3D a 34 fonctions, mais en fait, vous aurez 
besoin de moins de 10 fonctions Microbe3D pour faire un programme 3D qui marche 
11) Avec Microbe3D vous pouvez facilement ajouter un objet 3D  en mouvement 
(logo tournant, etc ..) à vos applications Amiga
12) Mais Microbe3D est encore un petit moteur 3D alors ne vous attendez à créer 
"Quake" avec ;-)

Un modèle d’objet 3D sous OS 4 avec plusieurs éclairages

 

MICROBE3D Implémentation des Bones/Skins (développment en cours sept 2013)

Exemple sur partygirl.obj
Définition des bones dans Excel avec retour visuel sur image de face et coté
(graph points)
Par exemple  un « bone » sera défini entre « Coude » et  « Poignet »
Visualisation des « bones » en rouge
Chaque bone est défini par 2 points (exemple « coude » à « poignet ») et une
distance à ce segment nommé « BONE->radius » = rayon
Ces 2 points et ce rayon définissent donc un « cylindre » englobant le bone
Grace à l’algo de Fab tout les points de la « Skin » compris dans le cylindre
rouge (exemple « coude » à « poignet ») sont affecté au BONE (« coude »)

Modèle de base et cylindres des bones :


Après les « Instance »s de Microbe3D (cad des axes) permettent de bouger les
bones :

Modèle récent à 21 bones y compris pouce,orteils,tete
            Torse
            Cou
            Tete

            EpauleG
            CoudeG
            PoignetG
            DoigtsG
            PouceG
            HancheG
            GenouG
            ChevilleG
            OrteilsG

            EpauleD
            CoudeD
            PoignetD
            DoigtsD
            PouceD
            HancheD
            GenouD
            ChevilleD
            OrteilsD

Resultat une fois tout les bones déplacés (remarquer le cou, les mains et le
bout des pieds)

Modeles Anciens à 14 bones (pieds et mains sans bones)
 
 

Hierarchie des 14 bones et ancienne représentations des bones (triangles)
Jolie pose « je suis une fille rebelle j’ai des grosse bottes » mais bug à
l’entrecuisse & Epaule droite


Erreur sur Epaule droite mais jolie pose ‘oui j’aurai pu faire de la danse
classique »

 

A FAIRE
Partage de force entre 2 bones = articulation souple (implémenté à bogue)
Gestion des amplitudes (limiter les positions possibles pour bone = pas
contorsionniste) (implémenté à tester)
Definition de l’axe « naturel » du Bone (à faire)
Eclairage gestion des vertex-normales dans ce cas (à faire = gros morceaux…
nombreux problèmes théoriques)

Alain Thellier – 2013



 Nouvelle version de Microbe3D:  Bones souple et fichier.BON - 27 Sept 2013

NOUVEAU
- Limitation de l'amplitude des mouvements des bones (contrainte)
- Partage de force entre deux bones = articulations souples (voir torse-bassin de partygirl)
- Peut charger ses propres fichiers définissant les bones
- 2 exemples de fichiers bones joints :
  partygirl.bon = classique avec qques ajustement pour un meilleur rendu
  vanille. bon = nouveau en test par encore 100% parfait
- fichiers excel ayant servi à définir les bones joints

ATTENTION: ne pas tester vanille.bon devant votre femme ;-)

Partage de force - Théorie du fonctionnement

Toujours plus souple la PartyGirl (noter la jonction souple bassin-torse)

Il existe 2 nouveaux concept dans Microbe3D
Les Bones
Les Skins

Les bones sont des articulations créées à l'intérieur d'un même objet 3D
Ces articulations s'appliquent à une partie de l'objet qui bouge avec le bone comme un peau.
Il s'agit en fait d'une liste de points à qui on applique le mouvement de l'articulation
Exemple: soit un objet3D humain
On définit 3 axes : épaule, coude, poignet
Le bone "bras" est de epaule à coude
Le bone "avantbras" est de coude à poignet
Les points les plus proches de "bras" sont affectés à la skin de "bras"
Les points les plus proches de "avantbras" sont affectés à la skin de "avantbras"
(ici intervient aussi BONE->radius le rayon du cylindre définissant le bone)

Si on procéde simplement ainsi l'articulation aura la forme d'une cassure comme un bout de bois cassé et sera pas souple comme un tuyau de caoutchouc
Donc j'ai ajouté le partage de force: un partie du bras est déformée (=le coude) par le mouvement du bras et de l'avant bras
Néanmoins la plupart des articulations humaines sont assez raides ce sont pas des bras de poulpe donc il faut limiter ce partage
Ainsi le coude déforme les 5 dernier cm du bras et les 5 premiers cm de l'avant bras
J'ai mis ce ratio en pourcentage : les 20 derniers % du bras et les 20 premiers % de l'avant bras donc 0.8 et 0.2
J'appelle ces valeurs BONE->min (généralement 0.2)  BONE->max (généralement 0.8)
Une articulation raide = 0.1 et 0.9 ou souple = 0.4 0.6

Fichiers .BON
Désormais on peut affecter des Bones/skins à un Objet 3D soi même
Deux exemples: PartyGirl.Bon et vanille.bon
Et les fichiers Excel pour poser les axes

Syntaxe:

Read vanille/vanille_nude.obj
Charge le fichier objet 3D sur lequel on va créer des Bones/skins
 
 
BoneAxis Bassin 0.00 0.09 0.00
BoneAxis EpauleG 0.17 0.63 -0.03
BoneAxis CoudeG 0.35 0.44 -0.03
BoneAxis PoignetG 0.56 0.24 -0.03
BoneAxis définit les axes (articulations) des Bones mais aussi leur point extrémité
 
Bone Bassin Scene Bassin Torse
BoneInfluence 0.25  0.2  0.21
BoneRmax 180.0 180.0 180.0
BoneRmin -180.0 -180.0 -180.0

Bone BrasG Torse EpauleG CoudeG
BoneInfluence 0.065  0.2  0.8
BoneRmax 130.0 85.0 55.0
BoneRmin -80.0 -60.0 -100.0


Bone crée un nouveau Bone
BoneInfluence definit quel point seront dans le bone et le partage de force
BoneRmax et BoneRmin donnent l'amplitude du mouvement de rotation d'un Bone

Bone BrasG Torse EpauleG CoudeG
BrasG est le nouveau bone
Torse est le BoneParent
EpauleG l'axe de rotation
CoudeG la fin du bone
 
Bone Bassin Scene Bassin Torse
Bone Torse Parent Torse Tete
Bone Tete Parent Tete Crane
BoneParent peut être "Scene" si pas de Bone parent
ou "Parent" si c'est le Bone précédent
BoneInfluence 0.065  0.2  0.8
Definit radius min max pour ce Bone
radius 0.065 peut se comprendre comme "prendre tout les points à 6.5 cm de l'os de l'avant bras"

Voilà , Convaincu mon gars ?

Alain Thellier – 2013