Three.js: Exportateur GLTF

CrĂ©Ă© le 15 aoĂ»t 2017  Â·  85Commentaires  Â·  Source: mrdoob/three.js

J'aimerais utiliser ce problĂšme pour suivre les fonctionnalitĂ©s de l'exportateur GLTF2. J'ai copiĂ© la liste initiale des fonctionnalitĂ©s discutĂ©es sur le PR https://github.com/mrdoob/three.js/pull/11917 et je continuerai Ă  mettre Ă  jour la liste au fur et Ă  mesure que nous progressons dans la mise en Ɠuvre.

FonctionnalitĂ©s / À FAIRE

  • [x] Options d'exportation

    • [x] trs pour exporter TRS au lieu de la matrice

    • [x] input :

    • [x] ScĂšne unique

    • [x] Tableau de scĂšnes

    • [x] Objet unique

    • [x] Tableau d'objets

    • [x] truncateDrawRange : force Ă  exporter uniquement les valeurs d'attribut dĂ©finies par drawRange :

    • [x] GĂ©omĂ©trie de tampon sans index

    • [x] GĂ©omĂ©trie tampon indexĂ©e

  • [x] Inclure userData dans extras ?
  • [x] ScĂšnes

    • [x] Prise en charge de plusieurs scĂšnes

  • [x] nƓuds

    • [x] mailles

    • [x] Mode primitif :



      • [x] TRIANGLE


      • [x] TRIANGLE_STRIP


      • [x] TRIANGLE_SPAN


      • [x] POINTS


      • [x] LIGNES


      • [x] LINE_STRIP


      • [x] LINE_LOOP



    • [x] Types de gĂ©omĂ©trie :



      • [x] BufferGeometry


      • [x] GĂ©omĂ©trie



    • [x] Attributs primitifs :



      • [x] POSTE


      • [x] NORMAL


      • [x] TEXCOORD_0


      • [x] TEXCOORD_1


      • [x] COULEUR_0


      • [x] JOINTS_0


      • [x] POIDS_0


      • [x] TANGENTE



    • [x] Maillages multi-matĂ©riaux comme primitives

    • [x] LumiĂšres

    • [x] CamĂ©ra

    • [x] Peau

  • [ ] MatĂ©riaux :

    • [x] Ignorer si le matĂ©riel par dĂ©faut est utilisĂ©

    • [x] Exporter sous forme de lignes si material.wireframe === true

    • [x] pbrMetallicRoughness pour MeshStandardMaterial

    • [x] Attributs :



      • [x] baseColorFactor


      • [x] metallicFactor


      • [x] roughnessFactor


      • [x] baseColorTexture : C'est supportĂ© ( material.map ) mais le texCoord est toujours mis Ă  0.



    • [x] doubleSided

    • [x] KHR_material_unlit

  • [x] Échantillonneurs
  • [ ] Images

    • [x] uri utilisant map.image.src

    • [x] uri base64

    • [x] bufferView

    • [x] Traiter les images flipY

    • [ ] Fusionner les canaux en une seule texture

  • [ ] Accesseurs

    • [ ] Utilisez le mĂȘme bufferView pour le mĂȘme componentType au lieu d'en crĂ©er un nouveau pour chaque attribut (WIP @takahirox)
    • [x] Prise en charge sparse ?
    • [ ] Attributs :
    • [x] bufferView
    • [ ] byteOffset : Actuellement, il utilise toujours 0 car je crĂ©e un nouveau bufferView pour chaque accesseur.
    • [x] componentType
    • [x] count
    • [x] max
    • [x] min
    • [x] type :

      • [x] SCALAR

      • [x] VEC2

      • [x] VEC3

      • [x] VEC4

  • [ ] BufferViews : Actuellement, je crĂ©e un nouveau bufferView pour chaque Accessor , cela devrait ĂȘtre corrigĂ© pour n'en utiliser qu'un pour ces attributs qui partagent le mĂȘme componentType

    • [x] Attributs :
    • [x] buffer
    • [x] byteOffset
    • [x] byteLength
    • [x] byteStride
    • [x] target
  • [x] Buffers : actuellement, je sauvegarde tout dans un seul tampon, ce sera donc une seule entrĂ©e dans le tableau des tampons.

    • [x] octetLongueur

    • [x] uri

  • [x] Animations
  • [ ] divers :

    • [ ] Valider la sortie (https://github.com/KhronosGroup/glTF-Validator)

    • [ ] Inclure l'option stats pour enregistrer le nombre d'Ă©lĂ©ments exportĂ©s et peut-ĂȘtre un certain timing ?

  • [x] GLB

Exemple

Démo actuelle :
image

Gltf exporté chargé sur la visionneuse de
image

GLTF : https://gist.github.com/fernandojsg/0e86638d81839708bcbb78ab67142640

Enhancement

Commentaire le plus utile

Espérons que les maillages multi-matériaux seront implémentés dÚs que possible car la plupart des modÚles 3D utilisent des multi-matériaux.

Comme je l'ai dit dans l'autre fil, j'y travaille.

Tous les 85 commentaires

Ça a l'air vraiment bien!

Au fait, nous prĂ©voyons de supprimer THREE.GLTFLoader et de renommer GLTF2Loader → GLTFLoader bientĂŽt*. Cela pourrait ĂȘtre une bonne idĂ©e de renommer l'exportateur en GLTFExporter avant que r87 n'arrive, pour Ă©viter toute confusion et ainsi il n'y aura pas de changement de nom requis entre les versions. Oups, j'ai ratĂ© que tu l'aies dĂ©jĂ  nommĂ© ainsi.. continue ! ??


* @mrdoob , une prĂ©fĂ©rence quant au moment oĂč cela devrait se produire ? OMI, nous pourrions le faire maintenant, Ă  moins que nous ne voulions conserver GLTFLoader dans r87 avec juste un avertissement de dĂ©prĂ©ciation, et le supprimer dans r88 ?

Je pense que le plus tÎt sera le mieux. Tant que le nouveau GLTFLoader est capable de détecter 1.0 et d'avertir l'utilisateur que nous ne prenons en charge que 2.0+.

IIRC, nous pouvons détecter en voyant asset comme je l'ai mentionné précédemment.

IIRC, nous pouvons détecter en voyant l'actif comme je l'ai mentionné précédemment.

Ouais ! https://github.com/mrdoob/three.js/pull/11864

Frais! Mais j'ai trouvé un bug mineur. Je fais des relations publiques maintenant. Fusionnons avant de renommer.

Pouvons-nous spécifier les éléments sur lesquels quelqu'un travaille dans la liste de contrÎle ?

@takahirox bien sûr ! les gens pourraient simplement écrire des commentaires ici et je pourrais mettre à jour la liste et pointer vers un PR s'il se passe déjà quelque chose

La prochaine chose que je vais travailler est sur les textures, pour les convertir en base64 au lieu d'utiliser uniquement l'url

Merci! Je veux aider Ă  faire de l'exportateur glTF. Je cherche ce que je peux aider dans la liste de contrĂŽle...

BTW avez-vous volontairement laissé deux variables WEBGL_CONSTANTS et THREE_TO_WEBGL globales ?

@takahirox cool !
En ce qui concerne les deux variables, c'est quelque chose que je vais aborder dans le PR suivant pour en faire une partie du WebGLUtils et simplement l'importer. Cela n'a pas de sens que chaque personne qui a besoin de ces constantes doive les redéfinir à chaque fois.

@takahirox d' ailleurs n'hésitez pas à proposer de nouveaux articles à la liste bien sûr ! ;)

