Pull to refresh
5
0
Михаил Гевлич @mgevlich

Программист

Send message

Multithreading

Reading time77 min
Views195K

Разработчики часто сталкиваются с необходимостью разработки многопоточных приложений, поэтому вопросы многопоточности требуют детального изучения. Давайте познакомимся с основными терминами, используемыми в источниках информации о многопоточности, рассмотрим задачи и проблемы многопоточности и изучим средства стандартной библиотеки C++, которые помогут создавать многопоточные приложения.

Читать далее
Total votes 17: ↑15 and ↓2+18
Comments3

Основы Signed Distance Field в 2D

Reading time17 min
Views15K
Хотя меши являются простейшим и наиболее универсальным способом рендеринга, существуют и другие варианты представления фигур в 2d и 3d. Одним из часто используемых способов являются поля расстояний со знаком (signed distance fields, SDF). Поля расстояний со знаком обеспечивают менее затратную трассировку лучей, позволяют разным фигурам плавно перетекать друг в друга и экономить на текстурах низкого разрешения для высококачественных изображений.

Мы начнём с генерации полей расстояний со знаком с помощью функций в двух измерениях, но позже продолжим генерировать их в 3D. Я буду использовать координаты мирового пространства, чтобы у нас была как можно меньшая зависимости от масштабирования и UV-координат, поэтому если вы не понимаете, как это работает, то изучите этот туториал по плоскому наложению, в котором объяснено, что происходит.

Читать дальше →
Total votes 15: ↑15 and ↓0+15
Comments5

3D реконструкция лица, или как получить своего цифрового двойника (Часть 1)

Reading time5 min
Views13K

Поговорим о методах 3D восстановления лица человека, которое почти не отличить от фотографий. Тема лицевой 3D реконструкции вот уже 2 года практически не освещается на Хабре. Тем временем область 3D digital human не только не теряет свою актуальность, но и переживает бурный научно-технологический рост. Так что будем регулярно выкладывать обзоры статей и результаты разных методов восстановления 3D-моделей человека по фотографиям.

Читать далее
Total votes 8: ↑8 and ↓0+8
Comments3

Отпечаток браузера: что это, как работает, нарушает ли закон и как защититься. Часть 1

Reading time5 min
Views60K
image

От Selectel: эта статья первая в цикле переводов очень детальной статьи об отпечатках браузера и том, как работает технология. Здесь собрано все, что вы хотели знать, но боялись спросить по этой теме.

Что такое отпечатки браузера?


Это метод, используемый сайтами и сервисами для отслеживания посетителей. Пользователям присваивается уникальный идентификатор (отпечаток). Он содержит много информации о настройках и возможностях браузера пользователей, что используется для их идентификации. Кроме того, отпечаток браузера позволяет сайтам отслеживать поведенческие паттерны, чтобы впоследствии еще точнее идентифицировать пользователей.

Уникальность примерно такая же, как у реальных отпечатков пальцев. Только последние собирает полиция для поиска подозреваемых в совершении преступлений. А вот технология отпечатка браузеров применяется вовсе не для отслеживания преступников. Ведь мы же здесь не преступники, верно?
Читать дальше →
Total votes 25: ↑25 and ↓0+25
Comments16

Eggs.Variant — Часть I

Reading time14 min
Views8.9K
На публикацию этого перевода меня сподвиг комментарий пользователя @encyclopedist к недавней статье «Фабричный метод без размещения в динамической памяти». Статья меня заинтересовала, но беглое гугление не выявило перевода. «Непорядок.» — подумал я — «Такая интересная статья по С++ и не переведена на русский язык. Надо бы исправить.»

Оглавление
  1. Введение
  2. Проектирование
  3. Реализация

  4. О чём ещё не сказано


Размышления о разработке Eggs.Variant — обобщённом типобезопасном размеченном объединении на C++11/14.

Введение


