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

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн LanuHum

  • Житель
Рейтрейсер для анимации на GPU.
« : 23 Июля 2016, 11:15:20 »
Чтобы изучить язык программирования нужно начать писать программу на этом языке. Подходящее начало нашёл вот здесь:
https://github.com/rdavison/trayracer
https://github.com/rdavison/claytracer
Задача: допилить это для работы с Блендером добавив всё, что хочется.

Оффлайн Samovar

  • Житель
  • Пятигорье
Re: Рейтрейсер для анимации на GPU.
« Ответ #1 : 23 Июля 2016, 11:18:28 »
Хорошее начало... чем его надо собирать?
В общем, какой компилятор будешь пользовать? Какую IDE?

¯\_(ツ)_/¯

Оффлайн LanuHum

  • Житель
Re: Рейтрейсер для анимации на GPU.
« Ответ #2 : 23 Июля 2016, 11:51:03 »
Хорошее начало... чем его надо собирать?
В общем, какой компилятор будешь пользовать? Какую IDE?
Я буду использовать компилятор GCC и очень легковесную среду разработки Geany (для Windows доступна).
Если ты собираешься принять участие, то нам необходимо будет находить общие (Linux, Windows) инструменты.
claytracer использует библиотеки openCL, SDL2.
Переходим в папку с исходным кодом и собираем в линуксе командой
gcc -o claytracer -std=c11 -lOpenCL -lSDL2 -lm *.c
Чтобы посмотреть, что это за зверь такой.
У меня первый затык: версия моего линукса не стабильная, прога собралась, но не запустилась из-за отсутствия дравера nvidia.
Переустанавливаю систему. :)

Оффлайн Samovar

  • Житель
  • Пятигорье
