Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Проекты > Проекты C++

Ответ
 
Опции темы
Старый 16.09.2009, 14:01   #1
Genius
Знающий
 
Аватар для Genius
 
Регистрация: 02.11.2007
Сообщений: 255
Написано 27 полезных сообщений
(для 43 пользователей)
Статья:Глобальное освещение(Radiosity)

И так,Radiosity - один из методов глобального освещения(Global Illumination,GI).

Радиосити даёт довольно реалистичное освещение нежели простые методы.



Есть open-source реализации Global Illumination рендеринга такие как Toxic(найти можно на SourceForge.net).

Единственный минус GI это довольно таки долгий расчёт из за моножества вычислений так что GI в наше время можно юзать как статическое(фоновое) освещение,заранее расчитаное.

Но со скорым выходом NVIDIA RayTrace Engine(Точное название не помню) возможно GI можно будет выбить в риал тайм,есть конечно уже реализация риал тайм GI от ATI на DirectX 10 где юзаются кубмапы,но и там оно не сильно риал тайм,да и у меня на NVIDIA GeForce 9600 GT почемуто не запускается их пример,найти его можно на developer.amd.com.

А ха да что то я уже в дебри полез ,так Radiosity - не юзает рей трейсинг в то время как просто GI его во всю юзает.

И так реализация:

Я раскажу о повершином Radiosity,но правельнее же конечно юзать лайтмеп(но это отдельная тема).
У нас в сцене есть комнота,все её цвета вершин заполнены чёрным цветом(r=0,g=0,b=0) на потолке комнаты есть лампа - меш все её цвета вершины заполнены белым цветом(r=225,g=225,b=225),начинаем проход по всем мешам\сурфейсам мешей\вершинам сурфейсов,ах да в Radiosity юзается такая штука как Form Factors для определения интенсивности освещёности пикселя,генерируется Form Factor'ы так:

const int RQ = 32; // качество радиосити,чем больше тем круче

float formFactors[RQ][RQ]; // двумерный массив форм факторов RQ*RQ


for(int x=0;x<RQ;x++){
  for(int y=0;y<RQ;y++){
       formFactors[x][y] = sin( float(x)*PI/float(RQ) )*sin( float(y)*PI/float(RQ) );
  }
}
Форм факторы сгенерированы,представляют они из себя это:


тоесть будет токой цикл:


for(int i=0;i<num_meshes;i++)
{
        Mesh* mesh = meshes[i];

        for(int j=0;j<mesh->getNumSurfaces;j++){

             Surface* s = mesh->getSurface(j);
             Vertex* v = s->getVertex();

             for(int k=0;k<s->getNumVertex();k++){
                    бла бла бла...
             }
        }
}
Цикл генерации radiosity освещения:

1) Камера перемещается в позицию вершины k,её направление равно нормали вершины k(в блитце можно для этого заюзать AlignToVector),вьюпорт камеры - x=0;y=0;width=RQ;height=RQ;FOV=90 - обязательно 90.
2) Рисуется вся сцена из текущей позиции камеры(желально вырубить режим куллинга)
3) Считывается кусок backbuffer'а - x=0,y=0,w=RQ,h=RQ.

Далее ЦИКЛ:

unsigned char tmp[3];
for( int x = 0;x<RQ;x++ ){
  for(int y = 0;y<RQ;y++){
    unsigned char r = пиксель[x][y].r;
    unsigned char g = пиксель[x][y].g;
    unsigned char b = пиксель[x][y].b;
    tmp[0] += r * formFactors[x][y];
    tmp[1] += g * formFactors[x][y];
    tmp[2] += b * formFactors[x][y];
  }
}
после делим tmp на RQ*RQ

tmp[0] /= RQ*RQ;
tmp[1] /= RQ*RQ;
tmp[2] /= RQ*RQ;
и прибовляем tmp к цвету вершины k.

ну и так по все вершинам...

Вот как будет выглидеть полностью цикл:

camera->setViewport(0,0,RQ,RQ);
camera->setFov(90);
camera->setAspect(RQ/RQ);

