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

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

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

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



Рей трейсинг,один из методов получения физически правельной картинки,вот представте себе сцену - полоскость и три сферы рандомно раставленые над ней все эти объекты имеют свойство отражать в себе окружающий мир,как вы это сделаете? Чтобы всё было физически правельно веть надо будет отражать не только на плейне все сферы но и чтобы в сферах были отражения других сфер и плейна! Без рей трейсинга здесь однозначно не обойтись! Кстате скоро выйдет RayTrace движок от инвидии который будет ускарятся на их видео карточках.

Я не раскажу вам к сожелению об отражениях в этой статье,но в дальнейших частях думаю реч пойдёт и об отражениях.

И так перва статья об RayTrace будет вводная:

Представте себе такую сцену:


Она разбита не триугольники( но как правело если юзать триугольники то нужно кажый триугольник разбить ещё на 3-4 триугольника а то и больше чтобы достич качества):

И так стрельба лучами от источника к вершине каждого триугольника:



Мы просто берём луч Origin = light position , Dir = vertex position - Origin
И шотим и так с кажой вершиной каждого объекта.

Как же получить тени спросите вы?? Легко при шоте лучём мы проверяем если луч пересёк что либо то значит затеням вершину так как между источником и вершиной стоит какаято преграда!



У себя я это делаю так:

void CMesh::rayTrace()
{
	for(int i=0;i<num_surfaces;i++){
		CSurface* s = surfaces[i];
		for(int j=0;j<s->lightmaps.size();j++){
			LightMap* m = &s->lightmaps[j];

			for(int y=0;y<m->size;y++){
				for(int x=0;x<m->size;x++){
					vec3 crd = m->getLumel(x,y)->coord;

					for(int k=0;k<CSceneManager::num_lights;k++){
						CLight* l = CSceneManager::lights[k];
						//if(!l->getMaterial())
						//	continue;

						float dist = 100000;
						vec3 p,n;

						vec3 start = l->getWorldPosition();
						vec3 end = crd;//(l->getWorldPosition() - m->getLumel(x,y)->coord).normalized() * crd.distance(l->getWorldPosition());
						IEntity* e = CEngine::scene->rayTrace(start,(end - start).normalized() * 1000 ,p,n);
						
						//glMatrixMode(GL_MODELVIEW);
						//glLoadIdentity();

						CEngine::scene->begin(CEngine::scene->camera);
						glColor3f(1,0,0);
					
						glBegin(GL_LINES);
						glVertex3f(start.x,start.y,start.z);
						glVertex3f(end.x,end.y,end.z);
						glEnd();



						if(e && p.distance(end) <= 2.0f ){

							float dist = (l->getWorldPosition() - crd).length();
							float attenuation = 1 - sqrt(dist) / sqrt(l->getRadius());
                               
							float d = dot(m->getLumel(x,y)->normal,(start - end).normalized());
							m->getLumel(x,y)->color += l->getMaterial()->getColor() * d * attenuation;
						
							glColor3f(0,1,0);
						    glBegin(GL_LINES);
						    glVertex3f(start.x,start.y,start.z);
						    glVertex3f(p.x,p.y,p.z);
						    glEnd();
						}

						CEngine::scene->end();

						getEngine()->flip();
					}

				}
			}
		}
		s->updateLightmap();
	}
}
Первая часть закончена,воторая будет как только я разберусь с отражениями)).


(Offline)
 
Ответить с цитированием
Старый 22.09.2009, 20:34   #2
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,906
Написано 2,155 полезных сообщений
(для 5,827 пользователей)
Ответ: Статья: RayTrace(Part 1)

твоё использование рейтрейса беспонтово!) между прочим YAL также генерил тени, только это жуть как медленно а просчитать тоже самое шадовмапом быстрее и лучше.
__________________
бложик | geom.io | твиттер | faded | демо 1 2 | роботы | лайтмаппер
(Offline)
 
Ответить с цитированием
Старый 22.09.2009, 20:39   #3
Genius
Знающий
 
Аватар для Genius
 
Регистрация: 02.11.2007
Сообщений: 255
Написано 27 полезных сообщений
(для 43 пользователей)
Ответ: Статья: RayTrace(Part 1)

Сообщение от Mr_F_ Посмотреть сообщение
твоё использование рейтрейса беспонтово!) между прочим YAL также генерил тени, только это жуть как медленно а просчитать тоже самое шадовмапом быстрее и лучше.
Я юзаю лайтмепы,для статики это очень даже понтово и попантовее шедоу мапа будет по скорости ) так как расчитывается это всё в оффлайне.
(Offline)
 
Ответить с цитированием
Старый 22.09.2009, 20:49   #4
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,906
Написано 2,155 полезных сообщений
(для 5,827 пользователей)
Ответ: Статья: RayTrace(Part 1)

