SlideShare a Scribd company logo
Как мы делали
многопользовательскую
браузерную игру для HL++ с
воксельной графикой
Александр Хаёров / Unit Manager /
t.me/hayorov
difficulty level
Ad Voxel Art Designer Wanted
https://urbn.odn.pw
x
difficulty level
Ad Voxel Art Designer Wanted
https://urbn.odn.pw
x
Who Are Indie Game Developers?
Source: somewhere from the Internet
Who Are Indie Game Developers?
Source: somewhere from the Internet
Indie is a shortform of "independent"
Who Are Indie Game Developers?
97% men
Source: somewhere from the Internet
Indie is a shortform of "independent"
Who Are Indie Game Developers?
97% men
60% singles
Source: somewhere from the Internet
Indie is a shortform of "independent"
Who Are Indie Game Developers?
97% men
60% singles
1-3 months/game
Source: somewhere from the Internet
Indie is a shortform of "independent"
Who We Are
Who We Are
Alex Khaerov
a Unit Manager at Ingram Micro Cloud
Who We Are
and the Great Team of Engineers
Alex Khaerov
a Unit Manager at Ingram Micro Cloud
Who We Are
and the Great Team of Engineers
@themaxbelov @ToxicWar @weglov@spukst3r
Alex Khaerov
a Unit Manager at Ingram Micro Cloud
Who We Are
@themaxbelov @ToxicWar @weglov
and the Great Team of voxel jedis, optimisation masters, gurus of the 3d, lords of the big data
@spukst3r
Alex Khaerov
a Unit Manager at Ingram Micro Cloud
Background
Background
Exhibition stand at HL++2017
Background
Exhibition stand at HL++2017
Reddit r/Place influence
/r/Place
a social experiment by Reddit
/r/Place
1,000 x 1,000 px canvas
a social experiment by Reddit
/r/Place
1,000 x 1,000 px canvas
pixel * user per 5 min
a social experiment by Reddit
/r/Place
1,000 x 1,000 px canvas
pixel * user per 5 min
72 hours of fun
a social experiment by Reddit
/r/Place
1,000 x 1,000 px canvas
pixel * user per 5 min
72 hours of fun
a social experiment by Reddit
/r/Place
1,000 x 1,000 px canvas
pixel * user per 5 min
72 hours of fun
a social experiment by Reddit
/r/Place
1,000 x 1,000 px canvas
pixel * user per 5 min
72 hours of fun
> 1M players
a social experiment by Reddit
/r/Place
1,000 x 1,000 px canvas
pixel * user per 5 min
72 hours of fun
> 1M players
a social experiment by Reddit
90K simultaneously
Background
Exhibition stand at HL++2017
Reddit r/Place influence
Background
Exhibition stand at HL++2017
Reddit r/Place influence
Games are full of fun
Background
Exhibition stand at HL++2017
Reddit r/Place influence
Games are full of fun
A new dev experience
The Game
Features
The Game
multi-player
Features
The Game
multi-player
Features
multi-player and networked
The Game
multi-player
2D computer graphics
Features
multi-player and networked
The Game
multi-player
2D 3D computer graphics
Features
multi-player and networked
The Game
multi-player
2D 3D computer graphics
hyped tech
Features
multi-player and networked
The Game
multi-player
2D 3D computer graphics
hyped Virtual Reality tech
Features
multi-player and networked
The Game
multi-player
2D computer graphics2D 3D computer graphics
hyped techhyped Virtual Reality tech
Features
multi-player and networked
The Game
multi-player
2D computer graphics2D 3D computer graphics
hyped techhyped Virtual Reality tech
Features Concessions
multi-player and networked
The Game
multi-player
2D computer graphics2D 3D computer graphics
hyped techhyped Virtual Reality tech
client-based
Features Concessions
multi-player and networked
The Game
multi-player
2D computer graphics2D 3D computer graphics
hyped techhyped Virtual Reality tech
client-based Browser
Features Concessions
multi-player and networked
The Game
multi-player
2D computer graphics2D 3D computer graphics
hyped techhyped Virtual Reality tech
client-based Browser
voxel “block-style” objects
Features Concessions
multi-player and networked
The Game
multi-player
2D computer graphics2D 3D computer graphics
hyped techhyped Virtual Reality tech
client-based Browser
voxel “block-style” objects
Features Concessions
multi-player and networked
The Game
multi-player
2D computer graphics2D 3D computer graphics
hyped techhyped Virtual Reality tech
client-based Browser
voxel “block-style” objects
Features Concessions
multi-player and networked
The Game
multi-player
2D computer graphics2D 3D computer graphics
hyped techhyped Virtual Reality tech
client-based Browser
voxel “block-style” objects
Features Concessions
world size 1000x1000x200
multi-player and networked
The Game
Gameplay and rules
Gameplay and rules
find spots with the flag
Gameplay and rules
capture flags
find spots with the flag
Gameplay and rules
capture flags
hold and earn scores
find spots with the flag
Gameplay and rules
capture flags
hold and earn scores
find spots with the flag
win a prize
Enterprise architecture
Enterprise architecture
Enterprise architecture
+
Enterprise architecture
game-frontend
+
Enterprise architecture
game-storagegame-frontend
+
Enterprise architecture
game-storagegame-frontend
+
Enterprise architecture
game-storagegame-frontend
+
?
Replication problem
Replication problem
Replication problem
Replication problem
Active
Active Passive
Replication problem
Active Passive
Replication problem
Active Passive
Replication problem
Active Passive
+ Easy to understand
Replication problem
Active Passive
+ Easy to understand
+ More efficient
Replication problem
Active Passive
+ Easy to understand
+ More efficient
- Fragile
Replication problem
Active Passive
+ Robust to de-sync+ Easy to understand
+ More efficient
- Fragile
Replication problem
Active Passive
+ Robust to de-sync+ Easy to understand
+ More efficient
- Fragile
+ Easier to secure
Replication problem
Active Passive
+ Robust to de-sync+ Easy to understand
+ More efficient
- Fragile - Single point of failure
+ Easier to secure
Replication problem
Active Passive
+ Robust to de-sync+ Easy to understand
+ More efficient
- Fragile - Single point of failure
+ Easier to secure
✔
Replication problem
Architecture
game-storagegame-frontend
+
Architecture
game-storagegame-backendgame-frontend
+
Architecture
game-storagegame-backendgame-frontend
+
?
Data Structure
“flat array”
Data Structure
“flat array”
+ read/write = const
Data Structure
“flat array”
+ read/write = const
- memory = L^3
Data Structure
“flat array” octree
+ read/write = const
- memory = L^3
Data Structure
“flat array” octree
+ read/write = const
- memory = L^3
Data Structure
“flat array” octree
+ read/write = const
- memory = L^3
Data Structure
“flat array” octree
+ read/write = const
- memory = L^3
+ lean
Data Structure
“flat array” octree
+ read/write = const
- slower than flat- memory = L^3
+ lean
Data Structure
“flat array” octree pages/chunks
+ read/write = const
- slower than flat- memory = L^3
+ lean
Data Structure
“flat array” octree pages/chunks
+ read/write = const + lazily initialized
- slower than flat- memory = L^3
+ lean
Data Structure
“flat array” octree pages/chunks
+ read/write = const + lazily initialized
- slower than flat- memory = L^3
+ lean
- more complicated
Data Structure
“flat array” octree
+ Read/Write = const + lazily initialized
- slower than flat- Memory = L^3
+ lean
- more complicated
Data Structure
pages/chunks
“flat array” octree
+ Read/Write = const + lazily initialized
- slower than flat- Memory = L^3
+ lean
- more complicated
Data Structure
pages/chunks✔
Architecture
game-backendgame-frontend
+
?
Architecture
MongoDBgame-backendgame-frontend
+
Architecture
MongoDBgame-backendgame-frontend
+
? ?
Protocol
Protocol
1 2 3 …
N
game-frontend
Protocol
1 2 3 …
N32
32
game-frontend
Protocol
1 2 3 …
N32
32
game-frontend mongoDB > data
(1) ObjectId() { 7 fields } Object
(2) ObjectId() { 7 fields } Object
(3) ObjectId() { 7 fields } Object
(4) ObjectId() { 7 fields } Object
(5) ObjectId() { 7 fields } Object
(6) ObjectId() { 7 fields } Object
(7) ObjectId() { 7 fields } Object
(8) ObjectId() { 7 fields } Object
Protocol
1 2 3 …
N32
32
game-frontend mongoDB > data
(1) ObjectId() { 7 fields } Object
(2) ObjectId() { 7 fields } Object
(3) ObjectId() { 7 fields } Object
(4) ObjectId() { 7 fields } Object
(5) ObjectId() { 7 fields } Object
(6) ObjectId() { 7 fields } Object
(7) ObjectId() { 7 fields } Object
(8) ObjectId() { 7 fields } Object
{	
				"_id"	:	ObjectId(),	
				"x"	:	435,	
				"y"	:	377,	
				"z"	:	0,	
				“color"	:	"#5b8c9c",	
				"name"	:	null,	
				"updated"	:	ISODate()	
}
Protocol
1 2 3 …
N32
32
game-frontend mongoDB > data
(1) ObjectId() { 7 fields } Object
(2) ObjectId() { 7 fields } Object
(3) ObjectId() { 7 fields } Object
(4) ObjectId() { 7 fields } Object
(5) ObjectId() { 7 fields } Object
(6) ObjectId() { 7 fields } Object
(7) ObjectId() { 7 fields } Object
(8) ObjectId() { 7 fields } Object
{	
				"_id"	:	ObjectId(),	
				"x"	:	435,	
				"y"	:	377,	
				"z"	:	0,	
				“color"	:	"#5b8c9c",	
				"name"	:	null,	
				"updated"	:	ISODate()	
}
Protocol
1 2 3 …
N32
32
game-frontend mongoDB > data
(1) ObjectId() { 7 fields } Object
(2) ObjectId() { 7 fields } Object
(3) ObjectId() { 7 fields } Object
(4) ObjectId() { 7 fields } Object
(5) ObjectId() { 7 fields } Object
(6) ObjectId() { 7 fields } Object
(7) ObjectId() { 7 fields } Object
(8) ObjectId() { 7 fields } Object
{	
				"_id"	:	ObjectId(),	
				"x"	:	435,	
				"y"	:	377,	
				"z"	:	0,	
				“color"	:	"#5b8c9c",	
				"name"	:	null,	
				"updated"	:	ISODate()	
}
Protocol
1 2 3 …
N32
32
game-frontend mongoDB > data
(1) ObjectId() { 7 fields } Object
(2) ObjectId() { 7 fields } Object
(3) ObjectId() { 7 fields } Object
(4) ObjectId() { 7 fields } Object
(5) ObjectId() { 7 fields } Object
(6) ObjectId() { 7 fields } Object
(7) ObjectId() { 7 fields } Object
(8) ObjectId() { 7 fields } Object
{	
				"_id"	:	ObjectId(),	
				"x"	:	435,	
				"y"	:	377,	
				"z"	:	0,	
				“color"	:	"#5b8c9c",	
				"name"	:	null,	
				"updated"	:	ISODate()	
}
r
Protocol
1 2 3 …
N32
32
game-frontend mongoDB > data
(1) ObjectId() { 7 fields } Object
(2) ObjectId() { 7 fields } Object
(3) ObjectId() { 7 fields } Object
(4) ObjectId() { 7 fields } Object
(5) ObjectId() { 7 fields } Object
(6) ObjectId() { 7 fields } Object
(7) ObjectId() { 7 fields } Object
(8) ObjectId() { 7 fields } Object
game-backend
{	
				"_id"	:	ObjectId(),	
				"x"	:	435,	
				"y"	:	377,	
				"z"	:	0,	
				“color"	:	"#5b8c9c",	
				"name"	:	null,	
				"updated"	:	ISODate()	
}
get(x, y, z, r)
r
Protocol
1 2 3 …
N32
32
game-frontend mongoDB > data
(1) ObjectId() { 7 fields } Object
(2) ObjectId() { 7 fields } Object
(3) ObjectId() { 7 fields } Object
(4) ObjectId() { 7 fields } Object
(5) ObjectId() { 7 fields } Object
(6) ObjectId() { 7 fields } Object
(7) ObjectId() { 7 fields } Object
(8) ObjectId() { 7 fields } Object
game-backend
{	
				"_id"	:	ObjectId(),	
				"x"	:	435,	
				"y"	:	377,	
				"z"	:	0,	
				“color"	:	"#5b8c9c",	
				"name"	:	null,	
				"updated"	:	ISODate()	
}
get(x, y, z, r)
set(x, y, z)
r
Protocol
1 2 3 …
N32
32
game-frontend mongoDB > data
(1) ObjectId() { 7 fields } Object
(2) ObjectId() { 7 fields } Object
(3) ObjectId() { 7 fields } Object
(4) ObjectId() { 7 fields } Object
(5) ObjectId() { 7 fields } Object
(6) ObjectId() { 7 fields } Object
(7) ObjectId() { 7 fields } Object
(8) ObjectId() { 7 fields } Object
game-backend
{	
				"_id"	:	ObjectId(),	
				"x"	:	435,	
				"y"	:	377,	
				"z"	:	0,	
				“color"	:	"#5b8c9c",	
				"name"	:	null,	
				"updated"	:	ISODate()	
}
get(x, y, z, r)
set(x, y, z)
r
Protocol
1 2 3 …
N32
32
game-frontend mongoDB > data
(1) ObjectId() { 7 fields } Object
(2) ObjectId() { 7 fields } Object
(3) ObjectId() { 7 fields } Object
(4) ObjectId() { 7 fields } Object
(5) ObjectId() { 7 fields } Object
(6) ObjectId() { 7 fields } Object
(7) ObjectId() { 7 fields } Object
(8) ObjectId() { 7 fields } Object
game-backend
{	
				"_id"	:	ObjectId(),	
				"x"	:	435,	
				"y"	:	377,	
				"z"	:	0,	
				“color"	:	"#5b8c9c",	
				"name"	:	null,	
				"updated"	:	ISODate()	
}
get(x, y, z, r)
set(x, y, z)
r
Protocol
1 2 3 …
N32
32
game-frontend mongoDB > data
(1) ObjectId() { 7 fields } Object
(2) ObjectId() { 7 fields } Object
(3) ObjectId() { 7 fields } Object
(4) ObjectId() { 7 fields } Object
(5) ObjectId() { 7 fields } Object
(6) ObjectId() { 7 fields } Object
(7) ObjectId() { 7 fields } Object
(8) ObjectId() { 7 fields } Object
game-backend
updated()
(1) ObjectId() { 7 fields } Object
(2) ObjectId() { 7 fields } Object
{	
				"_id"	:	ObjectId(),	
				"x"	:	435,	
				"y"	:	377,	
				"z"	:	0,	
				“color"	:	"#5b8c9c",	
				"name"	:	null,	
				"updated"	:	ISODate()	
}
get(x, y, z, r)
set(x, y, z)
r
Protocol
1 2 3 …
N32
32
game-frontend mongoDB > data
(1) ObjectId() { 7 fields } Object
(2) ObjectId() { 7 fields } Object
(3) ObjectId() { 7 fields } Object
(4) ObjectId() { 7 fields } Object
(5) ObjectId() { 7 fields } Object
(6) ObjectId() { 7 fields } Object
(7) ObjectId() { 7 fields } Object
(8) ObjectId() { 7 fields } Object
game-backend
updated()
(1) ObjectId() { 7 fields } Object
(2) ObjectId() { 7 fields } Object
userActivity()
“{Username} joined the game” String
{	
				"_id"	:	ObjectId(),	
				"x"	:	435,	
				"y"	:	377,	
				"z"	:	0,	
				“color"	:	"#5b8c9c",	
				"name"	:	null,	
				"updated"	:	ISODate()	
}
get(x, y, z, r)
set(x, y, z)
r
Architecture
MongoDBgame-backendgame-frontend
+
Architecture
MongoDBgame-backendgame-frontend
WebSocket
+
Architecture
MongoDBgame-backendgame-frontend
WebSocket
+
+
Architecture
MongoDBgame-backendgame-frontend
WebSocket
+
+
HTTP
Architecture
MongoDBgame-backendgame-frontend
WebSocket
+
+
HTTP
Game-backend
Game-backend
Python 3.6 + aiohttp
Game-backend
Python 3.6 + aiohttp
uvloop
implemented in Cython and uses libuv
Game-backend
Python 3.6 + aiohttp
uvloop
implemented in Cython and uses libuv
motor
full-featured, non-blocking MongoDB driver for Python
Game-backend
Python 3.6 + aiohttp
uvloop
implemented in Cython and uses libuv
motor
full-featured, non-blocking MongoDB driver for Python
gunicorn
Python WSGI HTTP Server for UNIX
MongoDBgame-backendgame-frontend
WebSocket
+
+
HTTP
Architecture
MongoDBgame-backendgame-frontend
WebSocket
+
+
HTTP
Architecture
Game-frontend
Game-frontend
Native JavaScript and WebGL?
Game-frontend
Native JavaScript and WebGL?Native JavaScript and WebGL?
Game-frontend
Native JavaScript and WebGL?Native JavaScript and WebGL?
Voxel.js
an open source voxel game building toolkit for modern web browsers
Game-frontend
Native JavaScript and WebGL?Native JavaScript and WebGL?
Voxel.js
an open source voxel game building toolkit for modern web browsers
a-la minecraft world (X, Y, Z)
Game-frontend
Native JavaScript and WebGL?Native JavaScript and WebGL?
Voxel.js
an open source voxel game building toolkit for modern web browsers
a-la minecraft world (X, Y, Z)
voxels (blocks) / chunks
Game-frontend
Native JavaScript and WebGL?Native JavaScript and WebGL?
Voxel.js
an open source voxel game building toolkit for modern web browsers
a-la minecraft world (X, Y, Z)
voxels (blocks) / chunks
AABB: Bounding volume
Game-frontend
Native JavaScript and WebGL?Native JavaScript and WebGL?
Voxel.js
an open source voxel game building toolkit for modern web browsers
a-la minecraft world (X, Y, Z)
voxels (blocks) / chunks
AABB: Bounding volume
A 3D model with its bounding box drawn in dashed lines.
Game-frontend
Native JavaScript and WebGL?Native JavaScript and WebGL?
Voxel.js
an open source voxel game building toolkit for modern web browsers
a-la minecraft world (X, Y, Z)
voxels (blocks) / chunks
AABB: Bounding volume
Game-frontend
Native JavaScript and WebGL?Native JavaScript and WebGL?
Voxel.js
an open source voxel game building toolkit for modern web browsers
a-la minecraft world (X, Y, Z)
voxels (blocks) / chunks
Ray castingAABB: Bounding volume
Game-frontend
Native JavaScript and WebGL?Native JavaScript and WebGL?
Voxel.js
an open source voxel game building toolkit for modern web browsers
a-la minecraft world (X, Y, Z)
voxels (blocks) / chunks
Ray castingAABB: Bounding volume
Ray casting
Game-frontend
Native JavaScript and WebGL?Native JavaScript and WebGL?
Voxel.js
an open source voxel game building toolkit for modern web browsers
a-la minecraft world (X, Y, Z)
voxels (blocks) / chunks
Ray castingAABB: Bounding volume
Game-frontend
Native JavaScript and WebGL?Native JavaScript and WebGL?
Voxel.js
an open source voxel game building toolkit for modern web browsers
a-la minecraft world (X, Y, Z)
voxels (blocks) / chunks
Ray castingAABB: Bounding volume Textures
Game-frontend
Native JavaScript and WebGL?Native JavaScript and WebGL?
Voxel.js
an open source voxel game building toolkit for modern web browsers
a-la minecraft world (X, Y, Z)
voxels (blocks) / chunks
Ray castingAABB: Bounding volume
player with controls
Textures
Game-frontend
Native JavaScript and WebGL?Native JavaScript and WebGL?
Voxel.js
an open source voxel game building toolkit for modern web browsers
a-la minecraft world (X, Y, Z)
voxels (blocks) / chunks
Ray casting
game events (tick/setBlock/collision/renderChunk)
AABB: Bounding volume
player with controls
Textures
Game-frontend
voxel.js
your
code
Game-frontend
voxel.js
your
code
three.js
Game-frontend
voxel.js
your
code
three.js WebGL
Browser
Game-frontend
voxel.js
your
code
three.js WebGL
Browser
Hardware OpenGL
Driver
Display Mngt System
Game-frontend
voxel.js
your
code
three.js WebGL
Browser
Hardware OpenGL
Driver
Display Mngt System
Creating the scene
Game-frontend
voxel.js
your
code
three.js WebGL
Browser
Hardware OpenGL
Driver
Display Mngt System
Creating the scene
var	scene	=	new	THREE.Scene();	
var	camera	=	new	THREE.PerspectiveCamera(	75,	window.innerWidth	/	
window.innerHeight,	0.1,	1000	);	
var	renderer	=	new	THREE.WebGLRenderer();	
renderer.setSize(	window.innerWidth,	window.innerHeight	);	
document.body.appendChild(	renderer.domElement	);	
var	geometry	=	new	THREE.BoxGeometry(	1,	1,	1	);	
var	material	=	new	THREE.MeshBasicMaterial(	{	color:	0x00ff00	}	);	
var	cube	=	new	THREE.Mesh(	geometry,	material	);	
scene.add(	cube	);	
function	animate()	{	
	 requestAnimationFrame(	animate	);	
	 renderer.render(	scene,	camera	);	
}
Game-frontend
voxel.js
your
code
three.js WebGL
Browser
Hardware OpenGL
Driver
Display Mngt System
Creating the scene
var	scene	=	new	THREE.Scene();	
var	camera	=	new	THREE.PerspectiveCamera(	75,	window.innerWidth	/	
window.innerHeight,	0.1,	1000	);	
var	renderer	=	new	THREE.WebGLRenderer();	
renderer.setSize(	window.innerWidth,	window.innerHeight	);	
document.body.appendChild(	renderer.domElement	);	
var	geometry	=	new	THREE.BoxGeometry(	1,	1,	1	);	
var	material	=	new	THREE.MeshBasicMaterial(	{	color:	0x00ff00	}	);	
var	cube	=	new	THREE.Mesh(	geometry,	material	);	
scene.add(	cube	);	
function	animate()	{	
	 requestAnimationFrame(	animate	);	
	 renderer.render(	scene,	camera	);	
}
Game-frontend
voxel.js
your
code
three.js WebGL
Browser
Hardware OpenGL
Driver
Display Mngt System
Creating the scene
var	scene	=	new	THREE.Scene();	
var	camera	=	new	THREE.PerspectiveCamera(	75,	window.innerWidth	/	
window.innerHeight,	0.1,	1000	);	
var	renderer	=	new	THREE.WebGLRenderer();	
renderer.setSize(	window.innerWidth,	window.innerHeight	);	
document.body.appendChild(	renderer.domElement	);	
var	geometry	=	new	THREE.BoxGeometry(	1,	1,	1	);	
var	material	=	new	THREE.MeshBasicMaterial(	{	color:	0x00ff00	}	);	
var	cube	=	new	THREE.Mesh(	geometry,	material	);	
scene.add(	cube	);	
function	animate()	{	
	 requestAnimationFrame(	animate	);	
	 renderer.render(	scene,	camera	);	
}
Game-frontend
voxel.js
your
code
three.js WebGL
Browser
Hardware OpenGL
Driver
Display Mngt System
Creating the scene
var	scene	=	new	THREE.Scene();	
var	camera	=	new	THREE.PerspectiveCamera(	75,	window.innerWidth	/	
window.innerHeight,	0.1,	1000	);	
var	renderer	=	new	THREE.WebGLRenderer();	
renderer.setSize(	window.innerWidth,	window.innerHeight	);	
document.body.appendChild(	renderer.domElement	);	
var	geometry	=	new	THREE.BoxGeometry(	1,	1,	1	);	
var	material	=	new	THREE.MeshBasicMaterial(	{	color:	0x00ff00	}	);	
var	cube	=	new	THREE.Mesh(	geometry,	material	);	
scene.add(	cube	);	
function	animate()	{	
	 requestAnimationFrame(	animate	);	
	 renderer.render(	scene,	camera	);	
}
Game-frontend
voxel.js
your
code
three.js WebGL
Browser
Hardware OpenGL
Driver
Display Mngt System
Creating the scene
var	scene	=	new	THREE.Scene();	
var	camera	=	new	THREE.PerspectiveCamera(	75,	window.innerWidth	/	
window.innerHeight,	0.1,	1000	);	
var	renderer	=	new	THREE.WebGLRenderer();	
renderer.setSize(	window.innerWidth,	window.innerHeight	);	
document.body.appendChild(	renderer.domElement	);	
var	geometry	=	new	THREE.BoxGeometry(	1,	1,	1	);	
var	material	=	new	THREE.MeshBasicMaterial(	{	color:	0x00ff00	}	);	
var	cube	=	new	THREE.Mesh(	geometry,	material	);	
scene.add(	cube	);	
function	animate()	{	
	 requestAnimationFrame(	animate	);	
	 renderer.render(	scene,	camera	);	
}
Game-frontend
voxel.js
your
code
three.js WebGL
Browser
Hardware OpenGL
Driver
Display Mngt System
Creating the scene
var	scene	=	new	THREE.Scene();	
var	camera	=	new	THREE.PerspectiveCamera(	75,	window.innerWidth	/	
window.innerHeight,	0.1,	1000	);	
var	renderer	=	new	THREE.WebGLRenderer();	
renderer.setSize(	window.innerWidth,	window.innerHeight	);	
document.body.appendChild(	renderer.domElement	);	
var	geometry	=	new	THREE.BoxGeometry(	1,	1,	1	);	
var	material	=	new	THREE.MeshBasicMaterial(	{	color:	0x00ff00	}	);	
var	cube	=	new	THREE.Mesh(	geometry,	material	);	
scene.add(	cube	);	
function	animate()	{	
	 requestAnimationFrame(	animate	);	
	 renderer.render(	scene,	camera	);	
}
AR VR
AR VR
AR VR
AR VR
AR VR
Oculus Rift CV1
Oculus Rift
Oculus Rift
+ it’s true VR
Oculus Rift
+ resolution and refresh rate
+ it’s true VR
Oculus Rift
+ resolution and refresh rate
+ it’s true VR
+ very comfortable
Oculus Rift
- too numerous wires
+ resolution and refresh rate
+ it’s true VR
+ very comfortable
Oculus Rift
- no SDK for macOS/Linux
- too numerous wires
+ resolution and refresh rate
+ it’s true VR
+ very comfortable
Oculus Rift
- no SDK for macOS/Linux
- NVIDIA GTX 970 / AMD 290 +
- too numerous wires
+ resolution and refresh rate
+ it’s true VR
+ very comfortable
A-Frame
virtual reality framework
A-Frame
virtual reality framework
works on Vive, Rift, Daydream, GearVR, desktop
A-Frame
virtual reality framework
works on Vive, Rift, Daydream, GearVR, desktop
based on top of HTML
A-Frame
virtual reality framework
works on Vive, Rift, Daydream, GearVR, desktop
based on top of HTML
<html>	
		<head>	
				<script	src="https://aframe.io/releases/0.7.0/aframe.min.js"></script>	
		</head>	
		<body>	
				<a-scene>	
						<a-box	position="-1	0.5	-3"	rotation="0	45	0"	color="#4CC3D9"></a-box>	
						<a-sphere	position="0	1.25	-5"	radius="1.25"	color="#EF2D5E"></a-sphere>	
						<a-cylinder	position="1	0.75	-3"	radius="0.5"	height="1.5"	color="#FFC65D"></a-cylinder>	
						<a-plane	position="0	0	-4"	rotation="-90	0	0"	width="4"	height="4"	color="#7BC8A4"></a-plane>	
						<a-sky	color="#ECECEC"></a-sky>	
				</a-scene>	
		</body>	
