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