Re: Рейтрейсер для анимации на GPU.
« Ответ #3 : 23 Июля 2016, 17:49:24 »
Блин, забыл предупредить... у меня видюхи нет с поддержкой Open CL :( Может лучше сначала потренироваться на рендере для процессора?
¯\_(ツ)_/¯

Оффлайн Samovar

  • Житель
  • Пятигорье
Re: Рейтрейсер для анимации на GPU.
« Ответ #4 : 23 Июля 2016, 18:06:38 »
Возник вопрос №1: Как собираешься данные из Блендера передавать в рейтресер? Это будет прямой доступ к .blend загруженному в оперативную память или реэкспорт в какой-то свой формат перед рендером?
¯\_(ツ)_/¯

Оффлайн Samovar

  • Житель
  • Пятигорье
Re: Рейтрейсер для анимации на GPU.
« Ответ #5 : 23 Июля 2016, 18:27:52 »
Вот ещё один рейтресер на C++ https://github.com/iquadrat/raytracer
¯\_(ツ)_/¯

Оффлайн Samovar

  • Житель
  • Пятигорье
Re: Рейтрейсер для анимации на GPU.
« Ответ #6 : 23 Июля 2016, 18:38:21 »
Вот тебе ещё инфы для размышлений (формат .blend файла)
http://www.atmind.nl/blender/mystery_ot_blend.html
http://www.atmind.nl/blender/blender-sdna-249.html
¯\_(ツ)_/¯

Оффлайн LanuHum

  • Житель
Re: Рейтрейсер для анимации на GPU.
« Ответ #7 : 23 Июля 2016, 18:55:37 »
Блин, забыл предупредить... у меня видюхи нет с поддержкой Open CL :( Может лучше сначала потренироваться на рендере для процессора?
Я весь день потратил, чтобы добиться работоспособности своей видеокарты, но, ещё не добился. Это хорошо, что ты предложил потренироваться
Возник вопрос №1: Как собираешься данные из Блендера передавать в рейтресер? Это будет прямой доступ к .blend загруженному в оперативную память или реэкспорт в какой-то свой формат перед рендером?
Как говорится, мы лёгких путей не ищем. Если правильно расставить птицы в cmake при сборке блендера, то можно вместо гуёвины собрать библиотеку. В винде это получается ни blender.exe, а bpy.dll, в линуксе это bpy.so. Вот эту либу я и собираюсь использовать в рендерере.
Принцип в коде выглядит так:
#include <python3.5m/Python.h>
#include <iostream>
#include <string>


int main(int, char **) {
    PyObject *mName, *pModule, *pFunc;
    PyObject *pArgs, *pValue, *sResult;
    Py_Initialize();
    PyRun_SimpleString("import sys");
    PyRun_SimpleString("sys.path.append(\".\")");
    PyRun_SimpleString("from bimport import hello");
    mName = PyUnicode_FromString("bimport");
    char fName[] = "hello";
    pModule = PyImport_Import(mName);
    pFunc = PyObject_GetAttrString(pModule, fName);
    char fileName[] = "/home/leonid/workspace/blender/files_blend/test_so.blend";
    PyObject *pyFileName = PyBytes_FromString(fileName);
    pArgs = PyTuple_New(1);
    PyTuple_SetItem(pArgs, 0, pyFileName);
    pValue = PyObject_CallObject(pFunc, pArgs);

    double cTuple[3];

    for (int i = 0; i < 3; i++){
        sResult = PyTuple_GetItem(pValue,i);
        double cResult = PyFloat_AsDouble(sResult);
        cTuple[i] = cResult;
        }
    std::cout<<cTuple[0]<<std::endl;
    std::cout<<cTuple[1]<<std::endl;
    std::cout<<cTuple[2]<<std::endl;
    Py_Finalize();
    return 0;
}

Оффлайн LanuHum

  • Житель
Re: Рейтрейсер для анимации на GPU.
« Ответ #8 : 23 Июля 2016, 19:13:14 »
Вот ещё один рейтресер на C++ https://github.com/iquadrat/raytracer

Это большой проект. Для начала без opencl подойдёт вот эта статья:
https://habrahabr.ru/post/187720/
Соответственно проект находится здесь:
https://github.com/lagodiuk/raytracing-render
Файлов очень мало, можно разобраться в принципе построения kd-tree, в использовании потоков, в антиалиасинге, зеркальности.

Оффлайн sungreen

  • ...
  • Житель
  • Kostroma mon amour
    • sungreen.github.io
Re: Рейтрейсер для анимации на GPU.
« Ответ #9 : 23 Июля 2016, 21:23:36 »
>> Это большой проект.
... а с нуля слабо?! но не просто #include #@уяк-#@уяк, а с постановки-с задачи ...
Для Кота

Оффлайн LanuHum

  • Житель
Re: Рейтрейсер для анимации на GPU.
« Ответ #10 : 23 Июля 2016, 21:42:17 »
>> Это большой проект.
... а с нуля слабо?! но не просто #include #@уяк-#@уяк, а с постановки-с задачи ...
Ты будешь помогать?
Но, вот это вот с нуля слабо - это мне не нравится. Вообще мне не нравится, что человечество не накапливает опыт, а меряется перцами. Я могу плюнуть на три метра, слабо? Я на пять, слабо?
За десять лет пользования мандривой (включая потомка Магею) я только и смотрю на длину членов разработчиков. В результате чего половина срока линукс глючит. В моём понимании, знаешь, как должно быть? Блендер должен быть 2006, 2007... 2016 отличаясь лишь функциональностью, но не внешним видом. А тут появляется некий Прайс, Мрайс и давай свой конец всем показывать: А я вот так могу и вот так.
А в результате, то член длинный, то рубаха короткая. Одно сделали, другое сломали, другое кверху жопой присобачили, третье до горы раком поставили.
Так вот давай определимся, что нам нужно? Показать длину своих перцев или поставить задачу?

Оффлайн Samovar

  • Житель
  • Пятигорье
Re: Рейтрейсер для анимации на GPU.
« Ответ #11 : 23 Июля 2016, 21:43:44 »
Вот тебе ещё инфы для размышлений (формат .blend файла)
http://www.atmind.nl/blender/mystery_ot_blend.html
http://www.atmind.nl/blender/blender-sdna-249.html

Вот ещё инфы от Ильи Белкина: https://docs.google.com/document/d/1VHt0flhV41fZAUuYsYqK0Vgn49KZfkekeQ39JnijC08/edit?pref=2&pli=1

Оставлю здесь. Вдруг, кому пригодится...
¯\_(ツ)_/¯

Оффлайн Samovar

  • Житель
  • Пятигорье
Re: Рейтрейсер для анимации на GPU.
« Ответ #12 : 23 Июля 2016, 21:46:04 »
>> Это большой проект.
... а с нуля слабо?! но не просто #include #@уяк-#@уяк, а с постановки-с задачи ...
С нуля слабо, увы... хотя с нуля правильней :) На счёт определения целей и постановки задачи - согласен полностью!
¯\_(ツ)_/¯

Оффлайн sungreen

  • ...
  • Житель
  • Kostroma mon amour
    • sungreen.github.io
Re: Рейтрейсер для анимации на GPU.
« Ответ #13 : 23 Июля 2016, 21:47:30 »
... хорошо, давайте с постановки задачи ...
... вот то что требуется сделать оно для чего и в чём цель? ...
... есть ли какое-нибудь противоречие, которое было бы решено в результате достижения поставленной цели? ...
Для Кота

Оффлайн Samovar

  • Житель
  • Пятигорье
Re: Рейтрейсер для анимации на GPU.
« Ответ #14 : 23 Июля 2016, 21:51:46 »
Цитировать
... вот то что требуется сделать оно для чего и в чём цель? ...
Ну ваще, я хотел упросить Ланухумыча, попробовать сделать ГИ на разблюренных картах окружения,  что должно было дать прирост в скорости, теоретически...    но потом...
¯\_(ツ)_/¯

 

* По форуму

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

Sizes.jpg
Скачано: 6
Автор: Dmi3ryd
paticles.jpg
Скачано: 3
Автор: Dmi3ryd
Снимок 1.PNG
Скачано: 3
Автор: atmk
Снимок.PNG
Скачано: 3
Автор: atmk
Screw.jpg
Скачано: 5
Автор: Dmi3ryd