SlideShare uma empresa Scribd logo
1 de 175
Baixar para ler offline
Как мы делали
многопользовательскую
браузерную игру для 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

Mais conteúdo relacionado

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

Low Level Graphics & OpenGL
Low Level Graphics & OpenGLLow Level Graphics & OpenGL
Low Level Graphics & OpenGLDominic Farolino
 
Ultizen Presentation
Ultizen PresentationUltizen Presentation
Ultizen Presentationdorrit
 
Knock Knock on GameDev Gate
Knock Knock on GameDev GateKnock Knock on GameDev Gate
Knock Knock on GameDev GateBeMyApp
 
Web Game Development
Web Game DevelopmentWeb Game Development
Web Game DevelopmentSabin 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 codeWim 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 developmentMamdouh Tarabishi
 
Intro to Indie Game Development
Intro to Indie Game DevelopmentIntro to Indie Game Development
Intro to Indie Game DevelopmentShahed Chowdhuri
 
Game accessibility at hanze hogeschool
Game accessibility at hanze hogeschoolGame accessibility at hanze hogeschool
Game accessibility at hanze hogeschoolEelke Folmer
 
Letswift18 워크숍#1 스위프트 클린코드와 코드리뷰
Letswift18 워크숍#1 스위프트 클린코드와 코드리뷰Letswift18 워크숍#1 스위프트 클린코드와 코드리뷰
Letswift18 워크숍#1 스위프트 클린코드와 코드리뷰Jung Kim
 
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 GameNick 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 codeWim 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 @MeeticmeeticTech
 
Landscape Of Virtual World Systems
Landscape Of Virtual World SystemsLandscape Of Virtual World Systems
Landscape Of Virtual World SystemsTim Holt
 
MongoDB for Analytics
MongoDB for AnalyticsMongoDB for Analytics
MongoDB for AnalyticsMongoDB
 
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 GamesRogelio E. Cardona-Rivera
 

Semelhante a Как мы сделали многопользовательскую браузерную игру для 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
 

Mais de 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
 

Mais de 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...
 

Último

College Call Girls Nashik Nehal 7001305949 Independent Escort Service Nashik
College Call Girls Nashik Nehal 7001305949 Independent Escort Service NashikCollege Call Girls Nashik Nehal 7001305949 Independent Escort Service Nashik
College Call Girls Nashik Nehal 7001305949 Independent Escort Service NashikCall Girls in Nagpur High Profile
 
Extrusion Processes and Their Limitations
Extrusion Processes and Their LimitationsExtrusion Processes and Their Limitations
Extrusion Processes and Their Limitations120cr0395
 
VIP Call Girls Service Kondapur Hyderabad Call +91-8250192130
VIP Call Girls Service Kondapur Hyderabad Call +91-8250192130VIP Call Girls Service Kondapur Hyderabad Call +91-8250192130
VIP Call Girls Service Kondapur Hyderabad Call +91-8250192130Suhani Kapoor
 
result management system report for college project
result management system report for college projectresult management system report for college project
result management system report for college projectTonystark477637
 
Coefficient of Thermal Expansion and their Importance.pptx
Coefficient of Thermal Expansion and their Importance.pptxCoefficient of Thermal Expansion and their Importance.pptx
Coefficient of Thermal Expansion and their Importance.pptxAsutosh Ranjan
 
Call for Papers - African Journal of Biological Sciences, E-ISSN: 2663-2187, ...
Call for Papers - African Journal of Biological Sciences, E-ISSN: 2663-2187, ...Call for Papers - African Journal of Biological Sciences, E-ISSN: 2663-2187, ...
Call for Papers - African Journal of Biological Sciences, E-ISSN: 2663-2187, ...Christo Ananth
 
(PRIYA) Rajgurunagar Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...
(PRIYA) Rajgurunagar Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...(PRIYA) Rajgurunagar Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...
(PRIYA) Rajgurunagar Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...ranjana rawat
 
VIP Call Girls Service Hitech City Hyderabad Call +91-8250192130
VIP Call Girls Service Hitech City Hyderabad Call +91-8250192130VIP Call Girls Service Hitech City Hyderabad Call +91-8250192130
VIP Call Girls Service Hitech City Hyderabad Call +91-8250192130Suhani Kapoor
 
(SHREYA) Chakan Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune Esc...
(SHREYA) Chakan Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune Esc...(SHREYA) Chakan Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune Esc...
(SHREYA) Chakan Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune Esc...ranjana rawat
 