Объединение — это специальный тип класса, который в один момент времени может хранить только один из своих нестатических членов. Он занимает столько места, сколько требуется для размещения наибольшего из его членов.
9 [class]/5 Объединение — это класс, определяемый с ключевым словом union; одновременно он может хранить только один из своих членов (9.5). [...]
9.5 [class.union]/1 В объединении активным может быть только один из нестатических членов, то есть, в данный момент времени в объединении может храниться значение только одного из его нестатических членов. [...] Размер объединения достаточен для вмещения самого большого из его нестатических членов. Каждый нестатический член размещается в памяти так, словно он является единственным членом структуры. Все нестатические члены объекта объединения имеют одинаковый адрес.

Оригинал
9 [class]/5 A union is a class defined with the class-key union; it holds at most one data member at a time (9.5). [...]
9.5 [class.union]/1 In a union, at most one of the non-static data members can be active at any time, that is, the value of at most one of the non-static data members can be stored in a union at any time. [...] The size of a union is sufficient to contain the largest of its non-static data members. Each non-static data member is allocated as if it were the sole member of a struct. All non-static data members of a union object have the same address.



Читать дальше →
Total votes 18: ↑17 and ↓1+16
Comments13

SSLR: Screen Space Local Reflections в AAA-играх

Reading time6 min
Views81K
image

Привет, друг! В этот раз я опять подниму вопрос о графике в ААА-играх. Я уже разобрал методику HDRR (не путать с HDRI) тут и чуть-чуть поговорил о коррекции цвета. Сегодня я расскажу, что такое SSLR (так же известная как SSPR, SSR): Screen Space Local Reflections. Кому интересно — под кат.
Читать дальше →
Total votes 62: ↑60 and ↓2+58
Comments48

Анатомия KD-Деревьев

Reading time14 min
Views49K
image

Эта статья полностью посвящена KD-Деревьям: я описываю тонкости построения KD-Деревьев, тонкости реализации функций поиска 'ближнего' в KD-Дереве, а также возможные 'подводные камни', которые возникают в процессе решения тех или иных подзадач алгоритма. Дабы не запутывать читателя терминологией(плоскость, гипер-плоскость и т.п), да и вообще для удобства, полагается что основное действо разворачивается в трехмерном пространстве. Однако же, где нужно я отмечаю, что мы работаем в пространстве другой размерности. По моему мнению статья будет полезна как программистам, так и всем тем, кто заинтересован в изучении алгоритмов: кто-то найдет для себя что-то новое, а кто-то просто повторит материал и возможно, в комментариях дополнит статью. В любом случае, прошу всех под кат.
Читать дальше →
Total votes 32: ↑32 and ↓0+32
Comments11

Learn OpenGL. Урок 5.5 – Normal Mapping

Reading time19 min
Views39K
OGL3

Normal Mapping


Все сцены, которые мы используем состоят из многоугольников, в свою очередь состоящих из сотен, тысяч абсолютно плоских треугольников. Нам уже удалось немного повысить реализм сцен за счет дополнительных деталей, которые обеспечивает нанесение двухмерных текстур на эти плоские треугольники. Текстурирование помогает скрыть факт того, что все объекты в сцене – всего лишь набор множества мелких треугольников. Великолепная техника, но возможности её не безграничны: при приближении к любой поверхности все одно становится ясно, что она состоит из плоских поверхностей. Большая же часть реальных объектов не является абсолютно плоской и демонстрирует множество рельефных деталей.
Читать дальше →
Total votes 19: ↑19 and ↓0+19
Comments3

React.js: собираем с нуля изоморфное / универсальное приложение. Часть 1: собираем стек

Reading time22 min
Views196K
image

Лицо моей жены, когда она вычитывала эту статью


Я решил написать цикл статей, который и сам был бы счастлив найти где-то полгода назад. Он будет интересен в первую очередь тем, кто хотел бы начать разрабатывать классные приложения на React.js, но не знает, как подступиться к зоопарку разных технологий и инструментов, которые необходимо знать для полноценной front-end разработки в наши дни.


Я хочу с нуля реализовать, пожалуй, наиболее востребованный сценарий: у нас есть серверная часть, которая предоставляет REST API. Часть его методов требует, чтобы пользователь веб-приложения был авторизован.

Читать дальше →
Total votes 51: ↑46 and ↓5+41
Comments78

Тонкости модульной системы ECMAScript 2015 (ES6)

