Nuke ötletek
Régebben volt ilyen topic, gondoltam újraindítom.
Első ötlet:
Expression-ben az input node valamelyik paraméterére hivatkozás:
[input this 0].knobnév
Ilyenkor mindig az a node kerül az expression-be, amelyik a 0 inputra van kötve. (A 0 helyett írhatunk más számot is, ha több inputja van a node-nak.)
Ennek a továbbfejlesztése, hogy ha a node egy groupban van, akkor a group inputjára bekötött node-ra is tudunk hivatkozni:
[input parent 0]
Ez főleg gizmok gyártásakor hasznos, amikor nem tudjuk előre, hogy a gizmo inputjába milyen nevű node-ot fogunk bekötni.
- A hozzászóláshoz regisztráció és belépés szükséges

dotLabel
import osimport nuke
def dotLabel():
_for n in nuke.selectedNodes():
__if n.Class() == "Dot":
___read = n.input(0)
___if read is not None and read.Class() != "Read":
____while read.Class() != "Read":
_____if read.input(0) is None:
______break
_____read = read.input(0)
___n['label'].setValue(os.path.basename(os.path.dirname(read['file'].value())))
___n['note_font'].setValue('Verdana Bold')
___n['note_font_size'].setValue(20)
(Az "_" karatereket írjuk át space-re, vagy tab-ra)
Ez a kis függvény végigfut a fán és megkeresi, hogy a kijelölt Dot-ok milyen Read node-okba vannak bekötve, a path-ból kiszedi könyvtárnevet ás átnevezi a Dot-ok labeljét.
Hasznos, ha sok réteggel dolgozol és sok Dot-ot kell lerakni, hogy átlátható maradjon a fa.
Ha inkább a fájlnév alapján akarjuk a Dot-okat elnevezni, akkor két sort változtassunk meg:
import os, re___n['label'].setValue(re.sub("\..*", "", os.path.basename(read['file'].value())))
Jogos, oda nem kell '^' (valszeg másoláskor nem figyeltem).
A korrekt kód:
return re.sub('^e:', 'f:', filename)nem kötekedni akarok, mert nem használok Nuke-ot, meg Python-ban sem vagyok otthon, de a sub metódusban a repl-ben (azaz a második paraméterben, annak aktuális értékében) miért kellene regexp-et használni? azaz minek a '^'?
a pattern-ben (az első paraméternél, annak aktuális értékében) értem, hiszen ezzel biztosítod azt, hogy a filename elejére vizsgálja az illeszkedést, de a repl-nél minek a '^'?
előre is köszönöm a válaszod,
a tabulátort még mindig nem kezeli ez a blog?
Egy kis tutorial:
A nuke
/pluginskönyvtárában van egy hasznos kis script afilenameFix.py. Az ebben lévőfilenameFixfüggvény minden filenév lekérdezésekor lefut. Ha ezt a függvényt átírjuk, akkor a nuke által beolvasott fileok elérési útjait úgy tudjuk megváltoztatni, hogy közben nem kell azokat ténylegesen módosítani az .nk fileokban.Példa:
Két gépen dolgozunk, az egyiken a forrás anyagok az
e:/sourcekönyvtárban vannak és ott is végezzük a kompozitálást és ott mentjük el az .nk fileokat. Egy másik gépet csak renderelésre használunk, de nem tudjuk a hálózaton megosztott forrás könyvtárt e:-ként mountolni, mert már van olyan drive a gépben, ezért ott f: drivenak nevezzük el.A probléma: ha megnyitjuk a nuke fileokat, akkor az összes reader hibát fog jelezni, mert nem találják az e: drivera mentett anyagokat. Ebben az esetben a rendergépre telepített nuke finenameFix függvényét átírhatjuk:
import redef filenameFix(filename):
return re.sub('^e:', '^f:', filename)
Ez a script lecseréli az összes filenév elején az "e:" karaktersort az "f:" karakterekre. Természesen ennél jóval komplikáltabb eseteket is meg lehet oldani, pl. attól függően, hogy milyen oprendszer fut a gépen, meg lehet változtatni az elérési utakat, stb.
Az HSVtool többek között erre van.
Jaja, megvan. Bindzsizek vele.
Köszi.
Hali,
Vagy irsz egy expressiont az alfahoz, hogy bizonyos erteku teruleteket jeloljon ki, vagy egyszerubben levadaszod a "mask3d" gizmot, ami az egyik masterclass-os scripthez dukal. nem 100%-osan erre talaltak ki, de alkalmas ra.
Innen:
http://www.thefoundry.co.uk/articles/2009/01/29/101/nuke-masterclass-jan...
udv
p
p.
Van arra ötletetek Nuke-ban, hogy egy színben összefüggő területet hogyan lehet kijelölni? Olyasmire lenne szükségem, mint a PS-ben a Magic Wand eszköz. Konkrétan az EdgeDetect node-dal megkeresném az éleket, majd az élek közötti területet kitölteném.
Mi a konkrét probléma?
Ha egy-egy anim kulcsot kell sok node-on módosítani, akkor jobb scriptelni. Ha ugyanazt a node-ot kell sok helyre másolni és egyszerre animálni, akkor vagy klónozni kell, vagy expression-t használni, hogy egy node vezérelje a többit.
Lehet-e curve editor-ban nagyon sok node-ot megjeleníteni, úgy hogy nem nyitom meg a Properties Bin-ben a paramétereit (mert valszeg elszállna mondjuk 150 node-tól).
www.parlamentfilm.hu
Váó, nagyon-nagyon köszi!!!!! :)
Az enable-disable vezérlésről:
1. Leraksz egy vezérlő node-ot (a legjobb erre a célra a NoOP)
2. Létrehozol rajta egy PythonScriptButton-t
3. Majd beírod hozzá a scriptet:
for n in nuke.selectedNodes(): #0 space
if n.knob('disable') is not None and n.Class() == "Blur": # 1 space
n['disable'].setValue(True) # 2 space
Ha nem csak a kijelölt node-okon akarod lefuttatni, hanem mindenen, akkor az első sort cseréld ki:
for n in nuke.allNodes():
Természetesen ha más típust akarsz kapcsolgatni, akkor cseréld ki a "Blur"-t más classra. A node classt legegyszerűbb megnézni egy elmentett .nk file-ban, hogy milyen parancs hozza létre az adott node-ot. Érdemes ellenőrizni a class pontos nevét, mert nem minden classnév azonos a node alapértelmezett nevével. A Nuke-ban kompatibilitási okokból megtartják a régi node-okat, az újakat meg sorszámozzák. Ezért pl. a Merge valójában Merge2 class, a Camera meg Camera2, stb.
Az első feltétel
if n.knob('disable') is not Nonefontos, mert a NoOp-nak nincs disable knobja, így ott kapásból elszállna a script.
Kicsit összestettebb példa:
NoOp {
name EnableDisable
addUserKnob {20 User}
addUserKnob {4 class_type l Class M {Blur TimeBlur VectorBlur}}
addUserKnob {6 selected_nodes l "Selected Nodes" +STARTLINE}
addUserKnob {22 disable_nodes l Disable T "t = nuke.thisNode()\nfor n in nuke.selectedNodes() if t\['selected_nodes'].value() else nuke.allNodes():\n if n.knob('disable') is not None and n.Class() == t\['class_type'].value():\n n\['disable'].setValue(True)" +STARTLINE}
addUserKnob {22 enable_nodes l Enable -STARTLINE T "t = nuke.thisNode()\nfor n in nuke.selectedNodes() if t\['selected_nodes'].value() else nuke.allNodes():\n if n.knob('disable') is not None and n.Class() == t\['class_type'].value():\n n\['disable'].setValue(False)"}
}
(copy-paste a nuke-ba)
Ennél egy listából ki tudod választani, hogy mely node típust akarsz kapcsolgatni és eldöntheted, hogy az összes node-on, vagy csak a kijelölteken fusson le a script, továbbá van külön Disable és Enable gomb.
szerk:
Ez a kód kiemelés így elég gáz, mert a pythonnál nem tartja meg a sor elején a spaceket, márpedig anélkül nem működnek a blokk utasítások.
Úgyhogy a fenti scriptbe beírtam megjegyzésbe, hogy mennyi space kell eléje.
Hello!
1. Tokeletes textscroll list a pyqtben a list widget, de ezt implementalni azert kis utanajarast igenyel, es nem biztos hogy megeri csak ezert a listaert a faradtsagot. De ha komoly guit is akarsz majd fejleszteni akkor mindenkepp.
2. Ha van kis python gyakorlatod, akkor nezd meg a nukeinstalldir/plugins/nukescripts/panel_test.py-t, ebben vannak a beepitett gui controlok, es pelda hogy kell meghivni oket. Pl egy for looppal vegigmesz a write node-okon, es utana a panelra kiteszel mindegyiknel egy checkboxot, labelba irva a fontos informaciot, ami lapjan a user valasztja amit kell.
3. Gizmora is csinaltam mar hasonlot (knob-ok hozzaadasa egy loopban, addKnob), elonye a panellal szemben, hogy megmaradnak benne a legutolso futtataskor beallitott ertekek. Bar ez a te esetedben szerintem nem a legjobb, en a 2-es opcioval csinalnam.
Gabor
Tud valaki tutort olyanra, hogy lehet listat csinallni GUI-ban, mint pl MEL-ben a textScrollList. Ilyesmit akarok:
Kivalasztok mittomen 5 write node-ot azt berakja egy list-be, es a listaban kivalasztott dolgokon lefuttatok valamit.
a scale volt a problema
szerintem azok polygonok, de nem vagyok biztos benne
a durva az, hogy egy mayabol exportalt kocka mukodik, egy plane meg nem
Fogalmam sincs, mirol van szo, csak ide tevedtem, de talan az, hogy a Nuke implicit egy implicit fuggveny, amivel konnyu metszest szamolni, az importalt Maya gomb meg egy haromszogesitett, altalanos polygonos felulet.
raytraced projection miert zajos importalt obj-kra, es miert tokeletes a native nuke objectre?
probaltatok mar hasznalni az occlusiont a project3D node-on? (ugy projektalni, mintha fenybol projektalnal, arnyekban levo reszek nem veszik fel a projekciot)
(basic maya sphere, haromszogesitve vs nuke sphere - mi a kulonbseg a topologiaban?)
Köszi! Ha nem is máshonnan kapcsolgatni, inkább egy olyan megoldásra gondoltam, ami az összes egyforma (select similar alapján) vagy éppen a user által kiselectált node-ok disable-jére beírja a scriptet vagy az általad írt expressiont. Tehát ne egyenként kelljen setupolni.
nem tudom, hogy lehet mashonnan kapcsolgatni(python), de a node-okba script helyett eleg egy expr, lasd bendi hsz-at, nov. 14.
nem pont amit szeretnel, de eleg jo megoldas ha kozponti vezerlest akarsz, a project settings-ben vegyel fol egy valtozot, arra hivatkozhatsz (vagy egy tetszoleges node-ban), pl. folveszel egy olyat, hogy quality, es aztan erre tudsz
ugy hivatkozni, hogy root.quality, es ezt hasznalod a motionblurben, vagy a disable-ben...
disable!=root.quality
Ezt a disable-t meg lehetne valahogy fordítani? Úgy értem, hogy ne kelljen minden node disable-jére rárakni a scriptet, inkább a vezérlőnodenál adnám meg, hogy pl. az összes blur-t vezérelje.
Más: létezik autocrophoz valami okosság arra az esetre, ha változna a source, frissítse a crop datát? Én nem igazán hiszem, mert az autocrop futás után lecserélni magát egy cropra, innentől meg elvileg nincs update lehetőség... Ha CurveTool-t használok és egy expressionnel másolom át az infót egy crop-ra, akkor megmarad a kapcsolat és egy Go újrabóli lenyomása után frissíti a Crop node-ot is, csak ez nekem automatizálva kéne :P Tehát a Reader változásakor automatice induljon el a Curve Toolban a Go parancs...
Bármi ilyesmit tudtok, amivel érdemes gyurmázni, szóljatok pls! Köszi!
igaza van abban, hogy ez nem az a topic :-)
Ezekkel a tutorialokkal érdemes kezdeni.
Ezek közül is a 3d alapok: itt.
Olvastam nem talaltam, Letöltöttem alap tutorokat foundry hon laprol erre pont nem tert ki satöbbi..
Azért köszi ..
- project settings / frame range
- a timeline meretet (range) egerrel, nem vagyok kepes megjegyezni az alt/ctrl/egergomb kombot, probalgasd
- scanlinerender node
legkozelebb, ha alapveto kerdesed van, szerintem
-olvasd el az alapveto doksit, 1 percen belul megkapod a tokeletes valaszt, vagy ha ehhez lusta vagy, legalabb
-legyen annyi eszed, hogy nem az otletek-tippek-trukkokbe irod, mert ez nyilvanvaloan nem az a mufaj :)
Friss nuker volnék két kérdés Timerange nagyságát hol lehet beállítani?
Ha van egy jelenetem amiben van egy 3ds objectem es a viewnode-al "látom" akkor ha ugyan oda bekötök egy write nodeot és kiírom, elméletileg nem ua kellene kapnom mint amit a view-al látok? Mert a kiirt videon a 3ds objectemnek hült helye van.. sajnos.
Válaszokat előre is köszi
A jelenség oka az, hogy a nuke alapból nem subframek renderelésével számolja a motionblurt, hanem a transzformációk során tárolja, hogy egy adott képpont merre mozdul az UV térben és az alapján módosítja a képet. Így nagyságrendileg gyorsabb a motionblur számítása és jóval kevesebb memóriát igényel, mint ha subframeket számolna, mert nem kell x alkalommal lerenderelnie az egész fát.
Magára a villogásra a Timeblur a megoldás. Ez subframe alapú, pont ezért bonyolult kompok esetén gyötrelem lassú lehet, ezért preview célra érdemes meghagyni a fában a normál motionblurt is. Timeblur esetén az olyan node-okat, amik szintén subframe alapúak célszerű precompolni (mint pl. oflow), mert hajlamosak összeakadni.
3d motionblurnél (szintén a valójában két dimenziós motion vektorok használata miatt) keletkezhetnek csúnya artifactok, ha a kamera felől nézve Z irányú mozgásokat kell számolni, ilyenkor szintén timeblur a megoldás.
A nuke motion blur-t teszteltem a transform node-on. És a következőre jutottam:
A szín/átlátszóság változását nem veszi figyelembe a számításnál.
Ahogy a videón látható villog, ahelyet, hogy az adott képkockáknak megfelelően a húzott csík színe változna.
Probáltam kép inputtal, de ugyan ez a jelenség:
Kérdés, hogy van e vmi alternatív megoldás a problémára?
www.parlamentfilm.hu
ne nyulj a nuke hoz! csak elrontod! :) ott van neked a brush :))
...........................jajj de jo ez a cg blog...........................
Jo van ragyuttem :D
[value parent.input.file]
Na meg 1 kezdo kerdes:
Van 1 Group. Abba bele van kotve 1 read node (tehat az az input)
A Group-ba van egy text node.
A text-tel meg ki akarom irni, hogy a Group-on kivul bekotott read node-nak mi a file knob-ja.
felmerult bennem, hogy letezik nuke-hoz edge detection node ? ami megkeresi a kepen az eleket? vagy esetleg olyan, hogy maszk muveletet hajt vegre a kepen, ertem ezalatt, hogy van pl egy 3x3-as matrix, amibe szamokat irok, azt ertem maszk-nak, es ezzel vegez el keppontonkent muveletet ?igazabol egy 2d-s AO gizmot akarok epiteni... ha van ilyenbol ingyenes es jo, azt is szivesen fogadnam, plane, ha olyan, hogy bele is tudok modositani...
megoldva, matrixnak hivtak a dragamat..
amugy csak szerintem nagyon penetrans a nuke-ban levo edge detect ?
osszeraktam egyet magamnak, nem volt nagy varazslat, csak egy apro gaus blur szeru (sajat, 5x5-os matrix, valamint egy kis level allitas) es utanna x, es y iranyu diszkret derivalo maszkok, es merge, es utanna mar csak kicsi kompozitalgatas, hogy szep legyen az AO... ezt finomitom most is
Valaki probalt mar tile-olt UV-t betolni Nuke-ba (es nem a lassu contact sheet-es hekkel)?
koszi... a valaszt
megint egy elegge amator dologba futottam bele, 3d Sceneket nezegetem
de van amikor a 3d-s handler tul pici, es nehez megfogni
van ra valami tipp, hogyan lehetne megnovelni oket ?
eltuntek a tabok :(
if disNode.knob <=8:
for i in femaleSet:
list.copulate(i)
else go gyoker.knob
disznod.knob!
Aljas :D
nuke = abs(knob)
A ToolSeteket a nuke a c:\Users\usernév\.nuke\ToolSets könyvtárba menti el. Ha a saját gépeden a saját usered alatt létrehozol egy ugyanolyan könyvtárat, akkor át lehet hozni a toolseteket egyik gépről a másikra. Ez egyébként igaz a beállításokra, ablak-elrendezésekre, stb., azok is a .nuke könyvtárban vannak.
A disable-hez egyébként elég beírni:
vezérlőnode.disableHa a vezérlőnode kikapcsolásával akarod bekapcsolni a másikat, akkor meg:
!vezérlőnode.disableEz pl. gizmo gyártásakor hasznos, ha gizmon lévő checkboxal akarsz ki-bekapcsolni nodeokat a gizmon belül.
nekem az lenne a kerdesem, hogy amit csinalok user-preset, vagy toolset-et
azt at tudom vinni masik nuke -ba... pl studioban haver csinal par tok hasznos colorcorrect presetet, azt hogy tudja atadni masoknak, ugyanez toolset-ekre (mondjuk csinalok belole gizmot, es elmentem magamnak toolset-kent, de mas megoldas van) ?
es hogy egy tippet is irjak.
ha sok blur, meg egyebb lassu node van, erdemes lerakni egy barmilyen nodeot
es a disable flaget rakotni ezekre a nodeokra
igy egy node ki-bekapcsolasaval tudom szabalyozni a tortenest.
(erdemes meg a write nodeba a Python ful alatt berakni egy egyszeru kis scripetet, hogy enable-re rakja oket, utanna meg kapcsolja vissza)
az expression amit a vezerelni kivant node-ok disable-jehez kell beirni (node tab)
[if {[value root.vezerlonode.disable]} {
return 1
} else {
return value}
]
meg egy aprosag ehez
ha a write node Python tabjaba beillesztitek a
befor render-hez:
nuke.toNode('vezerlonode').knob('disable').setValue(0)es az after render-hez
nuke.toNode('vezerlonode').knob('disable').setValue(1)akkor a renderhez automatikusan bekapcsolja, utanna meg kikapcsolja a sokat fogyaszto node-okat
Ja jut eszembe: Tocy honlapjan is van jopar hasznos script: thoughtvfx
Nem akartam kopi pésztelni:
Nuke egyszerű és hasznos pyhton script-ecskék
www.parlamentfilm.hu
ja, az ingyenes foundry videokban ez az autocrop script is bemutatasra kerul ===> erdemes megnezni, van egy csomo hasznos...
http://www.youtube.com/user/TheFoundryChannel#g/p
a nuke engine-je scanline, azaz soronkent szamol. ezert legjobban a zip1 formatumu exr-t szereti, mert az viszonylag tomor (zip), es 1 soronkent van tomoritve, igy pl. ha kizoomolva nezed ('f') csak az aktualis sorokat kell behuznia diszkrol, mig egy tile-alapu file-nal az egymas mellett levo osszes tile-t (jo esellyel az egesz kepet?) be kell olvasnia a lejatszashoz.
emiatt valoszinuleg erdemes a 3d render outputjat is zip1-be kinyomni.
dobtam egy hatast, mikor lattam, hogy az egyik srac a munkaallomasan milyen gyorsan tudott lejatszani egy masik gepen levo 4K-s forgatott zip1 exr szekvenciat...
azt is irjak tobb helyen, hogy exr formatumra van kihegyezve a nuke, amit nem igazan tudok ertelmezni, gondolom a sok csatorna kezelesere, es a 16 bit float adattipusra ertettek?
A kép méreteire lehet közvetlenül hivatkozni, mint knobokra:
node.width node.heightPl. egy transform, aminek a centere mindig a bejövő kép közepén van függetlenül a felbontásától:
Transform {center {{"input.width / 2"} {"input.height / 2"}}
}
A project alapméretei:
root.width root.heightA bbox is elég egyszerű: minden node-nak van bbox knobja, tehát a hivatkozás a bbox két sarkára:
node.bbox.x node.bbox.y node.bbox.r node.bbox.tPl. egy rectangle, ami mindig akkora, amekkora a bejovő kép bbox-a:
Rectangle {area {{input.bbox.x} {input.bbox.y} {input.bbox.r} {input.bbox.t}}
}
---------
Ami az
input.részt illeti a példákban:Azt az előzőekben elfejeltettem elmondani, hogy a
[input this 0]tcl formához képest van egyszerűbb definiciója az inputnak:input.knobnév
Ha több inputja is van a node-unknak, akkor:
input0input1
input2
stb.
Ha visszafele akarunk haladni a gráfban, akkor írhatjuk az inputokat egymás után is:
input.input1.input0.knobnévFontos, hogy a sorban az első lesz a node-unkhoz közvetlenül csatlakozó node, utána az ahhoz csatlakozó, és így tovább.
Sziasztok....Igen...igen..sok ilyet még.....köszön(jük)öm szépen!!!
3d-s renderekkel torteno munkat nagyon meg tudja gyorsitani, ha csinaslz hozza bounding boxot, amit automatizaltak is. (igy nem kell hd bontasu szekivel szamolni es cache-elni, hanem a tenylegesen hasznos terulettel dolgozik csak, tobb reteg eseteben sokszoros gyorsulas teljesen realis)
ha a nodeview folott nyomsz egy 'x' gombot, az 'autocrop' parancs megkeresi es beallitja az aktualis read node bounding box-at. a hatterben csak annyi tortenik, hogy
- lerak egy curvetool node-ot, ami autocrop modban vegigmegy a szekin, es megkeresi a bboxot,
- es ezeket az animgorbeket bemasolja egy crop node-ba
- erdemes utana a black outside-ot bekapcsolni, mivel a crop a szelso pixelsort kifolytatja, igy a bboxon kivul kihuzodik a kep (alfa is!)
- ez viszont sokszor elrontja az alfat, ugyhogy nem szeretem, inkabb az gorbe erteket megnovelem 1-gyel (a crop mezoben '=', de kenyelmesebb a curve editor aljan beirni: curve+1)
akkor kapcsolodo kerdesem is van kapasbol:
hogy tudok a bejovo kep meretere es bboxara hivatkozni?
mint shake-ben a width, height, crop[0], crop[1] (vagy valami hasonlo)