11 Nisan 2012 Çarşamba

Softimage ICE - Ders Notları - 2 - Basic Deformer


Tekrar Merhaba.

Geçen derste temel olarak bir ICE Tree'nin nasıl oluşturulduğunu görmüştük. Bu derste ise bu oluşturduğumuz ICE Tree'yi biraz daha geliştirerek bir deformer yapmayı deneyeceğiz. Yapacağımız deformer bir null objesi ile yüzey üzerinde "Bulge" efekti uygulayacak.


Öncelikle yapmak istediğimiz deformerı çözümleyelim.


  1. ICE'ın grid objesinin bütün point( vertex )'lerinin nerede olduğunu bilmesi gerekli.
  2. Obje deformasyona uğradığında pointlerin nerede olduğunu tanımlamamız gerekli.
  3. Bulge deformerının grid objesine nekadar yakın olduğunu ölçmemiz gerekli ki, bu yakınlığa göre grid objesi deforme olabilsin.
Şimdi ICE'a geçelim.

Sol menüden Get/Primitive/Null ve Get/Primitive/Polygon Mesh/Grid adımlarını takip edip, 1 grid bir de null objesi oluşturdur.Gdip objesini oluştururken çıkan menüden Subdivisions U ve V 'yi 50 olarak ayarlıyoruz. Ardından Grid objesi seçiliyken ICE Tree/Create/Ice Tree' seçip Grid objesine ICE Tree özelliği vermiş oluyoruz.

Şimdi bize grid in üzerindeki pointlerin konumu lazım. Bir önceki derstende hatırlanacağı gibi bu işi yapmak için önce "Get Data" nodunu ICE Tree'ye çağırı daha sonra "Explorer"dan grid objesini sürükleyip ICE Tree'ye bırakmamız ve Grid nodunun out name'ini Get Data nın In Name'ine bağlamamız. Daha sonra Get Data noduna çift tıklayıp ilgili alana "pointPosition" yazmamız gerekiyordu. İşte bu uzun yol. Bunun yerine "Get Point Position"  nodunu kullanabiliyoruz.


Bu resimde aynı veriye iki farklı şekilde nasıl ulaşılabileceğimizi gösterdim. Biz alttakini kullanacağız. Ayrıca
"Get Point Position" ve "Set Point Position" nodu arasına "Add" nodu ekliyorum. Böylece yaptığımız deformasyonu araya sıkıştırabileyim.
Şimdi ikinci aşamaya geçiyoruz. Burada ise her bir point'in deforme olduktan sonraki yerlerini tanımlamamız gerekiyor.
3. Aşamada ise Null objesinin herbir point'e olan uzaklığını bulmamız gerekiyor. Aşağıdaki ekran görüntüsüne bakalım.


2. Aşamayı inceleyelim. Get Point Position ile herbir pointin yerini 3D Vector (XYZ) olarak alıyoruz. ve Add noduna bağlıyoruz. Add noduna bağlı olan diğer node ise bir 3D Vector. Yalnız Y değeri 1 olarak görünüyor. Bu demek oluyorki, herbir point Y aksisinde 1 birim yukarı doğru kalkmış.

3. Aşamayı inceleyelim. "Get Data" nodunu ICE Tree'ye alıyoruz. Üzerine çift tıklayıp Explore/Null/Kinematic/Global/Pos u seçiyoruz. Böylece Null objesinin XYZ koordinat sistemindeki yerini ICE Tree'ye aldık. "Get Distance Between" nodu iki nesnenin arasındaki uzaklığı ölçen bir nod. Yalnız dikkat edilmesi gereken şey, çıktı olarak Scalar(1,316 gibi) bir veri vermesi. Bir "Get Point Position" nodu alıp şekildeki gibi ilgili yerlere bağlıyoruz. Artık Null objesinin gride olan uzaklığı "Get Distance Between" nodunun Result Output portunda hazır.

Şimdi bu verileri birşekilde birbirine bağlamam gerekiyor ki ICE Tree çalışsın. Ama nasıl. Bakalım.


Multiply by Scalar Nodu : Bu nod Gelen veriyi "factor" portu ile çarpıyor. Yani, grid objesindeki her bir point'in XYZ bilgisi * "Grid"deki herbir point ile Null objesinin arasındaki uzaklık. Tam olarak istediğimiz sonuç bu değil. Bu veriyi filtrelemiz gerekiyor. Yani en uçtaki pointi bir şekilde bu işlemden uzak tutmamız lazım.


Burada fCurve nodu gelen veriyi kontrol ediyor. Herbir point'in XYZ pozisyonunu Null objesine yakınlık derecesine göre 0 ila 1 arasında sayı ile çarpıyor. Dikkat ederseniz. Tam null objesinin üzerine gelen "point" null objesi ile kesişmiş( yani fcurve değeri 0) . Nullden uzaklaştıkça deformasyon azalıyor ( yani fcurve 1 oluyor.). Bu noktada tam olarak istediğimizi elde etmiş değiliz. Bu fcurve değerlerini ters çevirmemiz gerekli ki null objesi bulge işlemini doğru olarak yapabilsin.


Null objesini hareket ettirdiğimiz zaman. Garip bir problem ortaya çıkıyor. Bulge işlemi sanki Global Origin (X=0,Y=0,Z=0) a balı gibi.


Bunun nedeni ise, 2. Aşamada Kullandığımız "Get Point Position" nodu. Çünkü bu noddan Y ve Z bilgisi'de geliyor. Filtre kullanmak gerekiyor.


Get Point Position dan gelen XYZ koordinat bilgisi, "3D Vector to Scalar" nodu ile sadece "Y" aksisi vasıtası ile "Scalar to 3D vector" noduna bağlanıyor. Böylece sadece her bir "point"in Y pozisyonu işleme tabii tutuluyor.

Son olarak fCurve nodu ile oynanarak farklı deformasyon şekilleri oluşturulabilinir.


Emin.

Hiç yorum yok:

Yorum Gönder