UNIT-III FMM. DIMENSIONAL ANALYSIS
UNIT-III FMM.        DIMENSIONAL ANALYSISUNIT-III FMM.        DIMENSIONAL ANALYSIS
UNIT-III FMM. DIMENSIONAL ANALYSISrknatarajan
 
OSVC_Meta-Data based Simulation Automation to overcome Verification Challenge...
OSVC_Meta-Data based Simulation Automation to overcome Verification Challenge...OSVC_Meta-Data based Simulation Automation to overcome Verification Challenge...
OSVC_Meta-Data based Simulation Automation to overcome Verification Challenge...Soham Mondal
 
Introduction to IEEE STANDARDS and its different types.pptx
Introduction to IEEE STANDARDS and its different types.pptxIntroduction to IEEE STANDARDS and its different types.pptx
Introduction to IEEE STANDARDS and its different types.pptxupamatechverse
 
MANUFACTURING PROCESS-II UNIT-5 NC MACHINE TOOLS
MANUFACTURING PROCESS-II UNIT-5 NC MACHINE TOOLSMANUFACTURING PROCESS-II UNIT-5 NC MACHINE TOOLS
MANUFACTURING PROCESS-II UNIT-5 NC MACHINE TOOLSSIVASHANKAR N
 
Call Girls Service Nashik Vaishnavi 7001305949 Independent Escort Service Nashik
Call Girls Service Nashik Vaishnavi 7001305949 Independent Escort Service NashikCall Girls Service Nashik Vaishnavi 7001305949 Independent Escort Service Nashik
Call Girls Service Nashik Vaishnavi 7001305949 Independent Escort Service NashikCall Girls in Nagpur High Profile
 
SPICE PARK APR2024 ( 6,793 SPICE Models )
SPICE PARK APR2024 ( 6,793 SPICE Models )SPICE PARK APR2024 ( 6,793 SPICE Models )
SPICE PARK APR2024 ( 6,793 SPICE Models )Tsuyoshi Horigome
 
Call Girls Service Nagpur Tanvi Call 7001035870 Meet With Nagpur Escorts
Call Girls Service Nagpur Tanvi Call 7001035870 Meet With Nagpur EscortsCall Girls Service Nagpur Tanvi Call 7001035870 Meet With Nagpur Escorts
Call Girls Service Nagpur Tanvi Call 7001035870 Meet With Nagpur EscortsCall Girls in Nagpur High Profile
 
Porous Ceramics seminar and technical writing
Porous Ceramics seminar and technical writingPorous Ceramics seminar and technical writing
Porous Ceramics seminar and technical writingrakeshbaidya232001
 
Introduction to Multiple Access Protocol.pptx
Introduction to Multiple Access Protocol.pptxIntroduction to Multiple Access Protocol.pptx
Introduction to Multiple Access Protocol.pptxupamatechverse
 
MANUFACTURING PROCESS-II UNIT-2 LATHE MACHINE
MANUFACTURING PROCESS-II UNIT-2 LATHE MACHINEMANUFACTURING PROCESS-II UNIT-2 LATHE MACHINE
MANUFACTURING PROCESS-II UNIT-2 LATHE MACHINESIVASHANKAR N
 

Último (20)

College Call Girls Nashik Nehal 7001305949 Independent Escort Service Nashik
College Call Girls Nashik Nehal 7001305949 Independent Escort Service NashikCollege Call Girls Nashik Nehal 7001305949 Independent Escort Service Nashik
College Call Girls Nashik Nehal 7001305949 Independent Escort Service Nashik
 
Extrusion Processes and Their Limitations
Extrusion Processes and Their LimitationsExtrusion Processes and Their Limitations
Extrusion Processes and Their Limitations
 
VIP Call Girls Service Kondapur Hyderabad Call +91-8250192130
VIP Call Girls Service Kondapur Hyderabad Call +91-8250192130VIP Call Girls Service Kondapur Hyderabad Call +91-8250192130
VIP Call Girls Service Kondapur Hyderabad Call +91-8250192130
 
result management system report for college project
result management system report for college projectresult management system report for college project
result management system report for college project
 
Coefficient of Thermal Expansion and their Importance.pptx
Coefficient of Thermal Expansion and their Importance.pptxCoefficient of Thermal Expansion and their Importance.pptx
Coefficient of Thermal Expansion and their Importance.pptx
 
