Автор Тема: Рейтрейсер для анимации на GPU.  (Прочитано 26847 раз)

Оффлайн Samovar

  • Житель
Re: Рейтрейсер для анимации на GPU.
« Ответ #150 : 07 Август 2016, 21:18:45 »
Ага, вот ссылка:
https://triplepointfive.github.io/ogltutor/
ну и вот:
http://pmg.org.ru/nehe/
Не, малёха не то, но тоже нужно...
Вот по GLSL инфа:
http://masandilov.ru/glsl/
https://www.opengl.org/documentation/glsl/


Кто-то уже что-то пытался...https://code.google.com/archive/p/glsl-raytracer/downloads
Но, чую, врубаться придётся долго :)
« Последнее редактирование: 07 Август 2016, 21:31:14 от Samovar »

Оффлайн LanuHum

  • Житель
Re: Рейтрейсер для анимации на GPU.
« Ответ #151 : 07 Август 2016, 23:06:53 »
Цитировать
Кто-то уже что-то пытался...https://code.google.com/archive/p/glsl-raytracer/downloads
Это очень даже хорошо. Я собрал этот рэйтрэйсер. У нас, можно сказать, уже почти всё есть для изучения языка GLSL.
Оно, правда для винды написано, ибо файл сборки только для VisualStudio. Пришлось потренироваться писать CMakeLists.txt, чтобы собрать в линуксе. SDL глючит, не закрывает окно, приходится процесс убивать из консоли.
Но суть такова: рядом с бинарником должен располагаться текстовой файл rt.frag с кодом GLSL. Он есть, но его теперь можно редактировать, изучая результаты сразу, запуская программу.
Вот такая вот анимация крутится, в заголовке окна показывает FPS. На момент снимка было 60.

Оффлайн Samovar

  • Житель
Re: Рейтрейсер для анимации на GPU.
« Ответ #152 : 08 Август 2016, 00:18:19 »
Круто! Я его пока не победил, хотя пытался :) Завтра попробую разобраться...
Тем не менее, мне удалось записать последовательность .png с помощью BGE и без Python. Просто надо в файле указать шаблон нумерации с помощью символов решётка "#", и связать сенсоры с актуаторами как на картинке вложения. Скорость упала примерно раза 2, но у меня ЖД медленный старенький сейчас... Регулировать можно регулируя Refresh Rate в панели рендера и задавая во втором актуаторе Always количество пропущенных кадров. Может кому-то пригодится.
ПС: если цеплять к одному актуатору Always, последовательность не пишется, или скорость падает в десятки раз... Не знаю почему так  ???  Формат файла зависит от формата изображения в которое рендерит анимацию Интернал. Т.е. можно и в .exr, и в .jpg, и в .bmp, и т.п. картинки рендерить...
« Последнее редактирование: 08 Август 2016, 01:00:58 от Samovar »

Оффлайн LanuHum

  • Житель
Re: Рейтрейсер для анимации на GPU.
« Ответ #153 : 08 Август 2016, 17:50:55 »
Цитировать
Тем не менее, мне удалось записать последовательность .png с помощью BGE и без Python.
Очень хочется посмотреть, как ты без Python будешь помещать в сцену объекты и присваивать им шейдеры. Я, честно сказать, ничего не знаю про актуаторы, ибо никогда не интересовался движком BGE, но, когда увижу как у тебя вместо кубика в этой сцене будет ходить зеркальный человек в реалтайме, то актуаторы станут для меня смыслом жизни... :)

Оффлайн Samovar

  • Житель
Re: Рейтрейсер для анимации на GPU.
« Ответ #154 : 08 Август 2016, 19:17:23 »
Ты спросил, я ответил...
Ещё по теме...
Чтоб отбить интерес к GLSL https://habrahabr.ru/post/96122/
https://www.youtube.com/watch?v=eef9EgOpBh4 ссылка на исходники под видео.
Всё это дело достаточно  прикольно работает с математическими поверхностями
http://fractalus.ru
Песочница http://glslsandbox.com/e#20839.4


Но конечно, возник вопрос про рендер полигональных объектов
http://www.gamedev.ru/code/forum/?id=166798
вот ссылки оттуда:

http://www.clockworkcoders.com/oglsl/rt/  - исходники и документация в комплекте
тут, тоже интересно: http://courses.graphicon.ru/main/cg/2011/assigns/4
ещё http://www.cs.princeton.edu/courses/archive/spr16/cos426/precepts/p06-glsl.pdf

