Процедурная 3D Графика. Ray Marching Tutorial [ OpenGL / GLSL ]
HTML-код
- Опубликовано: 7 фев 2025
- Это Туториал по созданию процедурной 3D графики при использовании техники трассировки сфер - Ray Marching. В реализации используется библиотека ModernGL для языка Python, а вся работа ведется с OpenGL путем написания фрагментного шейдера GLSL
Ссылка на файл с SDF функциями:
mercury.sexy/hg...
Код проекта:
github.com/Sta...
Inigo Quilez (Полезное по Ray Marching`у):
iquilezles.org...
#standalonecoder
Это. Просто. О...!
Одно дело развлекаться с рей марчингом, и совершенно другое создавать с его помощью что-то осмысленное.
Здравствуйте ! Вы создаёте уникальный канал БЕЗ ВОДЫ !!! СПАСИБО !!!!! Но мне интересно увидеть применение шейдеров на практике (создание игры / программы). На RUclips сейчас очень поверхностный контент и этот канал, как остров по среди океана ! Держите планку !!!
Это просто великолепно!
Смотреть визуализацию кода в реальном времени - очень круто!
Нифига себе "базовые вещи..." Я думал я базовые вещи уже освоил.... Где-то я видимо проскочил этот вопрос, опять заново базу штудировать.....
p.s. Шикарный материал! Впрочем, как всегда. Это просто волшебство какое-то....
Разве это база? База это писать программы используя только лишь бинарный код
Ничего не понимаю, но мне нравится!
По превью даже сразу не понятно что это ваше видео. Очень информативно, спасибо!
Я про превью, а видео получилось ещё более информативным
Спасибо за новое видео! Толко вышло, а уже ставлю лайк, ведь знаю что годно
Весь ролик смотрится с открытым ртом.. Это вау конечно. Спасибо большое. Записывайте и дальше.
Почему это не в реках если видно человек старается!
С такими видео постоянно узнаю что то новое!
Обожаю твои видео! С каждым разом всё интереснее и интереснее. Спасибо за всё.
Глаза по-рублю и челюсть на полу ))))))) просто волшебство.........
Гений 🙂, конечно ждём продолжение, любой ролит крутой нереально, тем более я начинающий, как и многие тут
Шикарно, где-то было видео, где тоже рассматривался реймарчинг, но на него ругались из-за того, что когда много объектов (читай формул) - резко падает производительность. А оказывается, можно просто все в одну формулу объединить
тоесть, при таком способе можно делать тяжелые игры при минимальной нагрузке пк? или полигональная графа производительней?
@@cancent полигональная производительнее, хотя бы потому что видеокарты заточены под обсчет полигонов. Сейчас рейкастинг внедряют, так что может быть в ближайшие годы станет как минимум не бесполезно
Очень долго ждали, спасибо!
Отличнейшая подача материала, спасибо. Будем ждать следующих выпусков, в том числе про обозначенные в конце ролика фишки.
Крайне признателен за полезный контент.
Мне очень интересно к чему можно прийти если еще сильнее дорабатывать и дорабатывать ... Уже получилось красиво!
Я б учился у тебя каждый день)
Воу!😲) Дуже цікаво!) Ви молодець!))😁
Как всегда крутяк 😎 спасибо! Да, и про другие техники тоже было бы интересно посмотреть :)
Блин! Очень крутой ролик! Давай продолжение!
Ты гениален, респект :)
Спасибо за видео. Очень круто
Очень годный канал и видео. Сделал что-то похожее но попроще, ну собственно мне больше и не надо. Шар раскрашенный в цвета нормалей (normal / 2 + 0.5) на фоне шахматной доски с освещением и тенями + msaa 4x + туман вдали + небольшое затемнение по краям объектов... каеф))
Спасибо за видео, очень интересно!
Как по мнению разработчиков Python создают Unreal Engine:
Давай дальше про сглаживание, глобальное освещение, программные тени. Очень интересно. Тоже увлекаюсь этой темой!
Очень круто. Спасибо за контент. Еще бы по GLSL туториал бы запилить
Вау крутяк спасибо очень интересно!
Огонь! Однозначно топ контент!
Почему я подумал что это канал Onigiri, только после открытия видео увидел в рекомендациях видео от Onigiri
Очень крутой видос. Ждём продолжения!
Офигеть! Большое спасибо за видеоролик!
Это именно то, что я хотел
Я не против, очень жду следующее видео.
я сделал также только на сфмл без шейдеров, люто лагало, теперь буду шейдеры учить
Великолепно. Я восхищен
Отлично! Просто шикарно!
потрясающе , ваш контент однозначно классный
но , можете снять ролики по pyglet ? ведь он намного удобнее чем pygame если мы говорим об 3D граффике
ведь pyglet основан на OpenGL , а pygame на SDL
Очень интересно, и познавательно!
Супер !!! Спасибо
Для меня это очень необычно.
Одно маленькое замечание: не «демосцена», а «демка» тогда уж. Ну или демонстрация.
Кстати, советую глянуть демки от Conspiracy, «Clean Slate», например. Там явно много реймаршинга, иначе всё это в 64 кб не впихнуть.
Спасибо за видео. Конечно такой подход не решает все задачи. Потому что возможно делать только с примитивами. Отказываться от полигонов модели не имеет смысла. Но вот применить такой подход для дополнительного функционала к основному можно. И дало возможность задуматься.
Спасибо за видео)
Ваааау, ещё немного и будет как в реальной жизни. И вопрос откуда ты берешь инфу?
Чувак, ты крут!!!
Спасибо!)) Паралельно писал на телефоне это же.. ну в общем уже просто на сфере со всеми наворотами ФПС просел адски.. а к пека лень идти. Попробую уже в нормальном шейдере отрисовать потом.
Сними дальше, ооооочень интересно. Кста я так подумал, все объекты там не материальные, что если их сделать непроходимыми и добавить туда хотьбу, как это было сделано в питоновом дууме.
Ну так можешь сделать и поделиться результатом.
Вот, оч круто!
Мы почти такое же делали на 2 курсе по компьютерной графике.
Это ооочень круто, сам смотрю с удовольствием, но понимаю, что тут с моей математикой делать просто нечего (((
хуйня если знаешь математику хотя бы на уровне 11-го класса, то не сложно добавить знаний будет)
Лучший 😍
очень круто!!!)))
Что я только что посмотрел? 0_о
теперь я знаю, что ни хрена не знаю и не умею в OpenGL...
Круто!
such a short and informative tutorial. i wish it was english. keeping up with the cc is hard
Здраствуйте! У меня ошибка при запуске: на 21 строчке во fragment.glsl использует тип данных int , в функции "sgn" И выводит float , что не даëт запуститься программе
Действительно интересно и познавательно! А вы не проводите частное обучение? Было бы очень интересно разобраться в этой тебе, особенно написание glsl шейдеров и использование их вместе с three.js например. Буду рад ответу по обучению
Молодец
А почему нельзя было просто запехать файлы моделей из блендера ? Для самой сцены важно иметь ТОЛЬКО кисти ландшафтов - для создания простейшего движка и создания файла для хранения обьектов и их координат, взятых из блендера ? И все готово ?
Можно ли объединять разные типы графики? Например Ray Marching и Voxel графику?
10/10
Интересно
Нормально))
Saludos de México
Пожалуйста расскажи про шум Перлина и процедурную генерацию, текстурирование.
Я подписан
Сделай Майнкрафт на pyglet при помощи OpenGL. Я думаю это всем понравится
ЕЕЕЕЕ быстро подписался
А зачем дополнительные телодвижения если родная система координат OpenGL и так имеет точку 0,0 в центре экрана? Просто создать прямоугольник из координат от -1 до 1 по обеим осям и передавать эти координаты из вершинного шейдера во фрагментный. И тогда не будет привязки к разрешению экрана.
Для чисел формата float обязательно надо использовать f в конце, без нее это double, то есть 1.0f это float, а 1.0 уже double. Может и не будет ошибок, но видеокарты с double работают на порядки медленнее
А в целом поздравляю, Вы изобрели подход к процедурному моделированию аля Houdini
Привязку к экрану надо всё равно делать, так как надо подсчитать соотношения сторон экрана и поправить одну из осей после нормирования к (-1, 1). Иначе картинка была бы сплющена по оси. В GLSL по дефолту float если не указан литерал у числа с плавающей точкой.
Суффиксы GLSL согласно спецификации 4.6:
1.0f, 1.0F - float
1.0lf, 1.0LF - double
Привет. Скажи пожалуйста, как также освоить moderngl? Я его использую для своей игры. С горем пополам научился отрисовывать текстуры в 2D. Сейчас хочу научиться 3Д делать и графики рисовать. До этого не имел дел с OpenGL. Как-то вообщене допираю, как это работает. Может надо с другого чего-то начать. Можешь дать пожалуйста ссылки на источники, по которым ты изучал?
Ну нифига себе
Невероятно круто. Стало жаль, что в один момент плюнул на шейдерные языки
когда подключил библиотеку с 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
Также самая проблема в функции fOpUnionID
vertex_shader
=============
0(4) : error C0000: syntax error, unexpected '(', expecting "::" at token "("
Подскажите как решить данную проблему?????????
В описании есть ссылка на код проекта
Возможно ли на питоне рекомпилить шейдер в рантайме?
А то без динамической топологии мира как-то ограничено всё.
Я смог извратится и в Unity сделать частично динамическую топологию. Прокидываю в шейдер структурированный массив фигур, операций над ними и всех параметров. Весь массив является аналогом математического выражения записанного в обратной польской нотации. Каждый вызов Map запускает цикл по массиву, каждую итерацию switch выбирает между функциями фигур и операций. Результаты сэмпла фигур кладутся в стек. Для операций аргументы достаются из стека и результат кладётся в стек. Собственно switch и использование стека идут мимо архитектуры GPU и хоть и работают, но лютейше садят производительность.
Больше всего мне в рэймарчинге нравится то, что каждый объект может быть идеально гладким кривым зеркалом. И таких зеркал в сцене может быть бесконечность. И все немного разные, и все работают как настоящие зеркала, а не как в играх извращаются с Reflection Probe, Screen Space Reflections и другими. RTX до таких масштабов тоже не годится.
Больше тянок на превью - больше просмотров, дерзай
Очень понравилось ваше видео, но когда пытался повторить, у меня не появляются тени (7:22), хотя делаю всё в точности как на видео. Помогите пожалуйста!
странно, а попробуйте реализовать тени так, как сделано в следующей части - ruclips.net/video/2fcO9RUOGg4/видео.html
А в этой реализации есть ведь возможносность добавления прозрачности объектам
Не удалось запустить(
fragment_shader
===============
ERROR: 0:727: 'pMod1' : no matching overloaded function found (using implicit conversion)
ERROR: 0:727: 'pMod1' : function is not known
Точно такая же ошибка с этой функцией(
Её можно убрать из кода, но в таком случае в готовом рендере не будет этих арок. Есть какой-то способ заменить эту функцию?
а покажи это ещё и с применением параллакса или же применением нормал мап (короче чтобы сгенерированная текстура была выпуклой )
как реализовать soft min функцию в вашем ray marching'е
Сделай видео про DirectPython
wow
Насколько openGl все еще держит планку в качестве граф. библы? Много кто говорит, что vulkan просто не оставляет шансов openGl
Тут в основном же шейдер программировали, он будет тот же что для OpenGL, что и для Vulkan
你好,视频6分20秒处的321倒计时是用glsl实现的吗?
алло, видео 6: 20 секунд на месте 321 обратного отсчета выполнено с помощью glsl?
不
Очень интересно. А можно в этот дворец добавить телевизор? Настоящий телевизор, который что-то показывает. Где подобное применяется? Для игр, так понимаю, есть движки, для 3д моделинга тоже софт есть, а вот в чистом виде, как Вы делаете.
Да, добавить можно, телевизор или изображение с камеры. Так ведь движки и софт на основе OpenGL (Vulkan, DirectX, Metal) сделаны
Можно теперь другие темы?
Что на счёт чего-то более знакомого? Pyglet?
Можно ли реализовать это на C++? Что на счёт Unreal Engine?
Язык может быть какой угодно, просто нужен модуль для работы с OpenGL. А шейдеры все равно писать будете на GLSL независимо от используемого языка (C++, C#, Python, Java и т.п.)
ошибка в первой же строке import moderngl_window as mglw - "unsupported operand type(s) for |: 'type' and 'NoneType'"
ggw убил два часа времени чтобы разобраться в чем проблема... в библиотеке moderngl_window в файлах scene\mesh и node исправил строки self, view_matrix: glm.mat4, bbox_min: "glm.vec3 | None", bbox_max: "glm.vec3 | None" и соответственно self, view_matrix: "glm.mat4", bbox_min: "glm.vec3 | None", bbox_max: "glm.vec3 | None" без кавычек не работает. Далее в main функция не render а on_render.
Что меньше ресурсов жрёт это или классическая графика?
Для чистоты эксперимента: в анриле создай сто сфер с материалом бетона (цвет, спекулар, рафнес, дисплейсмент или эмбиент окклюжн, и карта нормалей - стандарт, в общем), через консольные команды stat unit и stat rhi открой статистику, чтобы посмотреть, сколько занимает отрисовка на CPU и GPU... а затем попробуй воссоздать дисплейсмент, рафнес и спекулар текстуры через нойз ноду. Касательно очевидного вывода увеличения времени на обработку кадра на CPU и почти неизменного времени GPU мы можем сказать, что классическая графика жрет меньше при большом количестве объектов в сцене, но все шейдеры с G-buffer (PBR) все равно напиcаны на glsl или hlsl. именно для отдельных элементов (понтовых vfx) и срезают полигоны и размер текстур.
@@DenisTrebushnikov Спасибо
Привет, как думаешь, есть смысл учить openGL или сразу начинать учить Vulkan? Говорят, что многие компании отказываются от использования openGL
OpenGL более прост в изучении, чем Vulkan, хорошо изучать его как для старта. Тем более шейдеры на том же GLSL пишутся как в Вулкане, так и в OpenGL
@@StandaloneCoder спасибо, ещё вопрос. Большинство уроков по openGL на c++, но я пишу на Java, по сути ведь не должно быть разницы синтаксиса в openGL в обертках на разные языки, ведь это одна и та же библиотека?
@@user20213A большой разницы не будет, везде суть одна и та же - создание контекста, VAO, VBO, шейдеры
@@StandaloneCoder спасибо, не подскажешь ресурсы для изучения актуальной информации, я вот как раз на первом курсе подтянул знания по линалу и ангему, думаю должно хватить знаний вышмата
@@user20213A да, знаний в объеме первого курса техвуза вполне достаточно. Ресурсов много, тот же learnopengl вполне хорош
Послушай!откуда ты такие крутые модули находишь?
здравствуйте, супер видео. а как вы изучали OpenGl? Может быть есть какие то ресурсы для этого?
Ресурсов много в сети, только старые уроки не смотрите, нужно направление - современный (modern) OpenGL, это про программируемый конвейер
Интересно, насколько ресурсоёмкий данный подход?
Интегированная графика в Ryzen7 5800h выдает 70 fps
Где голос Максим ☹️
каким образом он создал игровой движок на пайтоне за 16 минут?
Старая озвучка была круче!