</html>
A-Frame
virtual reality framework
works on Vive, Rift, Daydream, GearVR, desktop
based on top of HTML
<html>	
		<head>	
				<script	src="https://aframe.io/releases/0.7.0/aframe.min.js"></script>	
		</head>	
		<body>	
				<a-scene>	
						<a-box	position="-1	0.5	-3"	rotation="0	45	0"	color="#4CC3D9"></a-box>	
						<a-sphere	position="0	1.25	-5"	radius="1.25"	color="#EF2D5E"></a-sphere>	
						<a-cylinder	position="1	0.75	-3"	radius="0.5"	height="1.5"	color="#FFC65D"></a-cylinder>	
						<a-plane	position="0	0	-4"	rotation="-90	0	0"	width="4"	height="4"	color="#7BC8A4"></a-plane>	
						<a-sky	color="#ECECEC"></a-sky>	
				</a-scene>	
		</body>	
</html>
MongoDBgame-backendgame-frontend
WebSocket
+
+
Architecture
MongoDBgame-backendgame-frontend
WebSocket
+
Architecture
MongoDBgame-backendgame-frontend
WebSocket
+
Architecture
+
MongoDBgame-backendgame-frontend
WebSocket
+
Architecture
+
game-frontend-vr
WebSocket
MongoDBgame-backendgame-frontend
WebSocket
+
Architecture
+
game-frontend-vr
WebSocket
firebase-auth
HTTP
MongoDBgame-backendgame-frontend
WebSocket
+
Architecture
+
game-frontend-vr
WebSocket
firebase-auth
HTTP
Auth
Auth
Optimizations
Optimizations
Pre-process voxel models
Voxels count ↓ (-78%)
Optimizations
Use Mesher
FPS ↑
Pre-process voxel models
Voxels count ↓ (-78%)
Optimizations
Use Mesher
FPS ↑
Enable compression for WebSocket (RFC 7692)
Traffic ↓ (5MB -> 1.8MB)
Pre-process voxel models
Voxels count ↓ (-78%)
urbn.odn.pwplay
Alex Khaerov
t.me/hayorov
code github.com/TheURBN
try new and have fun
Phew,
Questions?
urbn.odn.pwplay
Alex Khaerov
t.me/hayorov
code github.com/TheURBN
try new and have fun

