minko - creating cross-platform 3d apps with minko
Post on 31-May-2015
1.358 Views
Preview:
TRANSCRIPT
Meetup iOS DevelopersCreating cross-platform 3D apps with Minko.
Jean-Marc Le RouxCEO and co-founder of Aerys
Creator of Minko (http://minko.io)
@promethe42jeanmarc@aerys.in
http://minko.io
@Minko3D
by
3D. Everywhere.Deliver engaging, interactive and rich 3D content and applications on
desktops, mobiles and the web.
Minko Enterprise
“We chose Minko because its exclusive compression algorithms help
us distributing cutting edge 3D content on mobiles and the web.”
Gaël Seydoux, Chief of the NBO lab at
It’s like Dropbox for 3D files Visualize, share, annotate, collaborate…
On mobiles, tablets, the web and desktops
Exclusive 3D streaming algorithms Load and display 3D files up to 200 times faster
Cloud. Light. Mobile.
Compatible with all major 3D CAO/design tools 77+ supported file formats
What You See Is What You Get Physics
Animations
Lights
Materials
....
…Minko Studio Design. Integrate. Live.
Minko Engine
Develop once, deploy everywhere
The power of native, the reach of the
web
Open source, with enterprise-class
support
“We chose Minko to be the 3D engine in one of our new Flash-based gamesbecause we think it’s a highly professional […] solution in termsof development ecosystem and high performance.”
André Weissflog, Head of Development at
Skyrama 2 by BigPoint
Mobile. Web. Native.
International Gaming References
New Game Released: IronForce
Published by EA/Chillingo
http://www.chillingo.com/games/iron-force/
Tank MMORPG
Already available on iOS
Available soon on Android
New Game Released: IronForce
Minko VS Unity - Architecture
Unity
Core Library
Mono VM
Application
OS
Minko
Core Framework & Plugins
Lua VM
Application
OS
Native Plugins
Javascript VM Javascript VM (WIP)
Minko VS Unity – Open Source
Unity
Core Library
Mono VM
Application
OS
Minko
Core Framework & Plugins
Lua VM
Application
OS
Native Plugins
Javascript VM Javascript VM (WIP)
Supported Platforms
Platforms Unity Minko
Windows YES YES
WinRT / Windows 8 UI / Windows Store YES YES
OS X YES YES
Linux Desktop (Ubuntu, SteamOS, TVs…) YES YES
Linux Server NO YES
HTML5 NO YES
iOS YES YES
Android YES YES
Flash Player NO WIP
Windows Phone YES WIP (WP 8.1)
Minko coming to Windows Phone!
Windows Phone 8.1 only
But all existing Windows
Phones should be supported!
Games have a big success
on the Windows Store.
Windows Store, Downloads per category – Worldwide, Jan. 2014
2D/3D file formats
50+ 3D file formats
– 3DS, BLEND (Blender 3D), DAE/Collada, FBX, IFC-STEP , ASE, DXF, HMP, MD2, MD3 , MD5,
MDC, MDL, NFF, PLY, STL, X, OBJ, SMD, LWO, LXO, LWS, TER, AC3D , MS3D , COB, Q3BSP,
XGL, CSM, BVH, B3D, NDO, Ogre XML, Q3D
20+ 2D file formats
– JPEG, PNG, TIF, TGA, RAW, PSD…
Optimized Minko dedicated formats
– Scene, material, texture, geometry…
– Open source (de)serializer
– Extensions (Physics 3D compression, 3D streaming…)
C++ 2011
Standard, fast, well documented and supported by a vast community
Already fully supported by all major compilers (VS, GCC, LLVM…)
New additions make it closer to what we’re used to with AS3/Javascript
– Closures/lambda functions
– Type inference (instead of dynamic typing)
– Shared pointers
C++11 Example – Closures
// callback is removed when mouseWheel is set to nullptr
C++11 Example – Shared pointers
Components – Ex: Directional Light
The Transform component is not mandatory
– Scene nodes do not necessarily have a 3D transform: lighter and more customizable
– Yet our directional light is pointless without a configurable direction…
Components – Ex: Camera
Our camera has 3 components:
– Transform will make our Camera position/orientation customizable
– PerspectiveCamera will provide actual camera related data to the rendering
API
– Renderer will do the actual DrawCall storage/frame rendering
Emscripten https://github.com/kripken/emscripten
Open source project driven by Mozilla
– Based on LLVM, which is supported by Google, Apple, Intel and many more
Cross-compile C++ code to Javascript code
– Binds OpenGL to WebGL
– Provide virtual file system
– C++ Javascript bindings
Code optimizations
– Closure compiler
– asm.js (2x performances of native code!)
Code compression using LZMA
Premake http://industriousone.com/premake
Cross-platform build system
– Windows, Mac and Linux
– Reference in the video game industry
– Well documented
Compatible with most IDEs/tools
– gmake
– Visual Studio
– XCode
Easy to extend and customize
– Based on LUA script configuration files
– Adding support for emscripten was easy
HTML5 UI (WIP)
Portable
– Chromium on desktop
– WebView on mobiles
– DOMElement on the web
Responsive UI design
Leverage existing HTML5 tools and
frameworks
Video
3D backbuffer
HTML5 UI overlay
Parallelization
Workers
Threads (except for HTML5)
Coroutines (Lua)
SCRIPTING
Core Framework Language Fast
Rich & expressive
Optimized for each target
Scripting Language Simple
Interpreted
Dynamic
VSC, C++, Java, C#... Javascript, Python, AS3…
We chose… Lua!
Fits all the requirements of a scripting language
Vastly used by the video game industry (World of Warcraft, Fable II & III, NeverwinterNights, …)– Complete list of games scripted with Lua
Very (very) fast– LuaJIT is comparable to Javascript V8, if not faster
Designed to be embedded
Designed to script games– Simple but very efficient syntax– Minimalistic set of features but very extensible– Coroutines!
C++ Lua? LuaGlue!
C++/Lua bindings
Open source project
– https://github.com/Tomasu/LuaGlue
– We contribute as much as possible
Leverage C++11
– Optimize as compile time as much as possible
– Simple binding interface
Used to bind 90% of Minko’s C++ API
– Write 100% of your app in Lua
Coroutines
A function can suspend its execution…
– coroutine.yield()
… and then resume « sometime later »
– coroutine.resume()
Gives the illusion of parallelism
– Yet no complicated threading stuff
– Fully cross-platform
Allow the creation of non-blocking (heavy) functions
Can (always?) be used in place of events/callbacks
Coroutines
function myScript()
doSomething()
while isIdle do
say(‘hello how are you?’)
wait(seconds(3))
end
while not isIdle do
wait(keyboard.anyKeyDown)
handleKeyboard()
end
end
Event driven Coroutine driven
Action => reaction
Breaks the code in multiple handlers
Messy execution flow
Messy scopes
Wait for « something » to
happen
Non-blocking
Simple execution flow
Meaningful and readable
You choose!
C++
– Performances
– Rich and powerful language
Lua
– Simple and efficient
– Fast iteration times
Mix both in any project on any target
Is it really ready?
SoccerPun.ch comming to HTML5 and native iOS/Android!
About SoccerPun.ch
Lots of important game-related features– 3D graphics– Physics– Animations– AI– Gamepad– …
Developped in 2 days using Minko 2 and AS3– Entirely re-developped in C++/Lua
Should be one of the most advancedWebGL game so far– Then we can juge whether HTLM5 is ready or
not for games
Conclusion
Open source
– More than 15 OS projects used
– 1 million lines of code
Public beta coming in March
– New website
– 50+ tutorials
– 10+ example projects
– 800 000 lines of code
THANK YOU!
Aerys USInstitut Mines-Télécom Silicon Valley
NASA Research Park
Moffett Field
CA 94035 Mountain View
USA
Aerys Europe15 rue Jean-Baptiste Berlier
Hall B
75013 Paris
France
Customer service
+33 805 690 489Monday to Friday, from 9:00 to 17:00 UTC
hello@aerys.in
http://aerys.in
Jean-Marc Le Roux
CEO
jeanmarc@aerys.in
+336 20 56 45 78
Warren Seine
CTO
warren@aerys.in
+336 79 51 64 66
Ymane Amrane
Sales Manager
ymane@aerys.in
+339 72 28 55 83
http://minko.io
top related