Merhaba sevgili okuyucularımız. Aylar sonra sizlerle buluşabilmenin sevinci tarif edilemez; bu yüzden başta sevgili editör ve yazar arkadaşlarıma, sonra da siz değerli okuyucularımıza teşekkür ederek lafı fazla uzatmadan köşeme hoş geliyorum. Bu ay sizlere grafik ve modelleme alanında sıkça kullanılan yordamsal modelleme (procedural modeling) konusunu tanıtacağım. Biçimsel dil ve gramerler üzerine kurulup bunları grafiksel simülasyon ve modelleme dallarında kullanan bu alanı, bir bakıma bilgisayar biliminin temellerinin grafik alanında birebir uygulaması olarak görebiliriz.

Bir gramer kullanarak bir bahar dalı çizdiğinizi düşünün. Evet pek kolay olmadı değil mi:) Zaten bu yüzden bu ay karşınıza bu konuyla geldim. Dilimizi ele alalım: En büyük yapı birimi cümleler; daha sonra özne, yüklem, nesne ve tümleçler; ve bunları oluşturan sıfat, fiil, isim, zarf ve ekler. Kısaca Türkçe için basit bir gramer yazacak olursak aşağıdaki gibi tanımlayabiliriz.

Cümle -> Cümle | (Özne  (Nesne)*  Yüklem)
Özne -> İsim | Tamlama | #
Nesne -> Belirtili Nesne | Belirtisiz Nesne
Yüklem -> Eylem (Zaman eki)+ Kişi eki

Gelelim bahar dalına. Şu an verecek olduğum gramer yordamsal modellemenin ilk örneklerinden ve ben hala bu benzetmeye hayran kalmaktayım.

X -> YX | -[X] | +[X] | #

Örnekte Y bir dalı temsil ederken, - ve + işaretleri ise 45 derece sağa ve sola dönmeye karşılık geliyor. Köşeli parantezler ise kaldığı yeri hatırlamak için. Dolayısıyla gramerin olası üretimlerinden birini sağda simüle edersek, ağacımızın nasıl şekillendiğini görebiliriz.

Bu işlemi düşünerek, solda gördüğünüz ağaçların çok benzer sistemler tarafından basit gramerlerle (veya kurallarla) yaratıldığını söylesem? Hatta sadece bu ağaçların değil, bugüne kadar oynadığınız Minecraft’tan Diablo’ya kadar, birçok oyundaki çoğu manzara ve seviyelerin bu şekilde yaratıldığına inanir mısınız? Dahası, o son izlediğiniz Cars 2 filmindeki binaların İngiltere’ye benzetilmesi için Disney Animation Studios’ta birebir aynı yordamsal modelleme kullanıldığını da not düşeyim.

Kısacası kullanım alanı oyun ve simülasyon geliştirmede bir hayli geniş yer tutan yordamsal modelleme ile sadece kurallar bütününe dayalı algoritmik nesneler, manzaralar veya dünyalar yaratabiliyorsunuz. Yordamsal modellemenin kullanıldığı en yaygın nesneler ise ağaçlar, binalar, desenler, yol ağları ve şehirler. Ayrıca yordamsal modelleme sadece nesneleri yaratmaya değil; onların gölgelerini oluşturmak, desenlerini düzenlemek, çeşitli yeni modelleri sentezlemek veya parametrik özelliklerini değiştirmek için de kullanılmakta. Şimdi yordamsal modellemenin ilginç birkaç uygulamasını inceleyelim.

Kırılımsallar(Fractals)

Düz bir çizgi ele alalım. Kuralımız her adımda bir düz çizgiyi ortadan ikiye bölüp bu orta noktaya başka bir yükseklik atamak olsun. Tahmin edebileceğiniz gibi kuralın özyinelemeli olarak birkaç seviye üst üste uygulanması sonucunda dalgalı bir çizgiye ulaşmış olacağız ve bu dalgalı çizgi her seviyesinde aynı özelliği gösteriyor olacak.

Daha eğlenceli bir örnek için yandaki kar tanesi üretimine bakalım. Her adımda şekildeki gibi 1/3 ölçeğiyle kırdığımız çizgimizi, bir üçgende başlatacak olursak; 4 adımda elde ettiğimiz kompleks kar tanesi, yordamsal modellemenin gücünü ifade ediyor olmalı.

Kırılımsallar arazi yaratmakta en popüler yaklaşımlardan biridir. Demin bahsettiğimiz çizgi örneğini iki boyuta taşıyıp, yükseklik ataması ise rastgele yerine parametrize edilerek yapıldığında birçok oyunda karşılaştığımız sonsuz araziler yaratılabiliyor.

Perlin Gürültüsü(Perlin Noise)