for(int i=0;i<num_meshes;i++)
{
        Mesh* mesh = meshes[i];

        for(int j=0;j<mesh->getNumSurfaces;j++){

             Surface* s = mesh->getSurface(j);
             Vertex* v = s->getVertex();

             for(int k=0;k<s->getNumVertex();k++){
                    camera->setPosition(v[k].xyz);
                    camera->align(v[k].normal);
                    
                    рендерим мир.
 
                    лочим backbuffer.

                    получаем массив пикселей.


                    unsigned char tmp[3];
                
                    for( int x = 0;x<RQ;x++ ){
                        for(int y = 0;y<RQ;y++){
   
                            unsigned char r = пиксель[x][y].r;
                            unsigned char g = пиксель[x][y].g;
                            unsigned char b = пиксель[x][y].b;
                            tmp[0] += r * formFactors[x][y];
                            tmp[1] += g * formFactors[x][y];
                            tmp[2] += b * formFactors[x][y];
                        }
                    }

                    после делим tmp на RQ*RQ 

                    tmp[0] /= RQ*RQ;
                    tmp[1] /= RQ*RQ;
                    tmp[2] /= RQ*RQ;
                    v[k].color.x += tmp[0];
                    v[k].color.y += tmp[1];
                    v[k].color.z += tmp[2];
             }
       }
}
повторяем этот цикл до достижения красивой картинки(обычно это 15-16 итераций)

4 пасса -

16 пассов -


Полезные ссылки:
-http://freespace.virgin.net/hugo.eli.../radiosity.htm
-http://democoder.ru/dcdn_article_view.php?dcid=22

Последний раз редактировалось Genius, 16.09.2009 в 14:12.
(Offline)
 
Ответить с цитированием
Эти 7 пользователя(ей) сказали Спасибо Genius за это полезное сообщение:
ABTOMAT (16.09.2009), Dream (16.09.2009), impersonalis (16.09.2009), Mr_F_ (16.09.2009), NitE (16.09.2009), Randomize (16.09.2009), SBJoker (16.09.2009)
Старый 16.09.2009, 14:22   #2
Genius
Знающий
 
Аватар для Genius
 
Регистрация: 02.11.2007
Сообщений: 255
Написано 27 полезных сообщений
(для 43 пользователей)
Ответ: Статья:Глобальное освещение(Radiosity)

Пример для B3D в процессе.
(Offline)
 
Ответить с цитированием
Старый 16.09.2009, 14:39   #3
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: Статья:Глобальное освещение(Radiosity)

начинаем проход по всем мешам\сурфейсам мешей\вершинам сурфейсов,ах да в Radiosity юзается такая штука как Form Factors для определения интенсивности освещёности пикселя,генерируется Form Factor'ы так:
я нифига не понял
что такое форм факторс
и почему у меня должны получаться какие-то градиентные круги на каждый пиксель

тема чрезвычайно интересует, буду признателен за более понятное объяснение

хотя тут довольно рульно описано
__________________
бложик | geom.io | твиттер | faded | демо 1 2 | роботы | лайтмаппер

Последний раз редактировалось Mr_F_, 16.09.2009 в 15:15.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
SBJoker (16.09.2009)
Старый 16.09.2009, 17:05   #4
Genius
Знающий
 
Аватар для Genius
 
Регистрация: 02.11.2007
Сообщений: 255
Написано 27 полезных сообщений
(для 43 пользователей)
Ответ: Статья:Глобальное освещение(Radiosity)

Сообщение от Mr_F_ Посмотреть сообщение
я нифига не понял
что такое форм факторс
и почему у меня должны получаться какие-то градиентные круги на каждый пиксель

тема чрезвычайно интересует, буду признателен за более понятное объяснение


хотя тут довольно рульно описано
Так я же написал что форм фактор для определения интенсивности освещёности пикселя ,покрайней мере я так понял...
(Offline)
 
Ответить с цитированием
Старый 16.09.2009, 20:49   #5
jimon
 
Сообщений: n/a
Ответ: Статья:Глобальное освещение(Radiosity)

покрайней мере я так понял...
значит твои старания по radiosity это просто допилить копипаст откуда-то чтобы он заработал ?

ps. статья чисто для копипаста, никакой теории
 
Ответить с цитированием
Старый 16.09.2009, 21:08   #6
Genius
Знающий
 
Аватар для Genius
 
Регистрация: 02.11.2007
Сообщений: 255
Написано 27 полезных сообщений
(для 43 пользователей)
Ответ: Статья:Глобальное освещение(Radiosity)

Сообщение от jimon Посмотреть сообщение
значит твои старания по radiosity это просто допилить копипаст откуда-то чтобы он заработал ?

ps. статья чисто для копипаста, никакой теории
Твоё личное мнение учтено

p.s напиши лучше.

Последний раз редактировалось Genius, 16.09.2009 в 21:28.
(Offline)
 
Ответить с цитированием
Старый 16.09.2009, 21:32   #7
Dream
быдло
 
