SlideShare a Scribd company logo
1 of 39
Download to read offline
Empowering organizations
for a digital and cognitive
revolution
We are
ACERCA DE GLOBANT
Highlights
Crecimiento de ingresos ($ M)
25% industria financiera
2017
CAGR: 27%
522
254
323
413
20182015 2016
659
2019
14,000+ 16
Globers Paises
55
Oficinas
37
Ciudades
36%
YTD template
increase
27%
Crecimiento anual
de ingresos
Fuerte presencia global con gran talento para proveer
transformaciones digitales y cognitivas.
Argentina
Colombia
Uruguay
India
Chile
Peru
España
Bielorrusia
Rumania
EEUU
Méjico
Brasil
Inglaterra
Canadá
Luxemburgo
Francia
Globant Proprietary | Confidential information
2003
Fundación
2006
Firma con
Google
2017
Nombrados líderes mundiales
de servicios de consultoría de
estrategia digital por IDC
MarketScape
2019
Lanzamiento de
Be Kind
2008
Inversión de
Riverwood Capital
y FTV Capital
2009
Lanzamiento de
nuestros
estudios
2012
Inversión
De WPP
2014
Cotizamos en
NYSE
2015
Oferta
secundaria
2016
Lanzamiento de
SOP
Globant Proprietary | Confidential Information
Algunos de nuestros clientesABOUT
GLOBANT
Globant Proprietary | Confidential Information
GLOBANT
Gaming Studio
Globant Proprietary | Confidential Information
Smart
Toys
Game
Development
Online
Services
eSports &
Second Screen
Virtual &
Augmented
Reality
Art &
Animation
➔ Leverage game mechanics with a
different approach.
➔ Help our partners through production,
launch and operation.
➔ Solid expertise with the most
recognized companies in the gaming
industry.
➔ Creative talent, solid technology
frameworks, and processes to scale
and foster innovation.
➔ We develop games and features for
multiple platforms:
Social • PC • Mobile • Next Generation •
Consoles • VR/AR Technologies.
12+
Years working with top
AAA studios
400+
Engineers and developers,
2D & 3D artists
100+
Projects in gaming, 3D
graphics, platforms, virtual
& augmented reality
We specialize in the design and development of world-class
videogames and online services, which work across web,
social, and mobile channels.
OUR GAMING STUDIO
GAMING STUDIO
Globant Proprietary | Confidential Information
Intro to WebGL
2020
Globant Proprietary | Confidential Information
3D Basics
3D Basics
● Rendering a 3D scene is like taking a picture. You need some objects to photograph, which will have
some materials, a few lights so we can actually see the objects, and a camera to take the picture:
Globant Proprietary | Confidential Information
3D Basics
3D Basics - Scene
● We call a 3D scene to the following group of components:
○ A set of 3D objects defined by its Geometry and Materials.
○ A set of light sources that define the amount of light that hits each portion of the model.
○ A Camera that defines from which point of the 3D space we actually see the rest of the scene.
● The action of processing the 3D scene and generate a 2D representation is called Render. We have
different types of Renderers:
○ Offline renderers: the tools used by companies like Pixar or Dreamworks to make films. Some
of them are: Maya, Zbrush, 3D Studio and Blender.
○ Real-time renderers: used by games to generate frames based on user inputs. Unreal,
Frostbite, Unity and threeJS have real-time renderers among other components.
Globant Proprietary | Confidential Information
3D Basics
3D Basics - Models
● The geometry of models are represented in the 3D cartesian space by a set of points (vertices) and
triangles:
Globant Proprietary | Confidential Information
3D Basics
● Basic shape geometry usually comes among other vertex properties like normals and colors.
Normals are used to calculate the effect of lights over the object
● The final aspect of every pixel of the object is calculated using what we call Materials.
3D Basics - Cameras
● Intuitively, cameras define from where we see the scene. They have a set of properties
like its position and the target direction.
● What you can see through a camera is limited by a volume called the View Frustum.
Globant Proprietary | Confidential Information
3D Basics
● You need to correctly define all this
properties to actually “see something”
● Usually it is not that difficult because
there are a set of predefined values that
works on most situations and from
where you can start experimenting.
Globant Proprietary | Confidential Information
OpenGL and WebGL
Some background
OpenGL is one of the two main APIs for computer graphics, and the only open source one.
It’s meant to provide an abstract way to interact with different GPU hardware and develop high
performance 3D apps.
On top of that builds WebGL, which takes a restricted portion of OpenGL and exposes it to the
web.
Globant Proprietary | Confidential Information
WebGL and OpenGl
WebGL
Some characteristics about WebGL
● Low level
● Widely supported by modern browsers
● Two versions
○ 1.0 is based on OpenGL ES 2.0
○ 2.0 is based on OpenGL ES 3.0
● Shaders written on GLSL
○ Shaders are programs that run on the GPU
○ GLSL is a simple C-like language
Globant Proprietary | Confidential Information
WebGL and OpenGl
Globant Proprietary | Confidential Information
ThreeJs intro
Three.js- Introduction
● Three.js is a JavaScript library used to display 3D graphics in a web browser in real-time.
● It uses WebGL at its core and provides an API which define a framework that simplifies
many aspects of WebGL programming.
● Browser support: Chrome, Firefox, Edge, Opera
● It’s a fast evolving project that has many components so getting the right versions of
each module is very important.
● Three.js is published as an npm module so to install it you just need to run:
npm install three
from your working directory.
Globant Proprietary | Confidential Information
ThreeJs Intro
Three.js - Organization
Globant Proprietary | Confidential Information
ThreeJs Organization
● The base core of functionality is included in the three.js file.
● Many other components like loaders, controls and shaders
are part of the examples directory.
● There are many ways to include the modules into your
project. One of them is using import:
<script type="module">
import * as THREE from './node_modules/three/src/Three.js';
import { WEBGL } from './node_modules/three/examples/jsm/WebGL.js';
import { GLTFLoader } from './node_modules/three/examples/jsm/loaders/GLTFLoader.js';
import { OrbitControls } from './node_modules/three/examples/jsm/controls/OrbitControls.js';
HTML render element
Globant Proprietary | Confidential Information
ThreeJs HTML setup
● You can use the entire document canvas to show the rendered image, but it is more
common that the output only takes a portion of it.
● To do that include a <div> element with an id in the HTML body:
<div id = "Scene-Content"> </div>
● Then use this id in the script to define where to attach the renderer into the HTML, doing
something like this:
// Renderer Setup
var renderer = new THREE.WebGLRenderer({ antialias: true});
renderer.setSize( window.innerWidth, window.innerHeight);
renderer.setClearColor( 0x000000);
renderer.shadowMapEnabled = true;
// HTML binding
var elementID = 'Scene-Content';
var element = document.getElementById('Scene-Content');
element.appendChild(renderer.domElement);
Globant Proprietary | Confidential Information
App walkthrough
Introduction
We’ll introduce the different concepts of graphics development by walking through a small app
to visualize models written using ThreeJS.
Globant Proprietary | Confidential Information
App walkthrough
Globant Proprietary | Confidential Information
App walkthrough
Initial setup
The first things you need to
create are a renderer instance,
a scene and set up the render
loop.
In this case we are creating an
empty scene and a renderer
that covers the entire window.
The main loop will be executed
every frame by the browser and
will render the scene.
var scene = new THREE.Scene();
var renderer = new THREE.WebGLRenderer();
renderer.setSize( window.innerWidth, window.innerHeight);
document.body.appendChild( renderer.domElement );
function mainLoop() {
requestAnimationFrame( mainLoop );
renderer.render( scene, camera );
}
mainLoop();
Globant Proprietary | Confidential Information
App walkthrough
Game Loop
The Game Loop is where everything happens.
The idea is that the app is constantly executing the Game
Loop until it exit.
It typically has the following steps:
● Get Input: Where you get the player input: mouse, Keyboard, Joystick, etc…
● Update: Where you use the player’s input to update your game logic and other systems
like physics.
● Render: Where you execute the commands needed to render the scene. ThreeJS
automatically goes over the scene and calls the necessary WebGL commands.
function mainLoop() {
requestAnimationFrame( mainLoop );
renderer.render( scene, camera );
}
mainLoop();
Globant Proprietary | Confidential Information
App walkthrough
Cameras
There are two main types of
cameras commonly used,
perspective and orthographic.
Perspective camaras make the
world look like you are used to
seeing it, where parallel lines
join on the horizon.
Orthographic cameras keep
parallel lines parallel.
Globant Proprietary | Confidential Information
App walkthrough
Cameras
Creating a camera on ThreeJS
is just creating a new object of
type PerspectiveCamera or
OrthographicCamera and
adding it to the scene.
const fieldOfView = 90;
const nearDistance = 0.1;
const farDistance = 1000;
var camera = new THREE.PerspectiveCamera( fieldOfView ,
width/height,
nearDistance ,
farDistance);
scene.add( camera );
The properties passed to the function are
● Field of view
○ How wide the view angle of the camera is. Usual values are 45, 90 and 110, cell phone cameras
are around 65, the human eye is around 135.
● Aspect ratio
○ This is just the ratio between width and height.
● Near distance and far distance
○ This the the nearest (and the farthest) distance we care about.
Globant Proprietary | Confidential Information
App walkthrough
Model Loading
● Three.js provides several built-in geometries, like boxes, spheres, cylinders, cones, etc.
● To add more elaborated geometry three.js provides loaders for popular 3D formats like
.fbx, .obj and many more.
● Recommended format: glTF. It’s supported by 3D modeling packages as an export
option.
● To use the glTFLoader you must import the following module:
import { GLTFLoader } from './node_modules/three/examples/jsm/loaders/GLTFLoader.js';
..or include the following script:
<script src="./node_modules/three/examples/js/loaders/GLTFLoader.js"></script>
Globant Proprietary | Confidential Information
App walkthrough
Model Loading
● To load a glTF model use this reference code:
new GLTFLoader().load(
// resource URL
'path/to/Model.glb|.gltf',
// called when the resource is loaded
function ( gltf ) {
scene.add( gltf.scene );
},
// called while loading is progressing
function ( xhr ) {
console.log( ( xhr.loaded / xhr.total * 100
) + '% loaded' );
},
// called when loading has errors
function ( error ) {
console.log( 'An error happened: ' + error
);
}
);
The .load method provides three function
callbacks to catch different events:
● Loading done.
● Loading progress.
● Loading error.
The most important is the Loading done
callback because in that point we know
for sure that the model is completely
loaded in memory and we can
successfully add it to the scene.
Globant Proprietary | Confidential Information
App walkthrough
Model Loading - Model anatomy
● The loader automatically creates an Object3D object
and uses its children array to build the same hierarchy
defined as the one constructed in the 3D modeling
program.
● It is common that after loading you need to change
some aspects of the model, like some material
property or the shadows of the object.
function enableShadows(object) {
if(object.type='Mesh'){
object.castShadow = true;
object.receiveShadow = true;
}
for (let mod of object.children) {
enableShadows(mod);
}
}
Globant Proprietary | Confidential Information
App walkthrough
Materials
Materials define the visual
properties of the object, like color
and roughness.
For example, a piece of car tire is
rough and black, without
reflections, while a spoon can be
smooth and reflective.
Globant Proprietary | Confidential Information
App walkthrough
Materials - PBR
PBR stands for Physically Based
Rendering, and is the most used
material model nowadays.
It defines a few parameters that
allow to model a wide variety of
materials. Some of them are:
● Roughness
● Albedo (Surface color)
● Metalness (usually 0 or 1)
Additionally, a texture is usually used
to add detail by modifying the
surface orientation.
Globant Proprietary | Confidential Information
App walkthrough
Materials - PBR
The good news is that you don’t
need to do much to use PBR
materials, as ThreeJS supports them
out of the box.
If you are loading a GLTF file, it will
create the materials for you.
Otherwise you assign it when
creating your geometry, as in the
following example.
var geometry = new THREE.BoxGeometry();
var material = new THREE.MeshBasicMaterial({
color: 0x00ff00 });
var cube = new THREE.Mesh( geometry, material );
scene.add( cube );
Globant Proprietary | Confidential Information
App walkthrough
Lights
● Three.js offers many different types of lights you can use in your scenes:
THREE.SpotLight, THREE. DirectionalLight, THREE.AmbientLight and
THREE.HemisphereLight.
● Directional light mimics the light coming from the Sun, with parallel rays following a
direction.
● Ambient light just adds a constant light to every pixel, in an effort to simulate the global
light of the ambient. It is used to soften the illumination.
● With Ambient + Directional you can easily get this result:
Ambient factor
Globant Proprietary | Confidential Information
App walkthrough
Lights
● Here is the code to add an Ambient light and a Directional Light
var ambientLight = new THREE.AmbientLight(0xffffff, 0.5);
scene.add(ambientLight);
var directionalLight = new THREE.DirectionalLight( 0xffffff, 3.0 );
directionalLight.position.set( 0,0,0 );
directionalLight.target.position.set(1,-1,-1);
directionalLight.target.updateMatrixWorld();
scene.add (directionaLight);
● You need to define Color and Intensity in the constructor.
● Directional light also needs a position and a target to define its direction.
● You must call updateMatrixWorld() after setting a new direction.
Globant Proprietary | Confidential Information
App walkthrough
Shadows
● Shadows are a big subject in Computer Graphics. They are difficult to generate correctly
and efficiently.
● For that reason there are a huge number of algorithms that treat every special case
separately in order to achieve an efficient implementation.
● ShadowMaps is one of these algorithms and it is implemented in Three.js by default.
● The shadow is calculated by
rendering the objects from the light
to a texture that then is projected
over the scene.
Globant Proprietary | Confidential Information
App walkthrough
Shadows
● The steps to add shadows are:
○ Enable Shadow maps in the renderer:
○ Define which object will cast a shadow.
○ Define which object will receive shadows.
○ Define which light will cast a shadow and define the camera from the light point of view.
renderer.shadowMap.enabled = true;
object.castShadow = true;
object.receiveShadow = true;
directionalLight.castShadow = true;
directionalLight.shadow.camera.near = -250;
directionalLight.shadow.camera.far = 250
directionalLight.shadow.camera.left = -250;
directionalLight.shadow.camera.right = 250;
directionalLight.shadow.camera.bottom = -250;
directionalLight.shadow.camera.top = 250;
Globant Proprietary | Confidential Information
App walkthrough
Image Based Lighting
Image Based Lighting (IBL) is a
method to use a static texture,
usually a photograph, to represent
the environment and compute
lighting from it.
The photograph is a 360 degree
picture, so you can know what the
environment is for any direction.
It’s a fast method that adds a lot of
realism compared to a constant
ambient color.
Globant Proprietary | Confidential Information
App walkthrough
Image Based Lighting
Once again, ThreeJs makes it easy
to use IBL on your apps.
You load the environment texture,
pass it to an instance of
PMREMGenerator, which takes care
of doing the appropriate
processing, and then just assign
the texture to your scene.
Additionally you can also use it as
the background for your scene.
new THREE.TextureLoader().load('path/to/texture',
function (envMap){
var generator = new
THREE.PMREMGenerator(renderer);
var env = generator.fromEquirectangular(envMap);
generator.dispose();
scene.background = env.texture;
scene.environment = env.texture;
});
Globant Proprietary | Confidential Information
Questions?
Globant Proprietary | Confidential Information
Further reading
Globant Proprietary | Confidential Information
Further Reading
● Shadows
○ research.michael-schwarz.com/publ/files/shadowcourse-eg10.pdf
● PBR
○ Artist oriented - marmoset.co/posts/physically-based-rendering-and-you-can-too
○ Tech oriented - learnopengl.com/PBR/Lighting
● IBL
○ Technical breakdown and explanation - learnopengl.com/PBR/IBL/Specular-IBL
○ Free environments on HDR format - hdrihaven.com
● Cameras
○ Useful to understand the relation between the near and far plane - en.wikipedia.org/wiki/Z-buffering
● Shaders
○ A tutorial on how to create custom shaders - aerotwist.com/tutorials/an-introduction-to-shaders-part-1
● Lights
○ Three.js lights - threejsfundamentals.org/threejs/lessons/threejs-lights.html
○ Shader calculation:
www.tomdalling.com/blog/modern-opengl/08-even-more-lighting-directional-lights-spotlights-multiple-lights

