Apple propose une API 3D ouverte pour le web

Nicolas Furno |

Cela fait plusieurs années que des initiatives existent pour proposer des graphismes en 3D sur le web, essentiellement autour de WebGL. Ce standard ouvert et multiplateforme est basé sur OpenGL et Apple le prend en charge, comme tous les autres navigateurs majeurs. Cette API n’est plus autant adaptée aux cartes graphiques modernes et elle est moins performante que des API plus modernes, comme Direct3D 12 de Microsoft, Vulkan ou encore Metal conçu par Apple.

Par le biais du projet WebKit, Apple propose de créer un nouveau standard pour la 3D sur le web : WebGPU. Cette nouvelle API chargée de succéder à WebGL reprend une partie des idées et du fonctionnement de Metal. En particulier, l’entreprise a repris la syntaxe développée pour Metal et l’a adaptée au web.

Voici à quoi ressemblent quelques lignes de code pour WebGPU dans la proposition d’Apple.

Cette proposition est menée dans le cadre du W3C, l’organisme chargé de définir les standards du web. Un groupe de travail a été créé au sein de cette organisation et Apple propose aux autres acteurs du segment d’étudier sa proposition pour éventuellement en faire le nouveau standard. Google, Mozilla, Microsoft et les autres pourront ensuite adopter WebGPU telle que la fonction est décrite actuellement, lui apporter des modifications, voire proposer tout autre chose.

Dans sa proposition, Apple indique explicitement que c’est un travail en cours qui demande à être amélioré. Certains éléments sont trop proches de Metal pour être validés, sachant que WebGPU devra reposer à terme sur des API graphiques de bas niveau différentes. Il n’est pas question de porter Metal sur les plateformes concurrentes, cette API devra aussi bien fonctionner sur Direct3D 12 et Vulkan.

En attendant, le projet WebKit a déjà commencé à intégrer le nécessaire pour utiliser l’API WebGPU.

avatar blopi4 | 

Sympa :)

avatar cecile_aelita | 

je me posais une question :)
en dehors des jeux et de certaines applications tierces de l'app store.
ou est utilisé Metal au sein d'iOS?

Est ce qu'il est utilisé dans la reconnaissance de visages et d'objet dans photo?
c'est aussi utilisé pour les effets de flou du controle center/centre de notification?
est ce que c'est utilisé encore ailleur dans IOS?

avatar C1rc3@0rc | 

@romainB84

Metal, comme Vulkan ou DirectX ce sont des API de rendu graphique de bas niveau.
Ces API sont surtout faites pour realiser des moteurs de rendu graphique qui seront eux utilisés plus communement au niveau de l'applicatif.

Pour la reconnaissance des formes (visage, etc), il s'agit d'un tout autre domaine qui fait appel a des framework et librairies specifiques. Apres, il y a de plus en plus de camera qui sont equipées de puces specifiques pour la reconnaissances de visages, mais on a que peut de controle dessus en general et on y accede par des drivers qui restent proprietaires la plus souvent.

L'approche d'Apple est assez etrange en fait. Dans un navigateur on a surtout besoin d'API de haut niveau et d'un maximum de fonctions qui realisent efficacement des traitements complexes, histoire d'optimiser la vitesse de traitement. La seule justification que je vois c'est pour essayer d'imposer Metal face a Vulkan ou du moins d'influencer Vulkan.

Voir que les navigateurs WEB deviennent aussi de plus en plus des usines a gaz auxquels ont confit de plus en plus des fonctions d'OS et d'applications pose un tres gros probleme, autant en terme d'efficacité, de consommation que de securité.

avatar marc_os | 

« elle est moins performante que des API plus modernes, comme Direct3D 12 de Microsoft »
Dites moi, Direct3D 12 c'est pas un truc propriétaire de Microsoft ?
Et pourquoi comparer les performances si c'est pour ensuite écrire :
« cette API devra aussi bien fonctionner sur Direct3D 12 » ???
J'ai comme l'impression que vous vous êtes un peu mélangé les pinceaux...
Et la soit disant « modernité » de certaines API propriétaires n'a rien à voir là dedans.