More Related Content

Similar to Как мы сделали многопользовательскую браузерную игру для HL++ с воксельной графикой / Александр Хаеров (Ingram Micro)

Low Level Graphics & OpenGL
Low Level Graphics & OpenGLLow Level Graphics & OpenGL
Low Level Graphics & OpenGL
Dominic Farolino
 
Unity
UnityUnity
Ultizen Presentation
Ultizen PresentationUltizen Presentation
Ultizen Presentation
dorrit
 
Knock Knock on GameDev Gate
Knock Knock on GameDev GateKnock Knock on GameDev Gate
Knock Knock on GameDev Gate
BeMyApp
 
Web Game Development
Web Game DevelopmentWeb Game Development
Web Game Development
Sabin Buraga
 
Beyond php - it's not (just) about the code
Beyond php - it's not (just) about the codeBeyond php - it's not (just) about the code
Beyond php - it's not (just) about the code
Wim Godden
 
Knock knock on GameDev gateway! - Introduction to Game development
Knock knock on GameDev gateway! - Introduction to Game developmentKnock knock on GameDev gateway! - Introduction to Game development
Knock knock on GameDev gateway! - Introduction to Game development
Mamdouh Tarabishi
 
Intro to Indie Game Development
Intro to Indie Game DevelopmentIntro to Indie Game Development
Intro to Indie Game Development
Shahed Chowdhuri
 
