Napisano 22 Październik 201311 l Hejka. Próbuje stworzyć w maxie coś w tym guście: https://vimeo.com/72048058 (moment z 3:40) W skrócie: -mam dwa obiekty kontrolujące, b1 i b2. -skrypt dorabia podaną ilość kopii -ustawia kopie (pozycje, rotacje i skale) na podstawie różnicy b2-b1 -tworzy dynamiczne połączenie, tak abym mógł interaktywnie we viewporcie sobie manipulować efektem. Pierwsze 3 punkty udało mi się zrealizować: (wystarczy odpalić w świeżej scenie) delete objects b1 = ChamferBox() b2 = ChamferBox() b1.length = b1.width = b1.height = b2.length = b2.width = b2.height = 25 b1.fillet = b2.fillet = 2 b2.pos.x = 7 b2.pos.z = 40 about b2 rotate b2 ((eulerAngles 3 5 7) as angleaxis ) boxes = #() while boxes.count for i = 1 to boxes.count do( m = i + 1 obj = boxes[i] rot = (b2.rotation - b1.rotation) as eulerAngles rot.x *= m rot.y *= m rot.z *= m obj.rotation = eulerToQuat rot obj.pos = (b2.pos - b1.pos)*m ) Potrzebuje pomocy, jakiegoś naprowadzenia, jak zabrać się za tą interaktywność. Gdyby tylko wire parameters pozwalało na połączenia miedzy większą ilością obiektów, niż dwóch.
Napisano 23 Październik 201311 l Autor Bardzo interesujący temat, o istnieniu którego nie miałem pojęcia:) A czy jest coś, co mniej ingeruje w scene, a opiera się na samych zależnościach miedzyobiektowych?
Napisano 24 Październik 201311 l Mozesz zawsze tym boxom przypisać script controllera. Dołączyłem scenę bo nie chce mi się pisać tego wszystkiego. Zobacz jak to jest zbudowane i pewnie stanie się światłość. test.zip
Napisano 24 Październik 201311 l Autor Jesteś świetny, zawsze pomagasz. Dokładnie o takie rozwiązanie mi chodziło. Dziękuje bardzo
Napisano 25 Październik 201311 l Autor Ok, wykręciłem coś takiego: delete objects --create control objects b1 = box() b1.wirecolor = (color 130 0 0) b1.pivot = b1.center move b1 [0, 0, -b1.width/2] maxOps.cloneNodes b1 cloneType:#instance newNodes:&b2arr b2 = b2arr[1] move b2 [0, 0, 25] parent = b2 copies = #() for i = 1 to 85 do ( maxOps.cloneNodes b2 offset:[0, 0, 25 * i ] cloneType:#instance newNodes:&ins curBox = ins[1] curBox.wirecolor = (color 30 30 30) curBox.parent = parent posCtrl = curBox.position.controller = position_script() posCtrl.addNode "b1" b1 posCtrl.addNode "b2" b2 posCtrl.script = "b2.pos - b1.pos" rotCtrl = curBox.rotation.controller = rotation_script() rotCtrl.addNode "b1" b1 rotCtrl.addNode "b2" b2 rotCtrl.script = "b1.rotation - b2.rotation" scaleCtrl = curBox.scale.controller = scale_script() rotCtrl.addNode "b1" b1 rotCtrl.addNode "b2" b2 scaleCtrl.script = "b1.scale + (b2.scale - b1.scale)" -- assign next parent for next iteration parent = curBox ) Pozostaje jeszcze tylko problem skalowania, które powinno dziać się w koordynatach lokalnych, a dzieje się w globalnych. Próbowałem "in coordsys local", ale niestety nie działało. Jak to wstawić w script_controller?
Napisano 25 Październik 201311 l blender have it in standard! Ale dziwna sprawa że nie ma czegoś takiego w maxie standardowo. Jeżeli w softimage jest.
Napisano 25 Październik 201311 l Kramon zdajesz sobie, że Maya, Max, Softimage to zupełnie rożne programy napisane przez zupełnie kogoś innego mające w zamyśle robić zupełnie co innego? Nie wspominając, że to jest zależne od języka skryptów w Maxie masz Maxscripta i chyba w tym roku dodali pythona w SI masz język skryptowy XSI(nie pamiętam jak się nazywa :P ), jscipta albo jave i pythona, w Mayi masz MEL, pyMEL, pythona i pythona pod API bezpośrednio dodatkowo możesz sobie dodać np. seExpression. Nie wspominam też, że każdy z tych programów ma oddzielną filozofie budowy.
Napisano 25 Październik 201311 l Ale tu nie chodzi o to że to tam było napisane w innym jęzku jeżeli koleś który cośtam kmini z kodu może sobię to napisać. Chodzi o zasady. To jest błachostka która daje naprawdę dużo. i jeżeli umieścili ją tu to mogli by i tam. Co do tych ludzi to :D Maykę teraz piszą ludzie od Softimage :D
Napisano 25 Październik 201311 l Deshu spoko, można fajnie rozwinąć te skrypcik i powstanie narzędzie do wielu zastosowań. Do skalowania lokalnego możesz wykożystać chyba Xforma i skalować jego gizmo. Kramon jakim trzeba być upośledzonym dzieciakiem, żeby wsadzać tutaj takie wstawki. Mam na prawdę głęboko w dupie co potrafi Blender. Co ma piernik do wiatraka...
Napisano 25 Październik 201311 l Kramon jakim trzeba być upośledzonym dzieciakiem, żeby wsadzać tutaj takie wstawki. Mam na prawdę głęboko w dupie co potrafi Blender. Co ma piernik do wiatraka... Zastanów się nad sobą skoro cię tak to boli. Wstawiłem for fun. i kto tu jest dzieciakiem po za tym. Odrazu zaczynasz mnie obrażać niczym dziecko z podstawówki, no i kultura wypowiedzi też sporo świadczy. Edytowane 25 Październik 201311 l przez Kramon
Napisano 25 Październik 201311 l To nie jest for Fun tylko żenada. Wkurzają mnie twoje ciągłe wstawki co to nie Blender... w wątkach komletnie na inny temat. Szkoda tylko, że użytkownicy Blendera nie potrafią nic stworzyć ciekawego mając tyle fajnych narzędzi. Kutura wypowiedzi świadczy tylko o tym jak mi działasz na nerwy, wsadzając swoje bezwartościowe 3 grosze wszędzie.
Napisano 25 Październik 201311 l To nie jest for Fun tylko żenada. Wkurzają mnie twoje ciągłe wstawki co to nie Blender... w wątkach komletnie na inny temat. Szkoda tylko, że użytkownicy Blendera nie potrafią nic stworzyć ciekawego mając tyle fajnych narzędzi. Kutura wypowiedzi świadczy tylko o tym jak mi działasz na nerwy, wsadzając swoje bezwartościowe 3 grosze wszędzie. Boli cię to jak cholera musisz nad sobą popracować naprawdę :) zachowujesz się jakbym krzywdził twoją rodzinę. Co do tego że nie potrafią nic stworzyć ciekawego, Ow realy? Czekaj no ale to galerie maxa czy blendera są zalane nudnymi do wyrzygu wizkami albo renderami aut. Jak dla ciebie to jest ciekawe to pozdrawiam. Niechce kolejnej dykusji blender vs reszta świata. Ty natomiast możesz sobie za żartować że blender niema czegoś czego nie ma równierz Max ani Maya, pluginy te napisały zostały przez zewnętrzną firmę. No co do tej ciekawości to wolę takie prace niż hiper realistyczne interiory które wieją nudą. Co naj istotniejsze, są to zrobione prace przez osoby które traktują to jako zabawe hobby, a nie przez studio. :) Edytowane 25 Październik 201311 l przez Kramon
Napisano 25 Październik 201311 l Jak grochem o ścianę. Boli mnie tylko to, że tacy ludzie, którzy nie mają nic do powiedzenia, pieprza bez opamiętania beztreściwe, bezwartościowe głupoty. Nic poza tym. Możesz klepać, kłapać, krzyczeć, mam już to gdzieś.
Napisano 25 Październik 201311 l Autor Kramon, jeżeli już musisz dodawać tu swoje "blender ma to w standardzie", to: - musisz wiedzieć, że max też ma to w standardzie. Ja po prostu jestem grafikiem, i nie umiem tego jeszcze napisać. - serdecznie cie proszę, wywal chociaż obrazki z tego wątku, bo śmiecą niemiłosiernie. SUPER_OkO - dzięki za kolejną podpowiedź. Pewnie jutro bede mógł dopiero sprawdzić. Nie pomyslałem zupełnie o modyfikatorach. XForm powinien dać rade. Tylko chyba nie będę mógł już mógł mieć instancji tych boxów, tylko klony.
Napisano 25 Październik 201311 l - musisz wiedzieć, że max też ma to w standardzie. Ja po prostu jestem grafikiem, i nie umiem tego jeszcze napisać.
Napisano 25 Październik 201311 l Co do tych ludzi to :D Maykę teraz piszą ludzie od Softimage :D Gadasz głupoty. Ludzi od XSI są teraz w MayaFX Montreal, część pisze Fabric Engine/creation horde część o ile się orientuje współpracuje też przy Bifroscie(chodzi o to aby system od wewnątrz był bardziej elastyczny) Autodesk równie dobrze mógł ich rzucić to pracy nad integracja Bifrosta z Maxem to raz. Dwa to iż jeżeli Blendera piszą 3 osoby czy ile tam ma programistów obecnie nie oznacza, że jest tak z innymi softami. 3 Co do ostatniego posta to po co ludzie piszą addony do Blendera przecież pisze masa ludzi. @Deshu nie wiem jak to działa, ale nie możesz skalować w ten sposób, że konwertujesz local space do world space?
Napisano 25 Październik 201311 l Autor Sorry Oko i legomir, ale poprosze Adka o porządek tu. Legomir - noramlnie w skrypcie działa "in coordsys xxx", ale w script_controlerach z jakiegoś powodu nie chce.
Napisano 25 Październik 201311 l Cześć, Zerknijcie czy taki setup zachowuje się jak należy. Wystarczy uruchomić skrypt, a całość się wygeneruje. Transformacja jest kontrolowana przez pierwszy utworzony obiekt który po wykonaniu zostanie zaznaczony. struct TransformInheritanceSetup ( mCount = 0, mNodeFN = point, fn createInheritance count mNodeFN = ( prev = undefined first = undefined color_step = 255.0 / count color_curr = 0.0 for i = 1 to count do ( curr = mNodeFN() curr.wirecolor = (color (255-color_curr) (255-color_curr ) color_curr ) color_curr +=color_step if first == undefined do ( first = curr ) if prev != undefined do ( tm_script = curr.transform.controller = transform_script() tm_script.addNode "prev" prev tm_script.addNode "first" first tm_script.script = "first.transform * prev.transform" ) prev = curr ) return first ), on create do ( first = createInheritance mCount mNodeFN first.transform = (matrix3 [0.863505,0.445805,0] [-0.445805,0.863505,0] [0,0,0.971794] [49.3829,-1.52119e-006,34.8007]) select first ) ) resetMAxFile #noprompt TransformInheritanceSetup 90 box Chciałem dodać trzy grosze o Callbacks o któych pisał Super_Oko. W powyższym kodzie mNodeFN to jest taki prosty przykład callbacku. Zmienna tak "wskazuje" na byt "wywoływalny" czyli funkcje lub funktor. Na przyklad aby stworzyc box mozna przekazac poprostu funkcje "box": TransformInheritanceSetup 90 box Można także przekazać własną funkcje konkretyzującą tworzenie dowolnego obiektu, o tak: fn MojaFunkcjaTworzaca = ( cb = chamferBox() cb.fillet = 2.0 return cb ) TransformInheritanceSetup 90 MojaFunkcjaTworzaca Ta funkcje jest wołana z createInheritance, przy tworzeniu obiektu. Nie przyjmuje ona żadnych argumentów i zwraca stworzony obiekt. curr = mNodeFN() W maxie Callbacks działają bardzo podobnie. Definiuje się funkcję w globalnym zakresie maxscript i są one wywoływane przy pewnych zdarzeniach. Na przykład gdy użytkownik zmienia nazwę obiektu, lub resetuje scene. Edytowane 28 Październik 201311 l przez CgBartosz b
Napisano 28 Październik 201311 l Dzieki wielkie Bartek. Muszę przestudiować dokładnie ten zapis. Jestem jeszcze troche za glupi, żeby przyjąć taką dawkę zawiłości na klatę i zrozumieć wszystko na raz :D
Napisano 28 Październik 201311 l Autor Dzięki Bartosz! Bardzo ciekawa konstrukcja. Nie wiedziałem tez w ogóle o 'struct'. Nie wiedziałem też, o script_controlerze dla całego transforma, zamiast translacji/rotacji/skali osobno - miła sprawa. Niestety, problem z nielokalnym skalowaniem w twoim kodzie też występuje. (Gdy skalujemy proporcjonalnie, wszystko gra, ale gdy skalujemy osobno x/y/z, to transformacja jest nadawana wg. osi sceny, nie lokalnych)
Napisano 30 Październik 201311 l Tylko skaluj obiekt po lokalu struct TransformInheritanceSetup ( mCount = 0, mNodeFN = point, fn createBoxTree count mNodeFN = ( prev = undefined first = undefined color_step = 255.0 / count curr_color = 0.0 for i = 1 to count do ( curr = mNodeFN() curr.wirecolor = (color (255-curr_color) (255-curr_color ) curr_color ) curr_color +=color_step if first == undefined do ( first = curr ) if prev != undefined do ( tm_script = curr.transform.controller = transform_script() tm_script.addNode "prev" prev tm_script.addNode "first" first script = "tm = first.transform * prev.transform\n" script += "new_tm = matrix3 1\n" script += "new_tm = preTranslate new_tm tm.translation\n" script += "new_tm = preRotate new_tm tm.rotationPart\n" script += "new_tm = preScale new_tm tm.scale\n" script+= "new_tm" tm_script.script = script ) prev = curr ) return first ), on create do ( first = createBoxTree mCount mNodeFN first.transform =(matrix3 [0.8934,-0.437109,-0.0564497] [0.423136,0.876705,-0.0918574] [0.0919343,0.0596676,0.99297] [-39.7169,68.2191,10.7382]) select first ) ) fn MojaFunkcjaTworzaca = ( cb = chamferBox() cb.length = 30 cb.height= 30 cb.width= 30 cb.fillet = 2.0 return cb ) resetMAxFile #noprompt TransformInheritanceSetup 250 MojaFunkcjaTworzaca Edytowane 30 Październik 201311 l przez CgBartosz
Napisano 4 Listopad 201311 l Autor Dziękuje bardzo. Działa elegancko. Teraz musze to skumać zrozumieć:P
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto