Raytracing, interpolated normal and shadows

Компютърната графика извън игрите - алгоритми независещи от конкретни библиотеки, фотореалистична графика, моделиране и др.

Raytracing, interpolated normal and shadows

Мнениеот Emooo » 03 Фев 2010 18:27

Здравейте,

пиша рейтреисър. Излезе един проблем за който не намирам решение. Проблема изглежда е често срещан и други хора го имат. На този линк е обяснен подробно с картинки http://stackoverflow.com/questions/1876 ... ws-problem там няма точен отговор как се решава този проблем, дадени са някакви предложения само. Бих искал да чуя мнения на някой който се е сблъсквал с тоя проблем и го е решил. Слагам картинка от моя рейтрейсър за да се види проблема.
Прикачени файлове
a.png
a.png (79.21 KiB) Прегледано 395 пъти
Emooo
New User
New User
 
Мнения: 9
Регистриран на: 03 Фев 2010 17:21

Re: Raytracing, interpolated normal and shadows

Мнениеот GeLeTo » 03 Фев 2010 21:35

Според мен най-логично е да се измества точката от която се рейтрейсва.
Как да се измества - трябва да се пробват няколко подхода, погледни за PN-Triangles : http://developer.amd.com/media/gpu_assets/Vlachos-CurvedPNTriangles(I3DG01).pdf

Това може да прави проблеми при сенки от близка геометрия. Може би да се използва само за self-shadowing?

Edit: ... или друго решение - когато нормалата на триъгълника е почти перпендикулярна на посоката към светлина - изместваш точката напред, най-много когато и нормалата на точката е перпендикулярна. Или нещо подобно - трябва да се пробват различни варианти.
GeLeTo
Power User
Power User
 
Мнения: 262
Регистриран на: 16 Дек 2003 17:02

Re: Raytracing, interpolated normal and shadows

Мнениеот Emooo » 04 Фев 2010 11:09

Теселацията е неприемлива. Мерси все пак.
Emooo
New User
New User
 
Мнения: 9
Регистриран на: 03 Фев 2010 17:21

Re: Raytracing, interpolated normal and shadows

Мнениеот GeLeTo » 04 Фев 2010 14:15

Emooo написа:Теселацията е неприемлива. Мерси все пак.

Не говоря за тесалация. Измества се само точката от която се рейтрейсва, а не геометрията.
Втория подход можеш да го третираш като променлив shadow bias който е най-голям когато нормалитe на точката и триъгълника са перпендикулярни на светлината.
GeLeTo
Power User
Power User
 
Мнения: 262
Регистриран на: 16 Дек 2003 17:02

Re: Raytracing, interpolated normal and shadows

Мнениеот Emooo » 04 Фев 2010 15:33

Да прав си сега като се задълбочих разбрах каква е идеята. Това ще свърши работа.
Emooo
New User
New User
 
Мнения: 9
Регистриран на: 03 Фев 2010 17:21

Re: Raytracing, interpolated normal and shadows

Мнениеот Emooo » 08 Фев 2010 16:50

Заинтересувах се от метода с PN triangles. Този метод генерира контролни точки по началния триъгълник от които се генерират вътрешни триъгълници. На мен ми харесва идеята за surface interpolation за намиране на точката от която да изтрелям shadow ray-a но проблема е, че не мога да намеря кординатите на произволна точка от триъгълника. Търси доста из нета за модифициран метод но без успех. Ще съм благодарен ако някой ме насочи към метод които по задаени 3 ветекса с нормали да намеря интерполиран вертекс.
Emooo
New User
New User
 
Мнения: 9
Регистриран на: 03 Фев 2010 17:21

Re: Raytracing, interpolated normal and shadows

Мнениеот warjo » 08 Фев 2010 20:17

Аватар
warjo
Power User
Power User
 
Мнения: 201
Регистриран на: 21 Юли 2005 12:54
Местоположение: Derby, UK

Re: Raytracing, interpolated normal and shadows

Мнениеот GeLeTo » 09 Фев 2010 14:41

Има алгоритми за ray-triangle intersection, които ти намират направо барицентричните координати, примерно : http://www.devmaster.net/wiki/Ray-triangle_intersection
GeLeTo
Power User
Power User
 