@fernandojsg Bien sĂ»r ! À propos des variables, je voulais proposer de les dĂ©placer quelque part si elles sont dĂ©libĂ©rĂ©ment dĂ©clarĂ©es comme globales, il est donc bon de savoir que vous le faites.

Je veux travailler sur la vue tampon partagée.

BufferViews : actuellement, je crĂ©e un nouveau bufferView pour chaque accesseur, cela devrait ĂȘtre corrigĂ© pour n'en utiliser qu'un pour ces attributs qui partagent le mĂȘme componentType

La raison pour laquelle un pour les attributs qui partagent le mĂȘme componentType, pas un pour tous les attributs, est pour l'alignement des donnĂ©es, n'est-ce pas ?

https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#data -alignement

Cool je viens de t'ajouter Ă  la liste au mĂȘme bufferview. Cela pourrait ĂȘtre un bon point de dĂ©part ;)

Je voulais dire, la raison pour laquelle nous ne laissons pas la vue de la mĂ©moire tampon ĂȘtre partagĂ©e entre diffĂ©rents types de composants (par exemple, float et short) est de conserver un bon alignement des donnĂ©es, n'est-ce pas ?

Je pense que vous pouvez stocker dans la mĂȘme vue tampon diffĂ©rents types de composants tant qu'ils ont le mĂȘme target , par exemple normal (Vec3) , position (Vec3) et uv (Vec2) pourrait ĂȘtre dans la mĂȘme vue tampon mais pas indices . @donmccurdy pouvez-vous le confirmer ?

