• Цвет: от шестнадцатеричных кодов до глаза

    • Перевод


    Почему мы воспринимаем background-color: #9B51E0 как этот конкретный фиолетовый цвет?



    Долгое время я думал, что знаю ответ на этот вопрос. Но хорошенько поразмыслив, осознал значительные пробелы в своих знаниях.
    Читать дальше →
  • Learn OpenGL. Урок 4.10 — Инстансинг

    • Перевод
    • Tutorial
    OGL3

    Инстансинг


    Представьте, что вы задумали сцену, содержащую огромное количество моделей объектов, причем преимущественно эти модели содержат одинаковые вершинные данные, разнятся только матрицы трансформации, примененные к ним. Например, сцена с травяным полем, где каждая былинка представлена маленькой моделью, составленной буквально из пары треугольников. Конечно же, для достижения нужного эффекта придется отрендерить эту модель не один раз, а тысячу, десять тысяч раз за кадр. Поскольку в каждом листике содержится буквально пара треугольников, то его рендер будет практически мгновенным. Но вот тысячи повторных вызовов функций рендера совокупно очень заметно ударят по производительности.
    Читать дальше →
    • +39
    • 5,2k
    • 4
  • Воссоздание эффекта воды из Super Mario Sunshine для Nintendo GameCube

    • Перевод
    image

    Примечание: В оригинале статьи есть демо на WebGL2, которые в переводе заменены на видео и GIF.

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

    Недавно я расширил возможности моего приложения просмотра игровых моделей на основе WebGL, добавив поддержку некоторых игр с Nintendo GameCube, в том числе The Legend of Zelda: The Wind Waker и Super Mario Sunshine. В GameCube, если вы не знаете, установлен передовой, почти программируемый видеопроцессор, но с фиксированным функционалом. Разработчики не могли писать шейдеры, и вместо этого программировали наборы комбинаторов текстур способом, похожим на использованные в конвейерах glTexEnv, но доведённым до максимума возможностей.
    Читать дальше →
    • +53
    • 8,9k
    • 2
  • Сравнение открытых OLAP-систем Big Data: ClickHouse, Druid и Pinot

    • Перевод
    ClickHouse, Druid и Pinot — три открытых хранилища данных, которые позволяют выполнять аналитические запросы на больших объемах данных с интерактивными задержками. Эта статья — перевод подробного сравнения, выполненного Романом Левентовым.

    Спойлер

    ClickHouse Druid или Pinot
    В организации есть эксперты по C++ В организации есть эксперты по Java
    Малый кластер Большой кластер
    Немного таблиц Много таблиц
    Один набор данных Несколько несвязанных наборов данных
    Таблицы и данные находятся в кластере перманентно Таблицы и наборы данных периодически появляются в кластере и удаляются из него
    Размер таблиц (и интенсивность запросов к ним) остается стабильным во времени Таблицы значительно растут и сжимаются
    Однородные запросы (их тип, размер, распределение по времени суток и т.д.) Разнородные запросы
    В данных есть измерение, по которому они могут быть сегментированы, и почти не выполняется запросов, которые затрагивают данные, расположенные в нескольких сегментах Подобного измерения нет, и запросы часто затрагивают данные, расположенные во всем кластере
    Облако не используется, кластер должен быть развернут на специфическую конфигурацию физических серверов Кластер развернут в облаке
    Нет существующих кластеров Hadoop или Spark Кластеры Hadoop или Spark уже существуют и могут быть использованы
    А под катом — подробный рассказ о том, как Роман к этому пришёл.
    Читать дальше →
    • +45
    • 7,2k
    • 4
  • Cжатие и улучшение рукописных конспектов

    • Перевод
    Я написал программу для очистки отсканированных конспектов с одновременным уменьшением размера файла.

    Исходное изображение и результат:


    Слева: исходный скан на 300 DPI, 7,2 МБ PNG / 790 КБ JPG. Справа: результат с тем же разрешением, 121 КБ PNG [1]

    Примечание: описанный здесь процесс более-менее совпадает с работой приложения Office Lens. Есть другие аналогичные программы. Я не утверждаю, что придумал нечто радикальное новое — это просто моя реализация полезного инструмента.

    Если торопитесь, просто посмотрите репозиторий GitHub или перейдите в раздел результатов, где можно поиграться с интерактивными 3D-диаграммами цветовых кластеров.
    Читать дальше →
  • Про двумерную упаковку: offline алгоритмы

      Сегодня, дорогой Хабр, я расскажу тебе историю о комбинаторной оптимизации.
      Издревле (как минимум, с начала прошлого века) математики задавались вопросом, как оптимально разместить некоторое количество пива нужных и полезных предметов в рюкзаке. Была сформулирована задача о ранце и ее подзадачи — тысячи их! — которые заинтересовали информатиков, криптографов и даже лингвистов.

      От задачи о ранце отпочковалась задача об упаковке в контейнеры (Bin Packing Problem), одной из разновидностей которых является задача двумерной упаковки (2-Dimensional Bin Packing). Снова отбросив несколько вариаций, мы наконец придем к двумерной упаковке в полуограниченную полосу (2-Dimensional Strip Packing, 2DSP). Чувствуете, сколько интересного уже осталось за кадром? Но мы еще не закончили продираться сквозь классификацию. У 2DSP есть два варианта входных данных: когда набор упаковываемых объектов известен заранее (offline-проблема) и когда данные поступают порциями (online-проблема).

      В этой статье рассматриваются алгоритмы решения offline-варианта 2DSP. Под катом немного матчасти и много картинок с цветными квадратиками.

      В чем, собственно, проблема?


      Читать дальше →
    • Про двумерную упаковку: online алгоритмы

        Это продолжение поста про оффлайн алгоритмы упаковки.

        Суть задачи: имеем полубесконечную полосу — как в тетрисе, только без game over'а, и конечный набор прямоугольников. Данные о прямоугольниках поступают в режиме реального времени; каждый новый прямоугольник необходимо немедленно разместить и больше не двигать с места. Цель — минимизировать общую высоту упакованных прямоугольников.
        Это online-вариация задачи об упаковке прямоугольников в полуограниченную полосу (2 Dimensional Strip Packing, 2DSP).

        Чуть больше теоретических сведений можно найти в предыдущей статье, а пока, без лишних слов, перейдем к алгоритмам.
        Читать дальше →
      • Three Futamura Projections и не только

          Привет, хабрачеловек. Сегодня я расскажу тебе про некоторые фундаментальные вещи в computer science: частичные вычисления, три проекции Футамуры и суперкомпиляцию.
           
           

          1. Сразу к коду


          -- функция, которая возводит x в степень y (неотрицательную)
          power x y =
              case y of
                  0 → 1
                  1 → x
                  _ → x * (power x (y - 1))


          Читать дальше →
        • Объёмное атмосферное рассеяние света

          • Перевод
          image

          Если вы прожили на планете Земля достаточно долго, то наверно задавались вопросом, почему небо обычно синее, но краснеет на закате. Оптическое явление, которое стало (основной) причиной этого, называется рэлеевским рассеянием. В этой статье я расскажу, как смоделировать атмосферное рассеяние, чтобы имитировать многие визуальные эффекты, которые проявляются на планетах. Если вы хотите научиться рендерить физически точные изображения чужих планет, то этот туториал определённо стоит изучить.

          GIF

          Статья разбита на следующие части:

          • Часть 1. Объёмное атмосферное рассеяние
          • Часть 2. Теория атмосферного рассеяния
          • Часть 3. Математика рэлеевского рассеяния
          • Часть 4. Путешествие сквозь атмосферу
          • Часть 5. Атмосферный шейдер
          • Часть 6. Пересечение атмосферы
          • Часть 7. Шейдер атмосферного рассеяния
          Читать дальше →
        • Как оживить картинку в браузере. Многопроходный рендеринг в WebGL

            Каждый, кто сталкивался с трехмерной графикой, рано или поздно открывал документацию на методы отрисовки, которые предполагают несколько проходов рендерера. Такие методы позволяют дополнить картинку красивыми эффектами, вроде свечения ярких пятен (Glow), Ambient occlusion, эффекта глубины резкости.


            И «взрослый» OpenGL, и мой любимый WebGL предлагают богатую функциональность для отрисовки результатов в промежуточные текстуры. Однако управление этой функциональностью — довольно сложный процесс, в котором очень легко получить ошибку на любом из этапов, начиная от создания текстур нужного разрешения до именования юниформ и передачи их в соответствующий шейдер.


            Чтобы разобраться, как правильно готовить WebGL, мы обратились к специалистам компании Align Technology. Они решили создать специальный менеджер для управления всем этим зоопарком из разных текстур, которым было бы удобно пользоваться. Что из этого получилось — будет под катом. Важно, что неподготовленного читателя, который никогда до этого не сталкивался с необходимостью организации многопроходного рендеринга, статья может показаться непонятной. Задача довольно специфическая, но и безумно интересная.


            Читать дальше →
            • +33
            • 8,4k
            • 6