İyi ki doğdun e-bergiii!
Sulu bir açılıştan sonra herkese merhaba. Bu ay malum doğum günümüz, canımız yeni kadromuz da bize ulaşıp, “pardon sevgili dinazorlar, bize yazabilir misiniz?” demişler, eh kıramadık tabi. Bu ay Şubat 2013 sayımızdaki “Yordamsal Modelleme” (Procedural Modeling) yazımın tam zıttı bir yazıyla birlikteyiz. Çoğu konsepti tekrar açıklamak yerine o yazıya işaret edeceğim, dolayısıyla öncelikle Yordamsal Modelleme hakkında bilginiz olmasını öneriyorum.
Lafı fazla uzatmadan başlayalım. Bir gramerden nasıl iki veya üç boyutlu şekiller yaratabileceğimizi öğrenmiştik. Hatta bu gramerlerle şehirler, gürültüler, yeryüzü şekilleri oluşturmuştuk. Şimdi de bu problemin tersinirini, ters yordamsal modellemeyi (Inverse Procedural Modeling) işleyeceğiz: Geometrik bir yapıyı tamamiyle temsil eden, hatta aynı yapıyı sonsuza kadar örnekleyebilmemizi sağlayacak bir gramere nasıl ulaşabiliriz?
Yine aynı analojiyle düşünce zincirimizi kurarsak, bir cümleyi öğelerine ayırmak ne kadar kolay değil mi. Ancak bu kolaylık, Türkçe’nin gramer kurallarını bilmenizden kaynaklanıyor. Türkçe bilmeyen ve sadece kelimelerin anlamlarını bilen bir insanın cümle yapısından yoksun olması çok doğal, hatta Google Translate’i ele alalım: Kelime anlamları olarak mükemmel bir sözlük olsa da cümlelerimizi çevirirken nasıl da çuvallıyor değil mi?
Bu örneklerden yola çıkarak sizlere değişik ters yordamsal modelleme yöntemleri sunacağım. İlk önce basit olarak grameri, parametreleri ve hatta dili bildiğimizi farz edeceğiz, daha sonra bunları teker teker eleyeceğiz. Sistematik ve teorik bir sunumdan çok örnekler üzerinden gidersek daha az sıkıcı bir yazı olacağına inanıyorum:)
Ne Gerek Var Canım
Demeyin! Yordamsal modelleme ile nasıl kütlesel ve inandırıcı modeller yaratılabileceğini göstermiştim. Ancak bu örneklerin hepsi elimizde bir gramer olmadan yaratılamayacak modeller: Yani bir gramere ihtiyacımız var! Ama sıfırdan gramer yazarak gerçekçi modeller yaratmak ise çok zor bir iş. Düşünsenize bütün şehri kodladığınızı... Gerçi Ankara kadar sıkıcı bir mimarisi varsa işiniz o kadar da zor değil, ancak çeşitliliği arttırmak için yine de hem mimari bir görüşe hem de saatlerce kodlamaya ihtiyacınız olacak.
Bir de şu anki açıdan yaklaşalım: Diyelim elinizde SketchUp’tan indirdiğiniz geometrik bir model var. Bu modelin bir şekilde gramerini çıkarabilirseniz, yordamsal modelleme ile kendi çeşitliliğinde yepyeni modeller yaratabilirsiniz! Hatta birkaç modeli birleştirip yepyeni türler bile yaratabilirsiniz. Hatta bu modelleri ekranda daha hızlı imge oluşturmak, daha az yer kaplayan modeller oluşturmak, eksik modelleri tamamlamak, ve anlamsal bilgi çıkartmak için kullanabilirsiniz.
Önce Şu Örneği Bulalım
Tersine yordamsal modelleme hakkında en sevdiğim çalışmalardan biriyle başlayacağım. Stanford’dan çıkan Metropolis Yordamsal Modelleme (Metropolis Procedural Modeling) adlı çalışma aslında çok basit bir fikirden yola çıkıyor: Diyelim bir gramerimiz var, kontrolsüz olarak her tarafa büyümesi yerine, ihtiyacımıza yönelik en uygun türetmeyi bulsak? Mesela bir bina gramerimiz olsun, o binayı rastgele sağa sola genişletmektense, parseline göre büyütmek şehir planlamasına daha uygun olur. Veya çılgın bir mimarsınız ve tavşan şeklinde bir bina yapmak istediniz! Bu çalışma sayesinde saatlerce hatta günlerce farklı türetmeler üzerinde çalışmak yerine, sisteme tavşan şeklini verip örneklenecek binayı elde ediyorsunuz! Dolayısıyla yordamsal modellemeye artistik kontrolü getiren çok eğlenceli bir çalışma.
Nasıl olduğuna gelirsek. Teknik detaylarla sıkmak istemiyorum ama bir özet geçeceğim. Gramerimiz var, ve gramerimizden türetilecek örneğin sınırlarını belirleyen üç boyutlu bir şeklimiz var. Tahmin edebileceğiniz gibi, gramerden türetilebilecek sonlu ama milyonlarca kombinasyonu ve dalı olan bir türetim kümesi mevcut. Ama Talton ve saz arkadaşları bu kümeyi gezme sorununu bir optimizasyon problemi olarak görüyor, ve Bayesci sonuç çıkarımı kullanarak türetimin olabilirliğini maksimize etmeye çalışıyorlar. Daha sonra rjMCMC kullanarak (dallanıp budaklanan cok boyutlu bir ağacın istediğiniz meyvesini atlaya zıplaya bulmanıza yarayan bir yöntem) bu kümedeki en olabilir örneği buluyorlar. Hem Türkçeleştirip hem özetlemede gün geçtikçe kötüleştiğimi fark ederek, daha fazla ayrıntı için sizleri kaynaklara yönlendiriyorum.
Sıra Parametrelerde
Diyelim gramerimiz var, ama parametrelerini ve gideceği örneği bilmiyoruz. Şimdi ne yapabiliriz? Bu konudaki çalışma ise Purdue’den geliyor: en iyisi gramer parametrelerini fotoğraflardan bulalım demişler (İnteraktif Mimari Görselleştirme için Stil Gramerleri – Style Grammars for Interactive Visualization of Architecture). Bir binanın fotoğraflarını, basit ve kutu gibi bir binaya yapıştırıyorlar. Daha sonra bu binayı işleyerek kapı, pencere, çatı, sütun, süs püs ne varsa buluyorlar. Daha sonra binanın bu özelliklerinin parametrelerini hesaplayarak gramerdeki yerine koyuyorlar ve böylece gramer kullanılabilir bir şekilde tamamlanıyor. Bu grameri, parametreleri ve hatta ilk binadan kesilen desenleri yordamsal modelleme ile anında başka binalara uygulayabiliyor veya stilini değiştirerek çeşitli şekillerde ekrana imgeleyebiliyorsunuz.
Ya Hiçbiri Yoksa?
Sıradaki çalışmamız iki boyutlu veriden L-sistematiğinde gramerleri çıkarıyor, yani elimizde şekil dışında hiçbir bilgi olmadan çıkıyoruz yola. Ama fikir yine basit ve güzel işlenmiş: Şekilden (veya veriden) tersine örnekleme ile bir sürü terminal çıkartıyorlar. Daha sonra bu terminaller arasındaki ilişkileri analiz ediyorlar. Yani önce çiçekleri ve çiçeklerin yapraklarını bulup, daha sonra çiçeklerin ve daha sonra yaprakların birbirlerine göre konumlarını grupluyorlar. Dönüşüm uzayı analizi denen bu yöntem sayesinde tekrarlanan terminalleriniz arasındaki bütün ilişkileri bulabiliyorsunuz. Kısaca "taç yapraklar yuvarlak olmuşlar, papatyalar tek sıra halinde aralarında iki santimetre ile dizilmişler" bilgisini elde ediyorlar. Daha sonraki adımda ise bu bilgileri benzerliklerine ve önemlerine göre gruplayıp kural kümesi yaratıyorlar. Bu kural kümesinden sırayla en belirgin kuralları çıkarttığınızda ise L-sisteminizi elde etmiş oluyorsunuz. Bu sistemi başladığınız şeklin bin bir türünü üretmede kolaylıkla kullanarak ters yordamsal modellemenin cıcığını çıkarabiliyorsunuz:)
Diyelim ki Verim Üç Boyutlu
O zaman da sizi Bokeloh adlı emekli insana teslim ediyorum. Bu alanda birçok çalışması olan şahsın en sevdiğim çalışmalarından biri Kısmi Simetri ve Ters Yordamsal Modelleme Arasındaki Bir İlişki (A Connection Between Partial Symmetry and Inverse Procedural Modeling), ismi bile roman gibi, degil mi:)
Demişler ki bizim verimiz üç boyutlu, bildiğin model ya da nokta bulutu. Bunda ıncık cıncık tekrar eden parçaları bulmak yerine, birbirine uhulayabileceğimiz yüzeyleri bulalım. Modelleri nereden kesersek arasına tekrar eden parçalar yerleştirebiliriz ki, diye çıkmışlar yola. Ne gramer var ne bir şey. Ellerinde sadece model...
Modellerde simetri içeren R-yüzeylerini bulup bunlara depolama alanı demişler. Aralarında kalan model kesitlerine de tekrarlanabilen parçalar olarak davranmışlar. Parçalar yerine oturmaya başladı, değil mi? Even depolama alanları non-terminallerimizi, depolanan kısımlar ise terminallerimizi oluşturacaklar. Yalnız dikkatinizi çekmek istediğim nokta, buradaki gramerimiz diğerlerindeki kadar güçlü değil. Birbirinin içerisinde tekrarlanabilen veya çok boyutlu kurallar maalesef burada uygulanabilirliğini yitiriyor. Geliştirilebilir yüzeylerin kendisi iki boyutlu olduğu için rejeneratif yapı tek boyuta indirgeniyor. Yine de, alanındaki ilk ters yordamsal modelleme çalışmalarından olduğu için bu bile çığır açmış bir çalışma. Hem bu kırmızı kaleden sonsuza uzayan kaleler elde edebildiğimize bakarsak, bence gayet kullanışlı sonuçları mevcut.
Gelecekte Neler Olacak
Tahmin edebileceğiniz gibi her geçen gün yeni çalışmalar çıkan ters yordamsal modelleme alanında, farklı verilere farklı algoritmalar uygulayarak yordamsal modeller elde etmek mümkün. Böylece Disney’in Cars animasyonunda bütün London’un yaratılması gibi; veya ismini şu an hatırlayamadığım, farklı zamanlardan birçok insanın aslında aynı zaman çizgisinde birer yansıma olduğunu anlatan filmin, distopya zamanında çinli kızın kovalandığı sahnelerdeki geleceğin şehri gibi, olmayan kütlesel şehirleri modelleyebilmek çok kolaylaşmakta. Kısaca (ters) yordamsal modelleme sayesinde, kurallar bütününü ele geçirebildiğiniz her evrenin tanrısı olmak sizin elinizde!
Yazıma burada son verirken, öncelikle yayında ve yapımda emeği geçen (gülmeyin, çok ciddiyim!) tüm bergidaşlarıma; daha sonra “ne işimiz var amaaan” demeyip bergimizin doğum gününe katılan (ki bu sayının çoğunluğunun ithal olacağını tahmin ediyorum, dolayısıyla ancak yazılarımızla kutlayabiliyoruz, merak etmeyin kutlama yapıp sizi çağırmamış değiliz:) ) tüm ex-yazarlarımıza; ve tabi ki gün geçtikçe çoğalan, çağlayan, bizimle çağ atlayan okurlarımıza koskocaman teşekkürlerimi gönderiyorum. Editör-yazar-okur evrenindeki bu dayanışma ve sevginin eksilmediği ve asla kaybolmayacağı nice yıllarda e-bergiyle kalmaktan gurur duyuyorum. Nice yaşlara küçük kız…
Referanslar:
- Talton J.O., Lou Y., Lesser S., Duke J., Mech R., and Koltun V. 2010: Metropolis procedural modeling. ACM Trans. on Graphics,30(2), 11.
- Aliaga D., Rosen P., and Bekins D., 2007. Style grammars for interactive visualization of architecture, IEEE Trans. on Vis. and Comp. Graphics, (4), 786–797.
- Stava O., Benes B., Mech R., Aliaga D., and Kristof P., 2010. Inverse procedural modeling by automatic generation of L-systems, Comp. Graphics Forum (Eurographics),29(2), 665-674
- Bokeloh M., Wand M., and Seidel H.-P., 2010: A connection between partial symmetry and inverseprocedural modeling, ACM Trans. on Graphics, (4).