Oui, d'accord. Et comme le mentionne cette spécification glTF

https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#data -alignement

Le dĂ©calage d'un accesseur dans un bufferView (c'est-Ă -dire accessor.byteOffset) et le dĂ©calage d'un accesseur dans un tampon (c'est-Ă -dire accessor.byteOffset + bufferView.byteOffset) doivent ĂȘtre un multiple de la taille du type de composant de l'accesseur.

C'est une bonne idée que nous séparions les vues de tampon entre les différents componentType (= type de données comme float et short, pas vec2 ou vec3) pour plus de simplicité. Si nous les séparons entre différentes longueurs de données componentType, ce serait plus optimisé.

BTW existe-t-il des raisons particuliÚres pour lesquelles l'exportateur actuel ne prend en charge que accessor.componentType float, uint et ushort ? glTF 2.0 peut gérer les caractÚres char, uchar et short, en plus d'eux.

https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#accessorcomponenttype -white_check_mark

@takahirox pas vraiment, je viens de les définir maintenant car ce sont ceux qui sont utilisés pour le type d'attributs que nous prenons en charge actuellement (positions, normales, couleurs, UV, indices..).
La prochaine Ă©tape sur laquelle je travaille concerne les textures, nous en aurons donc besoin d'autres comme uchar par exemple

OK, donc je vais d'abord travailler sur les accessor.componentType moins que vous n'ayez déjà commencé à implémenter.

Presque prĂȘt mais mon PR devrait entrer en conflit avec #11978.
J'envoie donc le mien une fois que #11978 est fusionné et je corrige le conflit.

Souhaitez-vous ajouter une animation à la liste ?

@takahirox bien sĂ»r, ça pourrait ĂȘtre gĂ©nial d'ajouter de l'animation. Je ne l'ai tout simplement pas ajoutĂ© car je ne connaissais pas assez l'Ă©tat actuel des fonctionnalitĂ©s d'animation sur three.js, mais si vous avez envie de le reprendre, ce serait gĂ©nial ;)

Prévoyez-vous de prendre en charge les groupes BufferGeometry ?
Les spécifications GLTF couvrent-elles cela ou entraßneraient-elles la création d'un nouveau maillage pour chaque groupe ?
Cela doit également prendre en compte, la propriété matérielle d'un maillage étant un tableau de matériaux.

@marcatec La spĂ©cification glTF a une distinction "mesh" vs "primitive" qui vous permettrait de crĂ©er des groupes BufferGeometry qui pourraient chacun rĂ©fĂ©rencer un matĂ©riau diffĂ©rent. Actuellement, THREE.GLTFLoader n'optimise pas les primitives de chargement — il crĂ©e des maillages sĂ©parĂ©s — mais cela pourrait ĂȘtre implĂ©mentĂ©.

Super travail, super liste et bon à savoir qu'il y a déjà tellement de soutien sur le format ! Fonctionne également trÚs bien avec l'exportateur de mélangeur gltf. J'attends avec impatience le support des lumiÚres ! Continuez ce bon travail.

Je confirme, beau travail !

Est-il prévu d'ajouter la prise en charge d'autres matériaux en dehors de StandardMaterial ?

Merci!

