На примерах PixiJS
От <div> к WebGL
1. Убираем <div>
2.
3. PROFIT!
Меня зовут Иван
Закончил МехМат МГУ, много участвовал в олимпиадах по программированию.
С 2015 года занимаюсь WebGL, PixiJS
В 2012—2013, ещё до agar.io сделал игру http://gameofbombs.com на canvas-2d, бомбер на 2000 человек на одной карте.
Еще о себе
Работаю некромантом в https://crazypanda.ru, делаю конвертер �Flash-графики на html5.
4 года помогаю на форумах и в чатах по разработке на Сanvas 2d/WebGL.
Знаю много чужих кейсов, консультирую проекты с тяжёлыми случаями.
Необходимый�минимум �знаний по WebGL
Минимальный WebGL в pixi
Для чего используют в продакшне
Это не конь!
Клуб 100k кроликов — это круто!
Разные элементы
Рецепт
Комбинаций много, решений много,
Можно делать доклад на каждой конфе.
😂
👍
🤦🏻♀️ WebGL не нужен 🤦🏻♀️
Кривые руки рисуют кривые
CSS/SVG и так многое умеет.
</вступление>
Альфа-блендинг
Research #1
Берём свободного математика и просим его подобрать функцию
Research #2
Математик отвечает:
решений наверное много, но вот я что-то подобрал.
Можно складывать два соседних объекта по формуле
Result, Source, Destination: каждый имеет компоненты R*A, G*A , B*A , A
Ассоциативность: в каком порядке делать сложения - всё равно, главное чтобы не менять объекты их местами (левый с правым)
Кошмарный результат
Не понятно. Почему нельзя просто R, G, B, A
Premultiplied Alpha
Not Premultiplied Alpha
А где тут фон-то?
Blending в WebGL
Porter Duff
Alpha compositing CSS / SVG
https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode - Огромный выбор режимов
https://www.w3.org/TR/compositing-1/#blending�Все формулы известны
https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/globalCompositeOperation�Они все есть в canvas 2d
Можно помножить картинку на цвет с помощью доп. canvas
Разные текстуры, разные режимы premultiplied
Всё OK
NPM как PMA
Прошлись второй раз
Advanced Blending
</alpha-compositing>
Advanced Blend in WebGL
Сглаживание
АА и smoothing: люди путают
АА и smoothing: люди путают
Антиалиасинг
2Д-терминология
Текстурная фильтрация
Фильтрация в CSS/SVG
Фильтрация в CSS/SVG
Наивный подход: Поворот не туда 😱
Подозрительная texture2D в шейдере
Вопросы к texture2D
Mipmap: downscale по степеням двойки
256х256�512х1024�...
Mipmap exploration
шейдер в соседних пикселях
https://github.com/Busyrev/mipExploration
Cursed GPU
isotropy must die
Ideal
Ответы про texture2D
LINEAR filtering: premultiplied alpha strikes again!
Почему лучше делать premultiply.
http://www.adriancourreges.com/blog/2017/05/09/beware-of-transparent-pixels/
Make it bleed! (extrude)
Google Fail at downscale 🤦🏻♀️
3D: anisotropic filtering
</texture-filtering>
Антиалиасинг
Откуда берется лесенка?
Типы АА в браузере
Analytical AA
Multi-Sampling AA
делается на CPU
жрет доп память
дорого но не как скейл
Conflation (слияние) соседних фигур
Google Doodle
Memorial Day 2018
CreateJS shapes
Решение с SVG�
Решение с PixiJS если в текстуре conflation
Проблемы с MSAA в WebGL
Параметр при создании контекста { antialias: true}
Ретиновый макбук взлетает
</antialiasing>
😍 WebGL нужен 😍
Композитные фильтры
Фильтры в SVG/CSS
Фильтры в PixiJS
Фильтры в PixiJS, dropShadow
Код Javascript
Код
Код шейдера
Код
Слои и композитная демка
Простая сцена со светом
Опять кролики!
SpectorJS (расширение в chrome store)
Конклюжн
+/- WebGL ✊
PixiJS 😍
CSS & SVG 😺
Canvas 2D 🦊
Ссылки ссылки ссылки
https://github.com/pixijs/pixi.js�PixiJS репозиторий, wiki (важно!) со ссылками
https://www.html5gamedevs.com/forum/15-pixijs/�PixiJS подфорум на html5gamedevs
https://t.me/gamedevforweb , https://t.me/threejs_ru�Русскоязычные telegram чаты о WebGL
https://beatflyer.com/�приложение использующее множество фильтров
Добивание
https://www.researchgate.net/publication/262357352_GPU-accelerated_Path_Rendering nvidia пытается в векторную графику (2012)
https://docs.google.com/document/d/1bs27MuOGB6OQrlQ2yNbStUwQFWI3MvxtIELIlMyIVgA/edit�Analytical Anti-Aliasing in Skia, на самом деле есть в сорцах самой Skia
https://developer.nvidia.com/gpugems/GPUGems3/gpugems3_ch25.html�Rendering Vector Art on the GPU
https://habr.com/ru/post/141910/�Первый понитред на хабре, про canvas-2d и турбо-паскаль.
Добавки!!!
http://www.adriancourreges.com/blog/2017/05/09/beware-of-transparent-pixels/ статья по premultiplied alpha
https://github.com/Busyrev/mipExploration�тест на особенности выбора уровня mip
https://ciechanow.ski/alpha-compositing/�хорошая статья по alpha compositing
https://codepen.io/stefanweck/pen/Vbgeax�фильтр с дождиком
Про себя
Анимация!
Ссылка на слайды