More Related Content

What's hot

Efficient Graphics with Qt
Efficient Graphics with QtEfficient Graphics with Qt
Efficient Graphics with QtAriya Hidayat
 
COMPUTER GRAPHICS PROJECT REPORT
COMPUTER GRAPHICS PROJECT REPORTCOMPUTER GRAPHICS PROJECT REPORT
COMPUTER GRAPHICS PROJECT REPORTvineet raj
 
OpenGL Transformation
OpenGL TransformationOpenGL Transformation
OpenGL TransformationSandip Jadhav
 
OpenGL ES on Android
OpenGL ES on AndroidOpenGL ES on Android
OpenGL ES on AndroidChris Farrell
 
Animation Framework: A Step Towards Modern UIs
Animation Framework: A Step Towards Modern UIsAnimation Framework: A Step Towards Modern UIs
Animation Framework: A Step Towards Modern UIsaccount inactive
 
Introduction to accelerated graphics
Introduction to accelerated graphicsIntroduction to accelerated graphics
Introduction to accelerated graphicsRuslan Novikov
 
[GREE Tech Talk #08] You Don't Know WebGL
[GREE Tech Talk #08] You Don't Know WebGL[GREE Tech Talk #08] You Don't Know WebGL
[GREE Tech Talk #08] You Don't Know WebGLgree_tech
 
Migrating from OpenGL to Vulkan
Migrating from OpenGL to VulkanMigrating from OpenGL to Vulkan
Migrating from OpenGL to VulkanMark Kilgard
 
Graphics Programming in C under GNU Linux (Ubuntu distribution)
Graphics Programming in C under GNU Linux (Ubuntu distribution)Graphics Programming in C under GNU Linux (Ubuntu distribution)
Graphics Programming in C under GNU Linux (Ubuntu distribution)Tushar B Kute
 
NVIDIA's OpenGL Functionality
NVIDIA's OpenGL FunctionalityNVIDIA's OpenGL Functionality
NVIDIA's OpenGL FunctionalityMark Kilgard
 
New 2D World-Building, Animation & Graphics Features in Unity
New 2D World-Building, Animation & Graphics Features in UnityNew 2D World-Building, Animation & Graphics Features in Unity
New 2D World-Building, Animation & Graphics Features in UnityUnity Technologies
 
Maps V2... And You!
Maps V2... And You!Maps V2... And You!
Maps V2... And You!CommonsWare
 

What's hot (16)

Baiscs of OpenGL
Baiscs of OpenGLBaiscs of OpenGL
Baiscs of OpenGL
 
Efficient Graphics with Qt
Efficient Graphics with QtEfficient Graphics with Qt
Efficient Graphics with Qt
 
COMPUTER GRAPHICS PROJECT REPORT
COMPUTER GRAPHICS PROJECT REPORTCOMPUTER GRAPHICS PROJECT REPORT
COMPUTER GRAPHICS PROJECT REPORT
 
OpenGL Transformation
OpenGL TransformationOpenGL Transformation
OpenGL Transformation
 
OpenGL ES on Android
OpenGL ES on AndroidOpenGL ES on Android
OpenGL ES on Android
 
2D graphics
2D graphics2D graphics
2D graphics
 
Animation Framework: A Step Towards Modern UIs
Animation Framework: A Step Towards Modern UIsAnimation Framework: A Step Towards Modern UIs
Animation Framework: A Step Towards Modern UIs
 
Introduction to accelerated graphics
Introduction to accelerated graphicsIntroduction to accelerated graphics
Introduction to accelerated graphics
 
[GREE Tech Talk #08] You Don't Know WebGL
[GREE Tech Talk #08] You Don't Know WebGL[GREE Tech Talk #08] You Don't Know WebGL
[GREE Tech Talk #08] You Don't Know WebGL
 
WebGL 3D player
WebGL 3D playerWebGL 3D player
WebGL 3D player
 
10java 2d
10java 2d10java 2d
10java 2d
 
Migrating from OpenGL to Vulkan
Migrating from OpenGL to VulkanMigrating from OpenGL to Vulkan
Migrating from OpenGL to Vulkan
 
Graphics Programming in C under GNU Linux (Ubuntu distribution)
Graphics Programming in C under GNU Linux (Ubuntu distribution)Graphics Programming in C under GNU Linux (Ubuntu distribution)
Graphics Programming in C under GNU Linux (Ubuntu distribution)
 
NVIDIA's OpenGL Functionality
NVIDIA's OpenGL FunctionalityNVIDIA's OpenGL Functionality
NVIDIA's OpenGL Functionality
 
New 2D World-Building, Animation & Graphics Features in Unity
New 2D World-Building, Animation & Graphics Features in UnityNew 2D World-Building, Animation & Graphics Features in Unity
New 2D World-Building, Animation & Graphics Features in Unity
 
Maps V2... And You!
Maps V2... And You!Maps V2... And You!
Maps V2... And You!
 

Similar to 3D Programming Basics: WebGL

Interactive 3D graphics for web with three.js, Andrey Vedilin, DataArt
Interactive  3D graphics for web with three.js, Andrey Vedilin, DataArtInteractive  3D graphics for web with three.js, Andrey Vedilin, DataArt
Interactive 3D graphics for web with three.js, Andrey Vedilin, DataArtAlina Vilk
 
JIT Spraying Never Dies - Bypass CFG By Leveraging WARP Shader JIT Spraying.pdf
JIT Spraying Never Dies - Bypass CFG By Leveraging WARP Shader JIT Spraying.pdfJIT Spraying Never Dies - Bypass CFG By Leveraging WARP Shader JIT Spraying.pdf
JIT Spraying Never Dies - Bypass CFG By Leveraging WARP Shader JIT Spraying.pdfSamiraKids
 
openGL basics for sample program (1).ppt
openGL basics for sample program (1).pptopenGL basics for sample program (1).ppt
openGL basics for sample program (1).pptHIMANKMISHRA2
 
openGL basics for sample program.ppt
openGL basics for sample program.pptopenGL basics for sample program.ppt
openGL basics for sample program.pptHIMANKMISHRA2
 
426 lecture 4: AR Developer Tools
426 lecture 4: AR Developer Tools426 lecture 4: AR Developer Tools
426 lecture 4: AR Developer ToolsMark Billinghurst
 
Drupal 3D - Intro to Using Web 3D with Drupal
Drupal 3D - Intro to Using Web 3D with DrupalDrupal 3D - Intro to Using Web 3D with Drupal
Drupal 3D - Intro to Using Web 3D with DrupalBrian Hay
 
Lecture 6 introduction to open gl and glut
Lecture 6   introduction to open gl and glutLecture 6   introduction to open gl and glut
Lecture 6 introduction to open gl and glutsimpleok
 
Tools for developing Android Games
 Tools for developing Android Games Tools for developing Android Games
Tools for developing Android GamesPlatty Soft
 
Lessons Learned: Designer/Developer Productivity in Windows Presentation Foun...
Lessons Learned: Designer/Developer Productivity in Windows Presentation Foun...Lessons Learned: Designer/Developer Productivity in Windows Presentation Foun...
Lessons Learned: Designer/Developer Productivity in Windows Presentation Foun...goodfriday
 
Philipp Nagele (Wikitude): What's Next with Wikitude
Philipp Nagele (Wikitude): What's Next with WikitudePhilipp Nagele (Wikitude): What's Next with Wikitude
Philipp Nagele (Wikitude): What's Next with WikitudeAugmentedWorldExpo
 
(Js) Export your own WebGL Viewer
(Js) Export your own WebGL Viewer(Js) Export your own WebGL Viewer
(Js) Export your own WebGL ViewerJooinK
 
Ball Collecting game report
Ball Collecting game report Ball Collecting game report
Ball Collecting game report Dileep Maurya
 
AGDK tutorial step by step
AGDK tutorial step by stepAGDK tutorial step by step
AGDK tutorial step by stepJungsoo Nam
 
Данило Ульянич “C89 OpenGL for ARM microcontrollers on Cortex-M. Basic functi...
Данило Ульянич “C89 OpenGL for ARM microcontrollers on Cortex-M. Basic functi...Данило Ульянич “C89 OpenGL for ARM microcontrollers on Cortex-M. Basic functi...
Данило Ульянич “C89 OpenGL for ARM microcontrollers on Cortex-M. Basic functi...Lviv Startup Club
 
VisionizeBeforeVisulaize_IEVC_Final
VisionizeBeforeVisulaize_IEVC_FinalVisionizeBeforeVisulaize_IEVC_Final
VisionizeBeforeVisulaize_IEVC_FinalMasatsugu HASHIMOTO
 
3 CG_U1_P2_PPT_3 OpenGL.pptx
3 CG_U1_P2_PPT_3 OpenGL.pptx3 CG_U1_P2_PPT_3 OpenGL.pptx
3 CG_U1_P2_PPT_3 OpenGL.pptxssuser255bf1
 

Similar to 3D Programming Basics: WebGL (20)

Interactive 3D graphics for web with three.js, Andrey Vedilin, DataArt
Interactive  3D graphics for web with three.js, Andrey Vedilin, DataArtInteractive  3D graphics for web with three.js, Andrey Vedilin, DataArt
Interactive 3D graphics for web with three.js, Andrey Vedilin, DataArt
 
HTML5 Game Development frameworks overview
HTML5 Game Development frameworks overviewHTML5 Game Development frameworks overview
HTML5 Game Development frameworks overview
 
Introduction to 2D/3D Graphics
Introduction to 2D/3D GraphicsIntroduction to 2D/3D Graphics
Introduction to 2D/3D Graphics
 
JIT Spraying Never Dies - Bypass CFG By Leveraging WARP Shader JIT Spraying.pdf
JIT Spraying Never Dies - Bypass CFG By Leveraging WARP Shader JIT Spraying.pdfJIT Spraying Never Dies - Bypass CFG By Leveraging WARP Shader JIT Spraying.pdf
JIT Spraying Never Dies - Bypass CFG By Leveraging WARP Shader JIT Spraying.pdf
 
openGL basics for sample program (1).ppt
openGL basics for sample program (1).pptopenGL basics for sample program (1).ppt
openGL basics for sample program (1).ppt
 
openGL basics for sample program.ppt
openGL basics for sample program.pptopenGL basics for sample program.ppt
openGL basics for sample program.ppt
 
426 lecture 4: AR Developer Tools
426 lecture 4: AR Developer Tools426 lecture 4: AR Developer Tools
426 lecture 4: AR Developer Tools
 
Drupal 3D - Intro to Using Web 3D with Drupal
Drupal 3D - Intro to Using Web 3D with DrupalDrupal 3D - Intro to Using Web 3D with Drupal
Drupal 3D - Intro to Using Web 3D with Drupal
 
Lecture 6 introduction to open gl and glut
Lecture 6   introduction to open gl and glutLecture 6   introduction to open gl and glut
Lecture 6 introduction to open gl and glut
 
Tools for developing Android Games
 Tools for developing Android Games Tools for developing Android Games
Tools for developing Android Games
 
Lessons Learned: Designer/Developer Productivity in Windows Presentation Foun...
Lessons Learned: Designer/Developer Productivity in Windows Presentation Foun...Lessons Learned: Designer/Developer Productivity in Windows Presentation Foun...
Lessons Learned: Designer/Developer Productivity in Windows Presentation Foun...
 
Philipp Nagele (Wikitude): What's Next with Wikitude
Philipp Nagele (Wikitude): What's Next with WikitudePhilipp Nagele (Wikitude): What's Next with Wikitude
Philipp Nagele (Wikitude): What's Next with Wikitude
 
(Js) Export your own WebGL Viewer
(Js) Export your own WebGL Viewer(Js) Export your own WebGL Viewer
(Js) Export your own WebGL Viewer
 
Ball Collecting game report
Ball Collecting game report Ball Collecting game report
Ball Collecting game report
 
AGDK tutorial step by step
AGDK tutorial step by stepAGDK tutorial step by step
AGDK tutorial step by step
 
FLAR Workflow
FLAR WorkflowFLAR Workflow
FLAR Workflow
 
CityEngine-OpenDS
CityEngine-OpenDSCityEngine-OpenDS
CityEngine-OpenDS
 
Данило Ульянич “C89 OpenGL for ARM microcontrollers on Cortex-M. Basic functi...
Данило Ульянич “C89 OpenGL for ARM microcontrollers on Cortex-M. Basic functi...Данило Ульянич “C89 OpenGL for ARM microcontrollers on Cortex-M. Basic functi...
Данило Ульянич “C89 OpenGL for ARM microcontrollers on Cortex-M. Basic functi...
 
VisionizeBeforeVisulaize_IEVC_Final
VisionizeBeforeVisulaize_IEVC_FinalVisionizeBeforeVisulaize_IEVC_Final
VisionizeBeforeVisulaize_IEVC_Final
 
3 CG_U1_P2_PPT_3 OpenGL.pptx
3 CG_U1_P2_PPT_3 OpenGL.pptx3 CG_U1_P2_PPT_3 OpenGL.pptx
3 CG_U1_P2_PPT_3 OpenGL.pptx
 

More from Globant

Webinar MLOps: When AA gets serious.
Webinar MLOps: When AA gets serious.Webinar MLOps: When AA gets serious.
Webinar MLOps: When AA gets serious.Globant
 
Google Cloud Spanner y NewSQL
Google Cloud Spanner y NewSQLGoogle Cloud Spanner y NewSQL
Google Cloud Spanner y NewSQLGlobant
 
Eventos Asíncronos como estrategia virtual
Eventos Asíncronos como estrategia virtualEventos Asíncronos como estrategia virtual
Eventos Asíncronos como estrategia virtualGlobant
 
Cultura y valores 4.0 para líderes 4.0
Cultura y valores 4.0 para líderes 4.0Cultura y valores 4.0 para líderes 4.0
Cultura y valores 4.0 para líderes 4.0Globant
 
Tech Insiders Salesforce: SFDX e Integración Continua
Tech Insiders Salesforce: SFDX e Integración ContinuaTech Insiders Salesforce: SFDX e Integración Continua
Tech Insiders Salesforce: SFDX e Integración ContinuaGlobant
 
Como impulsar tu carrera Salesforce
Como impulsar tu carrera SalesforceComo impulsar tu carrera Salesforce
Como impulsar tu carrera SalesforceGlobant
 
Converge augmented report
Converge augmented reportConverge augmented report
Converge augmented reportGlobant
 
Sistema de recomendación entiempo real usando Delta Lake
Sistema de recomendación entiempo real usando Delta LakeSistema de recomendación entiempo real usando Delta Lake
Sistema de recomendación entiempo real usando Delta LakeGlobant
 
Kubeflow: Machine Learning en Cloud para todos
Kubeflow: Machine Learning en Cloud para todosKubeflow: Machine Learning en Cloud para todos
Kubeflow: Machine Learning en Cloud para todosGlobant
 
Orquestando Pipelines de Datosen AWS con Step Function y AWS Glue
Orquestando Pipelines de Datosen AWS con Step Function y AWS GlueOrquestando Pipelines de Datosen AWS con Step Function y AWS Glue
Orquestando Pipelines de Datosen AWS con Step Function y AWS GlueGlobant
 
Apache Beam: Lote portátil y procesamiento de transmisión
Apache Beam: Lote portátil y procesamiento de transmisiónApache Beam: Lote portátil y procesamiento de transmisión
Apache Beam: Lote portátil y procesamiento de transmisiónGlobant
 
Navegando el desafío de transformación digital de los servicios financieros
Navegando el desafío de transformación digital de los servicios financierosNavegando el desafío de transformación digital de los servicios financieros
Navegando el desafío de transformación digital de los servicios financierosGlobant
 
Converge 2020
Converge 2020 Converge 2020
Converge 2020 Globant
 
Converge 2020
Converge 2020Converge 2020
Converge 2020Globant
 
Tendencias de tecnología para el recién egresado
Tendencias de tecnología para el recién egresadoTendencias de tecnología para el recién egresado
Tendencias de tecnología para el recién egresadoGlobant
 
SRE: ¿Qué es y cómo gestionar el Toil?
SRE: ¿Qué es y cómo gestionar el Toil?SRE: ¿Qué es y cómo gestionar el Toil?
SRE: ¿Qué es y cómo gestionar el Toil?Globant
 
Monitoreo en tiempo real para la mejora continua de una aplicación
Monitoreo en tiempo real para la mejora continua de una aplicaciónMonitoreo en tiempo real para la mejora continua de una aplicación
Monitoreo en tiempo real para la mejora continua de una aplicaciónGlobant
 
¿Cómo automatizar pruebas de infraestructura y no morir en el intento?
¿Cómo automatizar pruebas de infraestructura y no morir en el intento?¿Cómo automatizar pruebas de infraestructura y no morir en el intento?
¿Cómo automatizar pruebas de infraestructura y no morir en el intento?Globant
 
Automatización en AWS con Chatbot Serverless (Amazon Lex)
Automatización en AWS con Chatbot Serverless (Amazon Lex)Automatización en AWS con Chatbot Serverless (Amazon Lex)
Automatización en AWS con Chatbot Serverless (Amazon Lex)Globant
 
¿Cómo importar funcionalidades de C++ a NodeJS?
¿Cómo importar funcionalidades de C++ a NodeJS?¿Cómo importar funcionalidades de C++ a NodeJS?
¿Cómo importar funcionalidades de C++ a NodeJS?Globant
 

More from Globant (20)

Webinar MLOps: When AA gets serious.
Webinar MLOps: When AA gets serious.Webinar MLOps: When AA gets serious.
Webinar MLOps: When AA gets serious.
 
Google Cloud Spanner y NewSQL
Google Cloud Spanner y NewSQLGoogle Cloud Spanner y NewSQL
Google Cloud Spanner y NewSQL
 
Eventos Asíncronos como estrategia virtual
Eventos Asíncronos como estrategia virtualEventos Asíncronos como estrategia virtual
Eventos Asíncronos como estrategia virtual
 
Cultura y valores 4.0 para líderes 4.0
Cultura y valores 4.0 para líderes 4.0Cultura y valores 4.0 para líderes 4.0
Cultura y valores 4.0 para líderes 4.0
 
Tech Insiders Salesforce: SFDX e Integración Continua
Tech Insiders Salesforce: SFDX e Integración ContinuaTech Insiders Salesforce: SFDX e Integración Continua
Tech Insiders Salesforce: SFDX e Integración Continua
 
Como impulsar tu carrera Salesforce
Como impulsar tu carrera SalesforceComo impulsar tu carrera Salesforce
Como impulsar tu carrera Salesforce
 
Converge augmented report
Converge augmented reportConverge augmented report
Converge augmented report
 
Sistema de recomendación entiempo real usando Delta Lake
Sistema de recomendación entiempo real usando Delta LakeSistema de recomendación entiempo real usando Delta Lake
Sistema de recomendación entiempo real usando Delta Lake
 
Kubeflow: Machine Learning en Cloud para todos
Kubeflow: Machine Learning en Cloud para todosKubeflow: Machine Learning en Cloud para todos
Kubeflow: Machine Learning en Cloud para todos
 
Orquestando Pipelines de Datosen AWS con Step Function y AWS Glue
Orquestando Pipelines de Datosen AWS con Step Function y AWS GlueOrquestando Pipelines de Datosen AWS con Step Function y AWS Glue
Orquestando Pipelines de Datosen AWS con Step Function y AWS Glue
 
Apache Beam: Lote portátil y procesamiento de transmisión
Apache Beam: Lote portátil y procesamiento de transmisiónApache Beam: Lote portátil y procesamiento de transmisión
Apache Beam: Lote portátil y procesamiento de transmisión
 
Navegando el desafío de transformación digital de los servicios financieros
Navegando el desafío de transformación digital de los servicios financierosNavegando el desafío de transformación digital de los servicios financieros
Navegando el desafío de transformación digital de los servicios financieros
 
Converge 2020
Converge 2020 Converge 2020
Converge 2020
 
Converge 2020
Converge 2020Converge 2020
Converge 2020
 
Tendencias de tecnología para el recién egresado
Tendencias de tecnología para el recién egresadoTendencias de tecnología para el recién egresado
Tendencias de tecnología para el recién egresado
 
SRE: ¿Qué es y cómo gestionar el Toil?
SRE: ¿Qué es y cómo gestionar el Toil?SRE: ¿Qué es y cómo gestionar el Toil?
SRE: ¿Qué es y cómo gestionar el Toil?
 
Monitoreo en tiempo real para la mejora continua de una aplicación
Monitoreo en tiempo real para la mejora continua de una aplicaciónMonitoreo en tiempo real para la mejora continua de una aplicación
Monitoreo en tiempo real para la mejora continua de una aplicación
 
¿Cómo automatizar pruebas de infraestructura y no morir en el intento?
¿Cómo automatizar pruebas de infraestructura y no morir en el intento?¿Cómo automatizar pruebas de infraestructura y no morir en el intento?
¿Cómo automatizar pruebas de infraestructura y no morir en el intento?
 
Automatización en AWS con Chatbot Serverless (Amazon Lex)
Automatización en AWS con Chatbot Serverless (Amazon Lex)Automatización en AWS con Chatbot Serverless (Amazon Lex)
Automatización en AWS con Chatbot Serverless (Amazon Lex)
 
¿Cómo importar funcionalidades de C++ a NodeJS?
¿Cómo importar funcionalidades de C++ a NodeJS?¿Cómo importar funcionalidades de C++ a NodeJS?
¿Cómo importar funcionalidades de C++ a NodeJS?
 

Recently uploaded

Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
APIForce Zurich 5 April Automation LPDG
APIForce Zurich 5 April  Automation LPDGAPIForce Zurich 5 April  Automation LPDG
APIForce Zurich 5 April Automation LPDGMarianaLemus7
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024The Digital Insurer
 

Recently uploaded (20)

Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
APIForce Zurich 5 April Automation LPDG
APIForce Zurich 5 April  Automation LPDGAPIForce Zurich 5 April  Automation LPDG
APIForce Zurich 5 April Automation LPDG
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024
 

3D Programming Basics: WebGL

  • 1. Empowering organizations for a digital and cognitive revolution We are
  • 2. ACERCA DE GLOBANT Highlights Crecimiento de ingresos ($ M) 25% industria financiera 2017 CAGR: 27% 522 254 323 413 20182015 2016 659 2019 14,000+ 16 Globers Paises 55 Oficinas 37 Ciudades 36% YTD template increase 27% Crecimiento anual de ingresos Fuerte presencia global con gran talento para proveer transformaciones digitales y cognitivas. Argentina Colombia Uruguay India Chile Peru España Bielorrusia Rumania EEUU Méjico Brasil Inglaterra Canadá Luxemburgo Francia Globant Proprietary | Confidential information 2003 Fundación 2006 Firma con Google 2017 Nombrados líderes mundiales de servicios de consultoría de estrategia digital por IDC MarketScape 2019 Lanzamiento de Be Kind 2008 Inversión de Riverwood Capital y FTV Capital 2009 Lanzamiento de nuestros estudios 2012 Inversión De WPP 2014 Cotizamos en NYSE 2015 Oferta secundaria 2016 Lanzamiento de SOP
  • 3. Globant Proprietary | Confidential Information Algunos de nuestros clientesABOUT GLOBANT
  • 4. Globant Proprietary | Confidential Information GLOBANT Gaming Studio
  • 5. Globant Proprietary | Confidential Information Smart Toys Game Development Online Services eSports & Second Screen Virtual & Augmented Reality Art & Animation ➔ Leverage game mechanics with a different approach. ➔ Help our partners through production, launch and operation. ➔ Solid expertise with the most recognized companies in the gaming industry. ➔ Creative talent, solid technology frameworks, and processes to scale and foster innovation. ➔ We develop games and features for multiple platforms: Social • PC • Mobile • Next Generation • Consoles • VR/AR Technologies. 12+ Years working with top AAA studios 400+ Engineers and developers, 2D & 3D artists 100+ Projects in gaming, 3D graphics, platforms, virtual & augmented reality We specialize in the design and development of world-class videogames and online services, which work across web, social, and mobile channels. OUR GAMING STUDIO GAMING STUDIO
  • 6. Globant Proprietary | Confidential Information Intro to WebGL 2020
  • 7. Globant Proprietary | Confidential Information 3D Basics
  • 8. 3D Basics ● Rendering a 3D scene is like taking a picture. You need some objects to photograph, which will have some materials, a few lights so we can actually see the objects, and a camera to take the picture: Globant Proprietary | Confidential Information 3D Basics
  • 9. 3D Basics - Scene ● We call a 3D scene to the following group of components: ○ A set of 3D objects defined by its Geometry and Materials. ○ A set of light sources that define the amount of light that hits each portion of the model. ○ A Camera that defines from which point of the 3D space we actually see the rest of the scene. ● The action of processing the 3D scene and generate a 2D representation is called Render. We have different types of Renderers: ○ Offline renderers: the tools used by companies like Pixar or Dreamworks to make films. Some of them are: Maya, Zbrush, 3D Studio and Blender. ○ Real-time renderers: used by games to generate frames based on user inputs. Unreal, Frostbite, Unity and threeJS have real-time renderers among other components. Globant Proprietary | Confidential Information 3D Basics
  • 10. 3D Basics - Models ● The geometry of models are represented in the 3D cartesian space by a set of points (vertices) and triangles: Globant Proprietary | Confidential Information 3D Basics ● Basic shape geometry usually comes among other vertex properties like normals and colors. Normals are used to calculate the effect of lights over the object ● The final aspect of every pixel of the object is calculated using what we call Materials.
  • 11. 3D Basics - Cameras ● Intuitively, cameras define from where we see the scene. They have a set of properties like its position and the target direction. ● What you can see through a camera is limited by a volume called the View Frustum. Globant Proprietary | Confidential Information 3D Basics ● You need to correctly define all this properties to actually “see something” ● Usually it is not that difficult because there are a set of predefined values that works on most situations and from where you can start experimenting.
  • 12. Globant Proprietary | Confidential Information OpenGL and WebGL
  • 13. Some background OpenGL is one of the two main APIs for computer graphics, and the only open source one. It’s meant to provide an abstract way to interact with different GPU hardware and develop high performance 3D apps. On top of that builds WebGL, which takes a restricted portion of OpenGL and exposes it to the web. Globant Proprietary | Confidential Information WebGL and OpenGl
  • 14. WebGL Some characteristics about WebGL ● Low level ● Widely supported by modern browsers ● Two versions ○ 1.0 is based on OpenGL ES 2.0 ○ 2.0 is based on OpenGL ES 3.0 ● Shaders written on GLSL ○ Shaders are programs that run on the GPU ○ GLSL is a simple C-like language Globant Proprietary | Confidential Information WebGL and OpenGl
  • 15. Globant Proprietary | Confidential Information ThreeJs intro
  • 16. Three.js- Introduction ● Three.js is a JavaScript library used to display 3D graphics in a web browser in real-time. ● It uses WebGL at its core and provides an API which define a framework that simplifies many aspects of WebGL programming. ● Browser support: Chrome, Firefox, Edge, Opera ● It’s a fast evolving project that has many components so getting the right versions of each module is very important. ● Three.js is published as an npm module so to install it you just need to run: npm install three from your working directory. Globant Proprietary | Confidential Information ThreeJs Intro
  • 17. Three.js - Organization Globant Proprietary | Confidential Information ThreeJs Organization ● The base core of functionality is included in the three.js file. ● Many other components like loaders, controls and shaders are part of the examples directory. ● There are many ways to include the modules into your project. One of them is using import: <script type="module"> import * as THREE from './node_modules/three/src/Three.js'; import { WEBGL } from './node_modules/three/examples/jsm/WebGL.js'; import { GLTFLoader } from './node_modules/three/examples/jsm/loaders/GLTFLoader.js'; import { OrbitControls } from './node_modules/three/examples/jsm/controls/OrbitControls.js';
  • 18. HTML render element Globant Proprietary | Confidential Information ThreeJs HTML setup ● You can use the entire document canvas to show the rendered image, but it is more common that the output only takes a portion of it. ● To do that include a <div> element with an id in the HTML body: <div id = "Scene-Content"> </div> ● Then use this id in the script to define where to attach the renderer into the HTML, doing something like this: // Renderer Setup var renderer = new THREE.WebGLRenderer({ antialias: true}); renderer.setSize( window.innerWidth, window.innerHeight); renderer.setClearColor( 0x000000); renderer.shadowMapEnabled = true; // HTML binding var elementID = 'Scene-Content'; var element = document.getElementById('Scene-Content'); element.appendChild(renderer.domElement);
  • 19. Globant Proprietary | Confidential Information App walkthrough
  • 20. Introduction We’ll introduce the different concepts of graphics development by walking through a small app to visualize models written using ThreeJS. Globant Proprietary | Confidential Information App walkthrough
  • 21. Globant Proprietary | Confidential Information App walkthrough Initial setup The first things you need to create are a renderer instance, a scene and set up the render loop. In this case we are creating an empty scene and a renderer that covers the entire window. The main loop will be executed every frame by the browser and will render the scene. var scene = new THREE.Scene(); var renderer = new THREE.WebGLRenderer(); renderer.setSize( window.innerWidth, window.innerHeight); document.body.appendChild( renderer.domElement ); function mainLoop() { requestAnimationFrame( mainLoop ); renderer.render( scene, camera ); } mainLoop();
  • 22. Globant Proprietary | Confidential Information App walkthrough Game Loop The Game Loop is where everything happens. The idea is that the app is constantly executing the Game Loop until it exit. It typically has the following steps: ● Get Input: Where you get the player input: mouse, Keyboard, Joystick, etc… ● Update: Where you use the player’s input to update your game logic and other systems like physics. ● Render: Where you execute the commands needed to render the scene. ThreeJS automatically goes over the scene and calls the necessary WebGL commands. function mainLoop() { requestAnimationFrame( mainLoop ); renderer.render( scene, camera ); } mainLoop();
  • 23. Globant Proprietary | Confidential Information App walkthrough Cameras There are two main types of cameras commonly used, perspective and orthographic. Perspective camaras make the world look like you are used to seeing it, where parallel lines join on the horizon. Orthographic cameras keep parallel lines parallel.
  • 24. Globant Proprietary | Confidential Information App walkthrough Cameras Creating a camera on ThreeJS is just creating a new object of type PerspectiveCamera or OrthographicCamera and adding it to the scene. const fieldOfView = 90; const nearDistance = 0.1; const farDistance = 1000; var camera = new THREE.PerspectiveCamera( fieldOfView , width/height, nearDistance , farDistance); scene.add( camera ); The properties passed to the function are ● Field of view ○ How wide the view angle of the camera is. Usual values are 45, 90 and 110, cell phone cameras are around 65, the human eye is around 135. ● Aspect ratio ○ This is just the ratio between width and height. ● Near distance and far distance ○ This the the nearest (and the farthest) distance we care about.
  • 25. Globant Proprietary | Confidential Information App walkthrough Model Loading ● Three.js provides several built-in geometries, like boxes, spheres, cylinders, cones, etc. ● To add more elaborated geometry three.js provides loaders for popular 3D formats like .fbx, .obj and many more. ● Recommended format: glTF. It’s supported by 3D modeling packages as an export option. ● To use the glTFLoader you must import the following module: import { GLTFLoader } from './node_modules/three/examples/jsm/loaders/GLTFLoader.js'; ..or include the following script: <script src="./node_modules/three/examples/js/loaders/GLTFLoader.js"></script>
  • 26. Globant Proprietary | Confidential Information App walkthrough Model Loading ● To load a glTF model use this reference code: new GLTFLoader().load( // resource URL 'path/to/Model.glb|.gltf', // called when the resource is loaded function ( gltf ) { scene.add( gltf.scene ); }, // called while loading is progressing function ( xhr ) { console.log( ( xhr.loaded / xhr.total * 100 ) + '% loaded' ); }, // called when loading has errors function ( error ) { console.log( 'An error happened: ' + error ); } ); The .load method provides three function callbacks to catch different events: ● Loading done. ● Loading progress. ● Loading error. The most important is the Loading done callback because in that point we know for sure that the model is completely loaded in memory and we can successfully add it to the scene.
  • 27. Globant Proprietary | Confidential Information App walkthrough Model Loading - Model anatomy ● The loader automatically creates an Object3D object and uses its children array to build the same hierarchy defined as the one constructed in the 3D modeling program. ● It is common that after loading you need to change some aspects of the model, like some material property or the shadows of the object. function enableShadows(object) { if(object.type='Mesh'){ object.castShadow = true; object.receiveShadow = true; } for (let mod of object.children) { enableShadows(mod); } }
  • 28. Globant Proprietary | Confidential Information App walkthrough Materials Materials define the visual properties of the object, like color and roughness. For example, a piece of car tire is rough and black, without reflections, while a spoon can be smooth and reflective.
  • 29. Globant Proprietary | Confidential Information App walkthrough Materials - PBR PBR stands for Physically Based Rendering, and is the most used material model nowadays. It defines a few parameters that allow to model a wide variety of materials. Some of them are: ● Roughness ● Albedo (Surface color) ● Metalness (usually 0 or 1) Additionally, a texture is usually used to add detail by modifying the surface orientation.
  • 30. Globant Proprietary | Confidential Information App walkthrough Materials - PBR The good news is that you don’t need to do much to use PBR materials, as ThreeJS supports them out of the box. If you are loading a GLTF file, it will create the materials for you. Otherwise you assign it when creating your geometry, as in the following example. var geometry = new THREE.BoxGeometry(); var material = new THREE.MeshBasicMaterial({ color: 0x00ff00 }); var cube = new THREE.Mesh( geometry, material ); scene.add( cube );
  • 31. Globant Proprietary | Confidential Information App walkthrough Lights ● Three.js offers many different types of lights you can use in your scenes: THREE.SpotLight, THREE. DirectionalLight, THREE.AmbientLight and THREE.HemisphereLight. ● Directional light mimics the light coming from the Sun, with parallel rays following a direction. ● Ambient light just adds a constant light to every pixel, in an effort to simulate the global light of the ambient. It is used to soften the illumination. ● With Ambient + Directional you can easily get this result: Ambient factor
  • 32. Globant Proprietary | Confidential Information App walkthrough Lights ● Here is the code to add an Ambient light and a Directional Light var ambientLight = new THREE.AmbientLight(0xffffff, 0.5); scene.add(ambientLight); var directionalLight = new THREE.DirectionalLight( 0xffffff, 3.0 ); directionalLight.position.set( 0,0,0 ); directionalLight.target.position.set(1,-1,-1); directionalLight.target.updateMatrixWorld(); scene.add (directionaLight); ● You need to define Color and Intensity in the constructor. ● Directional light also needs a position and a target to define its direction. ● You must call updateMatrixWorld() after setting a new direction.
  • 33. Globant Proprietary | Confidential Information App walkthrough Shadows ● Shadows are a big subject in Computer Graphics. They are difficult to generate correctly and efficiently. ● For that reason there are a huge number of algorithms that treat every special case separately in order to achieve an efficient implementation. ● ShadowMaps is one of these algorithms and it is implemented in Three.js by default. ● The shadow is calculated by rendering the objects from the light to a texture that then is projected over the scene.
  • 34. Globant Proprietary | Confidential Information App walkthrough Shadows ● The steps to add shadows are: ○ Enable Shadow maps in the renderer: ○ Define which object will cast a shadow. ○ Define which object will receive shadows. ○ Define which light will cast a shadow and define the camera from the light point of view. renderer.shadowMap.enabled = true; object.castShadow = true; object.receiveShadow = true; directionalLight.castShadow = true; directionalLight.shadow.camera.near = -250; directionalLight.shadow.camera.far = 250 directionalLight.shadow.camera.left = -250; directionalLight.shadow.camera.right = 250; directionalLight.shadow.camera.bottom = -250; directionalLight.shadow.camera.top = 250;
  • 35. Globant Proprietary | Confidential Information App walkthrough Image Based Lighting Image Based Lighting (IBL) is a method to use a static texture, usually a photograph, to represent the environment and compute lighting from it. The photograph is a 360 degree picture, so you can know what the environment is for any direction. It’s a fast method that adds a lot of realism compared to a constant ambient color.
  • 36. Globant Proprietary | Confidential Information App walkthrough Image Based Lighting Once again, ThreeJs makes it easy to use IBL on your apps. You load the environment texture, pass it to an instance of PMREMGenerator, which takes care of doing the appropriate processing, and then just assign the texture to your scene. Additionally you can also use it as the background for your scene. new THREE.TextureLoader().load('path/to/texture', function (envMap){ var generator = new THREE.PMREMGenerator(renderer); var env = generator.fromEquirectangular(envMap); generator.dispose(); scene.background = env.texture; scene.environment = env.texture; });
  • 37. Globant Proprietary | Confidential Information Questions?
  • 38. Globant Proprietary | Confidential Information Further reading
  • 39. Globant Proprietary | Confidential Information Further Reading ● Shadows ○ research.michael-schwarz.com/publ/files/shadowcourse-eg10.pdf ● PBR ○ Artist oriented - marmoset.co/posts/physically-based-rendering-and-you-can-too ○ Tech oriented - learnopengl.com/PBR/Lighting ● IBL ○ Technical breakdown and explanation - learnopengl.com/PBR/IBL/Specular-IBL ○ Free environments on HDR format - hdrihaven.com ● Cameras ○ Useful to understand the relation between the near and far plane - en.wikipedia.org/wiki/Z-buffering ● Shaders ○ A tutorial on how to create custom shaders - aerotwist.com/tutorials/an-introduction-to-shaders-part-1 ● Lights ○ Three.js lights - threejsfundamentals.org/threejs/lessons/threejs-lights.html ○ Shader calculation: www.tomdalling.com/blog/modern-opengl/08-even-more-lighting-directional-lights-spotlights-multiple-lights