@homerjam toutes les propriétés de matériau partagées avec MeshStandardMaterial seront préservées - ainsi, par exemple, un MeshPhongMaterial utilisant map et normalMap exportera avec ces textures intactes, mais lorsque vous le réimporterez dans three.js il sera un MeshStandardMaterial. L'exportateur effectue actuellement une conversion naïve en PBR pour cela.

La prise en charge aller-retour (exporter Phong depuis GLTFExporter, charger Phong depuis GLTFLoader) nécessitera un travail en cours sur le format glTF : https://github.com/KhronosGroup/glTF/pull/1150

baseColorTexture : C'est supporté (material.map) mais le texCoord est toujours mis à 0

@fernandojsg pourriez-vous clarifier ce qui manque ici ? Étant donnĂ© que .map est toujours le premier jeu d'UV dans three.js, cela semble ĂȘtre la bonne façon de reprĂ©senter cela dans glTF ?

Aussi un avertissement, j'ai barré trois éléments sur la liste. Raisonnement ci-dessous :

  • tangentes

    • three.js ne les calcule que sur le GPU ; l'ajout d'une implĂ©mentation juste pour l'exportateur ne semble pas idĂ©al.

  • accesseurs clairsemĂ©s
  • vĂ©rifier si le matĂ©riau correspond Ă  la valeur par dĂ©faut de glTF et l'omettre

    • se sent comme un cas de bord / encombrement, n'hĂ©sitez pas Ă  mettre en Ɠuvre si quelqu'un se sent fortement cependant

En exportant vers GLB depuis l'éditeur, j'ai remarqué que alphaMap , roughnessMap et metalnessMap ne sont pas exportés.

En #13397, j'ai dit que normalMap ni l'

En exportant vers GLB depuis l'éditeur, j'ai remarqué qu'alphaMap, roughnessMap et metalnessMap ne sont pas exportés.

Je vais travailler dessus aujourd'hui, sauf si quelqu'un a déjà commencé.

@donmccurdy

accesseurs clairsemés
Je pense qu'il vaut mieux laisser cela Ă  l'optimisation post-export, comme le script de mattdesl.

Envie de laisser l'exportateur prendre en charge les accesseurs clairsemés pour le morphing. Je vais essayer plus tard.

@takahirox cool ! vas-y!

Je ne pense pas que alphaMap soit pris en charge dans glTF 2.0.

https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#material

Ouais, j'avais peur de ça.... Et les metalnessMap et les roughnessMap ?

Je travaille dessus maintenant !

13415

Concernant les formats d'images. glTF 2.0 ne prend en charge que les fichiers .png et .jpg en tant que fichiers image externes. Je réfléchis à la maniÚre de gérer les fichiers au format d'image non pris en charge (par exemple: .bmp) en mode non embedImages .

  1. Convertir en .png ou .jpg et incorporer
  2. Ne vous en souciez pas. Exporter en tant que fichiers image originaux
  3. Ne pas exporter

Je préfÚre 1. Des idées ?

Wow, j'apprécie vraiment le travail de vous les gars.

J'espÚre que Multi-material meshes sera implémenté dÚs que possible car la plupart des modÚles 3D utilisent des multi-matériaux.

  1. Convertir en .png ou .jpg et incorporer
  2. Ne vous en souciez pas. Exporter en tant que fichiers image originaux
  3. Ne pas exporter

Je vote pour 3 et enregistre un avertissement dans la console.

Espérons que les maillages multi-matériaux seront implémentés dÚs que possible car la plupart des modÚles 3D utilisent des multi-matériaux.

D'accord, pour moi, c'est le problĂšme numĂ©ro un empĂȘchant l'utilisation de l'exportateur.

Espérons que les maillages multi-matériaux seront implémentés dÚs que possible car la plupart des modÚles 3D utilisent des multi-matériaux.

Comme je l'ai dit dans l'autre fil, j'y travaille.

  1. Convertir en .png ou .jpg et incorporer
  2. Ne vous en souciez pas. Exporter en tant que fichiers image originaux
  3. Ne pas exporter

Je vote pour 3 et enregistre un avertissement dans la console

Oui, j'en suis venu à penser que 3. serait plus simple et ne serait pas déroutant pour les utilisateurs. Obtenir une image intégrée en mode non emedImages serait un peu déroutant.

