Базовый курс C++ (MIPT, ILab). Lecture 14 (доп). OpenGL и Vulkan

แชร์
ฝัง
  • เผยแพร่เมื่อ 20 ธ.ค. 2024

ความคิดเห็น • 61

  • @etherzon
    @etherzon หลายเดือนก่อน +2

    ваш канал - это просто золотая жила для cs

  • @catalyst1755
    @catalyst1755 ปีที่แล้ว +4

    Это самое лучшее объяснение, лично для меня многие непонятки прояснились.

  • @LeontyevIgor
    @LeontyevIgor 2 ปีที่แล้ว +6

    Ужасно интересно! Трёхкратный прирост впечатлил 👍👍

    • @tilir
      @tilir  2 ปีที่แล้ว +3

      Тут в комментариях уже обнаружилось что такие цифры скорее от того, что я несколько недожал в OpenGL части. Попытаюсь наверстать к следующему году =)

  • @usercommon1
    @usercommon1 2 ปีที่แล้ว +12

    вотэта мне надо такое

  • @babichfx
    @babichfx 2 ปีที่แล้ว +1

    Всегда знал что openGL круто но что-то с ним не так! Очень впечатлен обострением проблем и переходом к вулкану. Смотрю про него с интересом! Спасибо!

  • @yakryt7228
    @yakryt7228 2 ปีที่แล้ว +5

    Отличная премьера, спасибо!

  • @tetraphobie
    @tetraphobie 6 หลายเดือนก่อน +1

    Супер лекция!
    Mаленькая заметка - в "presént" в значении "представить" ударение идёт на 2 слог а не на 1ый. С ударением на 1 слоге это "подарок" или "настоящее". Кажется мелочью и доебыванием но меня лично это безостановояно сбивало с толку 😂
    (ведь буфер мы представляем (presEnt) перед пользователем, а не просим систему дать нам какой-то текущий (prEsent) буфер)

  • @MrSnarpix
    @MrSnarpix 2 ปีที่แล้ว +7

    Прекрасная лекция для введения в графику

    • @helloworld-fv8kx
      @helloworld-fv8kx ปีที่แล้ว +4

      Вы уверенны что это прекрасная лекция для ВВЕДЕНИЯ в графику ?

  • @volodiaagadjanov7087
    @volodiaagadjanov7087 2 ปีที่แล้ว +2

    Пытался залезть на Vulkan раньше, не получалось никак. Код ну просто чудовищен, вообще официальные туторы отбивают желание этим заниматься. Туда напихивают сразу же и слои валидации, и всю работу с экстеншенами. Как говорит Константин, "Путь до первого треугольника", с офф туторами это просто минное поле из тонн неструктурированного грязного кода.
    Так что спасибо за эту лекцию, мне была крайне полезна! Ну и Vulkan-hpp реально лучше for use. Она хотя бы чистит все эти сотни структур с заданием sType в рантайме, через которые ты общаешься с API. Уже за это ее можно и нужно юзать в cpp коде.

  • @ATtiny13a-PU
    @ATtiny13a-PU ปีที่แล้ว +1

    Интересно слышать в одном видео про поддержку OpenGL 2.0 и Vulkan) но лекция выглядит очень структурировано, этому стоило бы поучится некоторым

  • @niklkelbon3662
    @niklkelbon3662 2 ปีที่แล้ว +3

    на 1:50:00 не понял что мешало им сделать просто оператор для енама без всяких лишних классов. Ну и реализацию to_underlying за одну строку тоже впринципе можно было бы вкинуть, она даже в С++23 есть
    template
    constexpr auto to_underlying(T value) noexcept {
    return static_cast(value);
    }
    P.S. до С++20 если вы не поставите enable if с проверкой что это enum, то std::underlying_type на не енам ЭТО UB!! Не шучу!
    А за лекцию спасибо, давно хотел узнать что то про эти апишки, но нигде нет нормальной информации

    • @tilir
      @tilir  2 ปีที่แล้ว

      Идея оператора для enum class плоха вот чем: у вас есть флаги A, B, C но например A | B уже не член enum class и мы не хотим чтобы он им был. Поэтому у нас есть enum class для индивидуальных возможных флагов и отдельный класс который хранит underlying type для их комбинаций.

  • @JohnWickMovie
    @JohnWickMovie 2 ปีที่แล้ว +3

    Брошу еще камней в огород OpenGL
    - Отсутствие пред компилированного байт-кода, как например у DX еще с бородатых времен(Добавили только в 4.6 версии поддержку SPIR-V, особо доставляла функция glLinkProgram)
    - Из за сложной стэйт машины высокая нагрузка на CPU, на мобилках это довольно критично
    - Неконсистентность самого API

  • @uvash4611
    @uvash4611 2 ปีที่แล้ว +1

    Лекция хороша, но хотелось бы пару замечаний, хоть возможно они и являются чуть большим углублением в вулкан, чем нужно на первой лекции.
    Про управление памятью: у вас есть серьёзное ограничение на количество выделяемых блоков (к примеру блоков 2048 на 2070S).
    Про вычисления: можно было намекнуть, что мы можем передавать не только матрицы 4х4 но и других размеров, а так же, на сколько помню трёхмерные.

    • @tilir
      @tilir  2 ปีที่แล้ว +1

      Да, про управление памятью это вообще огромная тема. Есть целые библиотеки которые используются практически чтобы упростить управление памятью в вулкане.

  • @sharlodelivron7294
    @sharlodelivron7294 2 ปีที่แล้ว +1

    На 43:43 uniform матрицы умножаются в самом шейдере. Оптимизируют ли как-либо это компиляторы? Мне всегда казалось, что лучше передать предварительно вычисленную матрицу MVP, если есть такая возможность.

    • @tilir
      @tilir  2 ปีที่แล้ว

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

  • @bochkarevartem
    @bochkarevartem 2 ปีที่แล้ว +5

    Как всегда отличная лекция, к сожалению посмотрел далеко не сразу. Оставлю небольшие замечания, чтобы в следующий раз было еще лучше🤓
    0. Про небольшое введение в 3d тут написал уже некий You Tube
    1. Немного из истории пропущено, между glVertex3fv и VBO были еще функции glVertexPointer, со своими нюансами и непонятками)
    2. У меня аж глаз задергался, когда увидел, что мы на каждом кадре делаем glGetUniformLocation()
    3. Вы собираетесь на лету менять код шейдера в процессе исполнения программы? Было и такое - генерация специализированных шейдеров, по описаниям, полученным во время работы программы. Но это, конечно же, исключение)
    4. 51.20 Это не depth-test пройдет, а face-culling отрежет. Depth буффер пишется после успешного прохождения фрагмента, а здесь фрагменты это только линии.
    5. Я не работал еще с Вулканом. Depth-test перенесли до FS? Это же, вроде бы, была оптимизация(Early Fragment Test на сайте хроноса). В вулкане нельзя из фрагментного шейдера менять значение глубины фрагмента?
    6. Ускорение при переносе вычислений на GPU вещь очень тонкая и зависит от многих факторов. В плохом случае можно получить даже замедление)

    • @tilir
      @tilir  2 ปีที่แล้ว +2

      Отличный комментарий, спасибо. Я надеялся что придут люди, которые лучше знают графику -- для меня-то и шейдеры это не код это тесты для компилятора =)
      (0) Я рассматриваю всю эту лекцию как небольшое введение в 3d
      (1) Я думал. Не влезло бы и в наши дни уже, наверное, не слишком актуально. Или ещё используется?
      (2) Упс. Спасибо. Я чего-то тоже это только что осознал. Но, кстати, Дима в его примере так не делает.
      (3) Учитывая specialization constants в SPIRV менять код на лету уже не слишком нужно.
      (4) Я был уверен, что именно depth даёт артефакты. Но для линий наверное да, он не при чём.
      (5) Там как-то сложно. С одной стороны gl_FragDepth всё так же доступен разумеется, GLSL никто не менял. Но с другой стороны depth test действительно идёт раньше. Надо почитать спеку, может ещё разок пересчитывается позднее?
      (6) Да, конечно

    • @bochkarevartem
      @bochkarevartem 2 ปีที่แล้ว

      @@tilir
      1. Ну, на предыдущей моей работе оно до сих пор используется в режиме compatibility profile при некоторых плохих условиях. Просто это неплохой логический переход. В начале веков было так, потом решили сделать glVertexPointer(). Но эта функция весьма магическая и непонятно, что она в реальности делает. И тогда придумали нормальные VBO)
      2. Я бы глянул на код примера, он есть в материалах примера? Но думаю, там все хорошо)
      3. Я делал нечто, что называют functional textures. По описанию штрихованных линий генерировал код фрагментного шейдера, который обычные линии превращает в пунктирные. А так да, ради констант любят шейдеры перекомпилировать.
      5. Думаю, изменение глубины во фрагментном шейдере мало распространено, поэтому обычно тест идет до. Но у программы есть флажок, меняет ли она глубину, и depth-test в таком случае будет работать не до, а после фрагментного шейдера. Но раз в норме он идет до, то на картинках так и указывают.

  • @babichfx
    @babichfx 2 ปีที่แล้ว +2

    Ооочень ждал после анонса!

  • @dmitry6123
    @dmitry6123 2 ปีที่แล้ว +1

    1:40:10
    Дайте угадаю, ускорились за счет UBO рингбуфера? На самом деле на ogl тоже самое можно сделать и не стоит хоронить старичка раньше времени. API оверхед у него конечно больше, но не такой драмматичный как в примере.

    • @tilir
      @tilir  2 ปีที่แล้ว

      Расскажите вкратце как это сделать на opengl, постараюсь улучшить честность сравнения.

    • @dmitry6123
      @dmitry6123 2 ปีที่แล้ว +4

      @@tilirПринцип такой же - пока GPU читает один буфер, пишем в следующий и так по кругу. Кроме того не использовать Buffer|Sub|Data, а мапить единожды содержимое на cpu с флагами persistent и coherent. Здесь главное понять где ogl расставляет имплисит синкпоинты cpu-gpu. Хоть и нет возможности ими управлять, как в Vulkan'е, но контролировать извне их вполне возможно.

  • @Log_in_off
    @Log_in_off 2 ปีที่แล้ว +3

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

    • @АндрейШевелёв-г2щ
      @АндрейШевелёв-г2щ 9 หลายเดือนก่อน

      Алексей Боресков - Программирование компьютерной графики, 2019
      Небольшая, но довольно неплохая книга по введению в компьютерную графику. В книге рассматриваются различные алгоритма и структуры данных, используемых в графике, рассматривается рейтрейсинг, и основы современного opengl.

    • @Log_in_off
      @Log_in_off 9 หลายเดือนก่อน

      @@АндрейШевелёв-г2щ Благодарю за рекомендацию!

  • @redf1sh
    @redf1sh ปีที่แล้ว +1

    Спасибо большое за лекцию! На OpenGL игрался когда-то, тоже рисовал кубы, а вот про Vulkan было очень интересно послушать.
    Если будут ещё доп. семинары по графике, можете осветить тему отрисовки шрифтов? Честно говоря у меня до сих пор нет понимания как рисуются буквы, да ещё и без "лесенок" и прочих артефактов

    • @tilir
      @tilir  ปีที่แล้ว +1

      Я там в конце книжку порекомендовал как раз по этому вопросу. Базовые алгоритмы компьютерной графики очень интересны.

    • @fyfbifvodefin9383
      @fyfbifvodefin9383 ปีที่แล้ว +1

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

  • @skovoroda14
    @skovoroda14 8 วันที่ผ่านมา

    уух, спасибо. Будь у меня такие преподаватели, я бы может быть крудошлепом бы не стал. Вопросы, возможно я пропустил. 1. Поддержка вулкана на видеокартах реализована на уровне драйверов? На старых его не завести? 2. Если уже есть код, который рисует в openGL, передавая в точку рендерера данные вершин и данные для униформ с полной отвязкой в проектировании от внутренностей GL, за исключением разве что последовательностей байтов в текстурах, тяжело ли будет переписаться на вулкан?

  • @Егор-ч7в7ю
    @Егор-ч7в7ю 2 ปีที่แล้ว

    51:19 а разве отображение задних граней не должен face culling отбрасывать, а не depth test?

    • @tilir
      @tilir  2 ปีที่แล้ว

      Ради интереса погуглите z-fighting =)

    • @Егор-ч7в7ю
      @Егор-ч7в7ю 2 ปีที่แล้ว

      @@tilir а это то тут при чем? Тут же не будет двух точек куба, которые при проецировании попадут в один пиксель, с одинаковой глубиной? А на видео видно именно отсечение ребер невидимых граней куба.

  • @pavelrid
    @pavelrid 2 ปีที่แล้ว +1

    Очень здорово и огромная благодарность за лекцию! А исходник примера не доступен для ознакомления?

    • @tilir
      @tilir  2 ปีที่แล้ว +1

      Да я форкнул на свой гитхаб тот снимок с проекта Димы который был актуален на момент записи лекций: github.com/tilir/3d-render-examples ну и там можете перейти в апстрим, работа в процессе.

    • @pavelrid
      @pavelrid 2 ปีที่แล้ว

      @@tilir благодарствую!

  • @КириллЧе-я5ы
    @КириллЧе-я5ы 8 หลายเดือนก่อน

    Glsl ещё и на midl похож своими входными выходными параметрами. Но все же больше на си

  • @azatakhunov6061
    @azatakhunov6061 ปีที่แล้ว +1

    получается что фрагментные шейдеры имеют квадратичную сложность? O(n^2) (не XOR, а степень)
    for(Vertex vert : verticies){
    Fragment[] fragments = getAllNearFragmentsToNextVerticies(vert);
    for(Fragment frag : fragments){
    float[] arr = new float[{0.5}, {0.5}, {0.5 * currentTimeMillis()}, {1.0}];
    frag.setColour(arr)
    }
    }
    Спасибо за лекции! С удовольствием их смотрю все! Сложно немного понимать эти функции... почему бы не сделать их более объектно-ориентированными? API OpenGL'а. Извиняюсь за такой глупый вопрос... Но у меня огромное желание изучать все это. Еще раз спасибо!

    • @tilir
      @tilir  ปีที่แล้ว

      Вы пропустили растеризатор. Он строит по вершинам массив фрагментов и дальше он уже параллелится по фрагментному процессингу.
      Что до API... я вроде на первых же лекциях объясняю почему все нормальные API вынужденно сишные. Дело в манглировании.

    • @azatakhunov6061
      @azatakhunov6061 ปีที่แล้ว

      @@tilir спасибо большое! Сейчас посмотрю.

  • @ea8265
    @ea8265 ปีที่แล้ว

    А по Vulkan-hpp есть доки?

  • @yakryt7228
    @yakryt7228 2 ปีที่แล้ว

    А правильный ответ на вопрос, озвученный в конце лекции, мы узнаем в следующей серии ? :)

    • @tilir
      @tilir  2 ปีที่แล้ว

      Следующая лекция как раз про компьют. А что за вопрос вы имеете в виду?

    • @yakryt7228
      @yakryt7228 2 ปีที่แล้ว

      @@tilir Вопрос про то, на сколько процентов на гпу будет быстрее чем на цпу.
      У меня есть еще один вопрос, не относящейся к данной теме. Я его под лекцией по метапрограммированию написал, но, видимо, у Вас не было оповещения о комментарии или по каким-то причинам оно затерялось. Я тут вопрос продублирую, т.к. как-то иначе не могу дать на него ссылку, если Вас не затруднит, прокомментируйте пожалуйста.
      Вопрос об использовании типов unit32_t, int32_t и им подобных. Вы не рекомендуете использование данных типов, но в c++ core guidelines в разделе Р.5 рекомендуют в похожем случае (th-cam.com/video/UJqW_eEBA6I/w-d-xo.html тайминг по лекции по мете, лекция номер 16) использование именно int32_t. Сможете как-то прокомментировать? Возможно, я что-то не правильно понял.

    • @tilir
      @tilir  2 ปีที่แล้ว +2

      @@yakryt7228 про int32_t я вроде уже отвечал, но я ответил вам в ту ветку. Я не слишком высоко ценю эти самые core guidelines.
      Сравнение производительности GPU и CPU конечно будет на лекции по компьюту. Коротко -- для тех вычислительных задач, для которых GPU подходит, оно в разы лучше. Но оно подходит не для всех задач. Матрицы перемножить -- очень хорошо. А вот что-то другое -- надо смотреть отдельно.

    • @yakryt7228
      @yakryt7228 2 ปีที่แล้ว +1

      ​@@tilir Спасибо и за ответ на тот вопрос, и про вычисления на гпу. Ждем с нетерпением следующей лекции :)

    • @aleonaxel
      @aleonaxel 11 หลายเดือนก่อน

      @@tilir "Я не слишком высоко ценю эти самые core guidelines." А можно с этого места подробнее?)) Их вроде пишут (сами!) Саттер и Страуструп.

  • @bochkarevartem
    @bochkarevartem 2 ปีที่แล้ว

    А теперь проверка ссылки на другое видео:
    th-cam.com/video/J6SNO5o9ADg/w-d-xo.html

    • @bochkarevartem
      @bochkarevartem 2 ปีที่แล้ว

      Комменты с ссылками на godbolt молча удаляются, комменты с ссылками на другие youtube видео выживают)

  • @ИльдарБулатов-т4х
    @ИльдарБулатов-т4х 2 ปีที่แล้ว

    извините, я бы хотел понять, почему не стоит производить вычисления на vulkan api?

    • @tilir
      @tilir  2 ปีที่แล้ว

      Вычисления на vulkan проводить вполне можно. Но не являясь специализированным API для compute, Vulkan для этого является немыслимо тяжёлым выбором.
      9-12 слайды отсюда дают представление о том что хорошо для компьюта и почему: www.iwocl.org/wp-content/uploads/iwocl-syclcon-2020-meyer-11-slides.pdf
      Обычный сценарий компьюта на Вулкане это примерно так: у вас уже есть игра с 3D обработкой и вы дописываете в ту же систему ещё и шейдер для вычислений. Стартовать же на вулкане именно вычислительный проект это странно.

  • @ugn_s
    @ugn_s 9 หลายเดือนก่อน

    Какой у вас опыт в программирование, начиная с любительской лиги ?
    Хочется стать таким же опытным человеком🙄

    • @tilir
      @tilir  9 หลายเดือนก่อน +1

      У меня есть интервью (см. на коммьюнити-вкладке канала) где я рассказываю про свой опыт.

  • @Kirkezz
    @Kirkezz ปีที่แล้ว

    note: 3730

  • @lotierm
    @lotierm 2 ปีที่แล้ว

    Ну блин сколько можно в этих notepad+++ рабоать, кровь с глаз же.

    • @tilir
      @tilir  2 ปีที่แล้ว +1

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

    • @lotierm
      @lotierm 2 ปีที่แล้ว

      @@tilir vs code

  • @defalko6526
    @defalko6526 ปีที่แล้ว

    Разве тут не glGetProgramiv? cpp-graduate/10-3d/ogl-frag-shader . cc:145