Filmler mi demiştik? Bu bölümde Aslan Kral’dan Star Wars’a kadar birçok filmde, hareketli karelerde görsel efekt kazandırmak için kullanılmış bir teknikten bahsedeceğim. Perlin gürültüsü bilgisayar üretimi yüzeylere doğal dokular kazandırmak amacıyla Ken Perlin tarafından bulunmuştur, ve hatta bu buluş Perlin’e Oscar kazandırmıştır! Bu Oscarlık buluş aslında yordamsal modelleme ile gürültü yaratmaktır. Şu adresteki örnek gibi tamamen kurallar bütünüyle rastgele görünümlü gürültü elde edilebiliyor. Perlin ise işi biraz daha ileri götürüp, gürültü fonksiyonunun farklı seviyelerde aralık ve genlik oranlarıyla oynayarak, bunların toplamlarının daha gerçekçi gürültüler yarattığını fark etmiştir. Bu yordamsal gürültü yaratımı ise daha sonra mermer deseni gibi dokular oluşturmada, üç boyutlu bulutlar yaratmada ve daha birçok görsel efekt için kullanılmaktadır.

Şekilsel Gramerler

Yordamsal modellemenin en sık kullanılan şekli şekilsel ve bölme gramerleridir. Belirli birtakım şekiller ve kurallar bütününe dayanan bu modelleme türü, bir şekli karşımızda her çıkışında başka şekillerle değiştirerek modellememizi sağlar. Basit bir örnekle açıklarsak; şeklimiz bir dikdörtgen olsun. Bu diktörtgeni her gördüğümüzde onu bir yatay bir dikey dikdörtgenle değiştireceğiz. Dolayısıyla 5 kez aynı işlemi şeklin farklı yerlerine uyguladığımızda, ikinci sıradaki son şekli elde edebiliyoruz. Dahası, aynı şekilleri (terminalleri) ve aynı kuralı kullanarak alttaki bütün üretimlere gidebiliriz. Böylece aynı özelliklere aynı tekrarlara sahip birçok farklı şeklimiz oluyor.

Şekilsel gramerlere en uyumlu örnek ise binalar. Terminallerimizi pencere, kapı, duvar, baca gibi şekiller olarak kabul edip, kurallarımızı aşağıdaki gibi tanımlarsak bir bina grameri yazmak çok kolay.

Bina -> Bodrum Kat* Çatı
Kat -> Zemin Duvar+
Duvar-> Kapı | Pencere | Duvar

Yalnız tabi ki resmin bir de öteki tarafı var. Bu kadar kolay ifade edilebilen modeller aslında gramer tabanlı oldukları için, gramerden üretilen her oluşumun yeniden üretilebilirlik ve kontrol edilebilirlik problemleri oluyor. Yani belli bir artistik veya mimarı kaliteyi yakalayabilmek için gramerin bir dalından üretimin ne kadar yapıldığı ve nerede durdurulması gerektiği hala ucu açık araştırma alanları. Bu yüzden yordamsal modele dönüştürülen nesneler daha sonra değiştirilmek için kuralların üretimini sınırlamak gerekiyor, yani bu sorunu birnevi sonsuz dongüde oluşan şekilleri engellemek olarak düşünebilirsiniz.

Yine de yordamsal modellemeyi şehir yaratmak konusunda çok başarılı kullanan sistemler mevcut. Bunlardan ilki olan CityEngine, soldaki ilk resimdeki gibi şehirleri dakikalar içerisinde yaratmanızı, değiştirmenizi ve dilediğiniz gibi görünmesini sağlayan bir yordamsal modelleme sistemi. Alışmanın da kullanmak kadar kolay olduğu bu sistemin web görselleştiricisi de mevcut. Eğer şehir planlamaya ilgiliyseniz, veya geçmişte çok fazla Sims oynadıysanız, bu sistemi bir denemenizi öneririm. Buna benzer bir diğer sistem ise UrbanVision GIS bilgilerine göre California bölgesini modelleyen bu sistemin de bina ve ağaç yapılarının çoğu yordamsal modelleme ile gerçekleştirilmiş. Geometrik özelliklerin yanısıra şehirlerin davranışsal özelliklerinin incelenmesinde ve bu davranışsal özelliklerin şehrin gelecekteki mimari yapısına etkisinin yansıtılmasında kullanılan bu sistem, CityEngine’in aksine ticari değil bir araştırma projesi. İkinci resimde ise UrbanVision’dan San Francisco’yu izleyebilirsiniz.

Yordamsal modelleme kullanan bütün sistemleri sıralamak mümkün değil, ancak basitçe (ve eğlenceli taraflarıyla) ne olduğunu ve kullanım alanlarını açıklayabildiğimi umuyorum. Her alanda uygulanabilirliği olan bu yöntemin daha keşfedilmemiş uygulamalarını kim bilir belki de bir e-bergi okuyucumuz gerçekleştirir :) Bu kadar uzun süredir bergiye yazmadığım için yazımı bitiremiyorum sanırım, ancak bundan sonra hep birlikteyiz değerli takipçilerimiz. Bizimle kalın, gelecek ay görüşmek üzere.