Game accessibility at hanze hogeschool
Game accessibility at hanze hogeschoolGame accessibility at hanze hogeschool
Game accessibility at hanze hogeschool
Eelke Folmer
 
Letswift18 워크숍#1 스위프트 클린코드와 코드리뷰
Letswift18 워크숍#1 스위프트 클린코드와 코드리뷰Letswift18 워크숍#1 스위프트 클린코드와 코드리뷰
Letswift18 워크숍#1 스위프트 클린코드와 코드리뷰
Jung Kim
 
Intro
IntroIntro
Eight Rules for Making Your First Great Game
Eight Rules for Making Your First Great GameEight Rules for Making Your First Great Game
Eight Rules for Making Your First Great Game
Nick Pruehs
 
Beyond php it's not (just) about the code
Beyond php   it's not (just) about the codeBeyond php   it's not (just) about the code
Beyond php it's not (just) about the code
Wim Godden
 
A search engine in a world of events and microservices - SF Pot @Meetic
A search engine in a world of events and microservices - SF Pot @MeeticA search engine in a world of events and microservices - SF Pot @Meetic
A search engine in a world of events and microservices - SF Pot @Meetic
meeticTech
 
Landscape Of Virtual World Systems
Landscape Of Virtual World SystemsLandscape Of Virtual World Systems
Landscape Of Virtual World Systems
Tim Holt
 