Мнения: 262
Регистриран на: 16 Дек 2003 17:02

Re: Raytracing, interpolated normal and shadows

Мнениеот Emooo » 09 Фев 2010 23:01

Явно не обясних точно къде е проблема. Естествено че зная как да намеря ray - triagle intersection щом съм написъл raytracer. Алгоритъма с PN тригълниците практически прави теселация. Новите точки които алгоритъма генерира се намират на някаква повърхност която е различна от повърхноста на първоначалния триъгълник (освен ако нормалите на ветексите не са перпендикулярни на равнината на тригълника). Този метод генерира точки на една изкривена повърхност която кривина е базирана на нормалите на началния триъгълник. Метода ми дава възможност да намеря точки върху тая нова повърхност като по тези точки ще ми послужат за новите тригълниците вписани в началния триъгълник. Проблема ми е - освен 3те ветекса на началния триъгълник аз има и точката на пресичане между началния триъгълник и ray-a. Тази точка се намира на началния триъгълник аз искам да намеря проекцията на тая точка на върху новата равнина. Единия вариант е да направя теселация на началния тригълник и да получа да кажем 30 вписъни тригълника - и да пресичам shadow ray-а с всеки от тези триъгълници за да намеря къде shadow ray-a пресича но този вариант не ми харесва защото това си е чиста теселация която мога да си я направя още преди да почна raytracinga на всички обекти ще получа много полигони и ще занимава много памет и CPU time. Идеалния вариант за мене е чрез математически метод да намеря проекцията на началната точка на shadow ray-a (която лежи върху началния триъгълник) върху равнината (тоест кривата повърхност) която бих получил при евентуална теселация. Слагам картинка за да стане ясно връзката меду началния триъгълник и кривата повърхоност върху която търса точката си.
Прикачени файлове
surface.png
surface.png (131 KiB) Прегледано 273 пъти
Emooo
New User
New User
 
Мнения: 9
Регистриран на: 03 Фев 2010 17:21

Re: Raytracing, interpolated normal and shadows

Мнениеот Miraka » 09 Фев 2010 23:22

Не разбирам как, намирайки "проекцията" на пресечната точка на лъча с началния триъгълник, ще ти помогне. Иначе за да намериш тази проекция ти трябва вектор, по който да проектираш. Ако имаш вектора на лъча, какъв е проблема да го пресечеш с уравнението на кривата? Ако искаш може и да проектираш по посока на сумата от векторите на нормалите, но отново не виждам как ще ти помогне.
Аватар
Miraka
Often here
Often here
 
Мнения: 67
Регистриран на: 19 Мар 2006 13:53
Местоположение: София

Re: Raytracing, interpolated normal and shadows

Мнениеот Emooo » 09 Фев 2010 23:42

Тази кривата повърхност която виждаш за нея нямам никаква информация - това е резултата от теселацията на PN triangles алгоритъма. Аз мога да намеря точките на зелените триъгълници. Как би ми помогнала - в момента изтрелвам shadow ray-a от повърхноста на синия триъгълник това води до проблеми с сенките. Ако изтрелвам shadow ray-a от зелената повъхност тогава всичко ще е ОК. Въпроса е как да намеря точка от синия триъгълник къде се проектира на зелената крива повърхност. Както споменах може да intersectna shadow ray-a със зелените триъгълници но това не е оптимално решение. Трябва да има вариант чрез PN triangle алгоритъма да намеря опередена точка.
Emooo
New User
New User
 
Мнения: 9
Регистриран на: 03 Фев 2010 17:21

Re: Raytracing, interpolated normal and shadows

Мнениеот Miraka » 10 Фев 2010 00:22

Не знам как работи PN алгоритъма, но 100% прави някакво уравнение на кривата, което използва за да нареди триъгълниците. Трябва да намериш това уравнение и пресичането ще е елементарно. между другото тези криви доста ми приличат на Безие-еви (може би ако вместо нормалите се вземат огледалните вектори - спрямо нормалата (перпендикуляра) на триъгълника).

