SlideShare a Scribd company logo
1 of 91
Download to read offline
Ренессанс графики на
клиенте
Антон Корзунов
В начале было слово
И слово было 2 байта.
Потом много чего придумали.
Например Яндекс.Карты.
3
Sim City Яндекс.Карты
4
И вроде было все окей
Развитие API Карт
2004 год – запуск Яндекс.Карт
API 1.0 – 13 ноября 2008
API 1.1 – 25 июня 2009
API 2.0 – 19 апреля 2012
API 2.1 – 4 октября 2013
5
Что мы делали
1. Делали клевый API
2. Для кленовых карт
3. И радости ваших
пользователей.
6
7
Ах какой хайтек!
Но вообще-то – да
«DOM-Tile» engine
css2, css3, css3-3d
«Canvas-Tile» engine
+ Stepwise или Transition
animation
8
И графика!
VML
SVG
Canvas
+Simplification, geodesic, tiled-
rendering, heatmaps, unicorns,
pain
9
10Nathan McCord, U.S. Marine Corps - http://www.defenseimagery.mil; VIRIN: 090812-M-7376M-073
Каменный век!
Немного о себе
В 1998 году появилась первая
видеокарта.
В 1999 - вторая.
Достаточно активный
пользователь gamedev.ru.
Потом женился и оброс.
В 2008 году заболел
фронтендом.
Последние 5 лет работаю в
Яндексе.
11
Как на картинах Босха
В целом-то вроде ничего, но
стоит приглядеться к деталям
и ты понимаешь…
Что-то тут не так!
12
Сад наслаждений, Босх
13
Мышки продолжали жрать кактус..
14https://www.shadertoy.com/view/Xds3zN
WebGL
Темные века закончились
WebGL – быстрее.
WebGL – умнее.
WebGL – вкуснее.
WebGL позволяет реализовать в
web то, что было на PC 10-15 лет
назад.
WebGL – старый добрый GL ES.
Назовем это эпохой ренессанса.
15
Капелла в нижней церкви Сан Франческо в Ассизи.
Погруженный в молитву святой Мартин. Симоне Мартини. Фрагмент.
Что такое WebGL?
Невиданное чудо, полное
волшебных пузырьков?
На ней можно сделать 3D
шутер с «корованами»?
Какая-то модная технология?
Очередной Canvas?
16
Dawn, фея лесов NVidia
17
WebGL нужен этому кирпичу
WebGL – это возможность
Используйте с умом
WebGL – это:
API для отрисовки 2D графики.
Возможность рисовать 3D.
Специальная архитектура
«графического конвейера».
Немного уличной магии.
И скорость..
19
О чем будем говорить
1. Какие задачи WebGL делает
«хорошо».
2. Как все весело.
20
О чем говорить не будем
1. Про Tree.js, любых .js.
2. Про API WebGL.
3. Про профайлинг :(
(я бы с радостью, но время)
21
22О! Это Пиранези!
Пора выпустить тьму Египетскую!
DEMO TIME
Оценка скорости Canvas – 1
3 – http://
www.goodboydigital.com/pixijs/
bunnymark/
4 – http://dmikis.github.io/
subbotnik-msk-20151017/
(требует Chrome Canary)
5 – http://toji.github.io/webgl2-
particles/
(требует активации WebGL2)
23
24
Давайте определимся
25
Начнем с простого
2D 3D +Magic
http://www.thingiverse.com/thing:16559
1. Передаем 3 вершины треугольника
На вход идут «непрерывные»
куски данных.
[xyxyxyxyxyxy]
[xxxxxxx] + [yyyyyyy]
[xyxyxyxy] + [zzzz] + [wwww]
но нельзя передать
[[x,y],[x,y],[x,y]]
26
2. Всегда найдется место магии
gl_Position = (point+magic)*magic
gl_Position = unpack(point.x)
gl_Position = sin(point.x)
но обычно
gl_Position = MVP_matrix * point
gl_Position - 4D координаты.
x,y - 2D clipping space coords
z - «depth» space coords
w = «magic»
27
28
Графический конвейер (pipeline)
Vertex shader
Fragment shader
Attribute
VaryingsUniforms
Framebuffer
Buffers
4. Теперь работает PixelShader
Получаем интерполированные
значения для конкретного
пикселя.
1. Делаем что хотим
return magicColor +
sin(gl_FragCoord.y)+
sin(gl_FragCoord.x+ gl_FragCoord.y)
2. Отдаем цвет конкретного
пикселя.
http://jsfiddle.net/XLnVW/4/ 29
We need to go deeper
1. Color-buffer
2. Depth-buffer
3. Stencil-buffer
4. Normal-buffer
5. Super-buffer
6. Puper-buffer
7. ….
30
We need to go to Depth
Он же Z-buffer.
Хранит «глубину» пикселя.
Обеспечивает «Hidden surface
removal»
Имеет множество оптимизаций
31
32Vector by Vector Open Stock
Front-to-back
Front-to-back rendering
По-разному работает на
«тайловых» и «стримовых»
видеокартах.
Обеспечивает супер скорость.
Ломается от одного чиха.
Не дружит с прозрачностью.
33
Pawel Wozniak - freestocktextures.com
DEMO TIME
early-z – OFF
early-z – ON
http://kashey.ru/maps/webgl/earlyz.html
(требует Chrome Canary)
34
Back-to-front
1. Нативный для canvas, html.
2. Высокий overdraw.
3. Низкая скорость.
4. Зачем он вообще нужен?
35
36Vector by Vector Open Stock
Blending
Прозрачность
Target = Source1*A + Source2*B
Source1 - новый пиксель
Source2 - уже записанный,
который надо будет «обратно»
прочитать.
Их нельзя менять местами.
37
Настройка блендинга
gl.enable( gl.BLEND );
gl.blendEquationSeparate( gl.FUNC_ADD, gl.FUNC_ADD );
gl.blendFuncSeparate(
gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA,
gl.ONE, gl.ONE_MINUS_SRC_ALPHA
);
PS: + premultiplied alpha
PPS: + EXT_blend_minmax
http://mrdoob.github.io/webgl-blendfunctions/blendfuncseparate.html 38
back-to-front (OVER) front-to-back (UNDER)
39
Два главных режима блендинга
40
Но у нас 3D!
Плоскость может быть
и ЗА и ПЕРЕД
Одновременно!
Есть Deep Peeling и другой
Order Independent Rendering,
но..
Image Source: TU Wien and Stack Overflow 41
Первый слой Второй слой
42
Блендинг в пробках
Overdraw + Alpha-Test
Многие пиксели никак не
меняют изображение.
Их можно «убить», прервав
растеризацию.
Заодно умрет early-z и TBDR.
43
…герои всегда идут в обход
Многие эффекты, в частности
«пробки», лучше рисовать сразу.
В один проход – «целиком»
color1 = texture2D(t1, ts);
color2 = texture2D(t2, ts);
gl_FragColor = mix(color1, color2, color2.a);
44
45webglstats.com
100% девайсов имеют 8+ TMU
46webglstats.com
99% девайсов держат текстуры 4096
47
http://axis-of-devil.deviantart.com/art/Everybody-lies-159130967
Всегда есть ньюансы!
100% андроидов
поддерживают текстуры 4к.
95% андроидов создают их по
3-4 секунды.
PS: 4K*4K*RGBA = 64Mb.
PS: Samsung/AndroidBrowser
просто блэклистим.
48
ПРИВЫКАЙТЕ
Так что webgl умеет?
1. Рисовать 2д треугольники.
2. Как угодно их раскрашивать.
3. Смешивать разные слои.
4. Смешивать разные
реальности.
5. Делать это быстро.
50
51
Может так
52plague inc
Может так
53Simcity 5
Может так
54
И что он умеет быстро?
Текст Растр Геометрия
Почему он это умеет?
1. Immutable данные(WORM)
2. Vertex Shader
3. Pixel Shader
4. Extensions
5. MAGIC!
55
Extensions
Удобный механизм
опционального добавления
«фич».
WEBGL_, OES_, EXT_, ANGLE_
56
57Вам ARB, EXT, ENV, WEBKIT, ANGLE или WEBGL? Cплошной 34!
If it exists, there is extension for it – no exceptions.
Правило 34*
58
На каждый болт найдется своя гайка.
Или грязный хак.
Или серьезная научная статья.
Правило 34а
Extensions
В среднем по палата - 8
расширений.
Всего в WebGL - 31
+ WEBKIT_, MOZ_ и так далее
Всего в OpenGL – 482
(webglreport.com about://gpu)
59
60
Если расширения нет, его скоро сделают
Правило 35
61
Нужных расширений никогда нет.
Правило 37 (иногда 16)
DEMO TIME!
http://media.tojicode.com/q3bsp/
http://tangrams.github.io/shaders-demo/
http://playcanv.as/p/SA7hVBLt
https://www.shadertoy.com/view/XsX3RB
Обязательно прочитайте https://mapzen.com/
blog/mapping-mountains/ и покрутите http://
cartography.oregonstate.edu/tiles/
PlanObliqueEurope/
62
63https://events.yandex.ru/lib/talks/3344/
Отображение текста
SDF Atlas Vector
64https://events.yandex.ru/lib/talks/3344/
Отображение графики
2D-line 2D-polygon 3D
Ничего кроме треугольников!
Рендеринг линии - через
треугольники.
Рендеринг полигона - через
треугольники.
Рендеринг квадрата - через
треугольники.
65
Линия
Линия это данные для
создания треугольников.
Линия это правила сочленения.
Линия это набор векторов.
66
67
Формирование элемента линии
Заполнение цветом Интерполяция «длины»
68
Заполнение
Проблема кривого пунктира
Длина левого сегмента больше
длины центрального и не равна
длине правого сегмента.
69
70
Ужас, а не зебра
Причины и следствия
L1 меньше L2 на «квадратик»
Какой размер квадратика?
strokeWidth * (cos | sin | 1/tg | πcos)
Храним в точке:
L - основную длину
La - левую компенсацию
Lb - правую компенсацию
71
72
Line-join
Mitter Bevel Round
Полигон
Состоит из треугольников.
Может быть с дырками, с
самопересечениями, convex и
не-convex, большой и
маленький…
73
Триангуляция
Разбиение полигона на
треугольники.
1. Через монотоны.
2. Алгоритм Зейделя (pnltri).
3. Ушной алгоритм (earcut).
- Подготовка занимает много
времени.
+ Быстро работает.
74
Логические операции
gl.stencilOp(fail, zfail, zpass);
gl.colorMask(false, false, false, false);
gl.stencilFunc(gl.ALWAYS,1,1);
gl.stencilOp(gl.KEEP,gl.KEEP,gl.INVERT);
gl.colorMask(true, true, true, true);
gl.stencilFunc(gl.EQUAL, 1, 1);
gl.stencilOp(gl.KEEP,gl.KEEP,gl.KEEP);
+ Не требует подготовки
вообще.
- Жуткий overdraw.
75
Какой выбрать?
Зависит от текущего болта и
текущей гайки, наличия
обводки, времени на
препроцессинг, фазы луны, и
состоянии левой пятки
императора.
PS: см. «стенсильные тени»
76
Рано радуетесь
1. Синхронные операции.
2. Зоопарк устройств.
3. Мыло и другие нежданчики.
3. Алисинг.
5. Жрет батарейку
6. Не понимает CSS
(и человеческий язык)
77
Пускай весь мир подождет
1. Обновление буферов.
2. Загрузка текстур.
3. Синхронизации.
78
Пускай весь мир подождет
1. Immutable или Dynamic
данные.
2. Загружайте текстуры в
фоне, верьте в ImageBitmap.
3. Меняйте алгоритмы.
79
Зоопарк
Hi-end, Lo-end PC
iOS
Android
Angle, Native, Sandboxed..
80
PixelPerfect
Он же «тютелька в тютельку».
Linear фильтрация часто
создает «мыло».
Очень сложно отобразить
картинку по пиксельной сетке.
А вот геометрию - легко.
81
Алгоритм рисования линии
Алгоритм Брезенхэма
генерирует «лесенку».
Но можно (врубив Blend)
отрисовать линию «мягче».
PS: На Hi-DPI экранах можно
не врубать.
82
Антикто?
MSAA - on off
84
Анти-алиасинг
FXAA – off
85https://github.com/mattdesl/glsl-fxaa/
Fast ApproXimate Anti-Aliasing
FXAA – on
DEMO TIME (4D)
https://www.shadertoy.com/view/
4dsGD7
https://www.shadertoy.com/view/
4ds3WS
86
87Daggerfall
Что осталось за кадром?
Смысл
Детали реализации
100500 вариантов исполнения
WebGL 2.0
Нюансы
88
Но стоит ли мне верить?
C некой точки зрения браузеры
аналогичны tree.js и компании.
И пишут их очень хитрые люди.
Далеко не факт, что именно у
тебя получится выше быстрее.
PS:Особенно в человеко-часах.
89
90
И самый главный вопрос…
Антон Корзунов
Разработчик интерфейсов АПИ карт.
Контакты
@twitter
thekasheykashey@yandex-team.ru
На фоне https://www.shadertoy.com/view/4tjGRh

More Related Content

What's hot

Семинар 5. Многопоточное программирование на OpenMP (часть 5)
Семинар 5. Многопоточное программирование на OpenMP (часть 5)Семинар 5. Многопоточное программирование на OpenMP (часть 5)
Семинар 5. Многопоточное программирование на OpenMP (часть 5)Mikhail Kurnosov
 
Приближенный метод решения практических задач рационального раскроя на основе...
Приближенный метод решения практических задач рационального раскроя на основе...Приближенный метод решения практических задач рационального раскроя на основе...
Приближенный метод решения практических задач рационального раскроя на основе...Victor Balabanov
 
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...Alexey Paznikov
 
Лекция 8: Многопоточное программирование: Intel Threading Building Blocks
Лекция 8: Многопоточное программирование: Intel Threading Building BlocksЛекция 8: Многопоточное программирование: Intel Threading Building Blocks
Лекция 8: Многопоточное программирование: Intel Threading Building BlocksMikhail Kurnosov
 
Пора учить WebGL
Пора учить WebGLПора учить WebGL
Пора учить WebGLAnton Korzunov
 
Продолжаем говорить про арифметику
Продолжаем говорить про арифметикуПродолжаем говорить про арифметику
Продолжаем говорить про арифметикуAndrey Akinshin
 

What's hot (6)

Семинар 5. Многопоточное программирование на OpenMP (часть 5)
Семинар 5. Многопоточное программирование на OpenMP (часть 5)Семинар 5. Многопоточное программирование на OpenMP (часть 5)
Семинар 5. Многопоточное программирование на OpenMP (часть 5)
 
Приближенный метод решения практических задач рационального раскроя на основе...
Приближенный метод решения практических задач рационального раскроя на основе...Приближенный метод решения практических задач рационального раскроя на основе...
Приближенный метод решения практических задач рационального раскроя на основе...
 
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...
 
Лекция 8: Многопоточное программирование: Intel Threading Building Blocks
Лекция 8: Многопоточное программирование: Intel Threading Building BlocksЛекция 8: Многопоточное программирование: Intel Threading Building Blocks
Лекция 8: Многопоточное программирование: Intel Threading Building Blocks
 
Пора учить WebGL
Пора учить WebGLПора учить WebGL
Пора учить WebGL
 
Продолжаем говорить про арифметику
Продолжаем говорить про арифметикуПродолжаем говорить про арифметику
Продолжаем говорить про арифметику
 

Similar to Ренессанс графики на клиенте

Как впихнуть утро в сосновом лесу в 4 килобайта. Иван Авдеев. UNIGINE Open Ai...
Как впихнуть утро в сосновом лесу в 4 килобайта. Иван Авдеев. UNIGINE Open Ai...Как впихнуть утро в сосновом лесу в 4 килобайта. Иван Авдеев. UNIGINE Open Ai...
Как впихнуть утро в сосновом лесу в 4 килобайта. Иван Авдеев. UNIGINE Open Ai...Unigine Corp.
 
Правильная организация клиент-карточного взаимодействия — Антон Корзунов
Правильная организация клиент-карточного взаимодействия — Антон КорзуновПравильная организация клиент-карточного взаимодействия — Антон Корзунов
Правильная организация клиент-карточного взаимодействия — Антон КорзуновYandex
 
TК°Conf. Ещё не поздно учить WebGL. Антон Корзунов.
TК°Conf. Ещё не поздно учить WebGL. Антон Корзунов.TК°Conf. Ещё не поздно учить WebGL. Антон Корзунов.
TК°Conf. Ещё не поздно учить WebGL. Антон Корзунов.TKConf
 
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVM
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVMДмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVM
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVMSergey Platonov
 
Управление памятью в CPython
Управление памятью в CPythonУправление памятью в CPython
Управление памятью в CPythonAnton Patrushev
 
Антон Корзунов "Графика на карте в API 2.0"
Антон Корзунов "Графика на карте в API 2.0"Антон Корзунов "Графика на карте в API 2.0"
Антон Корзунов "Графика на карте в API 2.0"Yandex
 
Продолжаем говорить о микрооптимизациях .NET-приложений
Продолжаем говорить о микрооптимизациях .NET-приложенийПродолжаем говорить о микрооптимизациях .NET-приложений
Продолжаем говорить о микрооптимизациях .NET-приложенийAndrey Akinshin
 
Sphinx 3.0, поиск 15 лет спустя / Андрей Аксенов (Sphinx)
Sphinx 3.0, поиск 15 лет спустя / Андрей Аксенов (Sphinx)Sphinx 3.0, поиск 15 лет спустя / Андрей Аксенов (Sphinx)
Sphinx 3.0, поиск 15 лет спустя / Андрей Аксенов (Sphinx)Ontico
 
"Где еще живет скорость в web", Олег Елифантьев, MoscowJS 24
"Где еще живет скорость в web", Олег Елифантьев, MoscowJS 24"Где еще живет скорость в web", Олег Елифантьев, MoscowJS 24
"Где еще живет скорость в web", Олег Елифантьев, MoscowJS 24MoscowJS
 
Акторы на C++: стоило ли оно того?
Акторы на C++: стоило ли оно того?Акторы на C++: стоило ли оно того?
Акторы на C++: стоило ли оно того?Yauheni Akhotnikau
 
Как сделать веб-карту, сохранить здоровье и возненавидеть IE
Как сделать веб-карту, сохранить здоровье и возненавидеть IEКак сделать веб-карту, сохранить здоровье и возненавидеть IE
Как сделать веб-карту, сохранить здоровье и возненавидеть IEАртём Кудзев
 
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...Platonov Sergey
 
Tomato Engine: Как мы создавали онлайн шутер с авторитарным сервером
Tomato Engine: Как мы создавали онлайн шутер с авторитарным серверомTomato Engine: Как мы создавали онлайн шутер с авторитарным сервером
Tomato Engine: Как мы создавали онлайн шутер с авторитарным серверомDevGAMM Conference
 
Address Sanitizer или как сделать программы на c/с++ надежнее и безопаснее (К...
Address Sanitizer или как сделать программы на c/с++ надежнее и безопаснее (К...Address Sanitizer или как сделать программы на c/с++ надежнее и безопаснее (К...
Address Sanitizer или как сделать программы на c/с++ надежнее и безопаснее (К...Ontico
 
64-битный конь, который умеет считать
64-битный конь, который умеет считать64-битный конь, который умеет считать
64-битный конь, который умеет считатьTatyanazaxarova
 
Производительность Unity3D: подводные камни / Алексей Чубарь (BIT.GAMES)
Производительность Unity3D: подводные камни / Алексей Чубарь (BIT.GAMES)Производительность Unity3D: подводные камни / Алексей Чубарь (BIT.GAMES)
Производительность Unity3D: подводные камни / Алексей Чубарь (BIT.GAMES)Ontico
 
чернякова г.в.
чернякова г.в.чернякова г.в.
чернякова г.в.sharikdp
 
Олег Мохов "Драматическая история одной маленькой промостранички"
Олег Мохов "Драматическая история одной маленькой промостранички"Олег Мохов "Драматическая история одной маленькой промостранички"
Олег Мохов "Драматическая история одной маленькой промостранички"Yandex
 

Similar to Ренессанс графики на клиенте (20)

Как впихнуть утро в сосновом лесу в 4 килобайта. Иван Авдеев. UNIGINE Open Ai...
Как впихнуть утро в сосновом лесу в 4 килобайта. Иван Авдеев. UNIGINE Open Ai...Как впихнуть утро в сосновом лесу в 4 килобайта. Иван Авдеев. UNIGINE Open Ai...
Как впихнуть утро в сосновом лесу в 4 килобайта. Иван Авдеев. UNIGINE Open Ai...
 
Правильная организация клиент-карточного взаимодействия — Антон Корзунов
Правильная организация клиент-карточного взаимодействия — Антон КорзуновПравильная организация клиент-карточного взаимодействия — Антон Корзунов
Правильная организация клиент-карточного взаимодействия — Антон Корзунов
 
TК°Conf. Ещё не поздно учить WebGL. Антон Корзунов.
TК°Conf. Ещё не поздно учить WebGL. Антон Корзунов.TК°Conf. Ещё не поздно учить WebGL. Антон Корзунов.
TК°Conf. Ещё не поздно учить WebGL. Антон Корзунов.
 
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVM
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVMДмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVM
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVM
 
Управление памятью в CPython
Управление памятью в CPythonУправление памятью в CPython
Управление памятью в CPython
 
Антон Корзунов "Графика на карте в API 2.0"
Антон Корзунов "Графика на карте в API 2.0"Антон Корзунов "Графика на карте в API 2.0"
Антон Корзунов "Графика на карте в API 2.0"
 
Продолжаем говорить о микрооптимизациях .NET-приложений
Продолжаем говорить о микрооптимизациях .NET-приложенийПродолжаем говорить о микрооптимизациях .NET-приложений
Продолжаем говорить о микрооптимизациях .NET-приложений
 
Sphinx 3.0, поиск 15 лет спустя / Андрей Аксенов (Sphinx)
Sphinx 3.0, поиск 15 лет спустя / Андрей Аксенов (Sphinx)Sphinx 3.0, поиск 15 лет спустя / Андрей Аксенов (Sphinx)
Sphinx 3.0, поиск 15 лет спустя / Андрей Аксенов (Sphinx)
 
"Где еще живет скорость в web", Олег Елифантьев, MoscowJS 24
"Где еще живет скорость в web", Олег Елифантьев, MoscowJS 24"Где еще живет скорость в web", Олег Елифантьев, MoscowJS 24
"Где еще живет скорость в web", Олег Елифантьев, MoscowJS 24
 
Акторы на C++: стоило ли оно того?
Акторы на C++: стоило ли оно того?Акторы на C++: стоило ли оно того?
Акторы на C++: стоило ли оно того?
 
Как сделать веб-карту, сохранить здоровье и возненавидеть IE
Как сделать веб-карту, сохранить здоровье и возненавидеть IEКак сделать веб-карту, сохранить здоровье и возненавидеть IE
Как сделать веб-карту, сохранить здоровье и возненавидеть IE
 
1k speedup
1k speedup1k speedup
1k speedup
 
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
 
Tomato Engine: Как мы создавали онлайн шутер с авторитарным сервером
Tomato Engine: Как мы создавали онлайн шутер с авторитарным серверомTomato Engine: Как мы создавали онлайн шутер с авторитарным сервером
Tomato Engine: Как мы создавали онлайн шутер с авторитарным сервером
 
Garbage collection in V8 VM
Garbage collection in V8 VMGarbage collection in V8 VM
Garbage collection in V8 VM
 
Address Sanitizer или как сделать программы на c/с++ надежнее и безопаснее (К...
Address Sanitizer или как сделать программы на c/с++ надежнее и безопаснее (К...Address Sanitizer или как сделать программы на c/с++ надежнее и безопаснее (К...
Address Sanitizer или как сделать программы на c/с++ надежнее и безопаснее (К...
 
64-битный конь, который умеет считать
64-битный конь, который умеет считать64-битный конь, который умеет считать
64-битный конь, который умеет считать
 
Производительность Unity3D: подводные камни / Алексей Чубарь (BIT.GAMES)
Производительность Unity3D: подводные камни / Алексей Чубарь (BIT.GAMES)Производительность Unity3D: подводные камни / Алексей Чубарь (BIT.GAMES)
Производительность Unity3D: подводные камни / Алексей Чубарь (BIT.GAMES)
 
чернякова г.в.
чернякова г.в.чернякова г.в.
чернякова г.в.
 
Олег Мохов "Драматическая история одной маленькой промостранички"
Олег Мохов "Драматическая история одной маленькой промостранички"Олег Мохов "Драматическая история одной маленькой промостранички"
Олег Мохов "Драматическая история одной маленькой промостранички"
 

Ренессанс графики на клиенте