Skocz do zawartości

Skrypt i pytanie o wydajność


Obywatel

Rekomendowane odpowiedzi

Joł skryptowe ziomy.

 

Załączam efekt skryptu jaki sobie dziś napisałem i od razu pytanie: czy ten cały maxscript jest taki mało optymalny, czy ja coś źle popisałem? :>

 


animate on
(
for t in 0 to 100 do
(
	at time t
	(

		for i=1 to (polyOp.getNumVerts $Ziemia) do
		(
		v1=polyOp.getVert $Ziemia i;
			for j=1 to (polyOp.getNumVerts $Kula) do
			(
			v2=polyOp.getVert $Kula j;
			d=sqrt((v2[1]-v1[1])^2+(v2[2]-v1[2])^2+(v2[3]-v1[3])^2);

				if(d					(
				polyOp.moveVert $Ziemia i [0,0,-(1-abs(d))];
				--print("Przesunieto");
				)--if d				
			)--for po vertexach kuli

		)--for po vertexach ziemi	

	)--at time t


)--for t

)--animate

 

Tutaj te pętle wykonują się dosyć dużo razy (100 klatek * 1 681 vertexy ziemi * 482 v. kuli :> ) No ale w gruncie rzeczy to są proste instrukcje, a mi maxa przywiesiło na jakieś dobre 7 minut.

 

Co do samego skryptu to tylko powiem, że to takie pierwsze koty za płoty. Czas w maxie jest dyskretny, wiec jakby tą kulkę szybciej przesunąć to by fajne rzeczy się działy d:-)

Odnośnik do komentarza
Udostępnij na innych stronach

  • Odpowiedzi 5
  • Created
  • Ostatniej odpowiedzi

Top Posters In This Topic

masz 81 milionow wykonan najbardziej zagniezdzonej petli.

 

getVert tez ma jakas implementacje

 

do tego sqrt ktora jest operacja bardzo wolna

 

wszystko masz na wartosciach zmiennoprzecinkowych

 

wykonujesz moveVert ktorego zlozonosci obliczeniowej nie znasz,

wiec skad podejrzenie ze to prosta operacja

 

poza tym maxscript to interpretowany jezyk wysokiego poziomu wiec

tak na prawde duzo wiecej moze sie dziac pod maska niz masz napisane

w skrypcie.

 

jak zalezy ci na wydajnosci to lepiej przerzuc to do c i skompiluj z api

3d studia. pluginy dzialaja duuuzo szybciej.

Odnośnik do komentarza
Udostępnij na innych stronach

no hej

 

sdk (software developers kit) powinienes miec z instalka max'a. To ogolnie

rzecz biorac pakiet bibliotek i plikow naglowkowych ktore specyfikuja

API (application programming interface) maxa... czyli na nasze: jak programy

maja sie z nim komunikowac. Pluginy maxa to nic wiecej jak zwykle dll'ki

skompilowane z odpowiednimi naglowkami (zeby max wiedzial gdzie szukac

twoich funkcji ktore buduja plugin, w skrocie)... oprocz sdk powinienes

miec jeszcze jakies srodowisko programistyczne (ja polecam np Eclipse IDE,

z obsluga c/c++ CDC (open source), albo darmowa biedna wersje visual

studio od microsyfa). Teraz piszesz normalnie plugina w c/c++, kompilujesz

go z bibliotekami z SDK max'a i wrzucasz do katalogu plugins czy gdzie tam

sobie trzymasz te badziewia i smiga. Rzecz jasna troche to wyzsza szkola

jazdy niz pisanie skryptow, ale i wydajnosc ze 100 razy lepsza :)

 

aaa... nie powinna cie interesowac dokumentacja dla maxscripta tylko w tym

wypadku sdk ma swoja wlasna, calkiem sensowna.

  • Like 1
Odnośnik do komentarza
Udostępnij na innych stronach

Ojej, a ja już myślałem, że się czegoś nauczyłem ;-) No spook, dzięki za informacje. Aha czyli piszę normalnie w C++. A odwołania do maxowych metod (np. polyOp.getVert) dużo różnią się składnią? Pytam bo akurat nie będę miał możliwości sprawdzenia tego przez weekend. No i jeszcze jedno :> Jak przerwać wykonywanie się skryptu?

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się



×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Wykorzystujemy cookies. Przeczytaj więcej Polityka prywatności