Learning with F#
Learning with F#Learning with F#
Learning with F#
Phillip Trelford
 
Intro to Python
Intro to PythonIntro to Python
Intro to Python
Daniel Greenfeld
 
MongoDB for Analytics
MongoDB for AnalyticsMongoDB for Analytics
MongoDB for Analytics
MongoDB
 
Programmers guide
Programmers guideProgrammers guide
Programmers guide
Karla Paz Enamorado
 
Keynote at the 2018 SIGGRAPH Conference on Motion, Interaction and Games
Keynote at the 2018 SIGGRAPH Conference on Motion, Interaction and GamesKeynote at the 2018 SIGGRAPH Conference on Motion, Interaction and Games
Keynote at the 2018 SIGGRAPH Conference on Motion, Interaction and Games
Rogelio E. Cardona-Rivera
 

Similar to Как мы сделали многопользовательскую браузерную игру для HL++ с воксельной графикой / Александр Хаеров (Ingram Micro) (20)

Low Level Graphics & OpenGL
Low Level Graphics & OpenGLLow Level Graphics & OpenGL
Low Level Graphics & OpenGL
 
Unity
UnityUnity
Unity
 
Ultizen Presentation
Ultizen PresentationUltizen Presentation
Ultizen Presentation
 
Knock Knock on GameDev Gate
Knock Knock on GameDev GateKnock Knock on GameDev Gate
Knock Knock on GameDev Gate
 
