Virtualna stvarnost: Akustika. Prototip sustava za simulaciju zvuka
Kliknite da biste prikazali originalni naslov, sažetak, predgovor itd.

Amiga je registrirana trgovinska marka kompanije Commodore-Amiga Inc.
"dbx" je registrirana trgovinska marka kompanije dbx, Newton, Mass., SAD, podružnica BSR NA Ltd.
Dolby A, B, C, S, Sr su registrirane trgovinske marke kompanije Dolby Laboratories Inc., San Francisco, Kalifornija
Dolby Surround je registrirana trgovinska marka kompanije Dolby Laboratories Inc., San Francisco, Kalifornija
Odjel za računalne znanosti Lundski univerzitet S-221 00 Lund, Švedska ©1994. Denis Tumpic
verzija ©2008. Denis Tumpic
Docusaurus verzija, hrvatski prijevod napravio LLM i ručno uređivao tijekom vremena ©2025. Denis Tumpic
Švedski apstrakt
Trenutno je vrlo često da se na osobnim računalima koriste video-ray-traceri, ali audio-ray-traceri nisu dostupni u istoj raznolikosti. Na tržištu ne postoje takvi proizvodi po pristupačnim cijenama. Ovaj činjenica, zajedno s povećanim interesom za VR okoline danas, ukazuje na jasan potrebu za audio-ray-tracerom koji je istovremeno brz i lagan za korištenje. Vizualizacija koja postoji u svim video-ray-tracerima treba imati akustički ekvivalent u audio-ray-traceru, a to se naziva audialisacija (auralizacija).
Dodatno, audio-ray-trace program može biti vrlo korisno sredstvo za poboljšanje akustike već postojećih prostora. Za takvo sredstvo ne postavljaju se isti zahtjevi kao kod realnog vremena koji su potrebni za stvaranje dobre VR okoline. Ova je detaljna analiza akustičkog kriterija – 3D zvuk – u okviru definicije jakih VR okruženja. Kratak uvod u zvuk, zvučno percepciju i obradu zvuka služi kao uvod. Na kraju toga, definiram i sažimam VR okruženja. U završnom dijelu razmatram rad s 3D zvukom u odnosu na ove aspekte, te na efikasnost ljudsko-računalne interakcije i algoritme povezane s generiranjem zvučnih polja. Također se razmatra auralizacija, te se predlaže moguće rješenje za nju.
Apstrakt
This report is a thorough look at the acoustic criteria - 3D-Audio - the strong definition of VR-environment. A brief introduction to sound, the human ear and audiohandling is given, and to conclude this introduction, a definition and summary of VR-environments. Finally I discuss the implementation of 3D-Audio with regard to these aspects, and to the effectiveness of human-computer- interaction and the algorithms in the sound-field-generation module. As a conclusion, the auralization stage is discussed and a possible solution is presented.
Predgovor
Ova je rasprava obrada diplomske studijske rade izvršene u prvoj polovici 1994. godine na računalu tipa Amiga. Diplomska rada služi kao detaljna prolog akustičkim VR okruženjima. Akcent je stavljen na ljudsko-računalnu interakciju i efikasnost algoritama za sintezu zvučnih polja.
Hvala svojim roditeljima na njihovoj strpljivosti prema meni i na njihovoj vrijednoj pomoći u težim trenutcima tijekom godina.
Želim zahvaliti Michaelu Dovitsu i Larsu Malmborgu što su me godinama poticali zanimljivim idejama i eksperimentalnim projektima. Za prvu visokokvalitetnu tiskanu verziju, Lars mi je omogućio korištenje njegove HP-550C.
Želim zahvaliti Larsu Holmgrenu na njegovoj prezentaciji video-ray-tracer Lightwave.
Želim zahvaliti Roberthu Franku što mi je pružio mnogo konstruktivne kritike i pomogao u korekturi glavnog teksta. I šaljivu bilješku na stranici 17 također je pridonio on.
Želim zahvaliti svom mentoru iz akustike, istraživačkom inženjeru Erlingu Nilssonu, na njegovim pojašnjenjima u ovom području i na tome što je moje ambicije usmjerio u pravo vrijeme.
Na kraju, želim zahvaliti svom mentoru na Odjelu za računalnu znanost i numeričku analizu, Stenu Henrikssonu, na njegovoj vrijednoj stručnoj znanosti i mišljenjima.
Malmö, studeni 1994. Denis Tumpic
Načela zvuka i uha
It has long been an axiom of mine that the little things are infinitely the most important.
Sir Arthur Conan Doyle
Ovdje slijedi kratki uvod u prirodu zvuka i sluha. Glavni razlog za pisanje ovog poglavlja je da ljudi koji nemaju nikakvo razumijevanje kako zvuk funkcioniše mogu stvoriti svoju predstavu o ovome. Čak i "stari lisice" u akustici trebaju pročitati ovo poglavlje kako bi podržali moju daljnju tekuću argumentaciju u ostalim poglavljima.
Pokušao sam istaknuti manje očigledne probleme u akustici kako bih pokazao koje su stvarne teškoće. Za vrlo dobar pregled akustike (najviše u prostorijama), preporučujem čitaocima knjigu "Room Acoustics" autora Heinricha Kuttruffa. Za načela uha preporučujem "Encyclopedia Britannica", jer sadrži obilan izvor informacija o ovom predmetu. Također, "Audio-Engineering Handbook" sastavljen od strane K. Blaira Benson-a je vrlo dobra i korisna čitanka za one koji su zainteresirani i za tehnički aspekt.
Priroda zvuka
Zvuk nije u potpunosti različit od svjetla po prirodi. Razlika je u tome što se radi o gušćenjima i razrjeđenjima sredstva, umjesto kontinuiranog toka fotona. Zvuk se širi longitudinalno, u suprotnosti od transverzalnog širenja svjetla, što je prikazano na slici ispod.
U svakodnevnom životu smo stalno izloženi različitim vrstama zvuka. To može biti duboki tonovi koji uzrokuju vibracije predmeta. Ovi tonovi se obično nazivaju infrazvučnim tonovima, a naša uha ih ne čuju dobro; umjesto toga, periferija tijela lagano vibrira. Ovaj fenomen su svi primjetili koji su bili pretjecani većim kamionom dok su vozili bicikl. Posebno kada kamion ubrzava, javlja se ovaj fenomen. U infrazvučne tonove spadaju svi čisti tonovi ispod 20 Hz. Pod čistim tonovima podrazumijevam tonove koji se sastoje od jednostavne sinusne valne forme.
Način na koji štakorci (Chiroptera) otkrivaju promjene vrlo je impresivan i može se najlakše usporediti s radarom (RAdio Detecting And Ranging). U suprotnosti od radiovalova radara, štakorac emitira visoki ton u svojem smjeru kretanja kako bi otkrio, na primjer, postoji li prepreka ili promjena na njegovom putu [1,2]. Ovaj visoki ton naziva se ultrazvučnim tonom, a svi čisti tonovi iznad 20 kHz se tako nazivaju. Između infrazvučnog i ultrazvučnog frekventnog raspona nalazi se normalan ljudski opseg čujnosti.
Zato nije slučajno da High-Fidelity definira, između ostalog, da snimljeni materijal mora biti moguće reproducirati s ravnom frekvencijskom karakteristikom u rasponu od 20 Hz do 20 kHz [3, 4]. Pod ravnom frekvencijskom karakteristikom podrazumijevamo da su dozvoljene male fluktuacije u susjednim frekvencijskim rasponima, a maksimalno odstupanje od prosječne vrijednosti ne smije premašiti 3 dB. Decibel je relativna jedinica i u ovom slučaju definiran je prema , gdje P označava akustičku snagu. U prirodi postoji više izvora zvuka. U stvari, skoro sve je na neki način mali izvor zvuka. Čovjek koji govori je očito izvor zvuka, ali čak i kada je potpuno tiho, njegovo tijelo generira zvuk. Međutim, ovi zvukovi imaju znatno manje energije nego govor. Kada simfonijski orkestar svira u forte fortissimo, što se u notaciji skraćuje kao fff i znači da orkestar treba svirati izuzetno glasno, generira se samo otprilike 2,5 W akustičke snage. Naš vlastiti govor, koji u ovom kontekstu potpuno premašuje bučanje truba simfonijskog orkestra, obično dostiže otprilike 25 µW. Jasno je da smo okruženi neprestanom strujom zvuka – od igrajućih djece iz susjedstva do šuštanja krvi u ušima.
Zvukovi obično sadrže mnogo složenih tonova koji određuju njihovu karakteristiku. Ti tonovi imaju različite amplitude (intenzitete) i različita fazna položaja kako bi stvorili zvuk. Da bismo lakše mogli raditi s konceptom frekvencije, dijelimo frekventni opseg u oktave.
Riječ "oktava" potječe iz zapadnog svijeta glazbe i znači udvostručenje frekvencije. Naša glazba temelji se na modulu-8 svijetu – C1 D E F G A H C2 (oktava = 8). Matematički bi to moglo biti modulo-7, ali glazbenici ne koriste nulu kao početnu referencu. Treba dodati da ovdje zanemarujemo "crne tipke", jer su one kasnije dodane. Akustički mjerenja obično se dijele u oktavne intervale, jer tako dobivamo prirodan i jednostavan prikaz kada promatramo glazbeni materijal.
Pri frekvencijskoj analizi (Fourierova analiza) zvuka možemo vizualizirati njegovu prirodu. Da bismo razložili zvuk na njegove osnovne sastavne dijelove, možemo pustiti bandpas filter da radi na zvučnim podacima koji dolaze s mikrofona. Ovi bandpas filteri trebaju imati disjunktne (nepreklapajuće) frekvencijske granice, a njihova unija treba pokriti cijeli frekvencijski raspon koji promatramo, ako želimo dobru vizualizaciju (slika 1.3). Radi jasnoće, bandpas filter je filter koji jakim mjerom usporava sve frekvencije koje su iznad gornje granice i ispod donje granice (vidi također rezonancu). Filteri su, međutim, veliki područje koje neću detaljno obrađivati. Oni koji žele saznati više o filterima mogu pročitati o tome u knjigama o telekomunikacijama.
Ako integriramo energiju u razloženim frekvencijskim pojasevima tijekom određenog vremenskog perioda, koji ne mora biti isti za svaki filter, možemo vizualizirati informacije na relativno jednostavan način. Ova vizualizacija naziva se zvučni spektar i može biti prikladna metoda za prikazivanje kako je zvuk građen, posebno tijekom zvučne proizvodnje.
Proširenje zvuka
Proširenje zvuka nije potpuno jednostavno. Iako se čini da je priroda zvuka jednostavna, važno je napomenuti da se radi o mehaničkim titranjima. Čitatelju se preporučuje da ovo ima na umu pri daljnjoj čitanju. Također, važno je napomenuti da zvuk ne može da se širi u vakuumu, jer vakuум ne sadrži nikakvu materiju koja bi mogla izazvati promjene pritiska potrebne za širenje zvuka. Budući da smo okruženi ogromnim količinama materijala koji imaju različita agregatna stanja (pri različitim pritiscima i temperaturama), to čini teškim da se izvedu opće točne kalkulacije i pretpostavke. Međutim, postoje nekoliko osnovnih principa koji vrijede i za svjetlost.
Pretpostavljamo da imamo kružno zračenje izvora, što znači da izvor zrači svoju energiju jednoliko u svim smjerovima. Neka on pošalje kratki impulz, a pomoću mikrofona registriramo energiju koja se prima na različitim udaljenostima od izvora zvuka. Ako ovo eksperimentiramo na otvorenom, bez većih objekata koji bi smetali našim mjerenjima, pronaći ćemo da se energija smanjuje kvadratno s udaljenosti.
Također, bez većih ograničenja možemo reći da, sve dok amplituda nije ekstremna, razrjeđenja i gušćenja će se širiti konstantnom brzinom. Brzina širenja zvuka u zraku pri normalnoj vlažnosti zraka i °C iznosi otprilike 343 m/s. Ova brzina je nešto skromna u usporedbi s brzinom svjetlosti od otprilike 300.000.000 m/s u vakuumu. Međutim, brzina zvuka je i dalje znatno brža od mojeg automobila, čak i uz nizbrdicu, povoljni vjetar i domaće želje.
Refleksija i apsorpcija
Svaret är att vi alla någon gång har blivit förvirrade över att se ljudkällan, men höra dess ljud komma från ett helt annat håll. Under extrema förhållanden kan detta inträffa. Direktljudet absorberas så mycket att reflektionerna dominerar ljudbilden. Detta leder till att ljudkällan verkar delokaliserad, och det känns som om ljudet inte har någon kropp. Den naiva tänker säkert att ljud är som ljus vid reflektion och absorption, men det är en mycket grov uppskattning som endast fungerar i mycket enkla fall. När det gäller ljudreflektion beror den reflekterade ljudvågen på infallsvinkeln, ytans beskaffenhet, massan av reflektionsobjektet och ljudets karaktär.
Att reflektionen beror på ljudets karaktär innebär att den är frekvens- och fasberoende. Dessutom har vi det stora problemet att plana ljudvågor oftast inte existerar i naturen. En plan ljudvåg beror bara på tid och en riktning. Detta innebär att vi aldrig kan ha parallella ljudvågor. Därmed är hypotesen att använda ljusets natur i beräkningar av ljudets utbredning något missvisande.
Interferens
Låt oss betrakta två identiska ljudkällor som utsänder koherenta signaler. Dessa ljudkällor är godtyckligt placerade i rummet. Enligt principen om superposition, som också gäller för elektriska signaler, adderas bidragen från ljudkällorna linjärt för varje punkt i rummet. Med punkt menar jag här ett litet, begränsat område som kan innehålla den högsta frekvensen i ljudets karaktär. Observera att detta område också beror på mediumet i vilket ljudet existerar.
Interferens brukar podijeliti na dvije grupe: konstruktivnu i destruktivnu. Kada je riječ o konstruktivnoj interferenciji, dvije izvori zvuka surađuju u točki koju promatramo. Oni titraju u fazi i uzrokuju pojačanje signala. Destruktivna interferencija nastaje kada izvori zvuka ne titraju u fazi i dovodi do slabljenja signala u točki, što je prikazano na gornjoj slici. U prirodi ovaj fenomen nastaje prirodno zbog interferencije između direktnog i reflektiranog zvuka. Interferencija se može koristiti u praktične svrhe kao sredstvo za gašenje buke. Jednostavna ideja je postaviti mikrofone blizu izvora buke, a na odgovarajućoj udaljenosti postaviti zvučnik koji s fazno pomaknutim signalom poništava izvor buke. Ova ideja naziva se aktivno gašenje zvuka. Iako se čini relativno jednostavno izgraditi prototip, imamo neke probleme s kojima se moramo nositi. Prvi problem je što dodajemo zvučnu energiju u sustav. Budući da dodana energija ne može biti odabranja (vidi ravne zvučne valove), naš prototip će uzrokovati pojačanja u određenim točkama. Buha je često kompleksne zvučne prirode koja ovisi o vremenu, što nam dodaje još jedan težak problem. Iako nije potpuno nemoguće napraviti aktivne gašače zvuka, s današnjom tehnologijom je to ipak prekomjerno skupo u usporedbi s pasivnim zvučnim apsorberima.
Difrakcija
Ovaj fenomen je jednostavan za razumijevanje, ali njegova priroda je vrlo složena. Fenomen nastaje kada se zvuk savija oko objekta. Tijekom difrakcije, valna fronta se omete, a rezultat je da možemo čuti oko uglova. Koliko zvuka difraktira ovisi o obliku objekta koji stvara sjenu i karakteru zvuka. Niskofrekventne komponente u zvučnom karakteru nisu ometene malim objektima. S druge strane, visokofrekventne komponente, koje imaju znatno manju valnu duljinu, lako se ometaju raznim zasjenjujućim objektima na putu. Svi smo nekada vidjeli kako vodene valove s dugim valovima ne diraju buje koje su slučajno na putu.
Difrakcijski fenomen ne koristimo prilikom geometrijske interpretacije širenja zvuka, jer je glavni postulat geometrijske interpretacije priroda pravih linija. Kada se radi o složenim zvučnim karakteristikama širokog frekvencijskog raspona, a izvori zvuka nisu koherentni, može se zanemariti i interferencija [5].
Refrakcija
Zvuk koji putuje dugim udaljenostima vjerojatno prolazi kroz različite promjene temperature i/ili strujanja. Kada zvuk putuje prema gradijentu promjene, zvučni valovi se savijaju, a rezultat možemo najbolje usporediti s optičkom lećom. Prirodno se refrakcija javlja kada postoji temperaturna inverzija/povoljni vjetar i temperaturni gradijent/protivni vjetar. Kada obrađujemo prostorije manje od 10000 m³, možemo zanemariti ove efekte jer razlike u temperaturi ne dosežu ni jedan cijeli stupanj, a vjetar obično ne javlja u zatvorenim prostorijama. Treba dodati da ljudsko tjelesno toplina, koja stvara plašt oko njegova tijela [6], ima dovoljne temperaturne razlike, ali njegova ekstenzija je u normalnim uvjetima toliko ograničena da ne stvara značajan utjecaj na zvučno iskustvo.
Rezonancija
Kada na titrajni sustav djeluje potičuća sila, sustav će titrati u skladu s tom potičućom silom. Kada uklonimo poticanje, sustav će se prilagoditi svojoj prirodnoj frekvenciji. Ova frekvencija naziva se rezonantna frekvencija i vrlo je važna u izračunima svih titrajnih sustava. Teorijski se gotovo sve u fizičkom svijetu može izraziti kao Taylorov razvoj. Ako u ovom Taylorovom razvoju odbacimo sve članove više od drugog reda, preostaje nam diferencijalna jednadžba drugog reda koju znamo kao titrajni sustav. Ova grub procjena ukazuje da je sve u prirodi titrajni sustav. Titrajni sustav se može opisati na mnogo različitih načina, ali najčešći način je korištenjem faktora dobre kvalitete Q.
Važnost faktora dobre kvalitete u radio-prijemnicima, zvučnicima i glazbenim instrumentima je vrlo velika. Da bi radio-prijemnik imao dobru selektivnost (sposobnost odabira), potreban je visok Q-valor u selektivnom modulu (HF stupnju), koji izdvaja željenu radnu postaju iz radio-valova. Zvučnički konstruktori obično grade konstrukcije s niskim Q-vrijednostima kako bi spriječili bojenje zvučne slike. U slučaju glazbenih instrumenata, cilj je jačanje karakteristika instrumenta, pa stvaratelji glazbenih instrumenata beskrajno isječu i poliraju instrument dok ne postigne prave rezonantne karakteristike.
Smjernost
Predajnici koji su sferično zračeći nemaju određen smjer svojih predajnih valova, jer se šire jednoliko. Ovo vrijedi i za primatelje, ali s razlikom da su zvučni valovi usmjereni prema njima, a ne od njih. Većina predajnika međutim nije sferično zračeći, već ima određeni smjer u kojem šalju informacije. Ovaj smjer je također ovisan o frekvenciji, što se može vidjeti na donjim ilustracijama. Ovo čini jasnim da su niske frekvencije znatno sferičnije od visokih. Dodatno otežavanje proračuna je činjenica da je smjernost ovisna o konstrukciji predajnika.
Osjek
Prvi zvuk koji čuva slušatelj je direktni zvuk iz izvora, koji se širi pravom linijom prema njenim ušima. Ovo je zakon prve valne fronte, a L. Cremer je bio prvi koji je shvatio i formulirao ovu činjenicu. Nakon direktnog zvuka dolaze ranje refleksije s tavanice, zidova, poda i raznih velikih predmeta. Ranje refleksije imaju duži put za prijelaz i stižu do naših ušiju kasnije, obično unutar prvih desetinki sekunde. Ako se nakon prvih desetinki sekunde pojavi vrlo jaka refleksija, smatramo je ojekom. Ojek je, u suprotnosti od neodređenog, mutnog signala koji čini oglas, jasno prepoznatljiv zvučni signal. Zvukovi koji dolaze kasnije i koji nisu refleksiji u pravom smislu (refleksi višeg reda) smatraju se odbijenim zvucima. Vrijeme trajanja odbijenog zvuka, koje je važan dio akustičkih proračuna, može se izračunati pomoću Sabineove formule. Postoji više različitih formula za izračunavanje vremena odbijanja, ali navedena je najbolja za svrhu u općim modelima. Kada izračunamo vrijeme odbijanja (), možemo primijeniti različita akustička kriterija kvalitete na posmatranom prostoru. Ovi kriteriji kvalitete koriste impulsni odziv prostora, koji u vizualiziranom obliku nazivamo reflektogramom i predstavlja funkciju zvučnog tlaka u odnosu na vrijeme (vidi sliku 1.10).
Da bismo dobili impulsni odziv prostora, generiramo vrlo kratku energijsku pulsaciju, Diracovu impulsnu funkciju. Diracova impulsna funkcija je puls čija se cijela energija nalazi u početnom trenutku – potpunu definiciju pogledajte u dodatku B. Ovaj impuls može se s dovoljnom preciznošću ostvariti pomoću pištolja ili klapanja rukama. Najkorisniji akustički kriteriji su Jasnoća, Razumljivost, Vrijeme porasta i Bočna učinkovitost. Ovi kriteriji su subjektivno razvijeni eksperimentalnim putem, ali vrlo su korisni u akustičkom projektiranju.
Disperzija
Kada zvuk propaguira kroz medij koji ne širi frekvencije istom brzinom, javlja se disperzija. Ovaj fenomen najčešće se pojavljuje kada zvuk putuje kroz viskozne tekućine i gušće plinove. U ovim medijima, brzina zvuka raste s povišenom frekvencijom, a treba primjetiti da je ovo u direktnoj suprotnosti s optičkom disperzijom u običnim staklenim medijima.
Dopplerov efekt
Do sada smo promatrali samo mirujuće izvore zvuka i prijemnike. Kada dozvolimo da izvori i prijemnici zvuka budu pokretni objekti u prostoru, zvučne valove se komprimiraju u smjeru kretanja. Ova kompresija uzrokuje pomak zvučne karakteristike prema višim frekvencijama. U smjeru udaljavanja, zvučni valovi se šire, što dovodi do pomaka prema nižim frekvencijama. Ovaj fenomen javlja se i kod svjetlosti, što je jedan od razloga zašto možemo utvrditi da li se nebesko tijelo kreće prema nama ili od nas.
Dopplerov efekt je dobio ime po austrijskom fizičaru Christianu Doppleru. On je primjetio da se svištanje vlaka koji je napuštao stanicu promijenilo po zvučnoj karakteristici. Međutim, to nije bio samo Dopplerov efekt koji je čuo; refrakcija je također postojala zbog turbulentnih struja koje su se javljale oko vlaka tijekom kretanja. Ove turbulentne struje neću detaljno razmatrati, jer je opće prihvaćeno da su to haotični sustavi, a računalna snaga potrebna za njihovo numeričko rješavanje je ogromna.
Iskustvo zvuka
U svakodnevnom životu ne zanimamo se za kvalitet zvuka koji dostiže naše uši. To je prilikom slušanja glazbe i govora kada posjećujemo predavanjsku dvoranu, operu, kazalište ili kinematografiju da tražimo određeni kvalitet zvuka. U nastavku su navedeni neki kriteriji, odabrani dijelovi iz [7], koje slušatelj može koristiti za karakterizaciju kvaliteta zvuka.
Jasnoća (Clarity)
Visoke ocjene u ovoj kategoriji zahtijevaju akustički sustav koji obnavlja širok spektar frekvencija, ima ravnu frekvencijsku karakteristiku i nisku nestacionarnu distorziju. Kriterij nestacionarne distorzije treba uzeti u obzir kada razmatramo reprodukcijske sustave kao što su zvučnici i slično.
Svjetlina, oštrina i punoća
Kada akustički sustav obnavlja visoke frekvencije s malo preuveličanim tonom, ovo se doživljava kao svjetlina (brightness). Pri još većem preuveličavanju toga, iskustvo postaje oštrina (sharpness), u određenoj mjeri i vičljivost. Suprotno, kada su niske frekvencije dominirajuće, to se naziva punoća (fullness).
Osjećaj prostora i blizina
Ovi kriteriji su gotovo samopojašnjivi – osjećaj prostora (spaciousness) raste kada visokofrekventni materijal (tipično područje od 500 do 4000 Hz) koji dostiže naše uši ima značajne razlike (niska korelacija). Što su manje te razlike, to se zvuk čini bližim slušatelju.
Glasnoća (Loudness)
Ovaj kriterij je samopojašnjiv, ali ne smije se miješati s oštrinom niti promatrati kao vrlo neprijatno iskustvo.
Slušni organ
Ovdje je kratak uvod u uho i njegovu anatomijsku strukturu. Također, imam kratko objašnjenje o novijim tehnikama kompresije zvuka.
Anatomijska struktura uha
Uši su naše antene za primanje zvuka i mogu se podijeliti u tri glavna dijela (pogledajte gornju sliku). Vanjsko uho, čija je forma slična trubi, djeluje kao usmjerena pojačavačka antena. Čitatelj bi trebao sjetiti usmjeravanja trube iz prethodnog odjeljka. Pojačanje nastaje jer se velika površina zvučnog tlaka na vanjskom uhu smanjuje na malu površinu zvučnog tlaka u unutarnjem uhu, a budući da je energija ista, ali koncentriranija, dolazi do pojačanja zvuka (tlak raste smanjenjem površine). Prema Shawu [8], frekvencije iznad otprilike 2 kHz postaju refleksivne i rezonantne u kompleksnoj strukturi vanjskog uha, što uzrokuje bojenje primljenog zvuka.
Kada zvučne valove dostignu bubnenu opnu, nakon što su difraktirani glavom i obojeni vanjskim uhom, promjene zračnog tlaka pretvaraju se u promjene tekućinskog tlaka u srednjem uhu, a zatim u električne živčane impulse u unutarnjem uhu koji šalju signale dalje mozgu za analizu. Naša uha su najosjetljivija oko područja 4 kHz, a najmanje osjetljiva u niskom frekvencijskom području, što je prikazano na slici 1.12. Za daljnje čitanje preporučujem "Encyclopedia Britannica" [9].
Slušna školjka ne dobiva informacije isključivo iz vanjskog uha, već naša lubanja pruža veliki dio zvuka jer je kost dobar vodič zvuka. Jednostavan eksperiment je da zahvatite mehanički sat i "ćete čuti" tikanje.
Kada slušamo s slušalicama, nedostaje dodatna informacija iz ove kostne provodljivosti, pa se zvučna slika čini malo "tupom", ali ne potpuno bez zvuka. Naš vlastiti govor putuje uglavnom ovim putem kroz lubanju. Zbog toga imamo neprijateljstvo prema slušanju vlastitog glasa nakon snimanja na traku. Zvuk se jako i različito oboji. Nešto što dodatno dublji osjećaj zvučnog iskustva, a što se ne javlja prilikom slušanja slušalica, je kada osjećamo zvuk u trbuhu, posebno vrlo niske tonove s visokim pritiskom zvuka. Faktor koji većina ljudi ne poznaje ili ne razmišlja o njemu je kada nakon određenog vremena provedenog na otvorenom u hladnoći uđemo unutra i zagrijavamo se. Da bismo potpuno uživali, počinjemo slušati malo glazbe. Ono što tada osjećamo je da sve zvuči kao smeće, jer su naša bubnana blanša čvrsta nakon boravka na otvorenom. Postoje i dodatni razlozi zašto zvuči onako kako zvuči, ali najveći razlog je upravo navedeni. Ovaj fenomen javlja se pri svim većim promjenama klime, ali jačina iskustva je vrlo individualna.
Masiranje
Razina zvuka iz izvora koji interagira s drugim izvorima zvuka, bit će obojena tim drugim izvorima. Ovo bojenje naziva se masiranje, a osnovna frekvencija međusobno djelujućih izvora zvuka određuje gdje u frekvencijskom opsegu masiranje ima najveći učinak. Harmonike osnovne frekvencije doprinose masiranju na višim frekvencijama, a podtonovi, koji su rjeđi i više prigušeni, doprinose u nižim frekvencijskim dijelovima.
Ovo je pojednostavljena slika cjeline, jer kompleksni zvuk koji ne dolazi iz svijeta glazbe nema jasno definiranu osnovnu frekvenciju s harmonijskom prirodom. Može se činiti malo zbunjujuće da zvuk ima nejasnu osnovnu frekvenciju, i evo objašnjenja. Osnovna frekvencija može se definirati kao prva frekvencija koja se pojavljuje u ukupnoj frekvencijskoj analizi zvuka. Ako osnovnu frekvenciju ovisimo o vremenu (mali vremenski intervali manji od otprilike 30 ms), što je često slučaj u kompleksnim okolnostima, osnovna frekvencija će biti nejasna. Kad je riječ o čistim muzičkim zvukovima, kasnija predstava je nešto suvišna, jer većina zvukova s nedovoljno jasnim osnovnim tonovima su disonantni i ne mogu se koristiti u "stvarnim" muzičkim djelima. Harmonijske nadtonove osnovnog tona mogu biti jače od samog osnovnog tona, a za sve muzičke instrumente ovi nadtonovi su vrlo važni. Nešto što dodatno oblikuje zvučnu karakteristiku instrumenta je činjenica da li najjači nadton ima konstantnu energiju, neovisno o osnovnom tonu (formanti). Za potpunu informaciju o muzičkim instrumentima, preporučujem zainteresiranim čitaocima [10,11].
Maskiranje nije uvijek nepoželjno, jer može sakriti lošije distorzije koje su mnogo disonantnije u muzičkom kontekstu. Kada izvori zvuka interagiraju u istom vremenskom i frekvencijskom domenu, to se naziva simultano maskiranje. Iz prethodnih razmišljanja jasno je da zvukovi s visokim niskofrekventnim komponentama lakše ometaju zvukove s visokim visokofrekventnim komponentama nego obrnuto. Često se izvori zvuka ne ponašaju u istom vremenskom domenu, a tada se to naziva vremensko maskiranje. Postoje dvije vrste vremenskog maskiranja: prednje maskiranje i stražnje maskiranje. Prednje maskiranje nastaje zbog efekata koji ostaju nakon fizičkog utjecaja na naše uši. Svi smo nekad bili izloženi vrlo jakom zvuku koji je uzrokovao kratkotrajnu blago glušinu.
Primjer možda prenosi granice, ali sam princip i njegovi učinci uvijek su prisutni. Međutim, oni nisu toliko izraženi kao u ekstremnom slučaju. Budući da naš mozak obrađuje informacije paralelno i različitim brzinama, događa se i obrnuto. Ovo može izgledati malo čudno za neke čitaoce, pa evo objašnjenja. Posebno ako je kasniji zvuk znatno jači od prethodnog, neuroni [12] žele "panično obraditi" jači zvuk, što dovodi do toga da "zaborave" slabiji zvuk. Maskering ima trenutnu praktičnu primjenu u zvučnim proizvodima. Primjeri toga su Philips DCC (Digital Compact Casette) i Sony MD (Mini Disc). Da bismo uspješno komprimirali podatke na efikasan način bez gubitaka u digitalnom obliku, možemo koristiti Huffmannovo kodiranje, koje komprimira podatke do 90% ovisno o protoku podataka.
Kad je riječ o zvuku i slici, možemo dopustiti određeni gubitak izvornih podataka kako bismo postigli još veću razinu kompresije. Tada možemo koristiti fraktalnu kompresiju, ali ova tehnika je vrlo spora ako želimo izvršiti snimanje u stvarnom vremenu na medijima. Ono što preostaje je ideja koja je istovremeno efikasna i sigurna.
Ono što proizvođači su razvili, jest da se frekvencijski opseg dijeli i dijelovi analiziraju u usporedbi jedni s drugima kako bi se izračunale frekvencijske trake koje nose informacije. Trik je, međutim, uklanjanje nepotrebne informacije iz nositelja informacija, koja možda nije čujna ili vidljiva. Imajte na umu da pišem „MOŽDA“, jer kriteriji koje ova procedura odabira temelje se na vrlo individualnim faktorima. Ljudi koji nisu toliko zahtjevni u odnosu na zvuk i zapravo nikada nisu slušali glazbu koju su puštali na svojoj stereo opremi, sigurno misle da zvuči isto. Međutim, postoji značajna količina ljudi koji vole glazbu i zvučne pejzaže više od svega drugog, a oni su vrlo zahtjevni u pogledu kvalitete zvuka i mogu lako primijetiti razlike.
Akustički refleks
Manje poznati refleks u našem tijelu je akustički refleks. Ovaj refleks se nevoljno javlja kod većine ljudi kada zvučni pritisak premaši 80 dBA. Refleks služi kao zaštita naših ušiju od jakog zvuka ili od žvakanja i govor. Medicinski stručnjaci nisu jednoglasni u vezi s time koji od ova dva zaštitna mehanizma je cilj ovog refleksa, ali moje vlastito mišljenje je da su oba dovoljna da bi priroda evoluirala ovaj rješenje. Vrijeme reakcije refleksa na pragu je oko 150 ms, a za vrlo jak zvuk oko 10 ms [13]. Problem s ovom ove refleksije je što se bubnjić napinje, što smanjuje pojačanje (što je u stvari dobro), ali frekvencijska karakteristika se mijenja nelinearno (što nije dobro). Kada se jak zvuk ukloni, refleks će polako opustiti. Slabiji zvukovi (koji su u stvari potpuno čujni kada je refleks potpuno opušten) koji dolaze unutar vremenskog raspona opuštanja (vrijeme ovisi o npr. osobi, raspoloženju i klimi) neće dobro biti čuti jer refleks smanjuje zvučni tlak za između 10 i 30 dB, ovisno o zvučnim karakteristikama.
Međutim, postoji zabavna funkcija za one koji svjesno mogu utjecati na ovaj refleks, a to je smanjenje pozadinskog buka tijekom pisanja ispita ili predavanja. Ova "značajka" može čak i smanjiti govor nekog agresivnog političara. Refleks može biti koristan i kod kuće, što ilustrira sljedeći kratki šal:
Den bekymrade fru Svensson ringer sin husläkare: Snälla doktorn, det är något fel på min man. Jag kan tala till honom i timmar och efteråt verkar han inte ha hört ett ord!
Doktorn: Det är ingen sjukdom, det är skicklighet!
Nažalost, refleks ne radi za vrlo visokofrekventni vik djece, čije su zvučne mogućnosti ogromne kad to stvarno treba. Pri tranzijentnim impulsnim zvukovima (npr. Diracova impulsa) refleks jednostavno nema vremena da se aktivira, a činjenica da možete sami utjecati na refleks u takvim trenucima je od izuzetne važnosti.
Obrada zvuka
It is the nature of all greatness not to be exact.
Edmund Burke
U ovom poglavlju napisao sam vrlo kratki pregled razvoja proizvodnje signala. Učinio sam to kako bih s najvećom mogućom snagom istakao jaku stranu digitalnih medija. Na kraju razmatram probleme koji nastaju kada obradujemo signale pomoću računara. Ovdje pokazujem nedostatke koji proizlaze iz diskretizacije kontinuiranih signala.
Prilikom diskretizacije potrebna je „točna“ aritmetika pri izračunima, u suprotnosti od analogne ekvivalentne metode gdje možemo zbrajati i množiti pomoću operacijskih pojačala. Primijetite da se „točnost“ gubi u oba slučaja. Ako je signal digitalan, to se događa prilikom pretvorbe iz analognog signala, a ako su signali kontinuirani, to se događa prilikom izračuna.
Budući da sam napisao samo o stvarima koje ističu moj cilj u diplomskom radu, prikaz može izgledati malo skraćen. Da bismo istaknuli sve što me je utjecalo u ovom području, vjerojatno bi bilo potrebno napisati knjigu. Stoga preporučujem onima koji su vrlo zainteresirani za proizvodnju zvuka da se obrate na velike količine činjenica i referenci koje su sadržane u „Audio Engineering Handbook“ koji je sastavio K. Blair Benson.
Analogni zvuk
Na kraju prošlog stoljeća Thomas Alva Edison je izumio analogni zvučni snimač koji je korisniku omogućavao snimanje do 30 sekundi zvučnih podataka. Edisonov zvučni snimač je izrezivao trag na cilindru prekrivenom folijom, a kvaliteta zvuka bila je iznenađujuće dobra. Kasnije je danski pronalazač Valdemar Poulsen izumio prvi magnetni zvučni snimač. Zvučni podaci su se snimali na čeličnoj žici i zvuk je bio bolji nego kod Edisonove mašine, jer je električna snaga bila veća iz magnetnih fluktuacija nego iz Edisonovih rezanih fluktuacija. Od tada je ova tehnika unaprijeđena kako bi se postigla izuzetno visoka kvaliteta zvuka, kako bi se stvorilo osjećaj potpune prirodnosti.
Prvi uređaji su bili mono, s jednim zvučnim kanalom, što se pokazalo nedovoljnim za stvaranje bogate zvučne iskustva. Većina onih koji su radili na razvoju analognog zvučnog reproduciranja je shvatila ovo, i nije dugo proteklo dok nisu nastale stereo snimke. Da bi se postigao osjećaj prostora u snimljenom zvuku, potrebno je moći reproducirati visoke frekvencije tijekom reprodukcije, u skladu s načinom na koji oko opaža udaljenost i smjer, kako je opisano u prethodnom poglavlju. Da bi se povećalo skromno (u danasšnjim mjerilima) frekvencijsko opseg ranijih mašina, potreban je bio novi pristup, jer je čelična žica bila malo nepraktična. BASF (Badische Anilin- und Soda-Fabrik) nije bio kasan da to iskoristi. Već 1928. godine su imali prototip današnjeg trake, koji je tada bio napravljen od željeznog karbonila na papirnoj osnovi. Ovi trake s magnetnim slojem od tada se koriste za zvučne snimke i pohranu podataka s računala. Problem je što su mediji sekventni, a vrijeme pretraživanja za pronalaženje dijela zvuka ili podataka ponekad može biti vrlo frustrirajuće. Da bi se olakšala obrada zvuka, proizvođači su razvili uređaje s više kanala. Trenutno postoje trake od 1 do 96 kanala za snimanje zvučnih podataka ili upravljačkih signala. Sigurno postoje produkcije studija s još naprednijim trakama, ali većina muzičkih producenata treba samo 32 kanala ili manje.
Da bi se potpuno ispunila definicija High-Fidelity, dinamika zvučnog pritiska mora biti predstavljena bez šuma i distorzije. Također, oglašavanje mora biti približeno najboljoj mogućoj razini, a kod višekanalnog snimanja međusobne razlike moraju biti potpuno očuvane [3,4].
Dinamika najboljih snimnih studija je oko 140 dB (Puk studio u Danskoj), što može izgledati suviše, jer većina popularnih muzičkih oblika ima vrlo malo dinamičko raspon (tipično manje od 20 dB). Međutim, neka ozbiljna muzika je vrlo dinamična i zahtijeva visoku dinamiku kako bi se uključile vrlo snažne partije (fff = forte fortissimo), kao i vrlo slabe (ppp = piano pianissimo). Ako zaista želimo čuti ukupno zvučno iskustvo, trebali bismo prema tablici 1.1 koristiti reprodukcijski sustav s dinamičkim rasponom od otprilike 130 dB. Za normalne ljude ovo nije nužno, niti je potrebno u svakoj situaciji. Ali za povremena zvučna iskustva, kao što su npr. u planetariju s zaslonom, to može biti vrlo korisno. Magnetband har en inbyggd gräns för det maximala möjliga dynamikomfånget, som för närvarande ligger runt 80 dB med de bästa bandspelarna. För att öka dynamikomfånget kan vi låta ljudet passera en kompressor innan det spelas in på bandet. Det finns olika system för kompression, och några exempel är Dolby A, B, C, S, SR och dbx. Dolby-brusreduceringssystemet komprimerar icke-linjärt i frekvensbandet, vilket visas i figur 2.1. Dolby SR har däremot dynamisk icke-linjär frekvensbandsuppstyckning och påminner lite om borttagning av maskat ljud (se förra kapitlet om maskning), men systemet tar inte bort informationen, utan förstärker den över bandets brusnivå eller dämpar den under distorsionsnivån.
Det sista exemplet, dbx, har en linjär kompression över hela frekvensbandet och för alla signalnivåer. Problemet med att ta in allt i ett frekvensband är att basen tenderar att fluktuera (pumpa), men moderna digitala lösningar undviker detta problem. För att sedan lyssna på det komprimerade materialet behövs en omvänd procedur, vilket kallas expansion. Märk att denna kompression/expansion inte komprimerar/expanderar data i frekvens- eller tidsled, utan i dynamikled (jfr. med förra kapitlet om maskning).
Digitalni zvuk
Iako se digitalni mediji čine novima, oni postoje još od 1961. godine, a teorija je postojala već od 1937. Godina. Istraživačima je trebalo skoro 25 godina da iz teorije naprave praksu, a danas možemo „uživati“ u digitalnom zvuku. Prednost koje nam nude digitalne metode pohrane je to što postaje lakše upravljati zabilježenim podacima. Imajte na umu da to ne postaje lakše ako ostanemo pri sekventnim trakama, pa je potreban pametniji način pohrane podataka. Da bismo povećali korisnost, podatke možemo pohraniti na kružnoj ploči. Dodatna prednost koju dobivamo time je smanjenje trošenja medija. Mehanički, ovo rješenje je jednostavno kao pločni reproduktor, ali tolerancije su značajno strožije. Važnost imati što manje mehaničkih dijelova u dizajnu je velika, jer mehaničke prijelazne stanje traju dugo i često proizvode strašne vlastite zvukove (metal protiv metala).
Većina stvari u prirodi je kontinuirana, a zvučni valovi nisu iznimka. Međutim, primijetite da se pojavljuje diskontinuitet kada „prekinemo“ zvučnu barijeru, i upravo ta diskontinuitet se čuje kao eksplozija, ali u većini slučajeva zvučni valovi su znatno blagiji. Budući da analogni mediji za pohranu u principu imaju vrlo veliku propusnu opseg, imamo širok frekvencijski opseg. Moderni videopozivnici lako registriraju podatke u frekvencijskom opsegu 0–3 MHz, a to je samo frekvencijski pas. Možemo sumnjati da je razlučivost materijala nešto prevelika, jer naši uši i oči imaju konačan broj osjetilnih stanica koje mogu obraditi dolazeće podatke. Stoga je korak do diskretizacije analognog materijala kratak. Prednost toga je što ekstremno komprimiramo količinu podataka (teoretski beskonačno), a više nam ne trebaju grube i zbunjene metode pohrane. Danasnjeh tehnologija možda ne pokazuje potencijal digitalnih medija u punoj mjeri, ali sljedeći računski primjer trebao bi raspršiti većinu nesigurnosti. Pretpostavimo da pomoću lasera (Light Amplification by Stimulated Emission of Radiation) i vrlo precizne optike možemo razdvojiti informacije na nekoliko nanometara. Smatram ovo razumnom granicom, jer se za kraće valne duljine zahtijevaju radioaktivni zraci da bi se riješila ta razdvajanja. Također, pretpostavimo da sfera promjera 1 cm sadrži digitalne informacije, gdje je svaki bit sfera nekoliko nanometara u promjeru.
Ovo nam daje približno bajtova na raspolaganje, a ako usporedimo koliko danasšnjih kompaktnih diskova (eng. Compact Disc = CD) bi bilo potrebno za pohranu ove količine podataka, dobivamo približno 3 milijarde kompaktnih diskova. Drugim riječima, možemo pohraniti živote svih ljudi u tekstualnom obliku, kao i važne slike i zvukove, u nekoliko takvih sfera. Ako komprimiramo informacije primjerice Huffmannovim kodiranjem, imat ćemo više mjesta za dodatne podatke i vjerojatno ćemo se svesti na jednu takvu sferu, a kao dodatak moći ćemo uključiti sve podatke o cijeloj povijesti svijeta, sva slike koje su ikad snimljene, filmove, ploče i pozorišne predstave.
Don't you think it's blinding??? You name it, you've got it!!!
Najveća prednost digitalno pohranjene informacije dostupne na ne-sekvencijalnim diskovima je ta da možemo „iseći i zalijepiti“ bez oštećivanja izvornih podataka. Ranije je korisnik morao direktno rezati traku kako bi postigao željeni redoslijed. Da bismo to mogli učiniti bez oštećivanja izvorne trake, morali smo napraviti kopiju i rezati u njoj. Kopiranje master trake, ako želimo dobru kvalitetu, zahtijevalo je nepotrebno dugo vrijeme, a kvaliteta je uvijek bila lošija od izvornika. Kada koristimo digitalne isječke, ostavljamo računaru da zapamti kojim redoslijedom treba reproducirati sekvence. To omogućuje da se to učini vrlo jednostavno, isječci su znatno precizniji, a vrijeme potrebno za pronalaženje pravih kutova u isječcima znatno kraće. To je suština tehnike uzorkovanja, a postupak se naziva nelinearno uređivanje.
Nelinearno uređivanje koristi se i za video produkciju, ali količina memorije i računalne moći potrebna za glatko izvođenje ovog procesa je velika (nekoliko gigabajta sekundarne memorije, nekoliko desetaka megabajta primarne memorije te vrlo dobre video procesore i dobru softversku podršku) i nije dostupna običnim ljudima. Bez obzira hoće li doći do pogoršanja zvučne ili slike kvalitete pri prelasku na digitalna medija, velike uštede vremena će više nego nadoknaditi lošiju kvalitetu, a osim toga, kvaliteta se može održati tijekom digitalnog kopiranja.
Međutim, možemo poboljšati kvalitetu muzičkog materijala jer znamo kako su karakteristike instrumenata građene. Ako harmoniziramo nadtonove na sintetiziran način i pomoću njih uklonimo bilo kakvu diskretizacijsku hrskavost signala, vratit ćemo signal prema više kontinuiranoj reprodukciji.
Kada je riječ o prirodnim zvukovima, ovaj metod nije direktno primjenjiv; potrebna je temeljna rekonstrukcija algoritma, a primjena odgovarajuće podjele informacija bi trebala biti rješenje problema. Ako već pri pohrani podijelimo zvučne podatke na harmonijski i neharmonijski dio, već smo napravili značajan korak. Harmonijski dio tretiramo kao glazbu prema gore opisanom, a neharmonijski dio aproksimiramo kubičnim splajnovima (vidi dodatak B. Napomena: ovo je samo primjer). Da bismo jednostavno mogli koristiti ovu tehniku, potrebna nam je nešto modificirana AD/DA konverzija (AD = analogno u digitalno, DA = digitalno u analogno).
Izvrsna stvar je da možemo pohraniti podatke u pokretnom zarezu s m značajnih bitova u mantisi i e bitova u eksponentu, umjesto u jednoj diskretnoj formi s m bitova u mantisi i bez eksponenta. Suvremeni napredniji procesori signala lako rade s ovim stvarima, ali su vrlo skupi i naravno nisu dostupni svakom čovjeku. Ono što karakterizira digitalni procesor signala (DSP = Digital Signal Processor) je njegova ekstremna računska moć nad podacima u pokretnom zarezu. U nekomercijalnom svijetu on se često koristi za radar i različite vrste raketa.
Prvi područja koja su ovi DSP-ovi eksploatirali, usmjerena prema općoj publici, bila su naravno u svijetu glazbe. Teškoće s kojima su glazbenici bili suočeni tijekom desetljeća gotovo su riješene, ali u svojoj "tehnološkoj opsjednutosti" neki glazbenici pogrešno koriste ovu tehniku. Rezultat je da neki stvarači uživaju u efektima kao što su kašnjenje, chorus, phasing, flanging, pitch shifting, harmonizacija, reverb i mnogi drugi. Da koriste tehniku pogrešno ne znači da to mora zvučati loše ili nezanimljivo. Radovi ovih stvarača nemaju nikakve veze sa postojećim glazbalima ili slušnim prostorima, već imaju veliki mentalni utjecaj na slušatelja. Da se ne bi ograničila ova sposobnost slobodne kreativnosti ni na bilo koji način oblikovala materijal, potrebna je oprema najmanje iste kvalitete kao i instrumenti samih stvarača (ako želimo da dostignemo njihov vrhunac). Kasniji primjeri upotrebe DSP-a su programske aplikacije za prepoznavanje teksta i glasa, realno vrijeme izobličivači slike i prepoznavanje otisaka prstiju. Sada je jasno da diskretizacija kontinuiranog signala, bilo da je to zvuk ili slika, pruža brojne dobre mogućnosti koje moramo iskoristiti do kraja.
Računski aspekt digitalnog zvuka
(Objašnjenja formula u ovom odjeljku nalaze se u dodatku B kako ne bi ometala toka.)
Važna detalj pri diskretizaciji kontinuiranih signala je brzina s koje odvajamo ulazne podatke. Ova brzina odvajanja naziva se frekvencija uzorkovanja, a dalje ću je označavati kao . Bilo da se radi o zvuku, slici ili senzorskim podacima, informacija ima određenu propusnu opseg kojeg ću nazivati B. Ovu propusnu opseg promatramo od 0 Hz do gornje granične frekvencije B Hz. Nyquistov teorem nam kaže da trebamo koji je najmanje kako bismo mogli izdvojiti sve informacije iz signala. Kada promatramo više izvora, broj kojeg ću nazivati S, B mora uključivati najveću frekvenciju koja postoji u superpoziciji signala svih izvora. Također, svi izvori moraju imati istu diskretnu širinu podataka, što mislim kada kažem razlučivost AD/DA pretvarača u bitovima, koju ću nazivati I. Prilikom superpozicije (zbrajanja) više kanala podataka potrebna je veća u usporedbi s , kako bismo izbjegli gubitak informacija u mogućim preljevima.
(dB) (0)
(bitova) (1)
U vezi s više izvora emitiranja, često imamo više primatelja (R), a iako je propusna opseg primatelja veća, ne smijemo preopteretiti sustav nepotrebnim podacima. Stoga ne mijenjamo . Promotrimo moguću simulaciju širenja zvučne valove od njihovih izvora prema primateljima. Rani refleksi koje ću nazivati (Early refleXions, s jedinicom komada) i broj aproksimacija zvuka odziva koje ću nazivati (Reverberation refleXions, s jedinicom komada), su također česti izvori u računskom smislu. Ovo nas vodi do razvoja (1):
(bitova) (2) Koliko računarske snage je potrebno da se sve ove kanale dodaju u superpoziciju signala za primatelje? Koristit ću jedinicu op, što znači zbrajanje plus množenje. Za izračunavanje potrebne računalne kapacitete s ovom NODIRAC algoritmom koristit ćemo sljedeću formulu:
(op/s) (3)
Ako želimo to učiniti u stvarnom vremenu, prema formuli 3 potrebna je ogromna računalna snaga čak i za toliko jednostavan slučaj kao što je sljedeći:
Problem 1:
Imamo dva predajnika i dva primatelja. Najviša frekvencija je 20 kHz, a imamo 23 površine koje uzrokuju ranije odbijanja. Također, aproksimiramo oglašavanje s 100 slučajnih eksponencijalno distribuiranih vremenskih točaka nakon (malo na početku, mnogo prema kraju), linearno opadajuće aproksimacije oglašavanja. Kolika je računalna snaga potrebna za rješavanje ovog problema pomoću NODIRAC algoritma?
Rješenje:
Imamo = 40 kHz, S=2, =23, =100 i R=2. Uvrštavanje u (3) daje 10 milijuna op/s.
Ako želimo napraviti „stvarnu“ studiju sobe, možemo uzorkovati sobu pomoću dirac impulsa iz svakog izvora do svakog primatelja. Nazovimo ove frekvencije uzorkovanja dirac impulsa , a vremenska duljina ovih uzorkovanja, od prve valne fronte do pada jačine signala za 60 dB, je . Ako ove uzorkovane signale sobe koristimo kao osnovu za našu simulaciju (umjesto nekoliko odbijanja i aproksimacija oglašavanja), što nazivamo NOMIX algoritmom, formula će izgledati ovako:
(op/s) (4)
Prema formuli 4, za takav vrlo jednostavan slučaj kao što je sljedeći, potrebna će nam računala s značajno većom snagom:
Problem 2: Imamo dva predajnika i dva primatelja, a najviša frekvencija je 20 kHz. Koristeći impulsnog odziva, iz Diracove impulsa trajanja 2 s i uzorkovne frekvencije od 3125 Hz od svih izvora do svih primatelja, želimo izračunati potrebnu računalnu snagu. Riješite rastavljeno problem pomoću NOMIX algoritma.
Rješenje:
Imamo = 40 kHz, S = 2, = 3125 Hz, = 2 s i R = 2.
Uvrštavanjem u (4) dobivamo 1 milijun operacija po sekundi.
Moglo bi biti dobra ideja izračunati zahtjeve za memorijom u ovim „točnim“ simulacijama. Za svaki izvor moramo pamtiti broj bajtova, koji se određuje sljedećom formulom:
(bajtova) (5)
Ukupni zahtjev za memorijom, uz uzorkovno memorijsko prostor za Diracove impulse, iznosi:
(bajtova) (6)
Problem 3:
Koliko slobodne memorije je potrebno ako imamo širinu informacijskog podatka od 16 bitova, a ostali podaci su isti kao u problemu 2?
Rješenje:
Imamo S = 2, = 40 kHz, R = 2, = 3125 Hz, = 2 s i
= 16. Uvrštavanjem u (6) dobivamo otprilike 360 kB.
Svijestimo se apsurdnosti u ovom kontekstu, jer nam je potreban računalo s vrlo visokom izračunskom snagom i relativno malo memorije. Budući da je memorija obično jeftinija od izračunske snage, to je stoga dobra ideja preusmjeriti opterećenje. Ako omogućimo superpoziciju izvora već pri diskretizaciji i omogućimo da budu dostupni u R memorijskim područjima s bitovima širine informacija, dobivamo sljedeće formule:
(op/s) (7)
(bitova) (8)
(bajtova) (9)
Ovaj algoritam nazivam MIXTHEM, i primijetite da koristi isti impulsnog odziv za svaki zvučni izvor, te stoga ne daje isti odziv filtriranja kao NOMIX algoritam.
Problem 4: Imamo dva predajnika i dva primatelja, a najviša frekvencija je 20 kHz. Koristeći impulsnog odziva, dobivenih iz jednog impulsne funkcije trajanja 2 s i uz frekvenciju odabiranja od 3125 Hz iz svih izvora do svih primatelja, želimo izračunati potrebnu računalnu snagu i zahtjeve za memorijom. Problem rješavamo pomoću MIXTHEM algoritma.
Rješenje:
Imamo =40 kHz, S=2, =3125 Hz, =2 s, =16 i R=2. Uvrštavanje u (7) daje 500 milijuna operacija po sekundi. Uvrštavanje u (8) daje =17, što znači da nam je potrebno najmanje kako bi upravljanje memorijom bilo što jednostavnije moguće. Dodatno, uvrštavanje u (9) pokazuje da nam je potrebno 625 kB za rješavanje ovog problema.
Algoritmi NOMIX i MIXTHEM ne daju iste rezultate jer koriste različite dirac-convolucije. To može izgledati besmisleno za usporedbu. Ključ je u tome da se zvukovi postanu stereoskopski uzorkovani u besrefleksnom prostoru i pohranjeni u bazi podataka. Iz te baze zatim omogućujemo računalu da preuzme prave zvukove u pravim vremenima, kako bi se ti zvukovi filtrirali pomoću MIXTHEM algoritma (ovo postaje „skoro“ točno). Čak i uz već izračunate impulsnog odzive iz svih izvora do svih primatelja, za simulaciju ovakvih vrsta širenja valova potrebna je ogromna računalna snaga.
Ni algoritam NOMIX ni MIXTHEM nisu potpuno točni u usporedbi s prirodom, ali čak i da su bili, jasno je da za takvo izvršavanje potrebna je vrlo sofisticirana oprema koja to obavlja „automatski“. Mislim ne na jednostavne DSP-ove koji su danas dostupni, već na nešto sofisticiranije uređaje koji u stvari ne koriste digitalno zbrajanje i množenje za izračune. Ako zanemarimo kriterij da dirac impulsi nisu uzorkovani u stvarnom vremenu, možemo koristiti algoritam preklapanja-dodavanja [14]. Ovaj algoritam zahtijeva otprilike tisuću puta manju računsku brzinu nego algoritam NOMIX, ali ulazni podaci će biti kašnjeni za [15]. Hardverska implementacija algoritma preklapanja-dodavanja je komercijalno dostupna u obliku FDP-1 kruga proizvedenog od strane Lake[16]. Za male prostorije ovo može biti korisno, ali za veće sale možemo zanemariti ovaj pristup jer realno vrijeme povratne informacije nije moguće s kašnjenjem od nekoliko sekundi. Analogija iz stvarnosti je upravljački sustav JAS-planeta, koji je na više prilika pokazao ovaj nedostatak (posebno ako pilot nije svjestan kašnjenja).
Nadalje, nove DSP-krugove od Texas Instruments (koji su komercijalno objavljeni jeseni 1994.) postali su vodeći u računskoj brzini ( milijardi operacija s pomičnom zarezom po sekundi). Pomoću par ovih moćnih DSP-ova možemo riješiti problem konvolucije u stvarnom vremenu, ali cijena će vjerojatno biti visoka za obične ljude, a mi moramo čekati na realno-vremensku konvoluciju za opću javnost. Imajte na umu da ne mislim direktno na DSP-krug, već na vrlo brzu memoriju koja mora biti povezana s njim. Prema približnom procjeni, potrebno je otprilike 0,5 ns brze memorije (ako su podaci u serijskom obliku) kako bi se optimalno iskoristila snaga ovih DSP-ova. Treba napomenuti da današnji računali imaju otprilike 70 ns brze memorije, što ukazuje da trebamo podijeliti podatke u otprilike 128 jednakih dijelova i konvoluirati ih paralelno. Paralelni pristup je čisto hipotetičan, jer nisam detaljno pregledao tehničke specifikacije hardvera.
Virtualna stvarnost
Between ingenuity and the analytic ability there exists a difference far greater, indeed, than that between the fancy and the imagination, but of a character very strictly analogous. It will be found, in fact, that the ingenious are always fanciful, and the truly imaginative never otherwise than analytic.
Edgar Allan Poe
Ovaj poglavlje obrađuje virtualnu stvarnost i smislu namijenjenom osobama koje se ne bave poviješću. Budući da je ovaj dio računalne znanosti relativno nov (NASA je započela s ovim početkom 80-ih godina, a VPL Research je VR učinio općenito poznatim 1989. godine), u prvoj se dijelu pokušava definirati što je „virtualna stvarnost“, a u sljedećima njene primjene. Pretpostavlja se da čitatelj dobro razumije velike računalne zahtjeve koje zahtijevaju trodimenzionalna vizualizacija (u ekstremnom slučaju stvarno-vrijeme video-ray-tracing, jedan za svako oko) i auralizacija (u ekstremnom slučaju stvarno-vrijeme konvolucije impulsnih odziva izračunatih pomoću audio-ray-tracinga, jedan za svako uho).
U definiciji koristim riječ „detaljna raznolikost“ u smislu potpune simulacije prirode u pogledu refleksije, apsorpcije, interferencije, difrakcije, refrakcije, difuzije, rezonancije i disperzije. Nisam pisao o ludim idejama koje postoje u cyberkulturi, već o realističnijim i potpuno ostvarivim idejama.
Definicija VR
Da bismo mogli definirati virtualnu stvarnost (eng. Virtual Reality = VR), moram opisati najvažnije karakteristike stvarne stvarnosti. Stvarnost osjećamo kroz vid, čujemo, osjećamo, mirisimo i okusimo. Kada smo na otvorenom i divimo se titranju stabala, vrtoglavici vode ili kretanju oblaka, možemo smatrati da je zanimljivo promatranje ovih pojava. Osnova našeg interesa je to što ono što vidimo ima vrlo visoku razinu detalja i/ili je u stalnom kretanju. Osim što vidimo širinu, visinu i dubinu, možemo promatrati svijet iz bilo koje točke.
(1) Dobro VR okruženje treba imati skalirane i glatko pokretne trodimenzionalne objekte s visokom razinom detalja. U ovom modelu trebamo imati mogućnost promatranja okoline iz bilo koje točke u bilo kojem smjeru.
U skladu s dvjema prethodnim poglavljima, zahtjev za čujnom percepcijom dodaje sljedeće proširenje:
(2) Dobro VR okruženje treba točno reproducirati širenje zvučnih valova iz zvukom generiranih objekata u binuralnu reprodukciju (auralizaciju) s visokom razinom detalja.
Naš bi život bio prilično nezanimljiv da ne možemo osjetiti oblik i težinu objekata. Iako se može činiti da vid prenosi oblik objekta, treba istaknuti da mislim na glatkoću i temperaturu površine. Ovo nam daje sljedeće proširenje:
(3) Dobro VR okruženje treba precizno prenositi teksturu, temperaturu i težinu objekata.
Čovječji mirisni osjet nije toliko razvijen kao npr. pasovski, ali je jednak sposoban ako se treningom razvije. Najvažnija uloga našeg mirisnog osjeta je povećavanje okusa tijekom jela. Mnogi ne znaju da ljudi mogu mirisom osjetiti opasnost, sigurnost i ljubav. To je moguće zbog feromona [17, 18, 19], a iako većina nas „zaboravila“ kako primjećivati ove „mirise“, možemo razvijati mirisni osjet. Ovo rasuđivanje nam daje sljedeće proširenje:
(4) Dobro VR okruženje treba moći prenositi feromone i prirodne mirise. Većina malih djece puzi po okolini i pokušava okusiti sve što može. To rade iz čiste znatiželje i kako bi stvorili shvaćanje svog okruženja. U odrasloj vrsti ne možemo slobodno hodati i okusiti sve što vidimo. Međutim, objekti u VR okolini ne moraju imati nikakvu povezanost s biljnim ili životinjskim svijetom na Zemlji.
(5) Dobra VR okolina treba u prvom redu omogućiti prepoznavanje slatkih, kiselih, solenih i gorčastih okusa prilikom oralnog unosa. Sve druge forme unosa trebaju uzrokovati kemijsku razgradnju.
Na kraju, vrlo važan zahtjev za sigurnost korisnika.
(6) Sve VR okoline moraju imati vrlo stroga sigurnosna pravila kako ne bi pogoršale zdravlje korisnika.
Primjene
Ima li čovječanstvo ikakvu upotrebu VR okolina, ili su one samo „moda“ iz Amerike kao i mnoge druge? Ovdje ću razmotriti neke oblasti koje mogu dobiti ili su već dobile veliku pomoć od VR okolina.
Medicina
Kada medicinski studenti uče kako ljudsko tijelo funkcionira, oni imaju na najbolji način skalirani plastificiran model ljudskog tijela. U naprednijim modelima, student može odvojiti različite organe za detaljnije proučavanje. Ovo se čini vrlo dobrom i jednostavnom metodom za učenje anatome. Problem je što svaki student treba imati takav model da bi učio jednako brzo, ali on je prekomjerno skup. Dodatno otežava stvar činjenica da zauzima nepotrebno mnogo prostora.
Prednosti implementacije ljudskog ili životinjskog tijela u VR okolini su u tome što možemo lako izvoditi automatizirane testove. Postaje jednostavnije prikazati kirurške postupke (svi studenti vide što vidi kirurg) i širenje bolesti. Ove prednosti dobivamo i kada koristimo strategički postavljene kamere tijekom operacija. Problem je da nam treba pacijent (živ ili mrtav) sa istim oboljenjem koje se upravo predaje kako bismo postigli dobru „mapiranje“.
Tomografija je razvoj u odnosu na običnu rendgensku sliku. Pacijent se „skenira“ u više slojeva s visokom razlučivošću u svim smjerovima. Obična rendgenska slika je relativno mutna jer filmska ploča prima rendgenske zrake kroz znatno deblje slojeve (loša dubinska razlučivost). Prednost korištenja tomografije je u tome što se može lako stvoriti trodimenzionalna slika.
Kada današnji korisnici računalne tomografije gledaju unutrašnjost pacijenta, to rade na običnom monitoru. Na najbolji način, softver računala može biti dizajniran da prikazuje homogenu trodimenzionalnu sliku bolesne regije pacijenta. Ako vizualizaciju poboljšamo vrlo dobrom VR okolinom, liječnik će još lakše otkriti moguće kirurške probleme i time izvesti sigurnije i brže zahvate. Medicinsk VR-miljé ne mora biti jednako opsežna kao jakа definicija, ali vizualni i osjetilni elementi moraju biti prisutni. Za patologe, miris može biti pomoćno sredstvo, ali općenito nije potreban. Ne znam hoće li specijalist za uši morati čuti kao svoj pacijent. Obuka medicinskih studenata u VR-milju trebala bi pružiti bolje medicinsko znanje i, nadamo se, zdravije pacijente.