La raison pour laquelle je préfÚre 1. était pour la conversion d'autres formats en glTF. Certains (ou beaucoup) d'autres formats n'ont pas de limitation de format d'image.

L'exportateur convertit en mode embedImages . Donc, ajouter "utiliser l'option embedImages si vous voulez convertir" Ă  l'avertissement de la console serait bien, je pense.

J'irais aussi pour 3 aussi. Comme la conversion Ă  partir d'autres formats peut ĂȘtre fastidieuse, vous devrez de toute façon prioriser certains formats par rapport Ă  d'autres. Cela vaut probablement la peine d'en faire 3 maintenant et d'attendre de voir si gltf ajoute la prise en charge de nouveaux formats de texture comme ktx ou autre et nous pourrions revoir l'implĂ©mentation.

Comme indiqué dans https://github.com/mrdoob/three.js/pull/13415#issuecomment -369022383, ce serait bien si l'exportateur pouvait composer la texture ambientRoughnessMetalness pour l'utilisateur. Il vaut probablement mieux placer ce code dans ImageUtils .

J'ai mis à jour la liste de contrÎle avec les derniers changements. J'ai ajouté @takahirox à l' multimaterial , et je me charge de la tùche de composition d'images.
J'ai également ajouté l'extension material_unlit, bien qu'elle soit encore en projet, je pense qu'elle est assez proche de la sortie et ne changera pas tant que ça (/cc @donmccurdy)

Espérons que les maillages multi-matériaux seront implémentés dÚs que possible car la plupart des modÚles 3D utilisent des multi-matériaux.

Comme je l'ai dit dans l'autre fil, j'y travaille.

WIP... (Miku a du multi-matériaux)

image

À propos des formats d'image non pris en charge, ok allons-y pour 3.

@takahirox a l' air bien ! ??

BTW, ĂȘtes-vous intĂ©ressĂ© par la prise en charge des archives zip ? .glTF + .bin et textures externes conviendraient (peut-ĂȘtre) Ă  d'autres outils de crĂ©ation, mais difficile Ă  faire sans archive. Une archive zip serait donc nĂ©cessaire. Et nous pouvons rĂ©duire la taille du fichier exportĂ©.

Je le veux et j'ai essayĂ© dans ma branche locale avant, je peux partager plus tard si vous ĂȘtes intĂ©ressĂ©.

N'est-ce pas Ă  peu prĂšs la mĂȘme chose que gzipping un glb?

.glTF + .bin et textures externes conviendraient Ă  d'autres outils de crĂ©ation (peut-ĂȘtre)

J'espÚre que les outils de création ne nécessiteront pas de fichiers séparés ; nous encourageons tout le monde à utiliser GLB par défaut. Mais il est plus facile de modifier manuellement une image si elle n'est pas intégrée, c'est sûr.

Aucune opinion bien arrĂȘtĂ©e quant Ă  savoir si nous voulons mettre cette fonctionnalitĂ© dans THREE.GLTFExporter directement... mais je pense presque que nous ne devrions pas avoir trop d'options qui pourraient plutĂŽt ĂȘtre des post-optimisations sur le glTF. Un autre exemple, Draco est en quelque sorte compliquĂ© et nĂ©cessite plusieurs fichiers externes, alors peut-ĂȘtre est-il prĂ©fĂ©rable de laisser des outils spĂ©cialisĂ©s glTF-to-glTF faire cette optimisation ? Et de mĂȘme, nous pourrions crĂ©er un glb-unpacker (en face de http://glb-packer.glitch.me/) pour aider les gens Ă  dĂ©compresser les fichiers de GLB vers ZIP si nous dĂ©couvrons que les gens en ont besoin.

De https://github.com/KhronosGroup/glTF/issues/1256 —

... l'intention originale de gltf-pipeline - et vraiment glTF en général - rend les exportateurs aussi simples que possible et pousse les optimisations vers un outil commun. Cela aidera aussi, bien sûr, à la fragmentation.

cela dit, aucun glb-unpacker n'existe encore Ă  ma connaissance...

@mrdoob

Je voulais que les images de texture soient externes, plutĂŽt que .glTF vs .glb.

@donmccurdy