Reading time5 min
Views117K
Уже около полугода я пишу на ES6 (который в итоге назвали ES-2015) и ES7, с использованием бабеля в качестве транслятора. Писать мне приходилось в основном серверную часть, соответственно, использование модулей было само собой разумеющимся: до ES6 — с помощью модульной системы самой ноды, а теперь — с помощью стандартизированной семантики самого языка. И мне захотелось написать статью, в которой расписать тонкости, плюсы, подводные камни и необычности новообретенной модульной системы языка: отчасти — чтобы другим было проще, отчасти — чтобы разобраться во всём окончательно самому.

Я разберу, что такое модуль, как происходит экспорт сущностей, как происходит импорт сущностей, чем система модулей ES6 отличается от системы модулей в NodeJS.
Итак, начнем.
Total votes 39: ↑39 and ↓0+39
Comments38

HDR vs LDR, реализация HDR Rendering

Reading time8 min
Views89K


Как я и обещал – публикую вторую статью о некоторых моментах разработки игр в трех измерениях. Сегодня расскажу об одной технике, которая используется почти любом проекте ААА-класса. Имя ей — HDR Rendering. Если интересно — добро пожаловать под хабракат.
Читать дальше →
Total votes 177: ↑173 and ↓4+169
Comments63

Псевдотонирование изображений: одиннадцать алгоритмов и исходники

Reading time12 min
Views29K

Псевдотонирование: обзор



Про сегодняшнюю тему для программирования графики — псевдотонирование (дизеринг, псевдосмешение цветов) — я получаю много писем, что может показаться удивительным. Вы можете подумать, что псевдотонирование — это не то, чем программисты должны заниматься в 2012 году. Разве псевдосмешение — не артефакт история технологий, архаизм времён, когда дисплей с 16 миллионами цветов программистам и пользователям мог только сниться? Почему я пишу статью о псевдотонировании в эпоху, когда дешевые мобильные телефоны работают с великолепием 32-битной графики?

На самом деле псевдотонирование по-прежнему остаётся уникальным методом не только по практическим соображениям (например, подготовка полноцветного изображения для печати на чёрно-белом принтере), но и по художественным. Дизеринг также находит применение в веб-дизайне, где этот полезный метод используется для сокращения числа цветов изображения, что уменьшает размер файла (и трафик) без ущерба для качества. Он также используется при уменьшении цифровых фотографий в формате RAW в 48 или 64 бита на пиксель до RGB в 24 бита на пиксель для редактирования.

И это — применения лишь в области изображений. В звуке дизеринг тоже играет ключевую роль, но боюсь, обсуждать здесь дизеринг аудио я не буду. Только псевдотонирование изображений.
Читать дальше →
Total votes 66: ↑64 and ↓2+62
Comments23

Усатый стрелок из двадцати трёх полигонов

Reading time20 min
Views30K

А давайте отвлечёмся немного и напишем игру в google play? И не такую огромную и неподъёмную фигню, про которую я обычно пишу статьи, а что-нибудь простое и милое сердцу?


На самом деле, всё очень просто: я наконец-то зарегистрировал аккаунт разработчика и очень хочу его опробовать. На момент написания этих строк у меня нет ни одного написанного класса и ни одного нарисованного пикселя. По сути, эта статья — самый настоящий devlog.

Total votes 87: ↑86 and ↓1+85
Comments26

Введение в алгоритм A*

Reading time10 min
Views184K
При разработке игр нам часто нужно находить пути из одной точки в другую. Мы не просто стремимся найти кратчайшее расстояние, нам также нужно учесть и длительность движения. Передвигайте звёздочку (начальную точку) и крестик (конечную точку), чтобы увидеть кратчайший путь. [Прим. пер.: в статьях этого автора всегда много интерактивных вставок, рекомендую сходить в оригинал статьи.]


Для поиска этого пути можно использовать алгоритм поиска по графу, который применим, если карта представляет собой граф. A* часто используется в качестве алгоритма поиска по графу. Поиск в ширину — это простейший из алгоритмов поиска по графу, поэтому давайте начнём с него и постепенно перейдём к A*.
Total votes 70: ↑69 and ↓1+68
Comments20

Карта галактики на Three.js/WebGL