Web Game Development
Web Game DevelopmentWeb Game Development
Web Game Development
 
Beyond php - it's not (just) about the code
Beyond php - it's not (just) about the codeBeyond php - it's not (just) about the code
Beyond php - it's not (just) about the code
 
Knock knock on GameDev gateway! - Introduction to Game development
Knock knock on GameDev gateway! - Introduction to Game developmentKnock knock on GameDev gateway! - Introduction to Game development
Knock knock on GameDev gateway! - Introduction to Game development
 
Intro to Indie Game Development
Intro to Indie Game DevelopmentIntro to Indie Game Development
Intro to Indie Game Development
 
Game accessibility at hanze hogeschool
Game accessibility at hanze hogeschoolGame accessibility at hanze hogeschool
Game accessibility at hanze hogeschool
 
Letswift18 워크숍#1 스위프트 클린코드와 코드리뷰
Letswift18 워크숍#1 스위프트 클린코드와 코드리뷰Letswift18 워크숍#1 스위프트 클린코드와 코드리뷰
Letswift18 워크숍#1 스위프트 클린코드와 코드리뷰
 
Intro
IntroIntro
Intro
 
Eight Rules for Making Your First Great Game
Eight Rules for Making Your First Great GameEight Rules for Making Your First Great Game
Eight Rules for Making Your First Great Game
 
Beyond php it's not (just) about the code
Beyond php   it's not (just) about the codeBeyond php   it's not (just) about the code
Beyond php it's not (just) about the code
 
A search engine in a world of events and microservices - SF Pot @Meetic
A search engine in a world of events and microservices - SF Pot @MeeticA search engine in a world of events and microservices - SF Pot @Meetic
A search engine in a world of events and microservices - SF Pot @Meetic
 
Landscape Of Virtual World Systems
Landscape Of Virtual World SystemsLandscape Of Virtual World Systems
Landscape Of Virtual World Systems
 
Learning with F#
Learning with F#Learning with F#
Learning with F#
 
Intro to Python
Intro to PythonIntro to Python
Intro to Python
 
MongoDB for Analytics
MongoDB for AnalyticsMongoDB for Analytics
MongoDB for Analytics
 
Programmers guide
Programmers guideProgrammers guide
Programmers guide
 
Keynote at the 2018 SIGGRAPH Conference on Motion, Interaction and Games
Keynote at the 2018 SIGGRAPH Conference on Motion, Interaction and GamesKeynote at the 2018 SIGGRAPH Conference on Motion, Interaction and Games
Keynote at the 2018 SIGGRAPH Conference on Motion, Interaction and Games
 

More from Ontico

One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
Ontico
 
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Ontico
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Ontico
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Ontico
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Ontico
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
Ontico
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Ontico
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Ontico
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
Ontico
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
Ontico
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Ontico
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Ontico
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Ontico
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Ontico
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
Ontico
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Ontico
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Ontico
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
Ontico
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Ontico
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Ontico
 

More from Ontico (20)

One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
 
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
 

Recently uploaded

Understanding Inductive Bias in Machine Learning
Understanding Inductive Bias in Machine LearningUnderstanding Inductive Bias in Machine Learning
Understanding Inductive Bias in Machine Learning
SUTEJAS
 