Svemirska letjelica
Rano ili kasno, čovječanstvo će morati proširiti svoj pogled jer naša Zemlja neće moći zadovoljiti naše potrebe. To se može postići istraživanjem brojnih nebeskih tijela u svemiru. Jedan “mali” problem je da su najzanimljivija nebeska tijela na toliko velikoj udaljenosti da je putovanje do njih danas moguće samo u stoljećima. Da bismo riješili ovaj problem, možemo povećati brzinu i akceleraciju svemirske letjelice. Međutim, ljudsko tijelo ne može podnijeti visoke akceleracije/deceleracije (smrtonosno iznad ), pa svemirska letjelica ne može dostići maksimalnu brzinu niti zaustaviti unutar razumnog vremena.
Rješenje ovog fiziološkog problema je da se uopće ne pošalju ljudi. Sada je problem brzine značajno manji, jer se tehnička oprema može nositi s mnogo većim akceleracijama od 10g. Neoplovljene svemirske misije već su se događale u obliku Mariner (1962.-1973.), Pioneer (1972.-1973.), Viking (1975.) i Voyager svemirskih sonde (1977.) iz SAD-a te Venera (1967.-1975.) i Mars svemirske sonde (1971.) iz tadašnjeg Sovjetskog Saveza [20]. One su uzimale slike na velikoj udaljenosti, a možemo vidjeti samo vrlo velike objekte na površini. Treba dodati da su Viking sonde uzimale “zemaljske” uzorke i vrlo detaljne slike marsijanske površine. Sve to je dobro, ali nije dovoljno dobro (čak iako su ljudi hodali po Mjesecu). Čovječanstvo je uvijek željelo istraživati nepoznata mjesta i putove. Tipičan primjer je Kolumbo koji je na „primjern“ način istraživao nepoznato. Ono što je guralo istraživače bilo je želja da vide nepoznato vlastitim očima. Ako umjesto toga dopustimo našim budućim svemirskim sondama da snimaju vrlo strategijske slike kako bismo mogli stvoriti VR okolinu, lako ćemo moći istraživati moguću terraformaciju (Terra = Zemlja –> Sv. = zemljotvornost). Cijela VR definicija nije potrebna u početnoj istrazi nebeskih tijela (samo vid i okus su potrebni), ali kada bude završena kartografija, trebala bi se koristiti potpuna definicija. Imajte na umu da ne možemo imati komunikaciju između svemirske sonde i VR okoline jer su vremenski efekti preveliki, a time ne omogućuju realno vremensku povratnu informaciju o našim pokretima.
Zabava