Едит:
Обаче не разбирам каква роля играят зелените триъгълници. Важното е да имаш уравнението на кривата и да изстрелваш лъча от точките на текстурата на синия триъгълник по посока проекцията на съответния тексел върху кривата. Имайки X и Y на тексела заместваш в уравнението на кривата и намираш Z. Вече знаеш (X,Y,Z) координатите на съответната точка от кривата и изчисляваш светлината с нейната нормала.
Аватар
Miraka
Often here
Often here
 
Мнения: 67
Регистриран на: 19 Мар 2006 13:53
Местоположение: София

Re: Raytracing, interpolated normal and shadows

Мнениеот GeLeTo » 10 Фев 2010 12:21

Emooo написа:Проблема ми е - освен 3те ветекса на началния триъгълник аз има и точката на пресичане между началния триъгълник и ray-a. Тази точка се намира на началния триъгълник аз искам да намеря проекцията на тая точка на върху новата равнина.

Имаш барицентричните координати (u,v,w) на точката върху плоския триъгълник. Използваш същите координати за да генерираш съответната точка върху PN триъгълника.

... Не съм сигурен че PN триъгълниците са най-удачното решение. Имай предвид че точка от PN триъгълника може и да е зад плоския триъгълник.
По-подходящо ми се вижда нещо подобно, което мести точката по посока на нормалата и то само в случаите когато се налага (триъгълника да е почти препендикулярен на посоката на светлината, а точката да е "навътре" в триъгълника, при самите ръбове няма нужда от отместване) за да се минимизират артефактите при сенки между много близки или пресичащи се обекти, а и по-бързо ще е ако се прилага само на малка част от триъгълниците.
GeLeTo
Power User
Power User
 
Мнения: 262
Регистриран на: 16 Дек 2003 17:02

Re: Raytracing, interpolated normal and shadows

Мнениеот Emooo » 10 Фев 2010 14:15

За да намеря проекцията върху PN триъгълник трябва да съм изчислил PN триъгълниците, което се опитвам да избегна. Тези тригълници се намират на базата на Bezier криви. Искам ползвам идеята и вместо да генерирам 30 точки (на базата на Безие криви) от които да направя PN тригълници и после да търся къде се проектира моята точка, директно да изчисля една точка която да е моята търсена.
Emooo
New User
New User
 
Мнения: 9
Регистриран на: 03 Фев 2010 17:21

Re: Raytracing, interpolated normal and shadows

Мнениеот GeLeTo » 10 Фев 2010 14:20

Emooo написа:За да намеря проекцията върху PN триъгълник трябва да съм изчислил PN триъгълниците, което се опитвам да избегна. Тези тригълници се намират на базата на Bezier криви. Искам ползвам идеята и вместо да генерирам 30 точки от които да направя PN тригълници и после да търся къде се проектира моята точка, директно да изчисля една точка която да е моята търсена.

Какво му е на предложението да използваш същите барицентрични координати като на плоския триъгълник? По-просто от това не може да стане.
1. Намираш барицентричните (u,v,w) координати на точката върху плоския триъгълник(това може да стане и при ray-triangle теста, виж горния линк)
2. Заместваш тези координати във формулата b(u,v)=.... от PDF-a за PN Triangles и намираш позицията от която рейтрейсваш.

Това с проекцията има много проблеми. Примерно какво правиш ако точката се проектира върху някой съседен PN триъгълник. Особено по ръбовете това ще е проблем. И е ненужно сложно.
GeLeTo
Power User
Power User
 
Мнения: 262
Регистриран на: 16 Дек 2003 17:02

Re: Raytracing, interpolated normal and shadows

Мнениеот Emooo » 11 Фев 2010 19:21

Направих го. Работи супер, благодаря за помоща. В началото неможах да се ориентирам в теорията но това което ми каза със заместването на b(u,v) ми се изясни цялата работа. Трябва малко да си подобря четенето на математическата документация.

Ето картинка от тестовото приложение. Не че има смисъл да я слагам ама изглежда много шарено :).
Прикачени файлове
tesselation.PNG
tesselation.PNG (67.63 KiB) Прегледано 216 пъти
Emooo
New User
New User
 
Мнения: 9
Регистриран на: 03 Фев 2010 17:21

Следваща

Назад към Компютърна графика

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 1 госта