Call for Papers - African Journal of Biological Sciences, E-ISSN: 2663-2187, ...
Call for Papers - African Journal of Biological Sciences, E-ISSN: 2663-2187, ...Call for Papers - African Journal of Biological Sciences, E-ISSN: 2663-2187, ...
Call for Papers - African Journal of Biological Sciences, E-ISSN: 2663-2187, ...
 
(PRIYA) Rajgurunagar Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...
(PRIYA) Rajgurunagar Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...(PRIYA) Rajgurunagar Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...
(PRIYA) Rajgurunagar Call Girls Just Call 7001035870 [ Cash on Delivery ] Pun...
 
VIP Call Girls Service Hitech City Hyderabad Call +91-8250192130
VIP Call Girls Service Hitech City Hyderabad Call +91-8250192130VIP Call Girls Service Hitech City Hyderabad Call +91-8250192130
VIP Call Girls Service Hitech City Hyderabad Call +91-8250192130
 
(SHREYA) Chakan Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune Esc...
(SHREYA) Chakan Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune Esc...(SHREYA) Chakan Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune Esc...
(SHREYA) Chakan Call Girls Just Call 7001035870 [ Cash on Delivery ] Pune Esc...
 
UNIT-III FMM. DIMENSIONAL ANALYSIS
UNIT-III FMM.        DIMENSIONAL ANALYSISUNIT-III FMM.        DIMENSIONAL ANALYSIS
UNIT-III FMM. DIMENSIONAL ANALYSIS
 
OSVC_Meta-Data based Simulation Automation to overcome Verification Challenge...
OSVC_Meta-Data based Simulation Automation to overcome Verification Challenge...OSVC_Meta-Data based Simulation Automation to overcome Verification Challenge...
OSVC_Meta-Data based Simulation Automation to overcome Verification Challenge...
 
Water Industry Process Automation & Control Monthly - April 2024
Water Industry Process Automation & Control Monthly - April 2024Water Industry Process Automation & Control Monthly - April 2024
Water Industry Process Automation & Control Monthly - April 2024
 
Introduction to IEEE STANDARDS and its different types.pptx
Introduction to IEEE STANDARDS and its different types.pptxIntroduction to IEEE STANDARDS and its different types.pptx
Introduction to IEEE STANDARDS and its different types.pptx
 
MANUFACTURING PROCESS-II UNIT-5 NC MACHINE TOOLS
MANUFACTURING PROCESS-II UNIT-5 NC MACHINE TOOLSMANUFACTURING PROCESS-II UNIT-5 NC MACHINE TOOLS
MANUFACTURING PROCESS-II UNIT-5 NC MACHINE TOOLS
 
Call Girls Service Nashik Vaishnavi 7001305949 Independent Escort Service Nashik
Call Girls Service Nashik Vaishnavi 7001305949 Independent Escort Service NashikCall Girls Service Nashik Vaishnavi 7001305949 Independent Escort Service Nashik
Call Girls Service Nashik Vaishnavi 7001305949 Independent Escort Service Nashik
 
SPICE PARK APR2024 ( 6,793 SPICE Models )
SPICE PARK APR2024 ( 6,793 SPICE Models )SPICE PARK APR2024 ( 6,793 SPICE Models )
SPICE PARK APR2024 ( 6,793 SPICE Models )
 
Call Girls Service Nagpur Tanvi Call 7001035870 Meet With Nagpur Escorts
Call Girls Service Nagpur Tanvi Call 7001035870 Meet With Nagpur EscortsCall Girls Service Nagpur Tanvi Call 7001035870 Meet With Nagpur Escorts
Call Girls Service Nagpur Tanvi Call 7001035870 Meet With Nagpur Escorts
 
Porous Ceramics seminar and technical writing
Porous Ceramics seminar and technical writingPorous Ceramics seminar and technical writing
Porous Ceramics seminar and technical writing
 
Introduction to Multiple Access Protocol.pptx
Introduction to Multiple Access Protocol.pptxIntroduction to Multiple Access Protocol.pptx
Introduction to Multiple Access Protocol.pptx
 
MANUFACTURING PROCESS-II UNIT-2 LATHE MACHINE
MANUFACTURING PROCESS-II UNIT-2 LATHE MACHINEMANUFACTURING PROCESS-II UNIT-2 LATHE MACHINE
MANUFACTURING PROCESS-II UNIT-2 LATHE MACHINE
 

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