Electric vehicle and photovoltaic advanced roles in enhancing the financial p...
Electric vehicle and photovoltaic advanced roles in enhancing the financial p...Electric vehicle and photovoltaic advanced roles in enhancing the financial p...
Electric vehicle and photovoltaic advanced roles in enhancing the financial p...
IJECEIAES
 
2008 BUILDING CONSTRUCTION Illustrated - Ching Chapter 02 The Building.pdf
2008 BUILDING CONSTRUCTION Illustrated - Ching Chapter 02 The Building.pdf2008 BUILDING CONSTRUCTION Illustrated - Ching Chapter 02 The Building.pdf
2008 BUILDING CONSTRUCTION Illustrated - Ching Chapter 02 The Building.pdf
Yasser Mahgoub
 
Eric Nizeyimana's document 2006 from gicumbi to ttc nyamata handball play
Eric Nizeyimana's document 2006 from gicumbi to ttc nyamata handball playEric Nizeyimana's document 2006 from gicumbi to ttc nyamata handball play
Eric Nizeyimana's document 2006 from gicumbi to ttc nyamata handball play
enizeyimana36
 
CHINA’S GEO-ECONOMIC OUTREACH IN CENTRAL ASIAN COUNTRIES AND FUTURE PROSPECT
CHINA’S GEO-ECONOMIC OUTREACH IN CENTRAL ASIAN COUNTRIES AND FUTURE PROSPECTCHINA’S GEO-ECONOMIC OUTREACH IN CENTRAL ASIAN COUNTRIES AND FUTURE PROSPECT
CHINA’S GEO-ECONOMIC OUTREACH IN CENTRAL ASIAN COUNTRIES AND FUTURE PROSPECT
jpsjournal1
 
Optimizing Gradle Builds - Gradle DPE Tour Berlin 2024
Optimizing Gradle Builds - Gradle DPE Tour Berlin 2024Optimizing Gradle Builds - Gradle DPE Tour Berlin 2024
Optimizing Gradle Builds - Gradle DPE Tour Berlin 2024
Sinan KOZAK
 
Harnessing WebAssembly for Real-time Stateless Streaming Pipelines
Harnessing WebAssembly for Real-time Stateless Streaming PipelinesHarnessing WebAssembly for Real-time Stateless Streaming Pipelines
Harnessing WebAssembly for Real-time Stateless Streaming Pipelines
Christina Lin
 
Recycled Concrete Aggregate in Construction Part II
Recycled Concrete Aggregate in Construction Part IIRecycled Concrete Aggregate in Construction Part II
Recycled Concrete Aggregate in Construction Part II
Aditya Rajan Patra
 
Engineering Drawings Lecture Detail Drawings 2014.pdf
Engineering Drawings Lecture Detail Drawings 2014.pdfEngineering Drawings Lecture Detail Drawings 2014.pdf
Engineering Drawings Lecture Detail Drawings 2014.pdf
abbyasa1014
 
Embedded machine learning-based road conditions and driving behavior monitoring
Embedded machine learning-based road conditions and driving behavior monitoringEmbedded machine learning-based road conditions and driving behavior monitoring
Embedded machine learning-based road conditions and driving behavior monitoring
IJECEIAES
 
学校原版美国波士顿大学毕业证学历学位证书原版一模一样
学校原版美国波士顿大学毕业证学历学位证书原版一模一样学校原版美国波士顿大学毕业证学历学位证书原版一模一样
学校原版美国波士顿大学毕业证学历学位证书原版一模一样
171ticu
 
Engine Lubrication performance System.pdf
Engine Lubrication performance System.pdfEngine Lubrication performance System.pdf
Engine Lubrication performance System.pdf
mamamaam477
 
官方认证美国密歇根州立大学毕业证学位证书原版一模一样
官方认证美国密歇根州立大学毕业证学位证书原版一模一样官方认证美国密歇根州立大学毕业证学位证书原版一模一样
官方认证美国密歇根州立大学毕业证学位证书原版一模一样
171ticu
 
ACEP Magazine edition 4th launched on 05.06.2024
ACEP Magazine edition 4th launched on 05.06.2024ACEP Magazine edition 4th launched on 05.06.2024
ACEP Magazine edition 4th launched on 05.06.2024
Rahul
 
DEEP LEARNING FOR SMART GRID INTRUSION DETECTION: A HYBRID CNN-LSTM-BASED MODEL
DEEP LEARNING FOR SMART GRID INTRUSION DETECTION: A HYBRID CNN-LSTM-BASED MODELDEEP LEARNING FOR SMART GRID INTRUSION DETECTION: A HYBRID CNN-LSTM-BASED MODEL
DEEP LEARNING FOR SMART GRID INTRUSION DETECTION: A HYBRID CNN-LSTM-BASED MODEL
gerogepatton
 
哪里办理(csu毕业证书)查尔斯特大学毕业证硕士学历原版一模一样
哪里办理(csu毕业证书)查尔斯特大学毕业证硕士学历原版一模一样哪里办理(csu毕业证书)查尔斯特大学毕业证硕士学历原版一模一样
哪里办理(csu毕业证书)查尔斯特大学毕业证硕士学历原版一模一样
insn4465
 
ML Based Model for NIDS MSc Updated Presentation.v2.pptx
ML Based Model for NIDS MSc Updated Presentation.v2.pptxML Based Model for NIDS MSc Updated Presentation.v2.pptx
ML Based Model for NIDS MSc Updated Presentation.v2.pptx
JamalHussainArman
 
