Intro to Babylon.js
Tags: javascript, 3d, webdev, beginners
Published: 2022-09-26 12:29:42

## Introduction
Using Babylon.js can be daunting if you have had little or no experience with 3D rendering, so this guide is targeted at total 3D beginners. Babylon allows websites to create interactable 3D environments directly in the browser. What is important to remember when starting with Babylon is that it is just another JavaScript library. Even though it works with 3D meshes and materials, ultimately those are just different resources imported into the site like any other. In the case of materials, they are often regular jpeg or png images. If a site is programmed directly in the html, the Babylon scenes will be defined in a script tag, if the site is made in react, the scene will be created in the jsx files. With this in mind, lets cover the main use cases for Babylon, the main components involved in making a scene, and an example scene to bring it together.
## Usage
3D environments and objects have always been primarily used by the game development community where the demand for interactivity is obviously the highest. Babylon can be used to create entirely online video games playable in the browser or in [desktop/mobile applications][2] if the web game code is [properly ported over][3]. The level of game complexity and fidelity is limited by the user's computer just like with native games, but more on 3D limitations later. There are plenty of other use cases for interactive 3D models though. A popular commercial usage is allowing a user to [customize a product][4] in their browser and see the result from every angle instead of having to scroll through a series of fixed images that might not accurately reflect their custom changes. If your tastes are more eccentric, then these 3D objects could be used to integrate into the navigation and styling of your website, as will be demonstrated in the example below. There are plenty of other uses for web-based 3D environments, but before they can be realized through Babylon we will need to learn about what a Babylon scene is comprised of.
## Babylon.js Scene Components
A Babylon scene is the container for your 3D creation and is primarily comprised of the following parts:
- Cameras - The perspective of the user
- Lights - The illumination of the scene
- Meshes - The shape of 3D objects
- Materials - The appearance of 3D objects
- Vectors - The position of 3D objects
- Events - The user's interactions with the scene

Depending on their implementation, cameras can range from having a fixed position and direction to being completely controllable by the user. Lights have plenty of variations and brightness settings to light the scene appropriately. Meshes are the meat of 3D environments as they are the actual objects being shown and manipulated. Materials are most often images that are overlaid on the mesh to simulate texture. Vectors are used to position and rotate all of the above objects in three-dimensional space. Finally, events in Babylon are very similar to events in HTML and React, in that they return an event object related to the specific action taken by the user. With this surface-level understanding of the various components of a Babylon scene, lets take a closer look at how they are implemented.
## Example - Overly Complex Webpage Navigation
Babylon makes use of a very useful tool called playgrounds that allow developers to create and share their 3D creations very easily to learn as a community. [This][5] is the playground I started from to create my example. After I customized it to my liking, I downloaded it, and it automatically converted into an HTML document as seen [below][6]. Follow along with the comments, and experiment with different changes to start getting a grasp of how to use Babylon in an HTML application.
{% embed https://jsitor.com/embed/v7GulSW-N %}
## Conclusion
In summary, Babylon is a JavaScript library that allows developers to create interactable 3D scenes for anything from gaming to product simulation, and the scenes are comprised of several distinct components that simulate the virtual environment. There are some important drawbacks to consider. For one, all of this processing is dependent on the user's computer specs, so unoptimized scenes can be completely unusable to certain users. If this is a major concern and you still want to implement 3D elements on your webpage, then consider researching real-time 3D rendering. This version of 3D rendering takes the onus of rendering off the user's end and transfers it to a more powerful central server. Otherwise focus on optimization and making the best use of Babylon's feature-rich 3D rendering library.

[1]: <https://www.babylonjs.com> "Babylon.js Website"
[2]: <https://doc.babylonjs.com/BabylonCrossPlat/multiplePlatforms> "Available Platforms"
[3]: <https://doc.babylonjs.com/guidedLearning/devStories/fruitFalling> "Example of Android Port"
[4]: <https://www.nike.com/w/nike-by-you-shoes-6ealhzy7ok> "Nike Shoe Customization"
[5]: <https://playground.babylonjs.com/#ICLXQ8#1> "Source for Example Cube"
[6]: <https://jsitor.com/v7GulSW-N> "JSitor Demo"