4.6. Poznati problemi

 

Algoritam ima najvećih problema kada se kamera nađe unutar volumena sjene. Problemi nisu toliko ozbiljni kao kod Heidmannovog algoritma i lako se mogu zaobići. Na slici 4.11. prikazan je pogled na tijelo koje baca sjenu gdje je kamera locirana unutar volumena sjene. Sjena onih trokuta unutar čijih se volumena sjena nalazi kamera neće se dobro iscrtati jer tim trokutima nedostaju stražnja strane volumena (u ovom slučaju ne postoji konkretna prednja i stražnja strana). Ako se algoritam koristi na kompliciranim modelima greške koje će se javiti neće biti tako uočljive  budući da je tada riječ o malim trokutima koji ne bacaju mnogo sjene. Na objektu koji sjeni pojaviti će se mali neosjenjeni dijelovi. Kako dolazi do miješanja prednjih i stražnjih strana volumena sjena različitih trokuta, ti mali neosjenjeni dijelovi neće biti lokalizirani samo na trokute unutar čijih volumena sjena se nalazi kameram, već će se malo proširiti i na susjede.

 

Slika 4.11. Neki trokuti na objektu koji baca sjenu nisu ispravno zasjenjeni kada se kamera nalazi unutar volumena sjene.

 

Problemi su veći ako se kamera (očiše) nalazi unutar volumena sjene i usmjerena je prema tijelu na koje se sjena baca. Kako oni trokuti unutar čijih se volumena sjena nalazi kamera nemaju jednu stranu (stražnju) volumena sjene, doći će do krađe stranica volumena sjena drugih (susjednih) trokuta. Onaj trokut unutar čijeg se volumena sjena kamera nalazi posuđuje stranice volumena sjena od susjednog trokuta. Tada susjednom trokutu nedostaje jedna strana volumena sjena pa ih i on posuđuju od svojih susjeda i tako se taj proces posuđivanja (krađe) nastavlja sve dok se volumeni sjena svih trokuta ne iscrtaju. Ako je riječ o konkavnom tijelu, izgled sjene na bačenom tijelu može biti deformiran. U slučaju prikazanom na slici 4.12. se poslije iscrtavanja volumena sjene trokuta na dječakovim prsima (unutar kojeg se kamera nalazi) iscrtao volumen sjene trokuta koji se nalazi na dječakovu prstu. Zbog krađe stranica volumena sjene došlo je do spajanja sjene između ta dva trokuta, odnosno do deformacije sjene.

 

Slika 4.12. Vanjske linije sjene na objektu kojeg sjenimo nisu ispravno iscrtane kada se kamera nalazi unutar volumena sjene.

 

            Da bi riješili ovaj problem moramo spriječiti da se trokuti iscrtavaju takvim redoslijedom. U konkretnom slučaju trebalo bi prvo iscrtati volumene sjene svi trokuta dječakova trupa, a zatim i ostalih djelova tijela. I tada može dogoditi krađa stranica volumena sjena, ali se deformacija sjene neće vidjeti budući da je dječakov trup relativno konveksan. Ovaj trik radi samo s zatvorenim modelima. Naime, da bi krađa stranica volumena sjene prestala, paran broj trokuta trupa mora imati kameru lociranu unutar svoih volumena sjene. Kod zatvorenih će modela uvijek dva trokuta imati problema s pripadnošću kamere unutar svojih volumena sjena tako da će oni sami međusobno poništiti utjecaje krađe stranica volumena koje su i samo uzrokovali. Kod dječakova trupa na primjer, trokut na leđima i trokut na prsima imati kameru lociranu unutar svog volumena sjene. Prvi će trokut započeti krađu stranica volumena sjena, a drugi će je neutralizirati.

 

Slika 4.13. Ako su trokuti ispravno grupirani – sjena se ispravno iscrtava čak i kada se kamera nalazi unutar volumena sjene.

 

            Najjednostavniji način da tako grupiramo trokute u konveksne jedinice jest da nakon što dizajniramo model u nekom od programa za 3D modeliranje izvršimo njegovo rascijepanje njegove mreže u relativno konveksne mreže i ponovno ih spojimo originalnu mrežu. To će osigurati da u svim konveksnim dijelovima modela trokuti budu međusobno grupirani što će spriječiti propagiranje krađe stranica volumena sjena na susjedne konveksne dijelove modela. Našeg bi dječaka na primjer rastavili tako da odvojimo trup, glavu, ruke, prste… i na kraju ih ponovno sastavimo. Ako smo sve ispravno napravili, problem s deformiranom sjenom biti će riješen i sjena našeg dječaka izgledati će kao što je prikazano na slici 4.13.