5214-1693458878915-Unit 6 2023 to 2024 academic year assignment (AutoRecovere...
5214-1693458878915-Unit 6 2023 to 2024 academic year assignment (AutoRecovere...5214-1693458878915-Unit 6 2023 to 2024 academic year assignment (AutoRecovere...
5214-1693458878915-Unit 6 2023 to 2024 academic year assignment (AutoRecovere...
ihlasbinance2003
 
Modelagem de um CSTR com reação endotermica.pdf
Modelagem de um CSTR com reação endotermica.pdfModelagem de um CSTR com reação endotermica.pdf
Modelagem de um CSTR com reação endotermica.pdf
camseq
 
basic-wireline-operations-course-mahmoud-f-radwan.pdf
basic-wireline-operations-course-mahmoud-f-radwan.pdfbasic-wireline-operations-course-mahmoud-f-radwan.pdf
basic-wireline-operations-course-mahmoud-f-radwan.pdf
NidhalKahouli2
 

Recently uploaded (20)

Understanding Inductive Bias in Machine Learning
Understanding Inductive Bias in Machine LearningUnderstanding Inductive Bias in Machine Learning
Understanding Inductive Bias in Machine Learning
 
Electric vehicle and photovoltaic advanced roles in enhancing the financial p...
Electric vehicle and photovoltaic advanced roles in enhancing the financial p...Electric vehicle and photovoltaic advanced roles in enhancing the financial p...
Electric vehicle and photovoltaic advanced roles in enhancing the financial p...
 
2008 BUILDING CONSTRUCTION Illustrated - Ching Chapter 02 The Building.pdf
2008 BUILDING CONSTRUCTION Illustrated - Ching Chapter 02 The Building.pdf2008 BUILDING CONSTRUCTION Illustrated - Ching Chapter 02 The Building.pdf
2008 BUILDING CONSTRUCTION Illustrated - Ching Chapter 02 The Building.pdf
 
Eric Nizeyimana's document 2006 from gicumbi to ttc nyamata handball play
Eric Nizeyimana's document 2006 from gicumbi to ttc nyamata handball playEric Nizeyimana's document 2006 from gicumbi to ttc nyamata handball play
Eric Nizeyimana's document 2006 from gicumbi to ttc nyamata handball play
 
CHINA’S GEO-ECONOMIC OUTREACH IN CENTRAL ASIAN COUNTRIES AND FUTURE PROSPECT
CHINA’S GEO-ECONOMIC OUTREACH IN CENTRAL ASIAN COUNTRIES AND FUTURE PROSPECTCHINA’S GEO-ECONOMIC OUTREACH IN CENTRAL ASIAN COUNTRIES AND FUTURE PROSPECT
CHINA’S GEO-ECONOMIC OUTREACH IN CENTRAL ASIAN COUNTRIES AND FUTURE PROSPECT
 
Optimizing Gradle Builds - Gradle DPE Tour Berlin 2024
Optimizing Gradle Builds - Gradle DPE Tour Berlin 2024Optimizing Gradle Builds - Gradle DPE Tour Berlin 2024
Optimizing Gradle Builds - Gradle DPE Tour Berlin 2024
 
Harnessing WebAssembly for Real-time Stateless Streaming Pipelines
Harnessing WebAssembly for Real-time Stateless Streaming PipelinesHarnessing WebAssembly for Real-time Stateless Streaming Pipelines
Harnessing WebAssembly for Real-time Stateless Streaming Pipelines
 
Recycled Concrete Aggregate in Construction Part II
Recycled Concrete Aggregate in Construction Part IIRecycled Concrete Aggregate in Construction Part II
Recycled Concrete Aggregate in Construction Part II
 
Engineering Drawings Lecture Detail Drawings 2014.pdf
Engineering Drawings Lecture Detail Drawings 2014.pdfEngineering Drawings Lecture Detail Drawings 2014.pdf
Engineering Drawings Lecture Detail Drawings 2014.pdf
 
Embedded machine learning-based road conditions and driving behavior monitoring
Embedded machine learning-based road conditions and driving behavior monitoringEmbedded machine learning-based road conditions and driving behavior monitoring
Embedded machine learning-based road conditions and driving behavior monitoring
 
学校原版美国波士顿大学毕业证学历学位证书原版一模一样
学校原版美国波士顿大学毕业证学历学位证书原版一模一样学校原版美国波士顿大学毕业证学历学位证书原版一模一样
学校原版美国波士顿大学毕业证学历学位证书原版一模一样
 
Engine Lubrication performance System.pdf
Engine Lubrication performance System.pdfEngine Lubrication performance System.pdf
Engine Lubrication performance System.pdf
 
官方认证美国密歇根州立大学毕业证学位证书原版一模一样
官方认证美国密歇根州立大学毕业证学位证书原版一模一样官方认证美国密歇根州立大学毕业证学位证书原版一模一样
官方认证美国密歇根州立大学毕业证学位证书原版一模一样
 
ACEP Magazine edition 4th launched on 05.06.2024
ACEP Magazine edition 4th launched on 05.06.2024ACEP Magazine edition 4th launched on 05.06.2024
ACEP Magazine edition 4th launched on 05.06.2024
 
DEEP LEARNING FOR SMART GRID INTRUSION DETECTION: A HYBRID CNN-LSTM-BASED MODEL
DEEP LEARNING FOR SMART GRID INTRUSION DETECTION: A HYBRID CNN-LSTM-BASED MODELDEEP LEARNING FOR SMART GRID INTRUSION DETECTION: A HYBRID CNN-LSTM-BASED MODEL
DEEP LEARNING FOR SMART GRID INTRUSION DETECTION: A HYBRID CNN-LSTM-BASED MODEL
 
哪里办理(csu毕业证书)查尔斯特大学毕业证硕士学历原版一模一样
哪里办理(csu毕业证书)查尔斯特大学毕业证硕士学历原版一模一样哪里办理(csu毕业证书)查尔斯特大学毕业证硕士学历原版一模一样
哪里办理(csu毕业证书)查尔斯特大学毕业证硕士学历原版一模一样
 
ML Based Model for NIDS MSc Updated Presentation.v2.pptx
ML Based Model for NIDS MSc Updated Presentation.v2.pptxML Based Model for NIDS MSc Updated Presentation.v2.pptx
ML Based Model for NIDS MSc Updated Presentation.v2.pptx
 
5214-1693458878915-Unit 6 2023 to 2024 academic year assignment (AutoRecovere...
5214-1693458878915-Unit 6 2023 to 2024 academic year assignment (AutoRecovere...5214-1693458878915-Unit 6 2023 to 2024 academic year assignment (AutoRecovere...
5214-1693458878915-Unit 6 2023 to 2024 academic year assignment (AutoRecovere...
 
Modelagem de um CSTR com reação endotermica.pdf
Modelagem de um CSTR com reação endotermica.pdfModelagem de um CSTR com reação endotermica.pdf
Modelagem de um CSTR com reação endotermica.pdf
 
basic-wireline-operations-course-mahmoud-f-radwan.pdf
basic-wireline-operations-course-mahmoud-f-radwan.pdfbasic-wireline-operations-course-mahmoud-f-radwan.pdf
basic-wireline-operations-course-mahmoud-f-radwan.pdf
 

Как мы сделали многопользовательскую браузерную игру для HL++ с воксельной графикой / Александр Хаеров (Ingram Micro)