Регистрация: 05.08.2007
Сообщений: 1,435
Написано 614 полезных сообщений
(для 1,489 пользователей)
Ответ: Статья:Глобальное освещение(Radiosity)

"какое ни какое но тоже чтото" всё равно спасибо за старания)
(Offline)
 
Ответить с цитированием
Старый 17.09.2009, 14:13   #8
Genius
Знающий
 
Аватар для Genius
 
Регистрация: 02.11.2007
Сообщений: 255
Написано 27 полезных сообщений
(для 43 пользователей)
Ответ: Статья:Глобальное освещение(Radiosity)

Блин вообще забыл как пользоватся B3D =(. Сеймпл отменяется...

Вобщем вот как выглидит Radiosity у меня:


На белые полоски на рёбрах боксов не обращайте внимания,у меня лайтмеп всё ещё страдает...
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Mr_F_ (17.09.2009)
Старый 17.09.2009, 14:50   #9
Dream
быдло
 
Регистрация: 05.08.2007
Сообщений: 1,435
Написано 614 полезных сообщений
(для 1,489 пользователей)
Ответ: Статья:Глобальное освещение(Radiosity)

такое ощущения что на нижних грянях кубов есть лампочка) и освещает поверхность под ними
(Offline)
 
Ответить с цитированием
Старый 17.09.2009, 15:58   #10
Genius
Знающий
 
Аватар для Genius
 
Регистрация: 02.11.2007
Сообщений: 255
Написано 27 полезных сообщений
(для 43 пользователей)
Ответ: Статья:Глобальное освещение(Radiosity)

Сообщение от DimasSup Посмотреть сообщение
такое ощущения что на нижних грянях кубов есть лампочка) и освещает поверхность под ними
Цитата из моего сообщения c скрином:

На белые полоски на рёбрах боксов не обращайте внимания,у меня лайтмеп всё ещё страдает...

Это означает что и на нижних рёбрах есть полоски а в радиосить все светлые объекты автоматом становятся источниками,тоесть в радиосить сурфейсные источники юзаются(по крайней мере у меня),что на мой взгляд даёт много приимуществ например источники можно будет любых форм делать =). Щас работаю над Irradiance Volume.

Последний раз редактировалось Genius, 17.09.2009 в 16:05.
(Offline)
 
Ответить с цитированием
Старый 17.09.2009, 19:14   #11
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,051 пользователей)
Ответ: Статья:Глобальное освещение(Radiosity)

Irradiance Volume
нету ссылок на какие-нибудь статьи?
__________________
бложик | geom.io | твиттер | faded | демо 1 2 | роботы | лайтмаппер
(Offline)
 
Ответить с цитированием
Старый 17.09.2009, 20:05   #12
jimon
 
Сообщений: n/a
Ответ: Статья:Глобальное освещение(Radiosity)

Genius
p.s напиши лучше.
мне не нужно писать свою статью чтобы критиковать твою
 
Ответить с цитированием
Старый 17.09.2009, 20:17   #13
IGR
Blitz's Shame !!
 
Регистрация: 31.03.2007
Сообщений: 3,639
Написано 832 полезных сообщений
(для 2,013 пользователей)
Ответ: Статья:Глобальное освещение(Radiosity)

Жаль для БЪЭ 3 Де нет примера !!
а так, статья so-so...
(Offline)
 
Ответить с цитированием
Старый 18.09.2009, 02:10   #14
Genius
Знающий
 
Аватар для Genius
 
Регистрация: 02.11.2007
Сообщений: 255
Написано 27 полезных сообщений
(для 43 пользователей)
Ответ: Статья:Глобальное освещение(Radiosity)

Сообщение от Mr_F_ Посмотреть сообщение
нету ссылок на какие-нибудь статьи?
В D3D SDK есть пример. и ещё у крайтека был пепер по нему. ссылки нету под рукой.

upd:

-http://www.cs.utah.edu/~shirley/papers/irradiance.pdf
-http://ati.amd.com/developer/gdc/Tat...ce_Volumes.pdf
-http://www.crytek.com/fileadmin/user...on_Volumes.pdf

Последний раз редактировалось Genius, 18.09.2009 в 02:37.
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо Genius за это полезное сообщение:
Dream (18.09.2009), Mr_F_ (18.09.2009)
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Статья pax FAQ 7 27.06.2011 04:13
Небо & освещение Neoba 3D-программирование 21 08.12.2007 20:04
Динамическое освещение или живой свет. magpro 3D-программирование 5 16.07.2007 11:55
Освещение impersonalis 3D-программирование 12 25.06.2006 19:29


Часовой пояс GMT +4, время: 11:42.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com