J'ai suivi la discussion sur https://github.com/KhronosGroup/glTF/issues/1117 et je suis d'accord pour encourager maintenant l'approche des fichiers intégrés et du pipeline .glb +. Un .glb est bon pour la transmission de données, en particulier pour l'approche Web et pipeline, peut garder les exportateurs et les outils simples et réutilisables. (J'aime aussi l'approche du pipeline de commandes UNIX/Linux !)

Je ne pense donc pas que l'exportateur ait besoin de la prise en charge des archives zip maintenant. Et peut-ĂȘtre qu'il n'a pas non plus besoin d'un accessoire clairsemĂ© et d'un support draco pour la mĂȘme raison.

Concernant glb-unpacker, je vais peut-ĂȘtre le faire pendant mon temps libre. Je pense que certains artistes aiment les fichiers externes .glTF + car ils sont lisibles sans aucun outil spĂ©cifique Ă  glTF. Et parfois, les fichiers externes peuvent rĂ©duire le temps de chargement en raison du fichier de chargement parallĂšle afin qu'il puisse ĂȘtre utilisĂ© Ă  des fins d'optimisation.

En ce qui concerne les outils de pipeline/d'optimisation, je tiens à noter que nous ne voulons pas transférer d' énormes données sur le réseau. Les utilisateurs veulent optimiser/compresser avant de ~transformer~ le transfert de données. Ainsi, le service Web d'optimisation glTF ne fonctionne parfois pas bien pour les données volumineuses, car l'utilisateur doit envoyer un fichier volumineux au serveur.

De plus, pour Three.js et d'autres moteurs basés sur un navigateur JavaScript, nous serions heureux si nous disposions d'outils d'optimisation glTF qui s'exécutent sur le navigateur. Nous pouvons optimiser/compresser avant que les données ne soient transmises aux utilisateurs. Sans eux, les utilisateurs doivent télécharger manuellement les données exportées, puis les transmettre aux outils de pipeline en raison des limitations du navigateur.

De ce point de vue, je souhaite qu'un outil puisse s'exĂ©cuter n'importe oĂč, sur navigateur, sur serveur, CUI, etc., pour qu'il soit plus commun et rĂ©utilisable. Nous ne voulons pas crĂ©er deux fois ou plus les mĂȘmes outils pour diffĂ©rentes plates-formes. Donc, un outil basĂ© sur node.js serait bien ? L'Ă©quipe glTF (pipeline) a-t-elle des suggestions ? (Peut-ĂȘtre que cette discussion devrait ĂȘtre faite dans glTF, pas ici.)

Juste au cas oĂč, dans GLTFLoader le support binaire est implĂ©mentĂ© en tant qu'extension mais .glb est dans la spĂ©cification de base de glTF 2.0, n'est-ce pas ?

Juste au cas oĂč, dans GTLTFLoader, le support binaire est implĂ©mentĂ© en tant qu'extension, mais .glb est dans la spĂ©cification de base de glTF 2.0, n'est-ce pas ?

Oui, c'était une extension dans glTF 1.0 et je n'ai jamais déplacé ou renommé ce code aprÚs qu'il soit devenu une partie de la spécification de base de glTF 2.0.

De ce point de vue, je souhaite qu'un [outils d'optimisation] puisse s'exĂ©cuter n'importe oĂč, sur navigateur, sur serveur, CUI, etc., pour qu'il soit plus commun et rĂ©utilisable. Donc, un outil basĂ© sur node.js serait bien ? L'Ă©quipe glTF (pipeline) a-t-elle des suggestions ? (Peut-ĂȘtre que cette discussion devrait ĂȘtre faite dans glTF, pas ici.)

Cela vaudrait la peine de poser des questions sur la feuille de route de glTF-Pipeline ... glTF-Toolkit semble pertinent, mais ne fonctionne (actuellement) que sous Windows. Personnellement, j'aime Node.js mais C++ ou Rust pourraient ĂȘtre des choix raisonnables avec la compilation vers WASM.

Oh, il me manquait la compilation vers WASM. Spécifier certaines plates-formes de développement recommandées serait une bonne chose pour les développeurs d'optimisation. Je proposerais donc à un fil approprié.