Da bi se oslobodili težine svakodnevnih briga i olakšali umu, većina ljudi treba neku vrstu zabave. Većina želi izgubiti se u snovima koji postoje u književnoj ili filmskoj formi. Još početkom 80-ih godina, filmski stvarači su pokušavali koristiti računalno generirane okoline u svojim filmovima, uglavnom u filmovima kao što su „TRON“ i „Zadnji zvjezdni ratnik“. Problem s ovim filmovima bio je da su računalne okoline bile vrlo nerealne i nisu dovoljno prevarile oči gledatelja u bioskopu. Nedavno napravljeni filmovi poput „Terminator 2“ i „Jurassic Park“ znatno su uspjeli na ovom polju. Iako filmski stvarači još nisu dostigli krajnju granicu broja „stvarnih“ fantastičnih scena koje se mogu stvoriti pomoću dvodimenzionalnog filma, bez sumnje mogu napisati da je potrebna obnova u ovoj industriji. Da bi se povećale iluzije, potrebna je trodimenzionalna reprezentacija i visokokvalitetan zvuk. U kasnijoj fazi trebalo bi implementirati i miris. Ova VR okolina ima najteže zahtjeve, jer su ljudi općenito vrlo skeptični prema računalima i njihovom utjecaju na ljude. Stoga je kvaliteta od izuzetne važnosti da bi obični ljudi mogli prihvatiti iluzije.
Jedna mana prevelikih iluzija je ta da one mogu zavarati ljude da vjeruju u stvari koje nisu točne. Nažalost, veliki broj ljudi će koristiti VR okoline zajedno s nekom vrstom droge kako bi povećali učinak iluzije. Ovo, uz to što korisnik dobiva znatno manje pokreta, može dovesti do velikih socijalnih problema. Znanstvenici koji se bave VR okolinama trebali bi obavijestiti o mogućim socijalnim problemima za one koji će ih koristiti, npr. u filmovima i reklamama, prije nego što se te okoline objave široj javnosti.
Vojno
Sve dobre stvari mogu se koristiti za loše svrhe, a VR okoline nisu iznimka. Budući da su vremenski učinci na Zemlji relativno mali (maksimalno oko 70 ms), možemo bez većih problema postići stvarno vrijeme povratne informacije o našim pokretima. To znači da možemo jednostavno upravljati mehaničkim robotom u neprijateljskom terenu bez da sami prisutujemo. U novijim oblicima rata možemo realizirati bojno polje u potpunoj VR okolini i ostaviti one koji su zainteresirani za ljudski propad da se bave tim umjesto toga. Ti ljudi bi tada mogli iskustvo izlječiti raznim misijama masovnog ubijanja, a zatim se vratiti u „normalno“ življenje. Koliko dobro bi trebala biti napravljena ova vojna VR okolina da bi imala najveći prevencivni učinak može se raspravljati, ali vjerojatno bi zahtijevala vrlo dobre vizualne i slušne utiske.
Simulatore
Već je dugo postojalo simulatore za automobile, avione i brodove, a oni su preistorijske VR okoline. Na primjer, avionski simulatori postoje još od 1929. godine [21]. Osnovni razlog zašto ih nazivam preistorijskim je taj što korisnik sjedi u funkcionalnoj replici prave komandne mosta. To je sam po sebi dobro, jer omogućuje savršenu mapiranje. Međutim, koristimo mehaničke prekidače koji zauzimaju veliki prostor i su skupi ako želimo da budu pouzdani.
Ako pređemo na potpuno digitalno upravljanje sustavima (što je vrlo teško), možemo znatno jednostavnije dizajnirati korisničko sučelje (i u VR okolini i u stvarnosti), tako da se stroj može upravljati znatno većim brojem ljudi. Nadamo se da će učenje kompleksnih scenarija postati brže i jednostavnije. Možemo proširiti upotrebu VR okoline i implementirati je uz postojeće komandne mostove, kako bismo uklonili probleme s vidikom, poput „mrtvih kutova“.
Današnje sportske dvorane imaju razne opreme za poboljšanje zdravlja. Dugotrajna upotreba ovih uređaja je dosadna, a „pö om pö“ korisnici (kao što sam ja) se najviše trude izbjegavati njihovu upotrebu. Rješenje je izaći u prirodu i započeti zdravstveni program tamo. U budućem društvu će gustina stanovništva biti toliko velika da nećemo imati dovoljno prostora za rekreaciju u prirodnom smislu. Da li će čovjek tada morati biti zatvoren u sobi i obavljati zdravstveni program gledajući u dosadnu zid? Neka sportaktivna dijelovi stanovništva vježbaju u VR okolini koja se prilagođava osobnoj fizičkoj snazi korisnika. U ovoj okolini svi će moći jednako brzo trčati, vizualno gledano u VR okolini. Ako korisnik smatra da je pobjeda prijatna kako bi se povećala razina zanimanja, VR okolina može biti programirana da to omogući. Moja je uvjerenja da većina ljudi koji ne vole sport to čine zbog prevelike usredotočenosti na pobjedu, a kada shvate svoju lošu kondiciju tijekom „natjecanja“ protiv drugih, njihova volja se slomi i prekine sport. Osobno vidim VR okoline kao spasitelje u ovom problemu. Ove VR okoline zahtijevaju vid i slušanje kako bi se postigle dovoljno stvarne simulacije.
Računalno pomoćno dizajniranje
Arhitekti i strojni inženjeri danas imaju veliku pomoć od računalne grafike. Oni vide svoju konstrukciju još prije nego što je izgrađena i, ako program to dopušta, mogu provjeriti hoće li konstrukcija držati i funkcionirati (npr. IGRIP na računalima Silicon Graphics). Prilikom izgradnje koncertnih dvorana, može se uzeti u obzir i akustički aspekt, a auralizacija može biti ostvarena odgovarajućom softverskom i tvrđom opremom. Ovi alati značajno olakšavaju rad i smanjuju skuplje preuređivanja i greške u dizajnu. Da bismo postigli najbolju moguću konceptualizaciju, trebali bismo težiti prema vrlo perfekcionističkoj stvarnosti putem VR okolina koje korisniku nude bogatiju i više samostalno stvaralačku iskustvo.
Programerska okolina budućnosti
I potrazi za najboljom korisničkom prijateljskošću, VR okoline bi trebale biti korak u pravom smjeru. Današnje programerske okoline trpe velike mane koje možda ne primjećujemo kada ih koristimo kratko vrijeme. Zahtjev da sve bude vizualno isto, rano ili kasnije će izazvati osjećaj monotonije kod korisnika. Oni koji su programirali više od 16 sati zaredom ponekad mogu osjetiti određenu dosadu kod računala, koja ne mora biti posljedica loše prehrane ili rijetkih posjeta toaletu. Zaista, računalni sučelja prema ljudima su strašno dosadna, jer je sadržaj na zaslonu statičan. Preventivna metoda može biti boravak u VR okolini tijekom razvojnih radova, gdje vizualni efekti šalju poticajne signale mozgu. Poslodavac ne mora trošiti novac na namještaj, cvijeće i velike radne površine; umjesto toga, VR okolina (veliki visokorazlučivi tekući kristalni prikazivači na zidovima koji su povezani s VR računalom) prilagođava se ukusu korisnika.
Daljnji razvoj korisničkog sučelja bio bi da se aktivnost mozga koristi za upravljanje izgledom sučelja kako bi se održala korisnikova pažnja i raspoloženje. Danasšnji problemi koji se rješavaju pomoću računala zahtijevaju velike timove programera. Članovi ovih timova trebali bi imati sličan ukus kada je riječ o opremi i pozadinskoj glazbi, ako žele učinkovito raditi zajedno. To sam ja osobno primjetio na raznim radnim mjestima tijekom godina. Prednosti boravka u VR okruženju su u tome što članovi ne moraju biti na istom mjestu i mogu sami odabrati opremu i glazbu. Ovo će donijeti povećanje učinkovitosti, jer svi mogu imati ono što žele i time se osjećaju znatno bolje. Zašto bismo uopće trebali VR okruženja za rješavanje ovoga? To se može učiniti i danas pomoću današnje tehnologije u dvodimenzionalnom svijetu, ali nedostatak „trodimenzionalne“ ljudske komunikacije postat će veliki problem ranije ili kasnije. Ne trebamo potpunu VR definiciju u ovom okruženju, ali vizualni i slušni osjet te osjet dodira moraju biti implementirani.
Glazbeni studijski prostor
Glazbenu studiju sutrašnjice možemo vrlo korisno implementirati u VR okruženju. Prvo što glazbeni inženjer radi je da rasporedi različite glazbene instrumente (u stvari, zvučne objekte) u samostalno modeliranom virtualnom prostoru. Nakon rasporeda, ona određuje koju tonalnost će svaki objekt izvoditi te s kojom jačinom i karakterom. Da bi povećala zanimanje i smanjila predvidljivost glazbenog djela, može zatim dozvoliti da se instrumenti kreću kroz prostor ili mijenjaju svoj karakter tijekom vremena. Glazbenici širom svijeta će moći svirati u virtualnoj koncertnoj dvorani, a da i dalje budu sjednuli u svojem stolcu (glazbenik Thomas Dolby pokušava realizirati ovu ideju).
Ovo VR okruženje također će biti velika pomoć filmskoj industriji, jer će postati lakše uređivati zvučne efekte u filmovima. Iako su današnji bolji filmski projekcije opremljeni Dolby Surround (ne isti Dolby kao gore), koji podsjeća na ovo VR okruženje, većina njih trpi značajne nedostatke u audio-medijskom aspektu. Da bi se postigla najviša moguća kvaliteta zvuka, ovo VR okruženje treba staviti veliki naglasak na slušni kriterij u definiciji, ali i vizualni aspekt treba implementirati kako bi se olakšalo rukovanje.
Glavni problem
Das also war des Pudels Kern!
Johann Wolfgang Von Goethe
U ovom poglavlju opisujem svoj završni rad tako da prvo definiram problem. Slijedi analiza problema u njegovim najvažnijim dijelovima. Na kraju, kratak pregled različitih programerskih metoda. Glavni fokus ovog završnog rada je audio-ray-tracing u VR okruženju i njegova implementacija. Ova ideja nije potpuno nova, jer su neki ključni dijelovi već bili formulisani na stabilnoj osnovi 1992. godine [22, 23, 24, 25].
Sam metod audio-ray-tracing je bio poznat još od 1967. godine [26], a nedavno je počeo privlačiti pažnju mnogih istraživača zbog veće dostupnosti moćnih računara. Moja procjena raspoloživosti materijala (vrlo malo u usporedbi s video-ray-tracingom) u ovom području dala mi osjećaj da postoji vrlo malo ljudi koji stvarno razvijaju algoritme za audio-visualna VR okruženja.
Na početku može se imati naivni stav da su metode rješavanja iste za video- i audio-ray-tracer. Međutim, prva poglavlja pokazuju probleme koje uključuje izračunavanje širenja zvuka i moguće aproksimacije koje možemo napraviti. Samu implementaciju su pomogle glavne knjige Amiga sustava, različite knjige o C-u te GUI alat za prikaz (vidi Knjige, softver i oprema).
Problemformulering
Aktuellt är video-ray-tracers mycket vanliga på persondatorer (speciellt för Amiga-datorfamiljen), ali audio-ray-tracers inte finns i samma mångfald. Kommerciellt tillgängliga sådana verktyg finns inte vid rimliga priser. Programmen Odeon i Computer Aided Theater Technique (CATT), som är tillgängliga för IBM-kompatibla PC:er, är båda extremt dyra och långt från användarvänliga. Detta faktum, kombinerat med ökade intresset för VR-miljöer idag (se föregående kapitel om Virtual Reality), indikerar ett starkt behov av en audio-ray-tracer som är både snabb och lätt att använda.
Det som bör ingå i ett ray-trace-program är en enkel grafisk 3D-editor, möjlighet att definiera objektens material och typ, samt möjlighet att låta objekten följa fördefinierade rörelsemönster. Den grafiska 3D-editorn kan implementeras med mycket komplexa funktioner, till exempel "beta-splines" med "hidden surface removal". Att skapa den perfekta 3D-editorn har inte varit mitt huvudmål, men dess användbarhet har i stor utsträckning formar programmet. För en audio-ray-tracer kan objektens material kopplas till ytornas absorptions- och riktningsegenskaper (direktivitet). De olika typerna av objekt kan vara möbler, sändare och mottagare. Rörelsemönstren ska inkludera både morphing (omformning) och translation i tre dimensioner (läsaren uppmanas att påminna sig om den starka VR-definitionen). Programmet ska kunna hantera ovan nämnda funktioner med enkelhet, så att användaren inte hindras i sin kreativitet eller förlorar värdefull fritid. Visualisering som finns i alla video-ray-tracers bör också ha en god liknande ekvivalent i audio-ray-tracer, vilket vi kallar auralisering. Denna term har Chalmers Tekniska Högskola gjort till de facto-standard. Med tanke på den extremt höga beräkningskraft som krävs för auralisering (som bevisas i Beräkningsaspekt på digital audio) i förhållande till den enkla hårdvara som vanliga persondatorer har, är detta inte det främsta målet, men det finns i åtanke för framtida hårdvaruimplementationer.
En obligatorisk del av auralisering är att kunna sampla befintliga rum med hjälp av Dirac-pulser för användning och jämförelse i beräknade impulsrespons. Denna del är för enkel att implementera, och jag nämner den här endast som ett möjligt utökning av mitt program. Egentligen är den redan implementerad eftersom jag kan använda mig av de stora mängder samplingprogram som finns tillgängliga och köra samplingprogrammet parallellt med audio-ray-trace-programmet.
En mycket lönsam och fullt realiserbar idé är att låta två persondatorer kommunicera med varandra medan användarna befinner sig i en gemensam audio/video-miljö, som ett slags första steg mot framtida goda VR-miljöer. Denna del har jag haft i sikte, men eftersom en datalog egentliga kunskapsområde inte ligger inom hårdvarubyggnad, har jag utelämnat idén från denna framställning. Lösningen kräver snabbare kommunikation än vanlig seriell överföring. Det går att göra det med parallell överföring, men det blir ca 8–32 gånger dyrare (beroende på bredd), och därför är denna lösning inte en bra möjlighet. Također je izostavljena sljedeća ideja jer je američki proizvođač hardvera prešao u stečaj. Pomoću posebnih naočala (zapravo dvije jednopikselske tekuće kristalne ekrane) koje naizmjenično propuštaju svaku drugu sliku s računalnog monitora u svako oko, možemo stvoriti vrlo realistične trodimenzionalne slike kako bismo povećali korisničku prijelaznost u 3D uređivaču [27, 28]. Zapravo, hardver je vrlo jednostavan za izgradnju samostalno, ali opet je glavni cilj dataloga razvoj algoritama.
Dodatno, program za audio-ray-tracing može biti vrlo korisno sredstvo za poboljšanje akustike već postojećih prostora. Ovo je moguće ako se ispravne aproksimacije implementiraju u program za simulaciju širenja zvuka, a ako zanemarimo vrlo stroge zahtjeve audio-VR okoline čiji je glavni postulat realno vrijeme povratne informacije.
Izbor računala je vrlo temeljan, a kao datalog treba tražiti dobar operativni sustav koji podržava kvalitetan hardver. Ovi kriteriji ne bi trebali dovesti do zanemarivanja ekonomske strane, već je treba postaviti na vrhunac. Računalna snaga treba se koristiti na takav način da se učinkovitost algoritama najjednostavnijim sredstvima prikaže na najmanje moguće sredstve. Za razvojne radove potreban je najmanje "preemptive multitasking" ako programer želi raditi učinkovito. Oblik "beskonačnog toka svijesti" javlja se prilikom korištenja ovih sustava. Koristen velikih radnih stanica za ovaj diplomski rad bio bi bio lakši, ali njihova izračunska performansa skriva loše algoritme. Budući da sam ogorčen protivnik sporih grafičkih sučelja i neefikasno programiranih pseudooperacijskih sustava, izabrao sam Intuition s Amiga-OSom kao temeljem, moju omiljenu okolinu, za realizaciju ovog diplomskog rada. Diplomski rad je također prirodna nastavak Amiga računala vodeće VR tradicije. Jedino što mogu smatrati lošim u Amiga-OS-u je njegova uprava memorijom, jer nije napisan za MMU (Memory Management Unit) hardver. Temelj ovoga je Amigina grafika pomoćna procesor (Agnes) koja može premještati podatke u programskoj memoriji. Ovo, zajedno s nekoliko dodatnih pomoćnih procesora (Denise, Paula, Buster, Amber, Ramsey, Gary i drugi), je uzrok Amiga arhitekture memorijske učinkovitosti i brzine.
Ova Amiga arhitektura (prava hibridna mašina) postojala je komercijalno dostupna od 1985. godine i danas, unatoč starosti, predstavlja vrlo korisni računalo. Međutim, u dužem roku gubi na performansama prema većim RISC (Reduced Instruction Set Computer) mašinama. Zbog toga nisam optimizirao određene algoritme u čistom assemblerskom kodu. Algoritmi napravljeni prije 1989. godine su u assemblerskom kodu, ali se ne koriste u implementaciji jer su došli brži algoritmi (NAPOMENA: moji vlastiti).
Pored izbora računala, jezik programiranja vrlo je važan temelj. Kompleksni jezici često generiraju lošije prijevode u osnovne instrukcije računala (posebno u CISC (Complex Instruction Set Computer) arhitekturi), i bilo mi je jasno da Pascal (u stvari nije kompleksan, ali neefikasniji od kompiliranog BASIC-a na Amiga računalima!!!), Modula-2, Simula, Cluster i Modula-3 nisu dovoljno učinkoviti. Suvremeni OOP (Object Oriented Programming) jezici C++ (Definicija 2.1) i Oberon nisu potpuno razvijeni za Amigu, a uobičajeni C++ (Definicija 1.0) bio je prenepouzdan. Preostale moguće opcije su assemblerski jezik, DSPC (Denis Tumpić Structured Assembler Programming Code, razvijen 1986.-1988., koji nije korišten u ovoj implementaciji jer je RISC bio u tijeku) i programski jezik C. Od ovih sam izabrao C jer je to relativno jednostavan i vrlo slobodan jezik za rad. Svi mogu programirati u C-u jer je izgrađen od malih sredstava, a sve je dopušteno (ako usporedimo s gore navedenim „pravim“ računalnim jezicima – osim BASIC-a!). Ovo ispituje disiplinu programera, a bez sumnje mogu napisati da su čitljivi C programi umjetnost pisanja. Programerski gledano, moj najveći cilj bio je napisati vrlo čitljiv C program s mnogo objašnjenja u težim konstrukcijama. Ovo je od velike važnosti kod većih programerskih projekata, posebno ako je to projekt jedne osobe kao ovaj.
Analiza problema i implementacija
Implementacijski dio diplomske rasprave podijelio sam na osnovne strukture problema. To su dizajn grafičkog korisničkog sučelja, računski intenzivne 3D grafičke algoritme, algoritme širenja zvuka, aproksimacija oglašavanja, auralizacija i konačno računalna struktura. Ove strukture najviše utječu na učinkovitost i dizajn programa.
Čovjek-računalna interakcija
The most we can hope for is that the oftener things are found together, the more probable it becomes that they will be found together another time, and that, if they have been found together often enough, the probability will amount almost to certainity.
Bertrand Russell
U ovom dijelu pišem o kriterijima koji su potrebni za dobra korisnička sučelja. Također se dotiču i problemi koji nastaju prilikom prikaza grafičkog sučelja. Dalje opisujem izvore inspiracije koje sam koristio. Te izvore nisam detaljno objasnio, već sam samo izdvojio originalne dijelove ili faze razvoja. Na kraju opisujem svoju implementaciju sučelja i pokušavam analizirati moguće probleme pomoću kriterija definiranih u dijelu osnovnih načela.
Osnovna načela
Današnji računalni programi su vrlo ovisni o grafičkom korisničkom sučelju (eng. GUI – Graphical User Interface) ako žele preživjeti u oštroj konkurenciji softvera. Korisnici koji ne prihvaćaju program brzo će se umoriti i s velikom vjerojatnošću napustiti program u korist drugog s boljim GUI-om. Jednostavno rečeno, GUI je najvažniji dio programa, a taj koji uspije stvoriti najintuitivnije sučelje pobjeđuje na dugu stazu.
Programerski gledano, implementacija GUI-a je ono što zahtijeva najviše vremena, a veliki broj "mock-upova" se rodi i umire prije nego što postane završen. U stvari, GUI nikad nije dovršen jer uvijek možemo poboljšavati do apsurdnosti.
Kako stvoriti dobro GUI sučelje? To je jednostavno pitanje s vrlo kompleksnim odgovorom. U daljnjem opisu ne uzimam u obzir razlike između različitih kultura. Također sam zanemario subjektivne preferencije koje svaka osoba ima, jer nažalost ne možemo zadovoljiti sve korisnike. Ono što karakterizira dobro dizajniran GUI je dobra mapiranja, brza povratna informacija i jednostavna adaptabilnost. Ovi kriteriji nisu jedini koji su u upotrebi, ali su bez sumnje oni s najvećim utjecajem. Nadalje, interaktivna promjenjivost (npr. pomak transformatora tijekom izvođenja programa) u GUI-u može olakšati jednostavne subjektivne preferencije, što na dugu roč vodi do srećnijih korisnika. Ovo je djelomično implementirano u MUI (Magical User Interface, koji je razvio Stefan Stunz i trenutno slobodno dostupan na Amiga public domainu), što je dodatak biblioteci Intuition.
Dobra mapiranja ostvaruje se kada djelovanje i reakciju povežemo na jednostavan način. Najbolji primjer je mapiranje miša na pokazivač na zaslonu. Kada pomičemo miš u bilo kojem smjeru (trenutno dvodimenzionalno), pokazivač se kreće u istom smjeru na zaslonu. Kada aktiviramo tipke ili druge postavke programa u GUI-u, reakcija treba biti vizualizirana u bliskoj okolini. Ako nije moguće prikazati vizualizaciju lokalno, trebaju se koristiti efekti privlačenja pažnje. Ovo drugo rješenje nije preporučljivo, ali nažalost u nekim situacijama je nužno. Brza povratna informacija je najteži kriterij, jer uglavnom zahtjeva dobru opremu. U ovim vremenima, problem s opremom je manje značajan, ali pogrešne implementacije GUI-a mogu učiniti najspektakularnijim sustavima neupotrebljivima. Kada korisnik obavi akciju na GUI-u, odgovor bi trebao biti aktiviran i vizualiziran odmah, ako je to moguće. Ako brza aktivacija nije moguća, korisniku treba jasno i jednostavno prikazati da se izračun nalazi u tijeku. Nešto što povećava prijelaznost je vizualizacija preostalog vremena za izračun. Pisan sam o povratnoj informaciji u stvarnom vremenu u prethodnom poglavlju, a pod ovim pojmom mislim na odmahšnju povratnu informaciju s lokalnim mapiranjem, bez obzira na (polinomijalnu) računsku složenost. Ovo je vrlo teško ostvariti, ali cilj koji treba težiti.
Jednostavna adaptacija ovisi mnogo o prethodnom iskustvu korisnika s računalnim sučeljima. Ako su prethodna sučelja dizajnirana na jednoličan i konzistentan način, vrijeme učenja nove aplikacije bit će minimizirano ako dizajniramo sučelje u istom duhu. Jednoličnost se može lako postići tako da promatramo druge aplikacije u istoj oblasti i „kopiramo“ njihov izgled. Ovo rješenje može izgledati malo siromašno jer ne podrazumijeva nikakvo novostvaranje. Novostvaranje, uključujući učenje iz naših prethodnih grešaka, ima veliku važnost u svim vrstama dizajnerskog rada. Stoga GUI programer treba „kopirati“ samo najosnovnije jedinice kako bi održao jednoličnost. Specijalizirane jedinice trebaju biti implementirane na logičan i vizualno sličan način kao osnovne jedinice. Korisnik ne bi trebao biti opterećen velikim brojem programskih funkcionalnih transformatora. Oni trebaju postojati u najmanjoj mogućoj količini, ali s najvećom mogućom funkcionalnošću. Njihova funkcija trebala bi se jednostavno vizualno prikazivati, bilo putem ikone (grafickog simbola) ili teksta. Problem s korištenjem ikona je što korisnik opterećuje pamćenje pokušavajući sjetiti se njihove funkcije (ako su loše nacrtane).
Veličina ikona je direktno proporcionalna korisnikovoj sposobnosti percepcije. Ovo je problem jer računalni zaslon nije beskonačno velik. Možemo ili povećati rezoluciju zaslona kako bismo uključili više grafike i preciznije ikone, ili zamijeniti ikone jednostavnim riječima. Također se mogu koristiti rečenice, ali one su često prevelike, a pri ekstensivnom korištenju ovog rješenja, brzina rukovanja korisnika će se smanjiti jer je čitanje rečenica znatno duže vrijeme nego sjetiti se funkcije povezane s slikom. “Slika kaže više od tisuću riječi”, kako se zna. Modernija verzija iste ideje u ovom kontekstu bi bila: “Dobra vizualizacija kaže više od milijuna knjiga.”
Često je potrebno podijeliti GUI na više većih, povezanih blokova. Ako ovi različiti blokovi imaju slične funkcije, njihovi programski funkcionalni transformatori trebali bi biti smješteni na način da su logički jednake funkcije istovjetno pozicionirane u svakom bloku. Ovo je konzistentnost unutar ljuske i vrlo važno pravilo koje treba postići pri modeliranju GUI-a. Kada aplikacija nije konzistentna unutar svojih granica, korisnik će na kraju biti prisiljen odbaciti tu aplikaciju. Posljedice su veliki faktor u brzini rukovanja, a to je vrlo važno za svakodnevne korisnike koji žele raditi učinkovito. Jednostavnost može također biti nazvana globalnom posljedicom (što ja smatram prejakim kriterijem), a posljedica može također biti nazvana lokalnom jednostavnosti (što ja smatram prekrhkim kriterijem). Može se raspravljati o tome trebamo li težiti globalnoj posljedici, ali kako bismo spriječili monotoniju, trebalo bi biti relativno slobodno tumačiti možda bolje metafore nego one koje su dostupne u samom uređaju.
Interaktivna promjenjivost može se implementirati na različite razine, ali kod preterane promjenjivosti aplikacija postaje ovisna o korisniku. To je akutni problem ako se osnovna metafora može mijenjati, i trebalo bi ukazivati da ne bismo trebali implementirati do apsurdnosti. Možemo dopustiti korisniku da sam odredi gdje se nalaze elementi za prilagodbu funkcija programa i koje funkcije one trebaju imati.
Ako ovu ideju dopustimo da se dalje razvija, možemo također dopustiti da se program upravlja iz vanjskog programa ili hardvera. U stvari, vanjski program/hardver koristi podređeni program kao biblioteku potpuno „običnih“ funkcija. Ova ideja može se ostvariti npr. pomoću AREXX (u svijetu Unix-a naziva se REXX), a podređeni program može postati koliko god napredan. Ako želimo zahtijevati potpunu interaktivnu promjenjivost u aplikaciji, trebali bismo zahtijevati vrlo dobru računalnu arhitekturu, a u današnje vrijeme je frustrirajuće koristiti ove sustave jer se rukovanje nakon nekog vremena usporava (snaga računala brzo opada). Iako je ovo činjenica, trebali bismo težiti ostvarivanju ove ideje u bliskoj budućnosti pomoću dobrih algoritama i dobre opreme. Ono što bi trebalo biti apsolutno najvažnije i što korisnik zapravo prvi put primjećuje, je mogućnost povlačenja pogrešne odluke. Početnik je osuđen na neuspjeh u prvim nesigurnim koracima korištenja aplikacije ako su GUI elementi nekonzistentni. Misao greške može se lako povući kod stručnog korisnika, a on ne gubi samopouzdanje u odnosu na stroj. Vjerovanje u upravljanje je posebno važno za kritične aplikacije, poput onih koje se nalaze u nuklearnim elektranama i avionima.
Najveće pitanje je koliko duboko "žaljenje" treba biti. U najjednostavnijim sustavima korisnik može povući zadnju transformaciju, ali u boljim i složenijim sustavima zahtijeva se "beskrajno" duboko žaljenje. Naravno, aspekt memorije ulazi u ove implementacije. Ovaj problem možemo riješiti tako da korisniku omogućimo da odredi dubinu žaljenja tijekom izvođenja. Ako postavimo dubinu žaljenja kao virtualno beskrajnu, korisnik treba moći premotavati stek žaljenja na svim povezanim instancama GUI tijekom izvođenja programa.
Nešto što dodatno otežava upravljanje računalnim programima je ako je njegov GUI dizajniran na takav način da se program dijeli na majke. Ovo može biti vrlo opasno i korisnik se može osjećati uhapšen. Ovo ograničava kreativnost, a upravljanje postaje neugodno i neefikasno. Problem implementacije GUI-a bez majki je u tome što se kompleksnost programa postaje ekstremno veća, a rad na uklanjanju grešaka postaje znatno teži. Nije sama koda programa koja raste, već stupanj neovisnosti povezanih funkcija koji mora biti potpun. Da bismo testirali sve mogućnosti promjene toka programa, potrebno je eksponencijalno više rada (n transformacija daje n! različitih kombinacija transformacija). Ovo, zajedno s činjenicom da možemo jednostavno dokazati da ne možemo konstruirati program koji provjerava valjanost drugog programa, djelomično dokazuje moje tvrdnju da kompleksan GUI nikad neće biti završen. Svi početnici, moguće i neki iskusni korisnici, će se pitati zašto postoje svi programski funkcionalni pretvarači. Većina će pročitati neku vrstu upute, ali nakon dužeg korištenja ta će se uputa istrošiti. Rješenje ovog problema je stvaranje elektronske upute koju korisnik može pozvati kada se pojave problemi tijekom izvođenja programa. Ovo postoji u Amiga-OS-u u obliku Amiga-Guide, koji postoji od 1988. godine i predstavlja hipertekstnu pomoć. Ovo nije fizički, već logički dio programa. Također možemo implementirati poruke „odmah pomoći“ koje su smještene na način da korisnik može lako pronaći te poruke direktno u aplikaciji. Obično smještamo ove poruke „odmah pomoći“ u glavni prozor aplikacije i ažuriramo ih kada je to potrebno (odmah povratna informacija je zahtjev u ovom rješenju). Jezični sučelje s korisnikom može ponekad biti prepreka. Budući da je engleskogovorna zemlja prva definirala računalni jezik i izradila prvu opremu, osnovni jezik računala (i hardvera i softvera) postao je engleski. Korisnici tog vremena bili su uglavnom znanstvenici koji su znali engleski. Danas korisnici više nisu nužno znanstvenici i uglavnom ne znaju engleski. Ovo stvara veliki problem, jer korisnik koji ne razumije tekst na zaslonu može u najgorem slučaju napustiti aplikaciju. Dodatni argument protiv korištenja jednog jezika za sva sučelja su loše prijevode (korisnički vlastiti), koji se često javljaju. Neke tipične primjere su save (sejv, što bi trebalo biti spasi) i load (leåd, što bi trebalo biti učitaj). Ovi izrazi šire se kao požar, a korisnička skupina aplikacije razvija „pomoćni jezik“ uz izvorni jezik. Ti pomoćni jezici mogu dovesti do toga da se ova skupina ponekad smatra kao da potječe iz vanjskog prostora. Rješenje ovog problema je oblikovanje GUI-a na takav način da je jednostavno mijenjati osnovni jezik. Ovo je riješeno u Amiga-OS-u pomoću Locale (implementiran kao biblioteka funkcija), gdje određujemo koji jezik i zemlju koristimo, odnosno gdje živimo. Nakon toga je na aplikaciji (ako programer implementira instancu locale) da koristi ovu postavku.
Izvori inspiracije
Budući da je postojalo toliko video-ray-tracer programa za Amigu, uglavnom sam proučavao njihove sučelja kako bi dobio inspiraciju. Na početku 1987. godine postojao je Sculpt-3D, koji je bio prilično napredan, ali s usporenom editorom, iako je prikazivao modelski svijet u "wireframe" (mreži). Wireframe znači da se model prikazuje samo rubovima objekata, što omogućuje da vidimo kroz njih. Korisnik je mogao odrediti kut gledanja na modelski svijet u svakom prikazu (tri parno okomita prikaza). Također su bile dostupne i funkcije kao što su uvećanje, perspektiva i razne druge korisne mogućnosti. Zahtjev da se stvore animirane sekvence izračunatih slika zahtijevao je temeljnu rekonstrukciju programa, npr. implementaciju motion-blur (neizraženost pokreta). Program je u ovom trenutku promijenio ime u Sculpt-4D. Međutim, editor je i dalje bio jednako spor, što je činilo korištenje ovog programa za veće crteže nemogućim.
Ovi programi bili su među prvim koji su došli na Amigu i imali su relativno dobra korisnička sučelja. Jedan program koji nije raytracer, ali vrijedi spomenuti, je Videoscape. U ovom programu modelski svijet bio je vizualiziran stvarnim plohama, a korisnik je također mogao napraviti jednostavne animacije. I u ovom programu je upravljanje bilo malo teško kod većih crteža. Treba napomenuti da mislim na "teško" u Amiga terminima. Ovo znači da je 3D editor vrlo ovisan o brzini s kojom se grafika može iscrtati na zaslonu (u stvari, cijeli GUI) i o brzini s kojom možemo transformirati vektore. Same transformacije trebaju biti izvedene na glavnom procesoru ako grafički procesor nema ugrađene rutine za to. Amigina grafička procesora (Agnes) nema ugrađenu vektorsku transformaciju, ali je Bresenhamov algoritam za crtanje linija implementiran u hardveru. Ovo je dalo veliki prednost, iako su prve Amige imale jednostavan MC68000 (osnovni član familije MC68K od tvrtke Motorola) kao glavni procesor. Ovaj koncept je također imao više napredne grafичke računale koje su se pojavljivale u raznim kontekstima. Međutim, ova računala su implementirala realno vrijeme texturiranje i z-buffering u hardveru, kao i vrlo brze RISC procesore, npr. od MIPS. Računala Silicon Graphics (tvrtka SGI osnovana 1982.) su poznata, između ostalog, kroz filmsku industriju Industrial Light & Magic (vidi poglavlje o Virtualnoj stvarnosti) i njihovu hardversku opremu.
Prvi profesionalni program (koji je počeo s vrlo malim resursima) bio je Caligari i bio je vrlo intuitivan. U ovom programu korisnik je imao pogled na model i mogao je odabrati između čvrstog (vrlo sporo s obzirom na brzinu) ili wireframe prikaza (prihvatljivo s obzirom na brzinu). U Europi ovaj program nije uspio jer je tržište bilo preveliko i siromašno. Korisničko sučelje Caligarija bilo je bolje od sadašnjih aplikacija jer je upravljanje bilo jednostavnije, a realno vrijeme povratne informacije bilo izvrsno. Mogli smo pomičati 3D objekte u realnom vremenu kao obične ikone. Već rano, Amiga video ray-traceri su postali "industrijski standard", posebno u SAD-u i Kanadi, ali tržište je zahtijevalo bolji program. Program koji je prošao veći estetski nadogradnju od ranije implementacije u Intuition v1.0 do Intuition v2.0 zove se Imagine.
Ovu seriju programa smatram lošim nastavkom ranijih Sculpt programa, iako su oni korisniji. Razlog zašto to mislim je taj što im je GUI postao potpuno prekomjerno i nepraktičan kada je riječ o definiranju materijala i animacijskih shema. Osoba bez velikog strpljenja brzo napušta ovaj programski niz. Iako postoje ovi problemi, aplikacija se često koristi među ljudima iz TV reklamne industrije u Americi. Moj najdraži program u ovim okolnostima je Real-3D (RealSoft iz Finske). Izvorna verzija bila je implementirana u starom Intuitionu v1.0 i temeljena na istoj metafori kao i Sculpt programi. Najveća razlika bila je u tome što su prikazi bili implementirani kao nepromjenjiva prozora, a prikazi su imali specifične kuteve gledanja koje se nisu mogle mijenjati. Ono što smo vidjeli bile su tri pogleda modela (s vrha, s bočne strane i ortogonalno prema njima) te popis objekata modela u hijerarhijskom stablu. Pored liste nalazilo se nekoliko ikona za brzo definiranje objekata u modelu. Ove ikone bile su vrlo ambivalentne, a korisnici su često odabrali pogrešno osnovno oblik. S ovog gledišta može se činiti da je program bio težak za korištenje, ali čitatelj se tada zavarava. Ovaj je program bio vrlo jednostavan za rad, a početnik je mogao postići nešto produktivno unutar prvih pet minuta.
Ono što je ova prva implementacija propustila bila je animacijska komponenta. Ona je daleko od toga da bila dobro mapirana, a srednji rezultat (podaci koji sadrže samu sekvencu animacije, a ne već izračunatu grafiku) bio je strašno redundantan. Ovi su problemi nestali, a vrlo traženi estetski napredak došao je s uvodom Real-3D V2.0 koji se temelji na Intuitionu v2.0. Što je nažalost zanemarivano bila je jednostavnost, što je dovelo da se ovaj program privukao samo vrlo specijaliziranu skupinu ljudi. Oni u svom vremenu postaju stručnjaci, a po definiciji to ne zvuči dobro kada se razmišlja o tome kako bi trebao izgledati dobar GUI. Program je povezan s Amiga-Guidom, pa iako se koristi rijetko, pruža relativno veliku pomoć. „Ovo ne rješava probleme, ali malo pomoći je bolje nego nikakva pomoć, i program se ipak može koristiti, iako ne učinkovito!“ Ovaj citat potječe od tihe žalbe redkog korisnika. Nešto što ne postoji u drugim programima je jednostavan funkcionalni jezik (tipa Lisp), koji npr. olakšava izradu sheme kretanja. S ovim mini-jezikom možemo jednostavno primijeniti naše vlastite fizičke zakone na objekte. Ovo daje korisničkom sučelju i pozitivnu i negativnu dimenziju. Pozitivnu jer se stvarni procesi lakše realiziraju. Negativnu jer je metafora visoko razina programiranja i mehaničko znanje, što bi moglo izazvati alergijsku reakciju kod korisnika koji mrze znanost. Nadamo se da će ovo biti značajno promijenjeno u budućim implementacijama.
Najveći i najskuplji, ponekad i najbolji video-ray-trace program zove se Lightwave. Ovaj program je veliki razvoj Caligarija i ima potpuno vlastito GUI. Ne koristi Amiga standardno GUI, što ja osobno smatram velikim nedostatkom. Sam 3D uređivač je brz i vrlo pogodan za rad. Problem koji postoji u ovoj aplikaciji su modovi koji se pojavljuju. Korisnik nije obaviješten o promjeni moda, što može biti izuzetno frustrirajuće. Također, definicije objekata, materijala i shema kretanja su izuzetno nepraktične i mogu izazvati reakciju čak i kod korisnika s godinama iskustva s računalima. Možda su korisnici koji su stručnjaci vrlo tolerantni, ali to ne smanjuje probleme. Lightwave je korišten npr. u televizijskim serijama Babylon-5 i seaQuest-DSV. Ostale video-ray-trace programe (čak i drugim osobnim računalima) koje su dostupne (u istoj cijenskoj klasi, između 5000 i 50000 kr) nisu ni vrijedne spominjanja ovdje, jer trpe znatno veće mane. Za one koji danas žele biti oduševljeni, Silicon Graphics strojevi bi trebali pružiti takvo iskustvo putem programa IGRIP i Elastic Reality. Međutim, ove aplikacije su vrlo skupi i nisu namijenjene općoj publici.
Moj rješavanje za prozor
Izabrao sam engleski kao osnovni jezik programa. Prijevod na švedski i implementacija korištenja Locale su jednostavni, ali zahtijevaju puno vremena. Ključni dio programa je sam 3D uređivač, stoga je prozor "3D View & Edit" glavni prozor. Korisnik bi trebao provesti najviše vremena u 3D uređivaču, pa je ovo rješenje razumno. Veći dio ovog prozora vizualizira crtež u trodimenzionalnom obliku (trenutno samo wireframe), a ostatak grafičke površine je skromno ispunjen s nekoliko važnih transformatora. U ovom prozoru imam "instant" pomoć, koja je smještena na dnu i prikazuje zadnju izvršenu funkciju.
Sam model treba biti moguće rotirati u prostoru, a ovu rotaciju sam implementirao kao "Bogovu ruku". Koristim ovaj izraz jer je model realiziran kao objekt sastavljen od drugih objekata, a ne kao svijet sastavljen od objekata. U stvari, ove implementacije su ekvivalentne, ali načini rotiranja modela su vrlo različiti. Zamislite da okretate predavanjsku dvoranu umjesto da hodate oko nje. Osobno mislim da ovo rješenje pruža bolju mapiranje, jer korisnik ostaje na računalu tijekom rotacije modela. Kod daljnje razvoja u dobru VR okolinu, ova forma nije preporučljiva, ali sama glavna koda je identična u obje implementacije, pa time posao nije izvršen zauzdrago. Transformere koji rotiraju model smjestio sam blizu prozora za vizualizaciju modela, što pruža jače mapiranje nego da su smješteni u zasebnom prozoru. Ovo rješenje može izgledati malo loše, jer miševi pokazivač nije na modelu (tj. loše mapiranje). Međutim, zaslon je samo dvodimenzionalan, a implementacija nevidljivih funkcionalnih transformera kako bi olakšali rotaciju u nedostajućoj dimenziji vodi do mnogo većih pogrešnih mapiranja. Rotacijski transformeri su tipa "kliznici" i orijentirani su u smjeru svjetskih glavnih osi (X-os na desno, Y-os prema gore).
Problem s Z-osom je u tome što Amiga standardni transformeri (Intuition v2.0) nemaju kružne kliznike, pa sam bio prisiljen koristiti ravni kliznik za ovu os. Postoje dvije moguće pozicije za Z-osni kliznik: ispod Y-osi ili pored X-osi. Odabrao sam da ga smjestim ispod Y-osi, što je prikazano gore.
Problem s korištenjem kliznika za rotaciju je njihova granica. Na granicama ne možemo dalje rotirati u smjeru granice, što je frustrirajuće. Riješio sam ovaj problem postavljanjem malih gumba za vraćanje na početno stanje, vizualiziranih kao krugovi koji predstavljaju ishodište, na svim granicama. Kada korisnik pritisne gumb za vraćanje na početno stanje, "klizna glava" (šved. klizni gumb) kliznika će se postaviti u sredinu između granica. Može se činiti dobra ideja da miševi pokazivač slijedi tijekom ovih vraćanja na početno stanje, ali skokovi pokazivača mogu izgledati zbunjeno, pa nisam implementirao ovu ideju. Još jedna detalj je da se model mora rotirati u istom smjeru kao i kretanje klizne glave. Budući da imam samo jedan prikaz, potrebne su mi neke brze tipke koje nude posebno zanimljive i vrlo korisne poglede na model. Ove tipke nazivam „Brzi prikaz“ i one transformiraju vizualizaciju u pogled odozgo, s bočne strane, ortogonalno na njih i iz perspektive ptice. Bez ovih tipki bilo bi nemoguće modelirati. Brzina transformacije brzog prikaza kritična je za modeliranje, jer sam vrlo ovisan o ovim tipkama (vidi 3D grafičke algoritme). Razlog zašto imam samo jedan prikaz je da se smanji grafika. Kod više prikaza morali bismo ažurirati svaki prikaz kada pomičemo objekte. Ovaj zaključak pokazuje da bi vrijeme izračuna, ako želimo dobru povratnu informaciju, bilo toliko puta duže koliko ima prikaza. Ovu ekstravaganciju ne mogu si dozvoliti, a osim toga, više prikaza ponekad može biti vrlo zbunjiva.
Obično možemo razmatrati model u različitim veličinama, i ovo je također moguće u ovom programu. I ovdje sam problem riješio pomoću klizača. Ponovno postoje dvije ekvivalentne, ali potpuno različite metode mapiranja uvećanja/smanjenja. Možemo ili dozvoliti da se gornji pomak označava kao smanjenje (guramo objekt od sebe) ili uvećanje (približavamo svoju glavu objektu). U skladu s prethodnim razmišljanjem, trebao sam implementirati prvu formu jer korisnik ostaje kod računala. Međutim, to nisam učinio jer mi se takvo mapiranje činilo pogrešnim (pročitajte: nekonzistentno). Iako je ovo nekonzistentno, ono je duboko logično i korisnici ne bi trebali odmah primijetiti to. Realizacija klizača za uvećanje donijela mi je dodatni problem koji se pojavio kod potpunog uvećanja. Prvo rješenje bilo je da sam implementirao klizač pomoću eksponencijalne funkcije. To je uzrokovalo vrlo lošu mapiranje, što me je prisililo odbaciti koncept. Manje loše mapirana implementacija bila je dodatak gornjem kraju (vizualiziran s +), koji je prebacivao klizač iz grubog u fino podešavanje i obrnuto. I ovo rješenje je u stvari loše, ali korištenje dvaju funkcionalno jednakih klizača pored sebe stvara veću zabunu, pa sam stoga implementirao dodatnu tipku.
Da bismo povećali realnost, možemo vizualizirati model u perspektivnom obliku. Dvije paralelne linije koje se protežu od nas sastaju se u točki beskonačnosti (u ovom slučaju upravo na sredini područja vizualizacije modela). Kao i u prethodnim transformatorima, koristio sam klizač koji povećava perspektivu na višoj poziciji. Osnova ove mapiranja je, između ostalog, činjenica da su potenciometri na mikseru (analogna ekvivalenta klizača) manje prigušuju na višim pozicijama (veća jačina signala).
U samoj vizualizacijskoj površini modela također prikazujem ravni modela pomoću 3D mreže. Ovu mrežu možete podesiti putem kružnih izbornika u jedinicama i podjeli koje su najprikladnije za trenutni slučaj. Same mjernice ("measure") mogu biti u metrima, stopama ili isključene. Kada su isključene, 3D mreža se ne vizualizira. Mreža može imati različite veličine ("grid size"), što omogućuje modeliranje svijeta u dijelovima. Ova funkcija se često koristi pri definiranju objekata koji trebaju ući u mnoge crteže. Često je dobra ideja smanjiti unos brojeva, a u ovom slučaju to izgleda zdravo. Da bismo pojasnili orijentaciju modela, preuveličao sam veličine glavnih osi i dodao X', Y', Z' na njihove pozitivne krajeve. Ovaj dodatak je primarno zato što su glavne osi svijeta nepomične, a time se izbjegava loša mapiranja imena rotacijskih transformatora. Objekti u modelu prikazuju se pomoću špiljke u središtu rotacije objekta. Korisnik sam određuje gdje će se to središte nalaziti prilikom definiranja objekta. Kada korisnik želi pomaknuti određeni objekt, odabire ga tako što postavi pokazivač miša na glavu špiljke i pritisne tipku miša. Pokazivač miša nestaje, a cijeli objekt postaje pokazivač miša, čime se zaobiđu problemi s perspektivom (stvari koje su bliže brže se pomiču nego one koje su daleko). Dodatno pojašnjenje prikaza je da se područje modela gura u zaslon, što ukazuje da je objekt odabran, a ostatak modela miran (tj. „objekt je podignut s modela“). Kada korisnik pusti tipku miša, objekt se postavlja na poziciju koja je prikazana.
Objekti se pomiču u ravnini koju zaslon prikazuje. Ovo je osnova za prve tri tipke fiksnog pogleda. Pomicanje u ravnini je prednost, jer prostorno pomicanje postaje čudno i vrlo loše mapirano. Barem u implementacijama koje sam napravio, s pomoću sjene, to je bilo slučaj. Jedna stvar koja smanjuje gužvu koja se često pojavljuje u wireframe modelima je da sam dopustio da se špiljke crtaju zadnje u prikazu. To znači da su sve špiljke ispred i nijedan objekt ne zaslanja špiljke drugih objekata. U složenim crtežima ove špiljke mogu biti vrlo gužva (preklapaju se), a korisnik ne može vidjeti koja špiljka pripada kojem objektu. Čak i jednostavni modeli s dva objekta mogu postati neodređeni jer se špiljke objekata mogu projicirati na istu ravninu. Rješenje ovog problema ću vratiti kasnije, jer je dio objašnjenja podprozora koji se zove „Drawing-Pool“. Naše objekte trebamo moći jednostavno oblikovati i rotirati. Jedna mogućnost je da se pomak, rotacija i skaliranje obavljaju kao različiti modovi u programu ili da se koristi posebna gumbić za svaku jedinicu. Modovi su potpuno isključeni, a tri gumbića po objektu postaju prekomjerno zbrkano. Ako bismo mogli riješiti problem s jednim gumbićem, to bi moglo biti rješenje. Međutim, greške u mapiranju koje se pojavljuju (nema nam jedne dimenzije) su toliko velike da sam bio prisiljen odbaciti ovu opciju (do moje nade).
Caligari i Lightwave su ovo implementirali pomoću modova plus nevidljivih gumbića, ali nisam uspio koristiti ih na zadovoljavajući način. Stoga sam implementirao transformatore veličine i rotacije u obliku klizača za ovaj svrhu. Ovi transformatori su dostupni samo kada korisnik odabere objekt. Kada transformator nije dostupan, prikazuje se kao zasjenjen. Korisnik može mijenjati veličinu u smjeru glavnih osi objekta, a rotacija određenog objekta mapira se na isti način kao cijela model. Najveća razlika je u tome što su svi rotacijski transformatori orijentirani prema istom smjeru. Ovo ukazuje na lošu mapiranje, ali dizajn je bio ometen nesimetrijom, te samim time zadržao se na ovom rješenju. Transformacije veličine su također orijentirane u istom smjeru, jer orijentacija objekata u modelu ne mora odgovarati fizičkom položaju svijeta bez primiranja, u ovom slučaju zaslona. Da bismo jasnije prikazali orijentaciju objekta u modelu, omogućujem prikaz „orijentacije“ koja pokazuje smjer glavnih osi objekta (X", Y", Z"). Prilikom promjene veličine, korisnik treba imati mogućnost da se uvjeri da povećava u pravom smjeru. Iako ove transformacije nisu blizu same transformacije, one se mogu koristiti relativno učinkovito. Kada korisnik odabere i pomakne objekt, pozicija objekta u modelu (u zadanoj mjernoj jedinici) prikazuje se u donjem dijelu pomoći „instant“. Prilikom promjene veličine, dimenzije objekta (Širina, Visina i Dubina u zadanoj mjernoj jedinici) prikazuju se na istom mjestu. Ako korisnik isključi 3D mrežu, ne prikazuju se iglice objekata, a model dobiva jasniju vizualizaciju. Budući da iglice objekata nisu prikazane, korisnik ne može slučajno odabrati objekt. Ovo je čista mjera sigurnosti.
Korisnik ne mora odabrati određeni objekt (staviti pokazivač miša u područje iglice), već može uhvatiti cijeli model (sva druga mjesta u području vizualizacije modela) i pomaknuti ga u ravnini projekcije. Ova funkcija može lako uzrokovati poteškoće prilikom ponovljenih rotacija praćenih pomacima. Naša glava ostaje na mjestu, a sve ostalo se kreće oko nas, što nam omogućuje da lako rotiramo model izvan pogleda i nikad više ne vidimo ga. Stoga vratim centar rotacije modela na ishodište prilikom rotiranja modela, kako bi se spriječilo zbunjivanje. Pomak modela praćen odabirom objekta neće uzrokovati vraćanje centra rotacije. Ovo čini perifernim objektima lakšim za postavljanje, rotiranje i mijenjanje veličine (posebno ako imamo vrlo jak perspektiv). Većina imena transformatora je skraćena na neki način, ali imena mjernih i mrežnih transformatora za 3D mrežu su potpuna ("Measure" za mjerenje i "Grid Size" za veličinu mreže). Problem sa skraćivanjima nije nov, a ako su posebno loši, razumljivost postaje nula. Modelski transformator veličine nazivam Mg (Magnification, koji se obično skraćuje kao Mag.), a perspektivni transformator Pr (Perspective, koji se obično skraćuje kao Pers.). Na početku može izgledati kriptično, ali duža skraćivanja su stvarala velike estetske greške u dizajnu, jer nemam neograničen prostor za izgradnju. Rotacione transformatore nazivam X-, Y- i Z-osom, a one ne bi trebale izazvati veće probleme u razumijevanju.
Transformatori veličine objekata (object sizers) su zapravo vrlo kriptični (SX = Velicina u X smjeru, SY = Velicina u Y smjeru, SZ = Velicina u Z smjeru), kao i transformatori rotacije objekata (object turners, AX = kut rotacije oko X ose, AY = kut rotacije oko Y ose, AZ = kut rotacije oko Z ose). Ove skraćenice mogu izgledati nešto preterano skraćene, ali suvišan tekst ometa efikasno korištenje. Korisnici su skloni čitanju teksta svaki put kada koriste transformator, iako već znaju njegovu funkciju. Ova vrsta skraćivanja ukazuje na određenu nekonzistentnost, jer sam u prvim slučajevima koristio prve dvije suglasnike, a u kasnijim slučajevima nasumično uzimao početna slova iz rečenice. Međutim, nakon razmišljanja, čini se da su ove skraćenice pravilne jer sadrže dovoljno informacija.
Transformatori brzog pregleda ("Fast View") su relativno intuitivni u ovom duhu, jer njihova imena ukazuju na to koja se prikaz vrsta prikazuje (X-Y Prikaz, Z-X Prikaz, Z-Y Prikaz i Pogled s ptičje perspektive). Ovi transformatori bi zapravo trebali biti podržani ikonama kako bi se pojasnio izgled prikaza, ali crtanje neambivalentnih ikona je u ovom slučaju teško. Važan dio uređivanja modela je kako razdvajamo različita svojstva objekata i jednostavno ih integriramo. Možemo izgraditi računalni model pomoću E-R dijagrama i na temelju njega izgraditi sučelje. U ovom slučaju nije bilo potrebno koristiti dijagram ili nikakvu metodu normalizacije, jer su objekti sastavljeni od vrlo jednostavnih dijelova. Moje rješenje temelji se na ovim dijelovima: oblik, materijal i shema kretanja.
Ovi primitivni elementi se spajaju u okno za koordinaciju modela koje ja nazivam "Drawing-Pool" (DP). Sva okna za koordinaciju u mom programu imaju "pool" kao prezime. Porijeklo naziva "pool" (kalj) leži u "neporedku" koji se obično javlja tijekom pokušaja koordinacije (u stvari, ponašanje životinja kod vodenih jama na savanama).
Glavni dio DP okna je lista gdje su različiti objekti navedeni. U ovoj listi korisnik može odabrati određeni objekt, a ažuriranje se događa i u DP (pojašnjenje imena, tipa, materijala i sheme kretanja) te u "3D View & Edit" (istakivanje objekta u wireframe modelu).
Prije sam pisao o nejasnoći pri wireframe modeliranju, a problem selekcije riješio sam na sljedeći način. Korisnik prvo odabere objekt u listi objekata DP okna. Zatim pritisne jednu od tipki Shift (u stvari loša mapiranja, jer ne vizualiziram kako korisnik treba postupiti u ovim slučajevima), što označava da drži objekt objema rukama (npr. lijeva ruka na Shift, desna na upravljaču ili obrnuto) i time može postaviti, pomaknuti, rotirati ili promijeniti veličinu odabranog objekta. Ova funkcija prestaje čim korisnik otpusti tipku Shift, ali ako korisnik zadrži tipku na upravljaču, onda održava objekt za premještanje. Pored objektne liste nalaze se tipke koje olakšavaju organizaciju modelnih objekata. U skladu s prethodnim prozorima, najveća vizualna površina nalazi se gore lijevo, a pretvarači za uređivanje desno. Pretvarači koji imaju tri točke nakon naziva ukazuju da će akcija dovesti do pitanja za nastavak.
Funkcija najgornje tipke za uređivanje ("New...") je stvaranje novog objekta u modelu putem upitnika koji pita koju vrstu objekta želite dodati. Metafora je da idemo u trgovinu namještajem i kupujemo namještaj. Kada korisnik odabere određeni "namještaj", on se uvijek postavlja u ishodište modela, a zatim slijedi ažuriranje prikaza glavnog prozora. Novi objekti nisu povezani s određenim materijalima ili shemama kretanja. Ovo se vizualizira kao "NO TYPE AT ALL" (vrsta namještaja), "NO MATERIAL ASSIGNED" (materijal namještaja) i "NO FLIGHT ASSIGNED" (shema kretanja namještaja) u odgovarajućim područjima za informacije.
Korisnik može zatim odabrati koji materijal je koristen za izradu objekta pomoću tipke "Select..." u liniji s područjem prikaza materijala. Ova tipka pokreće upitnik u kojem se korisnika traži da odabere materijal. Specificiranje sheme kretanja je identično, osim što se korisnik traži da odabere "letnu rutu" umjesto toga. Kada korisnik odabere ove jedinice, može nazvati nedavno stvoreni objekt u modelu. To radi pomoću pretvarača "Name". Promjena imena uzrokuje ažuriranje popisa imena objekata. Ako model treba da sadrži više objekata sa istom morfologijom i materijalom, korisnik može da kopira već postojeće objekte pomoću dugmeta „Kopiraj“. Objekti koji su viškovi ili na neki drugi način pokazali se nepotrebni u modelu, mogu biti obrisani pomoću dugmeta „Izbriši“. Prilikom brisanja, objekat se dodaje na vrh „otkazi“ steka u prozoru DP i može biti povučen nazad pomoću većeg dugmeta „Poništi“. Ako korisnik želi da obriše ceo model, može aktivirati dugme „Očisti“, a svi objekti će biti dodani na „otkazi“ stack. Ova funkcija je implementirana isključivo kao akcija koja unapređuje posledice, jer je prisutna u drugim skupovima (sa znatno većom stopom korišćenja).
Kada korisnik, nakon nekog vremena preuređivanja modela, želi da se vrati na glavni prozor za postavljanje objekata, to radi pritiskom na dugme „Uredi...“. Ovo dovodi do toga da se glavni prozor prikazuje ispred svih ostalih prozora i aktivira sa odabranim objektom u „istaknutom“ obliku. U stvari, bojna mapiranja treba izbegavati u što većoj meri. Osnova ovoga je da i osobe sa daltonizmom budu u mogućnosti da koriste program. Međutim, lista imena u prozoru DP je glavna mapa prema kojoj korisnik treba da utvrdi koji je objekat odabran. Nepreciznost pri wireframe vizualizaciji zahteva ovu rešenje.
Korisnik može sam da definiše sopstvene objekte aktiviranjem dugmeta „Crtanje->Objekat...“. Ova funkcija pretvara ceo model u jedan objekat koji se sastoji samo od morfološke strukture. Metafora u ovom razmišljanju je da kreator šalje svoj novi nametaj u tvornicu namštaja za kloniranje. Gumbi za aktivaciju su svi tekstualni, jer su njihove funkcije uobičajene i vrlo ugrađene. Zbog toga nisam koristio ikone za njih, iako bi ušteda prostora bila značajna i ikone bi mogle biti smještene u glavni prozor. Također, ovakvim dizajnom GUI-a sa velikim „društveno prihvatljivim“ gumbovima i određenom razmaknutosti oko njih, izbjegavaju se određene nepraktičnosti. Teškoće pri smještaju i oblikovanju gumba kako bi se smanjio najmanji mogući korisnički greška, mogu se smanjiti ako smjestimo povezane funkcije bliže jedna drugoj, a manje slične na značajnoj udaljenosti. Gumb koji ne prati ove kriterije je gumb „poništi“ („Undo“), koji bi trebao biti smješten najbliže najkatastrofalnijoj funkciji i biti bar dvostruko veći od ostalih gumba.
Možda je gumb za definiranje objekta teško razumljiv, jer pretpostavlja korisnikovu znanje o operatoru „->“ u kontekstu jezika. Ovaj operatorski znak znači transformaciju jedinice X u jedinicu Y (X->Y) u ovom slučaju. Logički, ova definicija je ispravna, ali može se raspravljati hoće li općeniti korisnik intuitivno prihvatiti ovu ideju. Međutim, duže rečenice su nepotrebno kompleksne i po mom mišljenju ometaju čist izgled (posebno u ovom slučaju).
Trije točke za dohvat objekata ("Object Pool"), materijala ("Material Pool", MP) i sheme kretanja ("Flight Pool") temeljene su na tipu upitnog obrasca. Ovaj obrazac je posebno dizajniran i nije dio "Amiga-GUI requester biblioteke". U istom duhu kao i prije, imam popis naziva s lijeve strane, tipke za uređivanje s desne strane i pretvarače naziva na dnu. Njihove funkcije su identične onima u prozoru DP. Korisnik treba odabrati odgovarajuće kriterije za objekt iz ovih točaka za dohvat i završiti pritiskom na tipku "Ok!" ili, ako je došlo do pogrešnog korištenja, na tipku "Cancel". Ove potvrđujuće tipke su smještene u skladu s pravilnom "Amiga requester" rasporedom. Definiranje novih i transformacija starih jedinica trenutno je moguće samo u prozoru MP.
Prilikom definiranja i transformacije materijala otvara se upitni prozor ("Characteristics"), gdje korisnik definira različite jedinice materijala. Jedinične karakteristike, koje su smještene na vrhu, su naziv, tip (namještaj, predajnik, primatelj) i boja (koja će se koristiti u budućoj implementaciji s solidframe modeliranjem). Ispod ovih pretvarača nalazi se graf koji prikazuje frekvencijsku karakteristiku materijala. Graf prikazuje krivulju apsorpcije ako je riječ o namještaju, a frekvencijski odziv za druge tipove (predajnik i primatelj).
Ovdje koristim ideju da svi objekti zapravo mogu biti promatrani kao filtri. Na ovom grafu korisnik može slobodno nacrtati frekvencijsku karakteristiku, a prilikom prve transformacije graf se "zatiska" na zaslon kako bi se istaklo da je izvršena promjena. Budući da koeficijenti apsorpcije nisu mjereni u svim frekvencijskim pojasovima, područja koja se ne koriste u izračunima su osjenčana.
Izrada ove grafike nalaze se smjernice pretvarača. Oni su smješteni ispod odgovarajućih frekvencijskih oktava radi dobre mapiranja. Ovdje korisnik može odrediti koje smjerove imaju refleksija, emisija ili primanje na različitim frekvencijama (pročitajte prirodu zvuka i audio obradu kako biste razumjeli terminologiju). Ova pitanjska forma također ima potvrđujuće gumbove na dnu. U suprotnosti od mog prethodnog razmišljanja o smještaju gumba „poništi“, ovaj sam smjestio između potvrđujućih gumba.
Bilo je estetski pogrešno smjestiti ga pored frekvencijske grafike (desna strana kako bi se zadržala konzistentnost). Međutim, i dalje je u skladu s time da se nalazi uz veće kritične pretvarače (iako nije točno susjedan). Oblikovanje prozora za definiranje materijala ima određene sličnosti s pitanjima naprednije vrste. Ova metafora, pravilno oblikovana, može postati vrlo dobra interfejsna točka, jer su obrasci vrlo ugrađeni u zapadnoj civilizaciji.
Kada se izračuna praćenje zraka, otvara se prozor za prikaz podataka ("Computed Data", CD). Ovaj prozor je još uvijek u fazi betatesta, jer prava implementacija treba biti u modulu za auralizaciju. U gornjem lijevom kutu prikazujem parametre na koje je praćenje zraka podešeno. Oni su opisani na najkraćem mogućem konciznom engleskom jeziku, jer se grafički prostor mora koristiti za važnije stvari. Jedan vrlo važan graf je raspodjela zvuka, koji prikazuje vrijeme trajanja odbijanja u različitim frekvencijskim pojasevima. Ova vremena su izračunata pomoću Sabineove formule. Dalje korisnik može odabrati specifičnu vlažnost zraka iz padajućeg izbornika ("R. Humidity"). Dok računalo izračunava put zrake, pri uspješnim izračunima ono će vizualizirati (amplituda ovisna o putu zrake) te vrijednosti u echogramu na dnu prozora. Stupac koji prikazuje koliko izračuna još ostaje vizualiziran je u ovom bloku echograma. Iako je ova vizualizacija dobra, istaknuli smo sve duže izračune mijenjajući izgled pokazivača miša. Strelica se pretvara u sat ako je korisnik postavio standardnu opciju u "Pointer Preferences" (postavke pokazivača Amige). Nakon završetka praćenja zrake, korisnik može odabrati koji primatelj će se prikazivati u echogramu pomoću padajućeg izbornika "Receiver".
Da bismo olakšali i učinili korisničko iskustvo jednostavnijim i zabavnijim, implementirali smo prozor za osnovne postavke. Ovdje korisnik može odrediti gdje će se nalaziti njegove spremišne zone za modele, nameštaj, materijale, sheme kretanja i izračunate putanje zrake.
Korisnik može ili upisati imena u polja za unos, ili pritisnuti "Set...", što aktivira dijalog za odabir mape. Također, osnovne boje aplikacije mogu se postaviti ako je to željeno. Polja za boje su tipična za Amiga-GUI, što znači da se boje dijele na tri komponente (R = Crvena, G = Zelena, B = Plava). Ove komponente su duboko ugrađene u Intuition i koriste se npr. u "Palette Preferences" (postavke palete Amige). Korisnik prvo odabere boju, a zatim pomiče klizače u odgovarajuće pozicije. Boje se mijenjaju istovremeno, što pruža relativno dobru mapiranje. U verziji I Intuition V.3.0 postoji kolo boja za bolje mapiranje, ali problem s dobivanjem potrebnih činjenica za korištenje ovoga natjerao me da implementiram lošiju verziju. Na dnu ponovno su potvrđujuće gumbi, koji u ovom slučaju su malo složeniji nego ranije. Ako korisnik napravi pogrešku, ona kao obično pritisne gumb „Poništi promjene“, a ako shvati da ne mora izvoditi nikakve transformacije, pritisne „Otkaži“. Kada se program pokrene, učitavaju se postavke ovog prozora i koriste se. Stoga korisnik može spremiti postavke („Spremi promjene“) za buduće korištenje, sve dok se ne izvede nova transformacija praćena s „Spremi promjene“, ili koristiti bez spremanja postavki („Koristi“).
Tijekom dužih sesija modeliranja, korisnik će zaboraviti koju „mobilnu trgovinu“, „trgovinu sirovina“ i „zračnu linijsku kompaniju“ posjetila. Stoga sam implementirao prozor s informacijama („Prozor o programu“), koji prikazuje te podatke i ime modela. Također se prikazuju dostupnost dvije vrste memorije (fiksna i čip RAM) te ime proizvođača programa. Tri različite vrste objekata koji se mogu naći u modelu ispisuju se kako bi obavijestile korisnika o složenosti modela. Ovi brojevi su direktno proporcionalni vremenu izračuna zraka (viši brojevi znače duže vrijeme izračuna).
Osim svih ovih prozora, postoji niz informacijskih, potvrđujućih i upitnih prozora. Ove sam implementirao kako bi korisnik bio zaštićen od velikih pogrešaka, poput gubitka modela pri izlasku iz programa. Na slici 4.8 prikazujem uzorak dodatnih prozora koji su dostupni u programu i s kojima se korisnik može susresti tijekom „neosmišljenog“ korištenja. Prozor s pitanjima pojavljuje se pri svakoj vrsti aktivnosti sekundarnog memorije. Ovo su Intuitionovi vlastiti „zahtjevi za datotekama“ kako bi program bio jednoličan s ostalim Amiga programima. Jedna vrsta prozora s pitanjima su oni koji zahtijevaju samo potvrdu (prozori s potvrdom). Ove vrste prozora imamo npr. kada korisnik treba izvršiti veću promjenu (izlazak iz programa, brisanje projekta itd.). Prilikom promjene modela, zbirke objekata, zbirke materijala i sheme kretanja, aplikacija će pitati korisnika želi li odbaciti promjene ako su takve napravljene. Ako korisnik želi potpuni izlazak ili potpunu obnovu programa, to će također biti pitanje ako su napravljene promjene. U slučaju više promjena, možemo grupirati različite jedinice u jedan prozor kako bismo poboljšali pregled. Jedinice trebaju biti ispisane u istom redoslijedu kao što se pojavljuju u programu kako bi se održala konzistentnost.
Prozori s informacijama koriste se kada dođe do greške korisnika i mogu sadržavati više ili manje pametno poruke o grešci. U većini grafičkih korisničkih sučelja, greške korisnika su vrlo jednostavne prirode i stoga lako je formirati poruke o greškama. Međutim, greške korisnika koje se javljaju prilikom učitavanja podataka programa s nekog sekundarnog memorije su vrlo teža priroda.
Budući da cuvam sve podatke koje proizvodi aplikacija u uređivajućem obliku (korisnik može čitati podatke u običnom tekstualnom uređivaču i mijenjati ih), korisnik može uređivati greške. Ove greške trebaju biti otkrivene i pružiti jasnu poruku o grešci prilikom pokušaja učitavanja. Implementirao sam samo izračun broja retka greške, što će biti komentirano kasnije u „Mojem rješenju za radnu ploču“. Gumbi potvrde trebaju biti tekstualni kako bi se smanjila ambiguitet. Standard koji se treba pratiti u Intuitionu je da se "fatalna" transformacija izvodi prilikom aktivacije lijeve gumbice u prozoru potvrde ("U redu!", "Izađi iz programa!", "Obriši podatke!"). Da bi se izbjegli mogući greške u upravljanju, desna gumbica potvrde ("Odustani") treba biti aktivirana. Ova gumbica nikada ne bi trebala mijenjati tekst kako bi se smanjila zabuna. Međutim, fatalne transformacije (lijevi gumb) su znatno jasnije ako koristimo posebno napisane rečenice prilikom blok potvrda.
Kada postoji samo jedna gumbica potvrde, ona treba odražavati prirodu problema. Ako korisnik napravi grešku, tekst gumba treba biti u obliku "JA" kako bi se povećao podsjetnik da je korisnik napravio grešku ("Moj kriv!"). Ovo bi trebalo dovesti korisnika da mrzi loše korištenje nakon nekog vremena. Kasnije se može pojaviti problem da korisnik postane iritiran računalom i njegovim "pametnjacima".
Problemi niže prirode (npr. pogrešna instalacija softvera) koji ne utječu na aplikaciju u većoj mjeri, naravno, ne bi trebali izazivati ove jakije oblike informiranja ("Ne brini!"). Osnova mojeg odabira ovih riječi je da su programi koji isključivo koriste gumb "U redu" u nekom trenutku došli u dvosmisleno stanje, a mijenjanje gumba za grešku je kršenje pravila. Trebalo bi biti lakše ispraviti greške nego ih napraviti.
Moje rješenje za izbore
Dodatne detalje koje olakšavaju upravljanje su izbornici. Oni postoje, između ostalog, kako bi se izbjegle višestruke pritiskanje tipki za različite funkcije. Oblik izbornika također treba prilagoditi ostaloj prirodi sučelja i biti vrlo sličan drugim programima. Prema standardu Intuition, transformacije projekta trebaju biti prve, a zatim alati za uređivanje. Nakon njih dolaze specifičniji transformatori. Iako se treba izbjegavati višestruko pritiskanje tipki, ona su dostupna u obliku pritiska na desnu Amiga tipku uz običnu tipku. Ovaj oblik se automatski prikazuje u izborniku Intuition-a. Ove funkcije povećavaju korisničku učinkovitost bez oštećivanja prijateljskosti za početnike.
U svakoj instanci aplikacije, korisnik može aktivirati potrebne funkcije izbornika povezane s aktivnim prozorom. Možemo implementirati lokalne izbornike, koji su posebno dizajnirani za svaki korisnički prozor. Ovo stvara veliku zabunu kod korisnika, jer su velike vizualne promjene izbornika unutar okvira aplikacije loše s obzirom na lokalnu konzistentnost. Riješio sam ovu teškoću tako što sam učinio izbornik globalnim. Problem s ovim rješenjem je da korisnik može aktivirati pogrešne funkcije u pogrešnim instancama. Da bismo izbjegli ove probleme i usmjerili korisnike prema pravim funkcijama, u svakom specifičnom slučaju ostavljam nevezane funkcije izbornika neaktivnim (sjenčanim).
Funkcije implementirane u izborniku "Project" su: "New" (potpuna obnova cijele aplikacije), "Open..." (učitavanje modela, zbirke objekata, zbirke materijala, zbirke animacijskih shema, podataka za napredno praćenje zraka i podataka za povratno praćenje zraka), "Merge..." (spajanje modela, zbirki objekata, zbirki materijala i zbirki animacijskih shema), "Save" (spremanje modela, zbirke objekata, zbirke materijala i zbirke animacijskih shema bez promjene imena od prethodnog imena), "Save As..." (kao "Save", ali s mogućnošću promjene imena od prethodnog imena), "About..." (otvara prozor s informacijama "About Window") i "Quit..." (zatvara program sa pitanjima).
Budući da je ovaj program namijenjen većim radnim timovima koji trebaju raditi paralelno, razdvajanje podataka programa je vrlo važno. Neki članovi tima modeliraju, dok drugi radе na materijalima i nameštaju. Dalje, neki mogu primijeniti pokretne forme na objekte u modelu koji su gotovi. Funkcije za spajanje ("Merge") namijenjene su upravo tome.
Funkcije u "Editing Windows" služe isključivo za postavljanje odgovarajućih prozora na prvi plan i izbjegavanje zbrke na ekranu. Podjela na dva bloka izvršena je jer su tri donja bloka tipa pitanja, dok su gornji glavna edicijska prozora.
Parametri i aktiviranje tragalca su prikazani u izborniku "Tracer". Parametri preciznosti su svi istog tipa popisa ("High", "Medium", "Low", "Auto"), a njihova imena funkcija su konzistentno oblikovana. Iako su ove funkcije duže po tekstu, one su namijenjene korisnicima koji ih rijetko koriste. Korisnik provodi više vremena modeliranjem nego podešavanjem parametara, pa u ovom slučaju zahtjevi za efikasnošću imaju manju važnost. U stvari, ovaj oblik podešavanja parametara je nepoželjan jer korisnik nema pregled nad postavljenim funkcijama. Ponovno treba podsjetiti da je dio tragalca još uvijek u beti. Drugi blok ovog izbornika namijenjen je aktivaciji računskog dijela tragalca u aplikaciji. Treći blok je namijenjen vizualizaciji već izračunatih podataka.
Funkcije koje se ne mogu smjestiti u druge izbornike, skupljamo na kraju trake izbornika ("Miscellaneous"). Ovaj izbornik ne treba smatrati "smetnjama" za nepotrebne funkcije, već treba sadržavati važne funkcije. Funkcije koje su važne u mom programu su brisanje određenih stackova "napravi/poništi" ("Clear >>", gdje >> označava da postoje podmenije) i otvaranje početnog prozora za osnovne postavke korisničkog sučelja ("Preferences...").
)))
)))
Moje rješenje za radnu ploču
Pridružene jedinice podataka aplikacije trebale bi biti prikazane na radnoj površini ("Workbench") pomoću jednostavnih ikona. Ove ikone trebale bi prikazivati što sadrže jedinice podataka (vidi Sliku 4.13), a korisnik ih može prilagoditi u "Icon Editoru" (standardni program Amiga okruženja) kako bi bolje odgovarale njegovim potrebama. Ikone jedinica podataka, te zadane postavke i primitivni objekti, materijali i sheme kretanja nalaze se u posebnoj mapi ("3DA-Prefs"). Korisnik može sam promijeniti sve ove ikone i datoteke podataka prema svom ukusu pomoću odgovarajućeg sustavnog uređivača. Uvod brojki sam izbjegao u glavnom programu, jer je točnost praćenja zraka niska.
U stvari, sve vrste prikaza brojeva su odbijajuće za korisnike koji nisu tehnički usmjereni. Na više prilika primijetio sam korisnike koji su napustili aplikaciju zbog njenog prekomjernog prikaza brojeva. Ako isključimo veće blokove brojki, povećavamo korisničku prijelaznost (lično volim brojeve). Korisnici koji su zainteresirani za visoku točnost mogu "dvostruko kliknuti" na jedinicu podataka. Ovo pokreće njihov uređivač teksta, koji zatim učitava jedinicu podataka. Na jednostavniji način, ikona je povezana s uređivačem teksta, a ne s mojim glavnim programom. Međutim, ovo se jednostavno može promijeniti mijenjanjem "Default Tool" u izvornim ikonama koje se nalaze u podmapi Icons. Jedina korisnička prijatnost u ovim uređajima za uređivanje podataka je to što se tekstualne linije počinju s $, a brojčane linije s #, te da naslov obavješćuje korisnika o vrsti datoteke. Za one koji smatraju ova znakova čudnim, želim pojasniti da su ovo ostaci iz vremena BASIC-a, a ja sam mislio da odgovaraju ovom slučaju. U stvari, trebalo bi postojati dvosmjerni kompilator (međujezik<->jezik) za ovaj uređaj. Međutim, ja sam to postavio na najniži prioritet jer glavni program nije završen. Implementacija dvosmjerne PHIGS (Programmer's Hierarchical Interactive Graphics Standard) kompatibilne kompilator ili interpretator (paralelno izvođenje pod ARREX) je samo jedan poseban projekt.
Dizajn ovih ikona je izrađen na "naivnoj" razini. Na primjer, ikona sheme kretanja prikazana je kao avion. Također, ikona materijala uzeta je iz standarda signálnih filtra (tri valove jedan iznad drugog). Ikona objekta nacrtana je kao slobodno lebdeća kocka, dok je ikona modela mala modelna verzija s tlemom. Ikona zadanih postavki oblikovana je kao minijaturni upitnik. Dvije moguće metode izračuna — naprijed i unatrag zračenje — prikazane su kao zvučnik i mikrofon s pužem usmjerenim u pravom smjeru. Ikona glavnog programa je stilizirana varijanta A3D (Audio 3D), koja bi trebala podsjećati na mikrofon u zvučnom polju. Oni koji ne uspijeva interpretirati ikone na ovaj način ne bi trebali brinuti. Prilikom pokretanja, aplikacije mogu zahtijevati različite parametre pokretanja ("WBArgs" što znači WorkBench Arguments ili "CArgs" Command line interface Arguments).
Ovi parametri mogu opisivati zahtjeve za memorijom, razlučivost ekrana itd. Implementirao sam parametar razlučivosti ekrana u ovom koraku, jer se aplikacija vjerojatno instalira samo jednom po uređaju. Engleski Amiga standard zahtijeva da se "HIRES" ili "SUPERLACE" doda u "Tool Types" kao riječ za razlučivost radi jednolikosti.
Tok interakcije ikona
Puna linija označava da se podaci generiraju i koriste. Isprekidanom linijom označeno je da uređivanje nije preporučljivo. Deblja puna linija označava upravljanje glavnim programom.
Algoritmi 3D transformacija
...real computer scientists rarely use numbers larger than 255...
Andrew S. Tanenbaum
U prethodnom odjeljku pisao sam o ljudsko-računalnoj interakciji (HCI) i njenim zahtjevima. Najvažniji dio mog programa, ako uzmem u obzir HCI, je trodimenzionalni grafički urednik. Da bi bio koristan, osnovne algoritme u 3D modeliranju treba optimizirati na najbolji mogući način. 3D modeliranje možemo podijeliti u sljedeće dijelove: skaliranje, translacija (pomak), rotacija i projekcija. Razlog zašto ovdje razmatramo projekciju je taj što vizualiziramo na 2D zaslonu. Skaliranje i pomak ne zahtijevaju veliku računalnu snagu, a projekcija nije preterano teška. Međutim, rotacija je najzahtjevnija operacija u smislu vremena. Izostavljam crtanje linija i površina jer Amiga to već ima implementirano u hardveru. U ovom odjeljku prikazujem optimizaciju algoritma rotacije koja se razvila od 1987. (Bazni algoritam) do 1994. (Diskretna optimizacija tipa III = DOT³).
Svaki program ima nekoliko slabičkih lanaca s naglaskom na brzinu izračuna, i upravo te dijelove trebamo optimizirati. Optimizacija se treba provoditi kada imamo dobro formuliran algoritam koji ima najnižu kompleksnost među ostalim algoritmima koji rješavaju isti problem. Granica između optimizacije i razvoja algoritma je vrlo mutna. Razlike između algoritama DOT¹ i DOT³ bi se možda nazvale razvojem algoritma, a ne optimizacijom. Ovi algoritmi su u osnovi vrlo jednostavni (kada gledamo rješenja u pisanom obliku) i ne bi trebali uzrokovati velike glavobolje. Da bismo potpuno razumjeli algoritme, zahtijevam da čitalac zna algebru i Motorola mnemonicu. Međutim, optimizacija je vrlo teška, a proizvođači programa često ne ulažu vrijeme i novac u to. Osobe koje nisu zainteresirane za optimizaciju i primarni jezik računala mogu preskočiti ovaj odjeljak, ali ja smatram ove stranice korisnom čitanjem jer su ti algoritmi i njihovi prednosti i nedostaci vrlo važni za razumijevanje. Implementirao sam DOT³ algoritam u pokretnom zarezu kako bi postigao veću znanstvenu konsistentnost u aplikaciji. Iako su operacije s pokretnim zarezom mnogo sporije od uobičajene diskretne aritmetike, moć DOT³ algoritma je toliko velika da je uski grlo u grafičkom procesoru. Napomena: Ovo vrijedi za obične ECS-Agnes, ali ne i za AGA-Agnes (dvije različite generacije grafičkih procesora za Amigu računala). Ovo znači da je korisnost jednaka na A-500 (MC68030 glavni procesor na 50 MHz i MC68882 matematički procesor na 60 MHz – ovi IC-ovi su od Motorola) kao i na A-1200 (MC68020 glavni procesor na 28 MHz, ali bez matematičkog procesora!). Dodatno pojašnjenje je da MC68020 nema podatkovni cache i ne posjeduje toliko veliku instrukcijsku cache kao MC68030. U daljnjim implementacijama s AAA-Agnes (nepobjednički grafički procesor) vjerojatno će biti potrebna diskretna implementacija DOT³ algoritma kako bi iskoristili cijelu snagu računala.
Osnovna algoritam
Jedinice koje su prikladne za promatranje svijeta su širina (X-os), visina (Y-os) i dubina (Z-os), koje ja nazivam glavnim osima. Imajte na umu da su one međusobno okomite (pravokutne). Kada imamo ovaj pogled na svijet, možemo nastaviti s raznim operacijama. Osnovne operacije koje trebaju biti moguće su rotacija modela oko glavnih osi. Za rotaciju oko glavne osi možemo koristiti 2D rotacije, jer se pozicija točaka u smjeru rotacije ne mijenja.
Kada rotiramo oko Z-osi, sve točke bit će transformirane u na sljedeći način:
Formula 1:
Kada rotiramo oko X-osi, sve točke bit će transformirane u na sljedeći način:
Formula 2:
Kada rotiramo oko Y-osi, sve točke bit će transformirane u na sljedeći način:
Formula 3:
Nakon raznih pojednostavljenja i preuređivanja, možemo ujediniti gore navedene tri formule u jednu opću formulu s 12 množenja i 6 zbrajanja:
Formula 4:
Sada jasno vidimo problem s rotacijama, jer nam trebaju brze trigonometrijske izračune. Najjednostavnije rješenje je postavljanje trigonometrijskih faktora u pseudokonstante (vidi programersku metodologiju za objašnjenje termina), koje se izračunavaju u Initiatus-u funkcije. Ovo osigurava da matematički procesor ne bude preopterećen, a brzinsko je ovo jasno prednostan način. Dolazi slijedeća moguća implementacija osnovnog algoritma, a čitatelju se traži da primijeti odsutnost matrice u strukturi podataka. Osnova ovoga je što nam treba sav snaga za algoritam, a ne za održavanje strukture podataka.
/******************************************************************
* Denis Tumpic 1987 *
* Dimenzione 3. *
* Extract from Slave Function: Turn_Coordinates *
******************************************************************/
.
.
.
/**************************************************************
* Initiatus : Precalculation of turn angles which are placed *
* in pseudoconstants *
**************************************************************/
sax=Sin(ax): cax=Cos(ax)
say=Sin(ay): cay=Cos(ay)
saz=Sin(az): caz=Cos(az)
/**************************************************************
* Itera Computa : Operate turnmatrix over all coordinates *
**************************************************************/
Iterate next chunk thru i from 0 to Number_Of_Coordinates with
positiv discrete monotonic:
tempY=sourceY[i];
tempX=sourceX[i];
tempZ=sourceZ[i];
Y1=tempY*cax-tempZ*sax;
Z1=tempY*sax+tempZ*cax;
X1=tempX*cay-Z1*say;
destinationZ[i]=tempX*say+Z1*cay;
destinationX[i]=X1*caz-Y1*saz;
destinationY[i]=X1*saz+Y1*caz;
Diskretna optimizacija tipa I
Prvo što nas baci na pamet pri izgledu osnovnog algoritma je njegova ovisnost o trigonometrijskim izračunima. Mali računali rijetko imaju dodatne matematičke procesore, a implementacija osnovnog algoritma u pokretnom zarezu na ovim uređajima je potpuno nemoguća ako zahtijevamo realno vrijeme povratnih informacija. Problem možemo riješiti odustajanjem od zahtjeva za točnošću. Riješenost zaslona je niska (1280x570), a stoga uopće ne zahtijevaju se izračuni s pokretnim zarezom. Da bismo mogli odbaciti ove, moramo napraviti prave aproksimacije, jer preniska rješenost (računarski) je čista znanstvena nevolja. Prvo dijelimo krug na 256 dijelova, radi jednostavnosti i učinkovitosti. Nakon toga možemo generirati tablicu sinus i kosinus (povezane) od 640 bajtova, koju osnovna funkcija može koristiti za dobivanje već izračunatih podataka. Svaka funkcionalna vrijednost ima 16 bitova, što omogućuje množenje s 32768 i daje najmanje dvije značajke. Može se činiti besmisleno izvoditi ovu diskretizaciju. Malo razmišljanja jasno nam pokazuje da ćemo većinom rotirati objekte. To jer rotiramo objekte unutar drugih objekata, a svi objekti lete oko modela u svakom trenutku. Za pojašnjenje, preporučujem jaču definiciju VR-okoline iz prethodnog poglavlja.
Promjena brzine je toliko velika da jednostavno možemo konstruirati fraktalni krajolik od 100 točaka i 300 linija koji možemo rotirati u stvarnom vremenu (25 puta/s) na običnoj A-1000 (MC68000 na 7,14 MHz). Sljedeći popis programa je rana implementacija u assemblerskom jeziku za IGG (Inter Gigantica Galactica – potpuna VR-okolina):
/******************************************************************
* Denis Tumpic *
* Pre Inter Gigantica Galactica *
* 1987-1988 *
* Slave Function: Turn_Coordinates *
* a0 : Pointer to Source_Coordinates *
* a1 : Pointer to Destination_Coordinates *
* a6 : Number_Of_Coordinates *
* ax, ay, ax : Turn angle around x-axis, y-axis, z-axis *
*cc instruction remark *
******************************************************************/
TurnCoords ;Initiatus
28 lea SinTable,a2 ; ->SinTable data fetch start address
28 lea CosTable,a3 ; ->CosTable data fetch start address
16 move.b ax,d0 ;Get angle AX
12 and.w #$FF,d0 ;Clear highbyte
10 asl.w #1,d0 ; *2 givs relative table pointer
14 move.w 0(a3,d0.w),d1 ;d1=Cos(ax)
14 move.w 0(a2,d0.w),d2 ;d2=Sin(ax)
16 move.b ay,d0 ;Get Angle AY
12 and.w #$FF,d0 ;Clear highbyte
10 asl.w #1,d0 ; *2 givs relative table pointer
14 move.w 0(a3,d0.w),d3 ;d3=Cos(ay)
14 move.w 0(a2,d0.w),d4 ;d4=Sin(ay)
16 move.b az,d0 ;Get angle AZ
12 and.w #$FF,d0 ;Clear highbyte
10 asl.w #1,d0 ; *2 givs relative table pointer
14 move.w 0(a3,d0.w),d5 ;d5=Cos(az)
14 move.w 0(a2,d0.w),d6 ;d6=Sin(az)
TurnLoop ;Itera Computa
12 move.w 2(a0),d0 ;d0 = y
70 muls d1,d0 ;d0 = y*Cos(ax)
12 move.w 4(a0),d7 ;d7 = z
70 muls d2,d7 ;d7 = z*Sin(ax)
12 sub.l d7,d0 ;d0 = y*Cos(ax)-z*Sin(ax)
10 asl.l #1,d0 ;d0 = d0*2
4 swap d0 ;d0 = d0/65536 -> Normalized Y1
4 move.w d0,a3 ;Y1 = a3 = d0
12 move.w 2(a0),d0 ;d0 = y
70 muls d2,d0 ;d0 = y*Sin(ax)
12 move.w 4(a0),d7 ;d7 = z
70 muls d1,d7 ;d7 = z*Cos(ax)
12 add.l d7,d0 ;d0 = y*Sin(ax)+z*Cos(ax)
10 asl.l #1,d0 ;d0 = d0*2
4 swap d0 ;d0 = d0/65536 -> Normalized Z1
4 move.w d0,a4 ;Z1 = a4 = d0
8 move.w (a0),d0 ;d0 = x
70 muls d3,d0 ;d0 = x*Cos(ay)
4 move.w a4,d7 ;d7 = Z1
70 muls d4,d7 ;d7 = Z1*Sin(ay)
12 sub.l d7,d0 ;d0 = x*Cos(ay)-Z1*Sin(ay)
10 asl.l #1,d0 ;d0 = d0*2
4 swap d0 ;d0 = d0/65536 -> Normalized X1
4 move.w d0,a5 ;X1 = a5 = d0
8 move.w (a0),d0 ;d0 = x
70 muls d4,d0 ;d0 = x*Sin(ay)
4 move.w a4,d7 ;d7 = Z1
70 muls d3,d7 ;d7 = Z1*Cos(ay)
12 add.l d7,d0 ;d0 = x*Sin(ay)+Z1*Cos(ay)
10 asl.l #1,d0 ;d0 = d0*2
4 swap d0 ;d0 = d0/65536 -> Normalized Z'
12 move.w d0,4(a1) ;Z' = d0
4 move.w a5,d0 ;d0 = X1
70 muls d5,d0 ;d0 = X1*Cos(az)
4 move.w a3,d7 ;d7 = Y1
70 muls d6,d7 ;d7 = Y1*Sin(az)
12 sub.l d7,d0 ;d0 = X1*Cos(az)-Y1*Sin(az)
10 asl.l #1,d0 ;d0 = d0*2
4 swap d0 ;d0 = d0/65536 -> Normalized X'
8 move.w d0,0(a1) ;X' = d0
4 move.w a5,d0 ;d0 = X1
8 muls d6,d0 ;d0 = X1*Sin(az)
4 move.w a3,d7 ;d7 = Y1
70 muls d5,d7 ;d7 = Y1*Cos(az)
12 add.l d7,d0 ;d0 = X1*Sin(az)+Y1*Cos(az)
10 asl.l #1,d0 ;d0 = d0*2
4 swap d0 ;d0 = d0/65536 -> Normalized Y'
12 move.w d0,2(a1) ;Y' = d0
8 addq #6,a0 ;Increase source pointer
8 addq #6,a1 ;Increase destination pointer
8 subq #1,a6 ;Decrease coordinate counter
10 bne TurnLoop ;Transform until no more coordinates
rts
Brojevi na početku redaka nisu brojevi redova, već broj satnih ciklusa (cc) potrebnih za završetak operacije. Zbrajanjem ovih vrijednosti dobivamo da Initiatus zahtijeva 254 cc, a Itera Computa 1162 cc po koordinati. Imajte na umu da su i podatkovni i adresni registri korišteni kao privremena pohrana kako bi se povećala brzina. Podatkovni registri d1 do d6 su pseudokonstante i ne smiju se uništiti u Itera Computa. Zbog toga smo prisiljeni koristiti adresne registre za privremenu pohranu. Vanjski pristup memoriji uključuje najmanje 4 cc/acces dodatnog vremena. Iako problemi sa čekanjem ne postoje na Amigi, uvijek trebamo minimizirati vanjske pristupe. Posebno to moramo učiniti ako imamo arhitekturu sa čekanjem gdje ima više procesora koji dijele magistralu na nesinkroniziran način.
Diskretna optimizacija Tip II
Od izračunskog tereta baznog algoritma (preko 100.000 cck po koordinati (cck)) sfera do izračunski laganog DOT¹ algoritma (1162 cck), većina smatra da daljnje optimizacije nisu potrebne. Međutim, cilj implementirati algoritam ispod 1000 cck je vrlo privlačan. Izračunska snaga leži u množenjima (maksimalno 70 cck/množenje) i zauzima 840 cck ukupnog izračuna. Ako bismo mogli ukloniti dvanaest množenja, brzina bi se dalje povećala. Rješenje, kao što smo ranije uočili, je generiranje unaprijed izračunate tablice svih mogućih množenja. Problem s ovom implementacijom je da tablica zauzima puno memorije. Ako ne koristimo ekstremno 8-bitnu (256 vrijednosti) aritmetiku, možemo generirati tablicu od 160 kB (640*256 bajtova). Najveći problem s ovim algoritmom je da ne možemo imati model visoke rezolucije, a povećanje aritmetike na 16 bitova zahtijeva 40 MB memorije. Također, preciznost na ivicama je još lošija u ovoj implementaciji nego u DOT¹. Da bismo riješili problem rezolucije, možemo modelirati u malim „256-vrijednosnim svjetovima“ koji se konkatenuju na odgovarajući način. Ovo rješenje također će povećati preciznost na ivicama. U smislu implementacije, ranoo sam namjeravao koristiti ovo rješenje jer lako dolazim ispod 1000 cck. U stvari, mogao bih doći do 600 cck, ali jer je potrebno malo više podatkovnog premještanja nego prije, nalazi se oko 900 cck. Međutim, konkateneracija nije potpuno trivijalna, a sljedeći algoritam mi je dao druge ideje.
Diskretna optimizacija tip III
Ranije algoritme su nastale krajem 80-ih godina, a većina danas smatra da više nema mnogo toga za uraditi. Međutim, cilj da se pređe granica od 500 cck je vrlo privlačan. Trebalo bi postojati pametniji načini za implementaciju algoritama rotacije, a ako iskoristimo malo algebre i stvarno pokušamo razumjeti što komutativnost (usporedite s okretanjem knjige prvo za 45º oko x-osi, a zatim za 45º oko y-osi i obrnuto) znači, algoritam će se dalje razviti u sljedeću radost:
/************************************************
* Denis Tumpic *
* IGG30++ 1994 *
* Extract from Slave Function: Turn_Coordinates *
*************************************************
x'=x; y'=y; z'=z
if (daz)
x1=Cos[daz][x']-Sin[daz][y'];
y1=Sin[daz][x']+Cos[daz][y'];
x'=x1; y'=y1;
if (dax)
y1=Cos[dax][y']-Sin[dax][z'];
z1=Sin[dax][y']+Cos[dax][z'];
y'=y1; z'=z1;
if (day)
x1=Cos[day][x']-Sin[day][z'];
y1=-Sin[day][x']+Cos[day][z'];
x'=x1; y'=y1;
Primijetite da koristim razlike u kutovima umjesto apsolutnih kutova. Međutim, obratite pažnju da ove razlike u kutovima mogu biti proizvoljno velike (modulo 256). Također primijetite transformaciju u algoritam koji je s obzirom na kompleksnost promijenio svoju prirodu iz algoritma koji uvijek traje jednako dugo (izokroni algoritam) u troslučajni algoritam (neizokroni algoritam). Također, Initiatus je ugrađen u Itera Computa. Ova spoznaja omogućuje nam da potpuno zanemarimo matematički procesor, a korištenje tabele u DOT² dovodi nas ispod granice od 500 cck. U najgorem slučaju (Worst Case) potrebno je malo manje od 300 cck, a u najboljem slučaju otprilike 140 cck. Ne uspijevam reći da je ova implementacija donja granica za rotacije, jer sam dvaput ranije pogriješio na ovoj točki. Međutim, ova implementacija algoritma omogućuje rotaciju više od 20.000 koordinata po sekundi na običnoj A-1000 s glavnim procesorom MC68000 na 7,14 MHz (osnovni algoritam je uspio oko 70). Budući da želim održati znanstveni ton aplikacije, ovaj algoritam sam implementirao u potpunosti u obliku pokretnog zareza (AOT³). U smislu brzine, AOT³ je brži od pokretnozarebne verzije DOT¹, što je omogućilo premještanje većih objekata u 3D modeliranju s manjim prekidima u pokretu. Boljeći da su današnji veliki nesporazumi oko glavnih procesora doveli do faze neodlučnosti, nisam programirao algoritam u assemblerskom jeziku. Jednostavna struktura algoritma možda ukazuje da bi RISC-based računalo moglo postići bolju implementaciju. Međutim, veliki problem su brojni vanjski pristupi. Ovi algoritmi zahtijevaju brzu memoriju bez stanja čekanja.
Ako uspijemo ostvariti množenje brže nego premještanje podataka, ovi algoritmi će se srušiti kao kuća od karata. Nadalje, možda bismo trebali smatrati da bi hardverska implementacija AOT³ algoritma trebala biti standard u VR uređaju. Ne znam kako je Hewlett-Packard implementirao rotacijski algoritam u svojim CAD programima koji koriste HCRX grafičke kartice (ovo može crtati 2,3 milijuna 3D vektora po sekundi ako glavni procesor radi na 100 MHz). To ne bi trebalo biti potpuno različito od mojeg rješenja ako je brzina postavljena kao primarni cilj.
Algoritmi širenja zvuka
Eine Hauptursache philosophischer Krankheiten - einseitige Diät: man nährt sein Denken mit nur einer Art von Beispielen.
Ludwig Wittgenstein
Ovaj odjeljak se bavi razvojem algoritma širenja zvuka. U suprotnosti od 3D transformacijskih algoritama, koji su vrlo dobro definirani, algoritmi širenja zvuka nisu toliko potpuno definirani, te stoga nisu u fazi optimizacije. Razvoj algoritma uvijek počinje postavljanjem hipotetskog načina rješavanja problema. Kada imamo dobro definiranu hipotezu koja funkcionira pri mogućoj implementaciji, hipoteza se treba poboljšati na takav način da se smanji računska složenost algoritma. Na čistom švedskome to znači da trebamo obaviti manje posla, a u pogledu rezultata obje algoritme trebaju dati identične odgovore. Imamo dvije svijeta za koje trebamo prilagoditi naše algoritme. Ovisno o tome koju od njih izaberemo, to direktno utječe na vrijeme izračuna. U prvoj, najznanstvenijoj svijetu, imamo potpuno analitičko rješenje problema. U drugoj dijelimo problem na diskretne dijelove i rješavamo ga s manjom zahtjevima na točnost, što dovodi do značajno kraćih vremena izvođenja. Također, uvijek moramo spriječiti algoritme koji uzrokuju eksponencijalni rast zahtjeva za memorijom ili vremenom izvođenja ovisno o povećanju količine ulaznih podataka.
Prvo ću opisati potpuno analitičko rješenje, a zatim ću preći na potpuno diskretno. Nakon toga slijedi vrlo poznata metoda ogledalnog izvora, koja se koristi npr. za izračunavanje vodova (telekomunikacije), te dalje relativno novi pristup zvan ray-tracing (slijedanje zraka). Prikazat ću dobro uravnoteženu kombinaciju metode ogledalnog izvora i ray-tracinga, te ću opisati mali odstup koji nazivam elipsoidnom aproksimacijom. Gore navedeni algoritmi brzo su me doveli do ideje da implementiram algoritam za širenje zvuka s dobro formuliranom heuristikom kako bi se omogućila povratna informacija u stvarnom vremenu. Na kraju ću opisati najmanje znanstvenu metodu "Cut & Paste Ray-tracing" i njene mane.
Knjige koje su me utjecale u ovom odjeljku su: Room Acoustics od Heinricha Kuttruffa, Audio Engineering Handbook sastavljeno od strane K. Blair Benson, An Introduction To Ray Tracing sastavljeno od strane Andrew S. Glassnera, te Advanced Animation and Rendering Techniques od Alana i Marka Watta.
Potpuno analitičko rješenje
Prvo što uvijek trebamo pokušati je potpuno analitičko rješenje. Ako uspijemo implementirati potpuno analitičko rješenje, nećemo imati greške aproksimacije. Imajte na umu da mislim na algebarsko rješenje problema računalom. Iako su algebarska rješenja matematički točnija, ona su vrlo vremenski zahtjevna. U rijetkim jednostavnim slučajevima u kojima je moguće riješiti problem algebarski, trebali bismo to učiniti, ali u većini slučajeva problemi su znatno složeniji.
Potpuno diskretno rješenje
Nakon ravnog pada potpuno analitičkog rješenja, možemo pokušati potpuno diskretno rješenje. Sljedeći primjer može poslužiti kao osnova: Naša svijet sadrži zid i objekt koji generira zvuk. U ovom slučaju, ako postavimo objekt za slušanje sa iste strane kao i objekt koji generira zvuk, dobit ćemo direktni zvuk i reflektirani zvuk. Ovaj jednostavan slučaj možemo opisati jednostavno pomoću valne jednadžbe i riješiti relativno brzo pomoću neke metode konačnih elemenata (FEM) ili metode graničnih elemenata (BEM).
Ako razmotrimo jaku VR definiciju, shvaćamo da naša modelna svijet sadrži mnoge objekte, a ti objekti nemaju ravne površine. Bez obzira da li su zvukovno generirajući ili ne, oni će uzrokovati nelinearne valne jednadžbe. Sada se možemo pitati koliko valnih jednadžbi nam je potrebno za rješavanje problema širenja zvuka na potpuno diskretni način. Budući da svi objekti (n) međusobno interagiraju, potrebno je najmanje n*(n-1)/2 nelinearnih valnih jednadžbi. Svaki objekt može uzrokovati prekid ako ne difraktira zvukne valove, a taj prekid je također ovisan o frekvenciji. Također, moramo uzeti u obzir masu zraka (različite efekte refrakcije), kretanje objekata (Dopplerov učinak) i temperaturne fluktuacije, što dodaje još nelinearnosti u valne jednadžbe.
Ako se ograničimo na zatvorene prostorije i podijelimo valne jednadžbe po frekvencijskim kanalima, za svaku točku koju promatramo u prostoru potrebno je oko 1.8*10⁹ diferencijalnih jednadžbi, ako promatramo frekvencijski raspon 0–10 kHz [29] (rješava se odgovarajućom FEM metodom). Iz ovog ogromnog sustava jednadžbi trebamo konstruirati impulsni odziv modela svijeta u točkama gdje imamo primatelje. Kada uspijemo postaviti te jednadžbe, trebaju se izračunati u stvarnom vremenu brzinom od fS puta po sekundi. Osnova ove visoke brzine izračuna je da se Dopplerov učinak i disperzija moraju potpuno ostvariti. Nakon ove jednostavne prilagodbe, moramo samo auralizirati model, i tada je ukupna audio-visualna VR okolina stvarnost.
Iako imamo pristup najbržim računalima univerzuma, čini se strašno neefikasnim rješavati ovaj problem na ovaj način. U stvari, brže je izgraditi nekoliko fizičkih punih skala testnih postavki, a osim toga, to je i jeftinije, iako ćemo vjerojatno morati srušiti veliki broj ovih postavki prije nego što budemo zadovoljni.
U varijanti metode konačnih elemenata (FEM), dijelimo model na male kubne jedinice koje su disjunktne, ali susjedne u prostoru i imaju različite svojstva. Ova svojstva mogu varirati od načina na koji međusobno interagiraju do njihove pokretljivosti u prostoru. U skladu s jakom definicijom VR-a, moramo razdvojiti model na najmanje otkrivene dijelove. To znači da audio-visualno zahtijevamo razlučivost jedinice od otprilike 17 mm kako bismo uključili frekvenciju od 20 kHz. Problem s ovim rješenjem je veliki zahtjev za memorijom (tipično za običnu sobu 8*10^6 * broj svojstava) i izračuni koji su također strašno težak. Postoje implementacije [30] (ne potpuna FEM), [31] (specijalni slučajevi) ovog pristupa, ali i ovdje smo prisiljeni odbaciti koncept jer stvarno-vremenska povratna informacija gotovo nije moguća. Možda će metoda biti ostvariva ako svaki objekt postane čvor u potpuno povezanom grafu. U ovom rješenju dimenzija je n*(n-1)/2 umjesto tri, a time će se svojstva povećati u istoj mjeri. Svaki objekt treba izazvati ažuriranja zračnih toka u svakom drugom objektu. Nadalje, zahtjev pokreta podrazumijeva da su sva svojstva varijabilna u svakom računskom trenutku. Primijetite sličnosti s neuronskim mrežama. Ako razmotrimo što difrakcija uključuje, graf bi ponekad trebao degradirati iz potpune povezanosti, a to bi trebalo biti automatski proces. Problem ove metode je da će brzi procesi biti produženi u vremenskoj domeni. Ovo produženje (raspršivanje, disperzija) zvuka dovodi do gubitka jasnoće i prostorne osjetljivosti. Međutim, rješenje je dobro ako je model statičan.
Metoda zrcalnih izvora
Nakon dvije nemoguće varijante, potrebna je malo drugačija strategija. U metodi zrcalnih izvora dopuštamo da se zvučni valovi šire kao svjetlosni valovi (prave linije), što je bitna razlika u odnosu na prethodne forme. To znači da promatramo zvučno polje kao difuzno. Nestrogo rečeno, difuzno zvučno polje je homogena raspodjela zvučnog tlaka bez faznih razlika. Nadalje, difrakcija, disperzija i svi ostali nelinearni faktori nisu predstavljeni u ovom rješenju (ali se mogu dodati kasnije). Slika na sljedećoj strani prikazuje kako metoda funkcioniše u 2D slučaju.
Kako primjećujemo, ova metoda je vrlo zahtjevna po memoriji, jer zahtijevamo da se model kopira u memoriju do te mjere da se mogu izračunati sve refleksije do (vrijeme trajanja ogledala). Obični model obično zauzima oko 100 kB memorije. Ako pretpostavimo da je pola sekunde, to znači da moramo izračunati zrake duljine do 170 metara. S obzirom na prostor koji je otprilike 5*2*4 metra, morali bismo ga kopirati 34*85*43 puta da bismo uključili sve zrake. Zahtjev za memorijom postaje cijelih 11 GB!!! Ovo nije jedini problem ove metode. Budući da imamo pokretne objekte u cijelom modelu, moramo ažurirati (rotirati i translirati svaku kopiju) modelnu svijet u svakom trenutku promjene. Nažalost, ove stvari čine realno vrijeme povratne informacije gotovo nemogućim, iako možemo koristiti ortogonalnu specijaliziranu DOT³ algoritam. Prednost ove metode je da imamo stotinu posto stopu pogodaka.
Definicija stope pogodaka: Stopa pogodaka je omjer između broja sigurno potrebnih sudara zraka i mogućeg broja potrebnih zraka.
Metoda praćenja zrake (Ray-tracing)
Ako odustanemo od zahtjeva za stotinu posto stopom pogodaka, možemo širiti zrake jednoliko u svim smjerovima iz svakog izvora zvuka. Zatim dopuštamo da se ove zrake reflektiraju od površina objekata. Dopuštamo im da se nastave reflektirati na drugim objektima dok energija zvuka ne postane minimalna ili dok se ne pogodi zvučni primatelj. Energijska razina zvuka postaje minimalna (prag čula) na , a tada više ne moramo pratiti zraku, koja se time odbacuje. Kada gledamo model iz izvora zvuka, to se naziva prednje praćenje zrake (kada gledamo iz zvučnog primatelja, to se naziva stražnje praćenje zrake). Rezultati prednjeg i stražnjeg praćenja zrake nisu isti jer zrake nemaju istu početnu točku (male kutne odstupanja na početku dovode do velikih odstupanja na kraju). Ray-tracing kräver također da imamo difuzno zvučno polje, jer se zrake, zapravo male konusne zrake, sve više raspršuju što dalje putuju. Bez obzira na vrstu ray-tracinga koju implementiramo, trebamo pohraniti duljinu zrake i njezino filtriranje. Filtrirajući odgovor najjednostavnije izračunavamo tako da pomnožimo apsorpcijske krivulje objekata koji su sudjelovali u putanji zrake (vidi dodatak B za pojašnjenje). Također možemo pohraniti kutove padanja na primatelju, čime jednostavno možemo odbaciti nepotrebne sudare koji nisu u smjeru usmjeravanja.
Metoda ray-tracinga nije nova, a u svom izvornom obliku donosi određene probleme. Najveći problem je vrlo loš postotak pogodaka (< 2%). To znači da se 98% izračuna odbacuje (izračun koji bi trajao 10 sati trajao bi manje od 12 minuta!). To je cijena koju plaćamo kada ne želimo koristiti toliko memorije kao u metodi ogledala.
Primal Ray-tracer Code:
Definition Max length:
Computed reverberation time with Sabins's formula
multiplied with the soundvelocity through air.
Definition Hit object:
An object that mostly reflects rather than diffracts
soundrays.
Definition Transceiver:
Objects that transmits (loudspeaker) or receives (ear)
sound.
Definition Hit point:
Ray impact area on hitobject.
Definition Omnidirectional:
Uniformly select angles from (0..2¶, 0..2¶, 0..2¶)
Definition Clean hit:
When the ray-tracing cone hits a specific hitobject or
transceiver.
Master (Depth First Algorithm) function Trace:
Iterate over omnidirectional tracing rays.
Ray-trace until:
Transceiver hit or if raylength exceeds Max length.
When detected a Clean hit memorize:
Raylength, absorptionresponse and impact angle.
Slave (Recursive or/and Iterative) function Ray_Trace:
Compute nearest possible Hit object and reflect ray specularly through the new Hit point.
Multiply this Hit object absorptionresponse with:
Previous absorptionresponse in this recursion.
Depending on depth and grade of diffusion:
Smash ray into several directions and recurse.
Prva implementacija ovog algoritma donijela je nekoliko važnih zaključaka: vrlo duga vrijeme izvođenja i vrlo nizak postotak pogodaka. Međutim, nakon raznih primarnih i sekundarnih optimizacija vrijeme izvođenja se moglo više od poloviti (razne uklanjanje kvadratnih korijena i unaprijed izračunavanje normala i ekstenzija površina objekata). Iako smo na dobrom putu, još uvijek je nemoguće postići povratne informacije u stvarnom vremenu.
Metoda elipsoidne aproksimacije
Ako pogledamo okolinu morfološki, ona nam pokazuje da je sve više ili manje uglasto. Ako zanemarimo uglastost objekata, koja posebno utječe na zvuk pri visokim frekvencijama, možemo promatrati sve objekte kao superelipsoide. Elipsoidi višeg reda su sličniji pravokutnim blokovima nego elipsoidi nižeg reda. Također, brzina izračuna je obrnuto proporcionalna redovnosti elipsoida (viši red dovodi do sporijih izračuna). Ovom metodom imamo manje predizračunatih podataka za obradu, što je stoga učinkovitije s obzirom na memoriju. Dodatne prednosti su što ova metoda omogućuje jednostavnije izraze za izračunavanje sudara zraka i kutova refleksije (bez obzira na red). Iako postoji ovaj potencijal, vrlo niska stopa pogodaka (< 0.1%) znači da ova metoda ne bi trebala biti implementirana.
Hibridna metoda
Pametan potez može biti kombiniranje metode ogledalnih izvora s metodom ray-tracinga. Ovdje omogućujemo da se model kopira u manji broj instanci nego prije (tipično 3×3×3 modele). Kada izračunamo „točne“ refleksije u ogledalnom bloku, možemo nastaviti s ray-tracingom u odgovarajućem prostoru modela u kojem se zrake nalaze.
Zabilježite važnost učinkovitosti algoritama transformacije u ovoj metodi rješavanja. Iako većinom imamo ortogonalne refleksije, realno vrijeme povratnih informacija trpi. Međutim, stopa pogodaka raste na znatno bolje razine, a ako zanemarimo stroge VR okoline, ova metoda je vrlo korisna.
Velika prednost ove metode je da je jednostavno implementirati ovu rješenjsku formu u paralelnom izvođenju. To možemo učiniti ako zanemarimo interferenciju i maskiranje (što možemo učiniti). Problem se sada prenosi na dostupnost procesora i ortogonalno specijaliziranu algoritam DOT³. Ovdje počinje se pojavljivati određena olakšica, jer sada vidimo mogućnost rješavanja problema. Međutim, ovo rješenje je i dalje vrlo skupo, a dodatna mentalna napor ne može štetiti.
Heuristička metoda
Tidigare metoder har inte gett oss några stvarne "wow" iskustve, a sada smo izveli prvi univerzalni rješenje. Pomoću odgovarajuće heurističke funkcije (matematički nazivane ciljne funkcije) možemo povećati točnost do takve mjere da omogućimo povratne informacije u stvarnom vremenu. Problem je pronaći ovu funkciju, a to bi trebalo biti ono što zajedno s dizajnom GUI-a zahtijeva najviše vremena za stvaranje.
Denis Tumpic's Heuristic Ray-tracer Code:
Definition Max length:
Computed reverberation time with Sabins's formula
multiplied with the soundvelocity through air.
Definition Hit object:
An object that mostly reflects rather than diffracts
soundrays.
Definition Transceiver:
Objects that transmits (loudspeaker) or receives (ear)
sound.
Definition Hit point:
Ray impact area on hitobject.
Definition Clean hit:
When the ray-tracing cone hits a specific hitobject or
transceiver.
Definition Looking range:
Circular cone that spreads(¶/2) from the hitpoint with
the direction of specular reflection.
Definition Diffuse hit:
When the path from ray-trace hitpoint to transceiver
surface is in the lookingrange and free from hitob
jects.
Master (Pseudoprobabilistic Heuristic) function Trace:
Iterate over ray directions that point onto objects.
Ray-trace until:
Transceiver hit or if raylength exceeds Max length.
When detected a Clen hit memorize:
Raylength, absorptionresponse and impact angle.
Slave (Recursive and Iterative Heuristic) function Ray_Trace:
Compute nearest possible Hit object and reflect ray specu
larly through the new Hit point.
Compute nearest possible Hit object.
Multiply this Hit object absorptionresponse with:
Previous absorptionresponse in this recursion.
When Diffuse hit detected:
Damp ray then memorize:
raylength, filterresponse and hit direction.
End recursion.
Depending on depth and grade of diffusion:
smash ray into several directions and recurse.
U ovom modelu smatram sve objekte mogućim primateljima direktnog zvuka. Ovisno o tome kako se direktan zvuk iz izvora padne na promatrani objekt (tj. kut upada), smanjujemo signal u odgovarajućoj mjeri. Najjednostavnije je koristiti kosinusnu funkciju za ovaj dio. Kut upada od 90º ne uzrokuje nikakvo slabljenje, a paralelni zvučni valovi (ako postoje) potpuno se ponište. Ova aproksimacija može na početku izgledati vrlo grubo. Međutim, usporedba s prethodnim aproksimacijama – difuznim zvučnim poljem i beskonačno velikim i glatkim površinama objekata, što je uvjet za rad ray-tracinga – pokazuje da je ova metoda manje značajna. Dodatne prednosti ove metode su u tome što jednostavno možemo implementirati difrakciju kao normalan korak u heuristici. Disperzija, refrakcija i usmjerivost mogu se na ranom stadiju ugraditi u heuristiku, iako to dovodi do značajnog smanjenja brzine izvršavanja.
Usporedbe
Dolje slijede neki podaci usporedbi različitih algoritama koje sam implementirao i testirao u svom vlastitom dnevnom sobi. Imajte na umu da ovo (47 m³) zapravo predstavlja preveliku malu prostoriju za Sabineovu formulu da bi funkcionirala dobro. Dubina refleksije postavljena je na pedeset refleksija (što je vrlo puno u kontekstu ray-tracinga).
Svi ovi algoritmi su dali slične rezultate. Nadalje, uzorkovanje moje dnevne sobe jednostavnim clapom pokazalo se da je u skladu (barem na početku) s izračunatim impulsivnim odzivima. S obzirom na grubosti aproksimacija koje smo prisiljeni napraviti, rezultati su relativno prihvatljivi.
Cut & Paste ray-tracing
Na kraju, ova smjelna nenauchna metoda (ako je gledamo čisto matematički). Imajte na umu da ne moramo izračunavati više od Tr (vrijeme ulaska zvuka nakon refleksije), jer se zvuk nakon refleksije ne smatra odvojenim izvorom zvuka. Ono što možemo učiniti jest da pustimo zrake da prate ranije refleksije (Cut), a zatim pomoću njih sintetiziramo kasnije refleksije (Paste). Najjednostavnije to radimo tako što transliramo „Cut“ u vrijeme nakon posljednje izračunate refleksije u „Cut“. Translirane refleksije prate se modulacijom vremena pomoću odgovarajuće funkcije, što predstavlja doprinos „Paste“. Vremenska modulacija može biti unaprijed izračunata prema postojećim modelima ili dobro formuliranim vjerojatnosnim mjerama. Imajte na umu da se zvuk nakon refleksije ne smatra izračunavati u ovom koraku, jer se točnost smanjuje s dužinom praćenja zrake i izvode se bespotrebni broj izračuna. Zvuk nakon refleksije ne zahtijeva visoku točnost jer je nedovoljno jasan.
Budući da želimo postići povratne informacije u stvarnom vremenu u audiovizualnim VR okolinama, metoda Cut & Paste ray-tracing je vjerojatno jedina koja dolazi blizu mogućnosti. U kombinaciji s heurističkim ray-tracingom, možemo s malim sredstvima postići nešto što podsjeća na prvi korak prema jakoj definiciji VR-a. Ovo je moguće ako smanjimo zahtjeve za brzinom izračuna u stvarnom vremenu s fS puta/s na fDIRAC puta/s. U skladu sa „prostornosti“, fDIRAC mora biti oko 8000 Hz kako bi se potpuno reproducirao smjer dolazećeg zvuka.
Postojeće implementacije
Različite implementacije koje se cirkuliraju su metoda zrcalnih izvora [32, 33], ray-tracing [34], hibridna [35, 36], heuristička [37] (primijetite da je ovo samo vanjski model) i metoda konačnih elemenata [31]. Ove su metode više ili manje napredne varijante onih kratkih uvoda koje sam napisao. Međutim, sve su ove metode vrlo ograničene i zahtijevaju dodatnu opremu kao pomoćnu opremu.
Aproksimacija odjeka
This is not the end. It is not even the beginning of the end. But it is, perhaps, the end of the beginning.
Sir Winston Leonard Spencer Churchill
U ovom odjeljku opisujem različite načine za procjenu i izračunavanje odjeka bez potrebe za dubokim praćenjem zraka s lošom stopom pogodaka kao posljedicom. Postoje dvije metode aproksimacije – prva je deterministička, a druga stohastička (granica između njih je mutna). Ove metode nisam potpuno implementirao jer su ideje prebrojne, iako su relativno jednostavne.
Budući da sam usvojio heuristički ray-tracing algoritam kao osnovu, aproksimirat ćemo impulsni odziv nakon vremena Tr do vremena (isto vrijedi i za metodu zrcalnih izvora). Osnova ovoga je da zahtijevamo difuznije zvučno polje što dublje refleksije promatramo. Problem je odrediti Tr na takav način da sve refleksije prije Tr budu razdvojene, a one nakon njega preklapaju unutar određenih vremenskih diskretnih intervala. Ako zanemarimo zakon prve valne fronte, ne bismo trebali imati difuzno zvučno polje (u prirodi uopće ne postoji potpuno difuzno zvučno polje), što znači da ne bismo trebali praćenjem zraka ići duboko. Tipično se koriste treće reda refleksije, a to je kvalitativna procjena koja nije dokazana. Međutim, vrijeme Tr je vrlo ovisno o modelu, a heuristički ne možemo generalizirati prethodnu procjenu.
Determinističke metode
Samtliga ekon är egzaktno vremenski filtri koji boje signal na određen, karakterističan način. Ako promatramo već postojeće slušne sale i usporedimo njihove eko karakteristike, otkrivamo da one slijede istu strukturu. Kada spojimo ovaj činjenicu s time da je eko neodređen, možemo koristiti već uzorkovan eko. Ova ideja je moguća samo ako znamo da je model sala. U VR smislu, ova metoda omogućuje velike generalizacije, a moramo prilagoditi eko odgovarajućim funkcijama. Ove odgovarajuće funkcije mogu biti kombinacija više poznatih ekova u više ili manje linearnoj formi. Problem se svodi na pronalaženje granica u eko strukturama i dobro balansiran broj međuvrijednosti koje se mogu miješati na takav način da model padne unutar prave okvira.
Stohastičke metode
Nastavak prethodnih metoda je stvaranje eka modela pomoću uzorkovanih ekova i izračunatih ranih refleksija. Ovaj izračun treba obaviti samo jednom, jer je eko u velikoj mjeri neovisan o poziciji objekta. Ovo je aproksimacija, jer vrijeme početka eka (Tr) nije neovisno o poziciji objekta.
Dopuštamo i potpuno stohastičku varijantu koja formira eko funkciju s sljedećim parametrima: Prve refleksije, broj objekata u modelu, vrijeme eka i intenzitet pokreta. Vrijeme određuje veličinu eka. Broj objekata i intenzitet pokreta određuju koliko je eko neodređen. Dalje, intenzitet pokreta može biti praćen stohastičkom funkcijom (efikasnija i jednostavnija, temeljena na odgovarajućem stohastičkom procesu) ili determinističkom funkcijom (sporija i složenija, temeljena na shemama kretanja objekata) kako bi se promijenio mogući ovisnost eka o poziciji objekta.
Auralizacija
So gelangt man beim Philosophieren am Ende dahin, wo man nur noch einen unartikulierten Laut ausstossen möchte.
Ludwig Wittgenstein
Pri grafickom ray-tracingu vrlo je jednostavno vizualizirati pojedinačne slike koje prikazuju kako izgleda model. Kada se bavimo zvučnim ray-tracingom, graficka vizualizacija nije tako informativna. Može biti ugodno vidjeti impulsni odziv prostora ili pojedinačne grupe energije koje se šire po prostoru. Međutim, prikazivanje širenja zvuka grafički je poput pokušaja opisivanja zvuka osobi s rođenom težkom gubitkom sluha (vrlo teško). U stvari, ovo je loša preslikavanja, jer vidimo ono što bismo željeli čuti. U skladu s jakom definicijom VR-a te tvrdim zahtjevima ljudsko-računalne interakcije na dobru preslikavanja, ovo nam nameće da moramo auralizirati (eng. Auralization). Da bismo održali jezičnu konzistentnost, auralizacija bi trebala zvati audialisacija, ali oni koji su ranije putovali ovim stazama već su se zakopali u koncept auralizacije.
Za daljnje čitanje zahtijevam da je čitatelj pročitao „Računski aspekti digitalnog zvuka“ u „Audio obradi“, a ovdje ću se pozivati na ovaj dio kao [BDA].
Veliki računski zahtjevi koji su dokazani u [BDA] (iako su algoritmi bili nedovoljno razvijeni) znače da ne možemo auralizirati na običnom mikroprocesorskom računalu bez određene pametnosti. Problem već postoji u ray-trace algoritmu. Međutim, možemo ga implementirati s brzom heuristikom koja uzima u obzir smjernost uha, maskiranje i nelinearnosti (phon krivulje). Ovo, u kombinaciji s time da pratimo zrake samo do treće reda refleksija, omogućuje nam da izgradimo prvi dio impulsnog odziva modela u stvarnom vremenu (25 puta/s).
Pa što onda? Kako je s auralizacijom? Bud att hanterar vi en dator med extremt begränsana računarsku moć, nećemo daleko doći s auralizacijom. Amiga ima osamobitni zvuk s četiri kanala u stereo (dva za svako uho), a jačina svakog kanala (glas) može se podešavati na 64 različite razine (logaritamski raspoređene). Najniža razina je prigušenje signala za 36 dB, što znači da možemo izgraditi djelomični odziv impulsa u danom vremenskom intervalu s 64 zvučne refleksije. Ovo je izračunato prema formuli 1 u [BDA]. To znači da ne moramo izračunavati više od 64 refleksije za svako uho. Heuristički algoritam praćenja zraka vjerojatno neće biti sporiji zbog ove granice.
Gubim strpljenje! A kako je s auralizacijom?
U skladu s argumentacijom u "Aproksimacija odjeka" i prva dva poglavlja, ovo znači da ne trebamo punu visoku kvalitetu koju nude dirac uzorkovanja. Stoga možemo aproksimirati odjek prikladnim reverbom, koji postoji u mnogim različitim varijantama u glazbenom kontekstu. Jedini zahtjev je da ima MIDI (Musical Instrument Digital Interface) kako bismo vanjski mogli mijenjati najvažnije parametre, i difuziju odjeka. Rješenje omogućuje korisniku da sam odluči koju kvalitetu aproksimacija odjeka treba imati. Ovo rješenje je također prirodna nastavak Amiga koncepta (neka posebni procesori obave grubu radnju). Ispod su prikazani algoritam i plan protoka hardvera.
Denis Tumpic's Heuristic Auralizer-Ray-tracer Code:
Definition Max length:
Computed reverberation time with Sabine's formula
multiplied with the soundvelocity through air.
Definition Max rays:
Total number of additions without cancellations.
Definition Hit object:
An object that mostly reflects rather than diffracts
soundrays.
Definition Transceiver:
Objects that transmits (loudspeaker) or receives (ear)
sound.
Definition Hit point:
Ray impact area on hit object.
Definition Clean hit:
When the ray-tracing cone hits a specific hit object or
transceiver.
Definition Looking range:
Circular cone that spreads(¶/2) from the hit point with
the direction of specular reflection.
Definition Diffuse hit:
When the path from ray-trace hitpoint to transceiver
surface is in the lookin grange and free from hit ob
jects.
Definition Trace hits:
The calculated impuls response from the Ray Trace algo
rithm.
Master (Realtime V:input sampligfrequency) function Auralizer:
First time:
Compute reverberation time with Sabins's formula.
Initialize extern reverb through MIDI system messages.
Allways (Isochrone \& Parallel):
Convolv incomming data with Trace hits.
Output convolution to audiochannels.
Master (Parallel Pseudoprobabilistic Heuristic) function Trace:
Iterate over ray directions that point onto objects.
Ray-trace until:
Transceiver hit or
Raylength exceeds Max length or
Total Rays exceeds Max rays.
When detected a clen hit memorize:
Decay time and attenuation.
Slave (Recursive and Iterative Heuristic) function Ray_Trace:
Compute nearest possible Hit object and reflect ray specu
larly through the new Hit point.
Compute nearest possible Hit object.
Multiply this Hit objects absorptionresponse with:
Previous absorptionresponse in this recursion.
When Diffuse hit detected:
Damp ray then memorize:
Decay Time and attenuation.
Increase Total Rays.
End recursion.
Depending on depth and grade of diffusion:
smash ray into several directions and recurse.
Struktura podataka
Potpuno dinamički skupovi su ključ za sve.
U ovom dijelu opisujem i komentiram odabrane dijelove otvorenih struktura podataka programa. Prvo ćemo početi s nekoliko enumeracija.
Sljedeći tip koristim za identifikaciju objekata u raznim izračunima:
/*****************************
* What type of object is it? *
*****************************/
enum ObjectType {Furniture,Sender,Receiver};
Primarni modelni objekti su podijeljeni u sljedeće jedinice:
/**************************************
* What type of primitiv object is it? *
**************************************/
enum PrimitivObject (Tetraeder, Cube, Octaeder, Prism, Room, Pyramid, Plate};
Direktivnost ima ovu enumeraciju:
/**************************************************
* Propagation Directivity for objects in general. *
**************************************************/
enum DirectionType {Omni,Bi,Cardioid};
Budući da se radimo s kalupima, koristim dvostruko povezane liste (u prvim razmatranjima to je zapravo nepotrebno, iako se vrijeme pretraživanja može jednostavno smanjiti na polovicu). Donja struktura odnosi se na specifične osobine materijala. U daljem razvoju programa s potpunom hijerarhijskom strukturom, sve što se nalazi ispod pokazivača (*prev i *next) trebalo bi skupiti u jednu strukturu (to vrijedi za većinu ovih struktura). To je osnova dvostruke povezanosti u ovoj strukturi. Također, možemo implementirati gumb za sortiranje u koordinacijskim prozorima i preimenovati ih u slojeve (eng. Stock). Ako budemo razumni, strukturu trebamo preoblikovati u prikladnu stablansku model (u tom slučaju ime strukture mijenja se u Material<tip>Tree).
/******************************************************
* Master struct for Material Characteristics *
* Materiallist holding all loaded \& created materials *
******************************************************/
struct MaterialList
{
struct MaterialList *prev; /*Pointer to previous in list */
struct MaterialList *next; /*Pointer to next in list */
char Name[80]; /*Material name */
int usage; /*How many objects uses this MTR */
enum GraphType GraphMode; /* Spline or linear */
enum ObjectType OType; /*Furniture, sender or receiver */
int Color; /* Draw Color (furnitures only) */
int Volume; /* Sound Volume (senders only) */
double meanabsorption; /*Material mean absorption coeff */
/*********************************************************
* Softtypeequalizer with normal equalizing frequencies *
* and extra directioncharacteristics for each frequency. *
* Frequency Absorption/Response variables *
* 32,63,125,250,500,1k,2k,4k,8k,16k,32k Hz *
*********************************************************/
int EHZ[11];
/*****************************************************
* Frequency Direction variables Omni, Bi or Cardioid *
* 32,63,125,250,500,1k,2k,4k,8k,16k,32k Hz *
*****************************************************/
enum DirectionType DHZ[11];
};
Svaki objekt sastoji se od niza kockastih dijelova, koji su tipa primitivni objekt. Ovi se stavljaju u dvostruko povezanu listu (samo radi jednolikosti). Budući da potpuna hijerarhija nije implementirana, materijal objekta sam sam smjestio u modelirajuću strukturu. Međutim, to će se u kasnijoj verziji smjestiti u ovu strukturu. Vrijednosti ravninske jednadžbe (izračun zrcalnog odbijanja pomoću normale) i raspon površina (provjera je li zraka pogodila) nalaze se ovdje jer su pružile značajno povećanje brzine algoritma praćenja zraka. Smatram da je ovo povećanje brzine važnije od dodatnih 480 bajtova koji su potrebni. Također, izračun površine smješten je u fazi umetanja (pročitajte: amortizacija izračuna tijekom modeliranja), što omogućuje da se izračuni pomoću Sabineove formule svedu na prihvatljive razine. Mnogi memorijski prostori za vektore temelje se na učinkovitosti AOT³ algoritma i ovdje nisu dodatno komentirani (vidi 3D-transformacijske algoritme).
/*******************************************
* Struct holding all surfaces of an Object *
*******************************************/
struct SurfaceList
{
struct SurfaceList *prev; /* Pointer to previous in list */
struct SurfaceList *next; /* Pointer to next in list */
enum PrimitivObject PO; /* What type of prim object is it*/
double x[8],y[8],z[8]; /* x,y,z Rigid Coords */
double mx[8],my[8],mz[8]; /* x,y,z 1 transformed Coords */
double tx[8],ty[8],tz[8]; /* x,y,z 2 transformed Coords */
double AV[6],BV[6],CV[6],DV[6];/* Plane equation */
double maxx[6],maxy[6],maxz[6];/* Plane boundaries */
double minx[6],miny[6],minz[6];/* Plane boundaries */
double Area[6]; /* Area of the plane */
};
Sljedeća struktura su čvorovi u listama objekata (i ovi su dvostruko povezani radi jednolikosti):
/**************************************************
* Masterstruct for a specific Object *
* ObjectList holding all loaded \& created objects*
**************************************************/
struct ObjectList
{
struct ObjectList *prev; /* pointer to prev in list */
struct ObjectList *next; /* pointer to next in list */
char Name[80]; /* Root name of an Object */
int cubes; /* Number of sub cubes */
struct SurfaceList *surfaces; /* Pointer to a surfacelist */
};
Samma modelleringstrukturen är också en dubbelt länkad lista. Observera att vi inte ska implementera ett komplett sökträd för detta, eftersom snabb söktid vid användarens val av ett objekt på skärmen kräver att rotationer orsakar att knappnålarna ändrar läge och en ny sortering måste göras (se avsnitt om realtidsfeedback). Emellertid är trädstrukturen nödvändig för hierarkisk lagring. Dessutom finns objektets position i världen och deras riktning (tre ortogonala enhetsvektorer) för bl.a. storleksförändring. Enhetsvektorerna grundas på att AOT³-algoritmens beräkningsformel kräver det (bl.a. inverterad rotation vid storleksförändring). Strålföljningsalgoritmen mellanlagrar träffytans normal i denna nod om strålen träffar någon yta i dess objektlista. Detta är ett tillägg från den heuristiska lösningsmetoden.
/*************************************************************
* Masterstruct for a specific object in current Drawing Pool *
* DrawingList holding all objects in current drawing *
*************************************************************/
struct DrawingList
{
struct DrawingList *prev; /* Pointer to previous in list */
struct DrawingList *next; /* Pointer to next in list */
double x,y,z; /* Center of object in space */
double dxx,dyx,dzx; /* Sizing Orientation ex */
double dxy,dyy,dzy; /* Sizing Orientation ey */
double dxz,dyz,dzz; /* Sizing Orientation ez */
long int recnumber; /* Tracer receiver number */
int ax,ay,az; /* Anglegadgets real angle */
int dax,day,daz; /* Anglegadgets deviation */
double sx,sy,sz; /* Sizergadgets real size */
double dsx,dsy,dsz; /* Sizergadgets deviation */
double W,H,D; /* Width, Hight, Depth of object */
double AV,BV,CV,DV; /* Hitplane normal */
double pinx,piny,pinz; /* Pin location */
char Name[80]; /* Userspecified extra name */
struct ObjectList *object; /* Pointer to Objectdatalist */
struct MaterialList *material; /* Pointer to a material */
struct FlightList *flight; /* Pointer to a flightpath */
};
Strålföljningsdata läggs i en dubbelt länkad lista för att konkatenering av beräkningsresultat från en parallell form av strålföljningsalgoritmen ska kunna göras enkelt. Dessa sammanfogningar används i senare beräkningar för olika akustiska kriterier. Vid själva auraliseringen kan varje processor utföra sina beräkningar och sedan skicka svaret till huvudprocessorn. Observera att vi inte behöver resultaten i en specifik ordnad sekvens, eftersom faltning görs på hela datamängden. På en enprocessor-maskin är dynamiska arrayer en snabbare datastruktur för själva faltningen. Observera också att med NOMIX- och MIXTHEM-algoritmerna är datan i en ordnad sekvens eftersom vi använder samplingar.
/**************************
* List/node of tracedata. *
**************************/
struct TraceList
{
struct TraceList *prev; /* Pointer to previous in list */
struct TraceList *next; /* Pointer to next in list */
double length,acoeff; /* Length and absorption of path */
double ex,ey,ez; /* Origin direction */
double time,amplitude; /* Realtime renderdata */
char Sname[80],Rname[80]; /* Name of sender \& receiver */
int recnumber; /* Asociated number to tracer */
};
Programmeringsmetodik
Quick and Dirty, Slow and Clean, Blade Running that's my dream.
DDT
I detta avsnitt beskriver jag min programmeringsmetodik i en lättare ton, och de som inte är intresserade av ibland högtravande språk bör inte läsa vidare. Samim programerskim metodama mislim da su vrlo važne, a često dajem veliku težinu dizajnu koda ako imam vremena. Većina nas ima vrlo individualne pristupe programiranju, a u velikim projektima s jednim programerom ključno je biti strogo i dosljedan.
Striktnu programersku metodu možemo smjestiti u Slow & Clean-Programming (SCP). Za čistu razvoj algoritama SCP nije preporučljiv, jer programer tada može zauzeti detaljima umjesto da ostvari funkcionalnost algoritma za rješavanje problema. Za testiranje ideja programer može koristiti Quick & Dirty-Programming (QDP).
Kada algoritmi prođu prve optimizacije, mogu se očistiti od općih nepotrebnosti (čudna imena varijabli i slično). Postoji više razina optimizacija, a prvu nazivam primarnom optimizacijom. Ona je čisto matematičke prirode i treba smanjiti bilo kakve nepotrebne izračune. Dalje imamo sekundarnu optimizaciju, koja podrazumijeva unaprijedno izračunavanje (amortizaciju) putanja/rezultata izračuna koji se stalno ponavljaju. Postoji još mnogo optimizacija, ali ove su one koje uvijek dolaze prije veće razvoja algoritma. Kada imamo dobro formuliran algoritam s najnižom računskom složenošću, možemo ga optimizirati u čistom assembleryju. Ovaj postupak obično je vrlo skup, ako ga usporedimo s prednostima između implementacija u različitim stvarnim programskim jezicima. Programmer tenderar oftast att expandera till ohanterlighet om vi inte har en viss likformighet i sättet att beskriva funktionerna. Det vanligaste sättet att hantera större problem, är att beskriva problemet i ett par underproblem. Dessa underproblem delar vi sedan upp i ytterligare underproblem. på detta förfaringssätt gör vi tills vi kan lösa de små delproblemen. Märk att detta är en "Söndra-och-Härska"-algoritm. Oftast är delproblemen mer eller mindre besläktade, och de som är starkt besläktade ska skrivas i närgränsande textmassa (helt naturligt i Simula, mindre naturligt i andra språk). Dessa textmassor är moduler i verklig mening och jag brukar kalla dessa <name>handler (exempelvis ViewHandler, TraceHandler, SabineHandler). Huvudprogrammet ska ha ett mindre kryptiskt namn, som koncist beskriver vad det utför eller är ett rent kommersiellt estetiskt namn. Figuren 4.21 visar den övergripande bilden på hur mitt programs uppstyckning indelats [^1].
Vid färdigställning av en modul ska denna vara helt rensad och normaliserad. Normaliseringen utgör fasen då programmeraren gör en fullständig likformighetsomformning av programkoden. Detta innebär att hon fullständigt ska beskriva funktionerna i funktionshuvuden, och svårare konstruktioner ska kortfattat beskrivas i närgränsande områden. För programmeraren är programmet som ett stort bevis med definitioner och satser. Varför ska vi inte kräva att programmen ska vara lika vackra som matematiska bevis, eller välskrivna som de bästa litterära verken? Nästa sida visar min normaliseringsuppbyggnad, och layouten är tagen från Amiga-Autodocs standard.
/****** <Handler name> **************************************
* *
* NAME *
* <Function name> -- <Small description> *
* *
* SYNOPSIS *
* <Function name> ( <parameters> ) *
* *
* FUNCTION *
* <Big description> *
* *
* INPUTS *
* <Parameter description> *
* *
* RESULT *
* <Computed data description> *
* *
* EXAMPLE *
* Just necessary if it is a Global or Child function. *
* *
* NOTES *
* Type of function: *
* <Global, Master, Slave or Child> *
* ( <Realtime V:<velocity> > <Isochrone> *
* <Parallel or Sequential> *
* <Iterative, Recursive <Bottom upp or Top down>, *
* Input/Output or Event> *
* <Monte Carlo, Las Vegas, Pseudoprobabilistic or *
* Deterministic> *
* <Depth first, Width first, Greedy or Heuristic>) *
* function *
* <Function name>_<Nearest Parent name> *
* *
* BUGS *
* <Known bugs or logical missconditions> *
* *
* SEE ALSO *
* <This functions Global, Slave and Child calls> *
* *
* *
*************************************************************
*
*/
<Function name> ( <parameters> )
{
<Definitions>
Konstants have big first letter.
Descrete variables are i,j,k ...
Continous variables are x,y,z ...
Array variables are A[],B2[][],C3[][][]...
Pointers have big first letter and the type of data
structure with the leading characters as a suffix.
Suffixes are: <Oneway, Double, Circular or Vien> List,
<Binary, B- or <specialls>> Tree,
<Plain, Binomial or Fibonacci> HEap,
<Open, Chaining or Universal> HAshing ...
Initiatus <pseudoconstants, script or graphics>
<Itera or Recursiva> Computa
or
Redirection of programflow.
<Function return>
}
Ove stvari su trivialne kada kod ima manje od stotinu funkcija. Veliki problemi obično imaju znatno više funkcija, i vjerujte mi, nije trivialno kada moramo normalizirati ove programe. Ponekad može biti teško pronaći optimum za najbržu implementacijsku cestu – posebno kada programer dugo vremena boravi u QDP-fazi, tada se ovi problemi pojavljuju. Često se ta „točka“ osjeća kroz prethodno iskustvo. Svi ljudi mogu programirati, ali samo najbolji programeri balansiraju na tom ravnotežnom stanju. Hoće li ovaj projekt biti zaista optimalna implementacija, ostavljam kao otvoreno pitanje onima koji nisu računalni znanstvenici. Sam ja smatram da je implementacija išla prepolako, a to se temelji na nešto složenijim varijantama funkcija koje sam se prisilio napraviti u službi znanosti (što ne žalim).
Zaključci
Kada sam počeo ovaj projekt, nadao sam se da će postojati malo materijala o ovim problemima, kako bih što više proširio svoje pogledе. Moja želja je ispunjena u iznenađujućoj mjeri. Iako univerzitetska biblioteka (UB2) ima veliki broj materijala iako sam dobio nekoliko vrijednih imena od svog mentora, ispostavilo se da je potrebno četiri tjedna dubokih istraživanja kako bi se pronašao relevantan materijal. Obično količina informacija ekspodira kad pronađemo nekoliko tragova, ali u ovom slučaju to nije bilo tako. Čini se da veliki broj znanstvenika koji se bave audio-ray-tracingom svijesti besmislenost situacije i ostavlja problem sljedećim generacijama s boljim računalima. Ovo se može usporediti sa video-ray-tracingom, gdje postoji vrlo veliki broj "pristaša".
Iako Amiga ne posjeduje toliku računalnu moć kao razne radne stanice, želim istaknuti da snaga CPU-a nije sve. Izgledno umjetne implementacije funkcija koje sam ponekad prisilio sebe da napišem, nikada ne bi vidjele danja svjetlosti na drugim sustavima, jer je razina frustracije zbog neefikasnosti algoritama ponekad bila nerazumna. S obzirom na to, spor grafički sučelje bi bilo velika prepreka i spriječilo bi me da se usredotočim na programiranje i specifične algoritme. Stoga je izbor računala i programskog jezika pokazao se kao dobar izbor. Međutim, za realno vrijeme izračune potrebna je "Iris Crimson" (SGI stroj).
Često se kaže da problem traje najmanje dvostruko duže da se riješi nego što se prvi put dodijeli vremena. To se vrlo često događa zbog toga koliko velika su naša ambicija i vizija. Kada vizije premašuju ambiciju, to će potrajati znatno duže. U ovom slučaju moja vizija je daleko veća od moje ambicije. Iako je ovo činjenica, to nikako ne treba tumačiti kao da je moja ambicija bila srednja. Oni koji sami žele početi rješavanjem problema audio-ray-tracinga, mogu podnijeti zahtjev da pristupe materijalu "The Making Of 3D-Audio so far" i pogledati što ih možda čeka.
3D-Audio instruction manual
What is 3D-Audio
This program is a simple but fast audio-ray-tracer, with a semiprofessional three dimensional editor as a base for human-computer interaction. It has been developed on the Amiga line of computers and thus works, at the moment, only on these machines. Recent virtual-reality hysteria and the vast amount of video-ray-tracers on these machines, gave Me the idea of making this piece of software, as a prologue to the strong definition of VR (my own). Most parts of the program are profound, but a warning to those with small sized memories when ray-tracing. I am not checking if there is enough memory when starting the ray-trace session, and thus could make the computer hang, when the vast amount of ray-tracing hits are found and stored.
What it isn't
As for the most audio-ray-tracers there are some limitations, and thus it can't be used in predicting the room model impulse response without having the following facts in mind.
(1) The emitted sound is strongly quantized in direction, due to the heuristic function.
(2) All model surfaces are plane and smooth.
(3) Specular reflections and angle-independent absorption are assumed.
(4) Energy addition is assumed.
(5) Discontinuities at the edges are discarded.
(6) Diffraction, Dispersion, Resonance and Refraction isn't implemented yet.
(7) Partially diffuse sound field is assumed.
Installing the Software on Hard-drive
(0.1) If you don't have an Amiga computer, then you have to go and purchase one, or else go to 1.1
(0.2) Follow the hardware set-up and install the system disks. Go to 1.2
(1.1) Turn the computer on.
(1.2) Find a suitable place where you want the software, and make a New Drawer there.
(1.3) Insert 3D-Audio disk in any drive and double click at the disc icon.
(1.4) Multiselect the six drawers and the main program, and drag them to the New Drawer.
(1.5) Click once at the program icon and request information about the program.
(1.6) Change screen resolution to your preference in the Tool Types list.
(1.7) Double click at the program icon and way you go.
Happy modelling!!!
Main Editing Windows
The two editing windows are the "3D View & Edit" window (VE) and the "Drawing Pool" window (DP). Moving, resizing and turning objects are done by operating gadgets in VE. Additional gadgets in VE are for model purposes that relate to the object size/position, viewpoint, perspective and the grid. Inserting new objects and changing old ones are done by operating gadgets in DP. The following two pictures shows what each gadget does, and I urge the user to open the test model and play around with it.
Objects, Materials, Flights & Characteristics
When pressing "New..." or "Select..." gadgets in DP one of the following requester windows will appear on the screen. The "Object Pool" window handles the object fetch table, the "Material Pool" window (MP) handles the material fetch table and the "Flight Pool" window handles the objects morphing and flight path fetch table, and this end of the program is not yet fully implemented, and thus have no effect on the traced data.
When pressing "New..." or "Edit..." gadgets in MP the "Characteristics" requester window appears on the screen. This window handles the entities of a specific material, and it's properties are visualized in the following picture.
Computed Data
When you reach the stage of tracing the model, the "Computed Data" window gets active. If it's active the mouse pointer shows a clock. This indicates that the computer is calculating the reverberation times with Sabine's formula, and afterwards, that the ray-tracing has begun. While the computation commences, the echogram, at the bottom of the window, shows the computed ray hits. The reverberation distribution is visualized at the upper right corner, and you can - when computation is finished - change the air relative humidity, with the cycle gadget under the reverberation distribution.
Preferences
I have implemented a preference window to make modelling life easier. Here you can change the location path - mass storage location - for each model type (e.g. models, objects, materials and flights) and the traced data. Furthermore you can change the screen colors as in the workbench palette-preferences. The following picture shows this window.
Menus
As usual the "Project" menu is at the left most position and it has the following properties visualized in the following picture.
The "Editing windows" menu has the effect of placing the respective window front most.
The "Tracer" menu have all the parameters associated to the accuracy of the ray-tracer algorithm, and the initiation of tracing is also done here.
The "Miscellaneous" menu have, amongst other things, the Undo stack clearance functions. If you run out of memory, after a while modelling, you have probably many things in these undo stacks. This is because the computer remembers all deletion within the respective model type.
Data Files
Each of the model types can be edited in a normal text editor. All though it isn't recommended that a novice user should mess in these files, an expert user could have some fun with them. She can, amongst other things, create new primitive objects in this way. The following lists shows the file formats associated with 3D-Audio software.
WARNING!!!
Users that input false data format, could make the program calculate very strange things, and it is very important that she knows what she is doing. I have no responsibility if the computer goes berserk, or some "new" acoustical phenomena are encountered.
Drawing File Form
File form:
$3D-Audio_DrawingHeader
# <number of objects> <Magnification 1-10000> <Perspective 1-250> <Measure: 0=Meter, 1=Feet, 2=Off> <Grid Size 0-11 (0=Big 11 Small)>
$<Object #n model name>
#<Object #n><origo XO, YO, ZO>
<eigen vectors XE, YE, ZE><size XS,YS, ZS>
$miniOBJHYES
Remark: $miniOBJHNO and discard the following if no object data is present.
$ <Object #m primitive name>
# <number of primitive objects>
# <Special primitive #> <Eight x,y,z coordinates>
0: Tetrahedra
1: Cube
2: Octahedra
3: Prism
4: Room
5: Pyramid
6: Two dimensional plate
$miniMATRHYES
Remark: $miniMATRHNO and discard the following if no material is assigned.
$ <Material name>
# 0 <type of source> 0 0
0: Furniture
1: Sender
2: Receiver
Remark:Frequencies (Hz): 32 63 125 250 500 1k 2k 4k 8k 16k 32k
# <Eleven absorption coefficients ranging from 0 to 100>
# <Eleven directivity numbers at above stated freq.>
0: Omnidirectional
1: Bicardioid
2: Cardioid
$miniFLGHNO
Remark: Not implemented.
Example:
$3D-Audio_DrawingHeader
#1 9711 231 0 5
$Big Sofa
#0.040670 0.171643 0.656502 1 -0.001465 0.000168 0.001466 0.999994 -0.003108 -0.000164 0.003108 0.999995 67 92 99 $miniOBJHYES
$Big Sofa
#4
#1 -1.378665 -0.251693 0.281572 1.341315 -0.250144 0.273905 1.341489 0.251856 0.273736 -1.378491 0.250308 0.281404 -1.378989 -0.251859 -0.218429 1.340991 -0.250311 -0.226097 1.341165 0.251690 -0.226266 -1.378815 0.250141 -0.218600
#1 1.345374 0.259635 0.275123 1.478653 0.259711 0.274748 1.478686 0.357711 0.274715 1.345407 0.357636 0.275090 1.345049 0.259469 -0.224880 1.478328 0.259545 -0.225255 1.478362 0.357545 -0.225288 1.345084 0.357469 -0.224912
#1 -1.525151 0.240771 0.279624 -1.391872 0.240847 0.279249 -1.391839 0.338847 0.279215 -1.525117 0.338770 0.279591 -1.525478 0.240603 -0.224378 -1.392198 0.240679 -0.224754 -1.392165 0.338679 -0.224787 -1.525444 0.338602 -0.224412
#1 -1.394825 0.222433 0.385671 1.325155 0.223981 0.378003 1.325443 0.809575 0.508692 -1.394537 0.808027 0.516360 -1.394881 0.244214 0.288071 1.325099 0.245763 0.280403 1.325387 0.831357 0.411093 -1.394593 0.829808 0.418760
$miniMATRHYES
$Skin
#0 0 0 0
#8 10 7 12 25 30 29 31 40 45 44
#1 1 1 1 1 1 1 1 1 1 1
$miniFLGHHNO
Objects File Form
File form:
$3D-Audio_ObjectsHeader
# <number of objects>
$ <Object #n primitive name>
# <number of primitive objects>
# <Special primitive #> <Eight x,y,z metric coords.>
0: Tetrahedra
1: Cube
2: Octahedra
3: Prism
4: Room
5: Pyramid
6: Two dimensional plate
Example:
$3D-Audio_ObjectsHeader
#1
$Cube
#1
#1 -1 -1 1 1 -1 1 1 1 1 -1 1 1 -1 -1 -1 1 -1 -1 1 1 -1 -1 1 -1
Materials File Form
File form:
$3D-Audio_MaterialsHeader
$ <Material name>
# 0 <type of source> 0 0
0: Furniture
1: Sender
2: Receiver
Remark:Frequencies (Hz): 32 63 125 250 500 1k 2k 4k 8k 16k 32k
# <Eleven absorption coefficients ranging from 0 to 100>
# <Eleven directivity numbers at above stated frequencies>
0: Omnidirectional
1: Bicardioid
2: Cardioid
Example:
$3D-Audio_MaterialsHeader
#1
$Black Hole 100%
#0 0 0 0
#100 100 100 100 100 100 100 100 100 100 100
#0 0 0 0 0 0 0 0 0 0 0
Trace Data File Form
File form:
$3D-Audio_ForwardTraceHeader or $3D-Audio_BackwardTraceHeader
#Number of trace hits
#<Ray density><Reverberation accuracy><Specular depth><Diffusion accuracy><Diffraction accuracy><Frequency accuracy><Mean reverberation time in seconds><Max Number Of Receivers>
Remark: Accuracy: 0.00 to 1.00 are Manual values -1.00 initiate Auto state.
Density, Depth & Max number: Integer values
Seconds: Float value.
Remark: Entries at frequencies (Hz): 32 63 125 250 500 1k 2k 4k 8k 16k 32k
# Frequency dependant reverberation times, 11 entries at 40% R. hum.
# Frequency dependant reverberation times, 11 entries at 50% R. hum.
# Frequency dependant reverberation times, 11 entries at 60% R. hum.
# Frequency dependant reverberation times, 11 entries at 70% R. hum.
#<Ray length in meters><Accumulated absorption coefficient><Receiver number>
# Directivity eigen vectors XE, YE, ZE
$Sender Name
$Receiver Name
Example: These data should not be manually edited, even if you know what you are doing!!!
Preferences File Form
File form:
3D-Audio_Preferences_file.
Drawings Path
Objects Path
Materials Path
Flights Path
Trace Path
Remark: Color numbers 0-7, RGB values 0-15, Seven entries!
<color number> <Red value> <Green value> <Blue value>
Remark: For further expansions only, don't change manually.
0 0 0 0
Example:
3DAudio_Preferences_file.
Work Harddisk:C Prg/Sound Tracer/Drawings
Work Harddisk:C Prg/Sound Tracer/Objects
Work Harddisk:C Prg/Sound Tracer/Materials
Work Harddisk:C Prg/Sound Tracer/Flights
Work Harddisk:C Prg/Sound Tracer/Traced_Data
0 13 8 6
1 0 0 0
2 15 13 9
3 14 11 8
4 15 0 0
5 0 15 0
6 0 0 15
7 15 15 15
0 0 0 0
Pojašnjenja, definicije itd.
Additivna apsorpcija
Neka zraka energije reflektira na površinama s odgovarajućim frekvencijski ovisnim koeficijentima apsorpcije , tada će ukupna apsorpcija iznositi:
Jasnoća
je impulsni odziv prostora.
dB
Deutlichkeit (Definicija)
je impulsni odziv prostora.
100%
Diracova impulzna funkcija
Definicija:
(1) t
(2)
(3) ( je parna)
(4)
(5)
Disjunktno
Imamo dvije skupine A i B koje nemaju zajedničkih elemenata.
Dinamika
I je širina informacijskog kanala u bitovima.
dB
Pojašnjenje dinamike
Pomak binarnog broja ulijevo za jedan korak znači udvostručenje vrijednosti. Prema definiciji decibela, svaki bit ima vrijednost dB. To daje formulu.
Raspršenje energije u prostoru
Q: akustična snaga izvora zračenja.
: intenzitet energije, r metara od izvora zvuka.
: ukupna apsorpcijska površina određene površine.
: koeficijent apsorpcije određene površine.
N: broj površina u prostoru.
Propagacija energije
Q je akustična snaga izvora zračenja.
je intenzitet energije, r metara od izvora zvuka.
Faltanje (Convolution)
Definicija: Diracova odabirka je diskretni niz sljedećeg oblika:
Ulazni podaci su diskretni niz sljedećeg oblika:
Skup F je statičan, ali S je dinamičan i mijenja svoje elemente u svakom odabirnom trenutku: sj+1=sj, počevši od sn-1. Najnoviji podaci o odabiru su s0, i imajte na umu:
jer ne moramo faltirati rezultat duže nego što je duljina Diracove odabirke. Faltanje F i S tada postaje:
Ovo daje n multiplikacija i (n-1) zbrajanja. Radi jednostavnosti i jasnoće, kažem da to zahtijeva n operacija po odabirnom trenutku (op znači jedno zbrajanje plus jedna multiplikacija).
I je širina podataka o informacijama. S je broj članova (zvučni izvori).
Objašnjenje : Najveći broj koji možemo predstaviti s I bitova je . Prilikom zbrajanja S članova, maksimalna vrijednost postaje . Da bismo utvrdili koliko bitova to iznosi, učinimo sljedeće:
Impulsnog odziva

