|
|
Bu makalenin farkl� dillerde bulundu�u adresler: English Castellano Deutsch Francais Italiano Turkce |
Antonio Castro <acastro/at/ctv.es> Yazar hakk�nda: Bilgisayar Bilimi benim i�im ve de bo� zamanlar�n�m bir par�as�. Ben de muhtemelen herkes gibi hobilerimi payla�maktan keyif al�yorum. �tiraf ediyorum! ben Windows sevmeyen o garip karakterlerden biriyim, en az�ndan MSDOS yetenekleri konusunda daha az seviyede kendini be�enmi�lik yapan bir oyunca��n kategorisinde ve bilgisayar�n�z� i�e yaray�p yaramad���n� veya ne i�e yarad�n� hi�bir zaman bilemeyece�iniz bir s�r� dosya ile doldurmuyor. T�rk�e'ye �eviri: �zg�r Ula� K�rlang�� <ozgur_kirlangic/at/be.itu.edu.tr> ��erik:
|
POVRAY III: Yinelemeli Yap�lar�n Tasar�m��zet:
Bu defa Porvay ile nas�l yinelemeli yap�lar tasarlanabilece�ini ve g�zel
resimler yarat�labilece�ini ke�fediyoruz.
|
CGS ilkelleri daha komplike modeller olu�turmak i�in birle�tirilebilen temel kat� objelerdir. Son kombinasyon gurupland�r�labilir ve �l�ekleme (scaling), ilerletmeler (translations), d�nd�rmeler (rotations) veya doku ile doldurmalar (filling in textures), vb... kullan�larak d�n��t�r�lebilir. Bu d�n��t�rmelerin her birini, bile�ik model i�indeki herbir ve t�m temel ilkellere uygulamak �art de�ildir.
CGS ilkellerini birle�tiren d�rt ayr� method ile tekil ilkellere uygulanan be�inci bir tamamay�c� metod mevcuttur:
A ve B'nin i� y�zeylerinin kald�r�lmas� hari� Birle�im methodu gibidir. E�er objeler yar�saydam (translucid) de�illerse bu �zelli�in kullan�m� gereksizdir.
Takip eden �rneklerde kat� modeller olu�turmak i�in bu i�lemlerden birka��n� kullanaca��z. Model olu�tururken �ncelikle toplam hacmi olu�turmak i�in gerekli olan t�m elemanlar� eklemeyi sonra da istenmeyen par�alardan kurtulmak i�in kesi�im i�lemlerini kullanmay� tavsiye ederim.
#define EatenApple = intersection { object { WholeApple } object { Bite1 inverse } object { Bite2 inverse } } |
Bir kat� modeldeki ilkel objelerin ortak y�zeyleri varsa y�zeylerden biri �zerindeki noktalar�n render edilmesinde makine hassasiyetine ba�l� probemler olabilir. Bu problem y�zeyin hangi objeye ait oldu�unu net bir �ekilde ay�rd etmek i�in objelerden birine �ok k���k bir yer de�i�tirme vermek suretiyle giderilebilir.
Bir g�r�nt� i�indeki elemanlar genellikle rastlant�sal bir s�ralama ile tan�mlan�rlar. Bununla beraber, yenilemeli yap�lar yaratmak i�in �rne�in, prosed�r d�ng�leri uygulaman�n �ok elveri�li oldu�u durumlar mevcuttur. Povray i�inde d�ng�ler �e�itli metodlar kullan�larak uygulanabilirler. Bir metod dilin kendisi taraf�ndan sa�lanan d�ng� ak�� kontrol direktifidir (loop flow control directive).
D�ng� ak�� kontrol� POVRAY programlama aray�z�n�n bir�ok direktifinden sadece biridir. Bir s�re �nce #declare ve #include gibi ba�ka direktiflerden bahsetmi� ve di�er bir�o�unu ikinci derecede �nemli olarak karakterize etmi�tik. Takip eden �rnek direkt olarak POVRAY i�inde d�zenlendi ve itiraf etmeliyim ki bu benim d�ng� ak�� kontrol direktifini ilk kullan���m. Bunun sebebi, genellikle d�ng� ak�� kontrol ifadelerine (for d�ng�s�) sahip harici bir program (C veya C++) ile POVRAY kayna�� olu�turarak ayn� sonucu elde etmenin m�mk�n olmas�d�r. �leride bu teknik i�in bir �rnek g�rece�iz.
C tecr�besi olan okuyucular, Povray'in programlama aray�z�n�n di�er genel ama�l� programlama dillerinde (C, C++) oldu�u kadar m�kemmel olmad���n� g�receklerdir. Bu bir s�rpriz olarak gelmemeli ��nk� POVRAY g�r�nt� tan�mlamak �zere taraslanm�� bir dildir, ve ak�� kontrol direktifleri sonradan yap�lm�� eklenmelerdir. Benzer �ekilde, POVRAY karma��k matematiksel i�lemleri ger�ekle�tirmek i�in gerekli direktifler ile her t�rl� d�ng�y� de i�ermektedir. Ki�isel olarak POVRAY'in t�m bu i�lemleri bar�nd�r�yor olmas�n� inan�lmaz buluyorum fakat di�er yandan asl�na bak�l�rsa ille de gerekli olduklar�n� d���nm�yorum, ��nk� bu i�lemleri daha g��l� programlama dilleri i�erisinde harici olarak g�rd�rmemiz herzaman m�mk�n. Bu i�lemleri d��ar�da veya i�eride ger�ekle�tirmenin kompozisyonun nihai sanatsal de�eri �zerinde ne t�r bir farkl�l�k yarataca��n� d���nemiyorum. Benim i�in en �nemli konu nihai resmin kalitesidir. Daha dar bir kapsamda g�r�nt�y� tasarlay�p ve proses etmek i�in gereken zaman ve u�ra� da bir fakt�r olmal�. Genel ama�l� programlama dillerine daha fazla a�ina olan kullan�c�lar POVRAY dosyalar�n� onlar �zerinden olu�tururken kendilerini daha iyi hissedebilirler, programlama tecr�besi olmayan di�erleri ise belkide direkt olarak POVRAY �zerinde yazarken daha rahat edebilirler. Ayr�ca basit resimler i�in POVRAY i�inde direkt d�zenleme daha kolay olurken kompleks g�r�nt�ler i�in POVRAY dosyalar�n�n di�er programlarla olu�turulmas� daha iyi olabilir. Her iki metodu da inceleyece�iz ve okuyucunun bu ba�lamda se�im yapmas�na olanak tan�yaca��z.
Bir�ok g�r�nt� basit bir fikirden yola ��karak tasarlanabilir. �lk uygulamadan sonra daha iyi bir sonu� elde edebilmek i�in baz� de�erleri de�i�tirmeye veya yakla��k de�erler kullanmaya karar verebiliriz. Yani deneme yan�lma metodu POVRAY i�erisinde g�r�nt� tasar�m� yapma i�inin �nemli bir par�ad�r. Bu makaleler serisinin ba�lang�c�nda okuyuculara resim olu�turulmay� kolayla�t�ran basit bir script-tool (POV) �nermi�tik, fakat okuyucu bu k���k script'in yeterli oldu�unu d���nmemeli. �o�u zaman �izgisiz ka��t, kalem ve bir hesap makinesine ihtiyac�n�z olacak. Bir �ok durumda tasar�mlar�m�z 3-Boyutlu geometriler i�erdi�inden, baz� efektleri elde edebilmek i�in ba�ka yolu yok bir miktar �zel geometri ve trigonometri bilgisi olmazsa olmaz. Genellikle birka� form�l� bilmek yeterlidir, bu nedenle baz� temel trigonometrik ba��nt�lar� hat�rlayal�m:
sin(a) = A / C = (Kar�� kenar / Hipoten�s)Yani:
A = sin(a)/CSonraki hat�rlatma olarak trigonometrik fonkyonlar�n ana tan�m k�melerini kuadrant�n bir fonksyonu olarak tablola�t�r�yoruz:
Kuadrant | Sin�s | Kosin�s | Tanjant |
0 .. 90 | 0 .. +1 | +1 .. 0 | 0 .. +Sonsuz |
90 .. 180 | +1 .. 0 | 0 .. -1 | -Sonsuz .. 0 |
180 .. 270 | 0 .. -1 | -1 .. 0 | 0 .. +Sonsuz |
270 .. 360 | -1 .. 0 | 0 .. +1 | -Sonsuz .. 0 |
Bu son ili�ki tek (unique) olarak tan�ml� de�il. Alfa a��s� +/- 180 dereceler i�in belirsiz (undetermined). Hesaplama y�n�nden �unu kullanmak tercih edilir:
a = atan2(A,B)Sonu� olarak P1(x1,y1,z1)'den P2(x2,y2,z2)'ye olan mesafe
D = sqrt( (x2-x1)^2 + (y2-y1)^2 + (z2-z1)^2 )
Daha bir�ok kullan��l� trigonometrik ba��nt� var fakat g�zden ge�irdiklerimiz bir�ok durum i�in yeterli olacakt�r. POVRAY i�erisinde kullan�lan trigonometrik fonksyonlar a��lar�n radyandan cinsinden verilece�ini varsayarlar. D�n���m fonksyonu radians(alfa) dereceyi radyana �evirir. Ne yaz�k ki POVRAY tutarl� de�il, �rne�in d�nmeler (rotations) derece cinsinden �l��lmektedir :-(
Bu �rnekte bir miktar temel trigonometri kullan�yoruz. Deniz kestanelerinde i�neler �yle d�zg�n bir �ekilde yerle�tirilmi�lerdir ki bu etkiyi �ansa ba�l� olarak elde etmek kolay olmasa gerek. Tasar�mc� i�neleri kesin olarak yerle�tirmek i�in bir algortma d���nmeli ve bunu nihai 3 boyutlu konfigurasyonun net tasavvuru ile uygulamal�. Bu �rne�in kaynak kodu gerekti�i �ekilde belgelendi, bu nedenle burada daha fazla yorum yapman�n bir faydas� yok. Bu �rnek bir d�ng� algoritmas�n�n i�e yarad��� net bir durum. Kullan�c�n�n d�ng�y� POVRAY i�erisinde veya d��ar�da bir C-program� �zerinde uygulamaya karar vermesi ki�isel tercih meselesidir.
Baliklar�n kaynaklar� da burda. Bunlar daha �nce bahsedildi�i gibi CGS ilkelleri kullan�larak modellendiler.
S�rada geri kalan g�r�nt�n�n kaynaklar� var. Buradaki en �zel i� hi� ��phesiz ki kompozisyndaki ba�l�ca karakterler olan deniz kestanelerinin (ispanyolcas� erizo) tan�m�:
Bu �rnek i�erisindeki birka� efekt tamamiyle yeni, mesela kum �zerindeki y�zey efektleri (kum �zerindeki dalgalar), atmosferik efektler (ye�il deniz renginde �ok kal�n ve �ok nemli bir sis) ve pek tabiki karma��k CGS objeleri. Y�zeydeki dalgalardan serpilen d�zensizlik ile karakterize olmu� g�r�nt�deki ���k bir�ok noktasal kaynaktan gelmekte, deniz alt� ayd�nlanmas�n� simule etmek i�in ortamda da��lmakta. Bu kompozisyon i�in tek bir ���k kayna�� uygun olmazd� ��nk� bu deniz kestanesinin g�lgesinin �ok keskin olmas�na sebep olurdu.
Bir ray-tracer yaln�zca formal bir rey-tracing dili yard�m� ile tan�mlanm�� olan g�r�nt�y� olu�turmada kullan�lan i�in bir ara�t�r. Rey-tracer'lar renk ve ���k vb... tan�mlamalar� alg�layabilirler. �o�u zaman tasar�m i�imizi desekleyecek �n �al��malar vard�r: 3-Boyutlu taray�c�lar, format d�n��t�rme ara�lar�, programlar, bunlar aras�nda say�labilir. �yleyse bir ray-tracer, g�r�nt� in�a ve tasar�m ara�lar� zincirinde halkalardan yaln�zca biridir. Di�er bir s�yleyi�le d���ncelerimizi klavyeye d�kerek tasar�m yapmak sanatsal kompozizyonlar �retmek i�in tek mekanizma de�ildir, elle bir ray-tracer dilinde yazman�n �ok kolay olmad��� daha karma��k kompozisyonlar� �retmek i�in yard�mc� ara�lar�m�z mevcuttur.
Harici bir program ile olu�turulmu� karma��k bir g�r�nt� �rne�i olarak s�rada bir burbujaz.c (baloncuklar) ad�nda bir C-program� veriyoruz. Program 1000x750 piksel boyutundaki bir y�zey �zerine rastlant�sal olarak baloncuklar yerle�tiriyor. Baloncuklar birbirleri ile kesi�emiyorlar, bu nedenle �rnek kodumuz raslant�sal yerleri ve raslant�sal boyutlar� bu ko�ula g�re belirliyor. E�er bir baloncuk i�in olu�turulan yeni konum var olan di�er bir balonun yan�na d���yorsa yeni bir konum hesaplan�yor. K�renin boyutu uygun olacak �ekilde k���lt�l�yor. �ok say�da iterasyon ard�ndan hemen hemen hi� bo� yer kalmam�� bir y�zey elde ediliyor. Bu �zel �rne�in olu�turulmas� �ok say�da hesaplama gerektiriyor ��nk� seri ilerledik�e yeni bir baloncu�u uydurmak daha da zor olmaya ba�l�yor.
Bu program� derleyin ve �al��t�r�n. Standard ��kt�y� baloncuklar i�in verilerin sakland��� 'burbujas.inc' ad�nda bir dosyaya y�nlendirin (burbujas > burbujas.inc). ��kt� dosyas� a�a��dakine benzer sat�rlar i�erecektir:
sphere{<-375, 0, 33> 55.0000000 texture{Gold_Metal}} //(0/1) sphere{< -86, 0, 62> 55.0000000 texture{Gold_Metal}} //(1/2) sphere{<-326, 0, 346> 55.0000000 texture{Gold_Metal}} //(2/3) sphere{< 190, 0, -156> 55.0000000 texture{Gold_Metal}} //(3/4) sphere{< 62, 0, -293> 55.0000000 texture{Gold_Metal}} //(4/5) sphere{< 323, 0, 161> 55.0000000 texture{Gold_Metal}} //(5/6) sphere{< 341, 0, -15> 55.0000000 texture{Gold_Metal}} //(6/7) ...................
Biraz sab�r �neririm ��nk� ��kt� dosyas�n�n olu�turulmas� biraz zaman al�yor. Herhangi bir anda i�lemi durdurabilir ve son ��kt� sat�r�n� d�zenleyerek tamamlanm�� hale getirebilirsiniz. Veya eksik sat�r� dosyadan ��kar�n. Pov i�in kaynak a�a��daki gibi olacakt�r:
Kaynak kodu gene "clock" simgesine at�flar i�eriyor fakat bu sefer amac� �ok farkl�. Bu defa bir animasyon i�in resimler serisi �retmek yerine �ok farkl� g�r�nt� noktas� olan 4 resim �retiyor. Kamera pozisyonu, a��s� ve a��kl��� (aperture) d�rt resim i�in de farkl�.
Bir �nceki POVRAY makalesinde bir noktada POVRAY i�erisinde kamera olanaklar�n� inceleyen �rnekler inceleyecebilece�imizi belirtmi�tik. ��te bu bir �rnek. Kamera tan�mlamalar�na ba�l� olarak render edilmi� nihai resimler �zerindeki farklar hayli belirgin. A��kl�k (aperture) a��s�na ba�l� olarak �ok farkl� pespektifler elde edilebilir: K���k a�� uzak perspektifleri verirken, geni� a��lar yak�n perspektifleri sunar. En geni� a��kl�k 180 derecedir, bu �ok u� bir de�erdir ��nk� �ekilleri ay�rt etmek zordur.
G�sterilen resimler bir Pentium 200 MMX 48 MB Ram (398 bogomips) �zerinde preses edildiler. �nerildi�i gibi �nceki serilerde verilimi� olan 'pov' arac� kullan�larak �al��t�r�d�:
Ge�ilen parametreler �unlar� temsil ederler:
Herbir fotogram�n olu�turulmas� i�in harcanan zaman kaydade�er. Daha iyi bir kalite ile a�a��daki zamanlar� al�rd�:
pov burbujas 9 9 1 5 1 5�imdi sonu�lar� inceleyelim. D�rt fotogramdan ilkinde tek de�i�iklik kamera kurgusunda. (poziston (position), a�� (angle), y�nlendirme (orientation) v.b.)
Son fotogram� g�stermeden �nce bu son resmin de�erini artt�rma ile alakal� di�er bir konu �zerinden gitmeme izin verin, CPU optimizasyonu konusu.
Son program en karma��k olan� idi ve POVRAY onu optimize etmeyi ba�aramad�. Karma��k kompozisyonlarla kar�� kar��ya kald���nda ray-tracer g�r�nt�y� en basit ortak paydaya sadele�tirmeye �al���r. POVRAY'in �nceki versyonlar�nda optimizasyonlar�n elle yap�lmas� zorunluydu; sanat��lar�n bir veya daha fazla objeyi �rtecek bir ilkeli tan�mlamak i�in "bounded_by" direktifleri vard�. Ray-tracer bu �rt�nme ile �arp��mayan ���nlar�n i�erideki objeler ile de �arp��mayaca��n� farz ediyordu. Bu bir miktar proses zaman� kazand�ran bir yakla��md�r (approximation). Hakikaten i�e yarad��� durumlar ise �ok nadirdir. Sonu�lar�na bak�l�rsa son resmimiz bu durumlardan biri! Son g�r�nt� �ok fazla resim i�eriyor ve �ok karma��k. Bu nedenle kompozisyonu el yordam�yla optimize etmek daha iyi olabilirdi, �rne�in baloncuklar� b�lge b�lge gruplamak, baloncuklar� bile�ik objeler halinde birle�tirmek veya hatta "bounde_by" komutu ile ayn� b�lgeleri k�re gruplar�n� �rt�p t�m baloncuklar� bir obje halinde birle�tirmek. Sentaks ��yle olurdu:
union { sphere { <x1, y1, z1>, r1 } sphere { <x2, y2, z2>, r1 } sphere { <x3, y3, z3>, r1 } .......................... bounded_by { sphere { <xb, yb, zb>, rb } } }
A��klanan t�rdeki el yordam� optimizasyon birle�imlerle ve kesi�melerle ve hatta herhangi bir di�er obje ile kullan�labilir. Kullan�c� ba�ka �rtme ilkellerini de se�ebilir, biz bir k�re se�tik, fakat en iyi sonu�lar genellikle kutular ve k�relerle elde edilmekte. E�er se�ilen ilkel birle�ik objenin bir par�as�n� d��ar�da b�rak�l�rsa sonu� ar�zal� olabilir.
Bir kere daha vurgulamak isterim ki el yordam� optimizasyonlara nadiren ihtiya� duyulur. Son �rne�imiz konuyu a�mak i�in �nceden 'k�t� niyetle' tasarlanm��t�. POVRAY otomatik eniyileyicisi kompozisyonu daha iyi bir hale getirmeyi beceremedi. Kompozisyon 2154 k�re i�eriyor. Okuyucu bu say�y� sayarak kontrol edebilir :-).
�rne�imizde ray-tracer'�n olanaklar� ile nas�l oynanaca��n� g�sterdik. �o�u zaman ayn� d���nce veya kavram farkl� sonu�lar elde etmek i�in de�i�ik �ekillerde uygulanabilir ve buras� sanat��n�n yarat�c�l���n�n su y�z�ne ��kt��� yerdir.
Povray baz�lar� daha az veya daha �ok ilgin� olan bir�ok matematik fonksyonu sunuyor. Fakat ne yaz�k ki �ok ilgin� bir fonksyon eksik. "spline" fonksyonu. Bir kalem ile ka��ta birka� nokta i�aretledikten sonra noktalar�n �zerinden yumu�ak bir �izgi ile ge�en bir fonksyon uygulamas� kadar kullan��l� bir�ey yoktur. Povray'in spline ilkeli bir fonksyon olarak kullan�lamaz, bunun yerine di�er formlar�n in�as�nda baz olacak bir �izgi olu�turur, e�er spline'� istedi�imiz t�m de�i�kenlere uygulayabilseydik ne iyi olurdu. Bu, �rne�in bir kameran�n keyfi bir y�r�nge izlemesini olanakl� k�lard�. E�er harici fonsyonlar� uygulayabilseydik de �ok iyi olurdu. Bir seviyeye kadar t�m bunlar include kullanarak ve harici programlama yaparak elde edilebilir. Linux alt�nda 'spline' ad� alt�nda bir ara� (utility) var. Bu, bir noktalar k�mesinden istenilen e�riyi olu�turan bir komut olarak kullan�labilir. Bu komutu harici programlama ile kullanmay� deneyin, �rne�in animasyonlar veya kamera hareketi olu�turmak i�in.
Okuyuculardan haber almay� ve kompozisyonlar�n� (belki de burada tart���lan yinelemeli veya d�ng� yap�lar�n� uygulad�klar�) g�rmeyi �ok isterim. L�tfen deneylerinizi s�k��t�r�lm�� dosyalar i�inde g�nderin. Okuyucu katk�lar�n� biriktirmek ve burada LinuxFocus dergisinde bir sergi organize etmek harika olurdu. Sergi i�in en ilgin� veya yarat�c� olan resimleri se�ece�im. L�tfen herhangi bir ticari �deme-kar��l��� lisans� (for-pay license) alt�ndaki resimleri g�ndermeyin. E�er m�mk�nse resimlerinizin kaynaklar�n� da g�nderin ki di�er insanlar da sizin fikirlerinizden bir�eyler ��renebilsin.
G�rsely�re sayfalar�n�n bak�m�, LinuxFocus Edit�rleri taraf�ndan yap�lmaktad�r
© Antonio Castro "some rights reserved" see linuxfocus.org/license/ http://www.LinuxFocus.org |
�eviri bilgisi:
|
2004-11-23, generated by lfparser version 2.50