Je suis d'accord avec @donmccurdy car je pense que ces optimisations sur le pipeline pourraient vivre dans un référentiel différent de celui de three.js, afin que tout le monde puisse en bénéficier. Je dois encore vérifier les différences entre le pipeline gltf et les outils de la boßte à outils, mais je m'attendrais à ce que ce type de fonctionnalités y soit inclus.
Je suis également d'accord que tant que nous aurons un WASM, la langue source n'aura pas vraiment d'importance, mais il est également vrai que s'il est écrit en node.js, de nombreux membres de la communauté autour des moteurs Web 3D pourraient probablement aider à les améliorer en tant que sont actuellement la cible principale de ce format de fichier de toute façon.

Je ne suis pas sûr de comprendre "l'optimisation avant la transformation" ... il existe plusieurs types de transformations qu'un pipeline peut effectuer sur un modÚle, et les optimisations sont probablement le type de transformation le plus courant ?

D'accord au-delĂ . Il est bon d'avoir des outils ciblĂ©s de bas niveau qui peuvent ĂȘtre utilisĂ©s pour crĂ©er d'autres outils ou connectĂ©s Ă  une interface graphique plus conviviale.

Oups, c'est une faute de frappe. Ne pas transformer mais transférer. Je voulais dire, la plupart des utilisateurs veulent optimiser/compresser avant d'envoyer des données sur le réseau. J'ai mis à jour les messages pour qu'ils soient plus clairs.

salut les gars

J'utilise l'exportateur GLTF THREE.js pour exporter une scĂšne aframe entiĂšre en tant qu'objet gltf.
Comment puis-je faire en sorte que les balises a-animation définies sur aframe fassent partie des animations de l'objet gltf ?

@donmccurdy @fernandojsg @mrdoob

Salut @siddhartpai — THREE.GLTFExporter ne convertit que les objets THREE.AnimationClip en animations glTF, alors que le systĂšme d'animation d'A-Frame utilise TweenJS. Donc actuellement ce n'est pas possible. Vous voudrez peut-ĂȘtre ouvrir un numĂ©ro sur A-Frame ou A-Frame Inspector, qui utilisent Ă©galement GLTFExporter , pour le demander en tant que future fonctionnalitĂ©.

Support multi-matériaux #13536

Je viens de remarquer que le validateur renvoie une erreur sur chaque élément normal sur un bufferview qui n'est pas normalisé. par exemple, si j'ai stocké des valeurs non initialisées comme [0,0, 0], cette erreur s'affichera.
Comme il s'agit d'une erreur et non d'un avertissement/d'un avis, je vois qu'il est sensible Ă  la correction. Que pensez-vous de la normalisation des Ă©lĂ©ments normaux de bufferview ? MĂȘme ainsi, pour les valeurs qui ne peuvent pas ĂȘtre normalisĂ©es telles que [0,0,0], devrions-nous utiliser un vecteur unitaire valide ? /cc @donmccurdy

On dirait que NORMAL devrait ĂȘtre normalisĂ©.

https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#meshes

NORMALE | "VEC3" | 5126 (FLOTTEUR) | Normales de sommet XYZ normalisées

D'accord pour assurer parce que Three.js normal n'a pas une telle limitation.

Oui, mais que faire lorsque vous n'avez pas de normale réelle, comme une valeur inutilisée de [0,0,0], créez-en simplement une valide et c'est bon ? disons [1,0,0]. Nous devons donc modifier le code de bufferview pour détecter que nous analysons un attribut normal et normaliser chacun avant de l'enregistrer dans la vue de données.

que faire lorsque vous n'avez pas de normale réelle, comme une valeur inutilisée de [0,0,0]

Hm... remplacer par un valide et afficher un avertissement ?

Nous devons donc modifier le code de bufferview pour détecter que nous analysons un attribut normal et normaliser chacun avant de l'enregistrer dans la vue de données.

Je préfÚre faire ça en processMesh() parce que ce serait plus simple, comme

var originalNormal = geometry.attributes.normal;

if ( hasNonNormalizedValues( originalNormal ) ) {

    geometry.attributes.normal = createNormalizedAttribute( originalNormal );

}