я тоже юзаю лайтмапы, а запекаю их юзая шадовмап, в оффлайне
мне и в оффлайне ждать долго не хочется)
http://i023.radikal.ru/0909/63/32cb4b961775.jpg
http://s19.radikal.ru/i192/0909/a1/c888bbc91633.jpg
http://i016.radikal.ru/0909/e6/6bd1fd4a641b.jpg
на скринах уже лайтмапы - рендерились по 3-6 сек
__________________
бложик | geom.io | твиттер | faded | демо 1 2 | роботы | лайтмаппер
(Offline)
 
Ответить с цитированием
Старый 22.09.2009, 21:00   #5
Genius
Знающий
 
Аватар для Genius
 
Регистрация: 02.11.2007
Сообщений: 255
Написано 27 полезных сообщений
(для 43 пользователей)
Ответ: Статья: RayTrace(Part 1)

Сообщение от Mr_F_ Посмотреть сообщение
я тоже юзаю лайтмапы, а запекаю их юзая шадовмап, в оффлайне
мне и в оффлайне ждать долго не хочется)
http://i023.radikal.ru/0909/63/32cb4b961775.jpg
http://s19.radikal.ru/i192/0909/a1/c888bbc91633.jpg
http://i016.radikal.ru/0909/e6/6bd1fd4a641b.jpg
на скринах уже лайтмапы - рендерились по 3-6 сек
Если строить Kd-Tree то рейтрейсинг будет шустрый,и спомощью него можно всёравно добится красивее результата нежели с помощью шедоумап.

У меня например рейтрейс быстрый,результат тоже не плохой:
Миниатюры
Нажмите на изображение для увеличения
Название: SoftShadowsRT.jpg
Просмотров: 348
Размер:	115.6 Кб
ID:	7695  
(Offline)
 
Ответить с цитированием
Старый 22.09.2009, 21:11   #6
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,906
Написано 2,155 полезных сообщений
(для 5,827 пользователей)
Ответ: Статья: RayTrace(Part 1)

а у тебя
а у тебя
у тебя зато нету фишки что блюрность тени зависит от дистанции, пройденной от кастера)

да и по скрину ничего не поймёшь, будто 6 черных пикселей размазано
__________________
бложик | geom.io | твиттер | faded | демо 1 2 | роботы | лайтмаппер
(Offline)
 
Ответить с цитированием
Старый 22.09.2009, 21:18   #7
Genius
Знающий
 
Аватар для Genius
 
Регистрация: 02.11.2007
Сообщений: 255
Написано 27 полезных сообщений
(для 43 пользователей)
Ответ: Статья: RayTrace(Part 1)

Сообщение от Mr_F_ Посмотреть сообщение
а у тебя
а у тебя
у тебя зато нету фишки что блюрность тени зависит от дистанции, пройденной от кастера)

да и по скрину ничего не поймёшь, будто 6 черных пикселей размазано
Зато ты от направленого источника без PSSM который тоже не всегда точный не получиш красивой тени хотя ты её переблюрь всю =)
А с помощью рейтрейса всё будет гуд.
(Offline)
 
Ответить с цитированием
Старый 22.09.2009, 21:20   #8
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,906
Написано 2,155 полезных сообщений
(для 5,827 пользователей)
Ответ: Статья: RayTrace(Part 1)

без PSSM
кто сказал что без?)
не получиш красивой тени хотя ты её переблюрь всю =)
почему? тень она и в шадовмапе тень)
__________________
бложик | geom.io | твиттер | faded | демо 1 2 | роботы | лайтмаппер
(Offline)
 
Ответить с цитированием
Старый 22.09.2009, 21:23   #9
Genius
Знающий
 
Аватар для Genius
 
Регистрация: 02.11.2007
Сообщений: 255
Написано 27 полезных сообщений
(для 43 пользователей)
Ответ: Статья: RayTrace(Part 1)

Сообщение от Mr_F_ Посмотреть сообщение
кто сказал что без?)

почему? тень она и в шадовмапе тень)
Ну хотябы потомучто она будет не точная,а это к твоему сведению уже не красиво если так думать то почему бы тогда вообще под каждой моделью просто тупо круглый чёрный спрайт проецировать,а чё тень она и в африке тень...

ЗЫ Под направленым источником я имел ввиду солнце.
(Offline)
 
Ответить с цитированием
Старый 22.09.2009, 21:37   #10
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,906
Написано 2,155 полезных сообщений
(для 5,827 пользователей)
Ответ: Статья: RayTrace(Part 1)

для направленного источника я рендерю довольно с недалекого расстояния, по частям, точность устраивает.
если реально издалека за раз то да, говно было
__________________
бложик | geom.io | твиттер | faded | демо 1 2 | роботы | лайтмаппер
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Статья pax FAQ 7 27.06.2011 00:13
Статья:Глобальное освещение(Radiosity) Genius Проекты C++ 13 17.09.2009 22:10
Статья:Parallax Mapping Genius Проекты C++ 25 23.06.2009 21:28
Статья: О Линукс в скриншотах!!! ingko Болтовня 7 30.03.2007 17:13
jimon irrlicht event receiver + статья jimon C++ 1 09.09.2006 16:42


Часовой пояс GMT +1, время: 09:54.


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