Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
WebGL + 3D models by using Three.js Blender Exp...
Search
yomotsu
January 25, 2015
Programming
17k
18
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
WebGL + 3D models by using Three.js Blender Exporter
yomotsu
January 25, 2015
More Decks by yomotsu
See All by yomotsu
three.jsとRapierでレースゲームが3日でできた話
yomotsu
0
970
PBR in three.js
yomotsu
1
1.5k
dialog要素でつくるモーダルダイアログ
yomotsu
0
1.1k
IE to Edge
yomotsu
1
410
A Camera Control Library for three.js
yomotsu
1
1.5k
Let’s try AR on mobile Web with <model-viewer>
yomotsu
0
600
WebXR: Beyond WebGL
yomotsu
2
1.9k
Non-DOM components with WebGL in Vue.js
yomotsu
5
13k
WebGL Libs for WebApp Frameworks
yomotsu
4
7.9k
Other Decks in Programming
See All in Programming
LL言語やWebフレームワークのPostgreSQL対応 〜DBの機能がユーザーに届くまで〜
kentaroutakeda
1
150
技術的負債を組織課題として解く-増えすぎたマイクロサービスとの戦い-
reimaru
1
2k
AWS DevOps Agentで インシデント対応をAIに任せたい
honmarkhunt
7
3k
スマート反転とウェブアクセシビリティ
camiha
0
210
Building an Out-of-Order CPU
latte72
1
790
thread_parallel_with_free-threaded_Python_and_NumPy.pdf
riku_sakamoto
0
340
選挙速報を多くのユーザーへ 届ける Live Activities 設計
hamayokokuririn
0
150
フロントエンドUIフレームワークのこれまでとこれから
ssssota
5
2.8k
Vue Fes Japan 2026 タイムテーブル徹底解説
448jp
1
250
AI が書く Go コードの品質を劇的に向上させる Linter: “declscope”
mpyw
0
370
What We Talk About When We Talk About XP
m_seki
2
650
Kiroで創り、AgentCoreで繋ぐ!AWSで実践する「AI-DLC」から「AIエージェント統合」までの最新地図
licux
4
700
Featured
See All Featured
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.4k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
520
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
1
410
The Invisible Side of Design
smashingmag
301
52k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
580
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
6
1.2k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.2k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
470
Testing 201, or: Great Expectations
jmmastey
46
8.3k
The Limits of Empathy - UXLibs8
cassininazir
1
680
Code Review Best Practice
trishagee
74
20k
Transcript
WebGL + 3D models by using Three.js Blender Exporter Presented
by Akihiro Oyamada (@yomotsu) Jan 25, 2015
Frontend Engineer at PixelGrid, Inc. @yomotsu recent works • http://yomotsu.github.io/walkthrough/
• http://yomotsu.github.io/xmas2014/ Akihiro Oyamada
Download the hands-on material https://github.com/tokyowebglmeetup/ h5conf2015_session2/
three.js and Blender
5 http://threejs.org/
6 http://www.blender.org/
WebGL + 3D models is much more fun!
You don't make 3D models? There are many 3D models
with open license!
9 http://nasa3d.arc.nasa.gov/
10 http://blendswap.com/
11 https://www.yobi3d.com/
Now you can prepare 3D models. How do we convert
3D models to WebGL?
three.js Blender exporter!
FYI We use previous exporter r69 The brand new exporter
(r70) is still limited a bit, as of January 2015
How to install Blender exporter
Download three.js r69 for previous blender exporter 16 https://github.com/mrdoob/three.js/releases/tag/r69
Although, we don't use this time, You can get latest
three.js package for the new Exporter, from GitHub 17 https://github.com/mrdoob/three.js or FYI
Copy io_three folder three.js-r69 ... utils exporters blender 2.65 scripts
addons io_three
Put io_three into following place Windows: C:\Program Files\Blender Foundation\Blender\2.7X\scripts\addons\
Mac OSX: /Applications/blender.app/Contents/Resources/2.7X/scripts/addons/
Can’t Open Blender as a folder in your Mac? Just
right click, then Show Package Contents
Macintosh HD/Applications/blender.app/Contents/Resources/2.7X/scripts/addons/ C:\Program Files\Blender Foundation\Blender\2.7X\scripts\addons\
Launch Blender
File > User Preferences
Type in three in the search box
Mark to activate
Press Save User Setting button
Now three.js Exporter is ready!
1. Download three.js package 2. Copy io_three folder 3. Put
it into scripts/addons folder of Blender 4. Active the addon under User Preferences > Addons SFWJFX
How to publish a 3D model
we are gonna use alfaromeo.blend html5conf/session2 _original 1_object alfaromeo.blend ...
...
None
Mouse TrackPad Rotate Pan Zoom Select CBTJDPQFSBUJPO + shift +
shift
Mouse TrackPad Translate Rotate Scale Delete CBTJDPQFSBUJPO → G →
R → S → G → R → S Z Z
None
Mark following options, then save it.
You will have a JSON file and texture images model
data texture textu
How to append the 3D model into a Web page
var width = window.innerWidth, height = window.innerHeight, clock = new
THREE.Clock(), scene, camera, renderer, ambientLight, directionalLight, loader, alfaromeo = new THREE.Object3D(); ! scene = new THREE.Scene(); ! camera = new THREE.PerspectiveCamera( 40, width / height, 1, 1000 ); camera.position.set( 0, 1, 5 ); ! renderer = new THREE.WebGLRenderer( { antialias: true } ); renderer.setSize( width, height ); document.body.appendChild( renderer.domElement ); write code as usual
directionalLight, loader, alfaromeo = new THREE.Object3D(); ! scene = new
THREE.Scene(); ! camera = new THREE.PerspectiveCamera( 40, width / height, 1, 1000 ); camera.position.set( 0, 1, 5 ); ! renderer = new THREE.WebGLRenderer( { antialias: true } ); renderer.setSize( width, height ); document.body.appendChild( renderer.domElement ); ! ambientLight = new THREE.AmbientLight( 0xffffff ) scene.add( ambientLight ); ! directionalLight = new THREE.DirectionalLight( 0xffffff ); directionalLight.position.set( 0, 1, 0 ); scene.add( directionalLight ); ! scene.add( new THREE.GridHelper( 10, 1 ) ); ! loader = new THREE.JSONLoader(); write code as usual
camera.position.set( 0, 1, 5 ); ! renderer = new THREE.WebGLRenderer(
{ antialias: true } ); renderer.setSize( width, height ); document.body.appendChild( renderer.domElement ); ! ambientLight = new THREE.AmbientLight( 0xffffff ) scene.add( ambientLight ); ! directionalLight = new THREE.DirectionalLight( 0xffffff ); directionalLight.position.set( 0, 1, 0 ); scene.add( directionalLight ); ! scene.add( new THREE.GridHelper( 10, 1 ) ); ! loader = new THREE.JSONLoader(); loader.load( 'alfaromeo.json', function( geometry, materials ) { ! alfaromeo = new THREE.Mesh( geometry, new THREE.MeshFaceMaterial( materials ) ); ! write code as usual
! ambientLight = new THREE.AmbientLight( 0xffffff ) scene.add( ambientLight );
! directionalLight = new THREE.DirectionalLight( 0xffffff ); directionalLight.position.set( 0, 1, 0 ); scene.add( directionalLight ); ! scene.add( new THREE.GridHelper( 10, 1 ) ); ! loader = new THREE.JSONLoader(); loader.load( 'alfaromeo.json', function( geometry, materials ) { ! alfaromeo = new THREE.Mesh( geometry, new THREE.MeshFaceMaterial( materials ) ); ! scene.add( alfaromeo ); ! } ); ! ( function renderLoop () { write code as usual
! ambientLight = new THREE.AmbientLight( 0xffffff ) scene.add( ambientLight );
! directionalLight = new THREE.DirectionalLight( 0xffffff ); directionalLight.position.set( 0, 1, 0 ); scene.add( directionalLight ); ! scene.add( new THREE.GridHelper( 10, 1 ) ); ! loader = new THREE.JSONLoader(); loader.load( 'alfaromeo.json', function( geometry, materials ) { ! alfaromeo = new THREE.Mesh( geometry, new THREE.MeshFaceMaterial( materials ) ); ! scene.add( alfaromeo ); ! } ); ! ( function renderLoop () { make a loader
directionalLight.position.set( 0, 1, 0 ); scene.add( directionalLight ); ! scene.add(
new THREE.GridHelper( 10, 1 ) ); ! loader = new THREE.JSONLoader(); loader.load( 'alfaromeo.json', function( geometry, materials ) { ! alfaromeo = new THREE.Mesh( geometry, new THREE.MeshFaceMaterial( materials ) ); ! scene.add( alfaromeo ); ! } ); ! ( function renderLoop () { ! requestAnimationFrame( renderLoop ); var elapsed = clock.getElapsedTime(); alfaromeo.rotation.y = elapsed / 2; renderer.render( scene, camera ); use load method
directionalLight.position.set( 0, 1, 0 ); scene.add( directionalLight ); ! scene.add(
new THREE.GridHelper( 10, 1 ) ); ! loader = new THREE.JSONLoader(); loader.load( 'alfaromeo.json', function( geometry, materials ) { ! alfaromeo = new THREE.Mesh( geometry, new THREE.MeshFaceMaterial( materials ) ); ! scene.add( alfaromeo ); ! } ); ! ( function renderLoop () { ! requestAnimationFrame( renderLoop ); var elapsed = clock.getElapsedTime(); alfaromeo.rotation.y = elapsed / 2; renderer.render( scene, camera ); make call back
new THREE.MeshFaceMaterial( materials ) ); ! scene.add( alfaromeo ); !
} ); ! ( function renderLoop () { ! requestAnimationFrame( renderLoop ); var elapsed = clock.getElapsedTime(); alfaromeo.rotation.y = elapsed / 2; renderer.render( scene, camera ); ! } )(); render it!
None
How to publish a 3D model with animations
None
Apply rest pose 1. go to Pose Mode 2. select
all bones 3. Pose > Clear Transform > All 4. ctrl + A 5. Apply Location 6. ctrl + A 7. Apply Rotation 8. ctrl + A 9. Apply Scale
Mark following options, and set Frame step. then save it.
load JSON
active skinning
make a SkinnedMesh
make animations
add it
start an animation
update animations
None
TIPS
Blender exporter does not support CJK letters for names of
geometries, materials, bones and others. Replace them to ascii
Since WebGL work on web browsers, .tga image format is
not supported. use PNG images instead.
three.js does not support IK, Bake as FK in Blender
see http://yomotsu.net/blog/2014/02/19/convert-mmd-for- threejs.html
If you publish a model with animations, set rest pose
in Blender see http://stackoverflow.com/questions/18752146/blender- exports-a-three-js-animation-bones-rotate-strangely/ 18770716#18770716
The New Blender Exporter Features
• BufferGeometry • Precision for float numbers • Debug logging
gl.finish(); @yomotsu