processAccessorHere();

geometry.attributes.normal = originalNormal;

Si nous le faisons dans processBufferView() , le code deviendrait un peu complexe car nous devons veiller à ce que les données soient partagées entre différents attributs, par exemple la position et la normale. (Je sais que c'est un cas d'utilisation trÚs rare mais Three.js ne restreint pas.)

Oui, j'aime cette approche, j'avais peur de modifier les normales aprÚs l'exportation, mais ça devrait aller si nous sauvegardons une référence les remettre aprÚs avoir terminé. :+1: Cela vous dérangerait-il de pousser un PR avec ces changements ? ou tu veux que je le fasse ?

D'accord, je le ferai. (Êtes-vous pressĂ© de rĂ©soudre ce problĂšme ?)

@takahirox cool, merci ! mais pas pressé j'étais juste en train de passer en revue l'état de l'exportateur ^_^

OK, alors je ferai ~demain~ cette semaine.

D'accord, glTF ne permet pas d'omettre des normales sur des sommets particuliers mais pas d'autres dans une seule primitive. Nous devrons fournir une sorte de valeur, supprimer ces sommets ou générer une erreur.

Je préférerais rendre les choses plus faciles pour l'utilisateur, donc mon vote est de créer un nouveau tableau de normales en les normalisant et en ajoutant une valeur (0,1,0) pour les vides.

Semble correct. Si c'est lent pour les grands modÚles, nous pourrions vouloir une option checkNormals ou quelque chose comme ça, donc les utilisateurs qui n'en ont pas besoin peuvent se retirer, plutÎt que de scanner chaque sommet.

Oui, j'Ă©tais sur le point d'Ă©crire la mĂȘme chose ! :RÉ

Si c'est lent pour les grands modÚles, nous pourrions vouloir une option checkNormals ou quelque chose comme ça, donc les utilisateurs qui n'en ont pas besoin peuvent se retirer, plutÎt que de scanner chaque sommet.

Je vais d'abord faire des relations publiques sans cette option. Ajoutons quand/si nécessaire. Personnellement, je suppose que ce contrÎle ne ralentit pas beaucoup.

Je vais d'abord faire des relations publiques sans cette option. Ajoutons quand/si nécessaire. Personnellement, je suppose que ce contrÎle ne ralentit pas beaucoup.

Je normalisais l'ensemble des tampons lors du chargement de chaque trait sur a-painter et c'Ă©tait assez lent

MĂȘme s'il ne s'agit que de vĂ©rifier s'ils sont normalisĂ©s ?

@takahirox, vous devrez de toute façon calculer la longueur, donc je suppose que cela ne changera pas tant que ça

HM OK. Je vais Ă©valuer avec le PR.

C'est la premiÚre fonctionnalité de GLTFExporter que nous avons introduite qui effectue n'importe quel calcul avec chaque sommet (à l'exception de la conversion de cible de morphing relative/absolue), donc oui potentiellement plus lent... dans tous les cas.

Bon travail! IMHO devrait ĂȘtre fusionnĂ© dans core three.js, plutĂŽt que dans des "exemples".
J'adorerais voir le support de KHR_lights_punctual !

PR https://github.com/mrdoob/three.js/pull/15519 ajoute KHR_lights_punctual. :)

Je pense que ce problĂšme peut probablement ĂȘtre rĂ©solu - les Ă©lĂ©ments restants sont moins pratiques ou optimisĂ©s et peuvent ĂȘtre suivis ailleurs :

  • [ ] rĂ©utiliser les vues tampon
  • [ ] fusionne automatiquement les textures mĂ©tal/rugueux/ao

Hé les gars, est-ce que quelqu'un sait comment exporter un maillage de forme personnalisée en appliquant les changements de morphing et en le supprimant de l'objet final ?
Comme cette question https://stackoverflow.com/questions/57423471/how-to-export-morph-changed-meshes-from-threejs-application
Merci d'avance!

@vini-guerrero Veuillez utiliser les forums (https://discourse.threejs.org/) ou Stack Overflow pour obtenir de l'aide, plutĂŽt que les problĂšmes GitHub.

Cette page vous a été utile?
0 / 5 - 0 notes