Процедурная 3D Графика. Ray Marching Tutorial [ OpenGL / GLSL ]

Поделиться
HTML-код
  • Опубликовано: 20 ноя 2024

Комментарии • 153

  • @kunalamvet
    @kunalamvet 2 года назад +61

    Это. Просто. О...!
    Одно дело развлекаться с рей марчингом, и совершенно другое создавать с его помощью что-то осмысленное.

  • @bro_fedka3951
    @bro_fedka3951 2 года назад +106

    Здравствуйте ! Вы создаёте уникальный канал БЕЗ ВОДЫ !!! СПАСИБО !!!!! Но мне интересно увидеть применение шейдеров на практике (создание игры / программы). На RUclips сейчас очень поверхностный контент и этот канал, как остров по среди океана ! Держите планку !!!

  • @avdim88
    @avdim88 2 года назад +25

    Это просто великолепно!
    Смотреть визуализацию кода в реальном времени - очень круто!

  • @re1elv
    @re1elv 2 года назад +15

    Ничего не понимаю, но мне нравится!

  • @gandrew8102
    @gandrew8102 Год назад +1

    Глаза по-рублю и челюсть на полу ))))))) просто волшебство.........

  • @mark-tin
    @mark-tin 2 года назад +3

    Почему это не в реках если видно человек старается!

  • @МаратЯнгличев-й8н
    @МаратЯнгличев-й8н 2 года назад +3

    Весь ролик смотрится с открытым ртом.. Это вау конечно. Спасибо большое. Записывайте и дальше.

  • @honeybadger256
    @honeybadger256 2 года назад +4

    По превью даже сразу не понятно что это ваше видео. Очень информативно, спасибо!

    • @honeybadger256
      @honeybadger256 2 года назад

      Я про превью, а видео получилось ещё более информативным

  • @Sfinxsx
    @Sfinxsx 2 года назад +12

    Нифига себе "базовые вещи..." Я думал я базовые вещи уже освоил.... Где-то я видимо проскочил этот вопрос, опять заново базу штудировать.....
    p.s. Шикарный материал! Впрочем, как всегда. Это просто волшебство какое-то....

    • @ACclams1e
      @ACclams1e Год назад +1

      Разве это база? База это писать программы используя только лишь бинарный код

  • @Maine__Coon__1
    @Maine__Coon__1 2 года назад +12

    Я б учился у тебя каждый день)

  • @VladKochetov
    @VladKochetov 2 года назад +10

    Спасибо за новое видео! Толко вышло, а уже ставлю лайк, ведь знаю что годно

  • @mark-tin
    @mark-tin 2 года назад +6

    С такими видео постоянно узнаю что то новое!

  • @Maine__Coon__1
    @Maine__Coon__1 2 года назад +8

    Гений 🙂, конечно ждём продолжение, любой ролит крутой нереально, тем более я начинающий, как и многие тут

  • @ДанилЗарипов-ч5ы
    @ДанилЗарипов-ч5ы 2 года назад +3

    Обожаю твои видео! С каждым разом всё интереснее и интереснее. Спасибо за всё.

  • @Gretanit
    @Gretanit 2 года назад +3

    Мне очень интересно к чему можно прийти если еще сильнее дорабатывать и дорабатывать ... Уже получилось красиво!

  • @SirusStarTV
    @SirusStarTV 2 года назад +1

    Почему я подумал что это канал Onigiri, только после открытия видео увидел в рекомендациях видео от Onigiri

  • @NauzRem
    @NauzRem 2 года назад +2

    Шикарно, где-то было видео, где тоже рассматривался реймарчинг, но на него ругались из-за того, что когда много объектов (читай формул) - резко падает производительность. А оказывается, можно просто все в одну формулу объединить

    • @cancent
      @cancent 2 года назад

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

    • @NauzRem
      @NauzRem 2 года назад

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

  • @6556
    @6556 10 месяцев назад

    Очень круто. Спасибо за контент. Еще бы по GLSL туториал бы запилить

  • @Shelep524
    @Shelep524 Год назад +8

    Как по мнению разработчиков Python создают Unreal Engine:

  • @RigidLight
    @RigidLight 2 года назад +2

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

  • @timkiryachek9114
    @timkiryachek9114 2 года назад +2

    Крайне признателен за полезный контент.

  • @bionicman285
    @bionicman285 2 года назад +2

    Как всегда крутяк 😎 спасибо! Да, и про другие техники тоже было бы интересно посмотреть :)

  • @rustamtermenusmack7165
    @rustamtermenusmack7165 2 года назад +4

    Давай дальше про сглаживание, глобальное освещение, программные тени. Очень интересно. Тоже увлекаюсь этой темой!

  • @Yarodash
    @Yarodash 2 года назад +1

    Очень годный канал и видео. Сделал что-то похожее но попроще, ну собственно мне больше и не надо. Шар раскрашенный в цвета нормалей (normal / 2 + 0.5) на фоне шахматной доски с освещением и тенями + msaa 4x + туман вдали + небольшое затемнение по краям объектов... каеф))

  • @Anonim-im6ln
    @Anonim-im6ln 2 года назад +1

    Воу!😲) Дуже цікаво!) Ви молодець!))😁

  • @dmiyan4204
    @dmiyan4204 2 года назад +2

    Спасибо за видео. Очень круто

  • @semseriou9763
    @semseriou9763 2 года назад +2

    Спасибо за видео, очень интересно!

  • @MrYankyfanky
    @MrYankyfanky 2 года назад +2

    Блин! Очень крутой ролик! Давай продолжение!

  • @artromfun
    @artromfun 2 года назад +2

    Очень долго ждали, спасибо!

  • @dancostudio1133
    @dancostudio1133 2 года назад

    Я не против, очень жду следующее видео.

  • @TamerlanSerik-c9h
    @TamerlanSerik-c9h 2 года назад +14

    потрясающе , ваш контент однозначно классный
    но , можете снять ролики по pyglet ? ведь он намного удобнее чем pygame если мы говорим об 3D граффике
    ведь pyglet основан на OpenGL , а pygame на SDL

  • @FXUNDPLXGG
    @FXUNDPLXGG 2 года назад +3

    Ты гениален, респект :)

  • @limesborderline-indiegame995
    @limesborderline-indiegame995 2 года назад

    Спасибо за видео. Конечно такой подход не решает все задачи. Потому что возможно делать только с примитивами. Отказываться от полигонов модели не имеет смысла. Но вот применить такой подход для дополнительного функционала к основному можно. И дало возможность задуматься.

  • @MrMagno-ni5lf
    @MrMagno-ni5lf 2 года назад +2

    Это именно то, что я хотел

  • @vialomur__vialomur5682
    @vialomur__vialomur5682 2 года назад +2

    Вау крутяк спасибо очень интересно!

  • @leshalozhkin
    @leshalozhkin 2 года назад

    Для меня это очень необычно.

  • @ltva8781
    @ltva8781 2 года назад +1

    Одно маленькое замечание: не «демосцена», а «демка» тогда уж. Ну или демонстрация.
    Кстати, советую глянуть демки от Conspiracy, «Clean Slate», например. Там явно много реймаршинга, иначе всё это в 64 кб не впихнуть.

  • @Центрпочвенногоплодородия

    Действительно интересно и познавательно! А вы не проводите частное обучение? Было бы очень интересно разобраться в этой тебе, особенно написание glsl шейдеров и использование их вместе с three.js например. Буду рад ответу по обучению

  • @sM1LE289
    @sM1LE289 5 месяцев назад

    Ваааау, ещё немного и будет как в реальной жизни. И вопрос откуда ты берешь инфу?

  • @beshkekart3909
    @beshkekart3909 2 года назад

    Очень крутой видос. Ждём продолжения!

  • @elnurbda
    @elnurbda 2 года назад

    Офигеть! Большое спасибо за видеоролик!

  • @максКозлов-ф3ш
    @максКозлов-ф3ш 2 года назад +3

    Это ооочень круто, сам смотрю с удовольствием, но понимаю, что тут с моей математикой делать просто нечего (((

    • @ИльдарБулатов-т4х
      @ИльдарБулатов-т4х 2 года назад

      хуйня если знаешь математику хотя бы на уровне 11-го класса, то не сложно добавить знаний будет)

  • @alex.artechtattoo
    @alex.artechtattoo 2 года назад +1

    Огонь! Однозначно топ контент!

  • @ильяесин-х7ш
    @ильяесин-х7ш 2 года назад +1

    Мы почти такое же делали на 2 курсе по компьютерной графике.

  • @user-nb5mg7zk8f
    @user-nb5mg7zk8f 2 года назад +2

    Сними дальше, ооооочень интересно. Кста я так подумал, все объекты там не материальные, что если их сделать непроходимыми и добавить туда хотьбу, как это было сделано в питоновом дууме.

    • @israinddertou5973
      @israinddertou5973 2 года назад

      Ну так можешь сделать и поделиться результатом.

  • @vplotnikov
    @vplotnikov 2 года назад

    Великолепно. Я восхищен

  • @KiraLis39
    @KiraLis39 11 месяцев назад

    Что я только что посмотрел? 0_о
    теперь я знаю, что ни хрена не знаю и не умею в OpenGL...

  • @ex-format
    @ex-format 2 года назад

    Спасибо!)) Паралельно писал на телефоне это же.. ну в общем уже просто на сфере со всеми наворотами ФПС просел адски.. а к пека лень идти. Попробую уже в нормальном шейдере отрисовать потом.

  • @igor6185
    @igor6185 2 года назад

    Очень интересно, и познавательно!

  • @vasylcf
    @vasylcf 2 года назад +1

    Супер !!! Спасибо

  • @darkhunter777
    @darkhunter777 7 месяцев назад +1

    А почему нельзя было просто запехать файлы моделей из блендера ? Для самой сцены важно иметь ТОЛЬКО кисти ландшафтов - для создания простейшего движка и создания файла для хранения обьектов и их координат, взятых из блендера ? И все готово ?

  • @sayochikun3288
    @sayochikun3288 2 года назад

    such a short and informative tutorial. i wish it was english. keeping up with the cc is hard

  • @TheLokomotivbj
    @TheLokomotivbj 2 года назад +1

    Спасибо за видео)

  • @alexdubkov6998
    @alexdubkov6998 2 года назад

    Отлично! Просто шикарно!

  • @dataadvantage1890
    @dataadvantage1890 2 года назад

    Чувак, ты крут!!!

  • @TT0tem4ik22
    @TT0tem4ik22 Год назад +1

    Здраствуйте! У меня ошибка при запуске: на 21 строчке во fragment.glsl использует тип данных int , в функции "sgn" И выводит float , что не даëт запуститься программе

  • @segeus
    @segeus 2 года назад +2

    Можно ли объединять разные типы графики? Например Ray Marching и Voxel графику?

  • @casuale1200
    @casuale1200 2 года назад +1

    Пожалуйста расскажи про шум Перлина и процедурную генерацию, текстурирование.
    Я подписан

  • @kainwarder8841
    @kainwarder8841 2 года назад

    Больше тянок на превью - больше просмотров, дерзай

  • @MagicMightNew
    @MagicMightNew 2 года назад

    Невероятно круто. Стало жаль, что в один момент плюнул на шейдерные языки

  • @DenIndustries
    @DenIndustries Год назад

    Молодец

  • @last8exile
    @last8exile 2 года назад

    Возможно ли на питоне рекомпилить шейдер в рантайме?
    А то без динамической топологии мира как-то ограничено всё.
    Я смог извратится и в Unity сделать частично динамическую топологию. Прокидываю в шейдер структурированный массив фигур, операций над ними и всех параметров. Весь массив является аналогом математического выражения записанного в обратной польской нотации. Каждый вызов Map запускает цикл по массиву, каждую итерацию switch выбирает между функциями фигур и операций. Результаты сэмпла фигур кладутся в стек. Для операций аргументы достаются из стека и результат кладётся в стек. Собственно switch и использование стека идут мимо архитектуры GPU и хоть и работают, но лютейше садят производительность.
    Больше всего мне в рэймарчинге нравится то, что каждый объект может быть идеально гладким кривым зеркалом. И таких зеркал в сцене может быть бесконечность. И все немного разные, и все работают как настоящие зеркала, а не как в играх извращаются с Reflection Probe, Screen Space Reflections и другими. RTX до таких масштабов тоже не годится.

  • @gabrielite5305
    @gabrielite5305 2 года назад

    Saludos de México

  • @akinat0
    @akinat0 2 года назад

    Вот, оч круто!

  • @Gangstar-nd9fm
    @Gangstar-nd9fm Год назад +1

    Привет. Скажи пожалуйста, как также освоить moderngl? Я его использую для своей игры. С горем пополам научился отрисовывать текстуры в 2D. Сейчас хочу научиться 3Д делать и графики рисовать. До этого не имел дел с OpenGL. Как-то вообщене допираю, как это работает. Может надо с другого чего-то начать. Можешь дать пожалуйста ссылки на источники, по которым ты изучал?

  • @jsonmen
    @jsonmen 2 года назад +1

    Сделай видео про DirectPython

  • @VEAGAMES
    @VEAGAMES 2 года назад

    Круто!

  • @dmusiienko
    @dmusiienko 2 года назад

    Интересно

  • @ValeGoG
    @ValeGoG 2 года назад

    10/10

  • @captain_ua
    @captain_ua 2 года назад +4

    Сделай программу с механикой из Scratch, что бы можно было перетягивать плитки и делать так события, на python. Было бы очень интересно.

    • @Dnn324
      @Dnn324 2 года назад +3

      В топ!

    • @ohnocoder
      @ohnocoder 2 года назад +2

      Да, было бы очень круто! Можно сделать конструктор шейдеров!

    • @captain_ua
      @captain_ua 2 года назад

      @@ohnocoder я имел ввиду типа может игру так сделать из блочков, типа визуального программирования.

    • @ohnocoder
      @ohnocoder 2 года назад

      @@captain_ua А какой смысл?

    • @captain_ua
      @captain_ua 2 года назад

      @@ohnocoder смысЛ есть у каждого свой, в этом например что такая программа лично для меня была бы полезна, а так же такого вида программу что бы Scratch на питоне, никто не делал, и автор будет перооткрывателем.

  • @IshuckShow
    @IshuckShow 2 года назад

    Лучший 😍

  • @ДмитрийЯковлев-д6э
    @ДмитрийЯковлев-д6э 2 года назад

    очень круто!!!)))

  • @int_DrBass
    @int_DrBass 2 года назад +1

    А зачем дополнительные телодвижения если родная система координат OpenGL и так имеет точку 0,0 в центре экрана? Просто создать прямоугольник из координат от -1 до 1 по обеим осям и передавать эти координаты из вершинного шейдера во фрагментный. И тогда не будет привязки к разрешению экрана.
    Для чисел формата float обязательно надо использовать f в конце, без нее это double, то есть 1.0f это float, а 1.0 уже double. Может и не будет ошибок, но видеокарты с double работают на порядки медленнее
    А в целом поздравляю, Вы изобрели подход к процедурному моделированию аля Houdini

    • @antonki8
      @antonki8 2 года назад +1

      Привязку к экрану надо всё равно делать, так как надо подсчитать соотношения сторон экрана и поправить одну из осей после нормирования к (-1, 1). Иначе картинка была бы сплющена по оси. В GLSL по дефолту float если не указан литерал у числа с плавающей точкой.

    • @StandaloneCoder
      @StandaloneCoder  2 года назад

      Суффиксы GLSL согласно спецификации 4.6:
      1.0f, 1.0F - float
      1.0lf, 1.0LF - double

  • @Дигидроген
    @Дигидроген 2 года назад +1

    Сделай Майнкрафт на pyglet при помощи OpenGL. Я думаю это всем понравится

  • @红警西湖
    @红警西湖 2 года назад +1

    你好,视频6分20秒处的321倒计时是用glsl实现的吗?
    алло, видео 6: 20 секунд на месте 321 обратного отсчета выполнено с помощью glsl?

  • @hpw-dev
    @hpw-dev 2 года назад

    Нормально))

  • @sergioostanioni5390
    @sergioostanioni5390 2 года назад

    Очень интересно. А можно в этот дворец добавить телевизор? Настоящий телевизор, который что-то показывает. Где подобное применяется? Для игр, так понимаю, есть движки, для 3д моделинга тоже софт есть, а вот в чистом виде, как Вы делаете.

    • @StandaloneCoder
      @StandaloneCoder  2 года назад +1

      Да, добавить можно, телевизор или изображение с камеры. Так ведь движки и софт на основе OpenGL (Vulkan, DirectX, Metal) сделаны

  • @renab5125
    @renab5125 2 года назад +2

    vertex_shader
    =============
    0(4) : error C0000: syntax error, unexpected '(', expecting "::" at token "("
    Подскажите как решить данную проблему?????????

    • @StandaloneCoder
      @StandaloneCoder  2 года назад +1

      В описании есть ссылка на код проекта

  • @Devyatyi9
    @Devyatyi9 2 года назад

    А в этой реализации есть ведь возможносность добавления прозрачности объектам

  • @RuVl_13
    @RuVl_13 2 года назад +1

    Очень понравилось ваше видео, но когда пытался повторить, у меня не появляются тени (7:22), хотя делаю всё в точности как на видео. Помогите пожалуйста!

    • @StandaloneCoder
      @StandaloneCoder  2 года назад +1

      странно, а попробуйте реализовать тени так, как сделано в следующей части - ruclips.net/video/2fcO9RUOGg4/видео.html

  • @engineer.s
    @engineer.s 2 года назад

    Ну нифига себе

  • @Collapse640
    @Collapse640 2 года назад +1

    а покажи это ещё и с применением параллакса или же применением нормал мап (короче чтобы сгенерированная текстура была выпуклой )

  • @РоманКруглов-и8в
    @РоманКруглов-и8в 2 года назад +1

    когда подключил библиотеку с sdf функиями сразу заругалось что одна из функций возвращает значение другого типа... как это исправить? чтобы если функция возвращает float, а после return стоит целое число, то это число преобразовалось бы в нужный тип float?
    moderngl.error.Error: GLSL Compiler failed
    fragment_shader
    ===============
    0:189(2): error: `return' with wrong type int, in function `sgn' returning float

    • @TT0tem4ik22
      @TT0tem4ik22 Год назад +1

      Также самая проблема в функции fOpUnionID

  • @exuler525
    @exuler525 2 года назад

    как реализовать soft min функцию в вашем ray marching'е

  • @DimPerch
    @DimPerch 2 года назад +1

    Не удалось запустить(
    fragment_shader
    ===============
    ERROR: 0:727: 'pMod1' : no matching overloaded function found (using implicit conversion)
    ERROR: 0:727: 'pMod1' : function is not known

    • @Shayth-
      @Shayth- 2 года назад

      Точно такая же ошибка с этой функцией(
      Её можно убрать из кода, но в таком случае в готовом рендере не будет этих арок. Есть какой-то способ заменить эту функцию?

  • @falongor6836
    @falongor6836 2 года назад

    Можно теперь другие темы?

  • @segeus
    @segeus 2 года назад +1

    Можно ли реализовать это на C++? Что на счёт Unreal Engine?

    • @StandaloneCoder
      @StandaloneCoder  2 года назад +1

      Язык может быть какой угодно, просто нужен модуль для работы с OpenGL. А шейдеры все равно писать будете на GLSL независимо от используемого языка (C++, C#, Python, Java и т.п.)

  • @dabll0236
    @dabll0236 2 года назад +1

    Насколько openGl все еще держит планку в качестве граф. библы? Много кто говорит, что vulkan просто не оставляет шансов openGl

    • @StandaloneCoder
      @StandaloneCoder  2 года назад +3

      Тут в основном же шейдер программировали, он будет тот же что для OpenGL, что и для Vulkan

  • @Дигидроген
    @Дигидроген 2 года назад

    Что на счёт чего-то более знакомого? Pyglet?

  • @qazwsxertyuhg2875
    @qazwsxertyuhg2875 2 года назад

    здравствуйте, супер видео. а как вы изучали OpenGl? Может быть есть какие то ресурсы для этого?

    • @StandaloneCoder
      @StandaloneCoder  2 года назад +1

      Ресурсов много в сети, только старые уроки не смотрите, нужно направление - современный (modern) OpenGL, это про программируемый конвейер

  • @guysures125
    @guysures125 2 года назад

    ЕЕЕЕЕ быстро подписался

  • @valera_kardan
    @valera_kardan 2 года назад +2

    Что меньше ресурсов жрёт это или классическая графика?

    • @DenisTrebushnikov
      @DenisTrebushnikov 2 года назад +2

      Для чистоты эксперимента: в анриле создай сто сфер с материалом бетона (цвет, спекулар, рафнес, дисплейсмент или эмбиент окклюжн, и карта нормалей - стандарт, в общем), через консольные команды stat unit и stat rhi открой статистику, чтобы посмотреть, сколько занимает отрисовка на CPU и GPU... а затем попробуй воссоздать дисплейсмент, рафнес и спекулар текстуры через нойз ноду. Касательно очевидного вывода увеличения времени на обработку кадра на CPU и почти неизменного времени GPU мы можем сказать, что классическая графика жрет меньше при большом количестве объектов в сцене, но все шейдеры с G-buffer (PBR) все равно напиcаны на glsl или hlsl. именно для отдельных элементов (понтовых vfx) и срезают полигоны и размер текстур.

    • @valera_kardan
      @valera_kardan 2 года назад

      @@DenisTrebushnikov Спасибо

  • @user20213A
    @user20213A 2 года назад +1

    Привет, как думаешь, есть смысл учить openGL или сразу начинать учить Vulkan? Говорят, что многие компании отказываются от использования openGL

    • @StandaloneCoder
      @StandaloneCoder  2 года назад +1

      OpenGL более прост в изучении, чем Vulkan, хорошо изучать его как для старта. Тем более шейдеры на том же GLSL пишутся как в Вулкане, так и в OpenGL

    • @user20213A
      @user20213A 2 года назад

      @@StandaloneCoder спасибо, ещё вопрос. Большинство уроков по openGL на c++, но я пишу на Java, по сути ведь не должно быть разницы синтаксиса в openGL в обертках на разные языки, ведь это одна и та же библиотека?

    • @StandaloneCoder
      @StandaloneCoder  2 года назад

      @@user20213A большой разницы не будет, везде суть одна и та же - создание контекста, VAO, VBO, шейдеры

    • @user20213A
      @user20213A 2 года назад

      @@StandaloneCoder спасибо, не подскажешь ресурсы для изучения актуальной информации, я вот как раз на первом курсе подтянул знания по линалу и ангему, думаю должно хватить знаний вышмата

    • @StandaloneCoder
      @StandaloneCoder  2 года назад

      @@user20213A да, знаний в объеме первого курса техвуза вполне достаточно. Ресурсов много, тот же learnopengl вполне хорош

  • @clashes4d34
    @clashes4d34 2 года назад

    wow

  • @АбдурахмонНугманов

    Послушай!откуда ты такие крутые модули находишь?

  • @zener_blitz
    @zener_blitz 2 года назад +1

    Старая озвучка была круче!

  • @denbiggy3835
    @denbiggy3835 2 года назад

    Интересно, насколько ресурсоёмкий данный подход?

    • @StandaloneCoder
      @StandaloneCoder  2 года назад

      Интегированная графика в Ryzen7 5800h выдает 70 fps

  • @aargh95
    @aargh95 2 года назад

    Где голос Максим ☹️

  • @MAKSOS_91
    @MAKSOS_91 2 года назад

    Ламберт ламберт хер моржовый, ламберт ламберт вредный х… вспомнилось, так по какой там системе вы говорите, Ламберта?)

  • @johnstarfire
    @johnstarfire 2 года назад

    When in english?