Diracov impuls na slici B.1 napravljen je jakim i brzim clapanjem ruku. Ovaj se signal odabirao frekvencijom od 35 kHz putem jednostavne mikrofona i ručno izgrađenog odabirača. Odabirač je bio povezan s Amigom, a cijeli proces traje otprilike 460 ms.
Lateralna učinkovitost
je impulsni odziv prostora.
je energija koja dolazi s bočnih strana.
je frekvencija uzorkovanja. je vrijeme trajanja zvuka izračunato pomoću Sabineove formule. je ulazna širina podataka u bitima.
Objašnjenje : Da bismo mogli interpolirati ulazne podatke u svakom vremenskom trenutku, moramo pamtiti sve uzorkovane podatke. Ovo pamćenje ima duljinu od jedinica, jer zahtijevamo pamćenje do duljine Diracove impulsa. Gornji čin i definicija širine podataka daju ovu formulu.
MIXTHEM Kapacitet
op je zbrajanje plus množenje. D je računalna kapacitet u broju op/s. je frekvencija uzorkovanja. S je broj zvučnih izvora. je frekvencija uzorkovanja pri uzorkovanju Diracovog impulsa. je vrijeme trajanja zvuka (reverberacija) izračunato pomoću Sabineove formule. R je broj primatelja.
Objašnjenje MIXTHEM Kapacitet: Zbrajanje svih zvučnih izvora za svaki primatelj mora se izvršiti istom brzinom kao i dolazni podaci, što daje sljedeći doprinos formuli:
Dužina impulsnog odziva je jedinica i sadrži direktni, refleksirani i reverberacijski zvuk. Također, moramo filtrirati svaki primatelj kroz dijelovih zvuka koje smo prethodno zbrojili. Ovo također mora biti izvršeno istom brzinom kao i dolazni podaci. Ovo daje sljedeći doprinos:
MIXTHEM
R je broj primatelja. je frekvencija uzorkovanja dolaznih podataka. je vrijeme trajanja zvuka (reverberacija) izračunato pomoću Sabineove formule. je izlazna propusnost podataka u broju bitova.
Objašnjenje MIXTHEM : Za svaki primatelj potrebno je bajtova za pohranu prethodno zbrojenih vrijednosti koje se koriste pri konvoluciji impulsnim odzivom (IOUT jer ne želimo izgubiti podatke tijekom izračuna). Imajte na umu da je vrlo važno imati istu frekvenciju uzorkovanja za dolazne podatke i uzorkovanje Diracovog impulsa kako bi se olakšalo prethodno zbrajanje. Ovo daje formulu.
NODIRAC Kapacitet
op je jedna adicija plus jedna multiplikacija. D je računalna kapacitet u broju op/s. je frekvencija uzorkovanja. S je broj zvučnih izvora. je broj ranih refleksija. je broj aproksimacija reverberacije. R je broj primatelja.
Objašnjenje NODIRAC Kapaciteta: Svaki izvor stvara S direktnih zvukova za svaki primatelj. To znači da nam treba op za konvoluciju direktnog zvuka.
Rane refleksije stvaraju XE reflektiranih zvukova za svaki primatelj. To znači da nam treba op za konvoluciju reflektiranog zvuka. Aproksimacije reverberacije stvaraju XR reverberacijskih zvukova za svaki primatelj. To znači da nam treba op za konvoluciju reverberacijskog zvuka.
Sve navedeno mora se izvesti u svakom trenutku uzorkovanja, što daje formulu.
NOMIX Kapacitet
op je jedna adicija plus jedna multiplikacija. D je računalna kapacitet u broju op/s. je frekvencija uzorkovanja. S je broj zvučnih izvora. je frekvencija uzorkovanja pri uzorkovanju Diracove impulsa. je vrijeme reverberacije izračunato pomoću Sabineove formule. R je broj primatelja.
Objašnjenje NOMIX Kapaciteta: Duljina impulsnog odziva je jedinica i sadrži direktni, reflektirani i reverberacijski zvuk. Također, svaki izvor stvara dijelova zvuka za svaki primatelj. To znači da nam treba op za konvoluciju svih dijelova zvuka. Sve navedeno mora se izvesti u svakom trenutku uzorkovanja, što daje formulu.
NOMIX
je veličina privremene pohrane za konvoluciju impulsnog odziva. R je broj primatelja. su frekvencije uzorkovanja impulsnog odziva. je vrijeme trajanja zvuka izračunato pomoću Sabineove formule. je ulazna širina podataka u bitima.
bajtova
Objašnjenje NOMIX : Za privremenu pohranu podataka konvolucije svakog predajnika potrebno je bajtova. Od svakog predajnika do svakog primatelja potrebno je bajtova za pohranu impulsnog odziva koji se koristi u konvolucijama. To daje sljedeće:
Nyquistov teorem
Uzorkovanje signala s niskom propusnošću i širinom pojasa B Hz zahtijeva frekvenciju uzorkovanja od 2B Hz kako bi se uključile sve frekvencije do B Hz.
Dokaz: Val se sastoji od pozitivnog i negativnog dijela oko referentne točke. Ako se ovaj val oscilira B puta u sekundi oko referentne točke, imat ćemo B pozitivnih dijelova i isto toliko negativnih dijelova. Da bismo uključili oba dijela kako bismo mogli regenerirati val, potrebno je uzorkovati 2B puta u sekundi.
Vrijeme rasta
Vrijeme do kada se polovica energije u transmitiranoj Dirac pulsu dostigne testnu točku.
Sabineova formula
V je slobodna zapremina prostora. je ukupna apsorpcijska površina određene površine. je koeficijent apsorpcije određene površine. m je konstanta prigušenja zraka, a može se zanemariti ako je prostor mali. N je broj površina u prostoru.
Spline funkcija (kubna)
Definicija: Neka budu uzorkovane točke, a funkcija s(x) definirana na intervalu . Također, moraju biti kontinuirane na ovom intervalu. Za svaki podinterval neka kubni polinom interpolira vrijednosti između diskretnih uzorkovanih točaka. Tada je kubna spline funkcija.
Superelipsoid
Knjige, softver i oprema
Timeo hominem unius libri
St. Thomas Aquinas
Za one koji su sami razmišljali o obavljanju sličnog posla, ovaj pregled izvornih materijala može biti od velike pomoći. Sve sljedeće jedinice navedene su s najčešćom jedinicom na vrhu.
Utjecaj knjiga
Heinrich Kuttruff, Room Acoustics
Andrew S. Glassner, An Introduction to Ray Tracing
K. Blair Benson, Audio Engineering Handbook
Alan Watt & Mark Watt, Advanced Animation & Rendering Techniques
Stewen Brawer, Introduction to Parallel Programming
John Watkinson, The Art of Digital Audio
Utjecaj članaka
Yoichi Ando, Calculation of subjective preference at each seat in a concert hall, Acoustical Society of America 74 (1983) 873
A. Krogstad, S. Strøm & S. Sørsdal, Fifteen Years' Experience with Computerized Ray Tracing, Applied Acoustics 16 (1983) 291
Katsuaki Sekiguchi & Sho Kimura, Calculation of Sound Field in a Room by Finite Sound Ray Integration Method, Applied Acoustics 32 (1991) 121
Korištenje knjiga
Amiga ROM Kernel Reference Manual: Include and Autodocs
Amiga User Interface Style Guide
Amiga ROM Kernel Reference Manual: Libraries
Amiga Hardware Reference Manual
Steven Williams, Programming the 68000
Craig Bolon, Mastering C
J.D. Foley & A. van Dam, Fundamentals of Interactive Computer Graphics
Karl Gustav Andersson, Lineär Algebra
Grant R. Fowles, Analythical Mechanics
Tobias Weltner, Jens Trapp & Bruno Jennrich, Amiga Graphics Inside & Out
Brze reference knjige
Encyclopedia Britannica version 1991
Webster's International Dictionary
Jorge de Sousa Pires, Electronics Handbook
Carl Nordling & Jonny Österman, Physics Handbook
Lennart Råde & Bertil Westergren, Beta Mathematics Handbook
Steven Williams, 68030 Assembly Language Reference
Alan V. Oppenheim & Ronald W. Schafer, Digital Signal Processing
Utjecaj softvera
Real 3D v2.0, RealSoft
Caligari, Octree
Lightwave, NewTech
Real 3D v1.4, RealSoft
Imagine 2.0, Impulse
Sculpt 3D, Eric Graham
Videoscape, Aegis
Korištenje softvera
Finalwriter, SoftWood, za pisanje dokumenata
Deluxe Paint, Electronic Arts, za slikovnu obradu i retusiranje
TxEd, za programiranje
Tool Maker, Commodore, za izradu GUI-a
SAS C v6.0 i v6.5 kompajler, za generiranje programa
CPR, za otklanjanje grešaka
Enforcer, kao alat za otklanjanje grešaka
Devpac 3.0, HiSoft, za optimizaciju
Metacomco Macro Assembler, za optimizaciju
Maple IV, za istraživanje hipoteza
Korištenje hardvera
Amiga 500+ sistem 2.1 s 50 MHz MC68030, 60 MHz 68882 i 4 MB, za razvoj
Vidi Amiga, Rombo, za video skeniranje raznih slika pomoću Sony Handycam
Star LC24-200, za preprint korekturu
Hewlett Packard Desk Jet 550C, za master printout v1.0
Hewlett Packard Desk Jet 520, za master printout v2.0 i više
Amiga 1200 sistem 3.0 s 28 MHz MC68020 i 6 MB, za testiranje i razvoj
Amiga 1000 sistem 1.3 s 7.14 MHz MC68000 i 2.5 MB, za optimizacije
Amiga 3000 sistem 3.1 s 25 MHz MC68030 i 25 MHz 68882, za provjeru konsistentnosti
Amiga 4000 sistem 3.1 s 30 MHz MC68040, za provjeru konsistentnosti
Quadraverb, Alesis, za auralizacijske eksperimente
Samostalno izgrađena sampler, MIDI interfejs i mikser za auralizacijske eksperimente
DSS8+ (Digital-Sound-Studio) Hardver i softver, GVP, za auralizacijske eksperimente
Dinamički mikrofon, Sherman, za Dirac sampling (određivanje korelacije modela stvarnost)
Reference
1
Hofstätter, M., Ilustrirana znanost 11 (1989) 50.
2
Novi rezultati, Ilustrirana znanost 12 (1993) 19.
3
IEC 581.
4
McGraw-Hill Encyclopedia of Science & Technology 8 (1992) 444.
5
Kuttruff, H., Room Acoustics (1991) 82.
6
Swiatecki, S., Ilustrirana znanost 5 (1994) 50.
7
Gabrielsson, A. & Lindström, B., "Očuvana kvaliteta zvuka visokofidelnih zvučnika," J. Audio Eng. Soc., 65, (1979) 1019-1033.
8
Shaw E. A. G., "Akustika vanjskog uha", Handbook of Sensory Physiology, sv. V/1: Auditory System, Springer-Verlag, Berlin, 1974.
9
Čovječji sluha, Encyclopedia Britannica, 27 (1991) 204.
10
Meyer, J. Akustika i izvođenje glazbe, Verlag das Musikinstrument (1978)
11
Olsen, H.F., Glazba, fizika i inženjerstvo, 2. izdanje (1967)
12
Ćelija-ćelija komunikacija putem kemijskog signaliziranja (Encyclopedia Britannica) 15 (1991) 599.
13
Toole, Floyd E., Načela zvuka i čušenja (Audio Engineering Handbook) 1.42 (1988).
14
Oppenheim, A. V. & Shafer, R. W., Digital Signal Processing. Prentice Hall, Engelwood Cliffs, NJ, (1975) 242
15
Hilmar Lehnert & Jens Blauert, Načela binauralne simulacije prostora, Applied Acoustics 36 (1992) 285.
16
Adams, G.J. & Watson, A. P., Digitalna obrada zvuka za simulaciju akustike prostora. ASSPA, 1989, 103-107
17
Endokrini sustavi, Encyclopedia Britannica, 18 (1991) 291.
18
Životinjsko ponašanje, Encyclopedia Britannica, 14 (1991) 662.
19
Feromoni, Encyclopedia Britannica, 9 (1991) 262.
20
Istraživanje, Encyclopedia Britannica, 19 (1991) 48.
21
Simulator leta, Encyclopedia Britannica, 4 (1991) 834.
22
Möller H., Osnove binauralne tehnologije, Applied Acoustics 36 (1992) 171
23
Gierlich H.W., Primjena binauralne tehnologije, Applied Acoustics 36 (1992) 219
24
Lehnert H. & Blauert J., Načela binauralne simulacije prostora, Applied Acoustics 36 (1992) 259
25
Vian J. & Martin J., Binauralna simulacija akustike prostora: Praktične upotrebe i primjene, Međunarodni simpozij o auditornom virtualnom okruženju i teleprezenca (Bochum, 8. travnja 1991) & Applied Acoustics 36 (1992) 293
26
Krokstad A., Strøm S. i Sørsdal S., Petnaest godina iskustva s računaliziranim tragovima zraka, Applied Acoustics 16 (1983.) 291
27
Roese J. A. i Khalafalla A. S., Stereoskopsko gledanje s PLZT keramikom, Ferroelectrics 10 (1976.) 47
28
Roese J. A. i McCleary L., Stereoskopska računalna grafika za simulaciju i modeliranje, SIGGRAPH '79 Proceedings, Computer Graphics 13(2) (1979.) 41
29
Kuttruff H., Akustika prostora, Elsevier Applied Science (1991.) 62
30
Forsberg P., Applied Acoustics 18 (1985.) 393
31
Choi S. i Tachibana H., Procjena impulsnog odziva u zvučnom polju pomoću metode konačnih elemenata, Trinaesti ICA br. E11-7 (1986.)
32
Borish J., Proširenje modela slike na proizvoljne poliedre, Acoustic Society America 75(6) (1986.) 1827
33
Kirszenstein J., Model izvora slike za analizu akustike prostora i elektroakustičku simulaciju, Applied Acoustics 17 (1984.) 275
34
Krokstad A., Strøm S. i Sørsdal S., Izračunavanje akustičkog odziva prostora pomoću algoritma traganja zraka, Sound & Vibration 8(1) (1968.) 118
35
Vorländer M., Simulacija prijelaznog i stacionarnog širenja zvuka u prostorima pomoću novog kombiniranog algoritma traganja zraka/izvor slike, ASA 86(1) (1989.) 172
36
Van Maercke D., Simulacija zvučnih polja u vremenskom i frekvencijskom domenu pomoću geometrijskog modela, Dvanaesti ICA br. E11-7 (1986.)
37
L'Espérance A., Herzog P., Diagle G.A. i Nicolas J.R., Heuristički model za širenje zvuka vani temeljen na proširenju geometrijske teorije zraka u slučaju linearnog profila brzine zvuka, Applied Acoustics 36 (1992.) 111