Оффлайн LanuHum

  • Житель
Re: Рейтрейсер для анимации на GPU.
« Ответ #155 : 08 Август 2016, 19:38:49 »
Цитировать
Чтоб отбить интерес к GLSL
Дело в том, что эту игрушку всё же можно реализовать, написав простой аддон, как мне кажется. Я уже прикручивал PySide к Блендеру, но тогда это было для других целей, я писал редактор карт цвета для Поврея.
Вот пример: слева окно опенгл, справа результат рендера. В примере, правда, нужно вводить размер выходного изображения, но, это можно и автоматизировать. Как видишь, можно получить любой размер ничего не растопыривая на весь экран.
Надо попробовать ту демосцену с GLSL в блендере перенести, заменив шестереньки, посмотреть, получится ли...

Цитировать
Но конечно, возник вопрос про рендер полигональных объектов
Как видишь, в сцене полигональные объекты - шестереньки. Другой вопрос: я не вижу нигде в ссылках стекла с преломлением.
Но, для этого есть наложение одного изображения на другое...текстуры окружения и так далее...

Оффлайн Samovar

  • Житель
Re: Рейтрейсер для анимации на GPU.
« Ответ #156 : 08 Август 2016, 21:09:40 »
Ещё один OpenGL рейтрейсер в копилку
https://www.youtube.com/watch?v=ycSOnGzbNO4
https://github.com/StanEpp/OpenGL_Raytracing

Оффлайн LanuHum

  • Житель
Re: Рейтрейсер для анимации на GPU.
« Ответ #157 : 08 Август 2016, 21:25:44 »
Ещё один OpenGL рейтрейсер в копилку
https://www.youtube.com/watch?v=ycSOnGzbNO4
https://github.com/StanEpp/OpenGL_Raytracing
Вторая ссылка интересная. Там используется в винде окно GLFW3. Я этим уже давно интересуюсь. GLFW3 - это продвинутая альтернатива FreeGlut. FreeGlut - морально устарел, давно заброшен. GLFW3 поддерживает версии OpenGL - 4.x

Оффлайн Samovar

  • Житель
Re: Рейтрейсер для анимации на GPU.
« Ответ #158 : 08 Август 2016, 22:44:14 »
В общем, полно этих рейтрейсеров с исходниками. Бери любой и ковыряй, если хочется.

Оффлайн Samovar

  • Житель
Re: Рейтрейсер для анимации на GPU.
« Ответ #159 : 09 Август 2016, 21:24:11 »
Ланухумыч, я нашел  цикл лекций по компьютерной графике на русском. Ранее мне попадались только на английском.
Думаю, полезно будет посмотреть весь курс, если есть желание вникнуть серьёзно.
https://www.lektorium.tv/lecture/13345
Конкретно по трассировке лучей:
Лекция 8 | Компьютерная графика | Виталий Галинский | Лекториум
https://www.youtube.com/watch?v=CKyiXdxXwbE
материалы лекции в формате .ppt https://www.lektorium.tv/sites/lektorium.tv/files/additional_files/20111106_computer_graphics_galinsky_lecture08_tracing.ppt
« Последнее редактирование: 09 Август 2016, 21:48:26 от Samovar »

Оффлайн LanuHum

  • Житель
Re: Рейтрейсер для анимации на GPU.
« Ответ #160 : 10 Август 2016, 17:07:04 »
В общем, возвращаемся к своим баранам.
Инфы предостаточно, знать бы ещё, насколько она конструктивна.
Первая непонятка, с которой я столкнулся - это kd-tree или octree?
На русскоязычном ресурсе написано:
Цитировать
Oc-tree
Забудьте про это, октодерево неэффективно и сложно. Вот тут приводится сравнение множества статей по тваверсу октодеревьев http://tog.acm.org/resources/RTNews/html/rtnv12n2.html#art4.
Это тут:
http://ray-tracing.ru/articles183.html
Сразу хочется не верить! И не очень хочется сравнивать самостоятельно.
Ибо, мы все знаем, что интернал использует octree, и Art of Illusion использует octree. Вероятно, авторы рабочих программ чего-то не дочитали, и написали неэффективный код, а теоретики знают, как делать эффективно, но подтвердить это работающим кодом не спешат уже лет пятнадцать - двадцать. :)
Так что, всё же придётся самостоятельно проверить kd-tree или octree, или что-то другое?
« Последнее редактирование: 10 Август 2016, 17:13:04 от LanuHum »

