GithubHelp home page GithubHelp logo

hhy5277 / model-viewer Goto Github PK

View Code? Open in Web Editor NEW

This project forked from google/model-viewer

0.0 1.0 0.0 1010.76 MB

Easily display interactive 3D models on the web and in AR!

Home Page: https://googlewebcomponents.github.io/model-viewer/

License: Apache License 2.0

HTML 15.80% JavaScript 49.46% Shell 4.89% TypeScript 26.92% C++ 2.93%

model-viewer's Introduction

🚨 Status: Experimental

<model-viewer> is currently in the Experimentation phase. Someone on the team thinks it’s an idea worth exploring, but it may not go any further than this. Use at your own risk.

<model-viewer>

Build Status NPM Bundlephobia

<model-viewer> is a web component that makes rendering interactive 3D models - optionally in AR - easy to do, on as many browsers and devices as possible. <model-viewer> strives to give you great defaults for rendering quality and performance.

As new standards and APIs become available <model-viewer> will be improved to take advantage of them. If possible, fallbacks and polyfills will be supported to provide a seamless development experience.

Demo β€’ Documentation β€’ Kanban β€’ Quality Tests

sample-render

Installing

You can load a bundled build via unpkg.com by including the snippet below. This will automatically load the correct version for the user's browser.

<!-- πŸ’ Include both scripts below to support all browsers! -->

<!-- Loads <model-viewer> for modern browsers: -->
<script type="module"
    src="https://unpkg.com/@google/model-viewer/dist/model-viewer.js">
</script>

<!-- Loads <model-viewer> for old browsers like IE11: -->
<script nomodule
    src="https://unpkg.com/@google/model-viewer/dist/model-viewer-legacy.js">
</script>

Alternatively, you can install the npm package:

npm install ---save @google/model-viewer

Important note on bundling

Bundled builds are useful for demos or for kicking the tires. However, the bundled build includes some third party dependencies. Some of these dependencies (like three) are quite large. For production use cases we recommend that you use the npm package and your own bundler (such as Rollup or Webpack) to eliminate potential duplicate dependencies.

Usage

If you are using a bundled build, first add a script tag to your page to load <model-viewer> as described in the Installing section.

Alternatively, if you are using the npm package and a bundler (see "Important note on bundling" above), you can import the module:

import '@google/model-viewer';

After the library has been loaded, a new custom element will be defined. You can use it anywhere you would write HTML. For example, using the bundled build in an HTML document might look like this:

<!doctype html>
<html>
  <head>
    <title>3D Test</title>
    <script src="path/to/bundled/model-viewer.js"></script>
  </head>
  <body>
    <model-viewer src="path/to/model.gltf"></model-viewer>
  </body>
</html>

Alternatively, using the npm package in a JavaScript module might look like this:

import '@google/model-viewer';

const model = document.createElement('model-viewer');
model.src = 'path/to/model.gltf';

document.body.appendChild(model);

You can think of <model-viewer> sort of like an <img> or <video> tag, but for 3D content. Just set its src attribute to the URL of a valid glTF (or GLB) file and voila!

Browser Support

<model-viewer> is supported on the last 2 major versions of all evergreen desktop and mobile browsers. <model-viewer> is also supported on IE11.

Chrome Firefox Safari Edge IE11
Desktop βœ… βœ… βœ… βœ… βœ…
Mobile βœ… βœ… βœ… βœ… N/A

<model-viewer> builds upon standard web platform APIs so that the performance, capabilities and compatibility of the library get better as the web evolves.

However, not all browsers support all of these features today. Check out POLYFILLS.md to learn how to polyfill for maximum browser compatibility!

API

For full details regarding the attributes, properties, events and more supported by <model-viewer>, please refer to our online documentation.

Styling

Currently no custom CSS variables are supported, but the model viewer's containing box can be sized via traditional width and height properties, and positioned with the typical properties (display, position, etc.).

Format Support

A <model-viewer>'s attributes allows developers to specify multiple file types to work across different platforms. For WebGL and WebXR purposes, both glTF and GLB are supported out of the box. Additionally, developers can specify a USDZ file (using the ios-src attribute) that will be used to launch Quick Look on iOS Safari as an interim solution until Safari has support for something like the WebXR Device and Hit Test APIs.

Loading Performance

Models are often large, so especially on pages with large numbers of them it may be desirable to load them after user action. Three parameters - poster, preload, and reveal-when-loaded - control the loading behavior.

Four configuration options are available:

  • By default, the model will load with the page and will be displayed once it's loaded.
  • With a poster specified, the model will not load or display until the user takes action (for instance, by clicking on the model element).
  • With both poster and preload set, the model will load with the page, but the poster image will be displayed until the user takes action.
  • With all of poster, preload, and reveal-when-loaded set, the poster will be displayed until the model is loaded, at which time the poster will be hidden and the model displayed.

See the loading examples

Important note on data usage

iOS Quick Look only supports model files that use the USDZ format. This means that iOS users who see a live-rendered model in the browser (loaded as glTF/GLB) will have to download the same model a second time in USDZ format when they launch Quick Look.

Augmented Reality

There are currently multiple options for viewing content in augmented reality. Different platforms enable slightly different experiences, but generally finds a real-world surface and allows the user to place the model, to be viewed through a camera.

The attributes ios-src, magic-leap and unstable-webxr enable AR features on certain platforms -- read the API attributes for each to understand the support and caveats.

When in augmented reality, all current platforms assume that the models unit size be in meters, such that a 1.5 unit tall model will be 1.5 meters when in AR.

See the augmented reality examples.

Development

After you have cloned the repository locally, you should run:

npm install

This will install dependencies, run a build and run the tests. Build artifacts are placed in the lib and dist folders.

The following npm scripts are available:

  • npm run clean - Deletes all build artifacts
  • npm run build - Builds the distributable from the src/ directory.
  • npm run watch - Watches the src/ directory, rebuilding when a file changes.
  • npm run serve - Serves a static server on port 8000 from the project root.
  • npm run dev - Combination of npm run watch and npm run serve -- watches the src/ directory, rebuilding when a file changes and opens a static server on port 8000.
  • npm test - Runs tests.
  • npm run check-fidelity - Compare rendering to third-party renderers
  • npm run bootstrap-fidelity-dev - Bootstrap the project for developing fidelity testing infrastructure or updating screenshots. NOTE: This will download hundreds of megabytes of data and spend a significant amount of time compiling renderers the first time you run it.
  • npm run update-screenshots - Take screenshots of fidelity tests using third-party renderers

Examples

This repo contains examples to demonstrate how <model-viewer> may be used. Before running them do the following:

cd path/to/cloned/repo
npm install
npm run build

To run the examples:

npm run serve

License

Apache License Version 2.0, Copyright Β© 2018 Google

model-viewer's People

Contributors

cdata avatar gravityrail avatar johnpallett avatar jpmedley avatar jsantell avatar mikkoh avatar mrdoob avatar pushmatrix avatar smalls avatar sorskoot avatar yuinchien avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.