• Vulkan. Руководство разработчика. Графический конвейер

    • Translation
    • Tutorial
    Я переводчик в IT-компании CG Tribe, и я продолжаю выкладывать перевод руководства к Vulkan API (vulkan-tutorial.com).

    Сегодня я хочу поделиться с вами переводом первых двух глав раздела, посвященного графическому конвейеру (Graphics pipeline basics), — Introduction и Shader modules.

    Содержание
    1. Вступление

    2. Краткий обзор

    3. Настройка окружения

    4. Рисуем треугольник

    1. Подготовка к работе
    2. Отображение на экране
    3. Графический конвейер (pipeline)
      • Вступление
      • Шейдерные модули
      • Непрограммируемые этапы
      • Проходы рендера
      • Заключение
    4. Отрисовка
    5. Повторное создание цепочки показа

    5. Буферы вершин

    1. Описание
    2. Создание буфера вершин
    3. Staging буфер
    4. Буфер индексов

    6. Uniform-буферы

    1. Дескриптор layout и буфера
    2. Дескриптор пула и sets

    7. Текстурирование

    1. Изображения
    2. Image view и image sampler
    3. Комбинированный image sampler

    8. Буфер глубины

    9. Загрузка моделей

    10. Создание мип-карт

    11. Multisampling

    FAQ
    Читать дальше →
    • +12
    • 2.5k
    • 4
  • Пишем свой парсер математических выражений и калькулятор командной строки

    • Translation


    Примечание: полный исходный код проекта можно найти здесь.

    Вы когда-нибудь задавались вопросом, как цифровой калькулятор получает текстовое выражение и вычисляет его результат? Не говоря уже об обработке математических ошибок, семантических ошибок или работе с таким входными данными, как числа с плавающей запятой. Лично я задавался!

    Я размышлял над этой задачей, проводя инженерные разработки для моей магистерской работы. Оказалось, что я трачу много времени на поиск одних и тех же физических единиц измерения, чтобы проверить преобразования и правильность своих вычислений.
    Читать дальше →
  • Vulkan. Руководство разработчика. Настройка окружения

    • Translation
    • Tutorial
    Я переводчик ижевской компании CG Tribe и здесь я буду публиковать перевод руководства к Vulkan API. Ссылка на источник — vulkan-tutorial.com. Это моя вторая публикация, которая посвящена переводу раздела Development Environment.

    Содержание
    1. Вступление

    2. Краткий обзор

    3. Настройка окружения

    4. Рисуем треугольник

    1. Подготовка к работе
    2. Отображение на экране
    3. Графический конвейер (pipeline)
    4. Отрисовка
    5. Повторное создание цепочки показа

    5. Буферы вершин

    1. Описание
    2. Создание буфера вершин
    3. Staging буфер
    4. Буфер индексов

    6. Uniform-буферы

    1. Дескриптор layout и буфера
    2. Дескриптор пула и sets

    7. Текстурирование

    1. Изображения
    2. Image view и image sampler
    3. Комбинированный image sampler

    8. Буфер глубины

    9. Загрузка моделей

    10. Создание мип-карт

    11. Multisampling

    FAQ
    Читать дальше →
    • +10
    • 9.1k
    • 9
  • Разбираемся в физике частиц: 1) шар на пружине, ньютоновская версия

    • Translation
    1. Шар на пружине, ньютоновская версия
    2. Квантовый шар на пружине
    3. Волны, классический вид
    4. Волны, классическое уравнение движения
    5. Квантовые волны
    6. Поля
    7. Частицы – это кванты
    8. Как частицы взаимодействуют с полями

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

    image
    Рис. 1

    Чтобы понять физику частиц, из школьной физики вам нужно вспомнить одну-единственную вещь – как работает пружина. По сути всё, что подпрыгивает, вибрирует, звенит, дребезжит, качается вперёд и назад, представляет собой пример пружины.

    Представим, что мы поместили шарик на конце пружины. Движения пружины и описывающие его уравнения просты. Для начала вспомним основы поведения пружины, затем изучим поведение шара – осцилляцию. И, наконец, для самых пытливых умов мы рассмотрим уравнения, приводящие к такому виду движения.
    Читать дальше →
    • +9
    • 27.1k
    • 6
  • Как работает поле Хиггса: основная идея

    • Translation
    Разбираемся в физике частиц:
    1. Шар на пружине, ньютоновская версия
    2. Квантовый шар на пружине
    3. Волны, классический вид
    4. Волны, классическое уравнение движения
    5. Квантовые волны
    6. Поля
    7. Частицы – это кванты
    8. Как частицы взаимодействуют с полями

    Как работает поле Хиггса:
    1. Основная идея
    2. Почему поле Хиггса в среднем ненулевое
    3. Как появляется частица Хиггса
    4. Почему поле Хиггса необходимо


    Если вы читали мою серию статей про физику частиц и полей, вы знаете, что все т.н. «элементарные частицы» на самом деле – кванты (волны, чья амплитуда и энергия минимально допустимые квантовой механикой) релятивистских квантовых полей. Такие поля обычно удовлетворяют уравнениям движения класса 1 (или их обобщению) вида

    $ d^2Z/dt^2 - c^2 d^2Z/dx^2 = - (2 \pi \nu_{min})^2 (Z - Z_0) $


    Где Z(x,t) – поле, Z0 — равновесное состояние, x – пространство, t – время, d2Z/dt2 представляет изменение по времени изменения по времени Z (d2Z/dx2 — то же для пространства), c – универсальное ограничение скорости (часто называемое «скоростью света»), а νmin — минимально допустимая частота для волны в поле. Некоторые поля удовлетворяют уравнению класса 0, которое представляет собой просто уравнение класса 1, в котором величина νmin нулевая. У кванта такого поля масса

    $ m = h \nu_{min} / c^2 $


    Где h – постоянная Планка. Иначе говоря,

    $ d^2Z/dt^2 - c^2 d^2Z/dx^2 = - (2 \pi c^2/h)^2 m^2 (Z - Z_0) $


    Читать дальше →
  • Начинаем изучать микроконтроллеры на примере STM32F030f4p6



    0. Перед прочтением статьи


    Данная статья преследует следующие цели:

    1. показать, как работать конкретно с этой платой;
    2. показать подход, с помощью которого можно написать программу мигания светодиодом, опираясь исключительно на документацию и логику;
    3. изложить материал языком, понятным человеку, слабо знакомому с микроконтроллерами.

    Код получится минималистичным с точки зрения использования дополнительных файлов — мы не будем подключать ни один файл, кроме тех, что нужны для сборки пустой, но валидной, прошивки. Т.е. на базе кода прошивки, которая работает, но ничего полезного не делает.
    Читать дальше →
  • Unreal Engine 4 — шейдер горения

    • Translation
    • Tutorial
    Это небольшой шейдер, который появился, когда я думал о различных методах применения flowmap. Существуют много эффектов перехода/растворения, но большинство из них выглядит довольно статично, так как они используют статические текстуры. Данный шейдер далек от совершенства, но плавное движение делает его визуально привлекательным как плавный эффект горения.

    Сам шейдер чрезвычайно прост, ниже я опишу процесс его создания. Как и с большинством моих шейдеров, я обернул его в функцию материала, чтобы его можно было использовать с любыми существующими материалами.
    Читать дальше →
    • +22
    • 16.8k
    • 7
  • Основы компьютерной геометрии. Написание простого 3D-рендера

    Привет меня зовут Давид, а вот я собственной персоной отрендеренный своим самописным рендером:

    image

    К сожалению я не смог найти более качественную бесплатную модель, но все равно выражаю благодарность заморскому скульптору запечатлевшему меня в цифре! И как вы уже догадались, речь пойдет о написании CPU — рендера.
    Читать дальше →
  • Трансивер UART для 8-битного компьютера на макетной плате

    • Translation
    В последнее время мне всё больше нравится собирать 8-битные компьютеры из ТТЛ чипов. Я вдохновился замечательными роликами Бена Итера с ютуба, а также различными проектами с сайта Hackaday. В процессе проектирования и сборки собственного 8-битного компьютера я задумался над тем, насколько сложно было бы реализовать UART-трансивер на базе ИС серии 7400.


    Итоговая схема: готовый UART-трансивер, собранный из ИС серии 7400

    В первую очередь разберёмся, что такое UART. Это универсальный асинхронный приёмопередатчик – простой протокол, позволяющий асинхронно отправлять и получать 8-битные данные, благодаря чему процессор или компьютер могут общаться с внешним миром. Это и само по себе полезно – мой 8-битный компьютер может общаться с ноутбуком и использовать программу для мониторинга последовательного порта (типа putty) в качестве интерфейса для ввода и вывода текста. Что ещё интереснее, я могу запрограммировать загрузчик ОС для своего 8-битного компьютера, а потом программировать его через UART соединение с ноутбука! Поскольку Bluetooth модули типа HC-05, по сути, общаются с CPU через UART, я даже могу использовать Bluetooth модуль для программирования своего 8-битного компьютера на расстоянии! Это было бы очень круто.
    Читать дальше →
    • +20
    • 4.6k
    • 2
  • Создание софтверного движка 2.5D

      В настоящее время интерес к софтверным движкам, как из игр Quake, DOOM или Duke Nukem 3D практически нулевой. Однако, эти движки имели своё очарование и мне, например, очень нравится графика именно таких вот движков с нереалистичными текстурами на стенах. Конечно, такие текстуры можно накладывать без фильтрации и в OpenGL, получая такой же уровень графики, но всё же, написать собственный софтверный движок было весьма интересно. Движок уровня Quake я написать в своё время не смог, так как не удалось создать редактор 3D карты – я просто не представлял, как вообще рисовать в 3D карту. Да и с большой вероятность текстурирование в произвольном случае в моём исполнении (без ассемблера) было бы очень медленно. Но движок уровня DOOM мне покорился. Основу такого движка я написал в 2002 году, пользуясь книжкой Шикина и Борескова “Компьютерная графика. Полигональные модели”. На базе того движка используя графику из Doom я написал некое подобие игры под MS-DOS на Watcom C. Несколько лет назад я решил вынуть из той игры код движка и переработать его под мои текущие знания языка Си++ и представления о том, как стоило бы устроить этот движок. Ну и заодно перенести этот движок под Windows и дополнить наклонами головы, как в Blood или Duke Nukem. О том, что в результате получилось, я и написал в этой статье.
      Читать дальше →
    • RPi-няня

        Периодически меня подмывает сделать что-то странное. Очевидно бесполезную вещь, которая не оправдывает себя по объему вложенных средств, и через полгода после создания пылиться на полке. Но зато полностью оправдывает себя по количеству эмоций, полученному опыту и новым рассказам. На Хабре даже есть две моих статьи про такие эксперименты: Алкоорган и умная кормушка для птиц.

        Что ж. Пришло время рассказать о новом эксперименте. Как собрал, что из этого вышло и как повторить.



        К новому проекту меня подтолкнуло событие, в каком-то смысле, банальное — родился сын. Я заранее устроил себе отпуск на месяц. Но ребёнок оказался тихим — было свободное время. И спящий рядом деть.

        Дома много разных embedded-железок для computer vision. В итоге решил сделать видео-няню. Но не такую унылую, которыми завалены все магазины. А что-то поумнее и поинтереснее.
        Читать дальше →
        • +38
        • 10.8k
        • 7
      • Операционные усилители: 10 схем на (почти) все случаи жизни

          Всем привет!

          В последнее время я по большей части ушел в цифровую и, отчасти, в силовую электронику и схемы на операционных усилителях использую нечасто. В связи с этим, повинуясь неуклонному закону полураспада памяти, мои знания об операционных усилителях стали постепенно тускнеть, и каждый раз, когда все-таки надо было использовать ту или иную схему с их участием, мне приходилось гуглить ее расчет или искать его в книгах. Это оказалось не очень удобно, поэтому я решил написать своего рода шпаргалку, в которой отразил наиболее часто используемые схемы на операционных усилителях, приведя их расчет, а также результаты моделирования в LTSpice.


          Читать дальше →
        • Машинное обучение. Нейронные сети (часть 2): Моделирование OR; XOR с помощью TensorFlow.js

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

            Машинное обучение. Нейронные сети (часть 1): Процесс обучения персептрона

            В данной же статье мы с помощью нейронной сети смоделируем выполнение логических операций OR; XOR, которые являются своеобразным «Hello World» приложением для нейронных сетей.
            В статье будет последовательно описан процесс такого моделирования с использованием TensorFlow.js.
            Читать дальше →
          • Машинное обучение. Нейронные сети (часть 1): Процесс обучения персептрона

              Заранее хочу отметить, что тот кто знает как обучается персептрон — в этой статье вряд ли найдет что-то новое. Вы можете смело пропускать ее. Почему я решил это написать — я хотел бы написать цикл статей, связанных с нейронными сетями и применением TensorFlow.js, ввиду этого я не мог опустить общие теоретические выдержки. Поэтому прошу отнестись с большим терпением и пониманием к конечной задумке.

              При классическом программировании разработчик описывает на конкретном языке программирования определённый жестко заданный набор правил, который был определен на основании его знаний в конкретной предметной области и который в первом приближении описывает процессы, происходящие в человеческом мозге при решении аналогичной задачи.

              Например, может быть запрограммирована стратегия игры в крестики-нолики, шахмат и другое (рисунок 1).


              Рисунок 1 – Классический подход решения задач

              В то время как алгоритмы машинного обучения могут определять набор правил для решения задач без участия разработчика, а только на базе наличия тренировочного набора данных.
              Тренировочный набор — это какой-то набор входных данных ассоциированный с набором ожидаемых результатов (ответами, выходными данными). На каждом шаге обучения, модель за счет изменения внутреннего состояния, будет оптимизировать и уменьшать ошибку между фактическим выходным результатом модели и ожидаемым результатом (рисунок 2).


              Рисунок 2 – Машинное обучение

              Нейронные сети


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

              На рисунке 3 вы можете увидеть сходство между устройством биологического нейрона и математическим представлением нейрона, используемого в машинном обучении.
              Читать дальше →
            • Как я считал время прибытия методом Монте-Карло

              • Translation
              Легкий и «полупраздничный» пост. Всех причастных с праздником :)

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

              Несмотря на то, что PHP не является научным языком и редко используется в исследовательских целях, метод Монте-Карло легко может быть реализован и на нём. И в данной статье я покажу как это сделать.

              Задача из реальной жизни

              Пару дней назад у меня должна быть встреча в 9 часов утра, за 100 миль от моего дома. В 6.30 утра я проснулся, оделся и пока я завтракал, я начал прикидывать в блокноте ближайшие пару часов. Я, как обычно, хотел приехать вовремя, поэтому я начал набрасывать маршрут: выезд из города, проселочная дорога, затем по штату на север, на восток, местная дорога на восток, проехать город, затем на снова на север и прибытие в город. Все это выглядело как-то так:

              Читать дальше →
              • +15
              • 26.4k
              • 4
            • Склеиваем несколько фотографий в одну длинную с помощью компьютерного зрения

                В предыдущих статьях был описан шеститочечный метод разворачивания этикеток и как мы тренировали нейронную сеть. В этой статье описано, как склеить фрагменты, сделанные из разных ракурсов, в одну длинную картинку.
                Читать дальше →
              • Изобретаем велосипед или пишем персептрон на С++. Часть 3

                • Tutorial

                Изобретаем велосипед или пишем персептрон на C++. Часть 3


                Реализуем обучение многослойного персептрона на C++ при помощи метода обратного распространения ошибки.



                Читать дальше →
              • Проект «часов Уизли» с демонстрацией местоположения членов семьи

                • Translation


                Я хотел удивить жену на Рождество. Она – рыжая, фанат «Гарри Поттера», а ещё и мать; всё это вдохновило меня на создание «часов Уизли». Идею я придумал в феврале, поэтому у меня было 10 месяцев на разработку и создание проекта.

                Для людей, незнакомых с Гарри Поттером и семейством Уизли, поясню, что у семьи магов Уизли есть волшебные часы, которые показывают не время, а местоположение членов семьи, для каждого из которых есть своя стрелка. Вот отрывок из книги «Гарри Поттер и Кубок огня» (Дж. Роулинг, 2000):
                Миссис Уизли взглянула на напольные часы, стоявшие в углу. Гарри они понравились. Если вы хотели узнать, который час, они бы вам совсем не пригодились – однако оказывались весьма полезными для кое-чего другого. У них было девять золотых стрелок, на каждой из которых было выгравировано имя одного из членов семейства Уизли. На циферблате были не цифры, а описания мест, где мог находиться каждый из членов семьи. Там были «дом», «школа», «работа», а также «в пути», «потерялся», «больница», «тюрьма»; в том месте, где у обычных часов должна была быть цифра «12», значилось «смертельная угроза». Восемь стрелок указывали на «дом», а стрелка мистера Уизли, самая длинная, всё ещё показывала на «работу».

                «О, а вот и ваш отец едет!» – внезапно сказала она, вновь посмотрев на часы. Стрелка мистера Уизли вдруг начала крутиться, переходя от «работы» к «в пути», а через секунду вздрогнула и остановилась на отметке «дом» вместе со всеми остальными, и все услышали, как он зовёт их с кухни.
                Читать дальше →
              • Распознавание мяча в волейболе с OpenCV и Tensorflow

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

                  Применение искусственного интеллекта к спорту — недавняя тенденция, но уже есть интересные материалы:


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

                  Сразу скажу, что с наскока распознать элементы игры получилось с невысокой точностью, так что пришлось придержать амбиции и пилить задачу по частям. И первая часть — про самый маленький, но необходимый объект.
                  Читать дальше →
                • Blender 3D для 3D печатников

                  Считается, что полигоналка не подходит для вещей физического мира.

                  Верная позиция! Но часть задач всё-таки можно закрыть полигональным моделированием.

                  Собрал здесь ответы на четыре самые частые и неочевидные проблемы.

                  image
                  Читать дальше →