Оффлайн Samovar

  • Житель
Re: Рейтрейсер для анимации на GPU.
« Ответ #161 : 10 Август 2016, 18:59:23 »
Интернал и Суслик сейчас используют BVH. http://ray-tracing.ru/articles184.html
Вроде, пишут, что это эффективнее ... ...
Но я б на твоём месте на это сильно пока не заморачивался, а пытался врубиться и изобразить алгоритм трассировки лучей программно прежде... потом можно эти алгоритмы организации объектов в памяти внедрить в код...
« Последнее редактирование: 10 Август 2016, 19:57:29 от Samovar »

Оффлайн Samovar

  • Житель
Re: Рейтрейсер для анимации на GPU.
« Ответ #162 : 10 Август 2016, 21:59:52 »
Или напиши рейтрейсер на Python вначале, в котором ты хорошо соображаешь, чтобы самому понять основные принципы. Потом перепишешь на С++. Думаю, это на данный момент самая верная стратегия...
З.Ы. я тут вычитал, что под GPU рекурсивные вызовы функции сделать проблематично, поэтому вместо рекурсий используют циклы... Теперь понятно почему Суслик называется Сусликом :)

Оффлайн Samovar

  • Житель
Re: Рейтрейсер для анимации на GPU.
« Ответ #163 : 11 Август 2016, 09:14:35 »
:) Простой рейтрейсер на Python https://gist.github.com/sevko/c3ed2430e96b89dd3177
:) Рейтрейсер на JavaScript https://habrahabr.ru/post/112944/

Оффлайн LanuHum

  • Житель
Re: Рейтрейсер для анимации на GPU.
« Ответ #164 : 14 Август 2016, 21:15:45 »
:) Простой рейтрейсер на Python https://gist.github.com/sevko/c3ed2430e96b89dd3177
:) Рейтрейсер на JavaScript https://habrahabr.ru/post/112944/
Да, насмотрелся я уже на все эти рейтрейсеры. Отчасти, начал понимать тех, кто начал и не дописал. Какое же всё глючное! Я не про коды рейтрейсеров, а про тулкиты и всякие либы, которые, якобы, можно использовать для серьёзных проектов. SDL - виснет. Qt ошибки сегментирования выдаёт на ровном месте: сменил положение камеры, вместо пяти, в примере, поставил 10 - ошибка сегментирования. Как камеру анимировать? С Qt проблемы и раньше встречал, но, думал, случайно, нет - это закон. Наверное, поэтому и нет ни одного, хоть самого простого, но без глюков, трёхмерного редактора на Qt. Собрал OpenGL-raytracer на GLFW3 - чёрное окно. Я эти шейдеры два дня прикручивал, выискивая пути с обратными слешами, а оно, раз, и глюк. Qt-creator - г... создал проект, сборка не находит инклудов, в CodeBlock мне не удалось собрать ни одного проекта, написанных для CodeBlock. Разумеется, это всё каким-то замысловатым образом решается грамотными программистами, но нах это предлагать новичкам, если оно не готово работать из коробки - х.з.
Samovar, не давай мне больше ссылок, не сбивай меня с курса. Я решил портировать уже готовый код на Джаве, я уже говорил, и я это сделаю. Сегодня я понял принцип портирования кода, врубился, и, буду писать...
Интересно, но все мои эксперименты с libFOX не выдали ни одного глюка. Поэтому, и примеров не найти. Видать, профи юзают, а чтоб следы запутать пишут на Qt примеры. :) :) :)
Python я похерил из-за GIL. Он не даёт возможности использовать параллельные вычисления, используя все ядра проца. Там есть какой-то бубен, в который можно постучать, но шаманизм меня уже утомил, пусть там Кастанеда разбирается :) :) :)
Java и все вытекающие из этого последствия - не для компьютерной графики твёрдо. Это для такой вот херни, и не больше:
http://startandroid.ru/ru/uroki/vse-uroki-spiskom.html
« Последнее редактирование: 14 Август 2016, 21:23:51 от LanuHum »

 


Яметрика

* По форуму

* Рекламный блок

* Последние вложения

1 (1).png
Скачано: 89
Автор: LEXA ANЭGROWND
blender.png
Скачано: 96
Автор: ipv2007
4.png
Скачано: 127
Автор: hiroyukiss
2.png
Скачано: 146
Автор: hiroyukiss

Скачано: 156
Автор: Dilifa12