Skocz do zawartości
View in the app

A better way to browse. Learn more.

Max3D.pl

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

CgBartosz

Members
  • Rejestracja

  • Ostatnia wizyta

Zawartość dodana przez CgBartosz

  1. CgBartosz odpowiedział odpowiedź w temacie → 3ds max
    Dziękuję za sprostowanie. Czyli 3dsmax design ma particle flow, cloth, massfx i wszystkie inne narzędzia do symulacji ?
  2. CgBartosz odpowiedział odpowiedź w temacie → 3ds max
    Nie używaj wersji design. Jest to wersja dla architektów pozbawiona części narzędzi animacyjnych. Książka dobra na początek. Modułmental ray uruchomisz w panelu "Render Scene Dialog".
  3. http://www.itsartmag.com/features/interview-platige-making-witcher-3/#.UinzsMaFV8E
  4. Zaktualizowałem kod http://max3d.pl/forum/showthread.php?p=1174384#post1174384
  5. Skrypt znajduje się tutaj: http://max3d.pl/forum/showthread.php?p=1174384#post1174384
  6. Cześć, Gratki dla wszystkich uczestniczących w projekcie - Świetna robota ! Kilka słów o assetach i wymianie plików. Tak, jest autorski system do zarządzania assetami. Opiera się o centralne repozytorium metadanych sklejone z przeróżnymi softami pythonowym API. Na to repozytorium jest przepiękny web'owy frontend, pozwalający monitorować przeróżne aspekty projektów. Do tego dochodzi garść zasad, i doświadczenie nabyte przy poprzednich projektach. Do wymiany danych używamy własnych rozwiązań rozwijanych przez lata, ogólnodostępnych formatów ale także takich powstałych ad hoc (binarki, tekstowe,itp...). Jeszcze z takich technicznych informacji odnosnie twarzy. Do animacji twarzy użyliśmy Softimage Facerobot, Faceware, troche ręcznego rigowania, skryptowania i customowych deformerów (ICE,c++). Część ujęć była animowana w Maya. Pozdrawiam, Bartek Opatowiecki
  7. Kiedyś pracowałem z syryjczykiem (około 10 lat temu). Gość znał Maya na wylot, pisał skrypty w melu lepiej niż mówił po angielsku, renderował, teksturował, modelował, itp... Zrobił kiedyś taki rig który prawie sam chodził. Tutoriali w sieci nie było prawie wcale, YouTube'a i blogów też niezbyt wiele. Na pytanie skąd tak dobrze zna ten program, odpowiedział, że przerobił calutkiego helpa... Dwa razy. To była maya 4 i help był taki sobie...
  8. moze podlacz sobie scene bez materialow przez referencje do jakiejs pustej. zaladuj materialy i podepnij a w kazdej kolejnej iteracji podmianiaj te zreferencjonowana scene. Informacje o polaczeniach miedzy nodami pozostana w scenie glownej (te do ktorej ladujesz referencje). Jesli pomiedzy iteracjami nazwy obiektow pozostana niezmienne to wszystko bedzie pieknie działac.
  9. CgBartosz odpowiedział P.I.W.O. → na temat → Programs Languages
    3dsmax'em to zrobisz
  10. Kilka dni temu kroopson modelowal w Blenderze proxy do rigow. Sam kiedys stosowałem Blendera jako "pelt mapper" kiedy jeszcze w innych programach rozwiazanie to nie bylo dostepne.
  11. CgBartosz odpowiedział lordmaya → na temat → Programs Languages
    To co wkleilem nie zmienilo zachowania a jedynie forme.
  12. CgBartosz odpowiedział lordmaya → na temat → Programs Languages
    macroScript HVCutter category: "HVTools" ( fn centerPivotsByPattern nodes = ( for i in nodes do ( if (matchpattern i.name pattern:"*cutter") == True do ( CenterPivot i ) ) ) /* method argument: 1 - instance, operand is an instance of the original 2 - reference, operand is a reference to original node 3 - copy, operand is a copy of original node 4 - move, original node should be deleted */ fn createIntersectionMesh method &nodesCollection = ( cutter = copy nodesCollection[1] deleteitem nodesCollection 1 cutter.name = "cutter" proCutter.CreateCutter #(cutter) method on on off on on proCutter.AddStocks cutter nodesCollection method 1 proCutter.setPlanarEdgeRemoval cutter 2 delete cutter ) input = selection as array createIntersectionMesh 4 input centerPivotsByPattern (objects as array) )
  13. stworz krzywa nurbs i przyskinuj konce do nulli. Wlacz krzywej "render in viewport".
  14. W efekcie ubocznym mozna pisac do pliku jesli zamienic stringstream na file i drukuje propertiesy. ( struct PrintNodeValues ( public nodesArray, frameArray, dataStream, private fn _printValuesByType _node _frame = ( propNames = getPropNames _node format "\tslidertime = %\n" _frame to:dataStream for propName in propNames do ( at time _frame ( propValue = getproperty _node propName format "\t$.% = %\n" (propName as string) propValue to:dataStream ) ) ), on create do ( for _frame in frameArray do ( for _node in nodesArray do ( format "\nnodeInfo\n" to:dataStream format "\t%\n" _node to:dataStream format "\tsuperClass:%\n" (superclassof(_node)) to:dataStream format "\tClass:%\n" (classof(_node)) to:dataStream format "transforms:%\n" _node to:dataStream _printValuesByType _node.controller _frame format "properties:%\n" _node to:dataStream _printValuesByType _node _frame ) ) ) ) nodesArray = selection as array frameArray = #(0f,5f,10f,15f,20f) dataStream = stringstream "\n" PrintNodeValues nodesArray frameArray dataStream print (dataStream as string) ) Dla splajna taki wynik daje w listenerze: nodeInfo $Line:Line002 @ [14.202627,-7.950639,0.000000] superClass:shape Class:line transforms:$Line:Line002 @ [14.202627,-7.950639,0.000000] slidertime = 20f $.position = [14.2026,-7.95064,0] $.rotation = (quat 0 0 0 1) $.scale = [1,1,1] properties:$Line:Line002 @ [14.202627,-7.950639,0.000000] slidertime = 20f $.steps = 6 $.render_renderable = false $.render_mapcoords = false $.render_viewport_thickness = 1.0 $.render_viewport_sides = 12 $.render_viewport_angle = 0.0 $.render_displayRenderMesh = false $.render_useViewportSettings = false $.render_displayRenderSettings = true $.thickness = 1.0 $.sides = 12 $.angle = 0.0 $.renderable = true $.mapcoords = false $.viewport_thickness = 1.0 $.viewport_sides = 12 $.viewport_angle = 0.0 $.displayRenderMesh = false $.useViewportSettings = false $.displayRenderSettings = true $.optimize = true $.adaptive = false $.render_viewport_length = 6.0 $.render_viewport_width = 2.0 $.render_viewport_angle2 = 0.0 $.render_rectangular = false $.render_viewport_rectangular = false $.render_aspect_locked = false $.render_viewport_aspect_locked = false $.render_auto_smooth = true $.realWorldMapSize = false $.render_thickness = 1.0 $.render_sides = 12 $.render_angle = 0.0 $.render_width = 2.0 $.render_length = 6.0 $.render_angle2 = 0.0 $.render_threshold = 40.0
  15. Czy napisalem go w odpowiedzi na twoj post ? Tak, 10 minut to zajelo. To super proste, co zreszta widac po kodzie.
  16. Moze ten skrypcik pomoze struct SelectFacesByArea( public polyMesh = undefined, minAreaVal = .001, maxAreaVal = 1., private _facelist = #(), fn _SelectFaces = ( for i = 1 to polyMesh.numfaces do ( areaVal = polyop.getFaceArea polyMesh i if areaVal = minAreaVal do ( append _facelist i ) ) polyop.setFaceSelection polyMesh _facelist ), on create do ( if polyMesh != undefined do ( if (classof polyMesh) == Editable_Poly then ( _SelectFaces() )else print "convert to Editable_Poly" ) ) ) SelectFacesByArea $ .5 1.
  17. Gdybys przepisal kod z ponizszego adresu na maxscript, mogloby sie udac. http://csharp.net-informations.com/communications/csharp-server-socket.htm Mozesz takze sprobowac uzyc "named pipes". Za pomoca named pipes udalo mi sie posylac komunikaty do maxa wprost z konsoli pythona. Wymagalo to napisania klienta do pythona w formie pluga i serwera maxowego tez w formie pluga. Jedyny problem ktory sie pojawil to blokowanie aplikacji 3dsmax po uruchomieniu serwera.
  18. Możesz powtarzać tę animacje włączając funkcję "out of range" kontrolera i ustawic wartość "after" na relativeRepeat, czyli powstanie zapętlona kopia tej proceduralnej. Przy 500 klatkach może być widoczna powtarzalność... Nadal jednak animacje możesz kontrolowaćustawieniami waveform controllera. _cnt = $.controller.position.controller.x_position.controller enableORTs _cnt true setAfterORT _cnt #relativeRepeat
  19. te druga w czasie animacje mozna zapisac menu Animation>Save Animation - zaznaczyc 'segment' i kliknac ustawic zakres do zapisania. Nastepnie na te pierwsza kamere menu Animation>Load Animation 'insert' i w pole 'at' mozna wstawic koncowa klatke animacji aby tam wyladowal poczatek wcztywanych kluczy. W ten sposob mozna zapisac wszystkie animowalne atrybuty kamery.
  20. Sadze ze bardzo dobrze zrobiles ! Osobiscie usunalbym jeszcze te glowe na nogach ze stilki z modelami... ;)
  21. CgBartosz odpowiedział rakson23 → na temat → Programs Languages
    W maxsckrypcie udalo sie time:11.731 s
  22. CgBartosz odpowiedział rakson23 → na temat → Programs Languages
    Na moim kompie takie cos: maxscript i obiekty jako referencje = time:28.808 s 8 iteracji GeneratorLSystemuN.
  23. CgBartosz odpowiedział rakson23 → na temat → Programs Languages
    moje 3 grosze :) zamiast tego: if self.aks[i]=='F': drzewo=drzewo+self.reg[0] elif self.aks[i]=='Z': drzewo=drzewo+self.reg[1] elif self.aks[i]=='X': drzewo=drzewo+self.reg[2] elif self.aks[i]=='C': drzewo=drzewo+self.reg[3] elif self.aks[i]=='V': drzewo=drzewo+self.reg[4] elif self.aks[i]=='B': drzewo=drzewo+self.reg[5] elif self.aks[i]=='N': drzewo=drzewo+self.reg[6] elif self.aks[i]=='M': drzewo=drzewo+self.reg[7] ... mozesz zastosowac taki sposob: _dict = {'F':0,'Z':1,'X':2,'C':3,'V':4,'B':5,...} _index = self._dict[self.aks[i]] drzewo=drzewo+self.reg[_index] _dict moze byc atrybutem klasy. Troche to poprawi czytelnosc kodu. unikaj dodawania stringow w ten sposob: drzewo = drzewo+ jakisstring Szczegolnie w petlach moze byc wolo. Szybciej jest tak: strinsArr = [str(i) for i in xrange(0,1000)] #list comprehension drzewo = ''.join(strinsArr) ...takze xrange jest szybsze od range. tu zamiast tak: if (znak=='+'): pm.rotate ('pomocnik',[kat,0,0],relative=True,objectSpace=True) elif (znak=='-'): pm.rotate ('pomocnik',[-kat,0,0],relative=True,objectSpace=True) elif (znak=='^'): pm.rotate ('pomocnik',[0,0,kat],relative=True,objectSpace=True) elif (znak=='&'): pm.rotate ('pomocnik',[0,0,-kat],relative=True,objectSpace=True) elif (znak==' pm.rotate ('pomocnik',[0,kat,0],relative=True,objectSpace=True) elif (znak=='>'): pm.rotate ('pomocnik',[0,-kat,0],relative=True,objectSpace=True) mozna chyba tak: def GetVector(_key,_angle): _dict = {'+':[_angle,0,0],'-':[-_angle,0,0], '^':[0,0,_angle],'&':[0,0,-_angle], '':[0,-_angle,0]} return _dict[_key] def RotateNode(_nodeName, _key, _angle, relative=True, objectSpace=True ): pm.rotate(_nodeName,GetVector(_key,_angle),relative=relative,objectSpace=objectSpace) i wywolujesz: RotateNode('pomocnik', _key, _angle ) Nie moglem sie powstrzymac :D Mam nadzieje, ze to tez troche pomoze w Twojej pracy magisterskiej :)
  24. CgBartosz odpowiedział rakson23 → na temat → Programs Languages
    Przepisalem sobie to na maxscript bo nie mam majki i cos tam sie generuje. Ciekawszy wydaje sie GeneratorLSystemuN. Bardzo fajne !! Uwagi mam tylko do kodu ale rozumiem, ze nie jest skonczony ,wiec sie z nimi wstrzymam :) Mozesz zoptymalizowac na przyklad klase ObiektStos poprzez uzycie __slots__ pythonowych. Znajdziesz opisy w sieci. Trzymam w ObiektStos tylko macierz transformacji przez co zniknelo ze 20 linijek kodu
  25. Tego nie wiem napewno, na razie biore sie za kompilacje biblioteki... to o czym mowisz supportuje sam hdf5, alembic opiera sie na tym formacie i nie mam pojecia co panowie w robia zanim dane trafia do pliku, stad watpliwosc a moze raczej ciekawosc. Pozdrawiam.

Powiadomienie o plikach cookie

Wykorzystujemy cookies. Przeczytaj więcej Polityka prywatności

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.