Skocz do zawartości

gonre

Members
  • Liczba zawartości

    160
  • Rejestracja

  • Ostatnia wizyta

  • Wygrane w rankingu

    2

Odpowiedzi dodane przez gonre

  1. źle przedstawiłeś ten program strasznie.

     

    "Strasznie" "źle" mi się czyta takie uwagi :D

     

    Z jednej strony się cieszę, że dostaje feedback, ale nie mam pojęcia co miałbym zmienić by było dobrze, bo nawet nie wiem o co Ci chodzi.

     

    Jakbym nazwał narzędzie OgnistyLis albo Stara Przyprawa, to faktycznie trudno zgadnąć :D

     

    Sam tytuł "SimBatch — narzędzie do symulacji VFXowych" najprawdopodobniej odsieje większość osób, ale Ci którzy potencjalnie powinni być tym zainteresowani wiedzą, że to coś może być dla nich i żeby się upewnić potrzebują więcej niż kwadrans by się zdecydować czy im to jest potrzebne.

     

    Zrobiłem ogólną 20sekundówkę i dwa filmy techniczne około 5 minut. Na robienie czegoś pośredniego nie mam czasu. Oganiam to wszystko sam i kończą mi się oszczędności. Zrobiłem to najlepiej jak potrafię. Jak masz jakiś pomysł na lepsze zaprezentowanie to proszę podziel się ze mną.

  2. Taki jest nadal proces twórczy? Robisz N wersji symulacji, supervisor wybiera, i dopieszczasz?

    Proces twórczy to pojemne pojęcie. To jaki jest proces twórczy to zależy od twórcy, projetku i supervisora.

    Dla mnie procesem antytwórczym jest wczytywanie keszy do poszczególnych ujęć, ustawianie outputów i ręczne generowanie prewek.

    ... i własnie to chcę zminimalizować.

  3. Dzięki za miłe słowa, przepraszam że się długo nie odzywałem, ale sporo pracy było.

    Założyłem właśnie nowy wątek, odnośnie samego narzędzia, by tu w animacji nie wrzucać temawów TD, ...

     

    http://max3d.pl/forum/threads/104151-Odpali%C5%82em-Kickstartera-SimBatch-%E2%80%94-narz%C4%99dzie-do-symulacji-VFXowych

     

     

     

    ... przydałoby się uchylić więcej rąbka tajemnicy ....

     

    ...tam z chęcią odpowiem na wszystkie pytania w miarę możliwości :)

     

    tu rezentacja z Houdinim https://vimeo.com/simulations/simparamhoudini

     

     

     

     

     

    Działa on trochę w stylu wedga jeśli można wiedzieć? :)

     

    Tak, bardzo upraszczając, można powiedzieć, że to taki bardziej zaawansowany Wedge z niezależnym GUI.

     

     

     

    ... jak daleko ingeruje w prowadzenie projektu ....

     

    założenie jest takie by to było narzędzie codziennej pracy przez które przechodzi wiekszość symulacji.

    z drugiej strony jest to to tak pomyślanie by niezależnie od pipelinu dało to się to tak skonfigurować, by nie było trzeba nic zmieniać w obecnym układzie

    Moje narzędzie ma się dostosować do obecnych warunków. Oczywiście jeżeli jakieś studio ma własnego toola do zarządzania symulacjami to ja na razie odpuszczam pukani do nich bo ...

     

     

     

    Jesteś przygotowany na wyzwania dużych firm ?

     

    ... na tym etapie SimBatch się sprawdzi w przypadku freelncerów oraz małych i średnich firm. Duże studia nie zaryzykują z "młodym" narzędziem, choć z tego co wiem są duże studia gdzie pipeline VFXowy kuleje.

    Z mojego doświadczenia VFXy są na ostatnim miejscu przy rozwoju pipeline'u :) Więc wziałem to w swoje ręce. Zobaczymy jaki będzie feedback, ilu odezwie się freelancerów, ile firm i jakie jest realne zapotrzebowanie na takiego toola.

  4. Hej, odpaliłem Kickastartera za czwartym podejściem. Najpierw chciałem zrobić szybką akcję i zobaczyć jaki będzie odzew i czy warto się za to brać, ale dostałem feedback, by poprawić prezentację (dzięki Kuba), poźniej by dograć video z działania narzędzia (dzięki Łukasz), potem by poprawić grafikę (Dzkia) .... No i tak z podejścia MVP wyszła dość dobrze zrobiona kampania, a na deser zrobiłem przeportowanie na dwa kolejne programy.

     

    Jak bym wiedział ile czasu to zajmie to bym to sobie darował, szczególnie ze nie można odpalić kampani będąc rezydentem Polski.

    No więc wyemigrowałem, doszlifowałem prototyp i dziś wypuściłem prezentację z Houdiniego i Mayki.

     

    Będzie jeszcze jedna animacja i dwie prezentacje z działania ( MAX oraz RF )

     

    Zachęcam do obserowania na http://www.facebook.com/SimBatch (bedą newsy i updatey)

     

    oraz do wspierania kampanii: "like share and subscribe" ;]

     

    link do kampanii: SimBatch KICKSTARTER

     

    animacja promocyjna:

     

    [video=youtube_share;pOlUx-eDdaY]

     

     

    Jestem ciekaw Waszych opinii, proszę o konstruktywną krytykę i uwzględnienie tego, że to jest projekt jednoosobowy (na razie).

    Jak będą osoby chętne do dowiedzenia się jak odpalić Kickstartera z polskiej perspektywy, to się z chęcią tym podzielę.

  5. [video=youtube_share;pOlUx-eDdaY]

     

     

    Od lat chciałem zrobić animację od początku do końca, miałem kilka prób, ale ciągle było coś do zrobienia.

    Między ciekawymi projektami, a życiowymi obowiązkami trudno było mi znaleźć czas na odpoczynek, o animacji nie wspomnąc.

     

    Po 5 latach w dużym studio, przeszedłem na freelance i zacząłem rozwijać narzędzie do automatyzacji symulacji. Programowanie to zazwyczaj praca z tekstem w zaledwie kilku kolorach i nawet najbardziej zaawansowane IDE nie obsługują GI, a animacja przy takiej pracy ogranicza się do scrolowania kolejnych lini kodu w poszukiwaniu błędów. Na szczęscie od razu pojawił się pomysł na promocję narzędzia poprzez animację, co mnie bardzo zmotywowało. Wyrobiłem sobie taki rytm, że po paru dniach programowania dla urozmaicenia brałem się za animację, a gdy byłem zmęczony 3D wracałem do kodowania :]

     

    Po paru miesiącach jest działający prototyp, jest animacja, a za dwa dni ruszam z szerszą promocją kampani Kickstarterowej.

     

    Z planowanej szybkiej kampani zrobiła się w sumie niezła przygoda z przeprowadzką za granicę. Teraz z perspektywy czasu wybrał bym inną drogę, ale na początku roku postanowiłem że odpalę Kickstartera, a że uparty jestem to dopiąłem swego. Niestety zrobiłem słabe rozeznanie i idąc na żywioł miałem torchę pod górkę :)

    Jak czas pozwoli i będzie taka potrzeba, to opiszę proces odpalania kampanii z polskiej perspektywy.

     

    Sama animacja wyszła trochę przydługa jak na promo.

    Z perspektywy czasu widzę, że przydało by się bardziej zróżnicować tempo.

    Co do reszty czekam na opinie :)

     

    Najbardziej cieszy mnie zdobyte doświadczenie, przyda się przy kolejnych realizacjach. Teraz jak już prototyp jest gotowy zabieram się za kolejną animację w tym samym temacie, ale w innym klimacie :)

  6. Hej mam problem z wpisaniem tekstu do QLineEdit

    Przy wcisnieciu klawisza, Max traktuje to jak uzycie skrotu.

    Probujac wpisac "c" dostaje "No cameras in scene" :)

     

    wzialem przyklad ze strony autodesku i dziala to co napisali, czyli tworzenie cylindra

    dodalem do niego QLineEdit

     

    ed = QtGui.QLineEdit ()
    main_layout.addWidget(ed)
    

     

    .... no i nie dziala

     

    w oficjalnym przykladzie autodesku pyside w max 2016 widget jest inicjowany tak

       w = QtGui.QWidget( )
    

     

    w max 2017 widget jest inicjowany tak

    w = QtGui.QWidget(MaxPlus.GetQMaxWindow())
    

     

    ciekawe jest to ze w przykladzie z 2017 dodali

     

       textEdit = QtGui.QLineEdit()
       textEdit.setText("Edit box")
       main_layout.addWidget(textEdit)
    

     

    ... jakby chcieli pokazac ze QLineEdit JUZ DZIALA !!!

     

     

     

    PS:

    sorki, nie mam polskich fontow na tym kompie, ani praw admina ;]

    Max 2016 z SP3, testowane na win7 i win10

     

     

    http://help.autodesk.com/view/3DSMAX/2017/ENU/?guid=__developer_using_pyside_html

  7. spróbuj dodać coś takiego na początku:

     

    base_sel = selection as array
    
    for sel in (selection as array) do
    (	
    if isValidNode sel and isGroupMember sel then
    (
    	select sel
    	max group ungroup
    )	
    )
    
    deselect $*
    for obj in base_sel do
    (
    if isValidNode  obj then
    	selectmore obj
    )
    

     

     

    przez komendę ungroup MAX usuwa grupy, zmienia się ilość obiektów, więc ponownie ustalana jest selekcja

    bezpieczniej było by otworzyć grupę, a potem ją zamknąć :]

  8. Kolego, odsyłam do podstawówki bo masz chyba problemy z językiem polskim.

     

    Piotrze, faktycznie popełniłem błąd gramatyczny, pisząc posta w autobusie. Wracałem po 12h z pracy z Maxem i Majką.

    Pierwornie napisałem:

    "...autor się już bardziej nie pogrąży"

    ale nie chciałem być zbyt ostry i skasowałem POGRĄŻY.

     

    Po pierwsze NIE UWZGLĘDNIASZ TEGO ŻE LUDZIE PISZĄC TRUDNE DLA CIEBIE KOMENTARZE CHCĄ CI POMÓC, wskazać drogę profesjonalnego podejscia do robienia filmów, która ma niewiele wspólnego z użytym sprzętem.

     

    Po drugie wytykając mi błąd gramatyczny, używasz mało poważnych argumentów.

     

    Nie odsyłaj mnie do podstawówki, już tam byłem i kończąc ją wychodziłem przekonany o tym, że mogę popełniać błędy, że na błędach mogę się uczyć, czego i Tobie życzę.

  9. wersja kinowa jest dłuższa ....

    ....do Youtuba jest wrzucony film 770MB który dodatkowo Youtube kompresuje .

    ...

    Poza tym mamy kolejna stratę jakości....

    Piotr

     

    Japier..., myślałem że autor się już bardziej nie zaniży lotu....

     

    WERSJA KINOWA?

    Po ile bilety?

    (w sensie ile zamierzasz płacić widzom by to oglądali bez możliwości przewijania)

     

    KOLEJNA STRATA JAKOŚCI ?

    Im większą rozdzielczość i mniejszą kompresje ma to dZIEŁO tym więcej błędów widać! Ten film zyskał by na jakości w rozdzielczości 360x240, w skali szarości i przyspieszony 4x!

  10. Prawde mowiac Sigma i Pi wygladaly o niebo lepiej....

     

    .... o całą galaktykę!

     

    Z jednej strony gratulacje za dopięcie "czegoś" do końca i za zaangażowanie, ale na dzień dzisiejszy widz jest tak bardzo przyzwyczajony do wysokiej jakości, że ten film męczy. Obejrzałem z nadzieją że znajdzie się w tym cieście jakiś rodzynek, a jest tylko ugniatane przez długi czas słone proste ciasto z zakalcem, które pozostawia niesmak.

     

    Idę po zagrychę.

  11. nodeGetBoundingBox

     

    Returns a 2 element array containing the min and max points of the node's bounding box in coordinate system matrix3 as point3 values. Positions returned are always in the specified matrix3 coordinate system.

    bb= nodeGetBoundingBox $teapot01 $camera01.transform
    
    format " %      %   \n"  bb[1]  bb[2]
    

     

     

    LUB

     

    nodeLocalBoundingBox

     

    Returns a 2 element array containing the min and max points of the node's local bounding box. Positions returned are in the current coordinate system.

     

     

    bb= nodeLocalBoundingBox $teapot01
    

  12. Próbowałeś

    Animation -> Constraints - Patch Coinstrant (skryptem też można nadać kontroler Patch Coinstrant)

     

    możesz przypiąć helpera do splinea

     

    a w pętli zrobić

     

    plane.pos = $hlp_przypiety_coinstrainem.pos
    plane.rotation = $hlp_przypiety_coinstrainem.rotation
    
    LUB : 
    
    plane.transform = $hlp_przypiety_coinstrainem.transform 
    
    
    

     

     

    jeśli robisz to dla więcej niż jednego samolotu (np 100 samolotów po 40 splineach), skryptowanie tego ma sens

     

    jeśli masz jeden samolot i jednego nurbsa to polecał bym zrobić constraina zamiast skryptować.

     

    Jak możesz to napisz więcej jaką masz sytuację i dlaczego chcesz to robić skryptem

  13. hej, z motyką na słońce się porywasz :)

    (niezwykły sposób na animowanie)

     

    po pierwsze składnia

    for x=1 to 50 z=1 to 10 do
    

    u mnie nie działa i nie sądzę by u Ciebie zadziałała

     

     

     

     

     

    tu powierzchowne rozwiązanie problemu, mam nadzieję że to Ci pomoże w dalszej nauce

     

    clearlistener()
    
    
    spada = false
    obraca = false
    
    for czas =1 to 50 do
    (
    
    
    at time czas with animate on
    (
    	x_add = 1
    	if  $samolot.pos.x  > 25 and  $samolot.pos.z > 10 then 
    	(
    		spada = true
    		obraca = true
    	)
    
    	if spada then	
    		z_add = -0.7
    	else
    		z_add = 1.5
    
    
    	if obraca then	$samolot.rotation.x_rotation += 4
    
    	move $samolot [x_add,0,z_add]
    )
    )
    
    

  14. w max 2011 skrypt działa

     

    natomiast

    global objName= "[Photo]"
    for i in selection do i.name = objName + uniquename i.name 
    

     

    po wielokrotnym wywołaniu daje nazwę obiektu: [Photo][Photo][Photo][Photo][Photo]091

     

     

    wcześniej było dobrze:

    for i in selection do i.name = uniquename objName 
    

     

     

     

     

    moglbym sobie z tym poradzic dodajac ten sufix w nastepnej petli, ale jestem ciekaw czy da sie jakos to zapisac w jednej linii

     

    na początku skryprowania proponuję Ci pisać jak najprościej, czyli nie oszczędzać linii, rozbijać operacje na prostsze (wydzielać je)

    kondensowanie kodu zmniejsza jego czytelność

  15. Myślałem o tym, ale jestem zbyt leniwy by być nadgorliwy ;]

     

    ... ale skoro chcesz to proszę

     

     

    ---  BSD License
    -----
    --------   make base objects for tests 
    -- box height:1 width:1 length:1 name:"klepka1" pos:[-6,0,0] wirecolor: (color 13 40 130)
    -- box height:1 width:1 length:3 name:"klepka2" pos:[-7,0,0] wirecolor: (color 22 70 170)
    -- box height:1 width:1 length:4 name:"klepka3" pos:[-8,0,0] wirecolor: (color 40 90 180)
    -- box height:1 width:1 length:7 name:"klepka4" pos:[-9,0,0] wirecolor: (color 90 130 255)
    --------   
    -----
    ---
    
    
    
    clearlistener()
    global klepkiRollout 
    (
    if klepkiRollout !=undefined then if klepkiRollout.open then DestroyDialog klepkiRollout
    
    rollout klepkiRollout "Klepki"
    (
    	local windowWidth = 400
    	local windowHeight = 220
    	local windowPos = [10,10]		
    	local isRolloutResized = 0
    
    
    	local element_width = 1
    	local element_names =#("klepka1","klepka2","klepka3","klepka4")
    
    	local floor_length = 70
    	local floor_width = 10
    
    
    	label L_null1 " "		
    	edittext E_prefix "new element prefix" text: "element_"
    	edittext E_objects "base objects"
    	label L_null2 " "
    	spinner S_floor_length "floor length" range:[1,100000,1]  type:#integer
    	spinner S_floor_width "floor width" range:[1,100000,1] type:#integer
    	spinner S_element_width "element width" range:[1,100000,1] type:#float
    	label L_null3 " "
    	checkbox CB_delete "delete elements with current prefix" checked:false		 	
    	button B_recreate "create" width:78 enabled:true  
    
    
    	on B_recreate pressed do
    	(
    		counter_length=0
    		counter_width=0
    		currnet_floor_width =0
    		currnet_floor_length =0
    		x_pos = 0
    		y_pos = 0
    		last_element_type = 1
    		last_element_type_try = 0
    
    
    		element_names = filterString E_objects.text ","
    
    		undo off
    		(				
    			if CB_delete.checked then delete ( execute("$"+E_prefix.text+"*")	)		
    
    			while  currnet_floor_width 				(
    				counter_width +=1
    
    				x_pos += element_width	
    				currnet_floor_width += element_width
    				currnet_floor_length= 0 
    
    				--format "xxxxxxx : %\n" x_pos
    
    				while  currnet_floor_length 					(
    					counter_length +=1
    
    					------  rand element 
    					rand = random 1 element_names.count
    					last_element_type_try = 0
    					while last_element_type == rand and last_element_type_try 						(
    						rand = random 1 element_names.count
    						last_element_type_try +=1
    					)
    					last_element_type = rand 
    					------   rand element 
    
    
    					orginal_element = ( execute ("$"+element_names[rand]) )
    
    					if isvalidnode orginal_element then
    					(
    						new_element = instance orginal_element
    						new_element.name= E_prefix.text + counter_width as string + "_" + counter_length as string
    						new_element.wirecolor = orginal_element.wirecolor
    
    						bb = nodeLocalBoundingBox new_element
    
    						y_pos = currnet_floor_length + (bb[2][2] - bb[1][2])/2   
    						new_element.pos = [x_pos,y_pos,0]
    
    						currnet_floor_length += (bb[2][2] - bb[1][2])
    					)
    					else
    					(
    						currnet_floor_length += 1  --- prevent infinity while
    						format ( " ERR:  no valid node: %     rand:  % \n" ) element_names[rand] rand
    					)
    					--format ( " debug: %   % \n" ) currnet_floor_width currnet_floor_length
    				)
    			)
    		)
    
    		redrawViews()
    	)		
    
    	on klepkiRollout open do 
    	(
    		for n = 1 to  element_names.count do 
    		(
    			E_objects.text += element_names[n] + ","
    		)
    
    
    		S_floor_width.value = floor_width
    		S_floor_length.value  = floor_length
    		S_element_width.value  = element_width
    	)		
    	on S_floor_length changed val do
    	(
    		floor_length = val
    	)
    	on S_floor_width changed val do
    	(
    		floor_width = val
    	)
    	on S_element_width changed val do
    	(
    		element_width = val
    	)
    )	
    
    createdialog klepkiRollout style:#(#style_titlebar, #style_border, #style_sysmenu, #style_resizing, #style_sunkenedge)   pos:klepkiRollout.windowPos width:klepkiRollout.windowWidth height:klepkiRollout.windowHeight
    )
    
    
    

  16. WAŻNE !

     

    przy tworzeniu wielu obiektów warto wyłączyć UNDO, przyspiesza to wielokrotnie tworzenie obiektów

    naniosłem poprawki i UI

     

    skrypt działa na nazwach obiektów

    teraz PREFIXem można "tworzyć grupy"

     

    
    clearlistener()
    global klepkiRollout 
    (
    if klepkiRollout !=undefined then if klepkiRollout.open then DestroyDialog klepkiRollout
    
    rollout klepkiRollout "Klepki"
    (
    	local windowWidth = 400
    	local windowHeight = 220
    	local windowPos = [10,10]		
    	local isRolloutResized = 0
    
    
    	local element_width = 1
    	local element_names =#("klepka1","klepka2","klepka3","klepka4")
    
    	local floor_length = 70
    	local floor_width = 10
    
    
    	label L_null1 " "		
    	edittext E_prefix "new element prefix" text: "element_"
    	edittext E_objects "base objects"
    	label L_null2 " "
    	spinner S_floor_length "floor length" range:[1,100000,1]  type:#integer
    	spinner S_floor_width "floor width" range:[1,100000,1] type:#integer
    	spinner S_element_width "element width" range:[1,100000,1] type:#float
    	label L_null3 " "
    	checkbox CB_delete "delete elements with current prefix" checked:false		 	
    	button B_recreate "create" width:78 enabled:true  
    
    
    	on B_recreate pressed do
    	(
    		counter_length=0
    		counter_width=0
    		currnet_floor_width =0
    		currnet_floor_length =0
    		x_pos = 0
    		y_pos = 0
    
    
    		element_names = filterString E_objects.text ","
    
    		undo off
    		(				
    			if CB_delete.checked then delete ( execute("$"+E_prefix.text+"*")	)		
    
    			while  currnet_floor_width 				(
    				counter_width +=1
    
    				x_pos += element_width	
    				currnet_floor_width += element_width
    				currnet_floor_length= 0 
    
    				format "xxxxxxx : %\n" x_pos
    
    				while  currnet_floor_length 					(
    					counter_length +=1
    					rand = random 1 element_names.count
    
    					orginal_element = ( execute ("$"+element_names[rand]) )
    					new_element = instance orginal_element
    					new_element.name= E_prefix.text + counter_width as string + "_" + counter_length as string
    					new_element.wirecolor = orginal_element.wirecolor
    
    					bb = nodeLocalBoundingBox new_element
    
    					y_pos = currnet_floor_length + (bb[2][2] - bb[1][2])/2   
    					new_element.pos = [x_pos,y_pos,0]
    
    					currnet_floor_length += (bb[2][2] - bb[1][2])
    
    					--format ( " debug: %   % \n" ) currnet_floor_width currnet_floor_length
    				)
    			)
    		)
    
    		redrawViews()
    	)		
    
    	on klepkiRollout open do 
    	(
    		for n = 1 to  element_names.count do 
    		(
    			E_objects.text += element_names[n] + ","
    		)
    
    
    		S_floor_width.value = floor_width
    		S_floor_length.value  = floor_length
    		S_element_width.value  = element_width
    	)		
    	on S_floor_length changed val do
    	(
    		floor_length = val
    	)
    	on S_floor_width changed val do
    	(
    		floor_width = val
    	)
    	on S_element_width changed val do
    	(
    		element_width = val
    	)
    )	
    
    createdialog klepkiRollout style:#(#style_titlebar, #style_border, #style_sysmenu, #style_resizing, #style_sunkenedge)   pos:klepkiRollout.windowPos width:klepkiRollout.windowWidth height:klepkiRollout.windowHeight
    )
    
    
    

  17. chcialbym zrobic spinner cos jak "seed" ktory zmienialby losowosc rozlozenia klepek.

     

    seed z tego co wiem nie istnieje dla random()

    jeśli zależy Ci by szybko, zmieniać różne ułożenia to po prostu kasuj stworzone elementy i wywołaj skrypt ponownie

     

    dla powyższego skryptu jest to komenda

     

    delete $element_*

     

     

    Chcialbym tez aby to dzialo sie w realtime :]

     

    odpalając skrypt z delete $element_* na początku osiągam wynik poniżej sekundy dla 200 elementów, dla każdorazowego wywołania, wiec jest powyżej 1 fps ;]

     

    tworzenie geometrii w czasie rzeczywistym to raczej nie maxscript ;]

     

    najprościej było by zrobić przycisk recreate w UI

     

     

     

    PS: jeśli komuś nie odświeża ekranu po stworzeniu podłogi niech na końcu dopisze

     

     

    redrawViews()

×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Wykorzystujemy cookies. Przeczytaj więcej Polityka prywatności