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

Оффлайн 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 »
Цитировать
... вот то что требуется сделать оно для чего и в чём цель? ...
Ну ваще, я хотел упросить Ланухумыча, попробовать сделать ГИ на разблюренных картах окружения,  что должно было дать прирост в скорости, теоретически...    но потом...

 


Яметрика

* По форуму

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

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

1 (1).png
Скачано: 66
Автор: LEXA ANЭGROWND
blender.png
Скачано: 76
Автор: ipv2007
4.png
Скачано: 98
Автор: hiroyukiss
2.png
Скачано: 120
Автор: hiroyukiss

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