Reading time5 min
Views19K

Доброго времени дня или ночи. В свободное время я занимаюсь разработкой игры на космическую тематику на Three.js/WebGL и задумал написать небольшую серию статей по некоторым компонентам игры, в этой статье мы поговорим о карте галактики. Рассказ пойдет уже привычным мне способом — по шагам.
Читать дальше →
Total votes 18: ↑16 and ↓2+14
Comments11

Редактирование шейдеров WebGL на лету с помощью Firefox Developer Tools

Reading time3 min
Views11K
В Firefox 27 появился новый инструмент — редактор шейдеров — который значительно упрощает их разработку. Редактор показывает все запущенные в контексте WebGL программы, даёт возможность редактировать их и сразу же видеть изменения без единого обрыва анимаций или потери состояния.


Читать дальше →
Total votes 39: ↑39 and ↓0+39
Comments4

Async/Await в javascript. Взгляд со стороны

Reading time6 min
Views137K


В последнее время все больше моих друзей, коллег и людей из сообщества говорят про работу с асинхронными функциями и в частности про использование async/await на своих проектах. Я решил разобраться для себя, что это за зверь и стоит ли его использоваться при разработке боевых проектов.

Первое что хочется развеять, это распространенное заблуждение о том, что async/await — это фича ES7.

По моему мнению, использование терминов ES6 и ES7 само по себе не очень верное и может ввести разработчиков в заблуждение. После удачного релиза спецификации ES2015, называемой ES6, у многих людей сложилось ошибочное мнение, что все в нее не вошло и заполифилено через babel — это фичи ES7. Это не так. Вот список того что появится с релизом спецификации ES2016. Как видите он не такой большой и async/await в нем никак не значится.

Я хочу, чтобы мы говорили правильно. И говоря о той, или иной фиче, ссылались на конкретную спецификацию в рамках которой она описана и реализована, а не мифические ES6, ES7 … ESN.
Читать дальше →
Total votes 37: ↑34 and ↓3+31
Comments53

Потенциально опасные алгоритмы

Reading time25 min
Views54K

Математические модели и алгоритмы сегодня отвечают за принятие важных решений, влияющих на нашу повседневную жизнь, более того — они сами управляют нашим миром.


Без высшей математики мы бы лишились алгоритма Шора для факторизации целых чисел в квантовых компьютерах, калибровочной теории Янга-Миллса для построения Стандартной модели в физике элементарных частиц, интегрального преобразования Радона для медицинской и геофизической томографии, моделей эпидемиологии, анализов рисков в страховании, моделей стохастического ценообразования финансовых производных, шифрования RSA, дифференциальных уравнений Навье-Стокса для прогнозирования изменений движения жидкостей и всего климата, всех инженерных разработок от теории автоматического управления до методов нахождения оптимальных решений и еще миллиона других вещей, о которых даже не задумываемся.


Математика стоит в основе цивилизации. Тем интереснее узнать, что с самого зарождения этого краеугольного камня в нем содержатся ошибки. Иногда ошибки математики остаются незаметными тысячелетия; порой они возникают спонтанно и быстро распространяются, проникая в наш код. Опечатка в уравнении ведет к катастрофе, но и само уравнение может быть потенциально опасно.


Мы воспринимаем ошибки как нечто чуждое, но что если вокруг них и строится наша жизнь?

Читать дальше →
Total votes 94: ↑85 and ↓9+76
Comments27

Производительность WebGL-приложений

Reading time13 min
Views14K


Кирилл Дмитренко (Яндекс)


Всем привет! Меня зовут Кирилл Дмитренко, последние 4,5 года я работаю в Яндексе фронтенд-разработчиком. И все это время меня преследуют панорамы. Когда я пришел в компанию, я делал внутренние сервисы для панорам, после этого я решал задачи по панорамам на больших Яндекс.картах, а недавно сделал веб-плеер панорам на Canvas 2D, HTML и WebGL. Сегодня я хочу поговорить с вами о производительности WebGL-приложений.
Читать дальше →
Total votes 35: ↑32 and ↓3+29
Comments3

Information

Rating
Does not participate
Location
Белгород, Белгородская обл., Россия
Registered
Activity