Stretch ( uzatma ) ile ilgili bir sorun...

Stretch ( uzatma ) ile ilgili bir sorun...

tete

Merhaba arkadaşlar,

bir örnek yapıyorum, kemik uzatmaları ile ilgili ve şu şekilde bir hata ile karşılaştım. Bu konuda yardımcı olabilirmisiniz.
oluşturduğum yapı resimdeki gibidir.

"// Warning: Cycle on ´b1.scaleX´ may not evaluate as expected. (Use ´cycleCheck -e off´ to disable this warning.)"

[img]http://www.tr3d.com/dosyalar/M0Y7hb883.jpg[/img]

2008-11-11 00:27:34

Cvp

CG assassin

"// Warning: Cycle on ´b1.scaleX´ may not evaluate as expected. (Use ´cycleCheck -e off´ to disable this warning.)"

b1.scaleX beklendiği gibi değerlendirilemedi dior.

sorunun b1.scaleX de onun üzerine yoğunlaş ama çözümün ne oldugunu uygulayarak bulabilirim şu anda 5gün sürecek render ım var kesmek istediğim için sorunun üzerinde yoğunlaşman gereken şeyi önerebilirim ancak kolay gelsin ...

2008-11-11 16:04:17

Cvp

DARK_Lord

highen3D
buraya git hazir scripti var ordan indir
neden ugrasiyon

2008-11-11 19:58:10

Cvp

ozgunzumrut

selamlar, bu sorun sahnenizdeki düzende bir yerde döngü olduğunu gösteriyor. yani mesela joint´in scale´ının ayarlanmasını sağlayan locator aynı joint´e bağlı olunca problem çıkıyor olabilir. tahminim ;

distance locatorler kemiklere bağlı (constraint) ise bu durum normaldir. aslında onlar kontrollere bağlı olmalı. nedeni ise, maya zaten joint´in uzunluğunu hesaplamak için onları baz alıyor ama onlar da kemiğe bağlı olunca script kendi içinde dönmeye başlıyor. bunun sonucu muhtemelen "undo" yapmaya çalışınca patlayan bir rig olucaktır.

bu arada o expression´u şöyle yazarsanız daha kısa olucaktır ama aynı işi yapıcaktır. (muhtemelende farkedilmeyecek kadar daha hızlı çalışır)

b1.scaleX = clamp(1,1000,(dtShape.distance/11);
(bütün expression yerine tek bir satır yani.)

2008-11-11 21:06:25

Cvp

tete

Özgün teşekür ederim, dediğin gibi joint´in scale ayarlamasını yapan loc aynı joint´e bağlıydı ben bunu control objesine bağlayıp yaptığım zaman sorun çözüldü.

Çok teşekkür ederim, gerçekten ve akabinde bir soru daha sormak istiyorum :)

b1.scaleX = clamp(1,1000,(dtShape.distance/11); tek bir satır ile yapabilirsin demişsin. Bu satırı açıklama şansın olabilir mi, bir kısmını anladım fakat clamp ne amacla kullanılıyor ve ondan sonraki (1,1000,(dtShape.distance/11) burdaki 1,1000 ne için. bunu açıklarsan çok memnun olurum.

2008-11-14 03:32:33

Cvp

ozgunzumrut

selamlar :)

normalde senin yazdığın expression´da eğer bir koşul gerçekleşirse değerleri değiştiriyorsun gerçekleşmezse ise aynı kalıyor. bu yüzden clamp kullanabiliyoruz. clamp´in yaptığı şey ise şu :

clamp (alt değer, üst değer, değer)

eğer girilen "değer" , "alt değer" ile "üst değer"in arasında ise output olarak "değer"in kendisini veriyor. ama "değer" , "alt değer"in altında ise "alt değer"i , "üst değer"in üstünde ise de "üst değer"i veriyor. yani ;

clamp (0,100,50) ==> output : 50
clamp (0,100,-50) ==> output : 0
clamp (0,100,150) ==> output : 100

yani bir nevi , benim bir değerim var ve hiçbirşekilde belirlediğim sınırları geçmesini istemiyorum demiş oluyoruz.

sana verdiğim örnektede, scale değerinin 1 in altına düşmesini istemediğin için altdeğeri 1 yaptım, üst değeri ise sadece büyük bir değer (scale için yeterli olacak kadar)

yani if..else deki else yerine bu geçiyor. 11´e bölümün sonucu asla 1´in altına inmiyor. ama üstüne çıkabiliyor.

bu arada ilerde eğer karakteri genel olarak scale ediceksen bu sadece 11 problem çıkarır, çünkü distance node "absolute" hesap yapıyor. yani karakteri scale ettiğinde o 11 değeri değişmek zorunda kalıcak. bunun içinde çözüm karakter scale etmek için kullanacağın bir globalscale parametresi yaratıp onu 11´le çarptırmaktır. (bu parametreyi ben genelde rig´in altına koyduğum circle placement curve´üne atarım)

umarım anlatabilmişimdir. kolay gelsin.

2008-11-14 13:57:13

Cvp

tete

Özgür anlatabilmek ne kelime, beynime kazıdın :) teşekürlerimi sunarım gerçekten. :D

Verdiğin bilgiler çok değerli ve güzel, umut ediyorum bir çok arkadaşın çok işine yarıycaktır ve dediğin gibi, rig işlemi bittikten sonra scale yaptığımda sorun yaşıyorum :) bacaklar istediğim gibi scale uygulayamıyorum bozulma gerçekleşiyor ama sen bunada değinmişsin ve ilerde gelebilecek bir sorununda cevabını vermiş oldun :)

2008-11-16 14:39:33

Cvp

ozgunzumrut

bu arada benim yukarda verdiğim satırdaki parantezi kapamayı unutmuşum. doğrusu ;

b1.scaleX = clamp(1,1000,(dtShape.distance/11));

olacak :)

2008-11-17 17:37:15