avatar olaola | 

L'article est pourtant correct.

L'implémentation de WebGPU sur une plateforme repose sur une API en dessous qui dépend de la plateforme (Metal, Direct X 12, Vulkan) ça serait trop cher de faire des drivers qui tapent directement la carte graphique. Tout comme WebGL aujourd'hui mais le but c'est justement de réduire la distance entre l'API proposé pour le Web et les APIs natives modernes.

avatar marc_os | 

@ olaola
Ce que je voulais dire en clair, c'est que WebGPU est une surcouche au dessus des drivers existants, par exemple direct X 12 pour Windows.
Donc utiliser WebGPU qui utilise Direct X est forcément moins performant qu'utiliser directement Direct X ! Pas la peine de dire de telles évidences, en laissant de plus sous-entendre que WebGPU ne serait pas terrible car pas performant. :/

avatar béber1 | 

iGlasses connectées + RA interactives en vue ?

avatar vince29 | 

Quelle différence avec three.js ?

avatar olaola | 

three.js est une librairie Javascript qui repose sur WebGL pour faciliter son usage. WebGPU est une API proposée par le navigateur qui aurait le même rôle que WebGL mais plus efficace.

avatar C1rc3@0rc | 

Je vois mal pourquoi WebGPU pourrait etre plus efficace que WebGL, a moins de mauvaise fois pour realiser un WebGL performant.

WebGL couvre le bas et le moyen niveau, donc les fonctions de moyen niveau sont par definition plus efficaces que l'equivalent programmée en javascript pur a partir de primitives de bas niveau.

Il faut faire la difference entre une API et une librairie. Une API est juste une interface de programmation pour un langage donné et qui donne acces a des fonction natives (programmées pour etre les plus efficaces et au plus proche du processeur). La librairie, dans le genre three.js, c'est des fonctions programmées en javascript qui augmentent le niveau d'abstraction mais n'offrent pas d'efficacité de realisation.

Exemple la fonction BoxGeometry de Three.js. On va voir que dans le fichier BoxGeometry.js elle est ecrite comme ça:

function BoxGeometry( width, height, depth, widthSegments, heightSegments, depthSegments ) {

Geometry.call( this );

this.type = 'BoxGeometry';

this.parameters = {
width: width,
height: height,
depth: depth,
widthSegments: widthSegments,
heightSegments: heightSegments,
depthSegments: depthSegments
};

this.fromBufferGeometry( new BoxBufferGeometry( width, height, depth, widthSegments, heightSegments, depthSegments ) );
this.mergeVertices();

}

Et elle va appeller New BoxBufferGeometry, qui elle meme appelle d'autres fonctions javascript... on a donc que du code javascript (qui va finir par appeller une primitive WebGL...)

Avec une librairie native on aurait juste une interface function BoxGeometry( width, height, depth, widthSegments, heightSegments, depthSegments ), mais pas de code javascript en cascade puisque ce serait une fonction programmée en C et compilée nativement dans le soft ou meme dans l'OS. Les temps d'execution ne sont meme pas comparables tellement la différence est enorme.

avatar olaola | 

"Je vois mal pourquoi WebGPU pourrait etre plus efficace que WebGL, a moins de mauvaise fois pour realiser un WebGL performant."

Parce que WebGL se cale sur les concepts OpenGL, alors que WebGPU a des concepts proches de Métal, Direct X 12 et Vulkan, qui sont des concepts plus proches de la manière dont les cartes graphiques modernes fonctionnent.

avatar JimmyDrn | 

A quand un logiciel de conception 3D made in Apple pour Mr tout le monde?

avatar fte | 

Super une API 3D moderne pour le web. Ça ouvre des perspectives intéressantes. C'est en tout cas sympa de leur part de se préoccuper des autres plateformes.

Il ne reste plus à Apple que de proposer des GPUs dans ses engins. :)

avatar moon21 | 

ils feraient mieux de s'occuper de la 3D pour les cartes qu'ils vendent (contre beaucoup d'argent) avec les Mac Pro !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

CONNEXION UTILISATEUR